Fix bug in deleteCommand

Codecov Report
Base: 49.54% // Head: 47.96% // Decreases project coverage by -1.58% :warning:

Coverage data is based on head (a53dd92) compared to base (8747f6d).
Patch coverage: 40.00% of modified lines in pull request are covered.

Additional details and impacted files
@@             Coverage Diff              @@
##             master     #149      +/-   ##
============================================
- Coverage     49.54%   47.96%   -1.59%
- Complexity      412      413       +1
============================================
  Files           102      104       +2
  Lines          1879     1943      +64
  Branches        199      214      +15
============================================
+ Hits            931      932       +1
- Misses          906      966      +60
- Partials         42       45       +3

Impacted Files
Coverage Δ

src/main/java/seedu/address/model/Model.java
100.00% <ø> (ø)

...va/seedu/address/logic/commands/DeleteCommand.java
82.35% <33.33%> (+1.10%)
:arrow_up:

...rc/main/java/seedu/address/model/ModelManager.java
45.83% <50.00%> (-0.33%)
:arrow_down:

...eedu/address/logic/parser/DeleteCommandParser.java
62.50% <0.00%> (-37.50%)
:arrow_down:

...in/java/seedu/address/logic/parser/ParserUtil.java
66.03% <0.00%> (-10.05%)
:arrow_down:

src/main/java/seedu/address/model/AddressBook.java
53.70% <0.00%> (-4.30%)
:arrow_down:

.../java/seedu/address/model/task/UniqueTaskList.java
8.92% <0.00%> (-1.08%)
:arrow_down:

src/main/java/seedu/address/ui/TeamCard.java
0.00% <0.00%> (ø)

src/main/java/seedu/address/ui/MainWindow.java
0.00% <0.00%> (ø)

... and 17 more

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

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


[ETFE-476] Add MongoRepo for ReportAReceiptJourney and Refactor package structure

Closing, as we're going to create a new Frontend for this


Save and load query results for saved queries

The backend should be extended to allow a user to save up to n queries (n configurable via env var) for use in a project proposal.
When a user saves a query for a project proposal the overall result (sum results across all sites) should be saved.
It should only be possible to save a result if the overall result > PRIVACY_THRESHOLD_RESULTS.
When the user then later adds the saved query to the proposal component it should be possible for the proposal component to
query the feasibility backend api with a query id to get the overall result for the specifc saved query.
Potentially the /summary-result endpoint could exactly fulfill the requirement without having to change it - please check if this is the case.
Things to implement as part of the issue:

Allow the saving of saved queries with an overall result
1.1 Ensure it can only be saved if overall result > PRIVACY_THRESHOLD_RESULTS
1.2 Implement that only max n queries (n configurable via env var) can be saved per user.
Implement CRUD for the saved queries, so that the UI can be extended to allow the management of the saved queries
2.1. When implementing delete ensure the query itself is not deleted but instead either a flag is added to the query or it is only deleted from saved queries while keeping the track record of all sent queries for the user intact.
Implement an endpoint or make it part of an endpoint to convey the information how many queries the user can still save before having to delete a saved qury
Provide API endpoint for proposal component to get the result for a saved query
4.1 check if the summary-result endpoint will suffice for this purpose

After discussing the possible complications and confusion with potentially late or already deleted result numbers, we decided to change this slightly. The total number of results will be provided by the GUI when sending the POST request to save a query.
This introduces the possibility of fraudulent result numbers being sent by the GUI with no chance of verifying them in the backend, but since there is no real threat in that and it was decided to accept that.
This change needs to be reflected in the GUI as well (ping @Shayan1375 @thkoehler11 )


[Costing] Testing memory consumption of polymorphic builtins

I'm trying to understand how the whole costing thing is supposed to work (there's no point in changing something you don't understand). This PR is a take at how costing for polymorphic builtins should work (originally I suspected our current way of handling polymorphic builtins was completely broken, but now I don't think so). In particular, I added some tests and a bit of reasoning (mostly questions). What is definite is that a polymorphic builtin should ignore the memory annotation of the AST it receives at least when that AST gets used 0 or 1 times in the result of the builtin. Not ignoring it causes ExMemory calculations to skyrocket for a sequence of calls to a builtin id, here's a (shortened) diff:
        --- untyped-plutus-core-test/Evaluation/Machines/Budget/IdNat/3.plc.golden
        -| mem: 91
        +| mem: 364

        --- untyped-plutus-core-test/Evaluation/Machines/Budget/IdNat/6.plc.golden
        -| mem: 94
        +| mem: 658

        --- untyped-plutus-core-test/Evaluation/Machines/Budget/IdNat/9.plc.golden
        -| mem: 97
        +| mem: 970

This is pretty crucial since ifThenElse is a polymorphic builtin and it does receive an AST representing a function (since ifThenElse has to be lazy and PLC is strict), not just a Constant. This investigation does seem to agree with the current way we handle ifThenElse memory-budgeting-wise (modulo the exact choice of constants):
    "if_then_else": {
        "memory": {
            "arguments": 1,
            "type": "constant_cost"   -- here
        },
        "cpu": {
            "arguments": 1,
            "type": "constant_cost"
        }
    },

(not that I can actually read the cost model).
I had to pull ExtensionFun out of TPLC tests, so that I could use the builtin id in UPLC budgeting tests, so I also went ahead and improved testing a bit by dumping the type signature of every ExtensionFun to a golden file.

What is definite is that a polymorphic builtin should ignore the memory annotation of the AST it receives at least when that AST gets used 0 or 1 times in the result of the builtin.

(Sorry if I'm stating the obvious here, but let's spell things out so we're agreed on what we're talking about.).
That seems right, although I think we have to be a little careful about what we mean by "polymorphic".  In things like ifThenElse some of the arguments are opaque terms which it can't do anything interesting with, and in that case I think we can safely ignore the annotation since the builtin can't do any work that depends on the size of the argument (or I sincerely hope not).  The purpose of the annotation is to provide some idea of how big an object is and thus how much work it's likely to need to process it, but if all you can do is to pass a pointer around then surely the work required should be independent of the size of the thing it points to.
If we ever have things like builtin-in functions for appending or reversing elements of a polymorphic builtin-in list type though, we really would need to keep track of the size, since the amound of work done would depend directly on the size of the argument.  The evaluator needs access to that size while it's executing the program because it needs to know how much to charge for calling the function (and we hope that that cost will be at least roughly proportional to the actual work done by the hardware, which is why we have the cost model in the first place).  For built-in types like lists, we'd need quick access to the size without having to traverse the underlying object, so I think the Haskell implementation of a list type for instance would have to be something like ([t], Integer) where the second element keeps track of the size and has to be updated by built-in functions which operate on lists.  That size would only measure the top-level structure of the lists though: since lists are parametrically polymorphic in their element types, we'd ignore the size at deeper levels.
Having written this, I now wonder if we might have difficutlies with some types of higher-order things.  If we had built-in types that could contain functions, for example, and something like an application function app which could trigger evaluation of such a function (inside another builtin), how would we keep track of the cost?  I think in that case we might require the functional values to carry cost formulas rather than just simple size annotations, and the evaluator would have to be able to retrieve that formula and apply it to the size of the argument before it can decide whether it's safe to call app.  I suppose that you might run into that if you had a built-in type of untyped lambda terms for example, with app being the usual application function.

If we ever have things like builtin-in functions for appending or reversing elements of a polymorphic builtin-in list type though, we really would need to keep track of the size, since the amound of work done would depend directly on the size of the argument.

Yes, but we would need to keep track of the size of the spine of the list, not the pointers inside of it as you still can't do anything with them apart from moving them around, so memory annotations of the ASTs are still irrelevant.
What I was worried about that led to creation of this PR is "are memory annotations ever relevant when calculating the cost of a polymorphic built-in function?". The answer that this PR gives is "not sure about the case where a builtin duplicates its argument, but at least we can be sure that whenever none of the arguments gets duplicated, all memory annotations are irrelevant", which is somewhat satisfying for now. "How should we implement costing for reverse?" is a different question (which may indeed lead us to the ([t], Integer) representation that you mention), but at least we can be reassured that we're not interested in any of the memory annotations in that list.

I suppose that you might run into that if you had a built-in type of untyped lambda terms for example, with app being the usual application function.

Right, but we're just not going to do add builtins for which we can't calculate costs properly, I guess.

What I was worried about that led to creation of this PR is "are memory annotations ever relevant when calculating the cost of a polymorphic built-in function?"

I don't think they are.  Even if we duplicate an argument we'll still account for the CPU cost if we ever do anything to it afterwards. If we return a term twice and evaluate both "copies" in the CEK machine for example, we'll still track the cost of processing it correctly. I suppose that  a potential risk is if we ever manage to not just duplicate a pointer, but somehow make a deep copy of whatever it points to, so we have two copies of the same thing in the GHC heap but we don't account for the extra memory cost..  I'd hope that because of purity that can never happen, but I could be wrong.
We should definitely think carefully about this though: don't let me discourage you by just saying "Oh, that'll never happen".


Add partial wininet bindings.

Includes what should be all the types and constants from wininet.h,
and some of the functions.
Note that, unlike other header bindings, the wininet module is not
re-exported in the root winapi module.  This is because wininet.h
and winhttp.h define the same constants/enums with different values.

Do not merge yet: I haven't checked that structs respect packing.

This PR will need to be updated to the winapi 0.3 new world order. https://github.com/retep998/winapi-rs/issues/316

PR has been updated.
The one thing I'm not sure about is that I've had to add an Align field to GOPHER_ATTRIBUTE_TYPE to get the appropriate alignment on 64-bit.  Specifically, it's a field that users won't expect to exist, and if better padding control comes along later, can't be removed.  Should I rename it, add some docs for it, or just comment it out along with everything that depends on it?
I mean, it's for Gopher, so I'm not sure anyone'll miss it.  Well, right away; you know how people are.

I'd prefer leaving the struct in with insufficient alignment for now, and commenting out the test, and having a fixme to fix it later.

Updated fixes.  From commit:

Changed !0 to -1i32 as u32.
Removed redundant #[allow(dead_code)]s.
Changed GOPHER_ATTRIBUTE_TYPE to be naturally aligned correctly.
Changed pointer type aliases to use FN!.

Note that the vtable struct still uses literal types, since there's no
name defined for them.

Merge conflicts and CI is failing.

My bad; I think I forgot to enable features when testing the fixes I made.  And then I forgot that dev was the upstream branch, rebased on to master, amended the commit, and then realised what I'd just done and had to fix it.
Looks good now.  I hope.


Presa-mr

es built the Root Checker app as a Commercial app

@SLID123 Can you provide more detail about your issue?

@SLID123 Due to lack of enough information, I have to close the issue so far. We can reopen it when we have enough information.


ci: exclude pip-compile'd files from renovate

Fixes #96

Pull Request Checklist

[ ] I am a nice guy

[x] This pull request and its commits address only a single concern

[ ] Documentation has been altered or extended appropriately

[ ] I have followed JonasPammer's Ansible Role Development Guidelines

Does this PR introduce a breaking change? (What changes might users need to make in their application due to this PR?)

CI failing is of another matter! lgtm


chore(CI): Increase number of workers for jest in CI

Goal
Increase the resources available to jest for tests
Reference: https://jestjs.io/docs/configuration#maxworkers-number--string

:tada: This PR is included in version 2.0.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


[release-4.17] OCPBUGS-46040: Add ipv6 cluster network to firewall

Which issue(s) this PR addresses:

Closes #

/retest

/label cherry-pick-approved
/label backport-risk-assessed

/label jira/valid-bug

/lgtm

/jira refresh


Initial support of VxLAN BGP EVPN

Implemented create/remove VxLAN tunnel offloading to VPP
Enabled VPP's vxlan_plugin.so by default
Implemented but not used create/remove VxLAN-GRE tunnel offloading

It looks like we both are working on vxlan but from different angle. There are certainly some overlapping our PRs (mine is #97). Let's work together to resolve the conflicts.


Add Data and Layers Button do not toggle

Clicking either the Layers or Add Data button should toggle the window open or closed. Right now it will only open it if it is closed.

Not going to work this, the button does "toggle" by bringing the window to the front.

Didn't mean to close it out


Remove old Radiks code

Summary
Since we have moved away from Radiks, we have no need for the code in our code base that utilizes it, such as the loadObservations redux flow.

[ ] remove all traces of Radiks from codebase and associated reducers, functions, etc

Motivation
We want to keep our codebase current and up-to-date

Since we are no longer using Radiks I guess the models would need to be changed? I guess they could be changed to regular JS classes, but then there would be no typing. Also, I guess we won't be needing the custom Radiks server.

Yeah, so at this point I think we can:

Change the models to regular JS classes
Tear down / decouple the Radiks server for the time being
Remove things such as LOAD_OBSERVATIONS, as those were interacting with Radiks

I don't think I've seen any more uses, but I may be missing something

I would like to try to work on this.


Setting values via path array?

Hi,
I saw in the readme that you can create a cursor by passing in a path array:
var colorsCursor = tree.select(['palette', 'colors']);

So for some reason I ended up assuming that you can also set values by passing in a path array like so:
tree.set(['palette', 'colors'], 'blue');

However this doesn't seem to be the case:
tree.set(['palette', 'colors'], 'blue');
tree.commit();
tree.get();
//Object {palette,colors: "blue"}

Calling set with a path array actually leads to Baobab setting the value at the path of a comma-joined string of the path array, which is quite odd.
The workaround I'm using right now is calling select with a path array and then edit to change the value, but I feel being able to pass in a path array to set would be a more intuitive way to do this.
Thoughts?
Thank you for making this amazing library by the way! =)

Hello @lewisl9029, I was thinking about this polymorphism when creating the library and found it a bit weird. I therefore waited before implementing it and now, here we are.
Anyway, the fact that setting the value with an array as first arguments ends up setting a comma-separated key is clearly a bug that I should fix.
I could add however, as you suggest, the following polymorphisms in a further release:
tree.set(['palette', 'color'], 'blue');

// The second one seems clunky however
tree.set('palette', 'color', 'blue');

I too ran into this. Say I have a state tree like this:
var stateTree = new Baobab({
  models: {
    users: {}
  }
});

I'm using a map instead of an array of users because it's easier to lookup and set this way. So, whenever I need to update a user, I need to do something like this:
var update = {models: {users: {}};
update.models.users[userId] = {$set: newUserData};

stateTree.update(update);

Would be awesome if I could instead do this:
stateTree.set(['models', 'users', userId], newUserData);

Ok, I will therefore plan to add this polymorphism. What about the second one:
tree.set('palette', 'color', 'blue');

Dangerous?

As a side question, do you think this polymorphism could be valuable to some other methods like push or unshift, for instance?

Awesome!
Hmm I don't like the second syntax for two reasons.

It's not immediately obvious what is being set, where.
Not as flexible as the first option, because you can't build the path dynamically.

What would be super cool is if set built the path if it didn't exist. So for example:
var stateTree = new Baobab({
  models: {}
});

var userData = {id: '123', name: 'Marc'};
stateTree.set(['models', 'users', userData.id], userData);

// stateTree is now {models: {users: {123: {id: '123', name: 'Marc'}}}}

Would definitely be valuable with other methods like push and unshift. Especially if it built paths as described above. So:
var stateTree = new Baobab({
  models: {}
});

var userData = {id: '123', name: 'Marc'};
stateTree.push(['models', 'users'], userData);

// stateTree is now {models: {users: [{id: '123', name: 'Marc'}]}}
// this was a push into the models.users path, so baobab made the users property
// an array, instead of a object (which is what it did in the .set example above)

Set would indeed build the path if this one already does not exist. It already works thusly for the update specifications updates or if you edit a value using a cursor on a presently inexistant path.
However, I am not that confident about the push thing. I would prefer the user to explicitly set the node as an array before he can push to it. But give me some time to think about it.

I personally only plan on using the tree.set(pathArray, object) signature for precisely the reasons @marbemac outlined above. But I think the other version should probably exist if only for the sake of maintaining consistency between the set and select APIs' path input.
Also, @marbemac, I think the workaround I'm using right now might be of some use to you, since it's a bit less verbose than your snippet with .update():
stateTree.select(['models', 'users', userId]).edit(newUserData);

As an API I find this more elegant, but I'm not quite sure of the performance implications of this approach since we're also creating a new cursor with each edit. Though I feel it shouldn't be too much overhead since no listeners are being registered here. Being able to call set directly using a path array would definitely be a much better alternative.
To handle the push use case @marbemac mentioned above, I think simply using set with an array as value would be more explicit and less prone to errors and confusion for users, and less unnecessary implementation complexity:
var stateTree = new Baobab({
  models: {}
});

var userData = {id: '123', name: 'Marc'};
stateTree.set(['models', 'users'], [userData]);
// stateTree is now {models: {users: [{id: '123', name: 'Marc'}]}}

But please enlighten me if I'm missing some other use case that can't be achieved this way.

Hi guys, just giving my two cents.
I think it is important for consistency that a selector is a selector. Currently in Baobab the select() method does the selecting. Allowing .set() to also allow a path selector as a first argument breaks that rule. That said, I definitely see it would be nice to have :-)
So I have two other suggestions, just to sugar the discussion.
Remove set()
It could be an idea to just remove set() as that would keep the API consistent and easier to use, one less method to learn. Anything you can do with set() you can do with edit(), but as @lewisl9029 pointed out, you return the cursor of the property edited, not the object where you set the property. @Yomguithereal  Would this have any performance issues?
Remove select()
Yeah, I am crazy ;-) Maybe the initial API was not the perfect angle for Baobab as we see these new scenarios appear. So instead of defining the path as an API method you could have that as the first argument of all methods:
tree.set(['imodels', id], { foo: 'bar'});
tree.push(['items'], 'foo');
tree.edit(['level1', 'level2'], []);
tree.merge('config', {});

I think it is important to strive for consistency and simplicity. Adding a special path selector on set() by definition adds complexity, though again, I totally understand why you want it. I want it too ;-)

@christianalfoni The old syntax, .set(key, value), was already a "selector" of sorts. It was just a crippled selector, in that you could only select by flat key. If what you're looking for is a strict separation, I think we'd need to do something like:
tree.select(['users', userId]).set(newUserData);

Basically, select returns a cursor, set acts on a cursor and overwrites whatever the cursor is pointing to. In this scenario set does no "selecting/looking up of data". I understand the desire for consistency and simplicity, but I think the path selector on set is just too useful to pass up.
I agree that adding a path selector on all of the methods (set, push, merge, remove, etc) would make sense, and keep everything consistent. Not to mention it'd be super useful :).

Yeah, I think the version of set() and edit() er now overlapping and causing confusion. There really is no need to both of them. As you point out:
tree.select(['users', userId]).set(newUserData);

Would indeed just replace edit() and I think that is a good thing. One less method and more consistency :-)
Changing to tree.set(path, value), tree.push(path, value) etc., after some thought, would not work that well. You still need some way to just select a cursor, without mutating it. So yeah...
@Yomguithereal , if people agree, I would suggest removing the edit() method on v.1.0.0 and only use set() the way @marbemac showed an example of here. One less method and more consistency :-) Unless there is something we are not considering here of course.

The issue here @christianalfoni is that select aims at returning a cursor and will create a cursor in the process. Even if the lib's cursor are lazy and won't create listeners lightly, I find it a bit overkill sometimes to use a select just to edit data and prefer a light polymorphism on the set method. tree.set([path], value) does not create any cursor in the process. But I guess this is a question of taste.
Furthermore, there is a conceptual difference between set and edit. set is very connotative in the js world and you usually set a key to refer to a precise value. Using set instead of edit would break this implicit meaning. Furthermore, I would find it very tedious to have to select a key before being able to set its value.

@Yomguithereal Aha, I see. So actually the highly optimized way would actually be:
// Mutation, no cursor creations
tree.set(['imodels', id], { foo: 'bar'});
tree.push(['items'], 'foo');
tree.merge('config', {});

// Create cursor
tree.select('models');

This way you still have: tree.set(key, value), you reduce amount of cursors created and personally I think it reads better because you instantly see that it is a mutation, not just creating a cursor.
Anyways, this is just food for discussion. I am very happy with the API today :-)

tree.set(['imodels', id], { foo: 'bar'});

Is this setting imodels>id to the object {foo: 'bar'}? Or is this setting the foo property on imodels>id to 'bar'? If the former, that's the current functionality. If the latter, it's quite confusing - you're putting part of the key in the value slot of .set(key, value).

tree.set(['imodels', id], { foo: 'bar'});

This replace the node's value at path 'imodels'/id by the { foo: 'bar'} object altogether. Else it would mean you build your path in both arguments, which is obviously silly :).

@Yomguithereal Agreed, I was just confused because it seems as if @christianalfoni was presenting a new suggestion, but this is the current functionality. Either way, I like the current .set([keyPath], value) signature!

@Yomguithereal @marbemac , does what I stated work today? :-)

Yes, for the set method. Polymorphisms for push/merge/etc. remain to be done (I will do it soon).

Ah, okay, cool :-)

Btw, I suppose also the "get" method will get this feature? As you do no really want to create cursors when just fetching some data? Or does it have it already?

The get method already has it since a long time :) .

Aha :-)
When selectors are ready for the other methods the documentation should have a review concerning this :-)

Yes indeed. @christianalfoni, I am currently considering to drop the edit method as per your recommendation lately. It would be more coherent with the other polymorphisms I am currently introducing for the merge, apply etc. methods.
Therefore we would have:
// Set cursor value
cursor.set(value)
// Set under path
cursor.set('key', value)
cursor.set(['key', 'key2'], value)

// and identically for the others
cursor.merge(object)
cursor.merge(['path'], object)

Looks very nice :+1:

The path polymorphism is now effective for every cursor's setters in v1.


Remove multiple_sep

Description

Removing "multiple_sep" field from config (gffread and samtools_stats)
Small formatting changes to default fields

Issue ticket number
Partially addresses issue #77
Checklist before requesting a review

[x] I have performed a self-review of my code

[x] Conforms to the Contributing guidelines

[ ] Proposed changes are described in the CHANGELOG.md

[x] I have tested my code with viash ns test --parallel -q <name or namespace>

Check the correct box. Does this PR contain:

[ ] Breaking changes
[ ] New functionality
[ ] Major changes
[x] Minor changes
[ ] Documentation
[ ] Bug fixes

Dang. I forgot to ask you to add something to the changelog. Oh well.


cli option to add custom or skip "commands" that is run after each downloaded image.

Is your feature request related to a problem? Please describe
I currently use "commands" to add list of new images downloaded. I would like this "commnds" to be skipped (i.e "commands won't run"), or maybe provide custom "commands" from the cli for some sources. For example-

when i run Grabber-cli *****, and using source-x, i don't want the "commands" to run.
when i run Grabber-cli *****, and using source-y, i want to provide custom "commands" to run.

Describe the solution you'd like
--commands cli option to change the command that is run.

I can add a flag to enable/disable the running of the commands indeed.
As for passing a custom one, it'd be a bit more complicated, since there's different versions of commands (SQL and shell commands), and there's different steps at which commands are run: startup, for each tag, for each image, end (cf docs). Although the before/after commands shouldn't be necessary in a CLI context where the parent script can just do it iself.

I though there was just one type of command - Shell commands and user can run whatever program they want through shell wether it be sqllite3, jq or some other command. Where's this SQL command?
Also what is the difference between these two screens ->

The second screenshot is what you're asking for, the SQL commands.


Problem Downloading and Installing esp-idf tools when running esp-idf/install.sh -- Linux Mint 19.1 (IDFGH-2213)

Environment

Development Kit:    none or n/a
IDF version:    v4.1-dev-1067-gfb3d648e0
Build System:    not there yet :)
Compiler version:    trying to get this to install :)
Operating System:     Linux Mint Linux Mint 19.1 Tessa
Relevant Environment Variables:

http_proxy and https_proxy are set and are working.
IDF_TOOLS_PATH=~/esp/esp-tools
In a previous installation I deleted so I could upgrade, I had IDF_PATH=~/esp/esp-idf. In the process of debugging I have this unset (although 'install.sh' seems to export it)

Problem Description
I am attempting to update a previous installation of the esp-idf to the newest version. As per the recommendation at the bottom of the Get Started guide I deleted my esp-idf and xtensa-elf folders and started fresh.
I begin by following the instructions outlined here: https://docs.espressif.com/projects/esp-idf/en/latest/get-started/index.html#
I am able to install all the prerequisites and get the esp-idf downloaded (Step 1 and Step 2 from the guide).
Unfortunately  when trying to run the install script in esp-idf/install.sh I get the following output/error:
Installing ESP-IDF tools
Installing tools: xtensa-esp32-elf, xtensa-esp32s2-elf, esp32ulp-elf, openocd-esp32
Installing<EMAIL_ADDRESS>Downloading xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz to /home/FourFUN/esp/esp-tools/dist/xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz.tmp
Done
WARNING: file size mismatch for /home/FourFUN/esp/esp-tools/dist/xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz.tmp, expected 85459985, got 2219
WARNING: Failed to download file /home/FourFUN/esp/esp-tools/dist/xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz.tmp
Downloading xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz to /home/FourFUN/esp/esp-tools/dist/xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz.tmp
Done
WARNING: file size mismatch for /home/FourFUN/esp/esp-tools/dist/xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz.tmp, expected 85459985, got 2219
WARNING: Failed to download file /home/FourFUN/esp/esp-tools/dist/xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz.tmp
Downloading xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz to /home/FourFUN/esp/esp-tools/dist/xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz.tmp
Done
WARNING: file size mismatch for /home/FourFUN/esp/esp-tools/dist/xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz.tmp, expected 85459985, got 2219
WARNING: Failed to download file /home/FourFUN/esp/esp-tools/dist/xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz.tmp
ERROR: Failed to download, and retry count has expired
Traceback (most recent call last):
  File "/home/FourFUN/esp/esp-idf/tools/idf_tools.py", line 1349, in <module>
    main(sys.argv[1:])
  File "/home/FourFUN/esp/esp-idf/tools/idf_tools.py", line 1345, in main
    action_func(args)
  File "/home/FourFUN/esp/esp-idf/tools/idf_tools.py", line 1134, in action_install
    tool_obj.download(tool_version)
  File "/home/FourFUN/esp/esp-idf/tools/idf_tools.py", line 579, in download
    raise DownloadError()
__main__.DownloadError

What seems to be happening is that either the download is failing so I am getting some fragment of the full file or the expected sizes have not been updated.
I could "fix" this issue by heavily editing idf_tools.py to ignore the file sizes but that sounds more like covering up the problem rather than fixing it.
I could also download the tools from the link in ```esp_idf/tools/tools.json``: https://dl.espressif.com/dl/xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz but I am not sure how to then point the python script to the manually downloaded file.
Lastly I could build from scratch (https://docs.espressif.com/projects/esp-idf/en/latest/get-started/linux-setup-scratch.html). I will proceed to do this if I can't resolve this soon but regardless I thought I should point it out.
In any case thank you in advance for your help!

The files are downloaded into /home/username/.espressif/dist (by default, if you haven't changed IDF_TOOLS_PATH). Please check the contents of the downloaded .tmp file, does it look like a truncated gzip archive, or is it an HTML 404 error page?
In any case, you can download the archive manually and place it in this dist directory, then run install.sh again.

Hey @igrr! I have chosen to instead install the LTS v3.3 of the esp-idf for now since we will be doing production work. That said I did some investigating based on your suggestions and some of my own and observed the following.
I have indeed set the IDF_TOOLS_PATH to a different location (/home/username/esp/esp-tools/). I checked the contents of the .tmp file in esp-tools/dist and it is a file containing an HTML document with a 500 error page. The document mentions an SSL handshake failing but it seems it is auto-generated by my organization when a request does not go through our proxy.
Since I am behind my organizations proxy, what I believe is happening, is that the python2 urllib is not respecting my system proxy settings. Based on the documentation here (https://docs.python.org/2/library/urllib.html) I should be able to get everything to work if I have http_proxy and https_proxy environment variables set before calling urlopen. Browsing through your install script though, it doesn't seem to use urlopen but only urlretrieve which doesn't seem to obey the proxy settings when used on its own.
Based on some light research, I have identified 2 solutions:
The first is to is to instead use  urllib.urlopen, an example of which can be seen here https://stackoverflow.com/questions/28370820/use-urllib-urlretrieve-and-ignore-proxy (note that here proxy settings are explicitly ignored but the principal is the same).
The second is to use urllib.FancyURLOpener and then either the read or perhaps even the retrieve methods of the class. An example using the first method but completely ignoring proxy settings can be seen d in the examples at the bottom of the documentation. This might be the preferred method for you since you make extensive use of the reporthooks in urllib.urlretrieve.
Hopefully this is all useful to you guys. If I have some time I can try my recommended fix locally and report back. I can let you decide if you wish to close this issue or leave it open for you to track.
Thank you for your help!

Thanks, if one of the options works for you, please open a PR and we will merge it. The only constraint is that we need to support both python 2.7 and >=3.5.

@FourFUN Thanks for reporting. Would you please help share if any updates for the issue? Thanks.

@igrr No need to hard code python3: Use python to determine interpreter 2 or 3 (python --> python3 on Arch/Manjaro Linux) and OS firstly, then use python3 as default if it exists.

The files are downloaded into /home/username/.espressif/dist (by default, if you haven't changed IDF_TOOLS_PATH). Please check the contents of the downloaded .tmp file, does it look like a truncated gzip archive, or is it an HTML 404 error page?
In any case, you can download the archive manually and place it in this dist directory, then run install.sh again.

Thx, works for me.
For some unknown reason, the install.sh script can not download those files in my mac, the size of downloaded file is always 0...

In Ubuntu (and Mint) you can install the python-is-python3 package that will make the default python interpreter be python3.

Hello @FourFUN, we are closing this issue. URLretreive was updated and there is also an external tool for download.
If you want to keep this issue open, please let me know. Thank you!


Single Abstraction for everything: Endpoint

This is a discussion issue - there is no milestone for this yet.
I'm still thinking about "Your REST API as a Monad" approach and it seems to me that we still can do that given there is a Heterogenous Router is on the way.
The idea is to have just a single abstraction (Endpoint) that combines both Router and RequestReader together, so we can organize the code in separate endpoints.
The API in my head looks something like this:
val getUser: Endpoint[User] =
  (Get / "users" / int("id") ? param("name")) { (id, name) =>
    User(10)
  }

val getTickets: Endpoint[Seq[Ticket]] =
  (Get / "users" / int("userId") / "tickets") { id =>
    Seq(Ticket(...))
  }

val checkHealth: Endpoint[HttpResponse] = * / "health" /> Ok("I'm Alive!")

val api: Endpoint[User :: Seq[Ticket] :: HttpResponse :: HNil] =
  getUser :: getTickets :: checkHealth

Httpx.serve(":8081", api)

Also, it would be nice to be able lift an endpoint to function. Like this:
val getUser: Endpoint[User] =
  (Get / "users" / int("id") ? param("name")) { (id, name) =>
    User(10)
  }
val f: (Int, String) => User = getUser.lift

This would allow to erase the difference between service-level and controller-level, which are tipically used in a traditional web-frameworks. Endpoints should cover them both.
And the last idea for today. We can also replace all the routers with just one path and apply the same type-class based decoding approach there. I like how it plays together:
val a: Endpoint[Int :: String :: Int :: HNil] =
  Get / path.as[Int] / path.as[String] :: param("age").as[Int]
val b: Endpoint[User] = a.as[User]

I'm not quite sure yet if it's even possible, but it looks pretty solid to me.
Feedback is very welcome!

As far as I understand your idea its pretty simple to make monadic trait Endpoint[Route[_]], with two applies: one for "saving callback", and the second one (abstract) for applying callback on request. Just like it works in Route.
And all you need is an implicit conversion from Route[] to Endpoint[Route[]]

As mentioned in #256 by @ImLiar, the suggested API is less intuitive than the old (current) one. My understanding is following. There are to possible directions for the future Finch:

Keep both abstractions: RequestReader and Router and compose them like this:

trait Router[A] {
  def ?[B](rr: RequestReader[B]): Router[A :: B :: HNil] = ???
}

val e: Router[Int :: String :: HNil] = Get / "users" / int ? param("name")

Merge RequestReader with Router (they basically do the same thing - take a request and produce some type A from it) and call it Endpoint. So the API should be something like this (to concistent):

val e: Endpoint[Int :: String :: HNil] = Get :: "users" :: path.as[int] :: param("name")

From my perspective, the second approach is better since it unifies a lot of things: a) instead of 2 abstractions there is just one b) instead of two compisitors ? and / there is just one ::, which explicitly says that the result type is HList.
That said, I see the "Future Finch" in the second approach. While the API looks not exactly as URL it sill makes a lot of sense for me: Endpoint[A] take request and extracts some A; we can sequentially compose two endpoints using the :: compositor so the result type is going to be HList.
I would love to see a feedback on this direction.

I am in favor of the second approach, with some modifications, for three reasons:
1.) Given some of my Rails background with the ubiquitous routes.rb, defining endpoints in general feels like the correct abstraction point.  Unifying the result type to HList should make composition much more sane - I'm currently dealing with that in the demo project now - I'm trying to get away from the hack type ToJson and rely on Argonaut's Json, but combining services between two types is getting weird, and not in the fun way.
3.) While I understand the deep desire to have meaningful types separate from Http plumbing, in today's API land I don't think you can get away from some of it - there is business logic on display when someone returns a 404 for a /users/33.json for example. An Endpoint[A] seems to provide a bit more flexibility around A when the situation calls for it.

Thanks for the feedback @penland365! See my comments bellow.

That's totally possible to do within the suggested approach. Endpoints are just values so you can define them wherever you want and reuse them if needed. It's the question of a style but I like the idea of defining both route and business logic in the one place.

That's true. I personally like the idea of having just a one way of doing things.

Right. This is not a problem at all since you could have an endpoint that returns an HttpResponse type so you can encode any behaviour:

val httpEndpoint[HttpResponse] = (Post :: "users" :: body.as[User]) { user =>
  Created(user)
}

Here's my thinking, which I'm working into a draft PR.
The following are pretty close approximations of the current types (leaving out some of RequestReader's error message tools and a handful of custom combinators that can be provided via value classes):
type RequestReader[A] = ReaderT[Future, HttpRequest, A]
type RouterN[A] = StateT[Option, Route, A]
type Router0 = RouterN[Unit]

(I find the StateT and ReaderT terminology useful for my own thinking about how we're modeling these things—they shouldn't be taken as a literal proposal.)
There are real differences between RequestReader and RouterN. For example it's nice to use the more limited ReaderT to represent the fact that RequestReader isn't interested in changing the request state. It's also not the case that we want a RequestReader failure to result in the request parser moving on to the next router in the chain of |s. But while readers and routers are different, we can trivially convert a ReaderT[Future, R, A] into a StateT[Future, R, A] when we want to compose readers and routers. The s => f (s, a) and s => f a representations capture what routers and readers have in common without collapsing their differences.
(On a partly related note, is there any reason e.g. int / Get / long should be a valid Router? It seems like it might be nice to make such things unrepresentable.)
So you could write something like this (where toWhatever is of type (String, User) => Whatever):
val foo: Endpoint[Whatever] =
  (Get / "foo" / string ? RequestReader.to[User].fromParams) ~> toWhatever

You chain a bunch of these together with | to get a Endpoint[Whatever :+: Int :+: Foo :+: CNil], and if there are EncodeResponse instances available for all of the elements in the coproduct, you can serve the result as a Finagle service.

@penland365 In response to your proposal: my own feeling is that in general we don't want to be defining things like Endpoint[A :: B :: HNil] very often. You'll have an Endpoint[A :: B :: HNil] in an intermediate step, but you'll map the HList to a more meaningful type (using as or ~>) before your definition is complete. In many or most cases, users won't have any traces of HList in the types of their definitions (this is more or less the approach taken by scodec, for example).
I also like | for the final composition of endpoints instead of ::, since we're necessarily building a type involving a coproduct, not an hlist. If we have an foo: Endpoint[Foo] and a bar: Endpoint[Bar], then foo | bar is going to be an Endpoint[Foo :+: Bar :+: CNil], since we're going to end up with something that's going to return a Foo or a Bar for any given request, but not both. Then we can use the power of Shapeless to map stuff over the coproduct, or (probably the most common case) to say that if we know how to turn all of the coproduct's elements into HttpResponse then just collapse our Endpoint[Foo :+: Bar :+: CNil] to an Endpoint[HttpResponse].

Thanks @travisbrown!
I have completely forgotten about Coproduct type. This is exactly what we need here! The only thing is I wish we could keep the functionality of the | compositor in the meaning of def |[B >: A](...) since it's quite useful for the things like Get / ("user" | "users") or even (Head | Get) / etc.
Re request readers and routers. I believe it's quite possible to encode them both into something like:
trait Endpoint[A] {
  def apply(r: Request): Option[(Request, Try[A])]
}

It returns Some if able to route, and returns None otherwise. The underlying Try encodes logic from RequestReader. It seems pretty reasonable for me.

Sorry, forgot to mention. Maybe we could introduce a new compositor :+: on Router in the meaning that it composes to routers into a router of Coproduct:
val foo: Router[Foo] = ???
val bar: Router[Bar] = ???
val fooBar: Router[Foo :+: Bar :+: CNil] = foo :+: bar

Also, re converting Router[Coproduct] into Router[HttpResponse]. The beautiful thing about this approach is that we can add a conversion from CNil to a service that always return NoFound HTTP response. So, router Router[Int :+: String :+: CNil] will be answering 404 for if the request reaches the end of the Copdoduct.

Thanks @travisbrown - the idea of a type involving a coproduct was missing for me. Under that definition, I agree that | is preferable to a cons style ::.

Well, I agree that the second approach is more prefered as true monadic composable, scalish & anyotherbuzzwords way to do things.
But still it's increasing learning curve of finch to the skies and making its API mad just like a scalaz/shapeless sources.
Let me explain it.
Few days ago I showed some finch routing code to JS dev from our team:
(Get / "user" / int /> findUser) |
(Get / "user" /> findUsers)

or something like this
And he easily understood whats goin on here. It's HTTP idiomatic.
One URI => One Function.
He's JS dev without PhD, and still got an idea. Surely he's not ready to understand how it works (andThen/map/embedFlatMap/etc), but he realizes how it should work.
And now lets imagine following setup:

-Hey, Rost, check dat out: Get :: "users" :: path.as[Int] :: param("name")
-Oh wow... I need some time to think about it. What the ::?
-It's heterogeneous list
-Heterowhat? Lemme google it!
Hours after or even never

Hey, man, I got an idea around HList, but... what the hell?

What I was trying to say is a fact, that increasing complexity through decreasing readability and "idiomacity" is not a good way to do simple, popular & reusable REST staff.

@ImLiar In the request reader API, :: replaces ~, which doesn't mean much of anything, either, and the current API is designed in such a way that in most cases users don't have to know anything in particular about hlists.
The goal for the endpoint / router API is similar. Some combinator (maybe called |, maybe something else) allows you to chain together endpoints, and the result will be an Endpoint[A :+: B :+: CNil]. The user doesn't have to know anything about coproducts, though—they just have to know that the result types of all the pieces they've or-ed together can be encoded as HTTP responses.
The cats / scalaz integration (which is much more hypothetical) follows the same lines. PRequestReader[HttpRequest, A] is currently a parentless class with its own methods like map, flatMap, etc. These methods are exactly the same (or very close) as the map, flatMap, etc. methods on a Kleisli[Future, HttpRequest, A]. So we can make RequestReader a type alias for Kleisli, with a companion object and a few extra methods added via implicit classes. Users still interact with RequestReader, but we get to cut a lot of code that we don't have to maintain.
As far as I'm concerned (and I think based on conversations with @vkostyukov that he's on the same page—please correct me if I'm wrong), if a Finch user has to understand hlists, coproducts, etc. to use Finch effectively, that's a bug.

@travisbrown Yea, its an old discussion about whether users should/should not understand how works CanBuildFrom to map over collection of ints.
Whatever, from my point of view blind usage of libraries/design patterns is a dark & dangerous way to shoot in the leg.

I sometimes think CanBuildFrom gets a bad rap :smile:. Sure, it makes trying to implement your collection types difficult, but in general that's not something you should be doing anyway. For ordinary usage it works pretty well, in my experience—it stays out of your way until you need it, which isn't very often.
I think the ~ / :: distinction in RequestReader is a useful example to push on. We need some kind of tuple-like thing to accumulate into while keeping track of types. We've got at least three choices:

Use the standard library's tuples and provide custom tools for abstracting over arity. This is simple but boilerplate-y, and pattern matching involves a lot of inconvenient nesting.
Use a custom case class or extractor (named something like ~) and custom tools for abstracting over arity. This can make pattern matching nicer, but it involves even more new code.
Use Shapeless's HList. New dependency and new concepts, but less new code.

In all three cases the user has to understand the same fundamental idea: we're building up tuple-like things and converting them into other things. In all three cases we need a representation for the tuple-like things, and tools for abstracting over arity. We can roll our own, or we can use a well-documented existing solution. Going with an existing solution doesn't mean we're encouraging "blind" usage.
I understand your concern, and I definitely think we need skepticism here—we want to be sure that we're not increasing user-facing complexity with these changes.

I agree with @travisbrown on this. There are a lot of libraries that use Shapeless in a way that end users usually don't even have an idea there is HList somewhere (e.g., scodec, Spray). I hope we can go in the same direction with Finch.
Re ::. Basically, we can call this compositor whatever we like. It's just easier to reason about :: when you know that it constructs HList. But, it's not necessary to think about it in terms of HList. As @travisbrown mentioned: it's just an intermediate result that you can map to something meaningful.
I agree there might be concerns about using :: globally in Router (actually in the merged abstraction called Endpoint) so I think we firstly have to understand whether we want to merge them or not.

@ImLiar I certainly understand and appreciate where you're coming from - if I'm being honest, I only understand what a coproduct is about 1 / 3 times, and I'm still scared to use Kleisli because I'm a redneck and still occasionally pronounce it like the Game of Thrones Queen.  My original suggestion for syntax related to constructing Endpoints had more to do w/ the simple fact that I like the cons style construction of ::.
But as that guy, the abstraction I struggled w/ originally was how to compose, as you described it, One URI => One Function when those functions where of different types.  The Endpoints themselves are a means to an end, and an abstraction I'm comfortable not fully understanding as long as there is something "concrete" at the end of the line.  If I'm just rambling ( which I am ), I start with a model
  case class User(name: String)

At this point, I go flying off the Rails and invent a new type, let's just call it Params. I'm thinking of scodec as an example here:
  case class IndexUsersParams(firstName: Option[String]], lastName: Option[String]]) extends Params
  case class UserParams(userId: Int) extends Params

Once I have my param types, I define Endpoints that allow me to bind a DecodeResult[Param] to each endpoint:
  val indexUsers: Endpoint[Seq[User]] = (Get / "users.json" ? firstName & lastName).as[IndexUserParams] /> IndexUsers
  val showUser: Endpoint[User] = (Get / userId / "user.json").as[UserParams] /> ShowUser
  val deleteUser: Endpoint[HttpResponse] = (Get / userId/ "user.json").as[UserParams] /> DeleteUser

Both IndexUsers and ShowUser would be functions that take a DecodeResult[IndexUsersParam] / DecodeResult[UserParams].  If I'm new to Finch, I immediately understand what's going on here - I know how to define and an Http Idiomatic Endpoint, I know I have the  ability to define my params ( and just as importantly, I know what is not allowed as a Parameter, something that's very hard to do in Ruby / Python / Node intelligently ).
At this point, I combine each of those Endpoints into a new Abstraction called a Resource:
  val userResource: Resource[Endpoints[HttpResponse]] = indexUsers | showUser | destroyUser | createUser

And then we serve however many resources we have ( if I understand coproduct correctly, we would be serving the coproduct of all these resources):
  val router = userResource | flightResource | tweetResource
  Await.ready(Httpx.serve(":8080", router))

Note: I have no idea how possible some of this stuff is, or even if it is preferable . . . and I have no preference on syntax for composition. This is more a riff on "things that could be amazing but I haven't thought it all the way through yet".

@penland365 Some little pieces of the syntax will end up being different, but what you're describing is possible and is exactly what I'm aiming for.

Thanks @penland365! I should probably start watching the Games of Thrones given there is a queen called Kleisli.
The big picture is following. As mentioned by @penland365. The Endpoint[A] encodes something at the end: it takes a request and produces some type A from it. So we can serve any endpoint within HTTP and A will be automatically serialized into the HTTP response body.
Examples:
val g: Endpoint[Int] = param("a").as[Int] // endopint that extract param "a"
val f: Endpoint[User] = Endpoint.value(User(...)) // always extacts User

The question is how to compose two endpoints and serve them from the same API server (port). Given Endpoint[Foo] and Endpoint[Bar] we need compose them into something we can work with. We can make a coproduct (a sum type) like Endpoint[Foo :+: Bar :+: CNil] and we can serve it if the compiler is able to serialize both Bar and Foo into the HTTP response. It's magically type-safe: we will know at compile time if there some trobules with encdoing somes part of the coproduct.

Late to the party but I think that merging RequestReader with Router is the best option.  I do feel that | and / are preferable to :: from an accessibility point of view. Now, having said that, I don't think converting to :: would be a huge problem.  Our finch code-bases are very small and changes so far have been relatively simple.

Thanks @zdavep! That's right. We're basically trying to change the API in a way that end users could do migration mechanically.

Yes, well done! Also...

erase the difference between service-level and controller-level

Yay!


[ZEPPELIN-2297] improvements  to jdbc autocompleter

What is this PR for?
PR contains some improvements for completion (JDBC Interpreter):

types of completion
display of long values
refactoring of search of completions
uniqness of completions with type keyword
updating data in completer by pressing Ctrl + .
setting the schema filter to generate completions
fix highlighting code when used not default data source

What type of PR is it?
Improvement
What is the Jira issue?
https://issues.apache.org/jira/browse/ZEPPELIN-2297
How should this be tested?
try to work with new completer
Screenshots (if appropriate)
1. Types of completion

2. Display of long values
before

after

3. Refactoring of search of completions. Updating data in completer by pressing Ctrl + .
before

after

4. uniqness of completions with type keyword
before

after

5. fix highlighting code when used not default data source
before

after

Questions:

Does the licenses files need update? no
Is there breaking changes for older versions? no
Does this needs documentation? no

Great improvement! LGTM
\cc @cloverhearts @astroshim

Looks awesome to me!
It worked like a charm.

Ready to review

merge to master if no further comments


Multi-Step input does not preserve step order when step is conditionally rendered

Reproduction
https://formkit.link/4a3eb8c88e8b708885514fe3d44d5607
Describe the bug
If you conditionally render a step with a v-if, it will always be appended to the end of the step list when it is re-rendered. Expectation would be for steps to respect DOM order even if conditionally rendered.
Environment
• OS: MacOS
• Browser Brave
• Version 1.48.158

This is fixed in 0.16.0 https://formkit.link/02762f399ca187028e0df6654e3c542e


Added laminography demo

@jakobsj here's the script I used for the lego. Are you happy with it being added as a demo in its current state?


docs: update BUILDING and README

Partly addresses #1819

makes BUILDING.md the developer quick start
organizes BUILDING.md

Signed-off-by: Jess Valarezo<EMAIL_ADDRESS>

LGTM

LGTM

CI failing
0.08s$ GIT_CHECK_EXCLUDE="./vendor" TRAVIS_COMMIT_RANGE="${TRAVIS_COMMIT_RANGE/.../..}" make dco
git-validation -q -run DCO,short-subject,dangling-whitespace
 d7ddcdd - FAIL - has whitespace errors. See `git show --check d7ddcddc33f78fc3a83cae0b525108d9d503a7cd`.
1 commits to fix
make: *** [dco] Error 1
The command "GIT_CHECK_EXCLUDE="./vendor" TRAVIS_COMMIT_RANGE="${TRAVIS_COMMIT_RANGE/.../..}" make dco" exited with 2.

LGTM when green


Not working with Android Studio Electric Eel Stable

Gives this error
org.gradle.api.InvalidUserCodeException: Invocation of 'Task.project' by task ':app:dependencies' at execution time is unsupported.

It's working fine for me in Electric Eel Patch 1


Test Synchronising Global State

Testing https://github.com/microsoft/vscode/issues/109896

[x] anyOS @bpasero
[ ] anyOS @tanhakabir

Complexity: 3
Create Issue

Set Up
You can use two insiders opened with different user data directory (--user-data-dir) and extension directory (--extensions-dir) for test syncing across machines.
Testing
In this milestone we changed the internals of how global state is synced. Hence I would request to do some sanity testing of synchronising UI state. You can consider following UI state for testing:

Visibility and location of view containers (ActivityBar & Panel)
Visibility and location of views (Sidebar & Panel)
Visibility of status bar items
Test setting up new machine - turn on settings sync and make sure UI state is synchronised correctly.

I had to use VSCode Insiders and VSCode stable in the end to test settings sync because when I run 2 instances of VSCode insiders from different user data dirs, I have to constantly log into the other with my GH account but then the wrong instance opens.

I don't think it's working on my end. I opened 2 instances of Insiders in 4 different user-dirs and extension-dirs but I don't see changes I make to the UI in one propagate to the other. I also get a dialog box that repeatedly pops up when I click "OK":

Seems you are having issues setting up multiple insiders. As suggested, please try syncing your main insiders with web self host.

Views aren't synced for 2 instances insiders:


Support init_existential_value and deinit_existential_value

Issue #91 and Issue #100

@bryantam, could you please resolve the conflicts now after merging Mark's PR?

Let me wait until #99 is merged and I will reserve the conflict in one shot.

#99 has now been merged. Please resolve the conflicts on this one here. Thanks @bryantam!


Publish multiple github-statuses from the same pipeline job

What feature do you want to see added?
Suppose I have the following pipeline
pipeline {
    agent any
    stages {
        stage ('Build') {
            /* some build steps here */
        }
        stage ('Test') {
            /* some test steps here */
        }
    }
}

I expect github-checks to look like this:

I saw that there is an option to do it by using several different jobs that would update the same PR but
I see no reason (at least in my case) to split the tasks (build, test etc.) into different jobs and maintain
them separately,
The pipeline-github plugin provides the pullRequest.createStatus function to publish the status during
the run which is quite efficient and makes the status update more dynamic, example:
pullRequest.createStatus(
    status: 'success',
    context: 'Build',
    description: 'Build finished Successful',
    targetUrl: "${env.JOB_URL}/console"
)

With such an option, the user can update different statuses in the same pipeline
...and if you're wondering why I'm not using the pipeline-github plugin :) - because I prefer the simplicity
of the ghprb-plugin which allows using one Job for all PRs in all branches in a given repository and doesn't
create jobs for each PR in each Branch (as GitHub Branch Source plugin does which is required by
the pipeline-github plugin)
Upstream changes
No response

👍


Update ecephys requirements.txt

I had some issues with the SortingExtractorInterface until I updated spikeinterface

Were the issues anything that we could detect in a CI?

actually I was running 0.96.0 before, so maybe the listed version would have been fine.
I don't think we need to make any changed to the tests if the latest release works as expected


initSession this method never going inside in app delegate, didfinishlaunchwithoptions

let branch: Branch = Branch.getInstance()
branch?.initSession(launchOptions: launchOptions, andRegisterDeepLinkHandler: {params, error in
if error == nil {
// params are the deep linked params associated with the link that the user clicked -> was re-directed to this app
// params will be empty if no data found
// ... insert custom logic here ...
print("params: %@", params.description)
}
})
===
I am calling above method in didfinishlaunchingwithoptions, in app delegate class, but initSession, never going inside.
How to fix this issue?

Are you setting up your deep link correctly?   Also, try setting automaticallyDisplayDeepLinkController to false and see what happens.
Here's an example in Swift: TestBed-Swift


Add support for voice channel parties

Summary
Adds the same thing as https://www.npmjs.com/package/discord-together and https://pypi.org/project/discord-together/
Checklist

[x] If code changes were made then they have been tested.

[x] I have updated the documentation to reflect the changes.

[ ] This PR fixes an issue.
[x] This PR adds something new (e.g. new method or parameters).
[ ] This PR is a breaking change (e.g. methods or parameters removed/renamed)
[ ] This PR is not a code change (e.g. documentation, README, ...)

Additional Info
Any suggestions are appreciated. the documentation needs to be improved for this so this is currently a draft PR

Can you rebase your PR on 2.0 since it's where new development is happening ?

oops

so... what did I do and what do I do now 😅

I'll just close this and re open on 2.0


refactor: Working pagination using the "extra" fields and the has_more method

Background
Open to review/suggestions. I found that I couldn't get any more than 100 jobs (there are 206 in our environment), so I decided to investigate getting the new BaseOffsetPaginator to work. I could see you've already implemented it, thanks @edgarrmondragon!
Changes
I have simplified the code a bit, I don't know much about using Mixin classes, but I noticed that pagination could be used on any AccountBasedStream so I just added the pagination logic into that class and then subclassed that for each endpoint. I couldn't get this to work if I kept the Mixin there unfortunately.
The accounts endpoint doesn't take an account_id/partitioning, so I simply subclassed that stream endpoint from the base DBTStream class.
The has_more method goes to the "extra" element in the response, which often looks like this:
{
    "extra": {
        "filters": {
            "limit": 100,
            "offset": 200,
            "account_id": 1
        },
        "order_by": "id",
        "pagination": {
            "count": 9,
            "total_count": 209
        }
    }
}

has_more returns True when there are still pages to get, so I set the conditional to be (count + offset < total_count), i.e. the pagination has more records when total_count is still greater than count and offset combined. The example above shows a situation where no further pages are obtainable:
count=9
offset=200
total_count=209

pre-commit.ci autofix

pre-commit.ci autofix

Still can't make the accounts endpoint work, the plan element in the schema looks incorrect:
          "plan": {
            "description": "The billing tier for the account",
            "anyOf": [
              {
                "enum": [
                  "developer",
                  "team",
                  "enterprise"
                ]
              },
              {
                "type": "string"
              }
            ]
          }

But I can't work out how it is being generated.
At present it causes an error in the typing engine:

If I set the "plan" to unselected:
                {
                    "breadcrumb": [
                        "properties",
                        "plan"
                    ],
                    "metadata": {
                        "inclusion": "available",
                        "selected": false
                    }
                }

Then it works fine 😄

Hey @mjsqu!
I'll review properly tomorrow but this is looking good 🙂.

At present it causes an error in the typing engine:

That's a bug, working on a fix: https://github.com/meltano/sdk/pull/1526

pre-commit.ci autofix

Updated the test script with actual responses from our site's API

I just tested and pagination and the accounts endpoint all working really well. Thank you!

Have also just tested in Meltano 🐉  with a push to target-snowflake ❄, all looking good!

Thanks @mjsqu! I'll tag a new release tomorrow (hopefully with a bump to the SDK version too).


Update Drivers to use deliminatedproperty

Is your feature request related to a problem? Please describe.
Update applicable drivers to use deliminatedproperty
Describe the solution you'd like
When a property has a min, max, step, or unit value, update to be a deliminated property

may need to better define or break up this task by device type

Acceptance Criteria

[ ] When a property has a min, max, step, or unit value, update to be a deliminated property
[ ] update base class to reflect need? Not sure if this step is necessary
[ ] remove unit suffix in property name if applicable

Duplicate of #26


OnEdgeLabelDoubleClick ?

I need to call a function from the react component when double click on label, I cant export that function to use on EdgeText because its inside a react component and I need to use the setStates of that component, is it possible to implement something like this prop to place on reactflow component like:
<ReactFlow  onEdgeLabelDoubleClick={(edge) => myfunction(edge)}  />

We will not add this function. We don't have the information at the place where we render the EdgeText. I don't want to pass more information down to that component. I am sure there is a way with a custom edge somehow.


Implementing update

currently working on the update part of the actuator, still a work in progress.

Rebased due to merging conflict


Bump Scim2 and Framework Versions

Purpose

$Subject

Related PRs

https://github.com/wso2-extensions/identity-inbound-provisioning-scim2/pull/547
https://github.com/wso2/carbon-identity-framework/pull/5533

PR builder started
Link: https://github.com/wso2/product-is/actions/runs/8685825416

PR builder completed
Link: https://github.com/wso2/product-is/actions/runs/8685825416
Status: success


Common naming for symmetric properties

The internal datatype for analog inputs is called AnalogIODataType
https://github.com/neurogears/onix-refactor/blob/260149bdfb441c8d49a606bbfd303728cbc42bd0/OpenEphys.Onix/OpenEphys.Onix/AnalogInput.cs#L19
The internal datatype for analog inputs is called Rhd2164AmplifierDataFormat
https://github.com/neurogears/onix-refactor/blob/260149bdfb441c8d49a606bbfd303728cbc42bd0/OpenEphys.Onix/OpenEphys.Onix/ConfigureRhd2164.cs#L19
These type names should have a common suffix. I prefer "Format" over "Type".

Actually, these properties are for entirely different things. One specifies how data is propagated in Bonsai (top) the other how data is produced by the RHD chip. So, their names should in fact be less similar.


rmlint: use elfutils instead of abandoned libelf

Description of changes
Switch from using unmaintained libelf to elfutils (https://github.com/NixOS/nixpkgs/issues/271473). The gating of the library follows https://github.com/NixOS/nixpkgs/pull/299250.
Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[x] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[x] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
24.05 Release Notes (or backporting 23.05 and 23.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

The other maintainer is @k0ral who I cannot add as a reviewer for some reason.

Looks good to me :slightly_smiling_face: .


pnpm - String does not have #dig method

Caching dependency records for ember-app
  npm
  * 0 npm dependencies
/usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/sources/npm.rb:162:in `dig': String does not have #dig method (TypeError)

        parent&.dig("_dependencies", name) || peer_dependency(parent, name)
                    ^^^^^^^^^^^^^^^^^^^^^
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/sources/npm.rb:162:in `extract_version'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/sources/npm.rb:74:in `block in recursive_dependencies'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/sources/npm.rb:68:in `each'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/sources/npm.rb:68:in `recursive_dependencies'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/sources/npm.rb:77:in `block in recursive_dependencies'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/sources/npm.rb:68:in `each'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/sources/npm.rb:68:in `recursive_dependencies'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/sources/npm.rb:77:in `block in recursive_dependencies'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/sources/npm.rb:68:in `each'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/sources/npm.rb:68:in `recursive_dependencies'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/sources/npm.rb:77:in `block in recursive_dependencies'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/sources/npm.rb:68:in `each'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/sources/npm.rb:68:in `recursive_dependencies'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/sources/npm.rb:52:in `packages'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/sources/npm.rb:31:in `enumerate_dependencies'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/sources/source.rb:89:in `cached_dependencies'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/sources/source.rb:72:in `dependencies'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/commands/command.rb:136:in `run_source'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/commands/cache.rb:54:in `run_source'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/commands/command.rb:101:in `block (2 levels) in run_app'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/commands/command.rb:98:in `map'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/commands/command.rb:98:in `block in run_app'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/commands/command.rb:95:in `chdir'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/commands/command.rb:95:in `run_app'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/commands/cache.rb:40:in `block in run_app'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/commands/cache.rb:166:in `with_licensee_configuration'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/commands/cache.rb:39:in `run_app'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/commands/command.rb:67:in `block in run_command'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/commands/command.rb:64:in `map'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/commands/command.rb:64:in `run_command'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/commands/cache.rb:24:in `run_command'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/commands/command.rb:23:in `run'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/cli.rb:115:in `run'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/lib/licensed/cli.rb:18:in `cache'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/thor-1.2.1/lib/thor/base.rb:485:in `start'
	from /usr/local/Cellar/licensed/4.0.4/libexec/gems/licensed-4.0.4/exe/licensed:5:in `<top (required)>'
	from /usr/local/Cellar/licensed/4.0.4/libexec/bin/licensed:25:in `load'
	from /usr/local/Cellar/licensed/4.0.4/libexec/bin/licensed:25:in `<main>'

I see it says 0 npm dependencies which is odd. Perhaps there is an issue since we are using pnpm?

Perhaps there is an issue since we are using pnpm?

That would be my initial guess.  I've only used pnpm a handful of times and I'm not terribly familiar with how it interacts with npm during package management, if it interacts at all.

What version of npm and pnpm are you using?
Can you provide the dependencies and devDependencies sections of your package.json so I can try to repro locally?

@jonabc using pnpm at all should be sufficient to reproduce. I just created a new package with npm init and added just one dep of ember-cli and I can reproduce the error.
sources:
  npm: true

allowed:
  - mit
  - isc
  - bsd
  - bsd-2-clause
  - bsd-3-clause
  - wtfpl
  - apache-2.0
  - cc0-1.0

pnpm 7.26.3
npm 6.14.17

You will have to pnpm I --shamefully-hoist to get pnpm to hoist packages rather than using all symlinks.

Also, FYI there is a pnpm licenses ls command which will list all the licenses, so perhaps we could leverage that here?

Looks like something like pnpm licenses list --long --json gives us deps grouped by license types in JSON format. Could we add a source that parses that?

Looks like something like pnpm licenses list --long --json gives us deps grouped by license types in JSON format. Could we add a source that parses that?

I took a look and wow this is the first time I've seen a package manager provide exactly the information that's needed by this tool 😂 .  A new source sounds like a good idea, I'll take a look when I get a chance but in the immediate future I'll look to fix the underlying issue with the npm source.

🤔 scratch the previous comment, I think pnpm might generally just be incompatible with npm CLI commands?  whether I pnpm install using --shamefully-hoist or not, npm list --all --json --production --long is returning a ton of errors from what pnpm is reporting as optional dependencies.  I'll try to get to creating the pnpm source sooner rather than later
I'm using npm 8.5.0 and pnpm 7.26.3

@jonabc you want to use pnpm commands, not npm ones. pnpm licenses list --long --json --prod would be the pnpm equivalent of what you are trying to run with npm I think. I think we should add a new source that runs the pnpm commands.

@rwwagner90 yep, I was trying to resolve the original issue from this ticket that talks about the npm source raising an error.  the npm source doesn't use any pnpm commands

@jonabc fair enough. I'm not sure if it is possible to make the npm source work here though, so we should focus on pnpm. Anything I can do to help? I don't really know ruby myself, so I don't think I would have much luck implementing the source myself.

@rwwagner90 I hear you on the pnpm source and agree that it's the best solution to the current problem.  I'm just a little strapped for time.  I'll try to get something put together over the next few days.

@jonabc is there anything we can do to be helpful in the meantime? Some of my colleagues know ruby pretty well, so perhaps we could get a PR up, but if you already know exactly what you would do here, perhaps it would be better to wait. Just let us know how we can best help!

@rwwagner90 if you're able to hold tight for me to get the basic structure in place that would be best.  pnpm should be one of the easier package managers to integrate, but it would still probably go faster if I put in the base of the integration.  once that's done I'd love any extra eyes or help with any edge cases, bugs, or improvements that come up.
is pnpm support blocking anything critical for you?

@jonabc not super critical. I've spent the past couple weeks getting pnpm up and running on our repos. Now all the tests are passing and such, but we're unable to run license checks, so it is blocking somewhat, but not critical.

@rwwagner90 I've got the basics of a source up at https://github.com/github/licensed/pull/626.  As mentioned in the PR the only real quirk I found with pnpm was that the cli doesn't return data only for a specific workspace.  The pnpm licenses list command is still not finalized though according to the documentation so it's possible that is coming soon 🤷 .  It should be easy to incorporate workspaces similar to the npm source if/when the pnpm CLI supports it.

Awesome, thank you so much for the quick turnaround!

yes it is coming, I'm working through some other changes to include in the release and should have a release out today.

Ah sorry I missed documenting a difference between the npm and pnpm sources.  With the pnpm source, you'll need to specify dependencies in the configuration file as <name>@<version>.  This is eventually going to be the norm for all dependencies in a future major version bump, and the pnpm source is being used to lead the way and uncover any issues related to that change.

@jonabc thanks for the info! Does the version support globs or semver strings or anything? Like foo@* or<EMAIL_ADDRESS>etc

@RobbieTheWagner I've added support for version matching in https://github.com/github/licensed/pull/629.  Note that version range matching uses Ruby's semver support which is a little different than node's semver package.  I've updated the ignoring and reviewing docs in that PR with some usage hints including links to Ruby's documentation on semver support.


Install command breaks pubspec.yaml

I have an issue where the get cli install command detroys my pubspec.yaml file on the fonts part.
Seems like it does not understand the yaml syntax in the array parts. Im using the official font example https://flutter.dev/docs/cookbook/design/fonts#pubspecyaml
Before install:

After install:

I will fix it

@jonataslaw Any progress on that one?

@appinteractive
check this #121

Any progress in it, I'm still facing it. even with the latest version of get_cli.thanks :).


meaningful error messages, improve cli, remove unused search from daemon

This needs to be broken apart into separate commits.  I'd suggest doing
$ git reset HEAD~1

Which will set you back one commit:
$ git status
On branch error-messages
Your branch is behind 'origin/error-messages' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   lbrynet/conf.py
	modified:   lbrynet/dht/protocol.py
	modified:   lbrynet/lbrynet_daemon/Daemon.py
	modified:   lbrynet/lbrynet_daemon/DaemonCLI.py
	deleted:    lbrynet/lbrynet_daemon/Lighthouse.py
	modified:   lbrynet/lbrynet_daemon/auth/server.py

From here, you can do git add -p and selectively add and commit each piece. There are probably 3-5 separate commits in here.
The commit that puts reactor.iterate() back in place should include a commit message explaining the error that happens without that line of code so that when we go to look at it in the future we'll have better context for why its there.
After making all of the commits, do a $ git push -f to force the push and overwrite the original commit.

Regarding

Its not a big deal, but generally I'm a fan of rebasing over merge commits for bringing in changes from master.  Its definitely cleaner and as long as nobody else has started working off of your feature branch its safe.

@jackrobison @jobevers whats the next step here?

There is one outstanding comment to be addressed, after that it can be merged in


Refactoring

Codecov Report
Attention: Patch coverage is 76.25899% with 33 lines in your changes missing coverage. Please review.

Project coverage is 73.26%. Comparing base (79725c8) to head (6ddf700).
Report is 11 commits behind head on develop.

Files with missing lines
Patch %
Lines

src/phelel/velph/cli/init/init.py
75.73%
33 Missing :warning:

Additional details and impacted files
@@             Coverage Diff             @@
##           develop      #20      +/-   ##
===========================================
- Coverage    73.42%   73.26%   -0.16%
===========================================
  Files           74       74
  Lines         5223     5278      +55
===========================================
+ Hits          3835     3867      +32
- Misses        1388     1411      +23

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


[Bug] iOS build breaks when using Expo SDK 45+

Describe the bug
iOS build breaks if the project is using Expo SDK 45+. This is because react-native-mmkv-storage is using conditional imports which doesn't play well with Expo autolinking.
See this PR for more details.
To Reproduce
Steps to reproduce the behavior:

Create a new project with Expo 45 and react-native-mmkv-storage
Try to Generate a release build for iOS

Expected behavior
Build succeeds
Platform Information:

OS: iOS
Library Version: 0.7.6

Additional context

https://github.com/expo/expo/pull/15626
https://github.com/expo/expo/pull/15299

@amrfarid140 Have you tried to patch it and see if build succeeds on iOS after patching?

I did, here are the changes that go me a successful build. Happy to make a PR with them if they look alright to you.
diff --git a/node_modules/react-native-mmkv-storage/ios/MMKVNative.h b/node_modules/react-native-mmkv-storage/ios/MMKVNative.h
index 60a2a03..ce0934c 100644
--- a/node_modules/react-native-mmkv-storage/ios/MMKVNative.h
+++ b/node_modules/react-native-mmkv-storage/ios/MMKVNative.h
@@ -1,11 +1,5 @@
-
-#if __has_include("RCTBridgeModule.h")
-#import "RCTBridgeModule.h"
-#else
 #import <React/RCTBridgeModule.h>
 #import <React/RCTEventEmitter.h>
-#endif
-
 @interface MMKVNative : NSObject <RCTBridgeModule>

 @property (nonatomic, assign) BOOL setBridgeOnMainQueue;
diff --git a/node_modules/react-native-mmkv-storage/ios/MMKVStorage.h b/node_modules/react-native-mmkv-storage/ios/MMKVStorage.h
index b5f5823..7847f5e 100644
--- a/node_modules/react-native-mmkv-storage/ios/MMKVStorage.h
+++ b/node_modules/react-native-mmkv-storage/ios/MMKVStorage.h
@@ -1,10 +1,5 @@
-
-#if __has_include("RCTBridgeModule.h")
-#import "RCTBridgeModule.h"
-#else
 #import <React/RCTBridgeModule.h>
 #import <React/RCTEventEmitter.h>
-#endif

 @interface MMKVStorage : NSObject <RCTBridgeModule>

diff --git a/node_modules/react-native-mmkv-storage/ios/SecureStorage.h b/node_modules/react-native-mmkv-storage/ios/SecureStorage.h
index b804a64..53d6cd2 100644
--- a/node_modules/react-native-mmkv-storage/ios/SecureStorage.h
+++ b/node_modules/react-native-mmkv-storage/ios/SecureStorage.h
@@ -1,10 +1,4 @@
-
-#if __has_include("RCTBridgeModule.h")
-#import "RCTBridgeModule.h"
-#else
 #import <React/RCTBridgeModule.h>
-#endif
-
 #import <Foundation/Foundation.h>

 @interface SecureStorage: NSObject
diff --git a/node_modules/react-native-mmkv-storage/ios/SecureStorage.m b/node_modules/react-native-mmkv-storage/ios/SecureStorage.m
index 1c4e1c2..dbea26b 100644
--- a/node_modules/react-native-mmkv-storage/ios/SecureStorage.m
+++ b/node_modules/react-native-mmkv-storage/ios/SecureStorage.m
@@ -1,9 +1,4 @@
-#if __has_include("RCTBridgeModule.h")
-#import "RCTBridgeModule.h"
-#else
 #import <React/RCTBridgeModule.h>
-#endif
-
 #import "SecureStorage.h"
 #import <UIKit/UIKit.h>

@amrfarid140 A PR would be awesome.


Update README.md

This fixes typos in the README.md file

Thanks, @mayokunthefirst! Will merge and review other pull requests later.


how to load two prediction model at the same time?

hi, first excellent job you did.
I trained two different prediction model, and i want to load them at the same time.
# hat classifier
hat_prediction = CustomImagePrediction()
hat_prediction.setModelTypeAsResNet()
# prediction.setModelTypeAsInceptionV3()
hat_prediction.setModelPath(os.path.join(execution_path, 'classifier', 'models', "20180724VIDEO_ex-036_acc-0.988451.h5"))
hat_prediction.setJsonPath(os.path.join(execution_path, 'classifier', 'json', "model_class.json"))
hat_prediction.loadModel(num_objects=2)

# cloth classifier
cloth_prediction = CustomImagePrediction()
cloth_prediction.setModelTypeAsResNet()
cloth_prediction.setModelPath(os.path.join(execution_path, 'cloth_classifier', 'models', "20180724VIDEO_ex-040_acc-0.994318.h5"))
cloth_prediction.setJsonPath(os.path.join(execution_path, 'cloth_classifier', 'json', "model_class.json"))
cloth_prediction.loadModel(num_objects=2)

But i found that it seems to fail as it can only load one?

I solved it.
It can load two models at the same time.
However, here the global CLASS_INDEX will overwrite two different class names and should be modified.
def decode_predictions(preds, top=5, model_json=""):
    global CLASS_INDEX

    if CLASS_INDEX is None:
        CLASS_INDEX = json.load(open(model_json))
    results = []
    for pred in preds:
        top_indices = pred.argsort()[-top:][::-1]
        for i in top_indices:
            each_result = []
            each_result.append(CLASS_INDEX[str(i)])
            each_result.append(pred[i])
            results.append(each_result)
    return results

@LCorleone Thank you for working on this. It is very useful to have 2 or more custom models active. I will adopt your modifications in the next version of ImageAI.

@LCorleone Can you share what you did to make it work as a workaround?


Cannot find module '@angular-devkit/core/src/experimental/workspace' or its corresponding type declarations

Which @angular/* package(s) are the source of the bug?
upgrade
Is this a regression?
Yes
Description
I have updated my angular project from v8.0 to v11.2 and getting following errors. Tried to resolve couple of times and still no luck, Can someone please guide
Please provide a link to a minimal reproduction of the bug
https://github.com/nrwl/nx/issues/4432
Please provide the exception or error you saw
Error: node_modules/@nebular/theme/schematics/util/ast.d.ts:2:34 - error TS2307: Cannot find module '@angular-devkit/core/src/experimental/workspace' or its corresponding type declarations.

2 import { WorkspaceProject } from '@angular-devkit/core/src/experimental/workspace';
                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Error: node_modules/@nebular/theme/schematics/util/project.d.ts:2:34 - error TS2307: Cannot find module '@angular-devkit/core/src/experimental/workspace' or its corresponding type declarations.

2 import { WorkspaceProject } from '@angular-devkit/core/src/experimental/workspace';
                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Please provide the environment you discovered this bug in (run ng version)
Here is my package.json

{
  "name": "portal",
  "version": "0.1.0",
  "license": "",
  "scripts": {
    "ng": "ng",
    "conventional-changelog": "conventional-changelog",
    "start": "ng serve",
    "build": "ng build",
    "build:prod": "npm run build -- --configuration production --aot",
    "test": "ng test",
    "test:coverage": "rimraf coverage && npm run test -- --code-coverage",
    "lint": "ng lint",
    "lint:fix": "ng lint portal --fix",
    "lint:styles": "stylelint ./src/**/*.scss",
    "lint:ci": "npm run lint && npm run lint:styles",
    "pree2e": "webdriver-manager update --standalone false --gecko false",
    "e2e": "ng e2e",
    "docs": "compodoc -p src/tsconfig.app.json -d docs",
    "docs:serve": "compodoc -p src/tsconfig.app.json -d docs -s",
    "prepush": "npm run lint:ci",
    "release:changelog": "npm run conventional-changelog -- -p angular -i CHANGELOG.md -s",
    "predeploy": "npm run build:prod",

  },
  "dependencies": {
    "@angular/animations": "11.2.8",
    "@angular/cdk": "10.2.7",
    "@angular/common": "11.2.8",
    "@angular/compiler": "11.2.8",
    "@angular/core": "11.2.8",
    "@angular/forms": "11.2.8",
    "@angular/material": "10.2.7",
    "@angular/platform-browser": "11.2.8",
    "@angular/platform-browser-dynamic": "11.2.8",
    "@angular/router": "11.2.8",
    "@asymmetrik/ngx-leaflet": "3.0.1",
    "@nebular/auth": "^6.2.1",
    "@nebular/bootstrap": "^6.2.1",
    "@nebular/eva-icons": "^6.2.1",
    "@nebular/security": "^6.2.1",
    "@nebular/theme": "^6.2.1",
    "acorn": "6.1.0",
    "amazon-cognito-identity-js": "^3.0.13",
    "angular2-toaster": "^7.0.0",
    "bootstrap": "^4.3.1",
    "chart.js": "^2.8.0",
    "chartjs-plugin-datalabels": "^0.7.0",
    "classlist.js": "1.1.20150312",
    "core-js": "2.5.1",
    "devextreme": "^19.1.4",
    "devextreme-angular": "^19.1.4",
    "eva-icons": "^1.1.3",
    "fine-uploader": "^5.16.2",
    "intl": "1.2.5",
    "ionicons": "2.0.1",
    "jwt-decode": "^3.1.2",
    "local-cors-proxy": "^1.0.2",
    "moment": "^2.24.0",
    "nebular-icons": "1.1.0",
    "ng2-charts": "^2.3.0",
    "ngx-bootstrap": "^5.6.2",
    "ngx-logger": "^3.4.0",
    "node-sass": "^4.12.0",
    "normalize.css": "6.0.0",
    "pace-js": "1.0.2",
    "pdfmake": "^0.1.70",
    "roboto-fontface": "0.8.0",
    "rxjs": "^6.6.3",
    "rxjs-compat": "6.3.0",
    "tslib": "^2.0.0",
    "typeface-exo": "0.0.22",
    "uuid": "8.3.2",
    "web-animations-js": "^2.3.2",
    "zone.js": "~0.11.4"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^0.1102.6",
    "@angular-devkit/schematics": "11.2.8",
    "@angular/cli": "11.2.8",
    "@angular/compiler-cli": "11.2.8",
    "@angular/language-service": "11.2.8",
    "@compodoc/compodoc": "^1.1.10",
    "@fortawesome/fontawesome-free": "^5.2.0",
    "@schematics/angular": "^11.2.8",
    "@types/d3-color": "1.0.5",
    "@types/googlemaps": "^3.30.4",
    "@types/jasminewd2": "2.0.10",
    "@types/leaflet": "1.2.3",
    "@types/node": "^12.11.1",
    "@types/uuid": "^3.4.6",
    "codelyzer": "^6.0.0",
    "conventional-changelog-cli": "1.3.4",
    "husky": "0.13.3",
    "jasmine-core": "~3.6.0",
    "jasmine-spec-reporter": "~5.0.0",
    "karma": "~6.3.16",
    "karma-chrome-launcher": "~3.1.0",
    "karma-cli": "1.0.1",
    "karma-coverage-istanbul-reporter": "~3.0.2",
    "karma-jasmine": "~4.0.0",
    "karma-jasmine-html-reporter": "^1.5.0",
    "mime-types": "^2.1.24",
    "npm-run-all": "4.0.2",
    "protractor": "~7.0.0",
    "rimraf": "2.6.1",
    "stylelint": "^11.0.0",
    "ts-node": "3.2.2",
    "tslint": "~6.1.0",
    "tslint-language-service": "^0.9.9",
    "typescript": "4.0.5"
  }
}

Anything else?
No response

I'm sorry, but this issue is not caused by Angular CLI.
Please contact the author(s) of the @nebular/theme project or file an issue on their issue tracker.


PocketAdmin v1.3 can't execute payload

Hai krakrukra, I'm glad to greet you.
I built PocketAdmin for a weekend project. I succeeded to flash the device both using ST-link and DFU mode. The device can't be detected by Windows 7-64bit and stated as Unknown Device. In Linux, Android, and Windows 10-64bit, it can be detected both as Keyboard and FlashDrive. I managed to format the drive to FAT and POCKETADMIN as label name.  I placed a simple payload
payload.txt
WAITFOR_INIT
DELAY 1000
GUI r
However, PocketAdmin doesn't execute the payload, even though it was detected as USB composite input and flash drive.
In addtion, whether I press the switch button or not, PocketAdmin still detected as Keyboard and Flash Drive.
do you have any solution?
thank you
Regards
Leo

Regarding payload file not working, it might be because you are formatting the whole drive,
while you only need to format the first partition. You can follow the steps in the youtube video
here:   https://youtu.be/jhsEZJUVx_E   , to make an MBR partition table with 1 partition on windows 10 PC.
Ignore first 5 seconds of the video, your part starts with right-click on windows start menu. Also, make
sure that your filename extentions are shown, so your file is called payload.txt and not payload.txt.txt
I turn file extentions on in the video right after I place payload file on the drive.
Regarding switch button, it is in fact intended behaviour. Unless you are using HID_ONLY_MODE it
shows up as a composite device, but with MSD-only button held down it will not type anything.
Now, if MSD-button is not preventing payload execution, this is 100% a bad solder joint. Probably
at pin 12 of MCU, right next to capacitor C8. It sits in a nasty corner, so it is easy to make a bad
solder joint there if you are assembling the board for the first time.
As to windows 7, I will have to investigate that further. It is probably some drivers issue that
windows 7 has with composite devices. Meanwhile, you could try to use HID_ONLY_MODE
and see if it will work on your win7 machine. You could also try to change VID/PID  values,
or go to device manager (on win7 machine), select this "Unknown device" and choose
"delete device" somewhere in the menu. Next time you plug the device in, it might get recognised.
I remember from my testing that win7 tends to do things like assigning some driver to a device
based on VID/PID, and if it was not a correct driver loaded first time, it will not try to change
anything and just give errors. Eg. you had a keyboard with some VID before, now you plug in a
composite device with this same VID and that could cause a problem.

thank you. your first suggestion gives me a priceless clue. "make an MBR partition table with 1 partition"
Since my drive have been formated then I can't delete volume from disk management. As we know delete active partition is not supported in disk management. Therefore, It is my trick using diskpart
Open diskpart in cmd
`DISKPART> list disk
Disk ###  Status         Size     Free     Dyn  Gpt

Disk 0    Online          465 GB  1024 KB        *
Disk 1    Online           96 MB      0 B
DISKPART> select disk 1
Disk 1 is now the selected disk.
DISKPART> clean
DiskPart succeeded in cleaning the disk.
DISKPART> create partition primary
DiskPart succeeded in creating the specified partition.
DISKPART> select partition 1
Partition 1 is now the selected partition.
DISKPART> active
DiskPart marked the current partition as active.
DISKPART> FORMAT FS=FAT QUICK
100 percent completed
DiskPart successfully formatted the volume.
DISKPART>`

UPDATE
The Windows 7-64bit issue has solved. It was because I messed up with my USB driver and protocol in my PC by using VMware.
PocketAdmin works perfectly in the other Windows 7 machine. Even It works in Windows 7 inside VMware(from my messed up USB PC).
So, there is no issue anymore. I will close this github issue. Thank you


First issue on Hacktober 2020

The first time hopefully going to contribute to the open-source community. I am very much excited and looking forward to it.

Hey, so what's happening? everyone is creating a blank/empty issue, that's all?