[KOGITO-1436] Remove double setContent call

This PR changes set content method to return a Promise instead of void.
The goal of this change is to be able to make the loading of editors predictable and remove the need for double set content call.

@ederign IDK if you have another PR coming but you probably need to update appformer too?

@manstis absolutely, I'm creating right now  one  over https://github.com/kiegroup/kie-wb-common/pull/3236/files

Manually tried scenarios
In VS code open

[ ] Valid bpmn, do changes, reopen
[ ] Invalid bpmn, fix, reopen
[ ] Valid dmn, do changes, reopen
[ ] Invalid dmn, fix, reopen

When user tries to open invalid BPMN process, ace/xml editor is not shown. Even if I confirm no such element popup from screenshot, ace/xml editor is not shown. Fr dmn it works fine.

@jomarko I've updated all the PR's as you requested.
I'm not sure if the invalid BPMN issue is related to changes on this PR. @romartin any idea?

@ederign @jomarko good catch about the invalid bpmn file guys. TBH no idea, but I don't think it should be related to this.
I would suggest merging this, which is preventing several things to move forward, and report the "invalid bpmn issue" so I'll take a look later on. WDYT?
Thanks!!

@ederign @jomarko @romartin as this has blocked many other PRs I strongly suggest go ahead with the merge and create a new Jira focused only on invalid xml as it is in fact part of a different use case

@romartin there's an old JIRA for BPMN kicking around somewhere about falling back to ACE for invalid files. It is unrelated to this PR.

@manstis if you have a link, would be good paste it here for a record.

@jomarko here's a link that just popped up in my inbox https://issues.redhat.com/browse/KOGITO-513.. I am sure there are others similar.

@manstis thank you, I came across this one too.


app presents wrong ip address

app providing inaccurate ip address
putting 0s in middle of ips
xx.0.0.xx:8596
instead of actual ip provided by phone.

I have the same issue.
The app provides a <IP_ADDRESS> (which I don't know where it comes from) and an actual IP for my local networking (<IP_ADDRESS>), however when I choose the latter which is also the Subnet my PC is in I get a
Failed to host on provided IP:
ws://<IP_ADDRESS>:8596
Please check your network settings or restart the game using another IP

When choosing the other IP it seems to setup correctly but then of course I can't connect because <IP_ADDRESS>/24 is not a range that is valid within my network.

Further investigation yielded that the xx.0.0.xx:8596 seems to be shown when Mobile Data is activated. It doesn't show for me when I switch it off. However the issue still persists that I can't establish a connection to my normal internal IP address (192.169.2.XX:8596) with the aforementioned error occuring. I dug out an old Android Phone (Samsung J5) and installed the app on there. The connection works perfectly fine on there and I can roll my dice which show up in Foundry.
This suggests that the problem only occurs on iPhones (and presumably iPads, which I can't tests since I don't own an iPad).

It might be a problem with how websockets are setup in Safari. The layout of the GoDice App suggest that it's written with Xamarin or a similar cross-platform tool as it looks exactly the same on Android and iOS leading to somewhat hail mary conclusion that setting up a socket in iOS needs to be handled a separate way than in Android (This is pure speculation at this point in time). However iOS has to be known to throw some tantrums when it comes down to websockets:
Sources:

https://stackoverflow.com/questions/5574385/websockets-on-ios
https://stackoverflow.com/questions/70844061/web-socket-fails-on-ios
https://github.com/socketio/socket.io/issues/4263

Might be that the GoDice App needs to be revisited here @ParticulaCode


Include pretrained Reddit wordembeddings?

It would be nice if we could benchmark these pretrained wordembeddings from here this Danish stance detection project: https://github.com/danish-stance-detectors/RumourResolution.
The wordembeddings are available here:
https://figshare.com/articles/Danish_DSL_and_Reddit_word2vec_word_embeddings/8099927

The embeddings has been added with fddcd3de01a5ce52c17be39f3fe51242b7824301


feat(clients): support recommend methods in algoliasearch

🧭 What and Why
As we're trying to unify FX libraries, we want to avoid requiring users to import a bunch of different packages.
We've made those changes to v4 : https://github.com/algolia/algoliasearch-client-javascript/pull/1509
🎟 JIRA Ticket: FX-2774
Changes included:
I'm publishing this as a draft as I'm overall not too sure about the best way to implement this :

I opted to merge the search and recommend specs for algoliasearch/lite, and it works well however this will have repercussions for the Dart client (cc @aallam)
For the algoliasearch part (not lite), I'm a bit torn as methods are not exported so we can't have the same treeshaking we have with v4, createRecommend has to be called and the bundle will have redundant code. Running into problems with similar models being exported too.
Also didn't update it for Dart but it might be fine for now.

🧪 Test
Didn't bother with tests yet as this is subject to change :D

thanks for the contribution! I actually had a local branch for this feature, I'll add them to your branch and push so we can discuss it :)

had trouble merging our changes, so I've applied some of yours on my PR, which should make the test pass https://github.com/algolia/api-clients-automation/pull/2860, let me know wdyt

superseded by https://github.com/algolia/api-clients-automation/pull/2860


How to change chain network using wallet provider

UX of our apps could benefit from using a wallet provider endpoint to change wallet network from UI.
Example flow:

I'm using deweb uploader in buildnet
I want to change to mainnet network
I click on a network dropdown / switch and change my current wallet (currently user has to switch within the wallet to targeted network)
I complete my operation on mainnet

Hello @pivilartisant  A support ticket has been opened for you. Kindly Talk to Support on the Live support page so that your issue can be looked into. CLICK HERE

Hi there,
We use GitHub issues as a place to track bugs and other development-related issues.
Please see the link below to our dedicated support line:
Help Center :  Click Here
Ticket ID: WR240
Note: Click on the live chat icon at the bottom corner of the page to start a conversation.


Set target of activity log alert at Management Group level

Currently I can only set target of activity log alert at the subscription level. Since I have many subscriptions to manage, I'd want to be able to set the target at the management group level. I am wondering whether this can be done with ARM template today?

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 3b5848cb-e266-6235-76c3-7b171d43bc8a
Version Independent ID: 21fde16e-de99-66a6-89b8-c1651db074e1
Content: Create, View, and Manage Activity log Alerts in Azure Monitor
Content Source: articles/azure-monitor/platform/alerts-activity-log.md
Service: azure-monitor
GitHub Login: @msvijayn
Microsoft Alias: vinagara

Thanks for the Comment. We are actively investigating and will get back to you soon.

AFAIK, this is currently unsupported adding @msvijayn to comfirm.
If this is a feature you would like to see supported, kindly share the above feedback directly with feature owners.
we will now close this request but we Look forward to your response.

Confirming - activity log events currently have scope for up to subscription only. Hence alerting on activity log, can be configured for subscription scope as well.

So how are we supposed to know when someone creates a rogue subscription?  Who designed Azure

Can someone add this capability because IMO this is a huge lack of insight


Event and pointer interaction in Vue.js context

Hi,
I'm trying to use Plot on my Vue.js app, using this official code.
It works very well as of now.
Now I want to add pointer interaction, but nothing appears.
I think the problem comes from event implementation because in PlotRender.js, the comment regarding the event part is:
  addEventListener() {
    // ignored; interaction needs real DOM
  }
  removeEventListener() {
    // ignored; interaction needs real DOM
  }
  dispatchEvent() {
    // ignored; interaction needs real DOM
  }

Is it realy impossible to use events in a Vue.js context?

You need to use client-side rendering as described in the Getting started guide. If you use server-side rendering, the generated plot is serialized to HTML and loses all its interaction.
import * as Plot from "@observablehq/plot";
import {h, withDirectives} from "vue";

export default {
  props: ["options"],
  render() {
    const {options} = this;
    return withDirectives(h("div"), [
      [
        {
          mounted(el) {
            el.append(Plot.plot(options));
          }
        }
      ]
    ]);
  }
};

Also, the PlotRender component you linked to isn’t “official” in the sense that it’s not supported — it’s just what we use internally to build the Plot documentation. You’re free to use it but it isn’t guaranteed to work or be documented.
The way that we handle interactive plots in our documentation is the defer directive. For example:
https://github.com/observablehq/plot/blob/41a63e372453d2f95e7a046839dfd245d21e7660/docs/interactions/pointer.md?plain=1#L37-L46
Note the :::plot defer instead of the normal :::plot as you see with non-interactive plots.
The defer directive triggers client-side rendering. During server-side rendering an empty <div> is rendered, and then using an IntersectionObserver on the client, the plot is rendered on the client just before it becomes visible.
https://github.com/observablehq/plot/blob/41a63e372453d2f95e7a046839dfd245d21e7660/docs/components/PlotRender.js#L154-L217
This is useful not just for interactive plots, but for plots that would otherwise generate many megabytes of serialized SVG, such as maps. I’m sure there’s a way to do traditional full server-side rendering with client-side hydration of event listeners in Vue, but we didn’t want to do the typical thing of rendering the charts twice.

Ok thanks, I didn't realize I was using the server version, especially since I don't need it.
So I'm going to work on a client version.
Is there a fully ready version, sample client-side render file, to save me time?


Add rule for chunk-download-size-limits

Is your feature request related to a problem? Please describe.
I try to limit the size of the critical path our application needs on ci.
However, our application is running in a host application(SPA), that serves several other  'apps' on the same page.
So @statoscope/webpack/entry-download-size-limits no longer suits us, cause we are no longer initial chunks.
Is there any other way to provide this kind of rule, that limits the size of the chunks that critical rendering path need?
Describe the solution you'd like
A clear and concise description of what you want to happen.
One way to achieve this is to specify the chunk that the rendering codes are in (like a designated webpack chunks name), then find all its parent chunks.
Describe alternatives you've considered
Another way of doing it is just to find all the chunks that the critical rendering path needs, simply just by its module name.
However, a module might be duplicated in different chunks, I am not very clear on how to implement this way(But isn't that rendering code should only appear once in the final builds?).
Additional context
I tried to implement a simple version of it by myself, following the custom rule guide.
But get stuck in compilations API in   WebpackRule<Params> = (ruleParams, data, api): void of date object.
Although in my stats.json, the parents property exists for every chunk, I can't get it from 'data.compilations[0].chunks[someIndex].parents'.
Looking into the source code,
I found in the source code, the chunk's parent has been set to empty and relink by chunks' origin, which is not in ours stats.json

What is your idea on implementing this properly?
Is it ok we use just js to query the original compilation object instead of jora? I and many of my teams find it quite hard to learn jora by simply looking into the demo. (Is there any tutorial on this subject?) .Would you accept the rule's pr without jora?
why is chunks origin is needed for this situation?

Thanks for the issue!

What is your idea on implementing this properly?

Let's start from rule parameters:
export type Params = {
  byName: Array<{name: string | RegExp; limit: number; useCompressed: boolean}>
};

So, here is a pseudo-implementation of the rule:
const chunkDownloadSizeLimits: WebpackRule<Params> = (params, data, api): void => {
  api.setRuleDescriptor(...);

  for (const item of params.byName) {
    const targetChunks = getTargetChunksFromDataWithParams(data, params); // collect chunks by name or regexp (you could use jora or pure js here)
    for (const chunk of targetChunks) {
      const diff = isChunkSizeOk(chunk, item); // check chunk size by the item props
      if (diff) {
        api.message('Oh, no!', {
          filename: data.files[0].name,
          compilation: chunk.compilation.hash,
          related: [{ type: 'chunk', id: chunk.id }],
        });
      }
    }
  }
};

export default chunkDownloadSizeLimits;

Is it ok we use just js to query the original compilation object instead of jora?

Yep

why is chunks origin is needed for this situation?

Chunks origins is more accuracy to get chunk relations from webpack stats

Thanks for your detailed answer.

Can I find all the files by module name? But isn't that one module could belong to several chunks?
Could you elaborate on why Chunks origins is more accuracy to get chunk relations from webpack stats?

One more thing, the stats.json our project generated is quite large (around 1.5GB before zipped), is there anything I could to about it?

Can I find all the files by module name?

Yep. Every module includes chunks-property. You could find all the modules you need (e.g. by module name) and then collect chunks from the chunks-property.

But isn't that one module could belong to several chunks?

Yes, one module could belong to several chunks. That's why chunks-property is an array

Could you elaborate on why Chunks origins is more accuracy to get chunk relations from webpack stats?

Seems like there is a bug in webpack stats (see #168 for more info). Do you have concerns with using origins to build chunk graph?


on a null object reference

Dear naivehhr,
You can try the full demo(https://github.com/cyqresig/ReactNativeComponentDemos) and find what you want.


Since ios13 no snapshot on motion detect

Hi
Since update ios13 i have no snapshot with motion detect
and no option for notification for camera
on mojave all is ok for snapshot

thanks

Same here. My guess is the motion sensor has to be bound to the camera for this to work in iOS 13.

Same here. See existing issue #322.

Do you think is it a issue ?
https://github.com/KhaosT/HAP-NodeJS/pull/704

Now in iOS13, you get a notification AND a live stream from the camera – even on the lock screen. Additionally, within the notification, you can choose to use two-way audio, along with the ability to control any other devices that are in the room, like lights, smart plugs or even a HomeKit door lock.

https://homekitnews.com/2019/07/03/changes-and-additions-to-the-home-app-in-ios13-beta-1/

@fennec622 as this is a duplicate to #332, please close this


Check URL status and time for updated and new Links

Trello card
When a link's URL is updated, or a new link is created, we now check if its URL has been recently checked.  If it has, then the link's status and link last checked time will be updated with the most recent data.
We decided not to implement this functionality for Local Authority homepage URLs, as they are unique to each Local Authority and we wouldn't expect there to be duplicates in the Local Authority database.

Mobbed with @brenetic & @klssmith

Thanks @davidbasalla - we've updated based on your comments.

💥


MONDO:0013141

I'm getting
MONDO:0013141 is obsolete (replaced by: MONDO:0800046)
but I don't see  MONDO:0800046 in MOnarch,, or OLS?

Where do you see that MONDO:0013141 is obsolete? I still see it in OLS:
https://www.ebi.ac.uk/ols/ontologies/mondo/terms?iri=http%3A%2F%2Fpurl.obolibrary.org%2Fobo%2FMONDO_0013141

This term was obsoleted and replaced by MONDO:0800046 in the last release, but OLS may not be updated yet? The release was done on Monday and it usually takes a few days for OLS to update (Monarch is slower)

if you download the latest release, I see it there:
https://github.com/monarch-initiative/mondo/releases/tag/v2022-08-01
I will close this but let me know if anything else is needed. Thanks!


pythonPackages.pytestflakes: fix build

Motivation for this change
ZHF #45960

disable a failing test case that looks broken
remove pytestcache depencency that was dropped upstream

Things done

[x] built on NixOS in a sandbox

@GrahamcOfBorg build python27Packages.pytestflakes  python36Packages.pytestflakes

Success on x86_64-linux (full log)
Attempted: python27Packages.pytestflakes, python36Packages.pytestflakes
Partial log (click to expand)
platform linux -- Python 3.6.6, pytest-3.7.4, py-1.5.4, pluggy-0.7.1
rootdir: /build/pytest-flakes-4.0.0, inifile: tox.ini
plugins: flakes-4.0.0, pep8-1.0.6
collected 6 items

test_flakes.py ......

=========================== 6 passed in 0.22 seconds ===========================
/nix/store/s56yrkpa5knf4ra519879yxb81rxw0hh-python2.7-pytest-flakes-4.0.0
/nix/store/gknxjf368g4cdnqbgnm0hrjsdxvwbsh5-python3.6-pytest-flakes-4.0.0

Success on x86_64-darwin (full log)
Attempted: python27Packages.pytestflakes, python36Packages.pytestflakes
Partial log (click to expand)
collected 6 items

test_flakes.py ......

=========================== 6 passed in 0.22 seconds ===========================
test_flakes.py ......

=========================== 6 passed in 0.22 seconds ===========================
/nix/store/l9sy8yjxba5vacf54p24van4h3yy8340-python2.7-pytest-flakes-4.0.0
/nix/store/pgqfkbphjgbjfzrwwp3mylwkzxmbm2yb-python3.6-pytest-flakes-4.0.0

Success on aarch64-linux (full log)
Attempted: python27Packages.pytestflakes, python36Packages.pytestflakes
Partial log (click to expand)
platform linux -- Python 3.6.6, pytest-3.7.4, py-1.5.4, pluggy-0.7.1
rootdir: /build/pytest-flakes-4.0.0, inifile: tox.ini
plugins: flakes-4.0.0, pep8-1.0.6
collected 6 items

test_flakes.py ......

=========================== 6 passed in 1.04 seconds ===========================
/nix/store/dknqmkkykmwis5v8hjc1bsr8iiimz6gz-python2.7-pytest-flakes-4.0.0
/nix/store/xywpabmyrwj2waacggh4chnl5wvwam63-python3.6-pytest-flakes-4.0.0

backported: dd13aedbdb1


Exceptions in ExceptionHandler's return 200 instead of 500

Throwing an exception in an exception handler will currently result in a 200 with empty response body. Instead it should try to return 500 with some error message.

Fixed in 08fc77f94b3544508674e6851479ef99648f89fb


Implement if/unless/elsif/else.

"if modifier", (return foo if bar) not yet implemented.
Rules "inspired" from ruby grammar.
I think that if we finally do the assignment operator and parenthesis it will finally move us from the 0.01% pass from stdlib.

I did this on top of #24

Closing this since the repo will be archived.


client tables in myrange poorly linked

No way to know in client_agreement which client + loc should be there.
Should have a unique key for client + loc records if each of those is an 'FTA record'.

@LisaMoore1 do client + loc codes get recycled? or are they only ever associated to one RAN ever?

@micheal-w-wells Client+loc combination only ever applies to specific client doing business either on their own or with specific joint venture partners. Example:
12345678-00 Lisa on her own (-00 is almost always the person/business on their own)
12345678-01 Lisa with Mike as a JV partner in DND
12345678-02 Lisa with mike as a JV partner in DSS
The 8 digits always refers to the individual/business and the location code reflects things like JVs, business relationship, if they have multiple offices in different towns  etc. The CLIENT application manages the relationships (i.e. every person in a partnership has their own Client-loc and those are linked in CLIENT.
Staff person selects the primary contact in FTA and FTA looks to Client and pulls in the appropriate JV partners (recording their client-loc) based on the client-loc of the primary contact.

ok that helps a lot thank you!!

is there any other field other than the RAN # itself that links two clients together on a venture?

@micheal-w-wells I'm not sure I completely understand the question but I think that is accurate. The RAN will be associated with the multiple clients that FTA added because of the primary's Client#-locn.  I think the only place we pull client info is as it relates to the RAN.
When we add agency agreements we will end up in a situation where a client wants a different agent associated with each of their locations. An example would be business with multiple locn codes and a different ranch manager associated with each. They will want to authorize the appropriate ranch manager to be able to sign for the correct RAN.

Carrying the agency agreement thinking forward here, do each of those agents have their own client (and maybe location) code?  How to identify regular agreement holder vs agent?

@calebissharp i'm thinking computed column that is 12345-12 (client + loc) so its easy to read and we'll call it client_location_id.  We'll add it to ref_client, as well as client agreement and plan confirmation.  The task then will be to track down the code that puts client records in client_agreement and plan_confirmation and make sure that its getting the right records also.  This making sense to you also?  Any other ideas?

@micheal-w-wells Couple other comments. Not all agents will have client #s or location codes (ex. the ranch manager who is acting as an agent for the company for that specific RAN). Both AH and their agent will need to be able to view, edit and sign for the relevant RANs.
When fully developed agency agreements:

have a time bound nature (expires on specific date after which agent no longer has access/authority)
be cancelled by the AH at any time (the agent no longer has authority)
need to be visible to staff (either displayed somewhere on the RUP or an option to view) summary of information (who, when, and how to contact)

Definitely something for us to dig into more in the new year.

@calebissharp can I get a knex migrations primer?  I can manually run SQL to do this easily enough but if we are trying to keep things consistent I'll do it that way.

maybe tomorrow morning we can crush this one together

@micheal-w-wells when you draft up some sort of plan for the relationship for this data can I have a look?

@micheal-w-wells Yeah, I can go over it with you tomorrow morning. The gist of it is that you run knex migrate:make name-of-migration and edit the file it creates. You can also just use the knex.raw() function to directly execute SQL if you don't want to use the DSL syntax. src/libs/db2/migrations/20191023143720_create-plan-version.js is a good example.

@calebissharp My main interest is confirming that our data model (or querying) accurately captures the relationship between CLIENT+locn and RAN in a way that is accurate (and hopefully accommodating). How we arrives there is magic to me.

What we spitballed this morning is another ID column on ref_client, that uniquely identifies a client + loc code at a point in time (e.g., client 1234 loc 2 at status A).  That ID is what gets associated to the versioned RUP,  and in that way even if the client changes from status A to P,  the RUP keeps what was there.  Should new RUPs be created they should get the newest client + loc + status associated to that RAN.
We are still flushing out what needs to happen with client_agreement and plan_confirmation.  I think the easiest is to add a new ID column and point to the ID mentioned above.


Distinguishing domains that should receive a Do-Not-Sell signal from those that do not

As @davebaraka pointed out yesterday, many of the domains our HTTP browser extension communicates with should not necessarily receive a Do-Not-Sell signal. For example, if there is a simply an image being served, it may not be necessary to send a Do-Not-Sell signal to the respective domain.
@davebaraka suggested that there may be a way to distinguish based on the different categories shown in browser developer tools. Another (roundabout) way may be to filter out domains based on a list of content delivery networks (CDNs, e.g., Cloudflare). Though, it depends a bit on what they are actually serving.
At the moment, while nice to address, I do not see this issue as a big problem. In principle, it should not harm to send more Do-Not-Sell signals than actually needed. It is a bit similar to sending repeated signals while a user is already opted out (though, in that case, there may be actually a reason to do that, for example, if the opt out expires at some point).
Where I could see this issue coming up as well is in the count of opted out services. The count may be not accurate if pure administrative servers that just send content are included, for example.
(cc'ing @rgoldstein01)

As @kalicki1 observed during his IAB tests, sometimes OptMeowt places an extra opt out cookie for the google domain. In principle, this is not a problem (assuming that Google itself is not selling personal data, which seems to be the case according to its privacy policy). This is just another situation where an extra cookie will not have any effect (maybe, performance is an issue, though we would need to look into it).
@kalicki1 says:

Right, my guess is this is the case when 3rd party cookies are not disabled on sites that use Google's ad network, but Google's cookie popping up on another site is the only case of this I've seen.

Bonus: @asalia-1, please finish this by our meeting next week.

Let's exclude image types and err on the side of rather sending one Do Not Sell signal too many as opposed to omitting one that should have been sent.

We are filtering image type HTTP requests and we are not attaching dns headers to them on interception


db/migrate.cr file not created on kgen init app appname

Hey Guys,
Thanks for building this framework, looks really promising for someone used to working with ruby/rails like me 👍
I'm trying to get my first project going with it, and when I run the command:
kgen init app appname

Then it is not creating the db folder or the migrate.cr file
Here's the commands I ran to get things going.
Firstly grab the generator:
MacBook-Pro:~ FORSBERGtwo$ git clone git@github.com:TechMagister/kemalyst-generator.git
Cloning into 'kemalyst-generator'...
Enter passphrase for key '/Users/FORSBERGtwo/.ssh/id_rsa':
remote: Counting objects: 781, done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 781 (delta 4), reused 0 (delta 0), pack-reused 766
Receiving objects: 100% (781/781), 84.66 KiB | 0 bytes/s, done.
Resolving deltas: 100% (346/346), done.
MacBook-Pro:~ FORSBERGtwo$ cd kemalyst-generator/
MacBook-Pro:kemalyst-generator FORSBERGtwo$ shards install
Updating https://github.com/mosop/cli.git
Updating https://github.com/mosop/optarg.git
Updating https://github.com/mosop/callback.git
Updating https://github.com/mosop/string_inflection.git
Updating https://github.com/mosop/teeplate.git
Updating https://github.com/TechMagister/crystal-icr.git
Updating https://github.com/TechMagister/sentry.git
Updating https://github.com/juanedi/micrate.git
Updating https://github.com/crystal-lang/crystal-db.git
Updating https://github.com/will/crystal-pg.git
Updating https://github.com/crystal-lang/crystal-mysql.git
Updating https://github.com/crystal-lang/crystal-sqlite3.git
Installing cli (0.5.2)
Installing optarg (0.4.4)
Installing callback (0.5.1)
Installing string_inflection (0.2.0)
Installing teeplate (0.2.3)
Installing icr (fea1ddd02c8becdced0cb1a049c62b42e7aaa63d)
Installing sentry (a78129ec1e66aa24c91b93199ea187e4793c8d58)
Installing micrate (0.3.0)
Installing db (0.4.0)
Installing pg (0.13.3)
Installing mysql (0.3.2)
Installing sqlite3 (0.8.2)
MacBook-Pro:kemalyst-generator FORSBERGtwo$ make
Building kgen in /Users/FORSBERGtwo/kemalyst-generator
MacBook-Pro:kemalyst-generator FORSBERGtwo$ ln -sf $(pwd)/bin/kgen /usr/local/bin/kgen
MacBook-Pro:kemalyst-generator FORSBERGtwo$ cd

Then I ran the init app  instructions:
MacBook-Pro:~ FORSBERGtwo$ kgen init app orderlylinks
Rendering App orderlylinks in ./orderlylinks
 - creating .gitignore
 - creating .travis.yml
 - creating bin/sentry.cr
 - creating config/application.cr
 - creating config/database.yml
 - creating config/routes.cr
 - creating config/session.cr
 - creating config/static.cr
 - creating docker-compose.yml
 - creating Dockerfile
 - creating LICENSE
 - creating public/crossdomain.xml
 - creating public/javascripts/main.js
 - creating public/robots.txt
 - creating public/stylesheets/main.css
 - creating README.md
 - creating shard.yml
 - creating spec/spec_helper.cr
 - creating src/controllers/static_controller.cr
 - creating src/views/layouts/_nav.slang
 - creating src/views/layouts/main.slang
 - creating src/views/static/index.slang
 - creating src/orderlylinks.cr
MacBook-Pro:~ FORSBERGtwo$ cd orderlylinks
MacBook-Pro:orderlylinks FORSBERGtwo$ shards update
Updating https://github.com/drujensen/kemalyst.git
Updating https://github.com/drujensen/kemalyst-model.git
Updating https://github.com/crystal-lang/crystal-db.git
Updating https://github.com/drujensen/kemalyst-validators.git
Updating https://github.com/drujensen/kemalyst-spec.git
Updating https://github.com/drujensen/delimiter_tree.git
Updating https://github.com/jeromegn/kilt.git
Updating https://github.com/jeromegn/slang.git
Updating https://github.com/raydf/smtp.cr.git
Updating https://github.com/will/crystal-pg.git
Updating https://github.com/waterlink/mocks.cr.git
Updating https://github.com/waterlink/singleton.cr.git
Installing kemalyst (0.4.3)
Installing kemalyst-model (0.4.4)
Installing db (0.4.0)
Installing kemalyst-validators (0.2.0)
Installing kemalyst-spec (0.1.1)
Installing delimiter_tree (0.1.4)
Installing kilt (0.3.3)
Installing slang (master)
Installing smtp (master)
Installing pg (0.13.3)
Installing mocks (0.9.4)
Installing singleton (1.0.0)
MacBook-Pro:orderlylinks FORSBERGtwo$

Notice there is no creation of db/ or /db/migrate.cr. If I continue the instructions for generating a scaffold and then run the migration I get:
MacBook-Pro:orderlylinks FORSBERGtwo$ kgen generate scaffold Shop url:string token:string
Rendering Scaffold shop
 - appending config/routes.cr
 - creating db/migrations/20170331123501_create_shop.sql
 - creating spec/controllers/spec_helper.cr
 - creating spec/controllers/shop_controller_spec.cr
 - creating spec/models/spec_helper.cr
 - creating spec/models/shop_spec.cr
 - creating src/controllers/shop_controller.cr
 - creating src/models/shop.cr
 - appending src/views/layouts/_nav.slang
 - creating src/views/shop/_form.slang
 - creating src/views/shop/edit.slang
 - creating src/views/shop/index.slang
 - creating src/views/shop/new.slang
 - creating src/views/shop/show.slang
MacBook-Pro:orderlylinks FORSBERGtwo$ crystal db/migrate.cr
Error: unknown command: db/migrate.cr

Note: I created the DB in Postgres and exported the DATABASE_URL before doing this.
Any ideas? Perhaps related to the upgrade of the crystal-db version yesterday?
OSX Version 10.12.4
shard.lock file below:
version: 1.0
shards:
  db:
    github: crystal-lang/crystal-db
    version: 0.4.0

  delimiter_tree:
    github: drujensen/delimiter_tree
    version: 0.1.4

  kemalyst:
    github: drujensen/kemalyst
    version: 0.4.3

  kemalyst-model:
    github: drujensen/kemalyst-model
    version: 0.4.4

  kemalyst-spec:
    github: drujensen/kemalyst-spec
    version: 0.1.1

  kemalyst-validators:
    github: drujensen/kemalyst-validators
    version: 0.2.0

  kilt:
    github: jeromegn/kilt
    version: 0.3.3

  mocks:
    github: waterlink/mocks.cr
    version: 0.9.4

  pg:
    github: will/crystal-pg
    version: 0.13.3

  singleton:
    github: waterlink/singleton.cr
    version: 1.0.0

  slang:
    github: jeromegn/slang
    commit: 17ee48438f9798ac0d47520c47c17bcd7e06cd93

  smtp:
    github: raydf/smtp.cr
    commit: 1301f244fd1e251244b0a9fb7f8bc817da9c8854

Many thanks again, can't wait to get more into this 😃

Hi @forsbergplustwo.
Thanks for trying out this out.  It looks like I need to update the readme.md with the latest changes.  I moved to using micrate instead of my own homegrown solution.
The migration scripts only get created when you generate a model.  You can do this with:
`kgen g scaffold Post name:string body:text'
To run the migrations:
kgen migrate up
If you happen to have time to update the readme.md as you walk through the process, I would appreciate your contributions.

Also, to run the app and auto recompile with any changes, we are using sentry:
kgen watch

Thanks for the quick reply Dru, running kgen migrate up did the trick! Submitted PR #31 to help with the documentation.


formula_auditor: add exemption for nghttp2

[x] Have you followed the guidelines in our Contributing document?
[x] Have you checked to ensure there aren't other open Pull Requests for the same change?
[x] Have you added an explanation of what your changes do and why you'd like us to include them?
[ ] Have you written new tests for your changes? Here's an example.

[ ] Have you successfully run brew typecheck with your changes locally?
[ ] Have you successfully run brew tests with your changes locally?

Needed for Homebrew/homebrew-core#171634 due to nghttp2/nghttp2#2194.
~I've avoided adding an allowlist for now because I really don't want to~
~see this list grow.~

Thanks again @carlocab!


Setup a service which notifies users about their loans getting closer to liquidations

Imagine a scenario where a user borrows 2000 USDC against 1 ETH at one of the lending protocols. At that point, the user's health ratio is far above 1, but the user risks being liquidated when it falls below 1. Because the user doesn't have time to check her health ratio frequently, she could subscribe to the service and get notified whenever the health ratio falls to predefined levels.
The user would provide the following information:

Starknet wallet address
Email address
Health ratio levels

The service will monitor all loans taken under the wallet address supplied by the user and send notifications to the email address supplied by the user. The notifications will be sent whenever the health ratio falls below any supplied health ratio levels, provided the health ratio was above that level before.

@lukaspetrasek
few notes:
Not one, but multiple STRK addresses
Input on which protocol the loan(s) are
on the backend it should allow for multiple submissions (ie not overwrite, but add to the previous submissions and keep the protocol ID)
there is a cap on how many emails we send per day per heath threshold crossing

health goes up and below threshold many time in a day -> only one email was sent
health went below one threshold -> email sent... then below another -> another email sent right away

Node that will be used for requesting the data should be configurable - so that it is possible to use private one.


Restructure OWNERS_ALIASES file for clarity and consistency

Description

Issue

Closes: #

@Varma0604, Edit the description of your PR it will help to clarify the changes you have made.


[WIP] Devcontainers v2

Changes:

install kubectl, kubeseal, docker and kind into the devcontainer
bind mount the docker socket to devcontainer giving it access to host docker instance
[WIP] enabling kind cluster creation, deletion, and manipulation seamlessly from both devcontainer and host machine, or a mix therof
install zsh and oh-my-zsh for syntax highlighting / DevX and setting it as the default shell
changing the kind related make targets to be deploy-kind, undeploy-kind, etc. This keeps the naming conventions  consistent with how the openshift prod and qa envs are named.

Could use some networking help from the experts @nerdalert and @vishnoianil. Inside the container it can see itself as well as other pre-provisioned kind clusters, however when I try to make one within the container it gives me port refusal: The connection to the server <IP_ADDRESS>:6443 was refused - did you specify the right host or port?. I bound this to 6443 in the network of the instructlab-ui kind cluster we have because I need some way of sharing access to the kind kubernetes API to the devcontainer, and by default it just picks a random port. Is a Proxy for the kube API the right answer here? I see there are some options for that: https://pkg.go.dev/sigs.k8s.io/kind/pkg/apis/config/v1alpha4#Networking. I think I get what the problem is, I just dont know how to solve it.


Add Draft Proposal 60

This was created on behalf of Juan (Discord: juancamp1987#4903) @Juancamp1987. Any feedback should be directed towards him.

Add draft Celo Governance Proposal 60
Discussion is taking place on the Celo Forum regarding this proposal

This is amazing, adopted!!!


Two chunk instances downloading the same file

Do we care about the same file being downloaded simultaneously by two chunk instances? Asking because I believe this can a pre-release feature.
Example:
$ ./chunk HTTP://a.b/c &
$ ./chunk HTTP://a.b/c &

The result of this sequence of operations is unknown.
We could deal with it after https://github.com/cuducos/chunk/issues/8, by augmenting the infrastructure in place.
cc/ @cuducos

With the changes from #38 we started to have a more predictable scenario here.
This would still be a scenario we wouldn't be prepared for:
$ ./chunk HTTP://a.b/c &
$ ./chunk HTTP://a.b/c &

But this would be OK:
$ ./chunk HTTP://a.b/c &
$ cd another-directory && ./chunk HTTP://a.b/c &

What would happen here is that the file c would be downloaded twice since the local path would be different.
In my opinion, two processing downloading to the same local path should not be allowed (classic concurrency problem both on the downloaded file and on the progress file). I am just not sure about how to control and prevent that.

If #38 is ok, what about we create a ~/.chunk/lock file to only allow one instance of chunk running at a time?

If #38 is ok, what about we create a ~/.chunk/lock file to only allow one instance of chunk running at a time?

It is possible, but I believe we don't need to make it too restrictive. Bellow, I try to do some brainstorming about a less restrictive option: consider each progress management file a lock file.
That has the same complexity as creating a single lock file but allows us to have as many chunk instances as needed, as long as they do not download the same file.
There is one faulty case missing that we should treat either way: what happens when the chunk instance crashes?
There is a straightforward way to solve this problem:

keep and update the PID of the process in the progress management file
keep and update the timestamp of the last activity (chunk download)

With that, every time a download is started, chunk should do as follows:

verify if the progress manager file is there

if it is, check the owner PID (if it is the owner, proceed) and the last activity (if it is too long ago, become the owner and proceed)
otherwise, create a progress manager file as usual and proceed

Of course, we could introduce the --force-start flag in the future, which guarantees the current chunk instance rules them all.


Problem with printer demo.

Hi,
I'm testing your demos with ESP32-S3 and some POS printers. Two printers are working fine, but I'm not able to make one Oxhoo printer work. The problem is a function usb_host_interface_claim - fails with error 0x106 ESP_ERR_NOT_SUPPORTED.
On Windows, this device has a description like in the file attached. What I found it has two Configuration Descriptor sections??
I've also attached Wireshark capture file where the last lines show how the device is recognized and also demo print to the printer from the windows app - it should be useful. Do you have any ideas on how to initialize this printer to make it work?
OXhoo.txt
usb oxhoo.zip
Marcin.

USB descriptors are very confusing when captured on Windows or anything with high speed or super speed USB ports. Some USB devices report different descriptors depending the USB speed: full (12Mbits/s), high (480Mbits/s), and super speed (I don't remember). The ESP32 can only do full and low speed.
To see the USB descriptors the ESP32 sees, set "Tools | Core Debug Level" to "Verbose". This will show the USB descriptors on the Serial monitor window.
In the first "Interface Descriptor" the Class, SubClass, and Protocol are (7,1,2) which is what the print demo is looking for. It might be useful to post the entire output to the Serial monitor with Verbose debug level. If this descriptor is what the ESP32 receives, I am not sure why the claim would fail.


brew cask install istat-menus

❯ brew cask install istat-menus
==> Downloading http://download.bjango.com/istatmenus/
######################################################################## 100.0%
Error: undefined method `extname' for 0:Fixnum
Please report this bug:
    https://github.com/caskroom/homebrew-cask/issues
/usr/local/Cellar/brew-cask/0.48.0/rubylib/cask/container/criteria.rb:43:in `extension'
/usr/local/Cellar/brew-cask/0.48.0/rubylib/cask/container/pkg.rb:3:in `me?'
/usr/local/Cellar/brew-cask/0.48.0/rubylib/cask/container.rb:50:in `block in for_path'
/usr/local/Cellar/brew-cask/0.48.0/rubylib/cask/container.rb:48:in `each'
/usr/local/Cellar/brew-cask/0.48.0/rubylib/cask/container.rb:48:in `find'
/usr/local/Cellar/brew-cask/0.48.0/rubylib/cask/container.rb:48:in `for_path'
/usr/local/Cellar/brew-cask/0.48.0/rubylib/cask/installer.rb:83:in `extract_primary_container'
/usr/local/Cellar/brew-cask/0.48.0/rubylib/cask/installer.rb:50:in `install'
/usr/local/Cellar/brew-cask/0.48.0/rubylib/cask/cli/install.rb:20:in `block in install_casks'
/usr/local/Cellar/brew-cask/0.48.0/rubylib/cask/cli/install.rb:17:in `each'
/usr/local/Cellar/brew-cask/0.48.0/rubylib/cask/cli/install.rb:17:in `install_casks'
/usr/local/Cellar/brew-cask/0.48.0/rubylib/cask/cli/install.rb:6:in `run'
/usr/local/Cellar/brew-cask/0.48.0/rubylib/cask/cli.rb:81:in `run_command'
/usr/local/Cellar/brew-cask/0.48.0/rubylib/cask/cli.rb:121:in `process'
/usr/local/bin/brew-cask.rb:42:in `<top (required)>'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/usr/local/Library/brew.rb:59:in `require?'
/usr/local/Library/brew.rb:142:in `<main>'

Getting a checksum error when trying this now with the latest homebrew and istat-menus:
$ brew cask install istat-menus
==> Satisfying dependencies
==> Downloading https://s3.amazonaws.com/bjango/files/istatmenus5/istatmenus5.32.zip
######################################################################## 100.0%
==> Verifying checksum for Cask istat-menus
==> Note: running "brew update" may fix sha256 checksum errors
Error: Checksum for Cask 'istat-menus' does not match.

Expected: 99e1a262cddc9bf368cb01854610b64b8c5551ace4f5a89aad6d63ca054e5ecf
Actual:   208bc52e8ae6e04e6b001f9f3da7bfd57e919625f10f582ba078ff7032609401
File:     /Users/randrade/Library/Caches/Homebrew/Cask/istat-menus--5.32.zip

To retry an incomplete download, remove the file above.
Error: Install incomplete.


Meeting Proposal: Documentation and resources for unsafe code

Summary
There are currently a number of resources for learning how to write unsafe code. Within rust-lang, there's at least the rustonomicon, the UCG repo (both issues and checked in stuff), and various tidbits lying around in the standard library docs and the reference. There are lots of external projects too, with varying degrees of relation to the project.
We should figure out what the story for these resources ought to look like. What is out of date and needs to be removed? What should the team take ownership of? What are the resources that we want people to be going to?
A meeting on this topic would require a non-trivial amount of pre-work; someone would need to aggregate all the existing resources, and come up with at least some options for answers to the above questions. I also expect that there are stakeholders outside of the team who would probably be interested (@Manishearth maybe?) and are worth coordinating with.
Reading
Hopefully will be prepared for the meeting.
Comment policy
These issues are meant to be used as an "announcements channel" regarding the proposal, and not as a
place to discuss the technical details. Feel free to subscribe to updates. We'll post comments when
reviewing the proposal in meetings or making a scheduling decision. In the meantime, if you have
questions or ideas, ping the proposers on Zulip (or elsewhere).

Zulip Thread created: https://rust-lang.zulipchat.com/#narrow/stream/136281-t-opsem/topic/Meeting.20Proposal.3A.20Documentation.20and.20resources.20for.20unsaf.2E.2E.2E.234

What's the status of this? A meeting has been had, right (on 2023-07-11)? What's the conclusion? Can the issue be closed?

I will close the issue since it doesn't seem like there are any post-meeting actions to track here. Please reopen if you have anything to track. :)


fix error issue 12250

Description: Correction of bug that make the predict method failed on VertexAI LLM.
Issue: #12250
Dependencies: none.
Tag maintainer: @hwchase17

@hwchase17 i removed the paramter n from VertexAI and ChatVertexAI


Proposed additions to Map class docs.

The Map class documentation is missing a few details which I think should ideally be covered. The proposed changes should be self evident.

The title is wrong - you propose to add nothing to the class, just to the docs. Maybe "Fix undocumented items in the Map class".

The title is fine. Thanks for the PR @PureFox48


How to register alternate events?

In https://github.com/hopsoft/turbo_reflex/blob/main/README.md#reflex-triggers it suggests we can override default events with TurboReflex.registerEvent but this method doesn't exist for me.
I found TurboReflex.registerEventDelegate but I couldn't get it to register onmouseover or some other event types.
TurboReflex.registerEventDelegate('onmouseover', ['p[data-turbo-reflex]'])

Similarly, I tried inline custom events like data-turbo-reflex="onmouseover->CounterReflex#increment" but didn't see the reflex action trigger.

You'll want to remove the on prefix in the event name. Here's an example.
TurboReflex.registerEventDelegate('mouseover', ['p[data-turbo-reflex]'])

Let me know if this works for you.

Note that after the lib rebrand to TurboBoost Commands, this code should be changed to:
TurboBoost.Commands.registerEventDelegate(...)

@hopsoft I wanted to follow up on this conversation. I've attempted to register a keyup, keydown and keypress event but unfortunately it didn't trigger the command.
I unfortunately don't have a sample project for you at the moment and I'll see if I can take this local and do some debugging myself, but just wanted to put it on your radar.

Interesting. If it helps, this is where/how the library registers the default event delegates. https://github.com/hopsoft/turbo_boost-commands/blob/main/app/javascript/index.js#L92-L98
And here's where the library identifies a match when the even is triggered. https://github.com/hopsoft/turbo_boost-commands/blob/8217e3925fab7cb0f0ca2198f39ef82732dca85b/app/javascript/delegates.js#L17

Verified that we definitely have a bug related to registering additional events. The click handler is taking precedence. Will dive into this shortly.

I tested this current branch against keyup as well and that seems to still fail. I hope tomorrow to actually sit down and take a look at debugging

Excuse my stupidity but is there a specific reason to not use something similar to stimulus where you can bind the action with change->Command->method

Great question. Yes, there is a reason we opt for event delegation over per-element bound event listeners. Low level tools and libraries (like this one) can't make too many assumptions about the JavaScript ecosystem they're running within.
One example to illustrate the challenges is related to how StimulusReflex implicitly registers a StimulusJS controller for events that declare a data attribute that haven't already registered a StimulusJS controller with similar behavior. Detecting this is problematic because there's no way for the library to know how the JavaScript assets are organized or how they'll be loaded and parsed for a given application. This scenario is exacerbated with new techniques like import maps etc... Any client side Stimulus controller that's implicitly wired up can introduce unintentional and unwanted duplicate behavior (i.e. trigger RPC calls multiple times from a single client side event).
Event delegation eliminates this problem entirely, so it doesn't matter how the JavaScript assets are resolved, loaded, and parsed on the client. The primary caveat of delegation being that it limits us to bubbling events.

abort
blur
change
click
contextmenu
dblclick
error
focus
input
keydown
keypress
keyup
load
mousedown
mousemove
mouseout
mouseover
mouseup
mousewheel
resize
scroll
select
submit
unload

Having said that, event delegation also works with custom events and each registered delegate can include multiple selectors per event. Selectors for each delegate can be as simple or as sophisticated as desired.

In your example above, I would expect the following delegate to work.
const existingChangeDelegate = TurboBoost.Commands.eventDelegates.find(e => e.name === 'change')
TurboBoost.Commands.registerEventDelegate('change', [...existingChangeDelegate.selectors, '.my-element[data-turbo-command]'])

I could probably make this a bit more intuitive though.

Just created ticket #75 to help with event delegate overrides.


Clear overrides on passing null

Fixes #29004.
I could move the erase() function inside the if has() block but I think it's more readable this way.

Thanks!


Auto Power Switching - Which one is Battery?

What does AC and DC mean? I can't figure it out...

AC is when it's plugged in. I always think of DC as disconnected, but I am willing to bet it has more to do with the fact that batteries provide DC (direct current) power, and the wall charger receives AC power (alternating current) from a socket. So yeah, a short and long answer haha.

I think AC is ur barrel charger and DC is the type c charger


Issue 69 | Nested programs interface

Summary
Nested programs interface
Now we provide a way to execute async nested programs in a following manner
from quantum_serverless import QuantumServerless, Program

serverless = QuantumServerless(...)

my_program = Program(
    name="my_program",
    entrypoint=script.py,
    dependencies=["requests", "pyscf==2.0.3"],
    version="0.0.1"
)

serverless.set_provider("provider")
job = serverless.run_program(my_program) # this will run program on provider
job.status() # to get status
job.logs() # to get logs

serverless.set_provider("another_provider")
another_job = serverless.run_program(my_program) # this will run program on another_provider

where script.py has our program code of interest for example
# script.py
from quantum_serverless import QuantumServerless, run_qiskit_remote, get

@run_qiskit_remote()
def ultimate():
    return 42

with QuantumServerless():
    result = get([ultimate() for _ in range(10)])

print(result)

Moreover we provide interface for program storage backend that can be implemented for example for local storage
from quantum_serverless.core.program import ProgramStorageBackend

class LocalStorageBackend(ProgramStorageBackend):
     ...

program_storage = LocalStorageBackend()

# to save program
program_storage.save_program(my_program)

# to load program
recovered_program = program_storage.get_program("my_program")

Details and comments
Co-authored with @Tansito
Closes #69

How to concatenate different programs in a workflow? Any use example?

I think workflows will be inside as tasks and program is just an entrypoint to execution
# program.py

@run_qiskit_remote()
def step_1():
    ...

@run_qiskit_remote()
def step_2():
    ...

@run_qiskit_remote()
def combine_results_step2(step_1_res, step_2_res):
    ...

with serverless:
    result = get(combine_results_step2(step_1(...), step_2(...)))

How to invoke programs from cloud? I mean, the private/hide version of a program to allow users run a program without get the source code of it. Any thoughts or idea to implement it?

late on Program class will local/remote flag. So, if program is remote then run_program will serialize payload and send it over to cloud.
You will still be able to call get_program on private programs to get Program instance, but this instance will only have name of the program to run, no actual data

In the example, Job can be named like program, right? Because inside of a program we can run several runtime jobs, for example

Yes, I'm planning to update docs a little bit in a following PR. Good suggestion on naming and examples!

In the section not implemented yet ProgramStorageBackend, what is the meaning of Backend? can we use another naming to avoid confusion?

Good suggestion, I will remote Backend from name


SHACL - Combinatorical tests

The SHACL engine should handle any and all cases where a data store is modified. To ease testing all these cases we should create a more automated test framework.
Any single larger dataset can also be validated by inserting the entire dataset in a single operation.
By combining the support for validating changes and entire datasets we could the following.

automatically create insert and delete operations based on some rules
create all subsequences of operations

excluding subsequences where an operation n is invalid and n is not the last operation

run all these sequences as one transaction per operation and as all operations in a single transaction
make sure the results from each run is the same

This might be nice to have, but closing it for the time being at least.


Template mode image support

Hi, does the objectCommand support images or is it just text? Thanks!

I think it might support images, but it's not implemented (yet).


Added traversal through map elements.

Previously a LINKLIST would be TRAVERSED but not a LINK Map. See issue #9099. This definitely needs to be reviewed for correctness to make sure there are not unintended consequences, but this seems to resolve the issue. I can retarget this at the develop branch if needed.

Hi @mmacfadden
Thank you very much, it makes a lot of sense.
I do not see any reason why it should have unintended side effects, so I'm merging it
Thanks
Luigi


Hide navigation on edit page SN-732

https://saritasa.atlassian.net/browse/SN-732

@tanhieu-nguyen Please, don't forget to update the version.txt and changelog as well


FYI - Created new rust-protobuf example

This seemed like the best rust+protobuf project, but being a rust novice, I felt the rust-protobuf crate lacked some good paste-and-go examples working with various rust data types + protobufs using your rust-protobuf crate, so whipped this up: https://github.com/jgarzik/rust-protobuf-example
(no action needed - just fyi - review & criticism welcome - thanks for working on rust-protobuf)

Looks good.
Do you want to submit a PR into stepancheg/rust-protobuf/protobuf-examples?


Commercial Dishwasher Detergent & Rinse Aid for EU Market / German Market?

Hello everyone,
does someone know where I can get dishwater detergent & rinse aid for the EU Market / German Market? On German Sites I find only b2b offers but nother for customers.
Maybe you know which dealer sells it for non-business customers.
Thanke you.

Thank you for sharing this. Maybe you can share your results from testing.

I've ordered the Element-brand supplies from Xanchemie in Germany - straight from them instead of Amazon, to save on double shipping and also 5€ on the rinse aid.
http://shop.xanchemie.de/product_info.php?products_id=48
http://shop.xanchemie.de/product_info.php?products_id=46
Although still quite a bit more expensive than UK supplies, the dosage is perfect for the detergent and a bit too high for the rinse aid.

@dekuNukem After reading through the conversations on your Discord server and here on github, I think it would be great to have a wiki page here listing detergents people have tried, where to buy them from and what results they achieved with them. If you like I could create a draft for that?

@dekuNukem @Melanoneiro Yes, that definitely would help a fortune!

Hi Xearoxde,
I’m in France and I have the same issue.
I bought some days ago detergent & rince aid from a belgium website :
* detergent : https://eshop.medipost-nutristoma.com/produits/medical/desinfection-hygiene/liquide-de-lavage-exeol-pour-lave-vaisselle-5-litres.html

* rinse aid : https://eshop.medipost-nutristoma.com/produits/medical/desinfection-hygiene/liquide-de-rincage-vaisselle.html

Sorry, their website is only in french and in dutch, but they ship to France, Luxembourg, Germany, Netherlands, Spain…
It’s also quite cheap (but not as cheap as in Britain).
i didn’t try the detergent and rinse aid yet, because I didn’t receive them yet. So I can’t say if they work with Bob.
They seems to be more concentrated than the ones recommended by the author.

Hi,
I finally tested the deterged and rince aid I talked about earlier.
I knew that they was much more concentrated than the ones recommended by the author, so I diluted them by a factor 2. I mixed 65mL of detergent with 65mL of water, and I mixed 17mL of rince aid with 17mL of water.
Security-info-detergent.pdf
Security-info-rinse-aid.pdf
The results was not very good. I had a lot of white powder on my pans after a wash. I guessed it was due to a too high concentration of detergent.
So, I removed 30mL of the detergent mix and replaced it with water. The new mix is now a 1:2.67 dilution ratio of the "pure" detergent.
I don't have white powder on my pans anymore, so I guess 1:2.67 dilution ratio is the good one. For the moment, I will stay with 1:2 dilution ratio for rince aid.
If I do the calculation, it means that my detergent tank will last 30 washes *5000mL / (130/2.67) = 3080 washes (or more than 8 years for 1 wash per day). For the rince aid tank, it's 30 washes  * 5000mL / (35/2) = 8570 washes (or more than 23 years)
If I throw out the rinse aid after 8 years (Is it still efficient after so much years ?), I would have spent 36€ including delivery for 8 years (and 3000 washes). It's 4,5€ per year, or 1,1 cent per wash.
Neat :)
Attention : This is still a WIP. I need to test my dosages for a long time before being sure they are good. Also, for the record, I have a quite hard water at home (Conductivity à 25°C = 629 µS/cm or French TH = 35)

Hi Xearoxde,
I’m in France and I have the same issue.
I bought some days ago detergent & rince aid from a belgium website :
* detergent : https://eshop.medipost-nutristoma.com/produits/medical/desinfection-hygiene/liquide-de-lavage-exeol-pour-lave-vaisselle-5-litres.html

* rinse aid : https://eshop.medipost-nutristoma.com/produits/medical/desinfection-hygiene/liquide-de-rincage-vaisselle.html

Sorry, their website is only in french and in dutch, but they ship to France, Luxembourg, Germany, Netherlands, Spain…
It’s also quite cheap (but not as cheap as in Britain).
i didn’t try the detergent and rinse aid yet, because I didn’t receive them yet. So I can’t say if they work with Bob.
They seems to be more concentrated than the ones recommended by the author.

Hi,
I finally tested the deterged and rince aid I talked about earlier.
I knew that they was much more concentrated than the ones recommended by the author, so I diluted them by a factor 2. I mixed 65mL of detergent with 65mL of water, and I mixed 17mL of rince aid with 17mL of water.
Security-info-detergent.pdf
Security-info-rinse-aid.pdf
The results was not very good. I had a lot of white powder on my pans after a wash. I guessed it was due to a too high concentration of detergent.
So, I removed 30mL of the detergent mix and replaced it with water. The new mix is now a 1:2.67 dilution ratio of the "pure" detergent.
I don't have white powder on my pans anymore, so I guess 1:2.67 dilution ratio is the good one. For the moment, I will stay with 1:2 dilution ratio for rince aid.
If I do the calculation, it means that my detergent tank will last 30 washes *5000mL / (130/2.67) = 3080 washes (or more than 8 years for 1 wash per day). For the rince aid tank, it's 30 washes  * 5000mL / (35/2) = 8570 washes (or more than 23 years)
If I throw out the rinse aid after 8 years (Is it still efficient after so much years ?), I would have spent 36€ including delivery for 8 years (and 3000 washes). It's 4,5€ per year, or 1,1 cent per wash.
Neat :)
Attention : This is still a WIP. I need to test my dosages for a long time before being sure they are good. Also, for the record, I have a quite hard water at home (Conductivity à 25°C = 629 µS/cm or French TH = 35)

hi, any news about the mixtures and/or other products?

hi, any news about the mixtures and/or other products?

I bought this:
http://shop.xanchemie.de/product_info.php?products_id=48
http://shop.xanchemie.de/product_info.php?products_id=46
and I don't have mixed them with water. I have very good results.

I bought this:
http://shop.xanchemie.de/product_info.php?products_id=48
http://shop.xanchemie.de/product_info.php?products_id=46
and I don't have mixed them with water. I have very good results.

Ah ok. just checked the specs. im just a bit unsure if the dilution. if bob uses 1.x ml of rinse aid per litre and the specs are about 0.1 to 0.5 ml it would be way too much.

@Xearoxde @KleBoR Has someone done the calculations already how many water we have to add to those to have proper concentration?

@thisisthekap not until now :/

I am in France too and I bought the same products as @lechercheur123 thanks to his recommendation. I do not dilute them and I just refill the cassettes with the pure product. I have very good results, maybe even better than with the original cassettes. The filter in Bob remains clean much longer. My water is very soft, though, as I have a water softerner installed.
I used the detergent in the Rock'n Roll cassette too and it did the job.

@VVincentt Glad to help you :)
I finished my first refiled cassette yesterday. I will try to use pure detergent too :) (but I have a quite hard water, with a TH around 30°f)

Bonjour la communauté.
Je suis en France.
Je commence à recharger les cassettes.
Personnellement j'utilise les produits suivants  avec succès sauf le détartrant que je n'ai pas encore appliqué.
De plus je vous joins une copie de ma facture. Ce fournisseur est très sérieux, prompt et efficace.
Facture produits lavage Bob.pdf
fiche-technique-DETX15.pdf
fiche-technique-EXE0313.pdf
fiche-technique-EXE0314.pdf

Bonjour la communauté.
Je suis en France.
Je commence à recharger les cassettes.
Personnellement j'utilise les produits suivants avec succès sauf le détartrant que je n'ai pas encore appliqué.
De plus je vous joins une copie de ma facture. Ce fournisseur est très sérieux, prompt et efficace.
Facture produits lavage Bob.pdf
fiche-technique-DETX15.pdf
fiche-technique-EXE0313.pdf
fiche-technique-EXE0314.pdf

Bonjour Joel44220,
Merci pour ta contribution.
J'utilise les même produits, mais je les paye beaucoup moins cher en les achetant ici :
detergent : https://eshop.medipost-nutristoma.com/produits/medical/desinfection-hygiene/liquide-de-lavage-exeol-pour-lave-vaisselle-5-litres.html
rinse aid : https://eshop.medipost-nutristoma.com/produits/medical/desinfection-hygiene/liquide-de-rincage-vaisselle.html

Cependant, ils n'ont pas le détartrant dans leur catalogue.
Pour un bidon de 5L de détergent et de liquide de rinçage, j'en ai eu pour 36€, livraison incluse.
Hi Joel44220,
Thank you for your contribution.
I use the same product as you, but I found them somewhere else cheaper :
detergent : https://eshop.medipost-nutristoma.com/produits/medical/desinfection-hygiene/liquide-de-lavage-exeol-pour-lave-vaisselle-5-litres.html
rinse aid : https://eshop.medipost-nutristoma.com/produits/medical/desinfection-hygiene/liquide-de-rincage-vaisselle.html

But the limescale is missing on this website.
For a 5L bottle of detergent and 5L bottle of rinse aid, I paid 36€, including delivery.

Bonjour la communauté.
Je suis en France.
Je commence à recharger les cassettes.
Personnellement j'utilise les produits suivants avec succès sauf le détartrant que je n'ai pas encore appliqué.
De plus je vous joins une copie de ma facture. Ce fournisseur est très sérieux, prompt et efficace.

Attention que la facture contient ton adresse postale.

@Joel44220 @lechercheur123 @bendardenne
Guys, could you please have the common decency to keep the conversation in the language that it started in? I'm also not a native english speaker, this is the internet, so please use the common language of the internet.

If you read down you will see that @lechercheur123's comment has an English translation at the bottom. As for my comment, it's addressed to Joel specifically as he (most likely unintentionally) leaked personal data.
I understand the sentiment but no need to be curt.

@bendardenne: I said "please" twice, how's that rude?

@bendardenne: I said "please" twice, how's that rude?

Well, in France saying "avoir la décence de" (tanslation of "have the decency") is quite offensive. But I understand this was not your intention.
I agree with you that this topic should stay in English (as in most forums). But @Joel44220 might not speak English (and he joined Github just before posting his message, so he might not be used to this "unspoken" rule).
That's why I wrote my message in both languages, in order to not offend anyone.

Bonsoir,
Merci pour cette explication.
Je suis outré par ces réactions !!
Je me suis inscrit pour donner des compléments d'information pour les
pays francophones.
Je pensais dialoguer avec des gens respectueux, je me suis trompé.
Veuillez, dans les meilleurs délais, retirer toute trace de mon
intervention et me désinscrire de Github.
Très cordialement.
Joël OLLIVIER
Le Tue, 31 Aug 2021 04:45:15 -0700,
Paul @.***> a écrit :

@bendardenne: I said "please" twice, how's that rude?

Well, in France saying "avoir la décence de" (tanslation of "have the
decency") is quite offensive. But I understand this was not your
intention.
I agree with you that this topic should stay in English (as in most
forums). But @Joel44220 might not speak English (and he joined Github
just before posting his message, so he might not be used to this
"unspoken" rule).
That's why I wrote my message in both languages, in order to not
offend anyone.

Intentionally ignoring the now-not-unspoken-anymore rule after being asked nicely to make the conversation accessible to everyone, now that feels rude... but if my school french is sufficient, that problem will solve itself soon enough.

@jangrewe have you managed the right concentration of those two xanchemie products?

Hi @lechercheur123 the link are dead, did you have any other link with the same product ? i'm in France too and I struggle to find the good product. can you help me ?

I bought some days ago detergent & rince aid from a belgium website :
* detergent : https://eshop.medipost-nutristoma.com/produits/medical/desinfection-hygiene/liquide-de-lavage-exeol-pour-lave-vaisselle-5-litres.html

* rinse aid : https://eshop.medipost-nutristoma.com/produits/medical/desinfection-hygiene/liquide-de-rincage-vaisselle.html

Hi @lechercheur123 the link are dead, did you have any other link with the same product ? i'm in France too and I struggle to find the good product. can you help me ?

Hi @gwynbleidddracke !
Medipost changed their website. Here are the new links :

detergent : https://www.medipost.shop/liquide-de-lavage-exeol-pour-lave-vaisselle-5-litres.html
rinse aid : https://www.medipost.shop/liquide-de-rincage-pour-utilisation-en-machine-5-litres.html

Hi @lechercheur123 the link are dead, did you have any other link with the same product ? i'm in France too and I struggle to find the good product. can you help me ?

Hi @gwynbleidddracke !
Medipost changed their website. Here are the new links :
detergent : https://www.medipost.shop/liquide-de-lavage-exeol-pour-lave-vaisselle-5-litres.html
rinse aid : https://www.medipost.shop/liquide-de-rincage-pour-utilisation-en-machine-5-litres.html

Thanks for your help @lechercheur123 !
Now I know what to buy next month.
Thank you :)

@Xearoxde how is it working with the pure rinse aid you bought?
What are you using for the rock&roll cartridge?

I was wondering the same! The reset seems to work, but I have not found the composition of the de-scaler.

@Xearoxde how is it working with the pure rinse aid you bought?
What are you using for the rock&roll cartridge?

I was wondering the same! The reset seems to work, but I have not found the composition of the de-scaler.

Hi @lechercheur123 the link are dead, did you have any other link with the same product ? i'm in France too and I struggle to find the good product. can you help me ?

Hi @gwynbleidddracke !
Medipost changed their website. Here are the new links :
detergent : https://www.medipost.shop/liquide-de-lavage-exeol-pour-lave-vaisselle-5-litres.html
rinse aid : https://www.medipost.shop/liquide-de-rincage-pour-utilisation-en-machine-5-litres.html

So am I understanding correct that these two products are the perfect concentration for filling up the cassette? They don't need any additional preparing, diluting? I could buy these, fill up the cassette and use the rewinder?

I've been using the medipost detergent and rinse aid for a while now, it's not perfect but about as good as I remember from the original cassettes. I'll share what concentrations I use in case anyone's looking for another data point:
I use the detergent undiluted.
Manufacturer recommends 2.5-4g/L for my water hardness, Bob uses 4.33mL per liter, close enough imo.
For the rinse aid: 12mL rinse 23mL water
Manufacturer recommends 0.3-0.4g/L
Bob uses 1.17mL to 1.2L water, roughly 1g/L
I started with 2/5 or 14mL rinse 21mL water per refill, about 0.4g/L, which left some white residue.
Next refill used 12mL rinse to 23mL of water which should be about 34% or about 3.4g/L
White residue is almost gone but I remember getting a little of that with the original cassettes as well.

FYI for anyone from switzerland, while xanchemie doesn't list switzerland on their order form you can email them to order anyways, shipping is quite steep but not as bad as i expected


Using WebSocket Secure (wss://) in the browser

Hi!
I'm having troubles connecting to a WebSocket server via WebSocket Secure connection (wss://) from the browser. Standard connections (ws://) work fine.
ws://

wss://

Server
var https = require ('https');
var express = require('express');
var WebSocketServerConstructor = require('websocket').server;

var options = {
  key: ...,
  cert: ...,
  requestCert: true,
  passphrase: ...,
  ca: [
    ...
  ]
};

var Application = express();

var Server = https.createServer(options, Application);

var WebSocketServer = new WebSocketServerConstructor({
  httpServer: Server,
  autoAcceptConnections: true
});

WebSocketServer.on('connect', function(request) {
  console.log('Hello!');
});

Server.listen(443, '<IP_ADDRESS>');

Browser
var Socket = new WebSocket('wss://api.example.com/');

Is there any way how to establish a secure connection from the browser?
Thanks in advance!

why 443?

@cottayson

why 443?

mostly because it can be accessed behind a firewall...


Typo in "Add New Product" Page

There is a typo in Add New Product "publish" button

Error fix thanks


Can you specify a file hierarchy

Can you specify a file hierarchy， I just want get The contents of the first layer of subfolders

May be an advanced regexp can make the deal. Can you provide a detailed example please


Add Emily's Symbol Dictionary exercises

Closes #60

Sorry! Should have told you to ping me again if I didn't get to it in three or four days...


New Jails fail to start if zpool is exec off

New jails inherit the exec property from the zfs pool root dataset. If exec is off then thin jails will fail to start when dhcp is configured and thick jails will fail to start at all.
To replicate:

set zfs root dataset exec to off.

zfs set exec=off {pool_name}

create new jail

appjail quick jdhcp \
    vnet=em0 \
    dhcp=em0 \
    mount_devfs \
    devfs_ruleset=10 \
    start

Suggested Fix: On jail dataset creation explicitly set exec to on for {pool_name}/appjail/jails/{jail_name}/jail

See appjail.conf(5)

ZOPTS  Optional ZFS parameters for datasets. You must escape characters that can be later interpreted by the shell. Default: -o compress=lz4

Good to know, thanks. I've already got it fixed for my setup but I thought it might cause issues for other new setups and exec defaulting to on would be an easy fix. Might also consider setuid.

The default value is on (see zfsprops(7)). If someone has a different one, ZOPTS should fix the problem, but this is not an AppJail problem, but an environment problem.


Fixes loading substates not being called when liquid fire is used

The problem was a monkey patch not properly forwarding arguments to the superclass.

Thanks!


Big Sur unsaved changes dialog

VSCode Version:

Version: 1.52.1
Commit: ea3859d4ba2f3e577a159bc91e3074c5d85c0523
Date: 2020-12-16T16:30:02.420Z
Electron: 9.3.5
Chrome: 83.0.4103.122
Node.js: 12.14.1
V8: <IP_ADDRESS>-electron.0
OS: Darwin x64 20.2.0

OS Version: 11.1 (20C69)

Steps to Reproduce:

Have a file with unsaved changes
Stash the file

Does this issue occur when all extensions are disabled?: Yes/No
N/A
There is now this really jarring dialog when you try to stash a file with unsaved changes. Is this upstream in Big Sur or is this a stylistic change that can be reverted?

See #87938, for which the fix appeared in the November 2020 release.
/cc @joaomoreno

See #87938, for which the fix appeared in the November 2020 release.
/cc @joaomoreno

Warn before stash makes sense, this issue covers the UX change of showing a Big Sur modal dialog instead of a command palette confirmation step.

Warn before stash makes sense, this issue covers the UX change of showing a Big Sur modal dialog instead of a command palette confirmation step.

Upon reflection, it's entirely possible that this wasn't a command palette confirmation step previously, and that I have confused the Catalina => Big Sur save modal change for a change in VSCode.

Upon reflection, it's entirely possible that this wasn't a command palette confirmation step previously, and that I have confused the Catalina => Big Sur save modal change for a change in VSCode.

Yeah this is just how Big Sur shows modal dialogs, unfortunately. Can't do much here. 😢

Yeah this is just how Big Sur shows modal dialogs, unfortunately. Can't do much here. 😢

No problem, thanks!

No problem, thanks!


Issue #SB-28586 fix: When playing the content in portrait mode volume…

SB-28586  Mobile App: When playing the content in portrait mode volume, bit rate, speed control are not available. Also when clicked on max button its opening in portrait mode only

…, bit rate, speed control are not available. Also when clicked on max button its opening in portrait mode only

@gouravmore is it working on all screen resolutions ?


fix: path set indexes

Prior to this commit, the [MerklePathSet] was incorrectly incrementing the depth by 1 for a given path. The [MerklePath] length will always be the target depth, ranging from the sibling of the leaf until the node immediately before the root.
The method [MerklePathSet::update_leaf] was also removed. The [MerklePathSet] is expected to have the same root for all paths, and such update was breaking that consistency. It is impossible to update a Merkle path and maintain the same root. Also, a [MerklePathSet] will not necessarily contain all the paths that composes the provided root. This means it is impossible to compute the new root as some of the branches might be absent.
Finally, the internals of the [MerklePathSet] were simplified. It will contain a single map from an index to a leaf value+path pair.

The method [MerklePathSet::update_leaf] was also removed. The [MerklePathSet] is expected to have the same root for all paths, and such update was breaking that consistency. It is impossible to update a Merkle path and maintain the same root.

I'm not sure this is correct. Updating a leaf would require updating all paths in the set, but all the information needed to keep all paths consistent is there. It is possible that the implementation of the method had a bug in it, and if so, we should try to fix it - but I would not remove this method.

Closed in favor of #110


Update PlaywrightSharp.targets (x89 typo)

i have noticed a typo in the runtimes directory for x86 builds - was x89

ops, Thank you!


Adding rules for writing fast db apps

Adds my rules for writing fast database apps.

@cutwater please review
@Ladas do you have anything that you'd like to add here?

@benthomasson Thank you for bringing this up. It's a nice idea to have guidelines especially when it comes to working with databases. I think some of your advises make perfect sense, however I found some of them somewhat controversial.

I'd like to add a few items on database migrations.
@benthomasson @Ladas I'd appreciate your feedback.
Writing migrations
Keep migrations isolated from the outside world
Migrations must not depend on environment they run in or configuration parameters used at the execution time.
Migrations must not import any code that may change, including any functions, classes or constants from the project or any 3rd party projects.
When migrations are applied the database tracks only the identifier of the migration tree head or list of applied migrations. It's impossible to track the environment state used at the time each migration was applied and the environment may change. It leads to migrations failures or unexpected side effects that are hard to debug.
Use migrations for updating schema and existing data
Migrations can be also used for seeding the database, but only if the data introduced in the migrations doesn't depend on the environment and get updated rarely and via migrations. List of timezones is a good example of such constant data that may be stored in the database.
Be extremely careful with the data that is seeded via migrations, but may be updated by the business logic. In the subsequent migrations expect the data may have changed since the migration it was inserted in. Do not rely on auto-increment or randomly generated identifiers. Do not expect the data is present in the database.
For seeding the database with the data that relies on environment or configuration, use standalone scripts or tools. For example if you need to create an initial user records use scripts, management commands or tools like Ansible.
Keep migrations backwards compatible
In production environments where services upgraded without downtime or multiple versions of a service co-exist at the same time (i.e. A\B testing and Blue\Green deployments), applying a database migration must not break existing services.
Avoid changes that can break previous version of code (such as column and table renames and deletions) and provide an upgrade path if such change is required.

@benthomasson looks good overall, added some comments.
I'd add section for using DB constraints, to keep the DB integrity. The constraints provided by ORMs are not that good (e.g. ORM validation checks won't ensure the DB integrity 100%). Not sure how far Django/SQL Alchemy came with constraints, what is mapped to actual DB constraints and what not. And if foreign key constraint and cascade delete are using python implementation (slow) or are being translated to DB. (I just know that in Ruby world, the ORM got closer with the DB implementation after a decade of devs ignoring DB constraints entirely :-) )
@cutwater the migrations looks good I'd add:

individual migrations must be atomic (wrapped in a transactions), so it doesn't allow partial failure and migration is either done or reverted (sounds obvious but in analytics we still have migrations that can fail in the middle and the migrations can get stuck)
data migration (migration that manipulates with data) should be separated from schema migration (changes schema) and data migration should always have tests written
reversible migrations, always writing up and down variant of the migration so DB can roll back. (although lately I wonder who actually uses this in prod, we got used to revert by writing another migration. :-)  Reversible migrations will be quicker to revert for sure.)

@Ladas can you please elaborate on "data migrations should be separated from schema migration"? Considering that we use PostgreSQL on the project and DDL is transactional.

@cutwater the separation of data and schema migration helps with the scope of tests. When you write the test for data migration it's better not to mix some schema changes to it.  The example of data migration could be e.g. deduplication of the data. So first migration that deduplicates the data, together with the code changes that were causing this (both tested), followed by migration that will add a proper DB constraint.
Splitting tables, fixing of the data format (if not handled by DB itself) and moving data around can be other examples.
For standalone data migrations (outside of the migration process) that would be true as well. E.g. for a case where you need to move TBs of data. Doing transactions that last for a long time is not usually recommended.


#feature; track tick amounts on a per swap basis for Univ3 Subgraph

What do you think is missing?
Univ3 subgraph does not track the tick at at per swap level. It only shows the most recent tick for all historical swaps.
Describe the solution you'd like
A clear and concise description of what you want to happen.
update the pool entity tick value to include the tick value at the time of swap as oppsed to the most recent tick value

@Evan-Kim2028 Upon closer look, I believe we actually support this. Are you looking for something different than tick in this query

@bye43 please see this example.
There is no historical value of tick, it just shows the most recent one which is the problem

Ahh yes, see now. Thanks.


Adopt a framework for documentation

From the conversation on #69, there's clearly a need for a place to put such information as the code style guide, which is of documentary interest both to the core team and to potential new contributors. We also have a stub of a user guide integrated into numberscope itself, which includes, for example, usage documentation on each Visualizer (except some are stub or missing). To satisfy these and other documentation needs, the project should adopt a framework for where documentation will be kept and how it will be organized.

I absolutely agree with the stub design that (at least a portionf of) the documentation should be available right from the Numberscope itself. So one basic question: (A) should the documentation so accessible comprise all documentation, including for example the contributing guidelines and coding style guide? Or should there be a user guide limited just to how to make nice pictures with Numberscope and maybe the theory behind the various visualizers, with more technical/code information available "somewhere else"?

The next basic question is (B) how should we capture that documentation? Should it be in the main repository itself, or (some or all of it) be in a place like a GitHub wiki? In the former case, what format should the documentation be in?

And the third question is (C) how should the documentation be provided to interested parties? Again, the answer(s) could depend on the answers to (A) and (B). For example, if some goes into a wiki, then that content would be served by GitHub's wiki feature.

Now that I've attempted to lay out the issue and its component questions objectively, I will say what my leanings are: For (A), I think this project is small enough that all documentation should be clumped together, just presented so that user-guide type stuff is more easily accessible to someone just playing with the 'scope, but with readily apparent links for those who want to dive deeper. For (B), we currently have what user guide information there is in a Vue view. While that makes (C) -- serving that information -- completely trivial, it seems to me to be a fairly cumbersome format in which to author documentation. There is also a philosophy (that I subscribe to) that documentation should be alongside the code it is documenting rather than off it a separate place, as is currently the case. The alongside-approach facilitates such things as requiring any PR that adds a Visualizer or changes the behavior of one to include the new or changed documentation. This approach splits into two main options: VisualizerDifferences.ts is documented in VisualizerDifferences.md that lives next to it in the same directory; or the documentation for VisualizerDifferences is literally extracted from content in VisualizerDifferences.ts, typically in some form of structured comments. Then documentation that does not cohere to any particular source file, like the coding guide, would be in a separate docs directory. Finally for (C), I would suggest one of the systems for collating all of the documentation in the various places (the alongside-files or extracted from the source files, together with the dedicated documentations files) and producing a nicely-formatted static website; the build/installation process for Numberscope would then simply include all of those pages in the site it produces, and the Numberscope app would have the appropriate links into that static portion. There are several mature systems out there for doing this sort of thing; I am most familiar with, and have the most experience with, the mkdocs system (https://www.mkdocs.org/), in particular mkdocs-semiliterate (http://studioinfinity.org/semiliterate/), which is the sourcefile-extraction flavor of mkdocs.

Anyhow, @liam-mulhall and/or @katestange it would be great to have your opinions on these matters. Certainly I won't do anything to move toward a documentation framework until we've reached some sort of consensus on how to proceed. Thoughts and suggestions are welcome from everyone who has access to this repository, of course!

I realized that for counterpoint I should mention at least one other documentation generator. So another example is JSDoc (https://jsdoc.app/) -- I am not so familiar with it, and am not sure how suitable it is for both a user guide and for technical/interface documentation (it seems more designed for the latter). But note that in many of the visualizers there are already some instances of JSDoc-style structured comments, so it's probably worth at least contemplating formally using JSDoc.

@gwhitney, I'm happy to use http://studioinfinity.org/semiliterate/. I think it would be good because it allows us to use the same documentation system across the repos.

Does @katestange have any opinion on the documentation framework? I am certainly not going to vote against the system that I use for all of my self-organized projects. If there is a decision to adopt semiliterate, then I (a) need to update it to the latest version of mkdocs/mkdocs-simple-plugin (already on my list, but I would bump it up in priority), and (b) would be happy to do an initial pass at setting up semiliterate and generating static documentation pages.

I've just re-read the thread here.  I will defer to those with more experience on the exact documentation framework, and would tend to trust your instincts/preference for semiliterate.  I will just point out some of my priorities, and ask if these will be served:
(1) I would like there to be copious user-friendly documentation for using the website and using the visualizers.  This should be easily findable/accessible to non-tech-savvy users and not encumbered by technical stuff mixed in too much.  So if we pull all documentation from inside the code, I'm imagining there will be long headers in the visualizer files (for example) that will just be markdown of a narrative friendly user guide that will appear before any localized code documentation for functions within the code etc.  Is my imagination correct?
(2) I would like it to be easy for writers of visualizers to document them; e.g. maybe a template and instructions are included for how to do this easily.  Whatever we choose should not make that aspect harder.
So, given these priorities, do you foresee any issues?

Absolutely. What I've been suggesting is that we use a documentation framework to create static webpages that have all of "user guide", "make your own visualizer intro", and "technical docs" in an easily navigable format, and then just serve those pages along with the visualizer app, with appropriate links from the app to those pages. The reason I like semiliterate as that framework it that it is good at extracting such documentation from arbitrary source files, so indeed, a visualizer source file can start with its "user guide" markdown (inside TypeScript comments) and then have its code, potentially interspersed with tech documentation as necessary. I think that fits your vision aka "imagination", yes?

Indeed, either the base visualizer class should serve as a template with instructions for creating and documenting a visualizer, or we can pick one actual one as the exemplary one and link to it from the general instructions.

So I don't foresee any issues. Absent any further objections, I will plan to install semiliterate and get at least stubs for all of these pieces in place, once the Vue 3 merge is complete.

Sounds great!  Thanks!

Preparing to work on this soon; just want to check that @katestange and @liam-mulhall are OK with moving all of "About", "Acknowledgments", and "Help" from being Vue components to being pages in the static doc site (linked to from the Vue app as appropriate, of course).

I'm okay with this.

I'm ok with it too.

Once the documentation system is established, we should add instructions on how to add documentation to the merge review checklist. See https://github.com/numberscope/frontscope/issues/99#issuecomment-1179869041.


Update concurrent-mode-intro.md (displaing => displaying)

Fixes a small typo. 🙂

Already fixed, but thanks for your efforts!


unit test for getWeekHeaders()

Will prevent regressions like in #1795.
Ensures that state stays immuted while executing getWeekHeaders().

@ljharb Thanks! Feels like you are always watching :)


Improve fonts

@andremw I think improving the fonts on Bitbucket would also make a great addition to this extension.
Adding a CSS file that contains the below code would significantly improve the interface.
body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif !important;
}

Let me know what you think and I can submit a PR for it.

Hi, @mrmartineau! Thanks for the suggestion. I tried it and I think it gets really nice. Feel free to go ahead and submit a PR!


Automatic deployment of Prometheus alerts

Right now, changes to our Prometheus alerts need to be deployed manually.
We should incorporate a deployment for this into GitHub actions on the main
branch such that any changes are automatically rolled out without requiring to
know the local setup.

@jb3 Do you have an idea for how best to do this? Right now I'm not even sure
how to deploy alerts to Prometheus in Kubernetes in the first place. I think
for the documentation I will make a separate issue though.

Noting to self, we can set the config map prefs to always query the apiserver for the latest changes, hence nullifying the propagation delay of changes.

I lied, this is a kubelet option, we cannot set this per configmap, we will have to do some smart in-pod detection at Prometheus that the reload has gone through.
There is however always a timestamp in the mounted directory, we just need to keep checking this timestamp (probably with a recurring kubectl exec).

/prometheus $ ls -la /opt/pydis/prometheus/alerts.d/
total 12
drwxrwsrwx    3 root     2000          4096 Apr 30 19:24 .
drwxr-xr-x    3 root     root          4096 Apr 26 21:41 ..
drwxr-sr-x    2 root     2000          4096 Apr 30 19:24 ..2024_04_30_19_24_46.1524242850
lrwxrwxrwx    1 root     2000            32 Apr 30 19:24 ..data -> ..2024_04_30_19_24_46.1524242850
lrwxrwxrwx    1 root     2000            24 Apr 26 21:39 alertmanager.yaml -> ..data/alertmanager.yaml
lrwxrwxrwx    1 root     2000            24 Apr 26 21:39 certificates.yaml -> ..data/certificates.yaml
lrwxrwxrwx    1 root     2000            19 Apr 26 21:39 coredns.yaml -> ..data/coredns.yaml
lrwxrwxrwx    1 root     2000            15 Apr 26 21:39 cpu.yaml -> ..data/cpu.yaml
lrwxrwxrwx    1 root     2000            18 Apr 26 21:39 django.yaml -> ..data/django.yaml
lrwxrwxrwx    1 root     2000            16 Apr 26 21:39 etcd.yaml -> ..data/etcd.yaml
lrwxrwxrwx    1 root     2000            16 Apr 26 21:39 jobs.yaml -> ..data/jobs.yaml
lrwxrwxrwx    1 root     2000            18 Apr 26 21:39 memory.yaml -> ..data/memory.yaml
lrwxrwxrwx    1 root     2000            17 Apr 26 21:39 nginx.yaml -> ..data/nginx.yaml
lrwxrwxrwx    1 root     2000            17 Apr 26 21:39 nodes.yaml -> ..data/nodes.yaml
lrwxrwxrwx    1 root     2000            16 Apr 26 21:39 pods.yaml -> ..data/pods.yaml
lrwxrwxrwx    1 root     2000            20 Apr 26 21:39 postgres.yaml -> ..data/postgres.yaml
lrwxrwxrwx    1 root     2000            22 Apr 26 21:39 prometheus.yaml -> ..data/prometheus.yaml
lrwxrwxrwx    1 root     2000            17 Apr 26 21:39 redis.yaml -> ..data/redis.yaml

Another related issue for a potential future feature kubernetes/kubernetes#22368

Can't we check for the git diffs when the ci runs, and if we find configmap files (that we will identify following some rule/logic), we apply them ?

Unfortunately the settling of configmap updates cannot be guaranteed on live pods during that window, it's a scheduled job on the kubelet from memory.
The Kubernetes solution is just to have a sidecar container running something like inotify or whatever the modern equivalents are and then upon detecting a change it can call out via the HTTP management API to Prometheus or (I think) send a signal to the process, I can't remember if sidecars share the same process namespace.
I'll investigate this one later today.

However, with automated reloads like this we should ensure we have an alert in case of config reload failures. We do not
have this yet, do we?

We should be able to add an alert for this yes, I'll include it when I PR this feature in. prometheus_config_last_reload_successful should handle it.


How to run sails.js application on port 80 with example?

I want to run sails.js application ny default to 80 not 1337.
My local url must be like this http://localhost not http:localhost:1337

Yeah, and yes, thanks man. D ! :)  Take Care ! :D

oh god men, so many email alerts, men. unsubscribe, men.

thanks ..am in love with sails

I want to run sails.js application ny default to 80 not 1337.
My local url must be like this http://localhost not http:localhost:1337

Run with port as an option
sails console --port 1338

try this open config/env/production.js and scroll down, find //port 80 end then, uncomment it , work well for me


fix markdown error

as title

This seems like a small (but important) contribution, so no Contribution License Agreement is required at this point. We will now review your pull request.
Thanks,
.NET Foundation Pull Request Bot

@cashwu Nice catch! Your change will go live within the next 24 hours.

@scottaddie  Thanks ! 😄


add One Sixth Form College

website: https://www.suffolkone.ac.uk/

@nextdayy Thank you for your patience while waiting for a review and processing your request. Pull request merged.