Screengrab local not changing

New Issue Checklist

[x] Updated fastlane to the latest version
[x] I read the Contribution Guidelines
[x] I read docs.fastlane.tools
[x] I searched for existing GitHub issues

Issue Description
ScreenGrab does not change app local: We were enjoying fastlane screengrab for screenshot. Recently we upgraded our app with in-app local support where device-local gets device language or one can set on his / her choice.
Now when we are trying to take screenshots, it is taking screenshots all in one language but changing system local.
I want to know: is screengrab restart app after system local change or how it changes local to understand fix issue.
Complete output when running fastlane, including the stack trace and command used

[INSERT OUTPUT HERE]
Environment

[16:22:27]: Get started using a Gemfile for fastlane https://docs.fastlane.tools/getting-started/ios/setup/#use-a-gemfile
[16:22:27]: Generating fastlane environment output, this might take a few seconds...
🚫 fastlane environment 🚫
Stack

Key
Value

OS
debian_based stretch/sid

Ruby
2.3.1

Bundler?
false

Git
git version 2.7.4

Installation Source
/usr/local/bin/fastlane

Host
Linux Mint 18.3 Sylvia debian_based stretch/sid (4.10.0-38-generic)

Ruby Lib Dir
/usr/lib

OpenSSL Version
OpenSSL 1.0.2g  1 Mar 2016

Is contained
false

Is homebrew
false

Is installed via Fabric.app
false

System Locale

Variable
Value

LANG
en_US.UTF-8
✅

LC_ALL

LANGUAGE
en_US
🚫

fastlane files:
No Fastfile found
No Appfile found
fastlane gems

Gem
Version
Update-Status

fastlane
2.78.0
✅ Up-To-Date

Loaded fastlane plugins:
No plugins Loaded
Loaded gems

Gem
Version

slack-notifier
2.3.2

rouge
2.0.7

xcpretty
0.2.8

terminal-notifier
1.8.0

unicode-display_width
1.3.0

terminal-table
1.8.0

public_suffix
2.0.5

addressable
2.5.2

multipart-post
2.0.0

word_wrap
1.0.0

tty-cursor
0.5.0

tty-spinner
0.8.0

babosa
1.0.2

colored
1.2

commander-fastlane
4.4.5

faraday
0.13.1

unf_ext
<IP_ADDRESS>

unf
0.1.4

domain_name
0.5.20170404

http-cookie
1.0.3

faraday-cookie_jar
0.0.6

gh_inspector
1.0.3

mini_magick
4.5.1

multi_xml
0.6.0

rubyzip
1.2.1

security
0.1.3

xcpretty-travis-formatter
1.0.0

dotenv
2.2.1

bundler
1.16.0

faraday_middleware
0.12.2

uber
0.1.0

declarative
0.0.10

declarative-option
0.1.0

representable
3.0.4

retriable
3.1.1

mime-types-data
3.2016.0521

mime-types
3.1

little-plugger
1.1.4

logging
2.2.2

jwt
2.1.0

memoist
0.16.0

os
0.9.6

signet
0.8.1

googleauth
0.6.2

httpclient
2.8.3

google-api-client
0.13.6

nanaimo
0.2.3

colored2
3.1.2

claide
1.0.2

CFPropertyList
2.3.6

xcodeproj
1.5.4

plist
3.4.0

tty-screen
0.6.4

highline
1.7.10

excon
0.60.0

fastimage
2.1.1

json
2.1.0

multi_json
1.13.1

generated on: 2018-01-25

[16:22:27]: Take notice that this output may contain sensitive information, or simply information that you don't want to make public.
[16:22:27]: Open https://github.com/fastlane/fastlane/issues/new to submit a new issue ✅

Hi
Thanks for details.
1- Is snapshot and screengrab have same logic /workflow?
2- Please tell me: is application shutdown and restart for new language code or not?


Dashboard

It would be cool to have a dashboard for goth which would show the total number of login/signup trends, and maybe even the number of hits to the protected routes.

@kewlamogh i'll work on it after some bug fixes.


Use AHashMap in place of most HashMaps

This PR replaces most HashMaps with AHashMap. I did it the lazy way with type aliases, didn't do anything to rbx_xml (yet?), and haven't touched the changelogs yet, because I am tired and I want to go to bed! It's kind of invasive, and might make the library harder to use, but we do get a nice performance boost from it.
On my machine, this improves rbx_binary's "Deserialize 10,000 Parts" and "Serialize 10,000 Parts" benchmarks by ~15% and ~19%, respectively.

It's kind of invasive, and might make the library harder to use, but we do get a nice performance boost from it.

I do have some concerns about changing the reflection database to use AHashMap, since we aren't the only consumers. The only other public interface this would impact is WeakDom::into_raw though and I think it's probably fine to leak that. I don't know how many people are using that API but it's probably fine to slightly break it since we're already making a breaking change anyway.
This will impact Argon and Rojo, but those are the only ones I can think of off the top of my head. They'll already have to do a bunch of changes to update to rbx_weak_dom 3.0 though, so it's probably fine.

After some further benchmarking, using ahash in rbx_reflection is a bit of a wash. It didn't effect rbx_binary's deserialization performance at all, and if anything made rbx_binary's serialization performance worse. Good for me, fewer changelogs to touch :D


[SPARK-29701][SQL] Correct behaviours of group analytical queries when empty input given

What changes were proposed in this pull request?

This PR intends to fix a bug when empty input given in group analytical queries (e.g., GROUPING SETS). For example, a query below with empty input has a different answer between Spark and PostgreSQL:
postgres=# create table gstest_empty (a integer, b integer, v integer);
CREATE TABLE
postgres=# select a, b, sum(v), count(*) from gstest_empty group by grouping sets ((a,b),());
 a | b | sum | count
---+---+-----+-------
   |   |     |     0
(1 row)

scala> sql("""select a, b, sum(v), count(*) from gstest_empty group by grouping sets ((a,b),())""").show
+---+---+------+--------+
|  a|  b|sum(v)|count(1)|
+---+---+------+--------+
+---+---+------+--------+

In the case, we should follow the PostgreSQL answer. To fix this, this PR added a new optimizer rule to rewrite a resolved logical plan as an union query of aggregates with/without keys as follows;
scala> sql("""select a, b, sum(v), count(*) from gstest_empty group by grouping sets ((a,b),())""").explain(true)
== Analyzed Logical Plan ==
a: int, b: int, sum(v): bigint, count(1): bigint
Aggregate [a#10, b#11, spark_grouping_id#7], [a#10, b#11, sum(cast(v#3 as bigint)) AS sum(v)#5L, count(1) AS count(1)#6L]
+- Expand [List(a#1, b#2, v#3, a#8, b#9, 0), List(a#1, b#2, v#3, null, null, 3)], [a#1, b#2, v#3, a#10, b#11, spark_grouping_id#7]
   +- Project [a#1, b#2, v#3, a#1 AS a#8, b#2 AS b#9]
      +- SubqueryAlias `default`.`gstest_empty`
         +- Relation[a#1,b#2,v#3] parquet

== Optimized Logical Plan ==
Union
:- Aggregate [a#10, b#11, spark_grouping_id#7], [a#10, b#11, sum(cast(v#3 as bigint)) AS sum(v)#5L, count(1) AS count(1)#6L]
:  +- Expand [List(v#3, a#1, b#2, 0)], [v#3, a#10, b#11, spark_grouping_id#7]
:     +- Project [v#3, a#1, b#2]
:        +- Relation[a#1,b#2,v#3] parquet
+- Aggregate [null AS a#10, null AS b#11, sum(cast(v#3 as bigint)) AS sum(v)#5L, count(1) AS count(1)#6L]
   +- Project [v#3]
      +- Relation[a#1,b#2,v#3] parquet

Behaviours of the other database-like systems:
// Presto
presto:db> select a, b, sum(v), count(*) from gstest_empty group by grouping sets ((a,b),());
  a   |  b   | _col2 | _col3
------+------+-------+-------
 NULL | NULL | NULL  |     0
(1 row)

// MySQL does not have GROUPING SETS, so uses ROLLUP instead
mysql> select a, b, sum(v), count(*) from gstest_empty group by a, b with rollup;
Empty set (0.01 sec)

// Oracle & MS SQL Server have the same output
// https://github.com/apache/spark/pull/27233#issuecomment-577950755
SQL> select a, b, sum(v), count(*) from gstest_empty group by grouping sets ((a,b),());
no rows selected

NOTE: This pr also updates the existing test in OptimizeMetadataOnlyQuerySuite; it has the rollup query and this PR transforms it into a union(aggregate with keys, aggregate without keys) form. The test checks that no metadata-only query happens there, but the aggregate without keys side can be optimized by the OptimizeMetadataOnlyQuery rule then testNotMetadataOnly() fails. To avoid this case, this PR replaces the rollup query with a grouping set one.
Why are the changes needed?

For the correct SQL semantics.
Does this PR introduce any user-facing change?

No.
How was this patch tested?

UTs added.

To put a conclusion: I think this PR does fix a "correctness" issue according to the SQL standard. But as @tgravescs said in https://github.com/apache/spark/pull/27233#issuecomment-578187736 , the current behavior looks reasonable as well, and is the same with Oracle/SQL Server.
This is a very corner case, and most likely people don't care/

Could we also close the jira, too?

closed


Fixed #28071 -- ExtendsNode history initialized with context origin

When including a partial template with a block that has been extended, where the extension employs {{ block.super }}, the render phase occurs twice on the child-most extension of the included template because the history is tracking the context's origin instead of the extending node's origin.

Please let me know if you want me to add a ticket for this w/ example etc, but when I bottomed out on the cause I figured it was not worth the overhead for a one-liner.  Thanks!

Can you add a test?

I saw the test failures.  Running the existing tests w/ code changes tests all pass.  Running the test by itself passes.  Looks like something about overriding INSTALLED_APPS is breaking other tests.  Tried using modify/override_settings and context manager with(self.settings... and nothing is working so will have to dig into it more.  Will carry convo in forums/chat unless someone wants to offer a recommendation here.

I don't see anything obviously incorrect, but you could try use DIRS rather than the app dirs loader, if that's not a required aspect of the test.

That was daft of me... I had made the tests directory into a package when I was trying to get app loading working early on and never reverted it.  As it turns out, that broke everything.  Please let me know if you'd like to see anything else here.

Please let me know if any further explanation or testing is required on this matter. Thanks!

Please create a ticket that explains the issue. I think tests/template_tests/test_extends.py is probably a better place for the test considering that's the code that's modified. I think tests/template_loaders is for django/template/loaders/.

Agree that makes sense... the desired behavior in this case has to do with how the templates interact.  Will add ticket shortly.

https://code.djangoproject.com/ticket/28071

@timgraham Sorry first time committing--is next step for me to shoot a message to django-developers list asking for second review?  Thanks!

No, there's no need for that. If you like, you can help out by reviewing the other "Patches needing review" listed at https://dashboard.djangoproject.com.

Ok awesome great thanks will do certainly interested to help contribute/review where I can as time allows!

This seems to be working as a regression test:
engine = Engine(
     loaders=[
         ['django.template.loaders.locmem.Loader', {
             'base.html': "{% extends 'base.html' %}{% block base %}{{ block.super }}2{% endblock %}",
             'included.html': "{% extends 'included.html' %}{% block included %}{{ block.super }}B{% endblock %}",
         }],
         ['django.template.loaders.locmem.Loader', {
             'base.html': "{% block base %}1{% endblock %}{% include 'included.html' %}",
             'included.html': "{% block included %}A{% endblock %}",
         }],
     ]
)
template = engine.get_template('base.html')
self.assertEqual(template.render(Context({})), '12AB')

Any concerns with it?

@jdzero, any concerns with my proposed test?

@timgraham So sorry I did not respond I have been swamped and did not get any notification from github (just saw you close the ticket).  The way you implemented it is much more transparent and accomplishes the same thing.  Thank you!

Would it be possible to merge this into stable/1.11.x too?

This doesn't qualify for a backport based on our supported versions policy.

Wouldn't that bug have prevented the release in the first place?
I think ticket #28071 qualifies as a "major functionality bug", and it bites users of the most recent stable release.

My understanding is that the bug is present since 1.9 and it seems no one reported it until this PR, so I don't think it's a major issue.

1.11 is the first LTS version that has the bug in it.
And 1.11 is the last version usable until one is able to migrate from Python2.

Unfortunately, those details aren't relevant to our bug fix policy. If the issue were discovered during the 1.9 bug fix period, it would be eligible for a backport at that time.


Top 1px border is broken

Describe the bug

The top 1 px border is broken
Steps to reproduce the bug

Steps to reproduce the behavior:

Open any app (such as Settings)

Expected behavior

1 px would be normal
Screenshots

https://www.reddit.com/r/Windows10/comments/7t55ub/dear_microsoft_please_fix_the_borders/
Version Info

NuGet package version:

Windows 10 version
Saw the problem?

Insider Build (xxxxx)

May 2019 Update (18362)
Yes

October 2018 Update (17763)

April 2018 Update (17134)

Fall Creators Update (16299)

Creators Update (15063)

Anniversary Update (14393)

Device form factor
Saw the problem?

Desktop
Yes

Mobile

Xbox

Surface Hub

IoT

Additional context

I'm really not sure if this is in the scope of WinUI but as I understand it, WinUI 3 will be handling a lot more.

Sorry for the delayed response. This issue is not specifically about the UI platform, this is about the UI design in windows for non-client area recently (I personally agree with the complaint, FWIW). Can you file an issue in feedback hub and I can make sure it finds its way to the right owners?

I am 99.99% sure that it will be ignored. I've already filed an issue in feedback hub. i'll update this when i get on my own laptop

@jevansaks Here it is:
https://aka.ms/AA5i329

Thanks! I'm following up to see if I can get the feedback added to the right collection.


Add Safari & Safari on iOS 15.3 and 15.4

@mkurz triggered me to check for Safari 15.3 and subsequently finding 15.4, so here is the old issue to add them both :)
I started to write there

I only found https://support.apple.com/en-us/HT213058 so far regarding 15.3?
I would assume Safari 15.3 is much as iOS 15.3 more or less containing only fixes…
Doesn't even have an entry on https://developer.apple.com/documentation/safari-release-notes (yet).
However, there's a juicy 15.4 beta there! 🤯🤩
=> https://developer.apple.com/documentation/safari-release-notes/safari-15_4-release-notes

So as of now I would suggest adding 15.3 as a combined entry to 15.2 and adding 15.4 as it's own version :)

Not sure what is better regarding 15.4 - adding it right now or waiting until it's released 🤔
Maybe we'll be blessed with a post on webkit.org telling us which versions of TP are included like 15 to deduce what should work.

Changes in this release of Safari were included in the following Safari Technology Preview releases: 123, 124, 125, 126, 127, 128, 129.

Didn't get that for 15.2 and as of now don't have posts for 15.1 and 15.4.
But then again TP 139 really felt like a polishing release with all those fixes in the changelog, and I think was reporting as 15.4.
Also 15.4 has :focus-visible enabled like TP 138 (🎉).
Sooo maybe it would be easiest to have the current state of TP be 15.4?
… I guess in the end testing is the way to go anyway :D

Done as suggested! For now it's just the support just copies 15.2, hopefully we'll find out soon which TP features make it in.

@Fyrd Ah, 15.4 is a copy of 15.2/15.3 currently?
Would most likely be easier if 15.4 were a copy of the current TP (before the next TP is released and changes applied), because I would be somewhat confident and optimistic that at the time of writing 15.4 pretty much matches TP (139)… 0:-)

@Schweinepriester I've been informed a PR from an official source is imminent, so given that I thought I'd avoid making any assumptions. If for whatever reason that doesn't happen in the next few days we'll go back to making assumptions. :)

Check, nice 📈! :)

Gets even juicer 👀

https://twitter.com/firt/status/1488060229921218561
https://firt.dev/ios-15.4b


docs: using tool auto generate references

Signed-off-by: Jintao Zhang<EMAIL_ADDRESS>
Type of change:

[x] Docs

What this PR does / why we need it:

Use tools for automatic generation, eliminating the need for manual maintenance.
Currently, I only submit the final generated files, we need to merge them to see the effect.
Pre-submission checklist:

[ ] Did you explain what problem does this PR solve? Or what new features have been added?
[ ] Have you added corresponding test cases?
[ ] Have you modified the corresponding document?
[ ] Is this PR backward compatible? If it is not backward compatible, please discuss on the mailing list first

Codecov Report

Merging #1630 (d1ea032) into master (fa57ff5) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master    #1630   +/-   ##
=======================================
  Coverage   41.05%   41.05%
=======================================
  Files          88       88
  Lines        7526     7526
=======================================
  Hits         3090     3090
  Misses       4079     4079
  Partials      357      357

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Polymer 2 Shop, PSK or simple projects broken on Safari 8 and Safari mobile 8

Hi,
While testing my app on Safari 8 and Safari 8 mobile (real devices: iMac/iPad) I realised that my project was broken due to the following error:
TypeError: undefined is not a function (evaluating 'Object.setPrototypeOf(f,b.prototype)')
I immediately updated polymer-cli and installed a clean PSK than the Shop demo, both crash on startup while throwing the above error. I have tried to compile to ES5 as well, the error is still happening.
screenshot:

To reproduce the error, just fire up a Xcode iOS simulator version 8.
Thanks!

Seems that this row is the reason.
/cc @bicknellr

Note that Safari 8 is not on the list of officially supported browsers:
https://www.polymer-project.org/2.0/docs/browsers

@arthurevans - yes, my bad. Thanks


Create assignment.hi.md

is this ok to merge?

Review required.
@AdityaGarg00 , @innovation-platform , @EliteWarrior315 , Kindly review.

Yes


[RESOLVED] System Board Inlet Temp: Temperature is above warning threshold: >30

Problem started at 13:03:28 on 2023.08.22
Problem name: System Board Inlet Temp: Temperature is above warning threshold: >30
Host: IDRAC_83
Severity: Warning
Operational data: Current value: 31 °C
Original problem ID: 86436
Event details in Zabbix: http://<IP_ADDRESS>/tr_events.php?triggerid=23218&eventid=86436

Problem has been resolved in 1h 29m 59s at 14:33:27 on 2023.08.22
Problem name: System Board Inlet Temp: Temperature is above warning threshold: >30
Host: IDRAC_83
Severity: Warning
Original problem ID: 86436


Release Yew v0.16

Added release notes
Bumped yew, yew-macro, and yew-stdweb to v0.16
Bumped yew-components to v0.1.1

@hgzimmerman no need for a yew-router release this time. No breaking API changes :)


DocsArchive-1.0.20244.2Auto archive content

Please don't merge this PR until target archive repo PR https://github.com/OPS-E2E-PPE/docs-archive-test-target-jesong/pull/6 is merged into live branch.
Auto archive content to https://github.com/jesong/docs-archive-test-target-jesong.git

Docs Build status updates of commit 14beb22:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

.openpublishing.redirection.json
:white_check_mark:Succeeded

versioningArchiveSourceFolder/non-version/versionless.md
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel


Code of Conduct, Contributing guidelines etc.

Hi @paulcsmith.
Is there anything planned regarding a CoC or contributing guidelines (like https://github.com/thoughtbot/factory_bot/blob/master/CONTRIBUTING.md)?
How could I help with this? Would you rather use existing documents from other Thoughtbot projects, or would you use different ones?

Great idea! I think we can use the same one factory_boy uses https://github.com/thoughtbot/factory_bot/blob/master/CONTRIBUTING.md except "Ruby" -> "Crystal" of course :)
If you could submit a PR for that it'd be greatly appreciated :D

will do!

Regarding a code of conduct, this seems to be gaining traction, i.e. dry-rb are using a modified version. The full text can be found here

@citizen428 I read through your PR and I really like it. I think it could work, but I’d prefer to use the code of conduct from thoughtbot along with the contributing.me mentioned above so that ya consistent with other projects built at thoughtbot.
I think that way people contributing to projects built at thoughtbot can become familiar with the contributing guidelines across projects

@paulcsmith I see where you're coming from, I wasn't sure how much of a thoughtbot project this was. Anyway, I updated my PR to include a Markdown version of the thoughtbot CoC because I think it's good to have it as part of the repository and not only linked externally.

Good thought. Thanks @citizen428!
I’ll leave this open for now and will close once I’ve added a contributing.md


JavaScript || Script to handle the international phone number format for any countries

Handling international phone number format for any countries
Nothing will be changed, this is new independent code -
How to Run:

Get the 'International_ph_num_handling_script' folder/package from the repo
Open and launch the 'test_file.html'
Enjoy!!

Please add/delete options that are not relevant.

[x] Adding New Code
[x] Improving Code
[x] Improving Documentation

Programming Language

[x] JavaScript

:star2: Star it :fork_and_knife:Fork it :handshake: Contribute to it!
Discord server  - https://discord.gg/FXyh2S3
Happy Coding,

@codePerfectPlus  pls assign this issue to me, I will look into this.


hot reload doesn't work on Windows

pressing 'r' results in error
Error -32601 received from application: Method not found
Hot reload was rejected:
'package:flutter/src/semantics/semantics.dart': malformed type: line 2126 pos 17: cannot resolve class 'SemanticsFlag' from 'SemanticsConfiguration'
  void _setFlag(SemanticsFlag flag, bool value) {
                ^

C:\src\flutter\flutter\examples\flutter_gallery [master ≡ +4 ~3 -0 !]> ..\..\bin\flutter run
Running "flutter packages get" in flutter_gallery...  3.4s
Launching lib/main.dart on Pixel in debug mode...
Initializing gradle...                                2.7s
Resolving dependencies...                            14.2s
Running 'gradlew assembleDebug'...                   20.2s
Built build\app\outputs\apk\app-debug.apk (28.8MB).
Installing build\app\outputs\apk\app.apk...          16.1s
I/FlutterActivityDelegate( 2563): onResume setting current activity to this
Syncing files to device Pixel...                      4.5s

🔥  To hot reload your app on the fly, press "r". To restart the app entirely, press "R".
An Observatory debugger and profiler on Pixel is available at: http://<IP_ADDRESS>:8100/
For a more detailed help message, press "h". To quit, press "q".

Initializing hot reload...
Error -32601 received from application: Method not found
Hot reload was rejected:
'package:flutter/src/semantics/semantics.dart': malformed type: line 2126 pos 17: cannot resolve class 'SemanticsFlag' from 'SemanticsConfiguration'
  void _setFlag(SemanticsFlag flag, bool value) {
                ^

Try again after fixing the above error(s).
Application finished.
Terminate batch job (Y/N)? y
C:\src\flutter\flutter\examples\flutter_gallery [master ≡ +4 ~3 -0 !]> ..\..\bin\flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (on Microsoft Windows [Version 10.0.14393], locale en-US, channel master)
[√] Android toolchain - develop for Android devices (Android SDK 27.0.1)
[√] Android Studio (version 3.0)
[√] IntelliJ IDEA Ultimate Edition (version 2017.3)
[√] Connected devices

• No issues found!
C:\src\flutter\flutter\examples\flutter_gallery [master ≡ +4 ~3 -0 !]> git reflog -1
83e0ca24f (HEAD -> master, upstream/master, origin/master, origin/HEAD) HEAD@{0}: pull upstream master: Fast-forward

I've been seeing the same using flutter-tester. I don't get the full error output, but do get the "Method not found" with the same number (See #17798).


Update LICENSE

Please see https://github.com/oyejorge/less.php/issues/148

It's not that simple! Before doing any license changes, you must ask every single contributor for his/her acknowledge.

Oh ok.

How can that be done.

By asking them :smile: There are some tools out there making this process easier, e.g. https://github.com/beberlei/license-manager. I'm not sure (@oyejorge), but does less.php use or adapt code of less.js? If this is the case, less.php even can't change its license until less.js does so...

I doint think so because if it did it would use a js file. Which it doesent.

does less.php use or adapt code of less.js

The code of less.php is based entirely off of less.js. The code was translated file by file into php from js.

Oh so would the license affect us changing it here.

I carnt do https://github.com/beberlei/license-manager since I run windows 10.

Hi isent this file https://github.com/oyejorge/less.php/blob/master/lessc.inc.php based on https://github.com/leafo/lessphp/blob/master/lessc.inc.php for compatibility reasons woulden then that require the dual licence since its based on it and that file is dual lincensed for GPL3 and MIT.


Directory and Linked List exts

Added methods for looping a linked list and completely deleting a directory

Removed directory exts methods as they're useless


stake-pool: UpdateValidatorListBalance must be the sole instruction in the transaction

To ensure that merged transient accounts cannot be hijacked by secondary instructions, we enforce that the UpdateValidatorListBalance is the sole instruction in the transaction. The following suffices:

checking load_instruction_at(1, instructions_info.data).is_err() and that
the instruction is called as the top-level invocation (since no self-reentrancy exists in the program, checking that load_instruction_at(0, instructions_info.data)?.program_id == crate::id() suffices).

After an internal discussion, we think the best way to fix this is through adding the seed in the validator list.  If you want to deploy a version of the program with this change, feel free, but I can do the work to add the seed

There's another reason (apart from complexity and backwards complexity) why I think that could be a bad idea - as described earlier, we'd like to have multiple transient stake accounts. If a single transient stake account is hijacked, then all the rest need to be  to effect a seed change. Thus, an account hijack still can cause massive disruption, especially if it can occur on a regular basis.
Furthermore, having the seed in the validator list doesn't solve the actual problem - that of needing accounts to be closed to prevent stealing stake. Which is arguably the most pressing concern.
I don't see why this PR does not solve the issue satisfactorily. Would you mind sharing?

If you're thinking of having multiple transient stake accounts, your best bet is to have a start and end seed of a u64 each, and never reuse a seed ever.  That way, no problems if a transient account is ever hijacked, since the address won't ever be reused.
An approach like this limits composability and reusability with other programs.

Hmm, yes, but this particular instruction is a crank - meaning that there is no reason to call it in conjunction with other instructions or as a CPI.
Furthermore, I believe the intention is to remove this check once the runtime permits cleanly closing accounts (by resizing to 0 and handing over to system program) and the stake program is updated so that it closes accounts upon merge.
So are you saying that the new validator list seed fields should be start_u64 and end_u64?
I mean, the stake stealing attack can be easily mitigated by checking that the withdrawal and staking authority of the transient accounts are indeed the pool's PDA stake_withdrawal pubkey.

You're correct on all of that.  We don't know how this will be used later, so we may as well fix it correctly in the stake pool program first.

Furthermore, I believe the intention is to remove this check once the runtime permits cleanly closing accounts (by resizing to 0 and handing over to system program) and the stake program is updated so that it closes accounts upon merge.

Absolutely, this fix will probably take some time to spec and roll out since there's already been a lot of disagreement about the best way to do this.

So are you saying that the new validator list seed fields should be start: u64 and end: u64? I actually have a problem with that - if you stretch the start and end long enough, i.e. by creating arbitrarily many transient accounts, then you can force running into compute budget limits for update_validator_list_balance

If you create too many transient accounts, you should be able to call update_validator_list_balance multiple times for the same validator, but with different sets of transient accounts, to work within the compute limit.

I mean, the stake stealing attack can be easily mitigated by checking that the withdrawal and staking authority of the transient accounts are indeed the pool's PDA stake_withdrawal pubkey.

Absolutely, this will be part of any multi-transient account solution.

Anyway, let me know what you think regarding this being a temporary fix, if you can think of a valid reason to call update_validator_list_balance in conjunction with other instructions or as a CPI, I'll gladly relent.

Going with the above point, we know that the pool needs to check the withdraw key of the transient account, but what do we do if the withdraw key on that account is wrong?  We have to be able to create a transient stake account with a different key.  By setting the seed, we move towards something desired anyway, and mitigate the attack

Hmm, how do you propose we maintain backwards compatibility of the validator list, then? Will we go with having start_seed: u64, end_seed: u64?

If you create too many transient accounts, you should be able to call update_validator_list_balance multiple times for the same validator, but with different sets of transient accounts, to work within the compute limit.

I believe that this either requires storing an additional field - the updated_transients_pointer. I'm a bit worried if you think the direction is to maintain arbitrarily many transient stake accounts. Especially due to the current lingering observed credits merge issue.

Will we go with adding start_seed: u64, end_seed: u64?

Yes, we'll have to break backwards compatibility for this unfortunately. I'll figure something out for the testnet stake pools.  Thankfully, we're only at X

I'm a bit worried if you think the direction is to maintain arbitrarily many transient stake accounts.

We can set a limit to start if we're worried, but easiest to me would be to just have the merges start with the start_seed, do as many as possible within compute limit, and then update start_seed. Then we could potentially do arbitrarily many.  There shouldn't be a need for that, but who knows.  It might get closer to permissionless rebalancing :smile:

Especially due to the current lingering observed credits merge issue.

Do you mean the issue fixed in https://github.com/solana-labs/solana/pull/18985 or something else?

We can set a limit to start if we're worried, but easiest to me would be to just have the merges start with the start_seed, do as many as possible within compute limit, and then update start_seed. Then we could potentially do arbitrarily many. There shouldn't be a need for that, but who knows. It might get us closer to permissionless rebalancing smile

Hmm, I think this means that updating cannot happen unless merging can happen, doesn't it? And what happens if activation time exceeds a single epoch?

Do you mean the issue fixed in solana-labs/solana#18985 or something else?
ooh. Could we remove the 1 lamport requirement or significantly lower it then, dya think?

I'm with you, and that's why the no_merge flag exists on the update calls.  That, and it made some testing easier.

Could we remove the 1 lamport requirement or significantly lower it then, dya think?

Yep! I think we can go with any value once the feature is live on mainnet.  I haven't run any tests with stake pools just yet, but feel free to give it a shot and let me know what works :grin:

Hmm, but then, even without merging, the update validator list needs to walk all the transients in use to know what their current lamport values are, is that not correct?
Either this walk is done in a single transaction, or it is done in multiple transactions. With the new transaction format, I suppose one could walk in excess of 200 transients in a single tx.
If you want more, then you have to keep track in a struct variable which transients have already been accounted for in that particular walk. I'm much more partial to this being stateless since the stateful update probably requires locking some part of the pool's functions (maybe just for that validator's transients) to be accurate.
I suppose we might need to issue a new instruction to remove excess lamports once the feature becomes active, though. For now I'll set it to 0.1 lamports on our deployment s

Hmm, but then, even without merging, the update validator list needs to walk all the transients in use to know what their current lamport values are, is that not correct?

Ah yes, you're right, we'll definitely need to have a limit for that.

I suppose we might need to issue a new instruction to remove excess lamports once the feature becomes active, though. For now I'll set it to 0.1 lamports on our deployment

That should be totally reasonable

Closing this since we went with a different approach in https://github.com/solana-labs/solana-program-library/pull/2304


Hardening mechanisms MUST be used in the software produced by the project.

Hardening mechanisms MUST be used in the software produced by the project so that software defects are less likely to result in security vulnerabilities.
Hardening mechanisms may include HTTP headers like Content Security Policy (CSP), compiler flags to mitigate attacks (such as -fstack-protector), or compiler flags to eliminate undefined behavior. For our purposes least privilege is not considered a hardening mechanism (least privilege is important, but separate).

@drewroengoogle @sealesj Hey guys feel free to reprioritize this issue.


Fix: Cannot update value of attribute with reserved name when it starts empty

Hi all, first PR here 👋 .
I observed this bug on a case that I have a field with the name data and I was able to create a record and update it without any issues if the first time I create the record with a value that is not empty.
If the record is created with empty value  in the data field I cannot update it via admin.
Took me a while to understand the checks so I added a comment.
At the end, my solution was just removing the check and getattr(obj, reserved_field_name, None).
I thought about adding an or condition and check if the attribute had a value on the obj or form_data but I didn't saw the point of it. Maybe I'm missing something.

@aminalaee I reverted the fix so the case I'm hitting is clear on the tests I added.
Please take a look at https://github.com/aminalaee/sqladmin/pull/841/checks#step:8:105
This is the issue I'm trying to fix.
If the object being passed has a empty value, the field is not denormalized.


cannot connect

Hi, using this code below
var ApiURL = "https://api.eu1.echosign.com/api/rest/v5/";
var accessToken = "my token";
AdobeSignNet.RestAPI api = new AdobeSignNet.RestAPI(ApiURL, accessToken);
AdobeSignNet.AdobeObject obj = new AdobeSignNet.AdobeObject(api);
var agreements = await obj.GetAgreements();

Visual Studio just stops on the await.
Am I missing something?

Hi
Your code seems to be fine. I have just tested with same code and it is working.
I think it's async issue, is you method defined properly for async / await.
My test code is:
`private async Task ShowAgreements()
{
string apiURL = txtApiURL.Text;
string accessToken = txtAccessToken.Text;
        AdobeSignNet.RestAPI api = new AdobeSignNet.RestAPI(apiURL, accessToken);
        AdobeSignNet.AdobeObject obj = new AdobeSignNet.AdobeObject(api);

        var agreements = await obj.GetAgreements();

        foreach (var agreement in agreements.userAgreementList)
        {
            listBox1.Items.Add(agreement);
        }
    }`

Can you please give us complete method code.
Thanks

Hi, thanks for getting back to me.
I’ve got a .net class thats I’m going which has references to your code.
I’ve taken your SendDocument code and added that to my class and then calling that from a program.
I’ve made a video here > https://www.screencast.com/t/4Oxr9rEt to show whats happening.
Thanks in advance

On 30 Aug 2017, at 11:04, haseebmukhtar<EMAIL_ADDRESS>wrote:
Hi
Your code seems to be fine. I have just tested with same code and it is working.
I think it's async issue, is you method defined properly for async / await.
My test code is:
`private async Task ShowAgreements()
{
string apiURL = txtApiURL.Text;
string accessToken = txtAccessToken.Text;
    AdobeSignNet.RestAPI api = new AdobeSignNet.RestAPI(apiURL, accessToken);
    AdobeSignNet.AdobeObject obj = new AdobeSignNet.AdobeObject(api);

    var agreements = await obj.GetAgreements();

    foreach (var agreement in agreements.userAgreementList)
    {
        listBox1.Items.Add(agreement);
    }
}`

Can you please give us complete method code.
Thanks
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub https://github.com/haseebmukhtar/AdobeSign.Net/issues/3#issuecomment-325945266, or mute the thread https://github.com/notifications/unsubscribe-auth/AE70OPR0RGtgVwKIGoh7xsoCtFu_c5asks5sdTPCgaJpZM4PHEIC.

Hi,
Can not run the video. If possible can you please explain here.
Thanks

Hi,
So when I get to an await in the code the application just stops. Thats whats confusing.

On 30 Aug 2017, at 11:46, haseebmukhtar<EMAIL_ADDRESS>wrote:
Hi,
Can not run the video. If possible can you please explain here.
Thanks
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub https://github.com/haseebmukhtar/AdobeSign.Net/issues/3#issuecomment-325954210, or mute the thread https://github.com/notifications/unsubscribe-auth/AE70OOw1hedK_n06rVaa1rv5Og3QKf9Eks5sdT2cgaJpZM4PHEIC.

Hi,
Can you send your project.
Thanks

Hi,
https://drive.google.com/a/decisions.com/file/d/0Bw5zomFrY_M6aVNITjJVM3dDeWM/view?usp=sharing
See link above.
Thanks for taking time to help me

On 30 Aug 2017, at 12:06, haseebmukhtar<EMAIL_ADDRESS>wrote:
Hi,
Can you send your project.
Thanks
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub https://github.com/haseebmukhtar/AdobeSign.Net/issues/3#issuecomment-325958203, or mute the thread https://github.com/notifications/unsubscribe-auth/AE70OKqOgVINDKGmdpCvXXeONOJ3Ap9qks5sdUIggaJpZM4PHEIC.

Hi
You need to wait for async method call from console application.
Change this line
var checkConnectivity = new Esign.EsignAPI().SendDocument("https://api.na2.echosign.com/api/rest/v5/", "3AAABLblqZhDm1KQfs8KAS-HvRuy_Gvvfq5DWa0614_6HmCzu7e5dm_WSVvWccTRgkTbF3yCxHWTQeJs1gQKqOQhPQDNp2JWi", @"C:\Temp\TEST DOC.docx", "Test", "Jon.hallam@managed-desktop.com");
to
 new Esign.EsignAPI().SendDocument("https://api.na2.echosign.com/api/rest/v5/", "3AAABLblqZhDm1KQfs8KAS-HvRuy_Gvvfq5DWa0614_6HmCzu7e5dm_WSVvWccTRgkTbF3yCxHWTQeJs1gQKqOQhPQDNp2JWi", @"C:\Temp\TEST DOC.docx", "Test", "Jon.hallam@managed-desktop.com").Wait();
in static void Main(string[] args) method of your project.
Thanks

Hi jhallam3,
Is this issue is resolved.

Yes thanks for all your efforts!
Great connector!
Works really well!
Regards
Jon Hallam
On 6 Sep 2017, at 12:19, haseebmukhtar<EMAIL_ADDRESS>wrote:
Hi jhallam3,
Is this issue is resolved.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/haseebmukhtar/AdobeSign.Net/issues/3#issuecomment-327453384,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AE70OKoACHsZgbj_hLEvKAbyPp7oWX6Yks5sfn_QgaJpZM4PHEIC
.


Add site-wide setting for showing 4 or 8 decimals for quantity

Give users an option to switch between viewing 4 and 8 decimals for quantity (show 4 by default)

Don't think this is needed especially with dai, don't need that much precision on a dollar


GH-401 Update component panel when using context menu delete

Fixes #401

Applied to main (=2.1) and branch 2.0.


Fix typo

Typo: _ -> \_
In Markdown _ is used for highlighting. To simply display _, we need escape \_. Even without escaping, if we look at this page , it may seem that there is no problem.
https://docs.microsoft.com/en-us/azure/data-factory/concepts-pipelines-activities#control-activity

But, in the Japanese page, problems will arise as follows.
https://docs.microsoft.com/ja-jp/azure/data-factory/concepts-pipelines-activities#control-activity

_ is not displayed and characters are qualified with italics.
For that reason, I'm sending a Pull Request(PR) to correct this original English page. I will send PR to Japanese page if this PR accepts.

@changeworld : Thanks for your contribution! The author, @sharonlo101, has been notified to review your proposed change.


Timer seems to be not working..

Hello,
I've been trying to use your package, however, I do seem to be unable to set it up properly.
To start with, here's my setup:
 ~ php -v
PHP 7.1.8 (cli) (built: Aug 25 2017 10:11:33) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

Composer.lock contents:
...
"name": "react/promise-timer",
"version": "v1.2.0",
...

Here's a code example:
$loop = \React\EventLoop\Factory::create();

$promise = new Promise(function ($resolve, $reject) {
    $seconds = 10;
    sleep($seconds);
    $resolve("Unexpected Behavior.. Should've thrown an exception..");
}, function ($resolve, $reject) {
    $reject(new \Exception());
});

timeout($promise, 5, $loop)->then(function ($value) {
    die(var_dump($value));
})->otherwise(function (Exception $exception) {
    die(var_dump('Expected behavior..'));
});

The output:
string(53) "Unexpected Behavior.. Should've thrown an exception.."

From my understanding, I should've received the "Expected behavior.." string as a result..
Am I doing anything wrong?
Thank you in advance,
Rad

The sleep() call blocks the whole process including the loop. So, once you pass the promise to timeout(), it's already resolved.
If you want to the Promise to resolve in  10 seconds, you have to do that in a timer:
$loop->addTimer($seconds, function() use ($resolve) {
    $resolve("Unexpected Behavior.. Should've thrown an exception..");
});

@jsor, thank you for your reply!
I don't want to have the promise resolved in 10 seconds. Maybe my next example would illustrate in better what do I need.
$loop = \React\EventLoop\Factory::create();

$promise = new Promise(function ($resolve, $reject) {
    $uri = 'http://fakeresponse.dev/?sleep=10&data={"message":"Unexpected behavior."}';
    $data = json_decode(file_get_contents($uri));
    $resolve($data->message);
}, function ($resolve, $reject) {
    $reject(new \Exception());
});

$seconds = 5;
timeout($promise, $seconds, $loop)->then(function ($value) {
    die(var_dump($value));
})->otherwise(function (Exception $exception) {
    die(var_dump('Expected behavior..'));
});

Basically, the FakeResponse.dev will sleep for 10 seconds before it returns the json.However, the second argument of the timeout function sets 5 seconds expected time for the resolution of the promise. Hence, exceeding the 5 seconds should throw an exception.
From my understanding I should be getting the "Expected behavior" string.
However, I still do get the:
string(20) "Unexpected behavior."

Anyway, I am aware that I could use Guzzle/Curl timeout functionality. However, in my real-life project I am not going to be doing straight-up http requests, thus, I need something like this project.
Am I doing everything as it is supposed to?

As i said, you're blocking everything with sleep() (and file_get_contents() in your second example). So, you're reaching the timeout() call only after sleep() has blocked the whole process 10 seconds.
sleep($seconds); // <-- That line block the process for 10 seconds

When working with asynchronous code like in ReactPHP, you must ensure that everything is non-blocking. sleep()and file_get_contents()are not. If you want to do non-blocking I/O, like HTTP requests, you must use a library which supports that, eg. https://github.com/clue/php-buzz-react.

Thank you for your help. I've hoped that this will work no matter the circumstances (blocking or non-blocking function calls).


Add arm64/aarch64 support

Fixes https://github.com/lima-vm/alpine-lima/issues/26.
This introduces an additional ARCH value that defaults to the output of uname -m. e.g. x86_64, aarch64.
~I contemplated accepting aarch64 as value instead  of arm64 but it requires more code changes. I opted for the easier way out.~

Are you sure the aarch64 image actually works? syslinux is the boot loader used by Alpine, and without it the ISO doesn't load for me (using Lima):
Boot failed: Could not read from CDROM (code 0004) Booting from Hard Disk...
Boot failed: not a bootable disk
Booting from ROM...
iPXE (PCI 00:01.0) starting execution...ok iPXE initialising devices...ok
iPXE 1.20.1+ Cg4bd0) — Open Source Network Boot Firmware — http://ipxe.org Features: DNS HTTP iSCSI TFTP AoE ELF MBOOT PXE bzlmage Menu PXEXT
net0: 52:55:55:66:d7:cd using virtio-net on 0000:00:01.0 (open) [Link :up, TX:0 TXE:0 RX:0 RXE:01
Configuring (net0 52 :55 :55 :66 :d?:cd)..... ok
net0: <IP_ADDRESS>/<IP_ADDRESS> gw <IP_ADDRESS>
Nothing to boot: No such file or directory (http://ipxe.org/2d03el3b) No more network devices
Booting from Floppy...
Boot failed: could not read the boot disk
No bootable device.

Are you sure the aarch64 image actually works? syslinux is the boot loader used by Alpine, and without it the ISO doesn't load for me (using Lima):

My bad, I did not try out the lima and run targets but I successfully used the generated iso with Lima.
I will verify that.

Are you sure the aarch64 image actually works? syslinux is the boot loader used by Alpine, and without it the ISO doesn't load for me (using Lima):
Boot failed: Could not read from CDROM (code 0004) Booting from Hard Disk...
Boot failed: not a bootable disk
Booting from ROM...
iPXE (PCI 00:01.0) starting execution...ok iPXE initialising devices...ok
iPXE 1.20.1+ Cg4bd0) — Open Source Network Boot Firmware — http://ipxe.org Features: DNS HTTP iSCSI TFTP AoE ELF MBOOT PXE bzlmage Menu PXEXT
net0: 52:55:55:66:d7:cd using virtio-net on 0000:00:01.0 (open) [Link :up, TX:0 TXE:0 RX:0 RXE:01
Configuring (net0 52 :55 :55 :66 :d?:cd)..... ok
net0: <IP_ADDRESS>/<IP_ADDRESS> gw <IP_ADDRESS>
Nothing to boot: No such file or directory (http://ipxe.org/2d03el3b) No more network devices
Booting from Floppy...
Boot failed: could not read the boot disk
No bootable device.

Your boot log seems qemu-system-x86_64 ,  not qemu-system-aarch64

Your boot log seems qemu-system-x86_64 , not qemu-system-aarch64

Ah yes, thanks for pointing that out (I've just being trying to get things to work using u-boot instead of syslinux, not realizing my mistake).
The lima.sh script needs to specify the arch as well; let me try again.

successfully used the generated iso with Lima

Indeed, it does work with lima, after some more fixes to lima and iso targets:
diff --git Makefile Makefile
index 2e29667..da7de73 100644
--- Makefile
+++ Makefile
@@ -38,13 +38,13 @@ nerdctl-$(NERDCTL_VERSION)-$(ARCH):

 .PHONY: lima
 lima:
-       ALPINE_VERSION=$(ALPINE_VERSION) EDITION=$(EDITION) ./lima.sh
+       ALPINE_VERSION=$(ALPINE_VERSION) EDITION=$(EDITION) ARCH=$(ARCH) ./lima.sh

 .PHONY: run
 run:
-       qemu-system-x86_64 \
+       qemu-system-$(ARCH_ALIAS) \
                -boot order=d,splash-time=0,menu=on \
-               -cdrom iso/alpine-lima-$(EDITION)-$(ALPINE_VERSION)-x86_64.iso \
+               -cdrom iso/alpine-lima-$(EDITION)-$(ALPINE_VERSION)-$(ARCH).iso \
                -cpu host \
                -machine q35,accel=hvf \
                -smp 4,sockets=1,cores=4,threads=1 \
diff --git lima.sh lima.sh
index 4d5cdc4..2ce85d2 100755
--- lima.sh
+++ lima.sh
@@ -2,9 +2,10 @@
 set -eu

 cat <<EOF >"${EDITION}.yaml"
+arch: "${ARCH}"
 images:
-- location: "${PWD}/iso/alpine-lima-${EDITION}-${ALPINE_VERSION}-x86_64.iso"
-  arch: "x86_64"
+- location: "${PWD}/iso/alpine-lima-${EDITION}-${ALPINE_VERSION}-${ARCH}.iso"
+  arch: "${ARCH}"
 mounts:
 - location: "~"
   writable: false

I do not get a working console with it, but that is really just a debugging thing when the image doesn't work with Lima, so maybe we can ignore this for now.

Looks good, but could you squash commits?
Thanks

Looks good, but could you squash commits? Thanks

Done


[hardwrap addon] Minor fix for lines starting with spaces in non-forceBreak mode

Fixes wrapping behavior for lines like:
   This line withAVeryLongWordThatIsGreaterThanColumn and words after it.

Yes, that works for me. Thank you.


Question - how to differentiate between tabs

Hello there thanks for this awesome tool.
How Do chrome maintain connections between tabs ? I want to differentiate between tabs connection when using proxies. So I want to know when first tabs is doing request and when second tab is doing other requests. Problem is because one page may contain multiple resources but for given tab

Hey , did you got the solution? I am also having similiar problem.. hardly any satisfying solution is found

Going with pupeteer-cluster or just using one tab and running whole browser with one proxy was my solution to this


Exception Handling in C++ (file added)

Description 📜
This document explains about Exceptions in C++ and how they are handled.
Fixes # 966

Type of change 📝

[x] Documentation (Content Creation in the form of codes or tutorials)

Domain of Contribution 📊

[x] C/CPP

Checklist ✅

[x] I follow Contributing Guidelines & Code of conduct of this project.
[x] I have performed a self-review of my own code or work.
[x] I have commented my code, particularly in hard-to-understand areas.
[x] My changes generates no new warnings.
[x] I'm GWOC'21 contributor

Thanks for the review. can you please suggest how to change it. I mean, need to add another pull request.

Thanks for the review. can you please suggest how to change it. I mean, need to add another pull request.

don't make another PR, just do changes in this one itself.


Change or re-publish npm package

Likely need to work with npm team to figure this out – but ideally, npm i brain installs this package vs. the old one.

After talking to the npm support, the result is the old package will remain in the current state. The current owner wants to keep her module in that state.
After discussing how to name this package, we decided to name it brain.js. So, I npm published it under the brain.js name on npm. :rocket:
@harthur-org/devs  If any of you wants to have superpowers on npm, feel free to :bell: me and I will npm owner add you. :grin:


Enforce Name Convention

Description
Enforce file naming convention as well as class name convention to code base. Also fixes RootReducer.ts
Type of change

[X] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] This change requires a documentation update
[X] Code quality improvements

Checklist
Please delete options that are not relevant.

[X] I have tested this code
[X] I have updated the documentation

Pull Request Test Coverage Report for Build 5060

181 of 226 (80.09%)  changed or added relevant lines in 79 files are covered.
39 unchanged lines in 3 files lost coverage.
Overall coverage decreased (-0.02%) to 39.904%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

src/commons/controlBar/ControlBarAutorunButtons.tsx
2
3
66.67%

src/commons/repl/Repl.tsx
1
2
50.0%

src/commons/sideContent/SideContentAutograderCard.tsx
2
3
66.67%

src/commons/workspace/Workspace.tsx
5
6
83.33%

src/pages/academy/grading/Grading.tsx
5
7
71.43%

src/pages/createStore.ts
0
3
0.0%

src/commons/sideContent/SideContentVideoDisplay.tsx
1
6
16.67%

src/pages/academy/sourcereel/Sourcereel.tsx
10
15
66.67%

src/pages/sourcecast/Sourcecast.tsx
9
14
64.29%

src/commons/application/reducers/RootReducer.ts
0
6
0.0%

Files with Coverage Reduction
New Missed Lines
%

src/commons/assessmentWorkspace/AssessmentWorkspaceGradingResult.tsx
1
45.45%

src/pages/createStore.ts
1
0%

src/components/academy/game/story-manager/story-manager.js
37
2.65%

Totals

Change from base Build 5057:
-0.02%

Covered Lines:
5742

Relevant Lines:
12759

💛  - Coveralls


Buggy Readme scrolling

Not exactly how / what is happening, but text/images are clipping while scrolling. Super weird.

I see it too. It’s an HTML cell that is changing layout based on the safe area changing. I thought I removed top/bottom from UICollectionViewCell content view layout.
https://github.com/rnystrom/GitHawk/blob/master/Classes/Issues/Comments/Html/IssueCommentHtmlCell.swift
https://github.com/rnystrom/GitHawk/blob/master/Classes/Views/UICollectionViewCell%2BSafeAreaContentView.swift
I’ll have to poke around at this.
Sent with GitHawk


Update bindgen version & fix some cache issue

Make sure these boxes are checked! 📦✅

[x] You have the latest version of rustfmt installed
[x] You ran cargo fmt on the code base before submitting
[x] You reference which issue is being closed in the PR text

closes #519  and fixes #447

@ashleygwilliams I think the PR is ready，and @csmoe has reviewed my code，please check and merge

closing in favor of https://github.com/rustwasm/wasm-pack/pull/554


Update github actions

Codecov Report

Merging #43 (59d20da) into master (8fb4868) will not change coverage.
The diff coverage is n/a.

 Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.


Missing data for scenario SAEZ_test_17 ('width' was not found): scenario skipped

When I try to run the code below('02_labeling.ipynb'),
config = ExportConfig()
config.dataset_name = "train_dataset"
config.output_directory = "data"
config.add_dataset_for_export(dataset_name="SAEZ_test", # The name of the input dataset
                              dataset_folder = "scenarios", # The folder where the input dataset should be
                             dataset_type = DatasetTypes.EARTH_STUDIO) # Type of dataset, either REAL or EARTH_STUDIO for now.
# Once the configuration is exported, export can be started
export_datasets(config)

I get the error Missing data for scenario SAEZ_test_17 ('width' was not found): scenario skipped, then I find this is because of a function called load_data  in the src\ges\ges_dataset.py,
        if self.loc_path is not None:
            with open(self.loc_path) as f:
                self.data = json.load(f)
            self.width = self.data['width']  # Camera sensor size (pixel number)
            self.height = self.data['height']  # Camera sensor size (pixel number)
            self.size = self.data["numFrames"] + 1

I print self.data, and its contents are,
{'SAEZ': {'17': {'A': {'position': {'x': 2730400.3795707948, 'y': -4460102.532789247, 'z': -3639013.935827479}, 'coordinate': {'latitude': -34.83265062667455, 'longitude': -58.525726911995804, 'altitude': 20.0}}, 'B': ...

It seems that the file input has no attribute called 'width' and 'height'.
How I can solve this problem?

When I try to run the code below('02_labeling.ipynb'),
config = ExportConfig()
config.dataset_name = "train_dataset"
config.output_directory = "data"
config.add_dataset_for_export(dataset_name="SAEZ_test", # The name of the input dataset
                              dataset_folder = "scenarios", # The folder where the input dataset should be
                             dataset_type = DatasetTypes.EARTH_STUDIO) # Type of dataset, either REAL or EARTH_STUDIO for now.
# Once the configuration is exported, export can be started
export_datasets(config)

I get the error Missing data for scenario SAEZ_test_17 ('width' was not found): scenario skipped, then I find this is because of a function called load_data in the src\ges\ges_dataset.py,
        if self.loc_path is not None:
            with open(self.loc_path) as f:
                self.data = json.load(f)
            self.width = self.data['width']  # Camera sensor size (pixel number)
            self.height = self.data['height']  # Camera sensor size (pixel number)
            self.size = self.data["numFrames"] + 1

I print self.data, and its contents are,
{'SAEZ': {'17': {'A': {'position': {'x': 2730400.3795707948, 'y': -4460102.532789247, 'z': -3639013.935827479}, 'coordinate': {'latitude': -34.83265062667455, 'longitude': -58.525726911995804, 'altitude': 20.0}}, 'B': ...

It seems that the file input has no attribute called 'width' and 'height'. How I can solve this problem?

I have solved this problem. I mistake the .json file, which is generated by google earth studio.


Develop

changes
Subscribing to new block header event, fetching block by hash concurrently, along with txhash

Added database migration & model i.e. go struct.


Multiple computers on one account

Is it possible to spam from multiple computers with one account?

Yes, this shouldn't be a problem. Just make sure to not copy any files from the /addr folder onto multiple computers or you might experience some minor bugs.


[Fix] Convert nodes to RST nodes before comparing

Convert nodes in contains functions to RST before comparing

Fixes #1422

@eddyerburgh is this change not needed in shallow as well?

@ljharb Yes, you're right. I've only been implementing mount so haven't looked into shallow. I'll add the changes now

It was already implemented for contains in ShallowWrapper, so I refactored contains in ReactWrapper.
I also realized containsAllMatchingElements and containsAnyMatchingElements call containsMatchingElement, so I removed the unncessary calls to containsMatchingElement.
Finally, while I'm here, in ReactWrapper.contains there's no check that the node/nodes is a React element. Should I add a test and write a check, like there is in ShallowWrapper.contains?

I also realized containsAllMatchingElements and containsAnyMatchingElements call containsMatchingElement, so I removed the unncessary calls to containsMatchingElement.

This was done intentionally, so there couldn’t be any drift between how these three methods worked - please keep them linked.

In mount, someone might pass a DOM node; I’m not sure what the best solution is there.

so I removed the unncessary calls to containsMatchingElement

Sorry, I meant that I removed the unnecessary calls to elementToNode. They are all still linked.

gotcha, sounds good then :-)

Thanks @ljharb . Is there anything else you need me to do to get this merged?
Also, do you know when this will be released?

@eddyerburgh at the moment, you're good; i'm waiting for other collaborators to review it first.
After it's merged, it will be released whenever we're ready to publish the next one :-) hopefully soon.

The following packages are now released:

enzyme v3.4.0
enzyme-adapter-react-16 v1.2.0
enzyme-adapter-react-16.3 v1.0.0
enzyme-adapter-react-16.2 v1.0.0
enzyme-adapter-react-16.1 v1.0.0
enzyme-adapter-react-15 v1.0.6
enzyme-adapter-react-15.4 v1.0.6
enzyme-adapter-react-14 v1.0.6
enzyme-adapter-react-13 v1.0.4
enzyme-adapter-utils v1.5.0


Running cross and cargo builds for different targets breaks incremental compilation

When building a project for a couple of different targets, one within cross and one outside, swapping targets seems to cause the whole project to rebuild. I'm not entirely sure of the mechanism, but, suspect it is either related to changes in the profile (per https://github.com/rust-lang/cargo/issues/4961) or different compiler versions. This would seem to imply the profile is project-global rather than per-target and I haven't dug into this at all.
In case anyone else runs into this, if you only have one target under cross you can work around the issue by placing the project in a workspace then building natively (via cargo build) from the workspace folder and via cross in the project folder (as the docker container cannot see up to the workspace directory) so that the target directories are split, in which case incremental builds work properly. If you need more than one cross target, I'm not sure there's a great option, maybe propagating sccache config / files into the cross container :-/

In case anyone else runs into this, I you only have one target under cross you can workaround this by placing the project in a workspace then building natively (via cargo build) from the workspace folder and via cross in the project folder (as the docker container cannot see up to the workspace directory) so that the target directories are split, in which case incremental builds work properly. If you need more than one cross target, I'm not sure there's a great option, maybe propagating sccache config / files into the cross container :-/

Another workaround is to use custom target directory (--target-dir) when build with cross

Note this only affects images with build scripts, I believe. I've tried compiling in the two following cases:
$ git clone https://github.com/cross-rs/rust-cpp-hello-word
$ cd rust-cpp-hello-word
$ cross run --target x86_64-unknown-linux-gnu
   Compiling cc v1.0.73
   Compiling hellopp v0.1.0 (/project)
    Finished dev [unoptimized + debuginfo] target(s) in 2.48s
     Running `/linux-runner x86_64 /target/x86_64-unknown-linux-gnu/debug/hellopp`
Hello, world!
$ cross run --target armv7-unknown-linux-gnueabihf
   Compiling hellopp v0.1.0 (/project)
    Finished dev [unoptimized + debuginfo] target(s) in 0.51s
     Running `/linux-runner armv7 /target/armv7-unknown-linux-gnueabihf/debug/hellopp`
Hello, world!
$ cargo run
   Compiling cc v1.0.73
   Compiling hellopp v0.1.0 (/home/ahuszagh/Desktop/cross/rust-cpp-hello-word)
    Finished dev [unoptimized + debuginfo] target(s) in 2.71s
     Running `target/debug/hellopp`
Hello, world!
$ cross run --target armv7-unknown-linux-gnueabihf
   Compiling cc v1.0.73
   Compiling hellopp v0.1.0 (/project)
    Finished dev [unoptimized + debuginfo] target(s) in 2.07s
     Running `/linux-runner armv7 /target/armv7-unknown-linux-gnueabihf/debug/hellopp`
Hello, world!
$ cross run --target x86_64-unknown-linux-gnu
   Compiling hellopp v0.1.0 (/project)
error: failed to run custom build command for `hellopp v0.1.0 (/project)`

Caused by:
  process didn't exit successfully: `/target/debug/build/hellopp-3a1e8134447a8a4c/build-script-build` (exit status: 1)
  --- stderr
  /target/debug/build/hellopp-3a1e8134447a8a4c/build-script-build: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by /target/debug/build/hellopp-3a1e8134447a8a4c/build-script-build)
$ cross run --target armv7-unknown-linux-gnueabihf
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
     Running `/linux-runner armv7 /target/armv7-unknown-linux-gnueabihf/debug/hellopp`
Hello, world!

Meanwhile, cargo init --bin hello and then using the same steps compiles fine. This also seems to have an issue with invalidating builds for the same target.
Note that with a build.rs dependency, it seems it only invalidates on the cross build after cargo build, but not after. cargo run and then cross run --target x86_64-unknown-linux-gnu re-builds the cc, but not if I add a cross run --target armv7-unknown-linux-gnueabihf in between.

FYI: we've added documentation for sccache support, so this is at least done.

Hey everyone, when is this expected to be released? It would help me clean up some scripts!

There's no plan for a 0.2.5 release right now, we're aiming for 0.3.0, but the time table is not set.
For now, consider using cross from the main branch. If someone wants to implement 0.2.5 from  https://github.com/cross-rs/cross/tree/v0.2.4 and only including #947 I'd be happy to do a release.
shouldn't be too hard


Tutorials use hard coded strings instead of using nameof

I believe the recommended approach is to use nameof, and dotnet new uses it but the tutorials ask us to replace it with hard coded strings!
Example: https://github.com/aspnet/Docs/blob/f6333f838ab33e011c745a5bb75118cc0a003410/aspnetcore/data/ef-mvc/intro/samples/cu/Controllers/StudentsController.cs#L251

In this particular example, nameof is preferred. Feel free to submit a PR to fix this.

Almost all the controllers have this issue that's why I opened an issue (otherwise I'd be submitting the fix as usual :D)
I may submit a PR spanning these controllers in few hours or tomorrow! I hope fixing other files will be preferred as well..

As a general rule of thumb, nameof is preferred over magic strings referencing a member of the class.

@badersur  don't change any of the template generated code such as
Example: https://github.com/aspnet/Docs/blob/f6333f838ab33e011c745a5bb75118cc0a003410/aspnetcore/data/ef-mvc/intro/samples/cu/Controllers/StudentsController.cs#L251

Thanks for the rule :)
Now I'm thinking that these magic strings could be discussed in the tutorials and I can't know where it's used and whether it's safe to change them! I think it is safer to just change it where I find it (https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/crud)

@Rick-Anderson I should not change any thing?!
In VS2017, my auto-generated code uses nameof and the one you referenced uses the magic strings so I'm not sure about the issue

If the scaffolder is using nameof, we should change the code to match the scaffolder.

Now I get it :)

If the scaffolder is not using nameof, we should open a bug in https://github.com/aspnet/scaffolding

I found that dotnet new, VS scaffolder and aspnet-codegenerator are using nameof (not sure if vs uses aspnet-codegenerator behind the hoods!)

Yes, it uses the same scaffolder.

Nice! Thanks for letting me know about this. I've been thinking about it for a while :)
Should I use fixed #4098 in the PR message to close this issue or keep it open because I see you adding it to Backlog milestone?

fixed.


#1901 add cancel pop up on CNN jobs & summary

https://github.com/rfcx/arbimon/assets/162116983/61c169ef-8c56-47e0-894a-87ab04d5516d
https://github.com/rfcx/arbimon/assets/162116983/5f647be2-86fe-4d0d-95e5-ae4b3760f6af

I think the modal should have been a separate component that is import-able onto those 2 files.

Already fix 😀


Distributed Approach: 3% of messages lost

Hello guys,
When we have less than 5.000 messages / minutes, it works fine ...
But as soon as the traffic increase, I got some message lost (~3%)
Description

I pushed 40.000 messages in the queue.
The RabbitMQ receiver (Distributed Approach) received the 40.000 messages verified by summing the 9 log lines corresponding to
https://github.com/Stratio/Spark-RabbitMQ/blob/8d485890e7e0ea6ee03faddfd1ad80e10840af14/src/main/scala/org/apache/spark/streaming/rabbitmq/distributed/RabbitMQRDD.scala#L217
but than, if I count the number of message in my RDD, rabbitMQStream.count() I got only 39.843 messages ...
No error in the logs ! I have no idea where my missing lines are :/

I tried to play with all the options (ackType, fairDispatch, prefetchCount, maxReceiveTime, maxRate, levelParallelism, maxMessagesPerPartition & backpressure). None fixed the problem.
Has anyone encountered the same error and how did you fix it ?
BTW, the old Receiver-based Approach works fine !!!
Duplicate of #57 ?

actType = basic
fairDispatch = true
prefetchCount = 100

fixes the problem


Connor - Time_Series_Analysis_and_Forecasting

Module under folder Time_Series_Analysis_and_Forecasting

N1:
################################################################################
# Initial setup
################################################################################

# Setup gravity force function f_g(t,u) where u = (v_x, v_y, p_x, p_y)
g = -9.8 # m/s
def f_g(t, u):
    return np.array([0, g, u[0], u[1]])

# Setup initial conditions (velocity (100,100) m/s at position (0,0))
u0 = np.array([100, 100, 0, 0])

# Start at time 0 and go to time 10, collect every Δt = 0.01
t0 = 0
t1 = 200
dt = .1

I think you mean to set t1=10?
You might want to consider breaking this code cell into several smaller code cells, and converting the in-line comments to jupyter notebook markdown.  I think it might help the students slow down and think about each portion of the code if they have to execute multiple cells to get a result, especially since a student is not required to alter this code block to make it run.  Another thing that might help the students slow down and think, is if you ask them to uncomment lines of code to make the cell run correctly.
The units on the color bar for Figure 1 also don't make sense to me.  If I am simulating the code from t=0 to t=200, why does the colorbar axis go to 20?  A brief explanation of how you are handling the units might be helpful.

"If we set the angle to 45, the initial velocity to 21, the mass to 1, the drag to .5, the area to .1, and the density to .1, we get landing at roughly x=40."

It may be worth adding a comment that there are other solutions possible.

Now, in reality each of these measurements would be polluted with some amount of noise due to errors in the measurement or some unaccounted for effect. With this in mind, let's add some Gaussian noise to our measurements relative to their average.

As an instructor, I would want to add one more cell that calculates the uncertainty in the prediction from the model.  This can be done fairly easily just by using Monte Carlo sampling for the model parameters and doing a bit of a sensitivity analysis.  Maybe it could go into the appendix?

Overall time to completion, about 20 minutes.

N2:

Basic concepts
Some of the basic ideas that are of interest in time series data are the following:
Trends: Is there a general direction of the data?
Seasonality: Is there a trend that repeats itself on a fixed schedule?
Cyclical component: Is there a trend that repeats itself outside of a fixed schedule?
Irregular variation: Are there unpredictable and erratic variations in the data?
Autocorrelation: Are observations at a point in time usually similar to observations at a previous point of time (e.g. an observation at time 𝑡 is always similar to an observation at 𝑡−1)?

Here, it may be helpful to either embed pictures giving examples of the different patterns, or add hyperlinks to examples.  I'm only a bit familiar with this type of time series analysis, and the nuance between autocorrelation and seasonality or cyclical component is a little lost on me (isn't there always going to be autocorrelation any time the data has some frequency component?)
For Problem 1: I struggled with this one.  I reused the
plt.close('all')
seasonal_decompose(test_launch['Drag coefficient'], model='additive',period=4).plot().suptitle("Additive",y=1)
plt.tight_layout()
plt.show()

code and adjusted the period value from 1 to 20 in increments of one.  Some things popped up: first, I can't make the period larger than a certain number, which I think comes from the test_launch = launches[20] code line, but explicit confirmation of this in the notebook would be nice.  Also, I was able to get very good periodicity in the Seasonal plot, with almost no change in the Trend plot.  Are there some helpful comments that would help students know what to look for to improve their results?

The main difference between them is the resid plot which represents the "residual error," or the error component of the decomposition. Though the size of this error is not important for our current case, we don't want it to have any noticeable pattern, as this would indicate that it is not erratic and unpredictable. For this reason, let's stick with the additive decomposition.

I would suggest moving this discussion of residual error up higher in the notebook, to the first time students encounter it.  There are several cells that produce residual error plots without any explanation.

If the variance of the series is constant, the size of the seasonal peaks are constant through time.
Let's compare this in our series by looking at the variance of the height and the area over time.
This would be to consider the sample variance $\bar{\sigma}$:
$\bar{\sigma}k = \frac{1}{k}\sum{i=2}^k (u - \hat{u}_k)$
for $2 \leq k \leq N$.

The meaning of $u$ is defined earlier to be the mean of the series.  But then what is $\hat{u}_k$?  I figured out that it is the mean of the first k values, but it may be worth explicitly stating and not assuming that students are familiar with the definition of variance.

Time to complete: about 1 hr
I very much like this notebook.  You touched on many of the concepts I first learned during my 600 level Random Variables class, and did so in a very intuitive way.  Well done. :)

I've incorporated the changes to notebook 1 except for the parameter uncertainty (just for sake of time). I may be able to add that next week. Thanks for all the great feedback!

I've also incorporated the changes recommended in notebook 2. I included a plot illustrating some of the concepts and moved the description of the residual plot up. Thanks for catching my typo with the mean and variance discussion!

N3:
Suggestion: After this code block
# Load our launch data
data_location = "https://raw.githubusercontent.com/GDS-Education-Community-of-Practice/DSECOP/connor_module/Time_Series_Analysis_and_Forecasting/launches.csv"
all_launches = pd.read_csv(data_location, index_col="Time (s)")

# Split into individual launches
split_indices = np.where(all_launches.index[1:] - all_launches.index[0:-1] < 0)[0].tolist() # Find where time decreases (signifies different launch)
split_indices = [0] + split_indices + [all_launches.shape[0]]
launches = [all_launches.iloc[split_indices[i]+1:split_indices[i+1]] for i in range(100)]

I suggest adding a code cell all_launches.head() so that students are reminded of what data features are actually in the dataset before they get to Problem 2 where they need to use those additional features.

"An feedforward neural network is a function that was designed to mimic biological neural networks. It can be written as simply "

Grammar: "A feedforward (...)"
# Pass input x into first layer of size 3 x 2
y_1 = keras.layers.Dense(3,activation="tanh")(x)

# Pass middle or "hidden" layer into output
y   = keras.layers.Dense(1,activation="tanh")(y_1)

I suggest linking to Keras documentation here for how to "daisy-chain" the layers.  To my knowledge, this is one of the only python libraries where the function arguments use two sets of parenthesis: function(function_params)(function_input) rather than function(function_input, function_params).  Since you ask students to build their own models later on, it might be worth emphasizing this point.
keras.utils.set_random_seed(0)

# Take the first quarter of the data (stationary)
original_distance = test_launch["Distance (m)"].shift()
distance = test_launch["Distance (m)"] - test_launch["Distance (m)"].shift()
quarter_distance = np.array(distance.iloc[1:17])
quarter_height = np.array(test_launch["Height (m)"].iloc[1:17])

# Organize the data for our recurrent neural network
k = 2
distance_in = []
distance_out = []
for i in range(len(quarter_distance)-k):
 # Take k samples at time t_i ... t_{i+k-1}
 distance_in.append(quarter_distance[i:i+k].reshape((k,1)))
 # Get function output at time t_{i+k}
 distance_out.append(quarter_distance[i+k])

distance_in = np.array(distance_in)
distance_out = np.array(distance_out)

I suggest putting this portion into its own code cell, then making a markup cell that explains you are going to create a new model and retrain before the remaining code.  Since transfer learning is a common technique to improve results from a NN, making it clear that you are training a model from scratch using the adjusted data will help keep students from having a fuzzy concept of what is happening in this notebook, especially since you reuse the same architecture twice.
# Make simple many to one model (input 2 samples of size 1)
x = keras.layers.Input(shape=(k,1))
y = keras.layers.SimpleRNN(10,activation="tanh", return_sequences=True)(x)
y = keras.layers.SimpleRNN(1,activation="linear", return_sequences=False)(y)
distance_model  = keras.Model(inputs=x,outputs=y)

# Train model
distance_model.compile(
    optimizer = keras.optimizers.Adam(),
    loss = keras.losses.MeanSquaredError()
)
history = distance_model.fit(
    distance_in,
    distance_out,
    batch_size=10,         # The training takes groups of samples (in this case 10 samples at a time)
    epochs=2000,           # The number of times to iterate through our dataset
    validation_split = 0,  # Use 0% of data to check accuracy
    verbose=0,             # Don't print info as it trains
    callbacks=[TqdmCallback(verbose=0)]
)

I also suggest putting the above into its own code cell, to help students find which part of the code is easiest to reuse for their own models.

" (...) the distance prediction go backward!"

Grammar: "prediction goes backwards" or "predictions go backward"
Problem 3: The theme of this task is data manipulation (compared to the rest of the notebook, which is non-linear time series regression), and what students will practice in this exercise is how to parse a Pandas Dataframe.  However, this is not information that is explicitly covered elsewhere in the notebook.  I am admittedly bad at reading/remembering where things are, and had to go back and forth through the notebook several times to find where the test_launch = launches[20] was defined.  It feels slightly cumbersome.  So as an instructor, I would try to provide at least some of the following information for my students in this notebook:

Explicitly tell student how many launches are in their dataset, and how long each launch is both in seconds and number of samples.  This is never explained; N2 just states "A large number of these runs" and N3 just shows/explains how to split them up based on the time value.
Explicitly state why launch 20 is used as the test case (as opposed to the first launch, or the last launch), and why we are ignoring the rest of the data for so long
Explicitly state why it looks like the notebook only uses the first 1/2 of the launch time for training the model when the drag force is most visible after this point.
Explicitly separate out the data manipulation into its own cell and use the ## Markdown to create a notebook section so that students can go back and find where this happened easily for Problem 3
Hyperlink to a Pandas data frame cheat sheet so that they can use some of the plotting options and table options as needed

Suggestion: I love towardsdatascience.com, but since they paywall after a few articles, you might also want to include a free references in your appendix.  I liked this one: https://neptune.ai/blog/time-series-prediction-vs-machine-learning
Suggestion:  The way that the notebook is structured, it is difficult to go back and rerun cells to see how tweaking one variable changes something else.  For example, if I am copy-pasting code and then I update k during problem 3, I can't go back and rerun problem 1 easily.   I would suggest providing additional template code for the programming problems that encourages students to rename their own variables instead of directly copying-pasting, either by providing variable names for them in a template (k becomes my_k_value, distance_model becomes problem_1_model) or wrapping your earlier code into functions that helps keep the workspace tidy.
Suggestion: You ask the students to tweak model hyperparameters, but other than qualitatively inspecting the plots, don't give them a good quantitative metric for seeing if their tweaks improve the model or not.  This could be easily added to the plotting code, which they will then presumably copy-paste for their own solutions.  You may even want to give them a pre-defined plotting function our_plotting_function that they can call, since the point of the notebook is not to have them practice plotting but practice time series analysis.  This would help increase code readability, reuse, and keep workplace variables tidy.

My main comment is that for the first two-thirds+ of the notebook, the failure of the example RNN models to correctly predict the launch data risks demonstrating to students that an RNN in general is not a good choice for "real" time-dependent data analysis.  The notebook also leaves it to a student's skill as a data science engineer to get good results by the end of the notebook when they have never seen this model "work" successfully on launch data.  The example you give with the sin(x) data shows increasing the length of the time analyzed as the solution for the RNN model, so removing the time dependence for the launch data later in the notebook is not an intuitive choice for students.  Finally, the sin(x) data is periodic--which does a good job of leveraging the recurrent connections--while the launch data is not periodic (so why then is a RNN a better choice than a vanilla FCNN for the launch data?  The argument about fewer model parameters due to the "looping" evaporates).
So, I'm going to pull a "Reviewer 2" on you and state that RNNs as presented in this notebook are generally considered to be a poor choice for time series data because the RNN is going to learn a frozen distribution even while considering multiple time steps at once.  It should be made clear to the students that the reason the RNN works for the example sin(x) data is because the model learns the entire periodic nature of the data.  The launch data (as presented in the example code) requires the RNN to predict two different half-parabolas, one of which it has never seen before.  This is fine if you want students to learn how a model can fail to generalize, but if the point is that an RNN can in fact accomplish this task, then this feels like a backwards way to do it.  The notebook clearly improves the results by introducing stationarity, but the predicted data in the early part of the notebook is symmetric around the training-testing data split point because the model has only learned one of the two half-parabolas and then mirrored it around the split point.
I think a major improvement would be replacing the sin(x) data with the "parabolic motion without drag" data created in N1.  This data is close enough to the programming tasks assigned to the students that they can lift the thought process (such as stationarity) and repeat it fairly closely for the launch data.  A second improvement would be teaching students the LSTM neuron architecture rather than an RNN based on the standard neuron: LSTMs have a nice symmetry with N2 since it has a constant that shifts with the distribution like the moving average of ARMA, in addition to leveraging the multiple time steps of an RNN.
Here is my solution for problem 2:

I think your explanation of the RNN structure, loss function, and the way the model weights are updated was excellent.  Overall, very well done and I enjoyed working through the material.  :)
Total time to complete: 1 hr

I suggest adding a code cell all_launches.head() so that students are reminded of what data features are actually in the dataset before they get to Problem 2 where they need to use those additional features.

Very good point. Since I did the other notebooks, it is easy to think that they are already familiar.. I added in a little exposition of what they are.

My main comment is that for the first two-thirds+ of the notebook, the failure of the example RNN models to correctly predict the launch data risks demonstrating to students that an RNN in general is not a good choice for "real" time-dependent data analysis. The notebook also leaves it to a student's skill as a data science engineer to get good results by the end of the notebook when they have never seen this model "work" successfully on launch data. The example you give with the sin(x) data shows increasing the length of the time analyzed as the solution for the RNN model, so removing the time dependence for the launch data later in the notebook is not an intuitive choice for students. Finally, the sin(x) data is periodic--which does a good job of leveraging the recurrent connections--while the launch data is not periodic (so why then is a RNN a better choice than a vanilla FCNN for the launch data? The argument about fewer model parameters due to the "looping" evaporates).

I think my perspective is first that this act just as a demonstration of RNNs as applied to a simple time series. I actually think that in as simple a case as this, there are a variety of methods which would outperform or at least match an RNN (including a vanilla FNN or a CNN or even simpler - honestly ARIMA is great in N2). My objective with the early sections of this notebook was to walk them through the considerations, pains, and adjustments to get a neural network working i.e. how to be a good data engineer, which I feel like always ends up being the hardest part of getting a neural network working well.. But in retrospect, I think you are right that it makes the RNN seem like a bad choice to the students. I've added a note at the start of the forecasting for projectile data section giving context to the challenges.

So, I'm going to pull a "Reviewer 2" on you and state that RNNs as presented in this notebook are generally considered to be a poor choice for time series data because the RNN is going to learn a frozen distribution even while considering multiple time steps at once. It should be made clear to the students that the reason the RNN works for the example sin(x) data is because the model learns the entire periodic nature of the data. The launch data (as presented in the example code) requires the RNN to predict two different half-parabolas, one of which it has never seen before. This is fine if you want students to learn how a model can fail to generalize, but if the point is that an RNN can in fact accomplish this task, then this feels like a backwards way to do it. The notebook clearly improves the results by introducing stationarity, but the predicted data in the early part of the notebook is symmetric around the training-testing data split point because the model has only learned one of the two half-parabolas and then mirrored it around the split point.

It is not clear to me that the success of the RNN on the sin(t)cos(t) data is due to its periodicity. Ultimately, RNNs really boil down to having a second input which is some processed version of the previous input (which could theoretically be accomplished by inputting multiple previous steps into an FNN). Though the example I gave is a poor demonstration of the reduced number of model parameters, that is a key strength to RNNs. It is also a poor example for the RNN to be trained only on increasing data and then expect it to get the second half of the parabola correct (hence the stationarity improvement and definitely the improvement in Problem 3. The half parabola mirroring could also be argued for the classical ARIMA setting). But hopefully the students get a sense of seeing an RNN in action. Even if it's not the optimal setting, I hope they at least understand the application!

I think a major improvement would be replacing the sin(x) data with the "parabolic motion without drag" data created in N1. This data is close enough to the programming tasks assigned to the students that they can lift the thought process (such as stationarity) and repeat it fairly closely for the launch data. A second improvement would be teaching students the LSTM neuron architecture rather than an RNN based on the standard neuron: LSTMs have a nice symmetry with N2 since it has a constant that shifts with the distribution like the moving average of ARMA, in addition to leveraging the multiple time steps of an RNN.

I think using the projectile motion without drag would definitely give better results due to the symmetry of the parabola, but I think that would be a misleading success of the RNN. I also think the stationarity example and data loading with drag is sufficient for them to replicate. For the LSTM, I thought about adding it but realized that there was actually minimal improvement on the SimpleRNN (with adjusted parameters... too many parameters in neural networks....). Since I didn't really describe the LSTM architecture and its definitely more complicated than they need to know, I included a link to its description and keras function in the appendix along with the GRU architecture. I presented them as more complicated but improved versions of the vanilla RNN.


cli.report should serialize/deserialize raw_report

My understanding is that we missed two bugs (#403, #398) due to the fact that cli.report doesn't go through the JSON representation of the raw_report. So maybe we should force that, or at least expose through an option, even if it's inefficient.

and #409?


Incorrect let highlight

.= syntax is incorrectly highlighted in VSC:

Expected to see exact highlight as ::= has

Syntax highlighting is generally pretty far from correct; hence the idea of #40.


feh: 3.1.3 -> 3.2

Semi-automatic update generated by https://github.com/ryantm/nixpkgs-update tools. This update was made based on information from https://repology.org/metapackage/feh/versions.
meta.description for feh is: '"A light-weight image viewer"'.
meta.homepage for feh is: '"https://feh.finalrewind.org/"

Checks done (click to expand)

built on NixOS
The tests defined in passthru.tests, if any, passed
/bin/sh passed the binary check.
1 of 1 passed binary check by having a zero exit code.
0 of 1 passed binary check by having the new version present in output.
found 3.2 with grep in /nix/store/gps6sj78zpsnmnchz8gwgs5px7667dzs-feh-3.2
directory tree listing: https://gist.github.com/3d93d04bf694dded4034a79bc04c392a
du listing: https://gist.github.com/2576fcffffc671630b6763f0e9911a1d

Rebuild report (if merged into master) (click to expand)

22 total rebuild path(s)
6 package rebuild(s)
6 x86_64-linux rebuild(s)
6 i686-linux rebuild(s)
4 x86_64-darwin rebuild(s)
6 aarch64-linux rebuild(s)
First fifty rebuilds by attrpath
betterlockscreen
deco
feh
python37Packages.pywal
pywal
wpgtk

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/gps6sj78zpsnmnchz8gwgs5px7667dzs-feh-3.2 \
  --option binary-caches 'https://cache.nixos.org/ https://r-ryantm.cachix.org/' \
  --option trusted-public-keys '
  r-ryantm.cachix.org-1:gkUbLkouDAyvBdpBX0JOdIiD2/DP1ldF3Z3Y6Gqcc4c=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(r-ryantm's Cachix cache is only trusted for this store-path realization.)
Or, build yourself:
nix-build -A feh https://github.com/r-ryantm/nixpkgs/archive/a02c9eb420179deb605e67f555898ab263d6cfae.tar.gz

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/gps6sj78zpsnmnchz8gwgs5px7667dzs-feh-3.2
ls -la /nix/store/gps6sj78zpsnmnchz8gwgs5px7667dzs-feh-3.2/bin

cc @viric @willibutz for testing.

This command builds feh without error, and feh runs on my machine:
nix build '(with import (builtins.fetchTarball { url = "https://github.com/r-ryantm/nixpkgs/archive/auto-update/feh.tar.gz"; }) {}; pkgs.feh)'