TripleStoreKnowledgeBase vs TripleStore

Shall we combine these classes into one ?

KnowledgeBase implements the following computation in the initialization
        self.ind_set = init_individuals_from_concepts(include_implicit_individuals,
                                                      reasoner=self.reasoner,
                                                      ontology=self.ontology,
                                                      individuals_per_concept=(self.individuals(i) for i in
                                                                               self.get_concepts()))

see here
This implies that we compute individuals for each concepts.
This leads to a bottleneck on large knowledge graph.
Since TripleStoreKnowledgeBase inherits from KnowledgeBase, we cannot use it as it is on large knowledge graphs.
Yet, TripleStore works like charm but it does not implement few functions that KnowledgeBase implements.
We need to think about bringing them together @alkidbaci @LckyLke

Yes I do agree that a refactoring is needed here and we should have a single triple store KB class. The suggested combined class should ideally still inherit from KnowledgeBase so that we can use our CEL algos without any extra changes and it needs to be fast like TripleStore. Its been a while since we implemented this but there are some clear differences in their structure. I suggest evaluating the possible merging points first and try to come up with a merging solution that satisfies all objectives. I can have a better look on this after I finish some other tasks but @LckyLke please feel free to take this one if you think of a solution before me.

Should consider finding a solution for #446 also

Is there any reason why the ind_set is not just simply initialized like this?:
self.ind_set = frozenset(self.ontology.individuals_in_signature())

Is there any reason why the ind_set is not just simply initialized like this?:
self.ind_set = frozenset(self.ontology.individuals_in_signature())

Not that I am aware of 😀

To understand the code base of these classes better, I wrote a small script to visualize the common and unique methods of the classes so we can identify possible merging points etc.
Maybe this is helpful for someone as well :)
class_hierarchy_enhanced.gv.pdf
→ u have to scroll down for the relevant part

Also, some functions with the same name in these classes operate differently:
If you look at get_all_sub_concepts from TripleStoreKnowledgeBase for instance:
def get_all_sub_concepts(self, concept: OWLClassExpression) -> Iterable[OWLClassExpression]:
        assert isinstance(concept, OWLClass)
        yield from self.reasoner.sub_classes(concept, direct=False)

and from TripleStore:
    def get_all_sub_concepts(self, concept: OWLClass, direct=True):
        yield from self.reasoner.subconcepts(concept, direct)

one has direct to false and you cant change it, and the other has it to true by default but it is changeable.
-> so which behaviour is the one we should keep when merging?

So I was thinking a bit about this and this is my proposed solution:
First Part
We have this class ontolearn.abstracts.AbstractKnowledgeBase that KnowledgeBase inherit from.
Now, since we dont want the TripleStore to inherit from KnowledgeBase because their implementation should be different (for example TripleStore should not use cache etc) then we make TripleStore inherit from AbstractKnowledgeBase.
But AbstractKnowledgeBase has very few abstract methods to implement (this is not a problem until the Third part). That means we must populate AbstractKnowledgeBase with other abstract methods (naming  copied from KnowledgeBase). This class should contain only those methods that must be implemented by both KnowledgeBase and TripleStore.
Second Part
With that structure set to place, we can then merge TripleStoreKnowledgeBase with TripleStore. To do that, we remove one of them lets say TripleStoreKnowledgeBase and make TripleStore inherit from AbstractKnowledgeBase. Methods that do not conflict (extra methods so to day) are moved from TripleStoreKnowledgeBase to TripleStore. We keep TripleStoreReasoner and TripleStoreOntology which will be set as values to resoner and ontolgoy attributes of this new TripleStore class . The next step is removing TripleStoreReasonerOntology. Every method of that class can be transferred to either one of [TripleStore, TripleStoreReasoner or  TripleStoreOntology].
Third Part
Since our CEL algorithms currently accept as an argument only KnowledgeBase and some other accept KnowledgeBase | TripleStore, we need to set a standard to make it easier to use CELs with every possible implementation of  AbstractKnowledgeBase. Our newly designed TripleStore now inherits from AbstractKnowledgeBase, we need to change the type of these accepted argument in CEL algos to AbstractKnowledgeBase and you can freely use either KnowledgeBase or TripleStore`  in  every of them.
Other remarks
I am currently handling some comments and TODOs in the ontolearn.knowledge_base.py module which should either way be taken care off whether this suggestion is put to action or not and if we decide to go with my suggestion I will not be able to implement this until my vacations are over. But nevertheless, I would like to focus on this as soon as I back to work, to solve this problem once and for all ^_^ .
I would like to know your opinions and of course if you have any other suggestions.
P.S: I may work on this for the next few Mondays (since I have taken no vacation on Mondays) if I get the green line to continue with it by @Demirrr and if there is no other prioritized work to do.

First Part
Agreed!
Second Part
Mostly agreed. Currently, TripleStoreKnowledgeBase does not current work on large knowledge graphs.
This issue stems from the following inheritance:
class TripleStoreKnowledgeBase(KnowledgeBase):

. Therefore, I do not think that TripleStoreKnowledgeBase should play any role in our plan for the time being.
Hence, you can do whatever you like with it :)
Third Part
Agreed!
Plan

[ ] Write AbstractKnowledgeBase in abstracts.py. This abstract class includes the abstract methods.
[ ] TripleStore inherits from AbstractKnowledgeBase

For the sake of efficient programming and writing tests, we can do the following as well
In the construct of TripleStore, we should have path:str and url:str. If path is given, then we can use rdflib to read the given RDF knowledge graph into memory. The advantage is we can use SPARQL see the tutorial. By doing so, we can write unit tests for TripleStore and you do not need to handle managing a triple store instance (although it is not a much effort)


[Spec] Allow Verbosity to be changed

Summary
Writing all request and response data can be a heavy operation. We need a mechanism to control verbosity on the fly.
API
HttpMessageParts Flags
[Flags]
public enum HttpMessageParts
{
    Unknown = 0
    None = 1,

    RequestBody = 2,
    RequestHeaders = 4,
    RequestAll = RequestBody | RequestHeaders,

    ResponseBody = 8,
    ResponseHeaders = 16,

    ResponseAll = ResponseBody | ResponseHeaders,

    All = ResponseAll | RequestAll
}

HttpTracerHandler Public Property
public HttpMessageParts Verbosity { get; set; } = HttpMessageParts.RequestAll | HttpMessageParts.ResponseHeaders;

HttpTracerHandler Public Static Property
NOTE: we must validate this is not set to HttpMessageParts.Unknown
public static HttpMessageParts DefaultVerbosity { get; set; } = HttpMessageParts.Unknown;

Usage
The developer will need to ensure the HttpTracerHandler instance is available in order to change the verbosity on the fly.
using HttpTracer;
public async Task GetMyData()
{
    var tracer = new HttpTracerHandler();
    tracer.Verbosity = HttpMessageParts.RequestHeaders | HttpMessageParts.ResponseHeaders;
    var client = new HttpClient(tracer);
    var result = await client.GetAsync("http://myserviceurl.com");
}

Love it!!

What about the idea of having a Default = 0 position on the enumerator. Default would then be handled two ways.
If the user does nothing, it'll be "Information" (or maybe Warning...)
The user can also set the default via a static method/property.
HttpTracerHandler.DefaultLogLevel = LogLevel.Error
This way they can have a global log level for all instances, as well as custom log levels per instance where necessary.

@ChaseFlorell I like both those suggestions. Thanks for the thoughts and feedback!

What about offering the ability to take all HttpStatusCodes or a filtered list?
As a secondary part, add the ability to say parts of the Http body parts I want?
[Flags]
public enum HttpBodyParts
{
    RequestBody = 1,
    RequestHeaders = 2,
    RequestAll = RequestBody | RequestHeaders,

    ResponseBody = 4,
    ResponseHeaders = 8,

    ResponseAll = ResponseBody | ResponseHeaders,

    All = ResponseAll | RequestAll
}

This is definitely a better approach. I'll revise the spec.

I have a PR open for discussion purposes. #37


Fixed coverity issues

Fixes: #7720
Fixes: #7730
Coverity-CID: 186041
Coverity-CID: 186057

Codecov Report

Merging #7746 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master    #7746   +/-   ##
=======================================
  Coverage   55.01%   55.01%
=======================================
  Files         483      483
  Lines       53952    53952
  Branches    10495    10495
=======================================
  Hits        29682    29682
  Misses      19984    19984
  Partials     4286     4286

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update b1e06f2...50ac65a. Read the comment docs.


Thread joingraph unification (chore)

The PR rewrites the two separate Atomic and tak tests inside src/thread/thread_joingraph into one.
They were written, quick-and-dirty, over 1 year ago and large left untouched (see the git history).
This is a step toward bringing them closer to the style of the effective src/threadomain test.
As part of the rewrite it now occasionally triggers an explicit Gc.minor call.
The rewrite will make it easier to later experiment with and add additional functionality (signal raising, finalizers, ...)
If nothing else, it will also shave a couple of seconds of the test suite run time.

CI summary:

Cygwin trunk/5.2 part1 - timeout during a 4528.5s Lin DSL Out_channel test with Domain shrinking run
Windows 5.1 - timeout due to a 11331.5s Lin DSL Out_channel test with Domain shrinking run
2 x Windows trunk/5.2 - timeout during threadomain

I'll go ahead and merge


track arraybuffer support for binary websockets

track arraybuffer support for binary websockets

This issue was imported from Google Moderator
Moderator votes: +4
Issue added by g_grif on 2011-12-05
To vote this issue up or down, simply include +1 or -1 in your comment.

I believe this is already covered by https://caniuse.com/mdn-api_websocket_binarytype


general config needs updating

load the provided sample ini, run a process and you see that the config format changes (mostly cosmetic.. spaces) but also you see video-max-width and other fields added that arent on the readme.

Updated the sample to include a handful of missing settings and added video-max-width to the readme.
Thanks

side question, does this script allow doing variable bitrate for audio?

Not at this time, but its something I'm looking to add for video and audio in the future

sweet thanks.

Any update for variable bitrate?


Add *Interface suffix to all interfaces

Affected sub-projects:

https://github.com/event-band/band-framework
https://github.com/event-band/band-symfony-adapter
https://github.com/event-band/band-serializer-jms
https://github.com/event-band/band-symfony-bundle
https://github.com/event-band/band-transport-amqp-lib

I'm strongly against this. Yes, this code standard is usual for sf projects, but we have a separate project and can use our own standard. I can provide many arguments against, but this is just a code style holy war. My projects always have no such suffix for interfaces, because this suffix is redundant. But as this project goes to community we can discuss and vote.

I vote for *Interface. Sorry, chebba, but I'm with this guys =)


mame: general improvements

Description of changes

Fix desktop item
Add icon
Remove hardening disable
Add pre/postInstall hooks
Use libsForQt5 instead of libsForQt514
Unmark broken in aarch64-linux

Things done

Built on platform(s)

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

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] 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

[ ] 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/)
22.11 Release Notes (or backporting 22.05 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
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[x] Fits CONTRIBUTING.md.

@ofborg build mame

So heads-up for the situation in aarch64-linux: it builds fine, however it does seem slightly flaky. I got a build fail even on x86_64-linux, so it doesn't seem something exclusively for aarch64-linux, however it seems easier to trigger the flakiness there.


Update Auth samples to sync with internal changes

Could you give a brief description of this commit? I'm not familiar with this part of the code

This is a mirror of cl/206829557


Enable collection rendering for Super Scaffolded models

Closes https://github.com/bullet-train-co/bullet_train-base/issues/129
Joint PRs

https://github.com/bullet-train-co/bullet_train-themes/pull/23
https://github.com/bullet-train-co/bullet_train/pull/467

I'm having some trouble with Pagy, but this is the basic setup for getting collection rendering to work for Super Scaffolded models. There are some variable definitions at the beginning of these partials:
<% context ||= @team %>
<% hide_actions ||= false %>
<% hide_back ||= false %>

I'll have to sift through these a little bit more just to make sure they're in the right places.

I got Pagy to work (I noticed it's only for TangibleThings and not CreativeConcepts) but I still have to make sure Super Scaffolding itself works. I worked with it before I ran into the Pagy issue, but now the Pagy issue is figured out for the most part, this should be the last step.

Okay, things are working now. This and the joint PRs could use some clean up so I'll look over things, but we should be good to go.
The things I had the biggest issues with:

Pagination
Locales

Locales specifically because the scope of the translation keys were differing since I isolated the models to their own specific partial (i.e. - foos/_foo.html.erb). I ended up resorting to using the ClassNamesTransformer, and I wrote a comment just in case to make things clear.


404 page requires JS

I think it would be a good idea to at a minimum render something on 404 pages if JS is disabled.

I think it would be a good idea to slap a  tag on every page if javascript is disabled

I think it would be a good idea to slap a tag on every page if javascript is disabled

Most pages work decently without JS, I would want the 404 state to render without JS too.

Is anybody working on this issue? I would like to work on it.

@sourabpramanik Not that I’m aware of. Please do, PRs welcome!

Alright thanks 👍

Hi,
should we go for plain 404 page for all.
or should we check if the browser supports JS.
I think we can use
noscript tag.

FWIW, it seems that even the default 404 page does not work without JS. Next.js seems to always pick it up to inject its scripts.


added global config and humidity

request title should be 'added global config and pressure at sealevel'
copy src/config.js.dist to src/config.js , edit for your needs

Good addition but I had to make some changes.
With a selected sensor, there was an empty column.
Also, I set the default config to show irceline data, and use the original luftdaten api url.
The luftdaten api url which fetches everything made the app slow down significantly, so optimization will be a goal of mine.


Example quits on init() without warning/errors (Windows 10 + OF0.9.8)

Hi,
Thanks for the great addon!
I tried to build "example-features". It compiled and run successfully, but it terminated without any warning or errors. It happened after executing load_weights() of ofxDarknet::init(). Would you please help?

@musiko how did you manage to solve it?


Frame being displayed in Utterance view - which frame and why?

Just sent email about this.
The frame being displayed for each utterance is not the first frame; compare below.
Not sure how the frame is being chosen.
?

As discussed, this is because the thumbnail generation estimates the best quality frame based on the frame transitions so the thumbnail is not necessarily the first frame


Fixup include of "vk_mem_alloc.h"

No need to include via ../include
By linking against GPUOpen::VulkanMemoryAllocator the proper include directory is added to the project.

Thank you for this contribution.


ML-375: ML/Docs/PorterStemC not thread safe

Encapsulate code within a class and move static variables to member variables.
Make certain function arguments const to satisfy c++-11 compatible compilers.
Modernize code layout and convert use of TRUE/FALSE #defines to bool.
Convert embedded function from VARSTRING to STRING input and output.  Add sanity checks to avoid problems with empty strings and strings too long to be handled by the stemming algorithm (>255 characters).
Signed-off-by: Dan S. Camper<EMAIL_ADDRESS>

@ghalliday Please review

@johnholt which would you prefer - merging as is, or cleaning up some more first?

I was itching to modernize the code but thought anything beyond minimal changes would be rejected.  I'll be happy to take it on.

I'm pretty sure this code was cut/pasted many, many moons ago and has probably been through every major editor on the planet. We do have a close cousin of it in the salt libraries too ....
A clean version would be great although at least for us performance matters ...

Please keep in mind one of the objectives, that is, to faithfully implement the stemmer described in: Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14,   no. 3, pp 130-137
with notes to any departures.

@johnholt @ghalliday Please review the second set of changes.  I've updated the original commit comment above to better reflect all of the changes.
BTW, I found a test suite for Porter Stemming and ran this revised code through it.  There are ~23.5K input values with expected results.  This code does pass that test.  I can supply the test code if anyone wants it.

Yes please.  There is a test folder (actually several choices) for ecl-ml. At a minimum, the links in a .md document would be sufficient.

@dcamper the change looks good to me - much more readable than the original.
One comment on distributed.  Also you have lost a couple of DEPARTURE comments - I don't know if we care about those.
Since David says this is also used in SALT, I wonder if it should actually be moved into the string ecl library.  (Compiled into stringlib.cpp with a wrapper function in Str.ecl.)  @richardkchapman what do you think?

@johnholt I reinstated the DEPARTURE notes I inadvertently removed.  I also added a test dataset and a test function for PorterStemC.  I did not, however, add a BWR to actually execute the test function as it was unclear how tests are to be run.  Let me know if I need to change or add anything.

I think that is fine.  If we add it to the standard string library (an OK idea even though I find Porter a bad idea in most contexts) we will add an explicit validation test.

@richardkchapman  This looks good to go now.  Please merge when convenient.

@dabayliss Are similar changes need in Salt's close cousin?

We have already applied similar modification of the original PorterStem algorithm implementation when we ported it to SALT module and saltlib shared library. The saltlib port was reviewed and approved by Gavin (https://github.com/hpcc-systems/LN/pull/637).


Panel Diversity Report

Extension of the work on merit lists to enable Diversity to look at how many candidates are seen by each panel at each stage of an exercise.
Google doc: https://docs.google.com/document/d/1k5jVbchibCjYp1yVfk3WB1mge07_njepPVNcEl5boNU/edit

This is on hold / blocked until related work on Panellists has been included

This is to be re-written as there are two related reports:

For each panel, what is the diversity of the candidates they have assessed
For each panel, what is the diversity of the panel members

In the first instance we will create a report to provide the candidate diversity for each panel.
The SETs / statisticians will work out the panel member diversity from the report we provide using the panel member diversity that they have.


Backend fails and frontend keeps restarting and NetworkError

What is the issue?
Following the instructions of running from source (using make first-run), backend fails and frontend keeps restarting.
Issue 1
The log in the backend shows:
{"log":"usage: gunicorn [OPTIONS] [APP_MODULE]\r\n","stream":"stdout","time":"2024-06-30T17:46:32.725141827Z"}
{"log":"gunicorn: error: unrecognized arguments: --host <IP_ADDRESS> --port 8000\r\n","stream":"stdout","time":"2024-06-30T17:46:32.72521952Z"}
{"log":"usage: gunicorn [OPTIONS] [APP_MODULE]\r\n","stream":"stdout","time":"2024-06-30T17:47:26.680371566Z"}
{"log":"gunicorn: error: unrecognized arguments: --host <IP_ADDRESS> --port 8000\r\n","stream":"stdout","time":"2024-06-30T17:47:26.680407197Z"}

Which seems to be because --host is passed to gunicorn here https://github.com/cohere-ai/cohere-toolkit/blob/main/src/backend/Dockerfile#L54
The frontend log shows:
><EMAIL_ADDRESS>start
> next start

   ▲ Next.js 14.1.1
   - Local:        http://localhost:3000

Next.js environment variables: {
  NEXT_PUBLIC_API_HOSTNAME: 'http://localhost:8000',
  NEXT_PUBLIC_FRONTEND_HOSTNAME: 'http://localhost:4000',
  NEXT_PUBLIC_HAS_CUSTOM_LOGO: 'false'
}
[Error: ENOENT: no such file or directory, open '/app/.next/BUILD_ID'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: '/app/.next/BUILD_ID'
}

Issue 2
These issues seem to be caused by @rodrigue-h's most recent commit #ff80f21, so I reverted that commit and now frontend and backend are both running. However, when entering a message (using cohere), there's an error message "NetworkError when attempting to fetch resource".
Issue 3
Now I decide to give up and directly use docker run -e COHERE_API_KEY='my_cohere_api_key' -p 8000:8000 -p 4000:4000 ghcr.io/cohere-ai/cohere-toolkit:latest, but same error message "NetworkError when attempting to fetch resource". When I look at console logs in my browser, it seems to be caused by CORS errors. Not sure if this is related to https://github.com/cohere-ai/cohere-toolkit/issues/106.

@da03 were you able to retry with main? We changed our setup recently, you should be able to generate some config yaml files, then run make dev

We're going to get rid of the single docker images, so I'll close this issue


Implement FFT

[x] First Algo. (Cooley–Tukey algorithm)
[x] Second Algo. (mixed-radix)
[ ] Third Algo.

The commit 74232fa

Issue about input size is done. For more detail, see #9

This commit a3c76ca has implemented the first algorithm - mixed-radix Cooley–Tukey algorithm.
It import external package pocketfft to fulfill this algo.

Instead writing 3rd algorithm, I would like to enhance the first algorithm more. Thus, I close this issue for not keep learning and implementing others.


Unify integration testing infrastructure

We currently have several integration tests under integration-tests/ with some redundant functionality and using a variety of testing frameworks (unittest, manual checking, etc). These should be unified into a single integration test suite.

This was basically resolved by the addition of integration_tests/test_utils.py in #251


Fancy Zones - Allow Snapping to zones from two monitors

Description of the new feature / enhancement
Allow the user to drop a window over zones from adjacent monitors, eg.
 Monitor 1  |  Monitor 2
[ A ] [ B ] | [ C ] [ D ]

Allow the user to drop the window onto zone [ B ] and [ C ] and span the window across those zones
Scenario when this would be used?
This is particularly useful for Ultrawide users running in PBP (Picture by Picture) Mode

Supporting information
No response

While dragging a window, you can press/hold Ctrl to select multiple zones. Is this not working for you?

enable this setting.

Actually,

[x] Show zones on all screens while dragging a window

is the you you would need here. Can you confirm if that solves it @blowsie ?

Yes thank you works well!
I have noticed a decrease in performance with this setting, but I can live with it! Thank you


FAQ page

Create an faq page..

I've added a table for FAQs and a command line tool to bulk load FAQs from a file. FAQs can now be viewed by students. A similar view should be added for faculty as well.

FAQ page for the faculty has been written. The profile tab for the faculty needs to be done.

Bug - hitting the FAQ button on the faculty page for approving courses takes the faculty to the student FAQ rather than the faculty FAQ!

Bug fixed!!


Wemos D1 mini Pro isn't able to retrieve message from Gist file

Hi! I was trying to replicate this project on my D1 mini Pro and realised that it wasn´t being able to fetch the message from my gist file in any way.
I even tested all the componnents to look for any flaw on their connctions, but there is any and the Servo, Display and light sensor are working correctly. I am really lost, because it is indeed connecting to the WiFi (If I use my cellphone's conection as a router, it appears as a connected device) and my Gist url is written as /GitHub-username/Hash-Value/raw, but it still doesn't work.
Can somebody help me PLEASE?
Thanks :)

So I just figured out why mine wasn't doing anything... the wrong board was selected. Now I know you probably aren't as dumb as me but I figured it out because nothing was being written to the serial monitor, open that up and see if everything works. While I'm still stuck in the "Fetching message . . ." phase, at least I know what the problem is!
P.S. I'm using the Marcelstoer branch as they added some functionality and debugging things
Github: https://github.com/marcelstoer/Lovebox
Article: https://frightanic.com/iot/the-lovebox-a-gift-from-a-maker/#comments

Hey @HerbGlrt
You mentioned that you wrote the Gist url as /GitHub-username/Hash-Value/raw but afterwards you need also the file name.
Please look here for an example: https://github.com/julisa99/Lovebox/issues/7
Merry Christmas! 🎄🎁

Hey @Xatonic
I had actually updated the code, so that the Lovebox connects again with the WLAN, if the connection breaks.
Of course, it can always take a while until the new message is retrieved, but only a few minutes.
Merry Christmas! 🤶

Thank you so much guys! It worked, and I guess that it was really a problem with the URL writing, because when the file name was put at the end of it, the message was finally able to appear!
I am going to give this project as a gift for my girlfriend this chrtistmas, so you saved my life just in time :):)
Thank you!


Scala 3 parser can be DoS'ed by JSON object with keys that have the same hash code

Sub-quadratic decreasing of Scala 3 parser throughput when number of JSON object fields (with keys that have the same hash code) is increasing
On contemporary CPUs parsing of such JSON object (with a sequence of 100000 fields like below that is ~1.6Mb) can took more than 5 minutes for Scala 3 parser:
{
"!!sjyehe":null,
"!!sjyeiF":null,
"!!sjyej'":null,
"!!sjyfIe":null,
"!!sjyfJF":null,
...
}

Below are results of the benchmark where size is a number of such fields:
[info] Benchmark                           (size)   Mode  Cnt        Score   Error  Units
[info] ExtractFieldsReading.uPickle             1  thrpt        690803.518          ops/s
[info] ExtractFieldsReading.uPickle            10  thrpt        119127.307          ops/s
[info] ExtractFieldsReading.uPickle           100  thrpt          8654.470          ops/s
[info] ExtractFieldsReading.uPickle          1000  thrpt           118.763          ops/s
[info] ExtractFieldsReading.uPickle         10000  thrpt             0.885          ops/s
[info] ExtractFieldsReading.uPickle        100000  thrpt             0.003          ops/s

uPickle version
2.0.0
Scala version
3.2.1
JDK version
11+
Steps to reproduce
To run that benchmarks on your JDK:

Install latest version of sbt and/or ensure that it already installed properly:

sbt about

Clone jsoniter-scala repo:

git clone --depth 100 https://github.com/plokhotnyuk/jsoniter-scala.git

Enter to the cloned directory:

cd jsoniter-scala

Run benchmarks:

sbt 'jsoniter-scala-benchmarkJVM/jmh:run -wi 1 -i 1 ExtractFieldsReading.uPickle'

Here a self-contained reproduction copy pasted from the jsoniter-scala benchmark:
import upickle.default._

object Main {
  def zeroHashCodeStrings: Iterator[String] = {
    def charAndHash(h: Int): Iterator[(Char, Int)] = ('!' to '~').iterator.map(ch => (ch, (h + ch) * 31))

    for {
      (ch0, h0) <- charAndHash(0)
      (ch1, h1) <- charAndHash(h0)
      (ch2, h2) <- charAndHash(h1) if ((h2 + 32) * 923521 ^ (h2 + 127) * 923521) < 0
      (ch3, h3) <- charAndHash(h2) if ((h3 + 32) * 29791 ^ (h3 + 127) * 29791) < 0
      (ch4, h4) <- charAndHash(h3) if ((h4 + 32) * 961 ^ (h4 + 127) * 961) < 0
      (ch5, h5) <- charAndHash(h4) if ((h5 + 32) * 31 ^ (h5 + 127) * 31) < 0
      (ch6, h6) <- charAndHash(h5) if (h6 + 32 ^ h6 + 127) < 0
      (ch7, _) <- charAndHash(h6) if h6 + ch7 == 0
    } yield new String(Array(ch0, ch1, ch2, ch3, ch4, ch5, ch6, ch7))
  }

  val jsonString =
    zeroHashCodeStrings
      .map(s => ujson.write(s))
      .take(1000000)
      .mkString("{", s":null,", ":null}")

  case class Foo()
  implicit val rw: ReadWriter[Foo] = macroRW[Foo]

  def main(args: Array[String]): Unit = {
    // in any Scala version
    ujson.read(jsonString)
    // Scala 3 only
    upickle.default.read[Foo](jsonString)
  }
}

It would be nice if we could fix the problem for ujson as well. We need to use a Map implementation which is not vulnerable to this attack. This is a great time, since it might be a binary incompatible change. Should I open another issue for ujson?

sure open an issue. Not sure how feasible it is to change though, we would lose the ordering guarantees that LinkedHashMap gives us which I'm not convinced is a good tradeoff for this edge case

@lihaoyi @lolgab How about an option of using Java's LinkedHashMap with a Scala wrapper?


Vultr ssh support

Old pull request from non-existent fork ( https://github.com/apache/libcloud/pull/455 ) is closed, but issues referenced there have been addressed in this branch.

 This can be closed. Changes are included in https://github.com/apache/libcloud/pull/505


Silently log out user the app, not from the Microsoft account

Core Library
MSAL.js v2 (@azure/msal-browser)
Core Library Version
2.35.0
Wrapper Library
MSAL React (@azure/msal-react)
Wrapper Library Version
1.5.5
Public or Confidential Client?
Public
Description
Is there a way to silently log out a user from the app?
We sign in user using msal, receive idToken, validate it, and then use our cookies to manage user's session. But since the library stores cache when we do log out in our app, msal still have idToken of the user.
How can we clear this idToken? We don't want to use logout method and log out the user from his Microsoft account. We just want to clear information in our app, as though the user just opened the page for the first time.
One way to achieve this is to use SessionStorage for caching and clear it on user log out, but it looks like a hack
MSAL Configuration
No response
Relevant Code Snippets
No response
Identity Provider
Azure AD / MSA
Source
Internal (Microsoft)

Hi @davoam , we have some documentation on silently logging the user out (Promptless logout). Please have a look and let me know if you need more help!

Got it.. I think this is more suited for your needs: https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/logout.md#skipping-the-server-sign-out

Closing this as the guidance is provided. Please let us know if you need more help, preferably, create a new issue. Thanks.

@lalimasharda @sameerag thanks!


Specifying stdout and stderr for multiple Apps

Hello!
Due to the ClipGlobals class, the stdout and sterr can only be specified once for multiple Apps in the same Python run.
By this, I mean that if you have multiple App objects (a different one for each embedded use, etc) the stdout and stderr are set to value specified by the last instantiated App.
For example, in this code:
first_app = clip.App(stdout=first_stream)

# Later on...
second_app = clip.App(stdout=second_stream)

If I were to clip.echo() in a command in first_app, it would write to second_stream.
It may take some significant refactoring to fix this due to the structure of the project. If too large to fix, any workarounds available?

Hi, thanks for the feedback!
Yes, the original thought of this was that certain functions like echo() and exit() should be sort-of-singletons, accessible from anywhere with minimal effort. Otherwise, you would have to start passing around references to apps or commands and that could get painful.
One solution I see is to maintain a table of streams keyed by app. So:
first_app = clip.App(name='app1', stdout=first_stream)
second_app = clip.App(name='app2', stdout=second_stream)

clip.echo('some message', app='app1')  # Writes to first_app's stream
clip.echo('broadcast')  # Writes to all registered streams...?

In the general case you'd have only one app registered and so clip.echo() would function as expected. Let me know what you think!

Due to inactivity, I have decided to implement this as previously described. You can grab it in 0.3.0, and docs can be found here.
Feel free to reopen if you have any additional comments/concerns/suggestions. Thanks!

Ah, I forgot I opened this issue!
Yes, it looks like a great solution. I especially like the use of [appname].echo().
On a side note, 639baa0 is really useful. I had a project that I had to strip the newlines when making a stream, but now I don't have to do that!


Type problems

The 9.x version broke a couple of things related to types.
The main thing that is not working for me anymore are validators:
FormControl<int>(
  validators: [
    (control) {
      // type error
      // type '(AbstractControl<int>) => Map<String, dynamic>' is not a subtype of type '(AbstractControl<dynamic>) => Map<String, dynamic>'
    }
  ],
),

This happens due to missing generic types here: https://github.com/joanpablo/reactive_forms/blob/master/lib/src/models/models.dart#L89
But if I add the types there, then the form builder (which I don't use) doesn't work anymore as it completely relies on dynamic and is not type safe at all.
00:02 +136 -1: /Users/foo/workspace/flutter/reactive_forms/test/src/models/form_builder_test.dart: Form Builder Build a group with multiple validators [E]
  type 'List<(AbstractControl<String>) => Map<String, dynamic>>' is not a subtype of type 'List<(AbstractControl<dynamic>) => Map<String, dynamic>>'
  test/src/models/form_builder_test.dart 163:38  main.<fn>.<fn>

00:02 +136 -2: /Users/foo/workspace/flutter/reactive_forms/test/src/models/form_builder_test.dart: Form Builder Build a group with default value and validator [E]
  type 'List<(AbstractControl<String>) => Map<String, dynamic>>' is not a subtype of type 'List<(AbstractControl<dynamic>) => Map<String, dynamic>>'
  test/src/models/form_builder_test.dart 183:38  main.<fn>.<fn>

The whole form builder will never work with strong typing in its current design.
I suggest to create a new form builder with strong typing by using Dart chaining, something like this:
fb
  ..control<String>('foo', value: 'bar', validators: [...], ...)
  ..control<int>('int', ...)
  ..group('my-group', (g) => g
        ..control<X>('x', ...)
        ..control<Y>('y', ...))
  ..array('my-array', (a) => a
        ..control<Z>('z', ...))

FYI @vasilich6107

Hi @kuhnroyal,
Thanks for the issue, very useful. I have detected a problem that for some reason didn't come up in tests (a bug is always a missing test). I had to roll back the strong type in ValidatorFunctions.
Please update and try the last version 9.0.2, and let me know if the issue is solved.
Thanks and Best regards

9.0.2 works but it is also a step backwards. dynamic is the mortal enemy of null-safety. I strongly suggest to get rid of the dynamic form builder and add strong typing before adding null-safety. Otherwise null-safety will in most cases not have the desired impact.

You are right @kuhnroyal, after finish the opened issues related to some bugs, I will focus on null-safety. Your issue helps me to detect a unit test that was not correctly coded. I'm glad that everything is now working as expected for you. For now, I will close the issue. Please don't hesitate to open it again or to open another if you find any other issue.
Best regards


Connect-AzureRmAccount on Az

The documentation says that Connect-AzureRmAccount should be used to logon.  Previous issues suggest Login-AzureRmAccount may work, but this doesn't seem to be the case either.
fl1bbl3@limbo:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.5 LTS"
fl1bbl3@limbo:~$ pwsh
PowerShell 6.1.1
Copyright (c) Microsoft Corporation. All rights reserved.
https://aka.ms/pscore6-docs
Type 'help' to get help.
PS /home/fl1bbl3> Get-Module -All
ModuleType Version    Name                                ExportedCommands

Binary     <IP_ADDRESS>    Microsoft.PowerShell.Commands.Ut... {Add-Member, Add-Type, Compare-Object, ConvertTo-Html...}
Binary     <IP_ADDRESS>    Microsoft.PowerShell.PSReadLine2    {Get-PSReadLineOption, Set-PSReadLineOption, Set-PSReadLineKeyHandler, Get-PSReadLineKeyHandler...}
Script     0.0        Microsoft.PowerShell.Utility        ConvertFrom-SddlString
Manifest   <IP_ADDRESS>    Microsoft.PowerShell.Utility        {Add-Member, Add-Type, Clear-Variable, Compare-Object...}
Script     2.0.0      PSReadLine                          {Get-PSReadLineKeyHandler, Get-PSReadLineOption, Remove-PSReadLineKeyHandler, Set-PSReadLineKeyHandler...}
PS /home/fl1bbl3> Import-Module Az
PS /home/fl1bbl3> Connect-AzureRmAccount
Connect-AzureRmAccount : The term 'Connect-AzureRmAccount' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1

Connect-AzureRmAccount

CategoryInfo          : ObjectNotFound: (Connect-AzureRmAccount:String) [], CommandNotFoundException
FullyQualifiedErrorId : CommandNotFoundException

PS /home/fl1bbl3> Get-Module -ListAvailable -Name AzureRM | Select-Object Name,Version
PS /home/fl1bbl3> Get-Module -ListAvailable -Name AzureRM.NetCore | Select-Object Name,Version
PS /home/fl1bbl3> Get-Module -ListAvailable -Name Az | Select-Object Name,Version
PS /home/fl1bbl3> Get-Module -Name Az
ModuleType Version    Name                                ExportedCommands

Script     0.7.0      Az
PS /home/fl1bbl3> Login-AzureRmAccount
Login-AzureRmAccount : The term 'Login-AzureRmAccount' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1

Login-AzureRmAccount

CategoryInfo          : ObjectNotFound: (Login-AzureRmAccount:String) [], CommandNotFoundException
FullyQualifiedErrorId : CommandNotFoundException

PS /home/fl1bbl3>

Forgot installation method of Az.  It was installed via PSGallery
PS /home/fl1bbl3> Get-InstalledModule -Name Az
Version              Name                                Repository           Description

0.7.0                Az                                  PSGallery            Azure Resource Manager Module. Cmdlets to manage resources in Azure.  This module is compatible with PowerShell and PowerShel...

This could be an issue with the Az aliasing. Make sure that you've enabled aliases with Enable-AzureRMAlias, and if the comamnd still doesn't work, file an issue with the Azure PowerShell team. I've brought this issue up to them before and it was supposed to be fixed.

Had run it (Enable-AzureRmAlias) initially as root, but hadn't run it as my user account.  Sorry!


Color picker fix typo

Color Picker fix typing error

Learn Build status updates of commit 249653c:
:x: Validation status: errors
Please follow instructions here which may help to resolve issue.

File
Status
Preview URL
Details

:x:Error

Details

[Error: CannotMergeCommit] Cannot merge commit 249653c7a8edb2ef28002349ee2362a15e89f1f4 in branch ColorPicker_Update of repository https://github.com/donlaci/windows-dev-docs into branch docs (commit 04ef833171e5292773a33c9bfe16745758948532). Please follow this documentation: https://help.github.com/articles/resolving-a-merge-conflict-using-the-command-line/ to use git.exe to resolve you content conflicts locally and then push to remote.

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Learn Build.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
Note: Your PR may contain errors or warnings or suggestions unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching the learn.microsoft.com contributor guidesPost your question in the Learn support channel


on() should work

We should accept an empty list of labels for aggregation and vector matching. The only place this offers new semantics is with on, as it'll let us do on() rather than on(dummy).

Would on be valid, too, then? I.e. on == on() == on(does_not_exist) ?

Hmm, for clarity we may want to keep it to only on()

:+1: to always requiring the parentheses.

Should we also require them for group_left for consistency? My instinct says no.

From a natural language perspective, group_left/group_right totally makes sense without parentheses, while on would imply that the next token is what you join "on". From a purely syntactical perspective, it's however inconsistent that sometimes modifier() is equivalent to modifier and sometimes not.
Another point is that group_left/group_right will be used most of the time without any following labels, while it's the other way round with on (usually you would list at least one label, and the case without a label is pretty special).
In conclusion, I'd definitely allow group_left/group_right without parentheses. Whether we want allow on without parentheses for consistency or require on() to avoid misreading of queries is a matter of discussion.

What's the status here?
How necessary is it really for 1.0?

I hope to take care of this in the next few weeks.
This isn't critical for 1.0, it cleans up a not uncommon use case.


Add Francis Polignano as a contributer

Add Francis Polignano as a contributer.
He created the DevOps, setting up the banks and nodes videos that were published last month.
he is @FrancisPolignano on slack.
Thank You

@nicocrozier can you provide the contributor info with the following format?
Team: [TEAM NAME]

{
  "title": [JOB TITLE],
  "isLead": [true OR false],
  "payPerDay": 2800,
  "createdDate": "2020-07-08T02:14:59.307535Z",
  "contributor": {
    "contributorId": [CONTRIBUTOR ID],
    "displayName": [DISPLAY NAME],
    "githubUsername": [GITHUB USERNAME],
    "profileImage": [PROFILE IMAGE URL (Slack or GitHub URL)],
    "slackUsername": [SLACK USERNAME]
  }
}

Team: [YouTube Educator]
{
"title": [YouTube Educator],
"isLead": [false],
"payPerDay": 2800,
"createdDate": "2020-07-08T02:14:59.307535Z",
"contributor": {
"contributorId": [CONTRIBUTOR ID],
"displayName": [Francis Polignano],
"githubUsername": [franchyze923],
"profileImage": [https://ca.slack-edge.com/T07PJD1FZ-U01DQAFHKE3-aad7fcf8fa5b-512],
"slackUsername": [@Francis Polignano]
}
}

Fixed by #1164
TNB account : c5778aee3cfd83c2088ae81c178c3d34931399f20c1492c33044d8cd85e21898

Fixed by #1164
TNB account : c5778aee3cfd83c2088ae81c178c3d34931399f20c1492c33044d8cd85e21898


Python 3.10 + dependencies

@tanujjain is this project still maintained?

It is a pain to install, your dependencies need some love it seems.
It does not seem to be possible to install this project with python 3.10.
Do I understand it correctly, that Python 3.7 is the last supported version?

Also: when installing via pip the following error occurs:
INFO: pip is looking at multiple versions of imagededup to determine which version is compatible with other requirements. This could take a while.
ERROR: Cannot install imagededup because these package versions have conflicting dependencies.

The conflict is caused by:
    tensorflow 2.7.0 depends on termcolor>=1.1.0
    tensorflow 2.6.2 depends on wrapt~=1.12.1
    tensorflow 2.6.1 depends on wrapt~=1.12.1
    tensorflow 2.6.0 depends on wrapt~=1.12.1
    tensorflow 2.5.2 depends on wrapt~=1.12.1
    tensorflow 2.5.1 depends on wrapt~=1.12.1
    tensorflow 2.5.0 depends on wrapt~=1.12.1
    tensorflow 2.4.4 depends on wrapt~=1.12.1
    tensorflow 2.4.3 depends on wrapt~=1.12.1
    tensorflow 2.4.2 depends on wrapt~=1.12.1
    tensorflow 2.4.1 depends on wrapt~=1.12.1
    tensorflow 2.4.0 depends on wrapt~=1.12.1
    tensorflow 2.3.4 depends on termcolor>=1.1.0
    tensorflow 2.3.3 depends on termcolor>=1.1.0
    tensorflow 2.3.2 depends on termcolor>=1.1.0
    tensorflow 2.3.1 depends on termcolor>=1.1.0
    tensorflow 2.3.0 depends on termcolor>=1.1.0
    tensorflow 2.2.3 depends on termcolor>=1.1.0
    tensorflow 2.2.2 depends on termcolor>=1.1.0
    tensorflow 2.2.1 depends on termcolor>=1.1.0
    tensorflow 2.2.0 depends on termcolor>=1.1.0
    tensorflow 2.1.4 depends on termcolor>=1.1.0
    tensorflow 2.1.3 depends on termcolor>=1.1.0
    tensorflow 2.1.2 depends on termcolor>=1.1.0
    tensorflow 2.1.1 depends on termcolor>=1.1.0
    tensorflow 2.1.0 depends on termcolor>=1.1.0
    tensorflow 2.0.4 depends on termcolor>=1.1.0
    tensorflow 2.0.3 depends on termcolor>=1.1.0
    tensorflow 2.0.2 depends on termcolor>=1.1.0
    tensorflow 2.0.1 depends on termcolor>=1.1.0
    tensorflow 2.0.0 depends on termcolor>=1.1.0
    tensorflow 1.15.5 depends on termcolor>=1.1.0
    tensorflow 1.15.4 depends on termcolor>=1.1.0
    tensorflow 1.15.3 depends on termcolor>=1.1.0
    tensorflow 1.15.2 depends on termcolor>=1.1.0
    tensorflow 1.15.0 depends on termcolor>=1.1.0
    tensorflow 1.14.0 depends on termcolor>=1.1.0
    tensorflow 1.13.2 depends on termcolor>=1.1.0
    tensorflow 1.13.1 depends on termcolor>=1.1.0

To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict

ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/user_guide/#fixing-conflicting-dependencies

Also: when installing via pip the following error occurs:
INFO: pip is looking at multiple versions of imagededup to determine which version is compatible with other requirements. This could take a while.
ERROR: Cannot install imagededup because these package versions have conflicting dependencies.

The conflict is caused by:
    tensorflow 2.7.0 depends on termcolor>=1.1.0
    tensorflow 2.6.2 depends on wrapt~=1.12.1
    tensorflow 2.6.1 depends on wrapt~=1.12.1
    tensorflow 2.6.0 depends on wrapt~=1.12.1
    tensorflow 2.5.2 depends on wrapt~=1.12.1
    tensorflow 2.5.1 depends on wrapt~=1.12.1
    tensorflow 2.5.0 depends on wrapt~=1.12.1
    tensorflow 2.4.4 depends on wrapt~=1.12.1
    tensorflow 2.4.3 depends on wrapt~=1.12.1
    tensorflow 2.4.2 depends on wrapt~=1.12.1
    tensorflow 2.4.1 depends on wrapt~=1.12.1
    tensorflow 2.4.0 depends on wrapt~=1.12.1
    tensorflow 2.3.4 depends on termcolor>=1.1.0
    tensorflow 2.3.3 depends on termcolor>=1.1.0
    tensorflow 2.3.2 depends on termcolor>=1.1.0
    tensorflow 2.3.1 depends on termcolor>=1.1.0
    tensorflow 2.3.0 depends on termcolor>=1.1.0
    tensorflow 2.2.3 depends on termcolor>=1.1.0
    tensorflow 2.2.2 depends on termcolor>=1.1.0
    tensorflow 2.2.1 depends on termcolor>=1.1.0
    tensorflow 2.2.0 depends on termcolor>=1.1.0
    tensorflow 2.1.4 depends on termcolor>=1.1.0
    tensorflow 2.1.3 depends on termcolor>=1.1.0
    tensorflow 2.1.2 depends on termcolor>=1.1.0
    tensorflow 2.1.1 depends on termcolor>=1.1.0
    tensorflow 2.1.0 depends on termcolor>=1.1.0
    tensorflow 2.0.4 depends on termcolor>=1.1.0
    tensorflow 2.0.3 depends on termcolor>=1.1.0
    tensorflow 2.0.2 depends on termcolor>=1.1.0
    tensorflow 2.0.1 depends on termcolor>=1.1.0
    tensorflow 2.0.0 depends on termcolor>=1.1.0
    tensorflow 1.15.5 depends on termcolor>=1.1.0
    tensorflow 1.15.4 depends on termcolor>=1.1.0
    tensorflow 1.15.3 depends on termcolor>=1.1.0
    tensorflow 1.15.2 depends on termcolor>=1.1.0
    tensorflow 1.15.0 depends on termcolor>=1.1.0
    tensorflow 1.14.0 depends on termcolor>=1.1.0
    tensorflow 1.13.2 depends on termcolor>=1.1.0
    tensorflow 1.13.1 depends on termcolor>=1.1.0

To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict

ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/user_guide/#fixing-conflicting-dependencies

I tried 3.8, it worked for me.

@protux Apologies for the lack of maintenance. We just released a new version that works with python 3.8/9/10. Please give it a try.


ng2-breadcrumb has been migrated to Angular 5 (ng5-breadcrumb)

Issue after upgrading to ng5-breadcrumb and Angular 5.0
getting below error in console
compiler.js:466 Uncaught Error: Template parse errors:
Can't bind to 'useBootstrap' since it isn't a known property of 'breadcrumb'. ("
][useBootstrap]="false" prefix="Pepper Ops">

"): ng:///PagesModule/PagesComponent.html@30:16
'breadcrumb' is not a known element:
If 'breadcrumb' is an Angular component, then verify that it is part of this module.
To allow any element add 'NO_ERRORS_SCHEMA' to the<EMAIL_ADDRESS>of this component. ("
[ERROR ->]

Hi guys,
I fixed this issue.
It was coming from a missing export of the ng5-breadcrumb module.
Regards,
Aissam

This doesn’t seem to work with the latest on npm

I added the exports to the npm module, all my builds were fixed but no breadcrumbs appeared on my lazy loaded modules like before. Until this is fixed, I'm copying the source and importing the old ng2-breadcrumb directly into my  angular 5 project and if I can fix that aot error I'll make a pull to this repo. @aissamJ thanks for fixing the build issues, but I can't get the components to work. I think a very small pull request fixing the aot issues for angular 5 will suffice

Upon adding the old ng2-breadcrumb directly into a massive sass project (30+ components use breadcrumbs lazily) without npm, everything works properly. It is simply the build system and exporting that needs reworking - not a completely rewrite or reformatting


Types declared by a macro are not visible outside the library where the macro was applied

When a macro is applied in a library application.dart and generates a class there, this class can only be used inside that library. When importing application.dart in another library, the generated class can't be used there.
macro.dart:
import 'package:macros/macros.dart';

macro class MyMacro implements ClassTypesMacro {
  const MyMacro();

  @override
  Future<void> buildTypesForClass(ClassDeclaration clazz, ClassTypeBuilder builder) async {
    builder.declareType('GeneratedClass', DeclarationCode.fromString('class GeneratedClass {}'));
  }
}

application.dart:
import 'macro.dart';

@MyMacro()
class MyClass {}

final generatedInstanceSameLibrary = GeneratedClass(); // OK.

main.dart:
import 'application.dart';

final generatedInstanceDifferentLibrary = GeneratedClass(); // Error.

void main() {
  print(generatedInstanceSameLibrary);
}

pubspec.yaml

name: temp1

environment:
  sdk: ^3.5.0-180

dependencies:
  macros: ^0.1.0-main.5 # For 3.5.0-180

% dart run --enable-experiment=macros lib/main.dart
lib/main.dart:3:43: Error: Method not found: 'GeneratedClass'.
final generatedInstanceDifferentLibrary = GeneratedClass();
                                          ^^^^^^^^^^^^^^

The expected behavior is that GeneratedClass is available everywhere application.dart is imported. Quoting the augmentation feature specification:

Like a part file, all of the top-level declarations it produces end up in the top-level scope of the augmented library.

If the erroneous line in main.dart is commented out, the program runs as expected.
dart info

#### General info

- Dart 3.5.0-180.3.beta (beta) (Wed Jun 5 15:06:15 2024 +0000) on "macos_arm64"
- on macos / Version 13.6 (Build 22G120)
- locale is en-GE

#### Project info

- sdk constraint: '^3.5.0-180'
- dependencies: macros
- dev_dependencies:

#### Process info

| Memory |  CPU | Elapsed time | Command line                                                                               |
| -----: | ---: | -----------: | ------------------------------------------------------------------------------------------ |
| 124 MB | 0.0% |     05:57:34 | dart language-server --client-id=Android-Studio --client-version=AI-223.8836.35 --protocol=analyzer |
| 110 MB | 0.0% |     12:14:41 | dart language-server --client-id=Android-Studio --client-version=AI-223.8836.35 --protocol=analyzer |
|  88 MB | 0.0% |  01-10:36:02 | dart language-server --client-id=Android-Studio --client-version=AI-223.8836.35 --protocol=analyzer |
| 112 MB | 0.0% |     04:56:23 | dart language-server --client-id=Android-Studio --client-version=AI-223.8836.35 --protocol=analyzer |
| 101 MB | 0.0% |     04:41:48 | dart language-server --client-id=Android-Studio --client-version=AI-223.8836.35 --protocol=analyzer |
| 107 MB | 0.0% |  01-08:01:56 | dart language-server --client-id=Android-Studio --client-version=AI-223.8836.35 --protocol=analyzer |
|  89 MB | 0.0% |     04:31:30 | dart language-server --client-id=Android-Studio --client-version=AI-223.8836.35 --protocol=analyzer |
|  73 MB | 0.0% |     04:30:53 | dart language-server --client-id=Android-Studio --client-version=AI-223.8836.35 --protocol=analyzer |
| 111 MB | 0.0% |        04:58 | dart language-server --client-id=Android-Studio --client-version=AI-223.8836.35 --protocol=analyzer |
| 240 MB | 0.0% |     07:40:44 | dart language-server --client-id=Android-Studio --client-version=AI-223.8836.35 --protocol=analyzer |
|  57 MB | 0.0% |  04-11:59:25 | dart language-server --protocol=lsp --client-id=VS-Code --client-version=3.90.0            |
|  27 MB | 0.0% |  04-11:59:25 | dart tooling-daemon --machine                                                              |
|  49 MB | 0.0% |     05:57:34 | flutter_tools.snapshot daemon                                                              |
|  41 MB | 0.0% |     12:14:40 | flutter_tools.snapshot daemon                                                              |
|  47 MB | 0.0% |     04:56:23 | flutter_tools.snapshot daemon                                                              |
|  48 MB | 0.0% |     04:41:48 | flutter_tools.snapshot daemon                                                              |
|  41 MB | 0.0% |  01-08:01:56 | flutter_tools.snapshot daemon                                                              |
|  47 MB | 0.0% |     07:40:44 | flutter_tools.snapshot daemon                                                              |

Looks like a duplicate of https://github.com/dart-lang/sdk/issues/55670

No, that one concerned using macros from a different package. This one is within the same project. By library I mean just a .dart file.
Also, with this issue a macro works (this is seen by application.dart having no errors) but what it declares on the top level is not merged into the augmented library's top-level scope.
And there's no workaround for this I could find. I just have to declare empty classes and let a macro fill them instead of fully creating them. It's OK for playing around but I can't release my betas with this.

@alexeyinkin Does the analyzer give an error, or do you only see the error when running dart run?

@jakemac53 as of 3.5.0-292 the analyzer is showing no issues, just dart run.

Sounds like a CFE issue then (already categorized as such).


Not able to run "drop materialized view if exist" sql in another schema, if public schema has a table with same name as materialized view

What version of Flyway are you using?
4.1.2
Which client are you using? (Command-line, Java API, Maven plugin, Gradle plugin, SBT plugin, ANT tasks)
Java API
What database are you using (type & version)?
Postgres 9.4
What operating system are you using?
Redhat Linux 6.5
What did you do?
try to run migration on two schema one by one, one to public and one is to another schema let say schema-two, In both of these same set of sql.
eg: following pseudo migration script.

create materialized view X
drop materialized view if exists X
create table X

executed successfully in public schema
trying to execute the same set of migration script in schema schema-two
2nd script failed to migrate, its say X is not a materialized view.
What did you expect to see?
It should migrate both schema with out any error
What did you see instead?
Migration failed due to SQL State : 42809

Please provide a small test case that reproduces this.

Any news?

Really sorry @axelfontaine, was fully busy with my regular work and other stuffs. Will try to create test asap and let you know. Thank you

Closing due to lack of response.

@axelfontaine Sorry for it, caught up with other priority. Will file issue later once i'm ready with test case


Question: Publish or Subscribe multiple events from same channel

How do you specify that an application consumes or produces multiple messages to the same channel? I think that I may be reading the specification wrong or somehow missing something obvious. Let’s assume that my application subscribes to two messages, M1 and M2, in the Kafka topic MyTopic.
Option 1: Repeating the channel
Channels:
  MyTopic:
    subscribe:
      $ref: …/M1
  MyTopic:
    subscribe:
      $ref: …/M2

I assume that a channel cannot be repeated as it is listed as a Patterned field, and Patterned fields can only be repeated if unique. However, the spec also says that Patterned fields are defined using regexp, and channel name doesn’t have one (the field pattern is listed as ‘{channel}’).
Option 2: Repeating the Subscribe/Publish operation
Channels:
  MyTopic:
    subscribe:
      $ref: …/M1
    subscribe:
      $ref: …/M2

The specification says that “Patterned fields can have multiple occurrences as long as each has a unique name”, but it doesn’t say whether fixed fields like “subscribe” can?
Option 3: using the oneof
Channels:
  MyTopic:
    subscribe:
      messages:
        oneof:
          -   $ref: …/M1
          -   $ref: …/M2

This one bugs me, as one subscribe or publish element seem to define one operation of sorts, e.g., the element has one summary and one description. Each of the messages M1 and M2 may represent very different operations, deserving of their own summaries and descriptions.
What is the proper way to do this?

I think I might actually have misunderstood (yet) another thing when I listed the options above: the element “subscribe” doesn’t mean that the application documented consumes the given messages – it means that it produces them, and that others can subscribe to them.
At least in the introduction with the “user/signup subscribe” example, it is stated that “It means that the application allows consumers to subscribe to the user/signedup channel to receive userSignUp messages.”.
However, in the Streetlights example, I get the impression that the service documented is the one running on the streetlights publishing measurements. I get this from the third bullet “Think about it as fire and forget. You publish messages to the broker and that's it. Your service doesn't know who receives them”. And that document uses “Produce”.
I am not trying to be nit-picking, I just want to understand 😊

@HenningRoigaard Hey. Always look at the AsyncAPI document as the interface of your service, representation of your API. In other words, look at it from API consumer perspective:

When consumers see subscribe it means for them that they can subscribe to a given channel, because the service will publish to it.
When consumers see publish it means they can produce events to the given channel and the service will receve those, as it is subscribed to it

Does it make sense now?
Regarding multiple different messages that are sent to a single channel. Use oneOf -> example https://github.com/asyncapi/asyncapi/blob/master/examples/2.0.0/oneof.yml. Every message can have its own description.

Thank you, it makes sense now.

@HenningRoigaard no worries, keep in mind we also have slack workspace, just in case you want to do some synchronous communication in this asynchronous community 😄 https://www.asyncapi.com/slack-invite/


Add the note forked from gogs

LGTM

Sorry but that long line makes it very hard for me to check
what changed from the emailed diff :(
I'll LGTM on trust, but please please please consider splitting
long lines to make diffs smaller and easier to review.


Initial query_result data source implementation.

Closes #118

Codecov Report

Merging #151 (6fe856f) into main (d2f2b4d) will increase coverage by 0.28%.
The diff coverage is 92.50%.

@@            Coverage Diff             @@
##             main     #151      +/-   ##
==========================================
+ Coverage   85.56%   85.84%   +0.28%
==========================================
  Files          25       27       +2
  Lines        1870     1950      +80
==========================================
+ Hits         1600     1674      +74
- Misses        213      217       +4
- Partials       57       59       +2

Impacted Files
Coverage Δ

honeycombio/provider.go
92.50% <ø> (ø)

honeycombio/data_source_query_result.go
90.32% <90.32%> (ø)

client/client.go
72.47% <100.00%> (+0.25%)
:arrow_up:

client/query_result.go
100.00% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update d2f2b4d...6fe856f. Read the comment docs.


split (most) gotodefinition tests in input/expected files

refactor gotodefinition tests (37 refactored over 57, 20 remaining needs another pass of extraction or manual extraction)
#1444

Looks much better (than current master).
Conceptually the expected files should be signature files (*.fsi).
IMO a folder for each test is a bit overkill. We can have a flat structure with three files for each test:
<test_case>.input.fs
<test_case>.expected.fsi
<test_case>.settings.json
It's your choice though.

The folder (I agree the nesting is abit annoying) simplifies the iteration in the implementation. I'd rather keep it as is for now but can change if someone else also prefer a flat layout.
I should be looking at printing a proper diff at some point also.

I agree with @dungpa, it would be nicer without all the sub-directories
For the iteration just group by substring before the first . then use a recursive loop to pattern match by the file extension and put the paths into a record which you use to provide the params to your test function. Easy peasy :wink:

I'm still considering maintenance pain, and it feels that adding a new test is easier by copying a directory than manually naming three files.
Would it make sense to keep the directories in this regard?

take a list of all the test names and write a lil script to generate the files, you'll be done in a min or two. Having them all in the same directory make sit easier to include them in the fsproject as non compile files so they can be reviewed/searched in VS

We can make a csproj and a wildcard for content files so the proj files never changes, it works with subfolders too.

And it takes more than a minute or two to pull out the correct script here :smile: sorry!

don't add the csproj, it's not worth it

@dungpa / @cloudRoutine I'll take the idea of no subfolders for later refactorings in other areas, I'd like to focus on more interesting stuff after layground work :smile:
@vasily-kirichenko I just changed the items you mentioned.

@smoothdeveloper  why is /tests/data/gotodef/generic-sample still left in?
Have you tried running all of the directory based tests in parallel?

@cloudRoutine the generic-sample folder contains the sample json file (used for JsonProvider).
I haven't tried to make the test run in parallel.


Updated README.md to current version of .deb file

Closing; see https://github.com/spotify/docker-gc/pull/99


Conventional documentation for env vars/globals?

I absolutely love docopt! (Even when not leveraging docopt for actual parsing, I use the online tester for generating usage docs.)
Are there any known conventions for documenting global or environment variables that are used/respected by the CLI?
Along the same lines, are there any established conventions for how to document what is read on STDIN, or printed to STDERR/STDOUT?

I don't know of a convention, but I've done a lot of thinking about this, and here's what I would use and propose as a convention:
Environment Variables
Add an "Environment:" section to the help text, basically following a format which is a simplified version of the format for the "Options:" section.  This is because the nearly universal use for the environment variables is to pass in a value - it is fairly rare and a little confusing to a lot of users for the presence of an environment variable to work like a boolean flag the way that the presence of a command-line option often does. (Especially because you rarely actually want FOO= whatever to treat FOO as set, most people find it more intuitive for "set to empty string" to be equivalent to "not set", and sometimes people also expect FOO=false or FOO=0 to work, so it's nicer to our users for us to explicitly consider and then decide exactly what is or isn't allowed.)
But the FOO=... syntax is still supported, precisely so that you can document non-arbitrary options and more complex usage patters. For example:
Environment:
    FOO=(true|false)  Control if foo is used

Environment:
    REMOTE=(false|0|no|off|)  Disable syncing with remote
    REMOTE=<FQDN or IP>       Address of the remote to sync

Also, this makes it easier to show when something can be specified in either an environment variable or an option:
Usage: foo [--bar=<bar>]

Options:
    --bar=<bar>  The bar with which to foo

Environment:
    BAR=<bar>  Default if option --bar is not given

STDIN, STDOUT, STDERR, etc
Add an "Input/Output:" section to the help text. The format is very simple: the "name" of the input or output, two spaces, and the description. The "name" can be either:

stdin, stdout, stderr, standard input, standard output, or standard error,
one of the parameter names that appear in the "Usage", "Options", or "Environment" sections,
a relative or absolute file path (optionally with parameters from those other sections in it),
a URL (optionally with parameters from those other sections in it).

For example, here's how we might use this convention when documenting a very minimal cat implementation:
Usage: cat [<option>]... [--] [<file>]...

Options:
    --help     display this help and exit
    --version  output version information and exit

Input/Output:
    standard output  the catenated contents of each <file>

And here is a simple tee
Usage: tee [<option>]... [--] [<file>]...

Options:
    -a, --append             append to <file> instead of overwriting
    -i, --ignore-interrupts  ignore interrupt signals
    --help                   display this help and exit
    --version                output version information and exit

Input/Output:
    standard input   read until EOF and copied to each <file>

Note that in these two examples, having a separate line for <file> in the Input/Output section is redundant because we already said everything we need to say about how  arguments are used, but we might include it help tooling which understands this convention: imagine a shell which calls and parses whatever --help to determine what the autocompletion should be for arguments to whatever, or an IDE which calls and parses whatever --help to provide smarter checking of arguments when writing a shell script - then if we include a dedicated line for <file>, the shell can know to suggest file paths for that argument, and the IDE can warn if it seems that you're passing something else to it.
Programs like bash or curl could mention files like ~/.bashrc or ~/.netrc in this section.
Here's what I imagine a simple nc looking like in this scheme:
Usage:
    nc [-u] [-4|-6] <host> <port>
    nc -l [-4|6] <port>
    nc (-h | --help | -V | --version)

Options:
    -l, --listen   listen for connections instead of initiating them
    -u, --udp      use UDP instead of TCP
    -4, --ipv4     force using only IPv4 addresses
    -6, --ipv6     force using only IPv6 addresses
    -h, --help     print this help text
    -V, --version  print version information

Input/Output:
    standard input       data to send to the remote host
    standard output      data received from the remote host
    tcp://<host>:<port>  the remote when option -u is not given
    udp://<host>:<port>  the remote when option -u is given

I think it would also make sense to support "Input:" and "Output:" sections, to help reduce ambiguity or verbosity regarding which ones are just inputs, which ones are just outputs, and which ones are both. But I think in most cases, there's nothing to document besides maybe one or both of standard input standard output, and for those cases, a single "Input/Output" section is nicer for everyone involved.

Last I checked, docopt ignored all sections that it did not recognize, so these two proposals should be compatible with current versions of docopt.

Also, you didn't ask, but I have a similar answer with proposed conventions for exit codes and error messages:
Exit Codes
This section would be called "Exits:", and would document the meaning of the exit status that the program returns with. For example, a simple diff might use this section like this:
Exits:
    0  If the input files are the same
    1  If the input files differ
    2  If there was an error

If this section is omitted, the "standard" uncomplicated behavior is assumed: if the program does its job successfully, it returns the standard/conventional "success" exit value (0 on most modern systems, an empty string on systems like Plan 9, etc), and if the program encountered an error, it returns any one of the standard/conventional "error" exit values (anything other than 0 on most modern systems, a non-empty string on systems like Plan 9, etc).
Error Messages
This documents error messages.
The section is named "Errors:", and documents errors which your program might print on standard error. (On systems like Plan 9, where exit statuses are strings, this can also include the exit value, which is why on systems like Plan 9 the earlier "Exits:" section would be redundant pretty much all of the time).
The error messages are assumed to be self-descriptive, and thus not requiring further description. Here's an example that would be appropriate for one of my programs:
Errors:
    need option or directory argument
    bad option
    error writing output
    error changing directory
    error executing command

It is implied and required that all these error messages are prefixed with your program's zeroth argument (this is the name with which your program was invoked - if this is not available, either the canonical/official/intended name of your program, or the empty string, are to be used instead), a colon, and a single space, in that order.
It is allowed that your error message is followed by one or more error strings also separated by ": ".
Basically, the idea is that if you're adding this section, you're committing to having error messages that look like this:
<program name>: <the documented error message>[: <other text>]...

because that way any user and code that calls your program can rely on specific error messages in a specific format that can be reliably parsed out with very simple code.

One more convention proposal to the pile:
Parameter Formats
Add a section named Formats to specify the valid format for one or more of the <...> placeholders in any of the sections.
Example for the POSIX umask command:
Usage:
    umask [-S] [<mask>]

Options:
    -S  show the umask symbolically instead of in octal

Format:
    <mask>         <octal> | <symbolic>[,<symbolic>]...
    <symbolic>     [u|g|o|a]...((-|+|=)[r|w|x]...)...
    <octal digit>  [0]...[[<octal digit>]<octal digit>]<octal digit>
    <octal digit>  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7

Notice that we're only using the same format that Docopt already uses for usage strings, and that was enough to fully specify the full range of possible valid umask arguments.
This is valuable because often help text might say something like <foo> to indicate that you need to pass in a "foo", but

an unfamiliar user might have no idea what a "foo" looks like! is it one of a few valid strings? is it anything at all? etc,
a familiar user might need a quick reminder about some edge case,
all those amazing tools we could have thanks to parseable help text can't be amazing if they don't know what <foo> looks like,
and
if we use the same syntax docopt implementations can't help you resolve the boilerplate of parsing and validating that individual parameter string, even though they may have a lot of the necessary logic already just to parse the parameter list.

(The reason I propose naming this section Format is that it is more broadly familiar and less technically hairsplit and inconsistently used than words like Syntax and Grammar.)


Add more tests for LDAPUserGroupCallbackImpl and LDAPUserInfoImpl

I have moved some tests from QE test suite that can be used as unit tests for LDAPUserGroupCallbackImpl and LDAPUserInfoImpl. Besides moving the existing tests, I have also added some new test cases for IS_ENTITY_ID_DN=true and it seems that getMembersForGroup and hasEmail from LDAPUserInfoImpl ignore this property and do not work correctly when you pass a group with DN as a parameter. Is this an intended behavior? See 4 ignored tests for more details.

pushed to master and fixed the issue for test cases that were ignored as part of JBPM-4565, thanks @livthomas


Bugfix in example for quality Task

bugfix: the date in the example does not match the schema.json of the submodel

Hi, shouldn't then the turtle example be changed (and then the json updated)?

@marcoGrebe value should be corrected in .ttl file.

@agg3fe  Hi Sahil, should I do here anything?

Please add T00:00:00 to fix the bug - unfortunately I cannot contribute :-(

@agg3fe Hi Sahil, should I do here anything?

Yes. The example value should be fixed in .ttl file here https://github.com/eclipse-tractusx/sldt-semantic-models/blob/main/io.catenax.quality_task/1.0.0/QualityTask.ttl#L51, and not in json file directly. After that json file should be regenerated.


Remove GSuite Native Auth documentation

Enable GSuite Native Auth (beta) is no longer a needed step
Description & motivation

To-do before merge

Prerelease docs
If this change is related to functionality in a prerelease version of dbt (delete if not applicable):

[ ] I've added versioning components, as described in "Versioning Docs"
[ ] I've added a note to the prerelease version's Migration Guide

Checklist
If you added new pages (delete if not applicable):

[ ] The page has been added to website/sidebars.js
[ ] The new page has a unique filename

If you removed existing pages (delete if not applicable):

[ ] The page has been removed from website/sidebars.js
[ ] An entry has been added to _redirects
[ ] Run link testing to update the links that point to the deleted page

hey @BrJan , thanks so much for opening this up, and appreciate your patience! it looks like this was removed [already](https://docs.getdbt.com/docs/collaborate/manage-access/set-up-sso-google-workspace) so I'll go ahead and close this pr. let me know if you have any questions or concerns.
#2356


ESSNTL-4063 - Setup PR check for xjoin-validation project

Creates pr_check.sh file
Creates unit_test.sh file
Modify Dockerfile to run tests correctly

Related: ESSNTL-4063

Just one minor comment, everything else looks good. Thanks!


Not managed by BSF box should not update

because a box that is not configured in ideascube should not update as it can break if device_fact definition changes.
I don't know precisely what managed_by_bsf means but I think we can use this argument to disable update process if not set.

As far as I know, "not managed by BSF" means we don't copy the BSF folks's SSH keys to the ideascube user's ~/.ssh/authorized_keys.
My Koombook at home, installed with Ansiblecube, is not managed by BSF, and I very much want it to be updated. 😉
I think you probably want a "do not update" switch instead, rather than piggy-backing on an unrelated switch.

I think this is related to the configuration file issue. if you use a configuration that is not in ideascube nor ansiblecube you should not update the machine as it can break it.

if you use a configuration that is not in ideascube nor ansiblecube you should not update the machine as it can break it.

And I think you're trying too hard to link two unrelated things.
Really, a "do not update" option in Ansiblecube would solve your problem, without abusing an existing setting.
In fact, we already have something: https://github.com/ideascube/ansiblecube/blob/oneUpdateFile/roles/ideascube/tasks/ideascube.yml#L62
Maybe that could be extended, so that the value is either read globally (as it is now) or from the fact file?

This is the RED BUTTON for when somethign screwed up ideascube side.
I agree with @bochecha here, managed_by_bsf means we manage the device so we need our SSH keys and a VPN link. Completely unrelated to the upgrade process.
I would close this ticket as invalid and create a Option switch to freeze any upgrades issue.

I understand managed_by_bsf is not related to configuration but only to SSH and VPN things.
But what I don't understand is the way you want to use device_list.fact
does you want to keep in the long term the fact that user can use a device name that correspond to an entry in device_list.fact ?
I propose a parameter own_config_file where if set then ansiblecube doesn't manage its configuration and so disallow update because update can break configuration or update the configuration also. (but I think the usual way is to only have minor update that a compatible with the configuration)
if not set then the hostname must correspond to a configuration in ansiblecube
I am not in favor of an option to freeze update because it is not the goal. the user doesn't want to freeze update, he wants to have its own configuration.

if set then ansiblecube doesn't manage its configuration and so disallow update because update can break configuration or update the configuration also.

It shouldn't, though.

the user doesn't want to freeze update, he wants to have its own configuration.

Then why would you prevent updates?

It shouldn't, though

this happened in the past deliberately
device_fact definition is not backward compatible so a user defined device_fact can break ( for example at this commit: https://github.com/ideascube/ansiblecube/commit/4cd67a84)

this happened in the past deliberately

Oh, right, things like splitting the cards... Sorry about that.

device_fact definition is not backward compatible so a user defined device_fact

But users shouldn't define device_fact.
Let's put this differently: how does pibox-installer drive ansiblecube? How does it provide ansiblecube the variables for the box it is making?

first without talking about pibox-installer:
using buildMyCube.sh if the name I provide is not in ansiblecube configuration then it ask for content
https://github.com/ideascube/ansiblecube/blob/oneUpdateFile/buildMyCube.sh#L354-L359
https://github.com/ideascube/ansiblecube/blob/oneUpdateFile/buildMyCube.sh#L413
and write device_list.fact with the content I chose:
https://github.com/ideascube/ansiblecube/blob/oneUpdateFile/buildMyCube.sh#L170-L208
this device_list.fact is not handle by ansiblecube in update (it could be however but this would require to update the configuration on things like splitting the cards)
pibox-installer rewrite buildmycube.sh in python because it is more easy than interacting with TUI through python. but theoritically pibox-installer could use buildmycube.sh

pibox-installer rewrite buildmycube.sh in python because it is more easy than interacting with TUI through python

And because it was a good thing to do anyway. 😄
I keep thinking what you need is to pass a new "do not update ideascube" variable to ansiblecube, the same way you already pass other variables, and teach ansiblecube to respect it.
And again, there's already one, which, as Tom mentioned is the nuclear option we used when Ideascube releases were broken (it happens less and less, we got better at this), and I think you could just use it.
I really don't understand why you'd need anything else, to be honest.

I'm OK with an option to disable update but what I say is that a box created with this command:
./buildMyCube.sh -n my_box -t Africa/Dakar -m false
will break on update

Yeah, so one thing to keep in mind is that ansiblecube works for what it was designed: deploying and managing the BSF boxes.
It's not really a surprise that it doesn't handle as well other use cases.
And since you're the first one who tries to reuse ansiblecube for something else, you're the one having a hard time.
But thank you for doing this, because once ansiblecube works well for you, then it will be less BSF-specific and more generally reusable. 👍

As for the whole config files situation in Ideascube, that's also unfortunate. Honestly the problem is just so much bigger than breaking existing config files when updating. It really is a swamp we need to drain.
Eventually we'll get there.

I propose a parameter own_config_file where

I'm using it here : https://github.com/ideascube/ansiblecube/blob/oneUpdateFile/roles/set_custom_fact/tasks/main.yml#L18-L26 and there : https://github.com/ideascube/ansiblecube/blob/oneUpdateFile/roles/set_custom_fact/tasks/main.yml#L32-L38

if not set then the hostname must correspond to a configuration in ansiblecube

It is the case currently. If the hostname is not found in device_list.fact, the end user is asked to create is own device_list.fact file. buildMyCube.sh does help with few dialog box.

this one: ./buildMyCube.sh -n my_box
will break on update

You mean that on update tag the content of device_list.fact is emptied ? It should not be the case and if so, please report the issue


Consider using localStorage instead of cookies for storing user's settings

MathJax currently uses cookies to persistently store the settings that the user can change via the menu. Cookies are not the best solution here because they are needlessly transmitted to the server with each and every request (the server doesn't care about MathJax settings). A much better way of storing these settings would be the localStorage object. Nowadays, it is widely supported by all major browsers and should be preferred over cookies in such cases where the information is only needed locally and doesn't need to be sent to the server.

It's 2019 now, and using localStorage is generally a standard way to store user settings. As @TomasRiker mentions, storing information in Cookie causes privacy concerns as well as extra bandwidth consumption.

The version 3 rewrite of MathJax (currently in beta) uses localStorage rather than cookies.  After that is released, we can look into back porting that to version 2.

This is fixed in v3.


Can't type {} in Documenter on Linux/Morphi

I am not able to type the characters { and } in the Documenter in GToolkit v0.5.1 on Linux. The rest of Documenter and GToolkit seems to work as expected.
Specifically, pressing { seems to highlight the preceeding character (as I'd expect from shift-left-arrow) and pressing } does not seem to have any effect.
This is running in the default Morphic window.

Can you type |?

No. Pressing | selects one character to the right, like shift-right-arrow, the opposite of what { does.

Interesting :).
Can you try on Mac?

This seems to work fine on the Mac. I am using the same physical keyboard in both cases (Linux version is accessed via VNC from the Mac.)

Likely related: The arrow keys work fine on the Mac but have no effect on Linux-over-VNC-from-Mac.

(That's using TigerVNC on both the Mac client and the Linux server.)

The problem appears to be related to the Morphic host. Native window works as expected

If shift is pressed, Left bracket key press produces a key code of left arrow 🤷♂

@lukego Can you confirm that this works for you in a native window on Linux?

Native windows aren't working on Linux for me. Could be related to my build of the VM and moz2D.
This error plays in a loop:
PrimitiveFailed: primitive #integerAt:size:signed: in ExternalAddress failed
ExternalAddress(ProtoObject)>>primitiveFailed:
ExternalAddress(ProtoObject)>>primitiveFailed
ExternalAddress(ByteArray)>>integerAt:size:signed:
ExternalAddress(ByteArray)>>unsignedByteAt:
ExternalAddress(ByteArray)>>pointerAt:
SDL_Surface>>pixels
BlOSWindowSDL2Renderer>>initializeForBuffer:
BlHostRendererBufferSurface>>initializeOn:
BlOSWindowSDL2Renderer(BlOSWindowRenderer)>>resetResources
BlOSWindowSpace>>prepareToRender:onBufferSurface:
BlHostRendererBufferSurface>>prepareToRender:
BlSpartaRenderer>>render:
BlOSWindowSpace>>render:
BlSpace>>render

It must be related to that. You need the sources including the minheadless support that comes with the Pharo 7.0 stable VM

Hacked something 🤣 Please reopen the issue if there will be any untypable symbols


Cairo files are not recognized

https://www.cairo-lang.org/
Problem: Cairo files are not recognized.
Solution: Add patterns for Cairo files. (Amaan Qureshi)

I'll leave out the test for ".tal" files.  Is that for another PR?

oops, that was for my uxntal pr, forgot to remove that 😁

I'll leave out the test for ".tal" files.  Is that for another PR?

oops, that was for my uxntal pr, forgot to remove that

I've included it in the other patch that adds the *.tal pattern.
All should be OK now.
--
hundred-and-one symptoms of being an internet addict:
249. You've forgotten what the outside looks like.
/// Bram Moolenaar -- @.*** -- http://www.Moolenaar.net   \
///                                                                      \
\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


JIT Compilation error with Oracle JDK 7u80

Describe the bug
When running with Oracle 7u80 JDK, after running for a while with agent enabled, the JVM process crash with the following message in the crash report:
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (safepoint.cpp:318), pid=819438, tid=140189423261440
#  guarantee(PageArmed == 0) failed: invariant
#
# JRE version: Java(TM) SE Runtime Environment (7.0_80-b15) (build 1.7.0_80-b15)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.80-b11 mixed mode linux-amd64 compressed oops)

The stack trace is not directly related to the agent, and async-profiler is not enabled
Current thread (0x00007f806c1ba800):  VMThread [stack: 0x00007f8064b66000,0x00007f8064c66000] [id=819449]

Stack: [0x00007f8064b66000,0x00007f8064c66000],  sp=0x00007f8064c646d0,  free space=1017k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x9a320a]  VMError::report_and_die()+0x2ea
V  [libjvm.so+0x498da2]  report_vm_error(char const*, int, char const*, char const*)+0x62
V  [libjvm.so+0x8b03b4]  SafepointSynchronize::begin()+0x824
V  [libjvm.so+0x9aa96d]  VMThread::loop()+0x4bd
V  [libjvm.so+0x9aaaf0]  VMThread::run()+0x70
V  [libjvm.so+0x8238c8]  java_start(Thread*)+0x108

The last compilation events at the time of the crash indicate that co.elastic.apm.agent.servlet.ServletApiAdvice::onEnterServletService has just been compiled by the JIT compiler
Compilation events (10 events):
Event: 213.351 Thread 0x00007f806c85d000 3311   !         org.springframework.web.servlet.tags.UrlTag::replaceUriTemplateParams (215 bytes)
Event: 213.351 Thread 0x00007f806c85a800 3312   !         org.springframework.web.servlet.tags.UrlTag::createQueryString (181 bytes)
Event: 213.397 Thread 0x00007f806c85a800 nmethod 3312 0x00007f80699b2490 code [0x00007f80699b26a0, 0x00007f80699b3798]
Event: 213.427 Thread 0x00007f806c85d000 nmethod 3311 0x00007f80699b5210 code [0x00007f80699b5680, 0x00007f80699b7f58]
Event: 213.593 Thread 0x00007f806c85a800 3313             org.hsqldb.ParserDQL$CompileContext::getNextRangeVarIndex (27 bytes)
Event: 213.594 Thread 0x00007f806c85a800 nmethod 3313 0x00007f806995e690 code [0x00007f806995e7c0, 0x00007f806995e858]
Event: 213.844 Thread 0x00007f806c85d000 3314             org.hsqldb.lib.OrderedHashSet::addAll (25 bytes)
Event: 213.844 Thread 0x00007f806c85d000 nmethod 3314 0x00007f806995acd0 code [0x00007f806995ae00, 0x00007f806995ae58]
Event: 213.846 Thread 0x00007f806c85a800 3315             co.elastic.apm.agent.servlet.ServletApiAdvice::onEnterServletService (664 bytes)
Event: 213.897 Thread 0x00007f806c85a800 nmethod 3315 0x00007f80699be750 code [0x00007f80699bef20, 0x00007f80699c1fd8]

This issue is know to happen with the following conditions

Using Oracle 7u80 JDK
using agent 1.18.0+ up to current version on master branch
Application uses Servlet API
Application is under enough load to trigger JIT compilation of the Servlet Advice.

What we don't know yet:

If other Java 7 JDKs are affected, which might be hard or impossible to check due to no public availability of Oracle JDK after 7u80.
If this issue can happen with other parts of the Agent or other instrumentation plugins.

Work-arounds

Updating to a more recent JDK: either Java 8+, Oracle-supported Java 7, or Azul Java 7

Using the -XX:CompileCommand to exclude the agent method(s) that are visible in the crash report, for the case here with onEnterServletService it would be:

-XX:CompileCommand=exclude,co/elastic/apm/agent/servlet/ServletApiAdvice.onEnterServletService

Expected behavior

no JVM crash

Debug logs
hs_err_pid819438.log
Additional context
Similar issue was reported on our forum
When setting -XX:CompileThreshold=500 in order to try reproducing this issue faster, we have another compiler error.
hs_err_pid2170058.log

I managed to reproduce a similar crash with 7u80 + compilation logs, however this time the "compilation events" section does not refer to the advice code as previously. Searching for guarantee(PageArmed == 0) failed: invariant does not seem to provide any relevant info.

crash report: hs_err_pid2181700.log
compilation log : compilation.zip

We got yet another crash report that is very similar to the original one, only it involves the JIT compilation of a different advice method - ExecutorInstrumentation$ExecutorRunnableInstrumentation#onExit.
We have a JIT compilation log for this one. The JVM crashed right after a considerable C2 compilation doing multiple inlinings into this method, among other things, growing it from 6 bytes to 275 bytes, containing mostly ThreadLocal code eventually...
I think we are OK with the -XX:CompileCommand workaround as long as there are limited number of exclusions to make and as long as this is limited to 7u80.
Unfortunately, we got some other crash reports that looked a bit different and I also worry that the crash happens after the first problematic JIT event, but excluding a specific advice will just postpone to a different event of less-frequently executed (thus later-compiled) advice...
Expand to view the full details of said compilation event
```

```

Here is the crash report + compilation log that happen with co.elastic.apm.agent.servlet.ServletApiAdvice::onEnterServletService.
We get this result with the default compilation threshold.
compilation.zip
hs_err_pid2189333.log

Also, trying to run with an up-to-date Java7 Azul 7u285 also seems to fail with a similar error:
hs_err_pid2194633.log
This means that sticking to using agent 1.17.0 for Java 7 users is the recommended option until we find a proper work-around for those crashes.

The problem cannot be reproduced with Java7 Azul 7u285 and agent version 1.17.0 after 3 hours (whereas the crash reported above took less than one minute).

The problem cannot be reproduced with Java7 Azul 7u285 and agent version 1.17.0 after 3 hours (whereas the crash reported above took less than one minute).

@eyalkoren Did you put -XX:CompileCommand workaround for this result? or just standard configuration?

No, we this is tested with agent version 1.17.0. The problem is 1.18.0+

Got it. Thank you for the clarification @eyalkoren !

UPDATE: following up on the ExecutorRunnableInstrumentation#onExit failure, we tried to disable JIT compilation for this specific method using:
COMPILE_COMMAND='-XX:CompileCommand=exclude,co/elastic/apm/agent/concurrent/ExecutorInstrumentation\$ExecutorRunnableInstrumentation.onExit'
CATALINA_OPTS="$CATALINA_OPTS $COMPILE_COMMAND"

And the result was a faster crash (🤔 ) that looks entirely different...

 Problematic frame is eitherV  [libjvm.so+0x4af19a]  Deoptimization::query_update_method_data(methodDataHandle, int, Deoptimization::DeoptReason, unsigned int&, bool&, bool&)+0x2a

orC  0x0000000000000000

Disabling instrumentation of the concurrent plugin (using disable_instrumentations=concurrent) allows the app to run up to ~1 hour, when it crashes with a different error, indicating a fault during the attempt to enter safepoint, with exactly the same error description and stack as the those described above, which were produced with Oracle 7u80 JDK. I checked and UseCountedLoopSafepoints is already enabled in this JVM.

I assume Problematic frame: C  0x0000000000000000 means there was a failure to obtain the frame data when creating the crash report, so ignoring those for now.
When the quick-fail crashes do contain problematic frame data, they indicate an error during a deoptimization event. Deoptimization also requires reaching to a safepoint, so maybe these two failures are related, although it doesn't explain why the failure is SIGSEGV.
Hypothesis (a shot in the dark): all JDK 7 failures we observed are related to attempts to reach safepoints. Some instrumentations contain code that may trigger that faster than others. In some cases, the compiled code of specific instrumentations trigger that.

Update: we asked @apangin to take a look at these crashes and he found out that they are caused by a bug in C2 intrinsics for linking invokedynamic call site (C1 works fine). The bug results in a jump via a garbage address, so it has many random manifestations, including a jump to zero address, a hung process, access violations in the compiled code etc.
The workaround he came up with is to disable compilation of these intrinsics:
-XX:CompileCommand=exclude,java.lang.invoke.LambdaForm*::*. This will likely eliminate the need to exclude compilation of our advice code, which, as noted above, may only postpone the crash until a later JIT event occurs.
Assuming that this is the bug we were affected from, I tried to delay instrumentation (and loading CallSite) at the agent startup, but so far this did not prove to eliminate the crash.
The compilation exclusion workaround seems to be consistent so far at least with the zulu-7.0.285-linux JVM tests.

The -XX:CompileCommand=exclude,java.lang.invoke.LambdaForm*::* workaround proved to work also with Oracle 7u80 JDK - just ended a load test of 6 hours with 100 tps successfully.

Following https://github.com/jboss-javassist/javassist/pull/130 - I tried to load CallSite at the beginning of premain, explicitly specifying the System CL as the parent CL - the problem reproduces in zulu-7.0.285-linux within 1-2 minutes.

Good news- #1594 seems to work around this bug, at least with zulu-7.0.285-linux 🎉
I will run a long test with Oracle 7u80 JDK later as well.
Thanks @raphw for the suggestion 🙇

Good news- #1594 seems to work around this bug, at least with zulu-7.0.285-linux 🎉
I will run a long test with Oracle 7u80 JDK later as well.
Thanks @raphw for the suggestion 🙇

Update: a 15-hour load test with oracle-7u80-linux has finished successfully 🎉

Update: a 15-hour load test with oracle-7u80-linux has finished successfully 🎉


Lodash.js is missing

At the project setup section adding lodash failed:
node_modules/lodash/lodash.js file did not exists on my environment.
Lodash version is 3.0.0
I had to copy the file from here:
node_modules/grunt/node_modules/lodash/lodash.js
Then it worked

Lodash >= 3.0.0 installed with npm now have a "modern build", they change the name of the file from lodash.js to index.js
You only need to change this line:
'node_modules/lodash/lodash.js',
For this one :
'node_modules/lodash/index.js',

@blacknash thanks, will update the book and example project to the latest LoDash soon

Hi,
i tried index.js even before i read this issue... but it still doesn't work...
Scope digest calls the listener function of a watch on first $digest ReferenceError: Can't find variable: _ in http://localhost:7357/src/scope.js (line 32) $digest@http://localhost:7357/src/scope.js:32:3 http://localhost:7357/test/scope_spec.js:41:17

Update coming up in the next release.