Add support for new image_name format in cluster-<provider> apps.

Newly built CAPI images will now have a new image naming format. The image name format looks like: flatcar-<flatcar channel>-<flatcar release>-kube-v<k8s version>-<build suffix> -> flatcar-stable-3815.2.2-kube-v1.26.15-gs .
If desired , provider teams can manually build old releases using the new naming format. How to instructions.
If the cluster charts need to use any newly built images, they will need to add support for the new format.
Here is a list of Cluster- apps that need support:

[ ] cluster-azure
[ ] cluster-aws
[ ] cluster-vsphere
[ ] cluster-eks
[ ] cluster-cloud-director

The image name format looks like: flatcar-<flatcar channel>-<flatcar release>-kube-v<k8s version>-<build suffix> -> flatcar-stable-3815.2.2-kube-v1.26.15-gs

Is this exactly the same for all providers?

@nprokopic this is done already right?

Sorry, missed the ping. Yeah, this has been done for cluster-aws some time ago, and now again also for the latest OS image name change.
And for the latest OS image name changes, Turtles will also handle cluster-azure change. Then the missing charts are cluster-vsphere and cluster-cloud-director (see my comment here https://github.com/giantswarm/roadmap/issues/3592#issuecomment-2273328357).

Removing my assignment as this is done for vsphere/vcd


replace Cypress with Playwright

Hey, I just made a Pull Request!
Bit of a big one. This removes more or less all traces of cypress, and switches over to using playwright instead. We didn't replace all existing test with playwright equivalents, because the majority of all existing tests were not actually run in CI.
We've been looking to move over to Playwright for quite a while, but with the recent e2e test and cypress install issues we got a bit of a kick in the butt. Ideally we would've wanted to immediately move over to a setup where we run the backend for E2E tests too, but that will have to wait for some breathing room.
The new setup runs tests from the root rather than in the app. Any package with an e2e-tests folder with be included. We do consider this setup to be somewhat experimental for now, although there's no real API surface to maintain other than the utils and what create-app looks like.
To help out with Git archaeology we've removed all existing tests in a single commit: https://github.com/backstage/backstage/commit/a07764f44accb4be271ad005a08014dd6ab499f0.
CC @backstage/discoverability-maintainers @backstage/techdocs-maintainers, let us know if you have any questions on how to restore these tests if you want to do that. For now we had to remove them all to completely get rid of the cypress install.
:heavy_check_mark: Checklist

[x] A changeset describing the change and affected packages. (more info)
[ ] Added or updated documentation
[ ] Tests for new functionality and regression tests for bug fixes
[ ] Screenshots attached (for UI changes)
[x] All your commits have a Signed-off-by line in the message. (more info)

@Rugvip is there some more thorough documentation for this decision (I'm optimistically imagining some links to issues/discussions/discord/meeting minutes)? My company runs some cypress e2e tests for our custom plugin functionality; wondering if we might encounter similar "e2e test and cypress install issues", or whether Playwright has some distinct advantages that could save us CI resources or maintenance burden? This might incentivize us to make a similar change in testing strategy.

@jamieklassen nothing public unfortunately, we tried out playwright in an internal Backstage projects after weighing alternatives, and liked the result. The original decision to use cypress in Backstage OSS wasn't particularly carefully made, it was basically what we were using internally at the time of OSS, which in turn had already been in use for a while.
As mentioned here the e2e framework isn't particularly closely tied to Backstage at all, you can really run whatever you want, we just like to provide some setup out of the box. The e2e-tests folder convention implemented here is a quite loose convention that we chose as some form of sane default, but imagine that people can chose their own there too.
If you want to be have some reasons to use Playwright, try out the --ui mode in the playwright CLI for writing and debugging tests, especially along with a dev server running on the side serving the frontend as we do for the local setup.


aws-ecs: downscope permissions required by instance draining hook

Reference to source where downscoping should happen:
<EMAIL_ADDRESS>

In all of the managed ECS policies, the resource field for the actions specified in the above link are all "Resource": [*].
For the autoscaling permissions in particular, the required resource for CompleteLifecycleAction (according in the IAM docs ) is an autoscaling group, and if I'm understanding it, the policy won't work if the resource is not compatible with the required ones. All this to say, I think that the way the policy is defined in the Lambda should be fine, but feel free to clarify if I'm missing something.

Probably: asg:CompleteLifeCycleAction will need ASG ARN? And the ecs calls need the ClusterArn?
Describe calls can stay at resource-* for all I care.

This can be resolved.


Uncaught TypeError: serialport.list is not a function

Description

Exception occurs when uploading. Verifying and Building works fine.
Versions
Atom: 1.60.0 x64
Electron: 9.4.4
OS: Microsoft Windows 10 Pro
Thrown From: arduino-upload package 1.8.0
Stack Trace
Uncaught TypeError: serialport.list is not a function
At D:\Users\Joe Mar\.atom\packages\arduino-upload\lib\arduino-upload.coffee:271

TypeError: serialport.list is not a function
    at Object._getPort (/packages/arduino-upload/lib/arduino-upload.coffee:271:14)
    at /packages/arduino-upload/lib/arduino-upload.coffee:296:5)
    at /packages/arduino-upload/node_modules/usb-detection/index.js:48:15

Commands
     -3:40.2.0 arduino-upload:build (input.hidden-input)
     -3:40.2.0 window:save-all (atom-text-editor.editor.has-selection.is-focused)
     -3:30.1.0 arduino-upload:upload (input.hidden-input)
     -1:16 intentions:highlight (input.hidden-input)
     -1:15.6.0 command-palette:toggle (input.hidden-input)
     -1:14 editor:consolidate-selections (input.hidden-input)
     -1:14 core:cancel (input.hidden-input)
     -1:13.3.0 intentions:highlight (input.hidden-input)
     -1:13 command-palette:toggle (input.hidden-input)
     -1:09.8.0 core:move-down (input.hidden-input)
     -1:08.9.0 core:confirm (input.hidden-input)
     -1:08.9.0 settings-view:install-packages-and-themes (input.hidden-input)
     -0:15.3.0 command-palette:toggle (div.package-readme.native-key-bindings)
  3x -0:12.7.0 core:move-down (input.hidden-input)
     -0:10.4.0 core:confirm (input.hidden-input)
     -0:10.4.0 arduino-upload:serial-monitor (div.package-readme.native-key-bindings)

Non-Core Packages
arduino-upload 1.8.0
atom-beautify 0.33.4
atom-ice-syntax 1.0.2
atom-ice-ui 1.0.0
atom-pronama-chan 1.1.1
busy-signal 2.0.1
editor-background 1.2.42
flex-tool-bar 2.2.7
intentions 2.1.1
language-arduino 0.4.3
language-ino 0.2.0
linter 3.4.0
linter-gcc 0.9.0
linter-ui-default 3.4.1
outrun-syntax 0.2.2
synthwave-syntax 0.3.0
tool-bar 1.4.4

I have the same problem. I have tried installing an old versión of Atom, an old version of Node.js, and also I have tried installing the new versions of both and some combinations of old and new versions too, but I never got succed.
This problem became after updating Atom.
I have read the Node documentation about the serialport package from serialport.io and it seems to be well implemented in the arduino-upload\lib\arduino-upload.coffee file at line 271, even so, it doesn´t works. Maybe, it could be an object issue, because of the at Object._getPort related line.
Also I've tried using that serialport package from command line and it works fine, but if I try to installing it again I get some errors due to version incompatibility. So, I'm little confused.
I hope someone can resolve this issue or explain what one can do to solve it.
Thanks!


Add a "ConnectInstruction" type to further abstract out connection parsing

Not 100% happy with how this is done, would love suggestions. The point is to take a ParsedDisplay and convert it into one of:

A hostname and port to connect to over TCP.
A path to connect to over a Unix socket, with a port to use as a backup.

Not 100% happy with how this is done,

Okay, let's see... There are three cases:

"Only TCP"
"Only Unix"
"Try Unix and if that does not work, try TCP"

My first reaction was to have some iterator, but that would be overkill, I think.
How about something like this instead:
/// Targets for connecting to an X11 server.
///
/// The members of this struct should be tried in order. The first target to which a connection could be established should be used. The priority order is: First try a unix socket connection, then a TCP socket. Entries which are `None` should be ignored.
struct ConnectTargets<'a> {
    pub unix: Option<PathBuf>,
    pub tcp: Option<(&'a str, u16)>,
}

I am also not quite sure whether the code in this PR is exactly equivalent to the old code (there might have been a possibility to end up in an error after no connection attempt at all), but I don't want to think too much about this since it will most likely never be important anyway.
What do you think about making ParsedDisplay non-pub? Instead of first creating a ParsedDisplay and then getting the connect targets for that, one could directly produce the connect targets. This is just a quick thought and I am not sure whether I would like the result. Given that I do not have much time to think about this right now, I am just leaving the idea here and see what others think.

My first reaction was to have some iterator, but that would be overkill, I think.

I think an iterator is the best option, actually. If we ever want to add more cases in the future, we can add them very easily without breaking things.

What do you think about making ParsedDisplay non-pub? Instead of first creating a ParsedDisplay and then getting the connect targets for that, one could directly produce the connect targets.

Is ParsedDisplay ever used for anything outside of an implementation detail for connections? If not, then I'm good with this. The only issue is that ConnectInstruction borrows ParsedDisplay for its function, but that can be worked around by having it own the ParsedDisplay instead.

I guess we could redo DefaultStream so that it takes ConnectInstruction instead of its current parameters. What are your opinions?

Yup. Actually, it could just a single "Connect instruction" and either connect to that or fail. The iteration over all the possible connect instruction could then be driven outside of that.

What do you think about something like this?
diff --git a/x11rb-protocol/src/parse_display.rs b/x11rb-protocol/src/parse_display.rs
index e150b0c..973f876 100644
--- a/x11rb-protocol/src/parse_display.rs
+++ b/x11rb-protocol/src/parse_display.rs
@@ -20,6 +20,40 @@ pub struct ParsedDisplay {
     pub screen: u16,
 }

+pub enum ConnectTarget<'a> {
+    Tcp(&'a str, u16),
+    Unix(PathBuf),
+}
+
+use std::path::PathBuf;
+impl ParsedDisplay {
+    pub fn connect_targets<'a>(&'a self) -> impl Iterator<Item=ConnectTarget<'a>> + 'a {
+        const TCP_PORT_BASE: u16 = 6000;
+        let ParsedDisplay { host, protocol, display, .. } = self;
+
+        let mut targets = Vec::new();
+
+        if (protocol.is_none() || protocol.as_deref() != Some("unix")) && !host.is_empty() && host != "unix" {
+            targets.push(ConnectTarget::Tcp(host, TCP_PORT_BASE + display));
+        } else {
+            // On non-unix, this variable is not mutated.
+            if protocol.is_none() || protocol.as_deref() == Some("unix") {
+                let file_name = format!("/tmp/.X11-unix/X{}", display);
+                targets.push(ConnectTarget::Unix(file_name.into()));
+
+                // TODO: Try abstract socket (file name with prepended '\0')
+                // Not supported on Rust right now: https://github.com/rust-lang/rust/issues/42048
+            }
+
+            if protocol.is_none() && host.is_empty() {
+                targets.push(ConnectTarget::Tcp("localhost", TCP_PORT_BASE + display));
+            }
+        }
+
+        targets.into_iter()
+    }
+}
+
 /// Parse an X11 display string.
 ///
 /// If `dpy_name` is `None`, the display is parsed from the environment variable `DISPLAY`.

Yes, there is the extra memory allocation for the Vec, but it's so much fewer code. And it is basically just copy&paste from the existing code, so likely to do the same thing as before.
If ParsedDisplay is removed from the API, one just need to replace ConnectTarget::Tcp(&'a, str, u16) with (String, u16). That might require an extra allocation "localhost".to_string(), but I am not too worried about that.

I like that idea; impl Iterator leaves plenty of room left over for expansion in the future.


support Java 22

Java 22 adds JEP 454 and is needed to (eventually) deprecate the JNI code.

Pull Request Test Coverage Report for Build #392
Details

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 98.805%

Totals

Change from base Build #391:
0.0%

Covered Lines:
496

Relevant Lines:
502

💛  - Coveralls

Pull Request Test Coverage Report for Build #394
Details

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 98.805%

Totals

Change from base Build #391:
0.0%

Covered Lines:
496

Relevant Lines:
502

💛  - Coveralls

Pull Request Test Coverage Report for Build #395
Details

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 98.805%

Totals

Change from base Build #391:
0.0%

Covered Lines:
496

Relevant Lines:
502

💛  - Coveralls

Pull Request Test Coverage Report for Build #408
Details

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 98.805%

Totals

Change from base Build #407:
0.0%

Covered Lines:
496

Relevant Lines:
502

💛  - Coveralls


libs/libcap: Provide host toolchain

This was needed for me in order to get cross-compilation to work, otherwise it would fail with an error message about an exec format error in one of the tools used while building.
Also, upgrade to 2.64 whilst we're at it.

Thanks.


Upload Photos and Sounds before ObservationPhotos and ObservationSounds

On the web, we upload these records immediately when people drag them into the Uploader, and they become Photo and Sound records on the server that are, at least temporarily not connected to any observations, taxa, or whatever. This means that when we create the observation we can do so after having uploaded the large media files and decrease the likelihood that an observation will get created before it has any media.
As of https://github.com/inaturalist/iNaturalistAPI/commit/b5530fb6a0f24eda0cd933976918719e9d2bf805, this should be possible with API v2:

[ ] When uploading an observation, use POST /v2/photos or POST /v2/sounds to upload media before creating the Observation, ObservationPhoto, or ObservationSound records
[ ] When requesting POST /v2/observation_photos, just include the photo_id of the instead of the photo file
[ ] Same with sounds

@budowski can you make a pull request for this if it's ready for review?

Sorry about that - I merged from latest main branch and created PR #395


Add sub-packages to setup.py, ignore build dir

The sub-packages were not included when building/installing via setup.py.

Somehow I missed this PR and not Git can't merge it. Do you want to update the changes so that the merge can happen?

I think I've messed up my local repo, will send a new pull request ...


let applicationwindow accept anything implementing Application

As mentioned in gtk-rs/gtk#658, gtk::ApplicationWindow should accept anything that IsAgtk::Application.

Sounds good to me. @sdroege, @EPashkin is it good if I merge this one while we try to fix the issue in gir?

@EPashkin Do you know why it's generated wrong?

@sdroege Currently don't know, will check after done with OsString


Split Updater into logical components: bundle metadata

I think this the right time to try splitting the Updater functionality into meaningful components -- the Metadata API does a good bit of that already but I think Updater is still going to be too large and should be split if possible  (and I think it is possible, also tuf-on-a-plane has some useful ideas). Listing some Updater functionality below for inspiration:

implement the TUF update process in a way that is easy to follow and verify
keep track of currently valid set of metadata, verify new metadata
read/write local metadata files
traverse target delegation tree
download metadata/target files, while handling mirrors

To me tracking the currently valid set of metadata is one potentially separate thing here: an object could hold the currently valid set of metadata (and verify new metadata and maybe handle reading/writing the local metadata cache) without knowing about all the steps that the TUF spec requires or about the API that Updater wants to provide. Maybe this leads to most code being in the metadata handler but this might be worth testing -- it's also something a bit like what @trishankatdatadog did in tuf-on-a-plane (Repository vs models,writers,readers).
Originally posted by @jku in https://github.com/theupdateframework/tuf/issues/1291#issuecomment-792612877

To be fixed by #1355

Closing:

MetadataBundle is merged (if not quite in use yet)
download handling is a lot better separated now that mirrors are gone

Further changes in components can be done incrementally:

maybe we want to separate Updater and target caching
maybe we want to separate graph traversal and the Updater


fix to nested drawer issue

This is a minor bug fix to address a nested drawer issue referenced here: #1261 caused by changes from https://github.com/react-community/react-navigation/commit/2dc869fedd27d304c2f0ddd606761320b8bec923.
The issue was caused when you had nested drawer navigators and tried to open the parent navigator.  Instead, the child navigator would open.  This fix checks to see if action.routeName is equal to 'DrawerOpen' or 'DrawerClose' before handling child routers.
This is my first pull request ever, so I apologize if something is not quite right.

cc @grabbou

I agree with @satya164. This may be the desired behavior for the drawer, so lets override this behavior in the drawer navigator rather than customizing the stack router.

closing because inactive and also https://github.com/react-navigation/react-navigation/issues/1261#issuecomment-363915547


[Feature] Set concept discount

Se agrega la posibilidad de setear un concept en el objeto Discount para comunicar el owner del descuento.

[ ] Coverage > 90%
[x] Android Lint check
[x] Code Style checked

Codecov Report

Merging #468 into release/3.0.0 will decrease coverage by 0.01%.
The diff coverage is 0%.

@@               Coverage Diff                @@
##           release/3.0.0    #468      +/-   ##
================================================
- Coverage           8.15%   8.14%   -0.02%
================================================
  Files                193     193
  Lines              14435   14455      +20
  Branches            1245    1244       -1
================================================
  Hits                1177    1177
- Misses             13123   13143      +20
  Partials             135     135

Impacted Files
Coverage Δ

...opago/uicontrollers/discounts/DiscountRowView.java
0% <0%> (ø)
:white_check_mark:

...ontrollers/reviewandconfirm/ReviewSummaryView.java
0% <0%> (ø)
:white_check_mark:

.../src/main/java/com/mercadopago/model/Discount.java
3.7% <0%> (-0.47%)
:x:

Continue to review full report at Codecov.

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


Support Shade Boxes in preview

Shade boxes are now supported. Documentation and examples:
https://experienceleague.adobe.com/docs/authoring-guide-exl/using/markdown/syntax-style-guide.html?lang=en#shade-boxes
Support in preview.

Shadeboxes are fully supported now.


load: ignore dependency fields with extends

When using extends, clear any dependency fields on the base service before merging.
See:

docker/compose#10905

Draft until we determine what behavior is actually desirable.

:+1 This indeed need to be addressed
IMHO we should not silently ignore incompatible attributes. Either return an error (the compose v1 way) or warn user those are ignored

IHMO we should let the user extends a services with dependencies without backporting the original configuration, this way users will be able to redifine the same or new dependencies.
An error message will blocked them from extending the service.

@glours I'm worried we silently remove stuff from a service and user isn't warned, then will complain
this limitation was in place in compose v1 and AFAICT nobody complained :)

@ndeloof I was updating my message when you answered, for me we should warn the user that the original configuration won't apply in this cases

Perhaps we should change the docs for now? I personally uses it as well.


Timer trigger sample

The binding reference doc for Timer trigger - https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-timer#example is missing a Python example.
/cc @ggailey777

Addressed in this PR - https://github.com/MicrosoftDocs/azure-docs-pr/pull/78522


PLAT-7603 - Updated chart

Bump chart version to 0.7.2

Nov 16, 2023
 View reviewed changes

@fraenkel The problem is that it didn't happen in #123. If it's preferred that I close this and someone look into why it wasn't versioned at merge-to-main, I will do that.


Xamarin.UITest needs to add a Json Reader max depth option for the 'tree' command

In the release notes for Xamarin.UITest 3.2.9 it is mentioned that the Newtonsoft.Json dependency was updated to 13.0.1. That version of Newtonsoft.Json includes a change that set the default max depth for JsonReader to 64. Thus, when running the tree command in the Repl tool on any pages that are complex, the Repl tool will crash with the following error:
Execution failed with exception: Newtonsoft.Json.JsonReaderException: The reader's MaxDepth of 64 has been exceeded. Path 'children[0].children[0].children[1].children[0].children[0].children[0].children[0].children[0].children[0].children[0].children[0].children[3].children[1].children[0].children[0].children[0].children[0].children[0].children[0].children[0].children[20].children[0].children[1].children[0].children[0].children[0].children[1].children[0].children[0].children[0].children[0].children[0]', line 1, position 295850.
  at Newtonsoft.Json.JsonReader.Push (Newtonsoft.Json.JsonContainerType value) [0x000ae] in <fc47713d38304ab4bd4c89ea6e9ead4b>:0
  at Newtonsoft.Json.JsonReader.SetToken (Newtonsoft.Json.JsonToken newToken, System.Object value, System.Boolean updateIndex) [0x00062] in <fc47713d38304ab4bd4c89ea6e9ead4b>:0
  at Newtonsoft.Json.JsonReader.SetToken (Newtonsoft.Json.JsonToken newToken) [0x00000] in <fc47713d38304ab4bd4c89ea6e9ead4b>:0
  at Newtonsoft.Json.JsonTextReader.ParseValue () [0x001f2] in <fc47713d38304ab4bd4c89ea6e9ead4b>:0
  at Newtonsoft.Json.JsonTextReader.Read () [0x0004c] in <fc47713d38304ab4bd4c89ea6e9ead4b>:0
  at Newtonsoft.Json.JsonReader.ReadAndMoveToContent () [0x00000] in <fc47713d38304ab4bd4c89ea6e9ead4b>:0
  at Newtonsoft.Json.JsonReader.ReadForType (Newtonsoft.Json.Serialization.JsonContract contract, System.Boolean hasConverter) [0x0004a] in <fc47713d38304ab4bd4c89ea6e9ead4b>:0
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList.......

As it stands now, Xamarin.UITest version 3.2.9's Repl tool is largely unusable because using the 'tree' command on any complex pages will result in the Repl tool crashing. Please add some option for us to pass in a maximum depth for the tree command or up the maximum depth for the reader to something larger as suggested here:
https://stackoverflow.com/questions/68576787/newtonsoft-getting-the-readers-maxdepth-of-64-has-been-exceeded-error-while

Hi @rory-bloomerang and thanks for contact us. This bug has been fixed here and will be in the next release of Xamarin.UITest.

Thank you!


node_id or store_id in SHOW EXPERIMENTAL_RANGES

The documentation for SHOW EXPERIMENTAL_RANGES says that the output contains node IDs.

Which nodes contain the range replicas

https://www.cockroachlabs.com/docs/v2.1/show-experimental-ranges.html
However, I've observed that the "replicas" column actually outputs store IDs, not node IDs. I've observed this on both cockroach v2.0 and v2.1. It is probably also present on newer versions, haven't checked though.
Is this a bug in the documentation or in the SQL command?
To Reproduce
Create a cluster which has some nodes whose store IDs do not match their node IDs. Create some tables. Run show experimental ranges. Compare the "replicas" column in output with that of the range report (from admin UI).

Thanks, @neeral and @petermattis. I'll transfer this issue to our docs repo.


Fix docs, allow dumps for specific path only

Expand README.md with detailed info how to use it.
Allow dumping only certain path from vault, useful if your policy does not allow viewing everything.

Thank you!


feat(git-clone): add ability to recurse submodules

I'm currently writing a Coder template for a project that needs submodules to be cloned.
With the git CLI you'd use git clone --recurse-submodules but there's no such option with the current module.
I think a recurse_submodule = true variable would be adequate.
If I get the time, I will submit a PR :-)

Probably also good to expose --jobs=<n> flag to speed up cloning submodules.


More use of file functions plus a couple of fixes

More file function usage
push was not asking to enable notifications due to refactor
agreement edit was a little wonky

Codecov Report

Merging #3626 (f60d17e) into development (3eb6ae6) will decrease coverage by 8.01%.
The diff coverage is 12.69%.

@@                Coverage Diff                @@
##             development    #3626      +/-   ##
=================================================
- Coverage          30.61%   22.59%   -8.02%
+ Complexity         15931    15749     -182
=================================================
  Files                429      404      -25
  Lines              74312    68499    -5813
=================================================
- Hits               22752    15480    -7272
- Misses             51560    53019    +1459

Impacted Files
Coverage Δ

sources/ElkArte/AdminController/CoreFeatures.php
21.55% <0.00%> (-2.47%)
:arrow_down:

...rces/ElkArte/AdminController/ManageAttachments.php
9.67% <0.00%> (+0.12%)
:arrow_up:

...rces/ElkArte/AdminController/ManageEmojiModule.php
0.00% <0.00%> (ø)

...ources/ElkArte/AdminController/ManageLanguages.php
6.55% <0.00%> (-0.08%)
:arrow_down:

...ces/ElkArte/AdminController/ManageRegistration.php
5.39% <0.00%> (-0.41%)
:arrow_down:

sources/ElkArte/AdminController/ManageSearch.php
4.42% <0.00%> (-0.29%)
:arrow_down:

sources/ElkArte/Agreement.php
0.00% <0.00%> (-54.88%)
:arrow_down:

sources/ElkArte/AttachmentsDirectory.php
9.55% <0.00%> (-0.62%)
:arrow_down:

sources/ElkArte/AttachmentsDisplay.php
0.00% <0.00%> (ø)

sources/ElkArte/Cache/Cache.php
38.16% <0.00%> (-19.30%)
:arrow_down:

... and 337 more

Continue to review full report at Codecov.

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


docs(cloud-rad): move comments for TSDoc

TSDoc expects comments before the first overloaded function.
See b/190631834

@fhinkel do you have a script that will remove all the documentation from the last definition (after we've fully migrated)? or will that be manual work for us?
@ddelgrosso1 fyi: this duplicates all the documentation due to differences in TSDoc (cloud rad) and JSDoc (googleapis.dev documentation). For cloud-rad, the comments for overloaded functions are moved from the last definition to the first. See https://b.corp.google.com/issues/190631834

Mostly manual work. Feel free to assign that to me.

Synced with @fhinkel offline. We will wait to merge this as a last step and remove the documentation before the last function in this same PR.

This is ready for review. Please have a look at the docs generated from this PR: https://cloud.google.com/nodejs/docs/reference/storage/latest

DO NOT MERGE without reverting the changes for systems-tests back to normal.

@tbpg closing this for now. please re-open when resuming work on this project.


cmd/compile: identical generic types compare unequal

commit 8e3d5f0bb324eebb92cc93264a63afa7ded9ab9a
This bug was found by @FiloSottile in https://go-review.googlesource.com/c/go/+/360015.
Here's a smaller testscript reproducer:
go run ./pkg1

-- go.mod --
module m

go 1.18
-- pkg1/main.go --
package main

import (
	"fmt"
	"os"
	"reflect"

	"m/pkg2"
	"m/pkg3"
)

func main() {
	i1 := pkg3.GetI()
	i2 := pkg2.Inst
	instEqual := i1 == i2
	if !instEqual {
		v1, v2 := reflect.ValueOf(i1), reflect.ValueOf(i2)
		ptrEqual := v1.Pointer() == v2.Pointer()
		typeEqual := v1.Type() == v2.Type()
		if !ptrEqual {
			fmt.Printf("pointer values are unequal\n")
		}
		if !typeEqual {
			fmt.Printf("types are not equal\n\t%v\n\t%v\n", v1.Type(), v2.Type())
		}
		os.Exit(1)
	}
}

-- pkg2/x.go --
package pkg2

import "m/pkg3"

var Inst = pkg3.GetI()

-- pkg3/x.go --
package pkg3

type I interface{}

type impl[P any] struct{
	_ byte
}

var instance = &impl[int]{}

func GetI() I {
	return instance
}

Running this prints the following:
> go run ./pkg1
[stdout]
types are not equal
	*pkg3.impl[int]
	*pkg3.impl[int]

[stderr]
exit status 1

The values are not equal when they should be. The pointer values are identical but the types are not.

is this the same as #49241 ?

I think it's the same issue, but @rogpeppe wrote a minimal reproducer, so perhaps this is still useful. cc @randall77 @griesemer

Yep, merging into #49241 which has more discussion, but thank you @rogpeppe for preparing a much better issue and reproducer.


Feature Suggestion: Multiple Computers for a user

I have a desktop and laptop. For the most part there's a commonality. But things that come to mind:

different computer name
the ability to install different software (e.g. my MBP has music software installed for connecting to my MIDI controller and music editing).

How possible is tweaking things this way? How to determine? Perhaps a prompt if a given user has multiple computers? Or IP address?

Closing this. :)


Feature request: configurable 'this' context

Thanks for the great little library!
I've been trying to integrate it into some of my work and found that I missing the ability to set 'this' on the generator passed to CAF. So far I've been just using bind on the generator to get around things, but I think things could be improved if CAF allowed a way of setting the bound context.
For an example on my use case:
class JobRunner {
  constructor(fooService) {
    this.fooService = fooService;

    // ***  pass in new options with context? ***
    this._runner = CAF(this.run, { context: this });
  }

  *run(signal, ...params ) {
    // do stuff in the generator but still allowed to use 'this' context of the owning class
  }

  add(...params) {
    const token = new CAF.cancelToken();
    const result = this._runner(token.signal, ...params);
    return { token, result };
  }
}

So you're saying:
x = CAF(someobj.method, { context: someobj });

...instead of:
x = CAF(someobj.method.bind(someobj));

Did I miss something?

Correct.
Using bind creates a new wrapping generator (and requires other support in older browsers)
someobj.method.bind(someobj)

whereas if you could pass in the context then CAF calls the generator function it could just set the context directly like this on line 194
gen.apply(context, args)

oh I didn't realize you could bind the context to the return runner! Didn't know if that would be safe in case the library tried to use 'this' at all for any of its own stuff.
But ya that'll totally work for me. Thanks


grpc: 1.17.0 -> 1.17.2

Semi-automatic update generated by https://github.com/ryantm/nixpkgs-update tools. This update was made based on information from https://repology.org/metapackage/grpc/versions.
meta.description for grpc is: '"The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)"'.
Release on GitHub
Compare changes on GitHub

Checks done (click to expand)

built on NixOS
Warning: no invocation of /nix/store/m2b9ilcd20n2xfm0rqxgisf7pav85hhl-grpc-1.17.2/bin/grpc_cpp_plugin had a zero exit code or showed the expected version
Warning: no invocation of /nix/store/m2b9ilcd20n2xfm0rqxgisf7pav85hhl-grpc-1.17.2/bin/grpc_csharp_plugin had a zero exit code or showed the expected version
Warning: no invocation of /nix/store/m2b9ilcd20n2xfm0rqxgisf7pav85hhl-grpc-1.17.2/bin/grpc_node_plugin had a zero exit code or showed the expected version
Warning: no invocation of /nix/store/m2b9ilcd20n2xfm0rqxgisf7pav85hhl-grpc-1.17.2/bin/grpc_objective_c_plugin had a zero exit code or showed the expected version
Warning: no invocation of /nix/store/m2b9ilcd20n2xfm0rqxgisf7pav85hhl-grpc-1.17.2/bin/grpc_php_plugin had a zero exit code or showed the expected version
Warning: no invocation of /nix/store/m2b9ilcd20n2xfm0rqxgisf7pav85hhl-grpc-1.17.2/bin/grpc_python_plugin had a zero exit code or showed the expected version
Warning: no invocation of /nix/store/m2b9ilcd20n2xfm0rqxgisf7pav85hhl-grpc-1.17.2/bin/grpc_ruby_plugin had a zero exit code or showed the expected version
0 of 7 passed binary check by having a zero exit code.
0 of 7 passed binary check by having the new version present in output.
directory tree listing: https://gist.github.com/5af5628d0c4952ee8f52ded38121aaee
du listing: https://gist.github.com/5c3c7ad791911a076b89a497afadb8eb

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

1 total rebuild path(s)
1 package rebuild(s)
1 x86_64-linux rebuild(s)
0 i686-linux rebuild(s)
0 x86_64-darwin rebuild(s)
0 aarch64-linux rebuild(s)
First fifty rebuilds by attrpath
grpc

Instructions to test this update (click to expand)

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

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

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

cc @lnl7 for testing.

@GrahamcOfBorg eval


Calculating hashcode of IntRange by pairing function

https://issues.apache.org/jira/browse/GROOVY-7834?jql=project %3D GROOVY AND id %3D GROOVY-7834

Now calculating hash code of IntRange by taking only upper and lower bounds into consideration. This means that two IntRanges with same lower and upper bounds have same hash code irrespective of the step. will that be a problem? should i also consider the step during calculation?

This is way faster than iterating through whole collection.

I think this would work ok.  Since step is not used in equals(IntRange) I don't think it needs to be considered.  Not much harm in returning the same hashCode for non-equal objects, as long as the same hashCode is returned when two IntRange's are equal(IntRange) it should be ok.

Agreed that step isn't a problem. I would have expected that one of reverse or inclusive would have impacted something but looking into it, I don't think they do, so I think the change is all good. I'll have to think a bit more about test coverage but +1 from me in any case. If someone gets around to committing before I get some more time to think about what else might be required, I can always add more after the fact.

PR merged, thanks!


[DOC] Updating Zero-ETL data source

Description
In 2.16 we have migrated the original S3 and Prometheus data source in dashboards observability into Dashboards management section of OSD core. This created an unified experience with opensearch connection data source. In addition, it also start supporting MDS features and allow users to view + edit an datasource from a remote cluster when the MDS feature flag is enabled (data_source.enabled: true).
UI flow changes
Before 2.16.0 - Current experience in dashboards observability
At the left side menu, user can see the option for access into the Zero-ETL data source:

For the data connection page it only supports the management of connections that is from local cluster

For the creation flow, we have a tab for creating S3/Prometheus data sources

After 2.16.0 - Unified experience with Multiple data sources in Dashboards Management
After the migration in version 2.16.0, we have unregistered the old data source option from the left side menu, and right now user should be able to access their data source management page from Dashboards managment --> Data sources

MDS disabled - data_source.enabled: false
when user has their MDS flag disabled, from the data sources management page, it will only show the Zero-ETL data sources from the local cluster

For the creation flow, by clicking the button Create data source connection at the top right, it will pop up the card view as creation options

MDS enabled - data_source.enabled: true
After the enabling of the MDS, at the data source management page, user should be able to see both "OpenSearch connections" tab for letting user to manage their remote cluster connections and the "Direct query connections" tab for manage their Zero-ETL data sources.

For the "Direct query connections" tab, it adds a cluster picker for the remote cluster selection, so that user should be able to view and manage their Zero ETL data connections for their remote cluster
https://github.com/user-attachments/assets/e32e9087-1644-4b04-9ff7-ffe7a31998e0
For the creation flow's card view, user should be able to see the creating option for OpenSearch connections

[x] Request a change to existing documentation
[ ] Add new documentation
[ ] Report a technical problem with the documentation
[ ] Other

References

https://github.com/opensearch-project/OpenSearch-Dashboards/pull/7143
https://github.com/opensearch-project/OpenSearch-Dashboards/pull/7323
https://github.com/opensearch-project/OpenSearch-Dashboards/pull/7461

@RyanL1997: would it make sense to add these new flow additions to PR #7800?

@RyanL1997 Am I correct in assuming all MDS connections are listed under "OpenSearch connections" and all Zero-ETL are under "Direct Query connections"? If not can you elaborate on the difference please

@RyanL1997: Also, is the Zero-ETL view behind a feature flag or just MDS?

@RyanL1997 Have you created a doc PR for this feature? Do you want to update the existing documentation (https://opensearch.org/docs/latest/dashboards/management/data-sources/)?


statefulsets.apps "oathkeeper" not found

Bug Description
On startup, the charm is stuck in
Unit     Workload  Agent      Address       Ports  Message
ok/0*    waiting   executing  <IP_ADDRESS>         Waiting for Oathkeeper service

To Reproduce
I deployed the following bundle:
bundle: kubernetes
applications:
  ok:
    # From https://github.com/canonical/oathkeeper-operator
    charm: ./oathkeeper-operator/oathkeeper_ubuntu-22.04-amd64.charm
    scale: 1
    trust: true
    resources:
      oci-image: "ghcr.io/canonical/oathkeeper:0.40.6"
  trfk:
    # From https://github.com/canonical/traefik-k8s-operator/pull/275
    charm: ./traefik-k8s-operator/traefik-k8s_ubuntu-20.04-amd64.charm
    series: focal
    scale: 1
    trust: true
    resources:
      traefik-image: "docker.io/ubuntu/traefik:2-22.04"
  zinc:
    # From https://github.com/natalian98/zinc-k8s-operator/tree/test-proxy-interfaces
    charm: ./zinc-k8s-operator/zinc-k8s_ubuntu-22.04-amd64.charm
    scale: 1
    trust: true
    resources:
      zinc-image: "ghcr.io/jnsgruk/zinc:0.4.9"
relations:
- - ok:forward-auth
  - trfk:experimental-forward-auth
- - ok:auth-proxy
  - zinc:auth-proxy
- - zinc:ingress
  - trfk:ingress

Environment
Juju 3.1.6.
Relevant log output
unit-ok-0: 14:55:12.963 ERROR unit.ok/0.juju-log Uncaught exception while in charm code:
Traceback (most recent call last):
  File "/var/lib/juju/agents/unit-ok-0/charm/venv/lightkube/core/generic_client.py", line 188, in raise_for_status
    resp.raise_for_status()
  File "/var/lib/juju/agents/unit-ok-0/charm/venv/httpx/_models.py", line 758, in raise_for_status
    raise HTTPStatusError(message, request=request, response=self)
httpx.HTTPStatusError: Client error '404 Not Found' for url 'https://<IP_ADDRESS>/apis/apps/v1/namespaces/auth2/statefulsets/oathkeeper?fieldManager=ok'
For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/var/lib/juju/agents/unit-ok-0/charm/./src/charm.py", line 555, in <module>
    main(OathkeeperCharm)
  File "/var/lib/juju/agents/unit-ok-0/charm/venv/ops/main.py", line 436, in main
    _emit_charm_event(charm, dispatcher.event_name)
  File "/var/lib/juju/agents/unit-ok-0/charm/venv/ops/main.py", line 144, in _emit_charm_event
    event_to_emit.emit(*args, **kwargs)
  File "/var/lib/juju/agents/unit-ok-0/charm/venv/ops/framework.py", line 340, in emit
    framework._emit(event)
  File "/var/lib/juju/agents/unit-ok-0/charm/venv/ops/framework.py", line 842, in _emit
    self._reemit(event_path)
  File "/var/lib/juju/agents/unit-ok-0/charm/venv/ops/framework.py", line 931, in _reemit
    custom_handler(event)
  File "/var/lib/juju/agents/unit-ok-0/charm/./src/charm.py", line 329, in _on_oathkeeper_pebble_ready
    self._patch_statefulset()
  File "/var/lib/juju/agents/unit-ok-0/charm/./src/charm.py", line 318, in _patch_statefulset
    self.client.patch(StatefulSet, name=self.meta.name, namespace=self.model.name, obj=patch)
  File "/var/lib/juju/agents/unit-ok-0/charm/venv/lightkube/core/client.py", line 325, in patch
    return self._client.request("patch", res=res, name=name, namespace=namespace, obj=obj,
  File "/var/lib/juju/agents/unit-ok-0/charm/venv/lightkube/core/generic_client.py", line 245, in request
    return self.handle_response(method, resp, br)
  File "/var/lib/juju/agents/unit-ok-0/charm/venv/lightkube/core/generic_client.py", line 196, in handle_response
    self.raise_for_status(resp)
  File "/var/lib/juju/agents/unit-ok-0/charm/venv/lightkube/core/generic_client.py", line 190, in raise_for_status
    raise transform_exception(e)
lightkube.core.exceptions.ApiError: statefulsets.apps "oathkeeper" not found
unit-ok-0: 14:55:13.190 ERROR juju.worker.uniter.operation hook "oathkeeper-pebble-ready" (via hook dispatching script: dispatch) failed: exit status 1
unit-ok-0: 14:55:13.191 ERROR juju.worker.uniter pebble poll failed for container "oathkeeper": failed to send pebble-ready event: hook failed

Additional context
https://github.com/canonical/traefik-k8s-operator/pull/275

Hi @sed-i,
thanks for taking the time to report this issue.
The charm was trying to patch a statefulset with a wrong name - ops.CharmMeta.name, which appears not to be the juju charm name as stated in the docs. So it was trying to patch a statefulset named oathkeeper instead of the ok alias you gave it.
It will be fixed by https://github.com/canonical/oathkeeper-operator/pull/41.
Thanks!


pipenv: handle installs with missing system deps

Raise a DependencyFileNotResolvable error when pipenv fails to install
dependencies require missing system level dependenceis.
The error message parsing is pretty gnarly as the only reference of the
offending dependency is in a tmp build path in the error message.
In the test case pipenv failed to install rtree because it requires a
system level dependency: libspatialindex.
We don't want to install this in our ever growning dockerfile so attempt
to explain the error to users.
The underlying cause might be obscured by this open issue in pipenv:
https://github.com/pypa/pipenv/issues/2791
Similarly, there's an open issue to fix the system requirement in rtree:
https://github.com/Toblerity/rtree/issues/147
This is the error pipenv raises:
pipenv.patched.notpip._internal.exceptions.InstallationError: Command "python setup.py egg_info" failed with error code 1 in /tmp/tmp8jk2atvgbuild/rtree/
File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/resolver.py", line 126, in <module>
    main()
  File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/resolver.py", line 118, in main
    _main(parsed.pre, parsed.clear, parsed.verbose, parsed.system,
  File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/resolver.py", line 78, in _main
    results = resolve(
  File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/resolver.py", line 61, in resolve
    return resolve_deps(
  File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/utils.py", line 718, in resolve_deps
    resolved_tree, hashes, markers_lookup, resolver = actually_resolve_deps(
  File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/utils.py", line 480, in actually_resolve_deps
    resolved_tree = resolver.resolve()
  File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/utils.py", line 385, in resolve
    results = self.resolver.resolve(max_rounds=environments.PIPENV_MAX_ROUNDS)
  File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/patched/piptools/resolver.py", line 102, in resolve
    has_changed, best_matches = self._resolve_one_round()
  File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/patched/piptools/resolver.py", line 206, in _resolve_one_round
    for dep in self._iter_dependencies(best_match):
  File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/patched/piptools/resolver.py", line 301, in _iter_dependencies
    dependencies = self.repository.get_dependencies(ireq)
  File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/patched/piptools/repositories/pypi.py", line 234, in get_dependencies
    legacy_results = self.get_legacy_dependencies(ireq)
  File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/patched/piptools/repositories/pypi.py", line 426, in get_legacy_dependencies
    results, ireq = self.resolve_reqs(download_dir, ireq, wheel_cache)
  File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/patched/piptools/repositories/pypi.py", line 297, in resolve_reqs
    results = resolver._resolve_one(reqset, ireq)
  File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/patched/notpip/_internal/resolve.py", line 260, in _resolve_one
    abstract_dist = self._get_abstract_dist_for(req_to_install)
  File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/patched/notpip/_internal/resolve.py", line 211, in _get_abstract_dist_for
    abstract_dist = self.preparer.prepare_linked_requirement(
  File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/patched/notpip/_internal/operations/prepare.py", line 294, in prepare_linked_
    abstract_dist.prep_for_dist(finder, self.build_isolation)
  File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/patched/notpip/_internal/operations/prepare.py", line 127, in prep_for_dist
    self.req.run_egg_info()
  File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/patched/notpip/_internal/req/req_install.py", line 470, in run_egg_info
    call_subprocess(
  File "/usr/local/.pyenv/versions/3.9.0/lib/python3.9/site-packages/pipenv/patched/notpip/_internal/utils/misc.py", line 703, in call_subprocess
    raise InstallationError(
pipenv.patched.notpip._internal.exceptions.InstallationError: Command "python setup.py egg_info" failed with error code 1 in /tmp/tmp8jk2atvgbuild/rtree/

@jurre it's not a dependency of tensorflow, installing rtree is the problem, just used another dep to make sure the error does include the offending dependency name.
Don't think it's worth installing it just for rtree https://github.com/Toblerity/rtree

Will clarify this in the test setup!


A white screen appear right after splash.

I've been trying to figure out the cause of this issue when I tried to build using this repo template, it seems that whenever <ClerkLoaded /> is rendered a white screen appears just before splash is finished, I've tried most of the solutions found on the internet but I ended up adding <ClerkLoading /> above ClerkLoaded and that seems to fixed on my end.
Similar to this one : https://www.reddit.com/r/reactnative/comments/111x6qc/after_the_app_launch_i_am_seeing_this_blank/

hello @j3rech0 👋
Could you please use the bug report template and provide the requested information in order to help us investigate your issue?

@dimkl I'll do later, I just grabbed a fresh copy from https://github.com/clerkinc/clerk-expo-starter then run it on my advice using Expo Go, no actual code changes just cloned and run. White screen is noticeable for 1-2seconds.

Duplicate of https://github.com/clerkinc/javascript/issues/1713

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.


Use apache's built in signals for restarts/reloads

The init script is heavy handed, and on restart often fails. This will
ensure that we only do a heavy restart if we absolutely must.
Also removes a duplicate task, and removes the horizon overload of
handlers defined in the apache role.


build-gnu.sh: always update PATH in Makefile

If you run util/build-gnu.sh and then UU_MAKE_PROFILE=debug util/build-gnu.sh, the PATH variable in GNU coreutils' Makefile is not updated. This means that util/run-gnu-test.sh will still use the uutils binaries in target/release instead of those in target/debug. This PR fixes this issue. And also mentions UU_MAKE_PROFILE=debug in CONTRIBUTING.md.

I guess you saw the job didn't work


Remove tombstoned Release folders

Per the tombstone notice:

This file is a placeholder to preserve links. Please remove after 3 months or the release of kubernetes 1.10, whichever comes first.

I'm removing these files as k8s 1.10 has been released.
Historical Release information can be found here: https://git.k8s.io/sig-release/releases

/assign @pwittrock

/cc @calebamiles @spiffxp

PTAL @idvoretskyi @calebamiles @spiffxp @pwittrock

/lgtm
/approve

/assign @idvoretskyi


Adapted for meter Kaifa Type: MA105

I adapted the program a little bit for my own usage but maybe other people can use this so I put it here.
These meter is wireless connected to a gasmeter Itron G4RF1e WL .
Below the adapted program en screenshot.
The graph is a little bit crowded because I added also tariff3 and 4  because of my solar panels and also the gasmeter.
/KFM5KAIFA-METER
1-3:0.2.8(40)
0-0:1.0.0(151013144451S)
0-0:96.1.1(4530303039303030303134373436313134)
1-0:1.8.1(000117.566_kWh)
1-0:1.8.2(000072.650_kWh)
1-0:2.8.1(000007.845_kWh)
1-0:2.8.2(000012.889_kWh)
0-0:96.14.0(0002)
1-0:1.7.0(00.369_kW)
1-0:2.7.0(00.000_kW)
0-0:17.0.0(999.9_kW)
0-0:96.3.10(1)
0-0:96.7.21(00008)
0-0:96.7.9(00006)
1-0:99.97.0(1)(0-0:96.7.19)(000101000001W)(2147483647_s)
1-0:32.32.0(00000)
1-0:32.36.0(00000)
0-0:96.13.1()
0-0:96.13.0()
1-0:31.7.0(001_A)
1-0:21.7.0(00.365_kW)
1-0:22.7.0(00.000_kW)
0-1:24.1.0(003)
0-1:96.1.0(4730303139333430323138353337363135)
0-1:24.2.1(151013140000S)(00041.604_m3)

#Plugin pimatic-smartmeter
module.exports = (env) ->
Promise = env.require 'bluebird'
assert = env.require 'cassert'
class Smartmeter extends env.plugins.Plugin
init: (app, @framework, @config) =>
  deviceConfigDef = require("./device-config-schema")

  @framework.deviceManager.registerDeviceClass("Smartmeterdevice", {
    configDef: deviceConfigDef.Smartmeterdevice,
    createCallback: (config) => new Smartmeterdevice(config)
  })

class Smartmeterdevice extends env.devices.Sensor
attributes:
  activetariff:
    description: "Active tariff"
    type: "number"
    unit: " 1/3 or 2/4"
  actualusage:
    description: "Actual usage"
    type: "number"
    unit: " Watt"
  tariff1totalusage:
    description: "Tariff 1 total usage(T1)"
    type: "number"
    unit: " kWh"
  tariff2totalusage:
    description: "Tariff 2 total usage(T2)"
    type: "number"
    unit: " kWh"
  tariff3totalredelivery:
    description: "Tariff 3 total usage(T3)"
    type: "number"
    unit: " kWh"
  tariff4totalredelivery:
    description: "Tariff 4 total usage(T4)"
    type: "number"
    unit: " kWh"
  totalgasusage:
    description: "Total gas usage"
    type: "number"
    unit: " m3"

actualusage: 0.0
activetariff: 1
tariff1totalusage: 0.0
tariff2totalusage: 0.0
tariff3totalredelivery: 0.0
tariff4totalredelivery: 0.0
totalgasusage: 0.0

constructor: (config) ->

  @config = config

  @id = @config.id
  @name = @config.name
  @portName = @config.serialport
  @baudRate = @config.baudRate
  @dataBits = @config.dataBits
  @parity = @config.parity
  @stopBits = @config.stopBits
  @flowControl = @config.flowControl

  super()

  if @debug
    env.logger.debug ("Smartmeter portName : \"#{@portName}\"")
    env.logger.debug ("Smartmeter baudRate : \"#{@baudRate}\"")
    env.logger.debug ("Smartmeter dataBits : \"#{@dataBits}\"")
    env.logger.debug ("Smartmeter parity : \"#{@parity}\"")
    env.logger.debug ("Smartmeter stopBits : \"#{@stopBits}\"")

  P1DataStream = require "./p1meterdata"
  p1datastream = new P1DataStream({
    portName: @portName,
    baudRate: @baudRate,
    dataBits: @dataBits,
    parity: @parity,
    stopBits: @stopBits,
    flowControl: @flowControl
  })
  p1datastream.on 'data', (data) =>
    @actualusage = Number data.currentUsage
    @emit "actualusage", Number @actualusage

    @activetariff = Number data.currentTariff
    @emit "activetariff", Number @activetariff

    @tariff1totalusage = Number data.tariffOneTotalUsage
    @emit "tariff1totalusage", Number @tariff1totalusage

    @tariff2totalusage = Number data.tariffTwoTotalUsage
    @emit "tariff2totalusage", Number @tariff2totalusage

    @tariff3totalredelivery = Number data.tariffThreeTotalRedelivery
    @emit "tariff3totalredelivery", Number @tariff3totalredelivery

    @tariff4totalredelivery = Number data.tariffFourTotalRedelivery
    @emit "tariff4totalredelivery", Number @tariff4totalredelivery

    @totalgasusage = Number data.totalGasUsage
    @emit "totalgasusage", Number @totalgasusage

getActualusage: -> Promise.resolve @actualusage
getActivetariff: -> Promise.resolve @activetariff
getTariff1totalusage: -> Promise.resolve @tariff1totalusage
getTariff2totalusage: -> Promise.resolve @tariff2totalusage
getTariff3totalredelivery: -> Promise.resolve @tariff3totalredelivery
getTariff4totalredelivery: -> Promise.resolve @tariff4totalredelivery
getTotalgasusage: -> Promise.resolve @totalgasusage

plugin = new Smartmeter
return plugin
p1meterdata.js =>
var serialport = require("serialport");
var SerialPort = serialport.SerialPort;
var util = require("util");
var events = require("events");
var openSerialPort = function (opts, callback) {
console.log('serialport options ');
console.log(opts);
// Setup a SerialPort instance
var sp = new SerialPort(opts.portName, {
    baudRate: opts.baudRate,
    dataBits: opts.dataBits,
    parity: opts.parity,
    stopBits: opts.stopBits,
    flowControl: opts.flowControl,
    parser: serialport.parsers.readline("!")
}, false);

sp.open(function () {
    console.log('- Serial port is open');
    sp.on('data', callback);
});

return sp;

};
//  Returns result from applying regex to data (string)
var returnRegExResult = function (data, regex) {
var result = data.match(regex);
if (result != undefined) {
    return result[1];
} else {
    return undefined;
}

}; // returnRegExResult
var P1DataStream = function (opts) {
console.log('P1DataStream opts ');
console.log(opts);
var self = this;
self.opts = opts;

var listener = function (data) {

    var tariffOneTotalUsage = returnRegExResult(data, /^1-0:1\.8\.1\(0+(\d+\.\d+)\*kWh\)/m);
    var tariffTwoTotalUsage = returnRegExResult(data, /^1-0:1\.8\.2\(0+(\d+\.\d+)\*kWh\)/m);
    var tariffThreeTotalRedelivery = returnRegExResult(data, /^1-0:2\.8\.1\(0+(\d+\.\d+)\*kWh\)/m);
    var tariffFourTotalRedelivery = returnRegExResult(data,  /^1-0:2\.8\.2\(0+(\d+\.\d+)\*kWh\)/m);
    var currentTariff = returnRegExResult(data, /^0-0:96.14.0\(0+(.*?)\)/m);
    var currentUsage = returnRegExResult(data, /^1-0:1.7.0\((.*?)\*/m);
    var totalGasUsage = returnRegExResult(data, /^0-1:24\.2\.1\(\d+S\)\(0+(\d+\.\d+)\*m3\)/m);

    var dataGram = {
        tariffOneTotalUsage: tariffOneTotalUsage * 1,
        tariffTwoTotalUsage: tariffTwoTotalUsage * 1,
        tariffThreeTotalRedelivery: tariffThreeTotalRedelivery * 1,
        tariffFourTotalRedelivery: tariffFourTotalRedelivery * 1,
        currentTariff: currentTariff * 1,
        currentUsage: currentUsage * 1000,
        totalGasUsage: totalGasUsage * 1
    };

    console.log('Raw data received: ' + data);
    console.log('Parsed data: ');
    console.log(dataGram);

    self.emit("data", dataGram);
};

openSerialPort(self.opts, listener);
events.EventEmitter.call(self);

};
util.inherits(P1DataStream, events.EventEmitter);
module.exports = P1DataStream;

This is just the way i want to use the reading from my meter. Thanx

I adapted the code but it didn't have any effect, I still only see the other variables and no gas usage :-(. Can you tell me what I did wrong. ik restarted pimatic. (I'm new in this, just started using pimatic).

i'm also having the same issue and still working on it

I didn't realize that the S is for summertime.
So this morning we got wintertime and I got no readings from gas usage.
I adapted following:
var totalGasUsage = returnRegExResult(data, /^0-1:24.2.1(\d+S)(0+(\d+.\d+)*m3)/m);
should be:
var totalGasUsage = returnRegExResult(data, /^0-1:24.2.1(\d+[SW])(0+(\d+.\d+)*m3)/m);

Sorry wrong button ;)

I am also rather new in this material. But I used this link:  https://regex101.com/ to make the gas formula. It costed me also a lot of time to get it working. Most faults where mis typing and also to find the good formula for the gas usage.
But now it is working very good.

Guys, what do you do after you change the code. Do you need to compile something or just restart pimatic?

Just restart. If you make a change to config, be sure to stop pimatic first, then make the change, and restart. Otherwise your change will be overwritten.
Pimatic runs on node.js, so it's basically javascript. Pimatic uses Coffeescript heavily, which is transpiled to javascript. No need for really compiling in the traditional way.

ok, I restarted it but still no gasusage. This is what I see

and your code with the added 'gas' code... (didn't use the tariff3totalredelivery and tariff4totalredelivery) is down here. I also tested the regular expression with regex101.com and it works. Maybe you can see the bug in the code.
pimatic-smartmeter.coffee
#Plugin pimatic-smartmeter
module.exports = (env) ->
Promise = env.require 'bluebird'
assert = env.require 'cassert'
class Smartmeter extends env.plugins.Plugin
init: (app, @framework, @config) =>
  deviceConfigDef = require("./device-config-schema")

  @framework.deviceManager.registerDeviceClass("Smartmeterdevice", {
    configDef: deviceConfigDef.Smartmeterdevice,
    createCallback: (config) => new Smartmeterdevice(config)
  })

class Smartmeterdevice extends env.devices.Sensor
attributes:
  actualusage:
    description: "Actual usage"
    type: "number"
    unit: " Watt"
  activetariff:
    description: "Active tariff"
    type: "number"
    unit: " 1 or 2"
  tariff1totalusage:
    description: "Tariff 1 total usage(T1)"
    type: "number"
    unit: " kWh"
  tariff2totalusage:
    description: "Tariff 2 total usage(T2)"
    type: "number"
    unit: " kWh"
  totalgasusage:
    description: "Total gas usage"
    type: "number"
    unit: " m3"

actualusage: 0.0
activetariff: 1
tariff1totalusage: 0.0
tariff2totalusage: 0.0
totalgasusage: 0.0

constructor: (config) ->

  @config = config

  @id = @config.id
  @name = @config.name
  @portName = @config.serialport
  @baudRate = @config.baudRate
  @dataBits = @config.dataBits
  @parity = @config.parity
  @stopBits = @config.stopBits
  @flowControl = @config.flowControl

  super()

  if @debug
    env.logger.debug ("Smartmeter portName : \"#{@portName}\"")
    env.logger.debug ("Smartmeter baudRate : \"#{@baudRate}\"")
    env.logger.debug ("Smartmeter dataBits : \"#{@dataBits}\"")
    env.logger.debug ("Smartmeter parity : \"#{@parity}\"")
    env.logger.debug ("Smartmeter stopBits : \"#{@stopBits}\"")

  P1DataStream = require "./p1meterdata"
  p1datastream = new P1DataStream({
    portName: @portName,
    baudRate: @baudRate,
    dataBits: @dataBits,
    parity: @parity,
    stopBits: @stopBits,
    flowControl: @flowControl
  })
  p1datastream.on 'data', (data) =>
    @actualusage = Number data.currentUsage
    @emit "actualusage", Number @actualusage

    @activetariff = Number data.currentTariff
    @emit "activetariff", Number @activetariff

    @tariff1totalusage = Number data.tariffOneTotalUsage
    @emit "tariff1totalusage", Number @tariff1totalusage

    @tariff2totalusage = Number data.tariffTwoTotalUsage
    @emit "tariff2totalusage", Number @tariff2totalusage

@totalgasusage = Number data.totalGasUsage
	@emit "totalgasusage", Number @totalgasusage

getActualusage: -> Promise.resolve @actualusage
getActivetariff: -> Promise.resolve @activetariff
getTariff1totalusage: -> Promise.resolve @tariff1totalusage
getTariff2totalusage: -> Promise.resolve @tariff2totalusage
getTotalgasusage: -> Promise.resolve @totalgasusage

plugin = new Smartmeter
return plugin

p1meterdata.js
var serialport = require("serialport");
var SerialPort = serialport.SerialPort;
var util = require("util");
var events = require("events");
var openSerialPort = function (opts, callback) {
console.log('serialport options ');
console.log(opts);
// Setup a SerialPort instance
var sp = new SerialPort(opts.portName, {
    baudRate: opts.baudRate,
    dataBits: opts.dataBits,
    parity: opts.parity,
    stopBits: opts.stopBits,
    flowControl: opts.flowControl,
    parser: serialport.parsers.readline("!")
}, false);

sp.open(function () {
    console.log('- Serial port is open');
    sp.on('data', callback);
});

return sp;

};
//  Returns result from applying regex to data (string)
var returnRegExResult = function (data, regex) {
var result = data.match(regex);
if (result != undefined) {
    return result[1];
} else {
    return undefined;
}

}; // returnRegExResult
var P1DataStream = function (opts) {
console.log('P1DataStream opts ');
console.log(opts);
var self = this;
self.opts = opts;

var listener = function (data) {

    var tariffOneTotalUsage = returnRegExResult(data, /^1-0:1\.8\.1\(0+(\d+\.\d+)\*kWh\)/m);
    var tariffTwoTotalUsage = returnRegExResult(data, /^1-0:1\.8\.2\(0+(\d+\.\d+)\*kWh\)/m);
    var currentTariff = returnRegExResult(data, /^0-0:96.14.0\(0+(.*?)\)/m);
    var currentUsage = returnRegExResult(data, /^1-0:1.7.0\((.*?)\*/m);
var totalGasUsage = returnRegExResult(data, /^0-1:24\.2\.1\(\d+[SW]\)\((\d+\.\d+)\*m3\)/m);

    var dataGram = {
        tariffOneTotalUsage: tariffOneTotalUsage * 1,
        tariffTwoTotalUsage: tariffTwoTotalUsage * 1,
        currentTariff: currentTariff * 1,
        currentUsage: currentUsage * 1000,
    totalGasUsage: totalGasUsage * 1
    };

    console.log('Raw data received: ' + data);
    console.log('Parsed data: ');
    console.log(dataGram);

    self.emit("data", dataGram);
};

openSerialPort(self.opts, listener);
events.EventEmitter.call(self);

};
util.inherits(P1DataStream, events.EventEmitter);
module.exports = P1DataStream;

I know what the problem was. I had tab's in my coffee script and that doesn't work. I replaced them with white spaces.

This script is still not working for me. I installed the smartmeteplugin stopped pimatic service and replaced p1meterdata.js and pimatic-smartmeter.coffee. Then restarted pimatic and came up with an error: unexpected indentation.
The standard smartmeterplugin works fine only without gas ussage.

Fixed the problem missed one tab in coffee script.
But it would be nice if every meter is below each other instead of behind.

I also want to know if the pimatic smartmeter really writes a logfile or just directly shows its data.
A logfile might come in handy for a logreader.

I haven't added writing to a logfile. Especially since there already were solutions that log to file which could be read by pimatic. And unnecessarily writing to disk is a win when using a Raspberry Pi.

Hy Saberone,
I have switched from v0.8 to v0.9 but i got issues with the p1meterdata.js.
I cannot get the gasusage to work.
by default the plugin is working.
Stopping the pimatic service, changing to .coffee and p1meterdata.,messes up the function. Also been looking for tabs etc but  can't find it.


When is MaxLength null?

> The maximum length of the property.
So when is this null? Never? When the database does not impose a limit? When no explicit value is set but it may still have an implicit one?

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

ID: 5b5a182c-9e29-3bdb-10ff-0ca5286a1b9e
Version Independent ID: 178d744e-faa5-f02a-87a3-b057d8b84198
Content: EdmProperty.MaxLength Property (System.Data.Entity.Core.Metadata.Edm)
Content Source: EF/xml/System.Data.Entity.Core.Metadata.Edm/EdmProperty.xml
Product: entity-framework
Technology: entity-framework-6
GitHub Login: @dotnet-bot
Microsoft Alias: divega

Thank you for requesting a change to the EF6 documentation. We are prioritizing improvements to the EF Core documentation and at this time we are not making changes to the EF6 documentation.
However, we will consider well-written community pull requests to improve the EF6 documentation. The documentation source is located in the EntityFramework.Docs repository on GitHub. To submit a pull request:

Find the file to update and click on it to open

Click on the edit button (✏) to edit in your web browser

When done, add a title and description, then use the "Create a new branch and start a pull request." option.

(Note that you can also clone the docs repo and do a GitHub PR in the normal way.)


CustomScreenshotWriter does not seem to be getting called.

Describe the bug
I have implemented a CustomScreenshotWriter with console.log lines in it to check whether it is being called or not.
There are no screenshots being captured and the call is not being hit based on the lack of logs.
To Reproduce
import { CustomScreenshotWriter  } from "gauge-ts";
import { join, basename } from "path";
import { scope } from "./CurrentScope";
import pw from "./PlaywrightWrapper";

/**
 * Class required to support taking screenshots on the CI/CD environment.
 *
 * See: https://bugdiver.dev/gauge-ts/#/?id=custom-screenshots
 */
export default class ScreenshotWriter {

    /**
     * Grabs a custom screenshot using Playwright.
     * @returns A string with the name of the screenshot file.
     */
    @CustomScreenshotWriter()
    public async writeScreenShot(): Promise<string> {
        console.log("Capturing screenshot.");

        const screenshotFilePath = join(
            process.env["gauge_screenshots_dir"],
            `screenshot-${process.hrtime.bigint()}.png`);

        // Use playwright to grab the screenshot.
        await scope.page.screenshot({
            path: screenshotFilePath,
            fullPage: true
        });

        console.log(`Captured screenshot: ${screenshotFilePath}`);

        return basename(screenshotFilePath);
    }
}

I looked through the code for CustomScreenshotWriter and it seems quite straight forward so I'm not certain why no screenshot is being captured and the function is not being hit.
Playwright itself has no issues with capturing screenshots as the traces work fine.
If I uninstall the screenshots plugin, Gauge reinstalls it at runtime:
Installing required plugins.
...................
Successfully installed plugin 'screenshot' version 0.1.0

Expected behavior
The console.log lines in the CustomScreenshotWriter to be hit.
Screenshots
N/A
Desktop (please complete the following information):

OS: macOS, Linux (on CI pipeline)
Gauge and plugin version [run gauge -v]: 1.4.2
Node version [run node -v]: 16.10.0
Npm version [run npm -v]: 7.24.0

Full output from gauge -v:
Gauge version: 1.4.2
Commit Hash: f080fbc

Plugins
-------
dotnet (0.4.1)
html-report (4.1.2)
screenshot (0.1.0)
ts (0.1.0)
xml-report (0.2.3)

Additional context
Code is not being hit when working locally due to lack of console.log.  Also not being hit in the CI pipeline as the report is lacking screenshots and also lack of log messages.

@CharlieDigital I tested this recently and the custom method is getting as executed as expected.
By default Gauge captures screenshot only on failures, so if there is no failure, gauge will not capture any screenshot.
To capture additional screenshots you can use Gauge.captureScreenshot() in the steps and those will appear in the report.
https://getgauge.github.io/gauge-ts/#/?id=custom-screenshots-in-reports


TwitterKit overwrites defined URL schemes on iOS

Hi,
I found a bug that TwitterKit removes URL schemes added by other post process.
It seems that the predefined CFBundleURLTypes is overwritten and disappears because there is CreateArray() with the following code.
https://github.com/twitter/twitter-kit-unity/blob/master/source/Assets/Twitter/Editor/TwitterPostProcess.cs#L51
I think it would be better to add the presence confirmation process as follows.
PlistElementArray bundleURLTypesArray = rootDict["CFBundleURLTypes"] as PlistElementArray;
if( bundleURLTypesArray == null ){
    bundleURLTypesArray = rootDict.CreateArray ("CFBundleURLTypes");
}

Environment:
Unity 5.6.2
Xcode 8.3.3
Sorry for my poor English.
Thanks.

Hi Koichi,
Thank you for reporting this bug! We have fixed the issue in v3.1.1
regards,
Adam


nip01: add support for prefixed ids in filters

so clients can filter events by prefix ids as described in nip-01, i.e. to subscribe to mined events starting with zeroes or to add some privacy for clients that may not want to disclose the exact filter.
this is only a POC and does not support non-aligned (odd-length) hex prefixes.
see also https://github.com/scsibug/nostr-rs-relay/issues/104
part of https://github.com/nbd-wtf/nostr-tools/issues/157

@fiatjaf would you accept such an approach / cACK?
if yes, then I would look into support for non-aligned (odd-length) hex prefixes and get this PR ready.
PTAL

I don't understand what is the benefit of adding this to the library.

the user story is: as a client I want to have the option to filter the feed and only show events that were mined with nip-13 pow.
the problem: this is already possible by checking every received event if the event-id starts with certain amount of 0's (zeros).  but each event still has to be downloaded (impact on bandwidth) and verified (impact on performance). ideally the client would tell a relay: "hey please only send me events starting with 00000"
the benefit is: relay has to send less data and client saves bandwidth and cpu. additionally this is already specified in nip-01 and at least nostr-rs-relay already supports it.
but it seems that nostr-tools checks for exact matches and does not support prefix id's, therefore the events are received but are not emitted by nostr-tools library.
(sorry I am slow, I mostly work on the weekends on my nostr project)

please also see this comment with example jsfiddle https://github.com/nbd-wtf/nostr-tools/issues/157#issuecomment-1465210163

Right, but the library currently already supports this, there is nothing to be changed. What am I missing?

Right, but the library currently already supports this, there is nothing to be changed. What am I missing?

ah then it might be a bug, the following code should log an event startign with event-id 0000, such as https://www.nostr.guru/e/0000c975913d07074ce3a83fe579da71f49dca2c3aed2a31a1b8fd754d0585cc
 const subscription = relay.sub([
    {
      ids: ["0000"], // only subscribe to id's with prefix 0
      kinds: [1],
      limit: 2
    }
  ]);
  subscription.on("event", (event) => {
    console.log("event", relay.url, event);
  });

https://jsfiddle.net/dahcjyu4/

here it looks for exact matches (with indexOf) https://github.com/nbd-wtf/nostr-tools/blob/ce081bb4cb7ce5deef7f637e403b68509eae01d6/filter.ts#L18

but the library currently already supports this

I can't see that in the code, where should it allow prefix ids?

I see it now. Sorry for my obtuseness.

Can you fix the conflict?

@fiatjaf rebased, updated tests, added some comment and added support for authors.
PTAL

actually I noticed prettier would format the filter arguments on one line, but it was already like this.. so I'll keep as it was.
diff --git a/filter.ts b/filter.ts
index 263b853..5085256 100644
--- a/filter.ts
+++ b/filter.ts
@@ -11,10 +11,7 @@ export type Filter = {
   [key: `#${string}`]: string[]
 }

-export function matchFilter(
-  filter: Filter,
-  event: Event
-): boolean {
+export function matchFilter(filter: Filter, event: Event): boolean {
   if (filter.ids && filter.ids.indexOf(event.id) === -1) {
     if (!filter.ids.some(prefix => event.id.startsWith(prefix))) {
       return false
@@ -47,10 +44,7 @@ export function matchFilter(
   return true
 }

-export function matchFilters(
-  filters: Filter[],
-  event: Event
-): boolean {
+export function matchFilters(filters: Filter[], event: Event): boolean {
   for (let i = 0; i < filters.length; i++) {
     if (matchFilter(filters[i], event)) return true
   }


javascript bookmarklet

I wrote a javascript bookmarklet useful for opening ar5iv. I actually don't use bookmarklet, but use the javascript directly mapped to a shortkey.
var url = window.location.href
let result = url.replace(/arxiv/g, "ar5iv");
var win = window.open(result, '_self');
win.focus();

javascript:(function()%7Bvar%20url%20%3D%20window.location.href%0Alet%20result%20%3D%20url.replace(%2Farxiv%2Fg%2C%20%22ar5iv%22)%3B%0Avar%20win%20%3D%20window.open(result%2C%20'_self')%3B%0Awin.focus()%3B%7D)()%3B

bookmarklet

Thanks for sharing @yuxiliu1995 !
But maybe you/others reading here can also use one of the bookmarklets posted to the browser extension stores?
For example:

arxiv -> ar5iv, Chrome
withAr5iv, Chrome
withAr5iv, Apple app store

I think we don't have a published one for Firefox yet - so that could be one target to create a new extension.
I will close here, since I don't think there is any action possible from within ar5iv itself, but hopefully the issue will be a good signpost for others to find directions. I think we also had #109 touching on the extension question - maybe I should add a new label.


Does deploying Next.js on a Shared hosting creates multiple instance of the server

Does deploying Next.js on a Node.js enabled shared hosting server (godaddy.com) creates new instance of the Next.js server for every new request.

The answer depends on your hosting provider. I believe godaddy provides virtual servers and not a serverless solution like AWS lambda. So it won't create a new server per request. 👍


add link to import CSV data

@boazdavid I think you need to check the app with design. Why is that a bluemix app ? Can we actually add that to the sdks ?


Doesn't work decorator

Hello @ocombe. I use ocLazyLoad and I don't understand why my module doesn't configured:
app.config(['$provide', function ($provide) {
    $provide.decorator('$rootScope', ["$delegate", function ($delegate) {
        $delegate.constructor.prototype.$fromBinder = function() {
            console.log('Test');
        };

        return $delegate;
    }]);
}]);

Working all except config =(

Hi !
Sorry but decorators only work on services that haven't been instantiated yet, that's the whole point of decorators. Because of that, you cannot decorate a service that has already been loaded, even with ocLazyLoad.
You can decorate new services that you are lazy loading, but $rootScope is definitely off limits :)

@ocombe  can you write a sample, how to decorate a provide via lazy loading

The important part is to decorate a new service with a new module (not the main module from your application).
angular.module('myNewModule', []).config(['$provide', function ($provide) {
    $provide.decorator('myService', ["$delegate", function ($delegate) {
        $delegate.constructor.prototype.$fromBinder = function() {
            console.log('Test');
        };

        return $delegate;
    }]);
}]);

@ocombe I've got it
thanks.