Update content folder structure

This updates the folder hierarchy for all FTA Live content. Each folder will map to a category and will contain a table of contents with links to each session within that category. Each session will have its own folder to house all materials related to the session.
Confirm Changes OK
Because there was about week gap with active changes and renaming will increase chance of git conflicts - it is best practice to review the changes by hand.
@all please review your content folders in this jabec-folderrestructure-copy branch and confirm that the content is OK to merge
Just compare changes with the content's original file location on the main branch - where you know the content is correct and make sure it's the same.
If there are conflicts - please fix in this jabec-folderrestructure-copy branch to automatically update this PR.
Thanks!
(added by @julie-ng)
Checked
add here by whom - or post in comments below

[x] ai
[x] analytics
[x] cloud-native - Julie
[x] compute-app
[x] compute-infra
[ ] data
[x] devops - Julie
[x] hybrid-management
[x] identity
[x] introduction
[x] management
[x] networking
[x] q-and-a
[x] security
[x] virtual-desktop-infrastructure

Looks great, Jason.

I checked

ai
analytics
cloud-native
devops

@jelledruyts  @vanessabruwer if you have time today to check some content categories, that'd be greatly appreciated.

Confirmed Hybrid Management, Management and Security

Confirmed the contents of the new "compute-app", "compute-infra", "identity", "introduction", "networking", "q-and-a" and "virtual-desktop-infrastructure" folders - assuming no folder got left behind from the source location :-)

I just checked the data folder and it's fine. No need @cyrille-visser  to check.
Okay, since @vanessabruwer @jelledruyts and I (3 persons) checked the content, we'll count the PR as team approved and merge.


 Nothing to do 😴
On branch pr_13
nothing to commit, working tree clean

It can have undesired side effect. For now I can update my git commit message, but thought I'll report this strange edge case :)

I bet this is your shell playing tricks with you :)
Try using single quotes (no pun intended)

I can't use single quotes instead of double quotes.

This also runs black btw:
 git commit -am "`black .`"

It's hard to be more helpful without seeing the actual code that triggers this. As far as I can tell your bot builds that git commit string and shells out to execute it? Black shouldn't change quotes inside that string; if it does, it's a bug.

Mariatta, this is because your shell is treating backticks as syntax to run an arbitrary command. Try committing something with yes in the commit message, you'll see what I mean.
This isn't something that Black can fix, you need to escape your strings.


[SPARK-12952] EMLDAOptimizer initialize() should return EMLDAOptimizer other than its parent class

https://issues.apache.org/jira/browse/SPARK-12952

Test build #49867 has started for PR 10863 at commit a41f95d.

Test build #49867 has finished for PR 10863 at commit a41f95d.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/49867/
Test PASSed.

Does this matter?  It's a private API.  But I'll merge it since it looks fine, after re-running tests

Test build #2462 has started for PR 10863 at commit a41f95d.

Test build #2462 has finished for PR 10863 at commit a41f95d.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

LGTM
Merging with master


Validation for URL on Organization needs better error messages

If the user doesn't provide http:// at the beginning of the url for their organization the validation fails but doesn't explain why.
We should probably make the error message more clear, and I would also recommend removing the requirement to having http:// added by the user. Not everyone is going to thing to do this. Most people thing of websites as just the domain they know.

https://ux.stackexchange.com/questions/9169/what-would-be-the-best-way-to-let-a-user-add-a-url-to-a-form
Looking around for what's current best practices for prompting for a URL -- I thought we might start by making the input type be HTML5 "url" type.


Allow for encrypted AMI volumes

There is no easy way to have an EC2 instance with an encrypted volume when booting up from the CoreOS provided AMIs.  I suggest that we modify the build script for AMIs so that an additional AMI is built per virtualization type with an encrypted volume.
There is a reduced list of instances available that can run the additional AMIs with encryption enabled, as not all instances support EBS encryption.

Since PR #400 was merged in a couple weeks back.  It seems that your current build process (import.sh) still does support encrypted root devices for your AMI images.  It is still possible to create an encrypted volume/snapshot, but it would entail copying the data over from the imported volume to the encrypted volume and registering additional AMIs.
I could create a PR for creating the AMIs with encrypted root devices, but I don't know what other pieces would need to be touched to have the AMIs show up, or hide them, on the CoreOS EC2 page.

According to the Amazon documentation it is simply not possible for us to publish public AMIs with encrypted volumes:

Public or shared snapshots of encrypted volumes are not supported, because other accounts would not be able to decrypt your data.

and

Encrypted boot volumes are not supported at this time.

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html
I presume the warning about boot volumes is simply because no public AMIs can provide encrypted volumes. If that's a white lie and your recommendation works great, but due to the way EBS encryption keys are managed you are stuck with creating the AMIs yourself.


Added JUnit tests for Activity and Schedule

Added JUnit tests for Activity and Schedule

Pull Request Test Coverage Report for Build 352

6 of 7 (85.71%)  changed or added relevant lines in 2 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.3%) to 72.291%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

src/main/java/seedu/address/model/schedule/Schedule.java
3
4
75.0%

Totals

Change from base Build 350:
0.3%

Covered Lines:
2335

Relevant Lines:
3230

💛  - Coveralls

Pull Request Test Coverage Report for Build 351

6 of 7 (85.71%)  changed or added relevant lines in 2 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.3%) to 72.291%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

src/main/java/seedu/address/model/schedule/Schedule.java
3
4
75.0%

Totals

Change from base Build 350:
0.3%

Covered Lines:
2335

Relevant Lines:
3230

💛  - Coveralls


[Browserify support] Sets module.exports now, in addition to exports

Now has proper type checking for usage in browsers, will not throw an exception if module.exports is missing.

Thank you for your contribution, but closing this due to age. This project is formally deprecated. Will be adding a notice soon.


increase/rate got abnormally large result on aggregated data sources

Thanos, Prometheus and Golang version used:
thanos receive：v0.32.5
thanos query：v0.33.0
thanos query-frontend：v0.33.0

What happened:
increase/rate got abnormally large result on aggregated data sources

What you expected to happen:
increase/rate got correct result on aggregated data sources
How to reproduce it (as minimally and precisely as possible):
When aggregating two clusters with identical data using thanos query, and using the increase/rate function, abnormally large results occur when metrics undergo chunk switching.
Full logs to relevant components:

Anything else we need to know:
have conducted the following validations:

For the same metric, during metric chunk switching (120 samples), the results are normal for independent data sources but abnormal for aggregated data sources.
For different metrics, during metric chunk switching (120 samples), the results are normal for independent data sources but abnormal for aggregated data sources.
For different metrics with different collection periods, the anomalies occur consistently when 120 samples of metrics are collected."

I wonder if its related to what was discussed here before: https://cloud-native.slack.com/archives/CL25937SP/p1697127041904839.

Can you describe your cluster a bit more please? That would help in figuring out whats going on!

Here is our cluster architecture and the reasons for setting it up this way. Thanks for your help!
Alarm datasource: Querying two clusters to prevent alarms from becoming unavailable due to a single cluster failure.
Dashboard datasource: Querying only B cluster to prevent large queries from causing receiver OOM and affecting alerts.

Compactor compacts together blocks Uploaded from both clusters again right?

Compactor compacts together blocks Uploaded from both clusters again right? NO
It's configured with replica label "receive-cluster" right? YES
A more complete architectural diagram is shown below.

Component startup parameters
`compactor B

args:

compact
--log.level=info
--log.format=logfmt
--http-address=<IP_ADDRESS>:10902
--data-dir=/data
--retention.resolution-raw=14d
--retention.resolution-5m=30d
--retention.resolution-1h=180d
--consistency-delay=30m
--objstore.config-file=/conf/objstore.yml
--compact.enable-vertical-compaction
--deduplication.func=penalty
--deduplication.replica-label="replica"
--deduplication.replica-label="thanosreplica"
--deduplication.replica-label="receive_cluster"
--deduplication.replica-label="receive"
--compact.concurrency=4
--block-files-concurrency=4
--compact.blocks-fetch-concurrency=4
--downsample.concurrency=4
--wait
image: quay.io/thanos/thanos:v0.34.0

Receive B

args:

receive
--log.level=info
--log.format=logfmt
--grpc-address=<IP_ADDRESS>:10901
--http-address=<IP_ADDRESS>:10902
--remote-write.address=<IP_ADDRESS>:19291
--objstore.config=$(OBJSTORE_CONFIG)
--tsdb.path=/var/thanos/receive
--label=thanosreplica="$(NAME)"
--label=receive="true"
--tsdb.retention=4d
--receive.local-endpoint=$(NAME).prod-b-thanos-receive-headless.$(NAMESPACE).svc.cluster.local:10901
--receive.grpc-compression=snappy
--tsdb.out-of-order.time-window=1h
--store.limits.request-samples=86400000
--store.limits.request-series=100000

Receive A

args:

receive
--log.level=info
--log.format=logfmt
--grpc-address=<IP_ADDRESS>:10901
--http-address=<IP_ADDRESS>:10902
--remote-write.address=<IP_ADDRESS>:19291
--objstore.config=$(OBJSTORE_CONFIG)
--tsdb.path=/var/thanos/receive
--label=thanosreplica="$(NAME)"
--label=receive="true"
--tsdb.retention=4d
--receive.local-endpoint=$(NAME).prod-a-thanos-receive-headless.$(NAMESPACE).svc.cluster.local:10901
--receive.grpc-compression=snappy
--tsdb.out-of-order.time-window=1h
`

Hello @MichaHoffmann, may I inquire if there have been any recent developments on this issue?


Can't create additional dashboard for grafana in prometheus-operator

Hi!
I can't add new custom dashboard for grafana. Can't understand, to what section in my values.yaml, put it.
I'm using stable/prometheus-operator in helm. My values.yaml file is pretty simple and looks like example https://github.com/helm/charts/blob/master/stable/prometheus-operator/values.yaml
Can you, please, explain me with some examples?

I have tried the following documented steps and it works:
https://github.com/helm/charts/tree/0771fc7e4c3853c0b64e6b4a5ad7b4824d688db9/stable/grafana#sidecar-for-dashboards

Thanks a lot! It was what i need!
I had error while applying this configMap:
Error from server (BadRequest): error when creating "grafana-dashboards/alertmanager.yaml": ConfigMap in version "v1" annot be handled as a ConfigMap: v1.ConfigMap.ObjectMeta: v1.ObjectMeta.Namespace: Name: Labels: ReadString: expects "or n, but found 1, error found in #10 byte of ...|shboard":1},"name":"|..., bigger context ...|monitoring\"}}\n"},"labls":{"grafana_dashboard":1},"name":"sample-grafana-dashboard","namespace":"m|...

So helped to quote the grafana_dashboard's value.
Thanks a lot.

so it seems that it only accepts strings on labels...
although prometheus accepts things like page: true and works fine... is this intended?


Strange behavior with scope

I was trying to define a scope that selects all Articles that has a relation with Version.
Article and Version are defined like this:
class Article
   ...
  has_one :out, :published_version, type: :published_version, model_class: :Version, unique: true
end

class Version
   ...
  has_one :in, :article, type: :published_version, model_class: :Version, unique: true
end

I built my query like this:
Article.as(:n).published_version(:v).query.proxy_as(Article, :n)

And it works quite good.
So I tried to put this query in a scope:
scope :published, -> { published_version(:v).query.proxy_as(Article, identity) }

But when I call Article.published, I receive:
NoMethodError: undefined method `published_version' for #<Neo4j::ActiveNode::Scope::ScopeEvalContext:0x007fb66aac2a38>

It's a bit annoying that Scopes can't see relations, since in ActiveRecord I could to the same by doing:
scope :published, -> { join(:published_version) }

Is it a bug? Or I'm doing it wrong?

Interesting.... does this work?
scope :published, -> { all.published_version(:v).query.proxy_as(Article, identity) }

If not, this should definitely work:
  def self.published
    all.published_version(:v).query.proxy_as(Article, identity)
  end

Probably scopes should allow for this, though.  And we should have a better way to reach out through an association to do a conditional (or even just a MATCH like you're doing) and then return the original scope context.  Maybe something like:
Article.branch { |articles| articles.published_version(:v) } # Returns a scope re-wound to the "articles" point

Uhm, I see. This is working:
  def self.published
    all.published_version(:v).query.proxy_as(Article, identity)
  end

But definitely it's not a scope (so I can't chain).
The other one isn't. :(
branch method would be very useful!
Do you mean something like:
def branch
  if block_given?
    yield(self).query.proxy_as(self.class, identity)
  else
    fail ArgumentError, "Block required"
  end
end

It's not a scope, but it should work just like a scope.  Give it a try in a chain! ;)  Keep in mind, though, that the all is the secret to making it chain-able
And yeah, that's actually pretty much all you'd have to do I think ;)  I'd honestly be happy with the default LocalJumpError: no block given error if you wanted to skip the block_given? check.  Want to make a PR to get credit?
The only thing that I might quibble about is that I think that there might be a better name for the method out there.  I'm open to suggestions (shout out to @subvertallchris ), but branch is the best that I can think of at the moment

Oh, yep, I know I can chain it, but I can't use it IN a chain ;)
I mean:
Article.where(something).published

Oh, LocalJumpError! That was the name!
I'll make a pull request with it ;)

I'm not sure I understand ;)  I think that you can use it in a chain, but can you give me an example of what works and what doesn't, and for when it doesn't work what's wrong with it?
A PR would be great, thanks!

I have still my problems with scopes :laughing:
if I do:
  def self.published
    all.branch { published_version }
  end

I can do:
Article.published.where(...)

But not:
Person.articles.published.where(...)

I should use a scope for this, but if I do:
scope :published, -> { all.branch { published_version } }

I got:
undefined method `branch' for #<Neo4j::ActiveNode::Scope::ScopeEvalContext:0x007fd359843a30>

This is because the ScopeEvalContext  delegates only this methods:
https://github.com/neo4jrb/neo4j/blob/371ad1ce48311f7b32486d3c4862c1f660ed19d5/lib/neo4j/active_node/query/query_proxy.rb#L141
I think we can change this:
https://github.com/neo4jrb/neo4j/blob/master/lib/neo4j/active_node/scope.rb#L93
To delegate more methods (example: branch, or also associations)

scope is something that comes from ActiveRecord.  In ActiveRecord it is mostly the same as a class method.  This article, though covers some of the differences:
http://blog.plataformatec.com.br/2013/02/active-record-scopes-vs-class-methods/
I think our scope method is probably broken in at least a couple of ways.  I think that this could probably be fixed relatively easily by having it define a class method (dealing with the context that the method runs in will need to be figured out).

I think that this could be closed


Activation scripts!

It would be great to add Nushell tools for system activation scripts! :)

I found https://github.com/MercuryTechnologies/nix-your-shell

Here's a translation of the default bash activation (with bash versions copied in to help out copilot)
use std

let env_cols = ($env | columns)
# if [ -n "$HOME" ] && [ -n "$USER" ]; then
if ("HOME" in $env_cols) and ("USER" in $env_cols) {
#     # Set up the per-user profile.
#     NIX_LINK="$HOME/.nix-profile"
    let NIX_LINK = $"($env.HOME)/.nix-profile"
    let NIX_LINK_NEW = ""
#     if [ -n "${XDG_STATE_HOME-}" ]; then
    if "XDG_STATE_HOME" in $env_cols {
#     else
    } else {
#         NIX_LINK_NEW="$HOME/.local/state/nix/profile"
        let NIX_LINK_NEW = $"($env.HOME)/.local/state/nix/profile"
#     fi
    }
#     if [ -e "$NIX_LINK_NEW" ]; then
    if $NIX_LINK_NEW != "" {
#         NIX_LINK="$NIX_LINK_NEW"
        let NIX_LINK = $NIX_LINK_NEW
#     else
    } else {
#     fi
    }

#     # Set up environment.
#     # This part should be kept in sync with nixpkgs:nixos/modules/programs/environment.nix
#     export NIX_PROFILES="/nix/var/nix/profiles/default $NIX_LINK"
    $env.NIX_PROFILES = $"/nix/var/nix/profiles/default ($NIX_LINK)"

#     # Populate bash completions, .desktop files, etc
#     if [ -z "${XDG_DATA_DIRS-}" ]; then
    if "XDG_DATA_DIRS" in $env_cols {
#         # According to XDG spec the default is /usr/local/share:/usr/share, don't set something that prevents that default
#         export XDG_DATA_DIRS="/usr/local/share:/usr/share:$NIX_LINK/share:/nix/var/nix/profiles/default/share"
        $env.XDG_DATA_DIRS = $"/usr/local/share:/usr/share:($NIX_LINK)/share:/nix/var/nix/profiles/default/share"
#     else
    } else {
#         export XDG_DATA_DIRS="$XDG_DATA_DIRS:$NIX_LINK/share:/nix/var/nix/profiles/default/share"
        $env.XDG_DATA_DIRS = $"($NIX_LINK)/share:/nix/var/nix/profiles/default/share"
#     fi
    }

#     # Set $NIX_SSL_CERT_FILE so that Nixpkgs applications like curl work.
#     if [ -e /etc/ssl/certs/ca-certificates.crt ]; then # NixOS, Ubuntu, Debian, Gentoo, Arch
    if ("/etc/ssl/certs/ca-certificates.crt" | path exists) {
#         export NIX_SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
        $env.NIX_SSL_CERT_FILE = "/etc/ssl/certs/ca-certificates.crt"
#     elif [ -e /etc/ssl/ca-bundle.pem ]; then # openSUSE Tumbleweed
    } else if ("/etc/ssl/ca-bundle.pem" | path exists) {
#         export NIX_SSL_CERT_FILE=/etc/ssl/ca-bundle.pem
        $env.NIX_SSL_CERT_FILE = "/etc/ssl/ca-bundle.pem"
#     elif [ -e /etc/ssl/certs/ca-bundle.crt ]; then # Old NixOS
    } else if ("/etc/ssl/certs/ca-bundle.crt" | path exists) {
#         export NIX_SSL_CERT_FILE=/etc/ssl/certs/ca-bundle.crt
        $env.NIX_SSL_CERT_FILE = "/etc/ssl/certs/ca-bundle.crt"
#     elif [ -e /etc/pki/tls/certs/ca-bundle.crt ]; then # Fedora, CentOS
    } else if ("/etc/pki/tls/certs/ca-bundle.crt" | path exists) {
#         export NIX_SSL_CERT_FILE=/etc/pki/tls/certs/ca-bundle.crt
        $env.NIX_SSL_CERT_FILE = "/etc/pki/tls/certs/ca-bundle.crt"
#     elif [ -e "$NIX_LINK/etc/ssl/certs/ca-bundle.crt" ]; then # fall back to cacert in Nix profile
    } else if ($"($NIX_LINK)/etc/ssl/certs/ca-bundle.crt" | path exists) {
#         export NIX_SSL_CERT_FILE="$NIX_LINK/etc/ssl/certs/ca-bundle.crt"
        $env.NIX_SSL_CERT_FILE = $"($NIX_LINK)/etc/ssl/certs/ca-bundle.crt"
#     elif [ -e "$NIX_LINK/etc/ca-bundle.crt" ]; then # old cacert in Nix profile
    } else if ($"($NIX_LINK)/etc/ca-bundle.crt" | path exists) {
#         export NIX_SSL_CERT_FILE="$NIX_LINK/etc/ca-bundle.crt"
        $env.NIX_SSL_CERT_FILE = $"($NIX_LINK)/etc/ca-bundle.crt"
#     fi
    }

#     # Only use MANPATH if it is already set. In general `man` will just simply
#     # pick up `.nix-profile/share/man` because is it close to `.nix-profile/bin`
#     # which is in the $PATH. For more info, run `manpath -d`.
#     if [ -n "${MANPATH-}" ]; then
    if "MANPATH" in $env_cols {
#         export MANPATH="$NIX_LINK/share/man:$MANPATH"
        $env.MANPATH = $"($NIX_LINK)/share/man:($env.MANPATH)"
#     fi
    }

#     export PATH="$NIX_LINK/bin:$PATH"
    std path add $"($NIX_LINK)/bin"
#     unset NIX_LINK NIX_LINK_NEW
# fi
}

Add to $nu.env-path with source activate_nix.nu.


Add flake8

refs #688
This is just to show how little work was needed in the code to get flake8 passing.  If @davidism approves, I could add flake8 to CI and merge this.  I don't think it's impact on future PR requests will be that big.

Let's use Werkzeug's config, I'd like all projects to be consistent. Line length will be 88 to match Black's formatting. We use the flake8-bugbear extension as well for some checks.

The problem with adding CI for this is that any time you merge in an existing PR that doesn't conform, you break CI for all new PRs. The existing PRs don't have the CI config, so you don't see an error until the code you merged shows up in a PR that does have the CI config.

The problem with adding CI for this now is that any time you merge in an existing PR that doesn't conform, you break CI for all new PRs

I usually rebase PRs onto the existing branch before merging.

This is why I generally like to wait until there are no open PRs

Given the number of open PRs even after I cleaned up what I could, and the small amount of time available to maintain this package, I'd rather not wait until all the open PRs are merged and just focus on fixing the PRs prior to merge.

Or we can fully commit to the Pallets style now and apply the other pre-commit hooks like Black as well, with the understanding that we'll need to clean up existing PRs.

I've never needed anything more than flake8, so can't speak to the other tools.  If that means we get a style checker soon, then I'm for it.  :)

Going to close this since I'll be doing this along with a bunch of other style stuff when I add the pre-commit config from the other projects and drop Python 2.


'Copy' button in the Markdown

Hey guys,
Is the copy button meant to appear in my markdown renders on VSTS, when using some code or is that a docs thing here?

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

ID: 63e81f8a-e33c-afb7-493b-f51f40fafd49
Version Independent ID: c9495a96-c3e8-00f1-1e53-da6ce584412b
Content: Syntax usage for Markdown files, widgets, wikis, and pull requests - VSTS & TFS
Content Source: docs/collaborate/markdown-guidance.md
Service: unspecified
Product: devops
GitHub Login: @KathrynEE
Microsoft Alias: kaelli

@garfbradaz Can you paste in a screenshot? Thank you.

Get @steved0x  - thanks for the reply.
Should I get the following "Copy" button in VSTS when using " ``` ":

Any idea why this functionality isn't being considered? I think it would be incredibly useful.

@SudoCerb - You are welcome to propose it as a feature to consider on the Developer Community Page. That is the right place to get visibility.


Pyqt5 issue: FATAL: pyqt5: Plugin issue while working on 'Plugin initialization failed'

Hello,
I have an issue. I guess it might be a dumb one, but I just couldn't figure out why...
System: Windows 10
IDE: Pycharm 2022.3
Python Version: 3.9.13
Nuitka Version: 2.3
PyQt5 Version: 5.15.10
pyqt5-plugins Version: <IP_ADDRESS>.3
pyqt5-tools Version: <IP_ADDRESS>.3
When I use commands like this:
python -m nuitka --standalone --mingw64 --show-progress --show-memory --follow-imports --enable-plugin=pyqt5 --output-dir=output NuitkaTest.py
it will always shows errors as following: (I tried many different combinations of different versions of Nuitka and Pyqt5, and it always ended up with these errors. As long as I removed "--enable-plugin=pyqt5" from the commands, it will finish packing, however the exe can not run without plugin.)

PS D:\GitHub\Test> python -m nuitka --standalone --mingw64 --show-progress --show-memory --follow-imports --enable-plugin=pyqt5 --output-dir=output NuitkaTest.py
Nuitka-Options: Used command line options: --standalone --mingw64 --show-progress --show-memory --follow-imports --enable-plugin=pyqt5 --output-dir=output NuitkaTest.py
Nuitka-Options: Following all imports is the default for standalone mode and need not be specified.
Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\plugins\Plugins.py", line 69, in withPluginProblemReporting
result = NuitkaPluginQtBindingsPluginBase._getQtInformation(self)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\plugins\standard\PySidePyQtPlugin.py", line 261, in _getQtInformation
info = self.queryRuntimeInformationMultiple(
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\plugins\PluginBase.py", line 1234, in queryRuntimeInformationMultiple
feedback = check_output([sys.executable, "-c", cmd], env=env)
result = NuitkaPluginQtBindingsPluginBase._getQtInformation(self)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\plugins\standard\PySidePyQtPlugin.py", line 261, in _getQtInformation
info = self.queryRuntimeInformationMultiple(
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\plugins\PluginBase.py", line 1234, in queryRuntimeInformationMultiple
feedback = check_output([sys.executable, "-c", cmd], env=env)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\utils\Execution.py", line 130, in check_output
raise NuitkaCalledProcessError(exit_code, cmd, output=output, stderr=stderr)
nuitka.utils.Execution.NuitkaCalledProcessError: Command '['C:\Users\Administrator\AppData\Local\Programs\Python\Python39\python.exe', '-c', '\\nfrom future import print_function\nfrom future import absolute_import
n\ntry:\n   \n   import os\n   import PyQt5.QtCore\nexcept ImportError:\n    import sys\n    sys.exit(38)\nprint(repr(PyQt5.QtCore.QCoreApplication.libraryPaths()))\nprint("-" * 27)\nprint(repr(os.path.join(os.path.dirname(PyQt5.f
ile), 'plugins')))\nprint("-" * 27)\nprint(repr(os.path.join(os.path.dirname(PyQt5.file), '..', '..', '..', 'Library', 'plugins')))\nprint("-" * 27)\nprint(repr(PyQt5.QtCore.PYQT_VERSION_STR))\nprint("-" * 27)\npri
nt(repr(getattr(PyQt5, '_nuitka_patch_level', 0)))\nprint("-" * 27)\nprint(repr(PyQt5.QtCore.QLibraryInfo.location(PyQt5.QtCore.QLibraryInfo.TranslationsPath)))\nprint("-" * 27)\nprint(repr(PyQt5.QtCore.QLibraryInfo.location(PyQt5
.QtCore.QLibraryInfo.LibraryExecutablesPath)))\nprint("-" * 27)\nprint(repr(PyQt5.QtCore.QLibraryInfo.location(PyQt5.QtCore.QLibraryInfo.DataPath)))\nprint("-" * 27)\n']' returned non-zero exit status 1. Error was b'File "",
line 1\r\n    \\r\n     ^\r\nSyntaxError: unexpected EOF while parsing'.
FATAL: pyqt5: Plugin issue while working on 'Plugin initialization failed'. Please report the bug with the above traceback included.

Here are my code for testing:
import sys
import logging
import queue
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QTextEdit, QPushButton, QLineEdit
from PyQt5.QtCore import QThread, pyqtSignal

class QueueHandler(logging.Handler):
    def __init__(self):
        super().__init__()
        self.queue = queue.Queue()
        self.formatter = logging.Formatter('%(levelname)s: %(message)s')
        self.setFormatter(self.formatter)

    def emit(self, record):
        self.queue.put(record)

amazinglogger = logging.getLogger('whipx_logger')
amazinglogger.setLevel(logging.DEBUG)
amazinghandler = QueueHandler()
amazinglogger.addHandler(amazinghandler)

class LoggerThread(QThread):
    log_signal = pyqtSignal(str)

    def __init__(self, logger):
        super().__init__()
        self.logger = logger

    def run(self):
        while True:
            record = self.logger.handlers[0].queue.get()
            formatted_record = self.logger.handlers[0].format(record)
            self.log_signal.emit(formatted_record)

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Claude Assistant')
        self.resize(400, 300)

        layout = QVBoxLayout()
        self.text_edit = QTextEdit()
        self.text_edit.setReadOnly(True)
        layout.addWidget(self.text_edit)

        self.lineEdit = QLineEdit()
        layout.addWidget(self.lineEdit)

        self.button = QPushButton('Start Logging')
        self.button.clicked.connect(self.start_logging)
        layout.addWidget(self.button)

        self.setLayout(layout)

        self.logger_thread = LoggerThread(amazinglogger)
        self.logger_thread.log_signal.connect(self.update_text_edit)
        self.logger_thread.start()

    def start_logging(self):
        text = self.lineEdit.text() + " --> yes~~"
        amazinglogger.debug(text)
        amazinglogger.info(text)

    def update_text_edit(self, message):
        self.text_edit.append(message)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

Thanks for your help!

Unfortunately you didn't fill out the issue template, the --version output would be very much needed

Unfortunately you didn't fill out the issue template, the --version output would be very much needed

Sorry, are the following infos that you need?
Flavor: CPython Official
Executable: C:\Users\Administrator\AppData\Local\Programs\Python\Python39\python.exe
OS: Windows
Arch: x86_64
WindowsRelease: 10
Version C compiler: ~\AppData\Local\Nuitka\Nuitka\Cache\DOWNLO~1\gcc\x86_64\13.2.0-16.0.6-11.0.1-msvcrt-r1\mingw64\bin\gcc.exe (gcc 13.2.0).

You failed to properly include the error messages without a bunch of new lines thrown into the mix, I cannot recognize what could be the SyntaxError claimed there. Since you also failed to provide a pip listing, hard to tell what you are using. For me newest PyQt5 works for both 3.9 and 3.10 from PyPI.
They wouldn't be able to create a SyntaxError about EOF that easily though anyway.
I was using
PyQt5==5.15.10
PyQt5-Qt5==5.15.2
PyQt5-sip==12.13.0

I am giving up on this one, since you failed to provide information properly in the first place.


New Release Planner UX feedback

Help

[x] Format - Unnecesary caps

[x] Should be Report a bug

[x] Should be:

Open a GitHub issue

Post in Teams channel (same for the help text here Teams channel

Dashboard

[x] Does the Good morning thing changes according to the browser time fo the user?

[x] I think it should be Last modified

Your release plans

[x] REST API scope

Release ...

[x] Diagram not loading. I copied the release plan link and opened in a new tab and that is when it didn't load:

Schedule a review ui

[x] We can improve the text to View or schedule meetings with the Azure SDK PMs, the Azure API stewardship board, and the SDK review board for the current release plan.

[x] Reviews are not showing up after scheduled. For example I scheduled an API review. I had to get out of the Release plan and click it again. Maybe this is ok for now but calling it out just in case:

Onboard your product

[x] Link to docs should be https://eng.ms/docs/products/azure-developer-experience/onboard
[x] I would consider changing API to REST API. so for example REST API details.

[x] I was expecting that by clicking I am not sure that everything else was going to get unchecked. it is confusing otherwise.

[x] Azure REST API specs repositories

[x] Consider removing the text Check all boxes that apply as there is only one box

[ ] Consider throwing error if the user checks the checkbox but doesn't provide the SDKs

[ ] Should we check this is a valid PR?

[ ] Uncheck management plane and RPaaS is automatically checked

[ ] Error when onboarding a product (looks like the tittle was empty? I selected a Service that didn;'t have a product):

I still got the prompt to schedule an informational meeting (I selected unsure). I would expect this to not happen if there was a failure
-[ ] When we onboard a product that says Yes to Data plane, the triage field Info meeting State needs to have value Required. I added this code and idk if I missed the comment or it got lost in the move to the new UI

Does the Good morning thing changes according to the browser time fo the user?

It does: Good Morning / Afternoon / Evening

Diagram not loading. I copied the release plan link and opened in a new tab and that is when it didn't load:

This is a weird visual bug; I have to investigate more why it's not showing up

Reviews are not showing up after scheduled. For example I scheduled an API review. I had to get out of the Release plan and click it again. Maybe this is ok for now but calling it out just in case:

I added a "refresh" button, so user don't have to reload the page

Consider throwing error if the user checks the checkbox but doesn't provide the SDKs

Instead of throwing an error, I can prevent them from continuing to the next step. Just to be sure, if they click this button, then they must provide the published SDKs list too?

Consider throwing error if the user checks the checkbox but doesn't provide the SDKs

Instead of throwing an error, I can prevent them from continuing to the next step. Just to be sure, if they click this button, then they must provide the published SDKs list too?

hmm now I am doubting... feature wise I think u are right. they shouldn't be able to continue if they don't say which SDKs. The problem is that the current list is not working very well.... (we haven't look into it but there is an issue for it).. so idk...
... ok, let's allow them to check and not select SDKs. until we fix the bug.

Should we check this is a valid PR?

Yes! I added the same validation we're doing in the API Readiness app, plus the extra option "N/A" which the PM uses sometimes for onboarding. This is what it looks like now:

Error when onboarding a product (looks like the tittle was empty? I selected a Service that didn;'t have a product):image
I still got the prompt to schedule an informational meeting (I selected unsure). I would expect this to not happen if there was a failure

@maririos can you give me more details on how to replicate this problem? Did you tried to onboard a service (service with no products)?

Did you try to onboard a service (service with no products)?

Correct

When we onboard a product that says Yes to Data plane, the triage field Info meeting State needs to have value Required. I added this code and idk if I missed the comment or it got lost in the move to the new UI

Added this logic back. Just one question, does it also apply when updating existing work items?
For example, if the value was Completed but then the service team onboards again and overwrite it, should it be set to Required again? or should I keep Completed?

When we onboard a product that says Yes to Data plane, the triage field Info meeting State needs to have value Required. I added this code and idk if I missed the comment or it got lost in the move to the new UI

Added this logic back. Just one question, does it also apply when updating existing work items? For example, if the value was Completed but then the service team onboards again and overwrite it, should it be set to Required again? or should I keep Completed?
Right now is overwriting it to Required no matter what value had.

@ladonnaq could you help answer this question?


Add custom 404 page

Here is the current appearance of 404 page
Light Theme

Dark Theme

fix #299


Improvements to missing team errors

The existing code made wrong assumptions on the return type of the getTeam method, fixed that and improved error messaging.
When running bosco team:

when running bosco run -d

Coverage decreased (-0.02%) to 21.08% when pulling d74f2a11d9fba2b91e0f76ddd7bb695a3beb0a73 on no-team-improvements into c7dac38fba383519005a76f77d2a18ee79bc843f on master.


Right Truncation in NSSP Demo

This PR enables model fitting with right-truncation estimates provided by NNH.

Thanks @dylanhmorris. Will address your comments and probably merge this back into the original model with optional right truncation.


centering fix

I'm using Manjaro Sway and I had issues with theme centering before this fix

Hey, thanks for the PR.
You have added two commits to this PR:

centering fix (updated ~2h ago)
add windows size in pixels (updated ~40min ago)

I am asking because the PR was opened ~2h ago and the title of the PR is just "centering fix" - which is the message of first commit.
If you meant to open a PR for both commits, please add more description. Or even better, make two PRs.

I made a second pull request,


Should the Arrow components sever their version history with OTLP exporter/receiver

Until now, the Arrow components have been maintained as derivatives of the OTLP exporter and receiver. They aim to maintain drop-in configuration compatibility, to make upgrading to Arrow very easy for users. When using gRPC, Arrow-enabled clients can send Arrow or standard OTLP, which makes a seamless upgrade possible. Presently, it would be relatively easy to merge the Arrow components into the core. This merge would be more difficult without this shared history. Maintaining drop-in compatibility going forward is also easier this way, through periodic re-synchronization with the original branch history.
However, this maintenance has a cost, and it may be time to abandon the shared history. Here are the downsides:

Component code is less readable, because it retains OTLP-specific variable naming in most places. We can't apply janitorial changes because it will make merges harder in the future. (The code is largely unmodified from the OTLP components, with only new internal/arrow code added.)
The receiver component includes an entire HTTP receiver, unmodified from the OTLP receiver. This is unnecessary baggage for the otelarrow exporter, unless we move to add HTTP support in the future. (Which has been requested.) In the present, it just means a lot of code unnecessarily duplicated with the core components.
It leads to confusing validation logic, because the validation logic is shared w/ the HTTP aspect of the receiver component. For example.

If we decided to abandon the version history, we could remove the HTTP receiver and clean up the code in a bunch of ways. This would make future compatibility with the OTLP Exporter/Receiver a more manual process.

@jmacd I can see the benefit of separating these two pairs of receiver/exporter in the specific context of optimizing OTel internet traffic between two collectors whose configuration is perfectly known and controlled. However, the current approach seems more appropriate between clients and a collector because it is a context where the configurations of all these actors are more difficult to align uniformly.
In my opinion, this separation is conceivable in phase 1 (current phase) but in my view, it will be necessary to be able to have this automatic fallback mechanism between OTLP and OTel Arrow in phase 2 for maximum flexibility (i.e. Client SDK supporting OTel Arrow and end-to-end support of OTel Arrow pipelines in the collector).

Here's my opinion: the HTTP support is worth keeping, even though it looks extraneous, because if this protocol is a success we can expect users to want to use it directly over HTTP/2 streams. This allows us to advisers to simply replace their OTLP exporter and receiver with OTel Arrow components, period.

As a user, I would find confusing being able to configure the HTTP protocol, but getting the benefits of arrow for it. In other words, I would rather see an error (ie. http not supported) than to have it quietly continue to work, but it's not doing what I expect it to.

have it quietly continue to work, but it's not doing what I expect it to.

If the user is using an HTTP exporter, it will work the way HTTP exporters are expected to work.
If they are using a OTLP/gRPC exporter, it will work the way gRPC exporters are expected to work.
If they are using an OTel Arrow exporter, it will work ...
I'm not sure this is any more confusing than having the core OTLP receiver support two protocols. If we leave HTTP support as it stands, then the upgrade from OTLP receiver to Arrow receiver is straightforward. If we don't, it's not. I'll have to give instructions like to replace this.
receivers:
  otlp:
    protocols:
      http: ...
      grpc: ...

with
receivers:
  otlp:
    protocols:
      http: ...
  otelarrow:
    protocols:
      grpc: ...

Another way to think about it is that OTel Arrow is just another form of OTLP, and we have a receiver here that can accept data in all three forms. Given the easier drop-in, the possibility of adding HTTP/OTel-Arrow in the future, and the existence of otlpreceiver with two transports already, and the loss of coordinated version history if we diverge too far, I think removing HTTP from otel-arrow is a net loss for the project.

This was decided. The early history has been archived, and we are independent now from the OTLP upstream.


Memoize version on startup

Thanks for sending a pull request! Here are some tips if you're new here:

Ensure you have added or run the appropriate tests for your PR.
Be sure to keep the PR description updated to reflect all changes.
Write your PR title to summarize what this PR proposes.
If possible, provide a concise example to reproduce the issue for a faster review.
Read our contributor guidelines
If you're making a documentation change, see our guide to documentation contribution

Commit messages should follow the following format:
<One sentence description, usually Jira title or CHANGES.txt summary>

<Optional lengthier description (context on patch)>

patch by <Authors>; reviewed by <Reviewers> for CASSANDRA-#####

Co-authored-by: Name1 <email1>
Co-authored-by: Name2 <email2>

The Cassandra Jira

https://app.circleci.com/pipelines/github/jacek-lewandowski/cassandra/1244/workflows/a9a0904d-e339-47c6-89e0-146d51935f96

https://app.circleci.com/pipelines/github/jacek-lewandowski/cassandra/1252/workflows/234ccc92-65f2-4adb-a68a-a5505398f4d0
https://app.circleci.com/pipelines/github/jacek-lewandowski/cassandra/1252/workflows/a10c9859-3ded-42eb-804b-97dad97bbd2f


[TO REFINE] Register extension into CWS

We'd eventually want to automate (whatever possible parts of) the publishing.
https://jam.dev/blog/automating-chrome-extension-publishing/
https://github.com/fregante/chrome-webstore-upload-cli

As a user, I want the WM extension to be available on the Chrome Web Store
So I can easily install it and use it.
Acceptance Criteria

This release will be published on the CWS as BETA with visibility set to unlisted.
Only users with direct link to the store listing will be able to install it.
Documentation on how to publish to CWS.

Extension is now available on the store.


ocamlPackages.ogg: 0.7.2 -> 0.7.3

Automatic update generated by nixpkgs-update tools. This update was made based on information from https://repology.org/metapackage/ocaml4.14.0-ogg/versions.
meta.description for ocamlPackages.ogg is: "Bindings to libogg"
meta.homepage for ocamlPackages.ogg is: "https://github.com/savonet/ocaml-ogg"
meta.changelog for ocamlPackages.ogg is: ""
Updates performed

Version update

To inspect upstream changes

Release on GitHub

Compare changes on GitHub

Impact

Checks done (click to expand)

built on NixOS
Warning: a test defined in passthru.tests did not pass
found 0.7.3 with grep in /nix/store/9gjmxcb00nlknp0ys01lwd8hmral0y1i-ocaml4.14.0-ogg-0.7.3
found 0.7.3 in filename of file in /nix/store/9gjmxcb00nlknp0ys01lwd8hmral0y1i-ocaml4.14.0-ogg-0.7.3

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

1 total rebuild path(s)

1 package rebuild(s)

First fifty rebuilds by attrpath
liquidsoap

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/9gjmxcb00nlknp0ys01lwd8hmral0y1i-ocaml4.14.0-ogg-0.7.3 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A ocamlPackages.ogg https://github.com/r-ryantm/nixpkgs/archive/708c2c6ba8da7cd8dd3329b6f21a23ae1a93a3aa.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/9gjmxcb00nlknp0ys01lwd8hmral0y1i-ocaml4.14.0-ogg-0.7.3
ls -la /nix/store/9gjmxcb00nlknp0ys01lwd8hmral0y1i-ocaml4.14.0-ogg-0.7.3/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

8 packages built:

liquidsoap
ocamlPackages.flac
ocamlPackages.mm
ocamlPackages.ogg
ocamlPackages.opus
ocamlPackages.speex
ocamlPackages.theora
ocamlPackages.vorbis

Maintainer pings
cc @dali99 for testing.

Result of nixpkgs-review pr 189373 run on x86_64-linux 1

1 package built:

liquidsoap

Result of nixpkgs-review pr 189373 run on x86_64-linux 1

8 packages built:

liquidsoap
ocamlPackages.flac
ocamlPackages.mm
ocamlPackages.ogg
ocamlPackages.opus
ocamlPackages.speex
ocamlPackages.theora
ocamlPackages.vorbis


RFC: Neon support (pretty much working)

Hello hello!
I have been pulling some of your Neon intrinsics and porting the
simdjson neon code. Maybe it's useful! I'll keep improving it...
Comments welcome anytime!
All the best,
-Sunny

That’s a great start!

We should have all the intrinsics (somewhat working) now! :D some are still brokenish however

@Licenser I've uploaded some more work -- looking forward to your feedback! The intrinsics are mostly self-contained in intrinsics.rs; if you see any corrections/substitutions I can make, that would be awesome. I've mostly been just trying to get things to compile. I feel like we're getting pretty close once the intrinsics are valid!

Did a quick pass over your comments :) it's a bit late here so I'll take a closer look tomorrow.

@Licenser I think we're getting closer. My main issue now is how to get around these errors:
`error: `extern` block uses type `neon::intrinsics::int8x16_t` which is not FFI-safe: this struct has unspecified layout

Overall, seems like we're getting closer...

@Licenser ok, have it mostly building. Now I'm hitting issues in the compiler/link step I believe:
LLVM ERROR: Do not know how to scalarize the result of this operator!

So on a aarch64 cpu this compiles!

@Licenser I think I'm at a point where I could use some help. I've cross-checked the implementation with the C++ version -- things seem mostly ok, but still only 21 tests pass. It would be great to have another set of eyes check this out! Thank you so much for your help.

Sure! There is a real chance that there is a bug in the intrinsics, who knows if I messed something up there :P it's not merged yet and for good reasons.
So I did a bit of the good old println debugging (or dbg! :P). It looks like things go bananas in flatten_bits.
With the input [1] (count2 test) the input and output is the following:
Before the call:
[src/neon/stage1.rs:521] &structurals = 7
[src/neon/stage1.rs:522] &idx = 64
[src/neon/stage1.rs:523] &structural_indexes = [
    0,
]

structurals is 7 (correct) 4 + 2 + 1 (first three bits, the first 3 characters are structurals, that's good!)
index: 64 since we had input length = 3 and we add 64 (we process that at a time) to the input (this might be where it geos wrong? but it's the same on avx and sse, so it should be right)
After the call:
[src/neon/stage1.rs:525] &structurals = 7
[src/neon/stage1.rs:526] &idx = 64
[src/neon/stage1.rs:527] &structural_indexes = [
    0,
    64,
    2,
    1,
]

this is after the call, indexes are 0, 64, 2 and 1. I suspect that is where we go oops, it should be 0, 1, 2, 3. I'll take a peak at flatten_bits and the intrinsics in it.

@Licenser that makes sense, I'm seeing the same thing - bad character at index 64. I have augmented my code with println debugging so I will be able to get back to it later this evening -- in the meantime, thank you so much for your help!  :)

Not everything is working but the following diff makes quite a difference:
diff --git a/src/neon/stage1.rs b/src/neon/stage1.rs
index a1e15a1..2af15e6 100644
--- a/src/neon/stage1.rs
+++ b/src/neon/stage1.rs
@@ -332,7 +332,7 @@ unsafe fn flatten_bits(base: &mut Vec<u32>, idx: u32, mut bits: u64) {
         let v3: i32 = static_cast_i32!(trailingzeroes(bits));
         bits &= bits.wrapping_sub(1);

-        let v: int32x4_t = int32x4_t::new(v3, v2, v1, v0);
+        let v: int32x4_t = int32x4_t::new(v0, v1, v2, v3);
         let v: int32x4_t = vaddq_s32(idx_64_v, v);

         std::ptr::write(base.as_mut_ptr().add(l) as *mut int32x4_t, v);

here is another one:
diff --git a/src/numberparse.rs b/src/numberparse.rs
index 425d16a..b44d320 100644
--- a/src/numberparse.rs
+++ b/src/numberparse.rs
@@ -133,10 +133,10 @@ pub enum Number {
 fn parse_eight_digits_unrolled(chars: &[u8]) -> u32 {
     let val: u64 = unsafe { *(chars.as_ptr() as *const u64) };
     //    memcpy(&val, chars, sizeof(u64));
-    let val = (val & 0x0F0F0F0F0F0F0F0F) * 2561 >> 8;
-    let val = (val & 0x00FF00FF00FF00FF) * 6553601 >> 16;
+    let val = (val & 0x0F0F0F0F0F0F0F0F).wrapping_mul(2561) >> 8;
+    let val = (val & 0x00FF00FF00FF00FF).wrapping_mul(6553601) >> 16;

-    return ((val & 0x0000FFFF0000FFFF) *<PHONE_NUMBER>0001 >> 32) as u32;
+    return ((val & 0x0000FFFF0000FFFF).wrapping_mul(42949672960001) >> 32) as u32;
 }

 impl<'de> Deserializer<'de> {

With those two we're up to 66 passing tests.
That said we shouldn't generally fall back to the slow parse_eight_digits_unrolled, it should be architecture specific I think.

The remaining failing tests are:
    tests::crazy_string
    tests::map2
    tests::odd_array2
    tests::odd_array3
    tests::odd_array4
    tests::prop_json
    tests::prop_json_encode_decode
    tests::unicode
    tests::utf8

I gut feeling says it's unicode/utf8 related as all ood_* cases also include silly UTF8 strings.

That's awesome. The utf8 stuff has a lot of weirdness with 'u8' vs 'i8' vs 's8' and reinterpretation, so I'm not totally surprised. It could be reinterpretation issue, or me slightly modifying intrinsic(s). Pretty awesome to be at 66 passing tests, nice work!

(Also, I can confirm the 66 passing tests in my ARM environment)

All credit to you on the work I just swapped a * with a wrapping_mul (rust trivia: that would have worked in a release build AFAIK overflow checks are only enabled in dev / test builds) and changed the order of 4 variables :P I got the easy part!

OK, this is getting slightly closer, I think I messed up padding earlier. It might have to do with endian-ness? I think this latest patch provides more info. Any ideas?

Oh! I think I'm close - it seems to be an issue with how null bytes are handled?

Any thoughts?

The most basic test case I see failing is this:
---- tests::utf8 stdout ----
thread 'tests::utf8' panicked at 'assertion failed: `(left == right)`
  left: `String("\"")`,
 right: `"\u{e}"`', src/lib.rs:637:9

that could be either a copy or off by one error. I'll dig a little

So for the input "\u000e"
 let ParseStringHelper { bs_bits, quote_bits } = unsafe { find_bs_bits_and_quote_bits(&srcx, None) };

returns
[src/neon/deser.rs:85] &(bs_bits, quote_bits) = (
    1,
    64,
)

i think the quote bits should be 0 I think (will need to double check) but the 64 on the backslash seems definetly off.

OK, so a little hacking and slashing makes me think maybe the store intrinsics aren't working as expected? (see latest commit). There is still one failing test, odd_array2, and the value-based tests for some reason...

The following reduces it to 4 errors. It moves the copying in the string parse instead of the find bits and also gets rid of the nasty Option there.
diff --git a/src/lib.rs b/src/lib.rs
index f9ddb97..9f095f4 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -181,7 +181,10 @@ impl<'de> Deserializer<'de> {

         let counts = Deserializer::validate(input, &structural_indexes)?;

-        let strings = Vec::with_capacity(len + SIMDJSON_PADDING);
+        let mut strings = Vec::with_capacity(len + SIMDJSON_PADDING);
+        unsafe{
+            strings.set_len(len + SIMDJSON_PADDING);
+        }

         Ok(Deserializer {
             counts,
diff --git a/src/neon/deser.rs b/src/neon/deser.rs
index 65f744a..f422b3a 100644
--- a/src/neon/deser.rs
+++ b/src/neon/deser.rs
@@ -10,20 +10,12 @@ pub use crate::stringparse::*;

 pub use crate::neon::intrinsics::*;

-unsafe fn find_bs_bits_and_quote_bits(src: &[u8], dstx: Option<&mut [u8]>) -> ParseStringHelper {
+unsafe fn find_bs_bits_and_quote_bits(src: &[u8]) -> ParseStringHelper {
     // this can read up to 31 bytes beyond the buffer size, but we require
     // SIMDJSON_PADDING of padding
     let v0 : uint8x16_t = vld1q_u8(src.as_ptr());
     let v1 : uint8x16_t = vld1q_u8(src.as_ptr().add(16));

-    match dstx {
-        Some(dst) => {
-            vst1q_u8(dst.as_mut_ptr(), v0);
-            vst1q_u8(dst.as_mut_ptr().add(16), v1);
-        },
-        _ => ()
-    }
-
     let bs_mask : uint8x16_t = vmovq_n_u8('\\' as u8);
     let qt_mask : uint8x16_t = vmovq_n_u8('"' as u8);

@@ -81,7 +73,7 @@ impl<'de> Deserializer<'de> {
                 }
             };

-            let ParseStringHelper { bs_bits, quote_bits } = unsafe { find_bs_bits_and_quote_bits(&srcx, None) };
+            let ParseStringHelper { bs_bits, quote_bits } = unsafe { find_bs_bits_and_quote_bits(&srcx) };

             if (bs_bits.wrapping_sub(1) & quote_bits) != 0 {
                 // we encountered quotes first. Move dst to point to quotes and exit
@@ -120,7 +112,7 @@ impl<'de> Deserializer<'de> {
         }

         let mut dst_i: usize = 0;
-        let dst: &mut [u8] = &mut self.strings;
+        let dst = self.strings.as_mut_slice();

         loop {
             let srcx = if src.len() >= src_i + 32 {
@@ -133,10 +125,11 @@ impl<'de> Deserializer<'de> {
                     &padding
                 }
             };
+            dst[dst_i..dst_i+32].copy_from_slice(&srcx[..32]);

             // store to dest unconditionally - we can overwrite the bits we don't like
             // later
-            let ParseStringHelper { bs_bits, quote_bits } = unsafe { find_bs_bits_and_quote_bits(&srcx, Some(dst)) };
+            let ParseStringHelper { bs_bits, quote_bits } = unsafe { find_bs_bits_and_quote_bits(&srcx) };

             if (bs_bits.wrapping_sub(1) & quote_bits) != 0 {
                 // we encountered quotes first. Move dst to point to quotes and exit
@@ -213,4 +206,4 @@ impl<'de> Deserializer<'de> {
             }
         }
     }
-}
\ No newline at end of file
+}

@Licenser I think the issue is with the ARM pmull64 intrinsic. On aarch64, I'm seeing
bits in front of the mask that look possibly like sign extension. On x86, the mask
has no leading 1 bits. Do you have any ideas to remedy this?
(arm is unhappy, see QTM line)

(sse42 is ok, see QTM line)

So I'm a bit stumped at the last few remaining butgs, I was looking at the unicode test and it seems the escape in it isn't recognized.

ah damn GH not updating :/ sorry I just now saw you came to the same conclusion.
the pmull intrinsic is a tricky one, I've not writte a test for it since from the manual (https://developer.arm.com/architectures/instruction-sets/simd-isas/neon/intrinsics?search=vmull_p64) I don't fully understand what it's supposed to do.
That said it does link to a llvm intrinsic so has no custom code but it could be the wrong intrinsic that it links against?
your screenshots are nicer then my printf debugging :joy: so I'll just comment on them.
To test I've ported the 'portable / non simd' version:
fn compute_quote_mask(quote_bits: u64) -> u64 {
  let quote_mask = quote_bits ^ (quote_bits << 1);
  let quote_mask = quote_mask ^ (quote_mask << 2);
  let quote_mask = quote_mask ^ (quote_mask << 4);
  let quote_mask = quote_mask ^ (quote_mask << 8);
  let quote_mask = quote_mask ^ (quote_mask << 16);
  quote_mask ^ (quote_mask << 32)
}

but it seems to have the same result on my tests, the backslash is not counted correctly. I have the feeling we're missing something trivial.

looking at it step by step things go off with odd_carry_ends I think:
backslashes:<PHONE_NUMBER>
backslashes:<PHONE_NUMBER>
even_carries:<PHONE_NUMBER>
bs_bits:<PHONE_NUMBER>
even_carries:<PHONE_NUMBER>
even_carry_ends:                                                                   0

@Licenser yes! I think we found that at the same time. Running tests now, maybe this is it!

Nice find! that makes all the basic tests pass :D so for me the jsonchecker tests now fail :(

update: fail34 is the offending test at the moment.

I think that's the only left failing :D

So a little digging, it fails because the it doesn't fail on invalid utf8.

So I your code highlighted a bug in the intrinsics. They returned the wrong type which made the code need a lot more vreinterpret calls. If you want to pull them in that might clean up some of the issues.

@Licenser you're absolutely correct, thank you! Tests are passing now, check it out!
I guess next step is cleanup/beautification? ... Looking forward to your thoughts in that area!

Damn nice work sunny! :D and good call on copying the intrinsics over to not be blocked in the upstream MR!
I'll go over it and put in some comments / thoughts :)

Awesome, and compliments right back at you -- thanks for having the
bravery to dive into implementing the intrinsics in the first place! :)

Quick thing: can you add the following diff to the drone.yaml:
diff --git a/.drone.yml b/.drone.yml
index 9b8e8bb..8ceef40 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -58,5 +58,5 @@ steps:
 - name: test
   image: rust:1
   commands:
-  - cargo build --verbose --all
-  - cargo test --verbose --all
+  - cargo +nightly build --verbose --all
+  - cargo +nightly test --verbose --all

we'll need nightly for the tests so we might see them passing

@Licenser is it an easy tweak to add this to drone CI?

darn, it seems we need another image this might need a thing or two of experimentation, lets try
libdidiff --git a/.drone.yml b/.drone.yml
index 9b8e8bb..74813b3 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -56,7 +56,7 @@ platform:

 steps:
 - name: test
-  image: rust:1
+  image: rustlang/rust:nightly
   commands:
   - cargo build --verbose --all
   - cargo test --verbose --all

If that does't work we might need a combination of both but I don't think we do. Sorry for that oversight.

Hm, not quite. Maybe we could add a rustup install nightly command to the previous config? Or any idea you have, which is probably better  :)

Good idea, the error seems to hint to the fact that the image doesn't exist for arm, so perhaps back to the library image (rust:1) and as you suggest do a rustup install nightly on that.
Sadly the "lets get the CI play ball" part is just about trying random combinations of YAML until it works 😂

@Licenser drone CI works! (for arm64) 🎉

@Licenser what's the best way to handle that portability commit - would you be able to rebase your arm branch?

Was about todo that :D

OK, this should be better!

let me know what the strategy should be re: nightly & merging
arch refactor preview here : https://github.com/sunnygleason/simdjson-rs/pull/1/files
I'll stay tuned for any other comments/questions/concerns, thanks again!

@Licenser ok this is weird, arm64 passes for me in EC2 but not on drone. Are you able to repro the test failure?

@Licenser success!

We are getting there :D

Now I just need to get the last 5 intrinsics working :/ I split the MR in the hope that we can get 90% merged while I try to wrangle the remaining ones.

Now I just need to get the last 5 intrinsics working :/ I split the MR in the hope that we can get 90% merged while I try to wrangle the remaining ones.

@Licenser ok, hopefully it works! :)


fix: hide staking and add shared wallet options when in shared wallet

Checklist

[x] JIRA - LW-10986, LW-11579
[ ] Proper tests implemented
[x] Screenshots added.

Proposed solution
Hide staking and add shared wallet options when in shared wallet
Screenshots

Allure Report
allure-report-publisher generated test report!

processReports: ✅ test report for 34fbad9b

passed
failed
skipped
flaky
total
result

Total
32
0
4
0
36
✅


Amend vulgar bit of the README?

It's a bit sensationalist, but also remarkably vulgar. Is this really necessary?

Yes, it's really necessary. And the most importantly in Russian it's a well-known phrase which is often used to speak about obsolete technologies.

The connotations in English are a bit different. I urge you to reconsider. 🙂

I just looked at this issue again, and I don't think they generate notifications, so I just wanted to note that there's 7 👍  right now.


Does not properly identify Microsoft Edge

Microsoft's new browser, Edge, is mistakenly identified as IE.

I added a test to case that reproduces this result.

Test with edge in Windows10 64bit:

User Agent Matching
✖
should correctly identify Firefox 40.0 on Windows 10.0
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Firefox 40.0 on OS X 10.11
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Chrome 44.0.2403.157 on Windows 10.0
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Chrome 44.0.2403.157 on OS X 10.11.0
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Internet Explorer 7.0 on Windows Vista
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Internet Explorer 8.0 on Windows Vista
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Internet Explorer 9.0 on Windows 7
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Internet Explorer 10.0 on Windows 8
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Internet Explorer 11.0 on Windows 8.1
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Edge 12.10136 on Windows 10.0
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Safari 9.0 on iOS 9.1
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Safari 9.0.3 on OS X 10.11.0
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)

Same problem with ie11 (still on windows10 64bit)

For now, you need to execute npm run build before testing.

On Jan 29, 2016, at 3:19 AM, laltroweb<EMAIL_ADDRESS>wrote:
Test with edge in Windows10 64bit:
User Agent Matching
✖
should correctly identify Firefox 40.0 on Windows 10.0
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Firefox 40.0 on OS X 10.11
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Chrome 44.0.2403.157 on Windows 10.0
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Chrome 44.0.2403.157 on OS X 10.11.0
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Internet Explorer 7.0 on Windows Vista
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Internet Explorer 8.0 on Windows Vista
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Internet Explorer 9.0 on Windows 7
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Internet Explorer 10.0 on Windows 8
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Internet Explorer 11.0 on Windows 8.1
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Edge 12.10136 on Windows 10.0
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Safari 9.0 on iOS 9.1
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
✖
should correctly identify Safari 9.0.3 on OS X 10.11.0
‣
TypeError: Object doesn't support property or method 'browserReportSync'
at Anonymous function (user.agent.parsing.js:1:484)
Same problem with ie11 (still on windows10 64bit)
—
Reply to this email directly or view it on GitHub.

Testing now using index.js and no longer requires building first.

Fixed Edge detection in v2.2.1.

keithws, please, wen u have time, can u  test if work for u with ie11 and/or edge?
in my website, with this (and only with this) seems to not work as expected (or work only when i open page and no more after refresh or reload) :/
https://laltroweb.it/tools/mbinfo/

The sample works well for me in IE11 on Windows 7.

Unfortunately, my Edge on Windows 10 virtual machine is not working.

Ok, i've update just now, and seems to work fine, thank'u :)
i've a small request... can u change this tipe of parenthesis: {{+}} to this: [[+]]?
this: {{ in some script cause more problem. eg: i've integrated inside invision and {{ }} parse code as php - and this cause an internal error. no problem with [[ ]] (so, i need to edit any time)
also, do u know this website? https://www.whatismybrowser.com/
it provide an api also in free release, and an user agent parser: https://www.whatismybrowser.com/developers/tools/user-agent-parser/
maybe it can be result useful :)


Next suggestion shortcut doesn't work on macOS

Describe the bug
A clear and concise description of what the bug is.
The shortcut should move to the next suggestion in the list. I tried many mappings, but none of them work.
To Reproduce
Steps to reproduce the behavior:

Go to 'New note'
Write text until multiple suggestions [eg. 1/2] appear.
Press the Keyboard shortcut on macOS Sonoma
See no change in suggestion

Expected behavior
A clear and concise description of what you expected to happen.
The shortcut should move to the next suggestion in the list without any issues.
Screenshots
If applicable, add screenshots to help explain your problem with console logs if possible.
Obsidian and environment (please complete the following information):

OS: macOS Sonoma 14.5
Obsidian version: Version 1.6.7
Plugin version [e.g. 1.0.0] : Version: 1.0.10

Additional context
Add any other context about the problem here.

Hi @luminati,
Thanks for using the plugin!
Can you list me the plugin you use? I am using macOS with the same version as yours so I don't think it depends on this. Example :
https://github.com/user-attachments/assets/f3b9b021-bb60-4ba2-98be-4bb062748f96
There's a great chance that one of the plugins shortcuts is taking the precedence over my configuration and that's why the shortcut is not working.

I tried it today and it didn't work for me. However, after initial testing, I disabled the global hotkeys plugin, reset all keybindings, and tried to use the default ones. Once I hit the "request suggestions", I could finally select the past first suggestion with the shortcut.
I am closing this bug since it must have been an issue with my setup.
Thank you. Amazing plugin 🚀


Gem has no uninstall function

Would be great to have an uninstall function for this gem.

Not sure what you mean by "uninstall function" but:

If you want to revert a rails generate inky:install command, just do: rails destroy inky:install
If you want to uninstall the gem, just do: gem uninstall inky-rb

Note that these 2 commands work for any gem, it's not inky-rb specific:

rails destroy: http://guides.rubyonrails.org/command_line.html#rails-destroy
gem uninstall: http://guides.rubygems.org/command-reference#gem-uninstall

Hope it helps.

Whoa! I did not know this! Thanks for explaining this.


e2e test fixes

Fixes

https://issues.redhat.com/browse/HAC-3118
Description

Updated the timeout, added waitforLoad() and updated locator in test.
Type of change

[ ] Feature
[x] Bugfix
[ ] Code style update (formatting, renaming)
[ ] Refactoring (no functional changes, no api changes)
[ ] Build related changes
[ ] Documentation content changes
[ ] Other (please describe):

Screen shots / Gifs for design review

How to test or reproduce?

Browser conformance:

[x] Chrome
[ ] Firefox
[ ] Safari
[ ] Edge

/retest

/retest

/retest

/retest

/lgtm

/approve


AU915 devices not able to OTAA JOIN on 2 channels on so-called "dual-plan"

This has originally been raised by @tonysmith55, @mcauser and @zigon - just creating an issue for this as nobody else has after checking repo issues.
Describe the bug
@mvierling to assist with some diagnostics, wonder if you could review and correct my assumption on how the Dual Band code is operating.

"Dual Band" is currently active on the server

The Hotspot (gateway) receive frequencies are configured by global_conf.json and since the receive frequencies AS923-1 and Au915 FSB6 are the same you can use the AS923-1 global config file for Dual Band.  Equally we could use the AU915 FSB6 global file as it would have the same contents.

Therefore you can't tell from just the global_conf.json file if Dual Band is active or not.

The logic to distinquish between a Node on AS923-1 and AU915 is something like the following

If a Node sends a Join Request on channels 3-8 then the server assumes the node is  AU915 and respond responds with a Join Accept on the appropriate AU915 channel
if the Node sends a Join Request on channels 1 or 2, the server cannot tell if its an AU923 or AU915.  As a result the server assumes its AS923 and responds on the same channel (1 or 2).
if it was a AS923 node then the Join Accept is received and node is now part of the network
if it is a AU915 node the Join Accept won't be received as the frequency/SF will be wrong and so the AU915 Node does not join and so sends another Join Request on a different channel.  This keeps occurring until it sends a request on channels 3-8 of the FSB6 band.

I also assume the logic above is quite separate from the Tx Power issue.
Original message:
https://discord.com/channels/404106811252408320/1043247093831192587/1046231438351147068
I figured out what the problem is with AU915 joins on AS923 hotspots
If you send a Join Request on AU915 ch40 or 41, the hotspot assumes you're an AS923 device and responds with a JoinAccept on the wrong freq / sf

If you send a JoinRequest on ch 42-47, it responds as if you're an AU915 device, with 30dbi
Send a JoinRequest on ch 40-41, and the gateway responds as if you're an AS923 device, with 16dbi
The gateway seems to rely on the channel number (freq) to figure out how to respond
Original message:
https://discord.com/channels/404106811252408320/1043247093831192587/1046416955810267207
To Reproduce
This behaviour is consistent across multiple devices and gateways
Expected behavior
Devices are expected to OTAA JOIN on all channels

Would it be helpful if I provide join_request / join_accept ids returned by the console for any of these tests?

There is some further information on this:
The LNS response on these 2 channels is also incorrectly BW125 instead of BW500.

Behaving as expected.
AU915 Joins can only be handled on Ch 42 - 47 as Ch 40 and 41 are reserved for AS923. A future optimization might handle this differently though and it is technically possible that once a sensor is identified as AU915 all future Joins can use Ch 40 to 47 for Joins. Alternatively the sensor could be labeled as AU915-only in the Console. Per the spec this is valid AU915 behavior.


Error when function type used as generic type parameter

The test
    @Test
    void generic() {
        rewriteRun(
          kotlin(
            """
              val f: Function<() -> Boolean> = { { true } }
              """
          )
        );
    }

fails with a ClassCastException because K.FunctionType does not implement Expression.

Rather than changing J.ParameterizedType#typeParameters to be of type JContainer<TypeTree> it is easier to bite the bullet and have K.FunctionType also implement the Expression interface.


Shared base classes for demography classes

Description
This PR:

Introduces the demography.core module and defines the PandasExporter and Cohorts abstract base classes.
The ABCs share a common class attribute ('array_attrs') which is used to define which fields to export to pandas.DataFrame and which fields need to be kept synchronized as cohorts are added or removed.
Applies the PandasExporter to many of the demography classes and then updates the documentation to use the new to_pandas() method inherited from the base class.
Adds some low level tests of some basic subclasses in tests.unit.demographt.test_core.py to show that the ABCs work independently and with multiple inheritance.

TODO:

The Cohorts base class isn't used yet - need to think about whether to do this here. The main use case is within Community for adding new 'rows' to StemTraits, the cohort data etc. I think  it's probably better to handle #336 first and then roll that ABC usage out.
The Cohorts ABC name clashes with pyrealm.demography.community.Cohorts and needs renaming: CohortMethods or similar.
Also need to use this in any partition of pyrealm.demography.community.Canopy attributes into cohort and community dataclasses (see #337).

Fixes #314
Type of change

[x] New feature (non-breaking change which adds functionality)
[ ] Optimization (back-end change that speeds up the code)
[ ] Bug fix (non-breaking change which fixes an issue)

Key checklist

[x] Make sure you've run the pre-commit checks: $ pre-commit run -a
[x] All tests pass: $ poetry run pytest

Further checks

[ ] Code is commented, particularly in hard-to-understand areas
[ ] Tests added that prove fix is effective or that feature works

Codecov Report
Attention: Patch coverage is 99.09910% with 1 line in your changes missing coverage. Please review.

Project coverage is 95.10%. Comparing base (1f315ba) to head (3e3dbd8).
Report is 305 commits behind head on develop.

Files with missing lines
Patch %
Lines

pyrealm/demography/crown.py
75.00%
1 Missing :warning:

Additional details and impacted files
@@             Coverage Diff             @@
##           develop     #338      +/-   ##
===========================================
- Coverage    95.29%   95.10%   -0.19%
===========================================
  Files           28       35       +7
  Lines         1720     2613     +893
===========================================
+ Hits          1639     2485     +846
- Misses          81      128      +47

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

Hmm. Apparently sphinx does not generate links to inherited methods: https://github.com/sphinx-doc/sphinx/issues/10699

Hi @davidorme , is there anything I should specifically focus on thin this review that has previously been reviewed in the merged branches?

Not sure I understand the question, @j-emberton? The base classes are new to this branch - unless I've managed to muck up working on two branches in parallel.

So pyrealm.demography.core is the new functionality and then everything else is just rolling that functionality out to the classes that need it.

Sorry I think my brains out of gear this morning. I was looking at the diff thinking that I'd seen a bunch of the code before, and couldn't quite work out what was going on.


Take geojson out of bundle

At present I think it would be re-downloaded every time we do a new build. If it's fetched separately it could also be cached 👍

👍👍

Done in #32


Using data from the json model within the text

Firstly, thanks for your library! It is very, very good!
I have only seen examples where you can replace a html tag that has a class defined with a tag that contains the value from json model:
eg
template:

data:
{"myvalue":999}
result:
999
Is there a way to create the following result:
the value was 999
using a template like
the value was {{myvalue}}
I am asking as I want to contruct hyperlinks but cannot see how to without adding the hyperlink text to the json object which is not ideal.

Glad that you like the library!
I'm sorry to tell you that I currently do not plan to add anything like that to the template engine. But on the other hand is it possible to replace the template engine with a new one! I built it so that you can just write like this
List.prototype.templateEngines.myCoolerEngine = function(list, settings) {
/* implement functions specified in the readme */

fair enough. I will look into this.


Fix user existence check

Resource windows_ad_user fails with ArgumentError: invalid Unicode escape when trying to create already existing user.

How about to merge this?

How about to merge this?

Sorry, thought I had when I closed the issue.  Did it from mobile, so maybe that's why?

Sorry, thought I had when I closed the issue.  Did it from mobile, so maybe that's why?


Container in the default network cannot access a mapped port from a custom network

This is with docker 1.9.1
To duplicate:
docker network create test
docker run -p 8888:80 --rm --name=nginx --net=test nginx

# success from host
wget -T 1 http://$(docker-machine ip default):8888/

# success from container on same network
docker run --rm --net=test busybox wget -T 1 http://$(docker-machine ip default):8888/

# timeout from container on default network
docker run --rm busybox wget -T 1 http://$(docker-machine ip default):8888/

The "docker-machine ip default" is the same in all three cases, and represents the docker host's ip
I'd expect that the container on the default network should still be able to access the mapped port from the test network, since from it's perspective it is just trying to reach some external ip, and that external ip/port is reachable outside the container.
If the wget container is run on a different host than the nginx one, then the connection succeeds.
Tagging @sanimej as he helped verify this as an issue on irc

This issue should be fixed since 1.11.x.
Can you please confirm ? Thanks.

@wr0ngway It has been detected that this issue has not received any activity in over 6 months. Can you please let us know if it is still relevant:

For a bug: do you still experience the issue with the latest version?
For a feature request: was your request appropriately answered in a later version?

Thank you!
This issue will be automatically closed in 1 week unless it is commented on.
For more information please refer to https://github.com/docker/libnetwork/issues/1926


[Azure Maps] Geolocation API review

Contributing to the Azure SDK
Please see our CONTRIBUTING.md if you are not familiar with contributing to this repository or have questions.
For specific information about pull request etiquette and best practices, see this section.

/azp run prepare-pipelines

API change check
APIView has identified API level changes in this PR and created following API reviews.
Azure.Maps.Geolocation

/azp run prepare-pipelines

/azp run prepare-pipelines

/azp run net - maps - tests

/azp run prepare-pipelines

There are conflicts in ci.yml, test-resources.json and tests.yml. Remember to rebase to latest main branch to resolve the conflicts.

/azp run net - maps - tests

/azp run prepare-pipelines

Remember to update folder name and file name to *GeoLocation*.

/azp run net - maps - tests

/azp run net - maps - tests

/azp run net - maps - tests


publicUrl not support ssl(https)

if I start the weed volume like this, (don't worry the ssl keys, I user nginx proxy):
weed -log_dir=/data/weed/logs/ -v=2 volume -ip="devf3.xxx.com" -publicUrl="https://devf3.xxx.com" -dir=/data/weed/data_test/volume3 -port=8083 -mserver="devm1.xxx.com:9333" &

and the img url will be:
http://https//devf2.xxxx.com/1,014a610fdcd1

Will fix this.

thanks very much~~
何涛 Hetal
Tel:<PHONE_NUMBER>8
北京市海淀区，100080
2015-04-16 15:12 GMT+08:00 chrislusf<EMAIL_ADDRESS>
Will fix this.
—
Reply to this email directly or view it on GitHub
https://github.com/chrislusf/weed-fs/issues/117#issuecomment-93662211.

I add the fix. It will check the url before http redirect. If it already has "http" prefix, it will stop auto prepend a "http://" prefix.
Is that your use case?

yes, that's my want. thanks very much~
何涛 Hetal
Tel:<PHONE_NUMBER>8
北京市海淀区，100080
2015-04-17 1:05 GMT+08:00 chrislusf<EMAIL_ADDRESS>
I add the fix. It will check the url before http redirect. If it already
has "http" prefix, it will stop auto prepend a "http://" prefix.
Is that your use case?
—
Reply to this email directly or view it on GitHub
https://github.com/chrislusf/weed-fs/issues/117#issuecomment-93786105.


Authentication after a long period of time

Hi
I hope everyone is doing great. I am developing shopify app using below
Laravel V 5.8
PHP V 7.2
Ohmybrew Laravel-shopify V 7.0 also same behavior at V 6
Issue is
After installation it is working fine but when I load this app again after few minutes it is showing me the below error. it is due to server or any other reason?
Secondly when error occurred, removing shopify_token from database shop table and refreshing app, will load app correctly and updating shopify_token with same token.
Any help?
Trying to get property shopify_domain of non-object

Getting the same error since updating the package. Does not stop the app from loading but is throwing the error every time it needs to authenticate.
Trying to get property 'shopify_domain' of non-object (View: \resources\views\vendor\shopify-app\layouts\default.blade.php)

@Kyon147 Waiting for its solution because I am not sure about reason of this error.  It will good if someone point my mistake in any step.

Hmm, this would mean the session is not valid anymore. I'll take a look.

@ohmybrew Yes it is due to session.
Currenlty, I am adding shopify domain value in session at this key shopify_domain by getting value from database shop table before loading my app view. it works fine but I guess it is not a proper solution.

Which version specifically are you using?
v7.1.0 introduced a patch to assist in issues with the session.

I've updated to v8.0 and still getting the error.

@muhammadasfar I am really confused at what you're doing exactly. Can you step by step what you're doing, you say you're doing a custom lookup and such, I am a bit lost here.

@ohmybrew
Step by step what I am doing
After installation it is working fine but when I am loading this app again from APPS. it is showing me the above screenshot error (Trying to get property shopify_domain of non-object).
I am overriding controller,routes and view using  wiki doc.
what I did for its solution
I am adding shopify domain value in session at this key shopify_domain by getting value from database shop table like below code
 $shop = ShopifyApp::shop();
 session(['shopify_domain' => $shop->shopify_domain]);
in my index function of my app controller and it is working fine now.
Which version specifically I am using?
I have two apps in progress. I am using
Server Nginx
Laravel V 5.8
PHP V 7.2
Ohmybrew Laravel-shopify V.7.0 in my current app and V.6.0 in another app both have the above issue as in screenshot.
According to your above comment v7.1.0 introduced a patch for this issue, let me give it a shot then.

You're directly modding the session values?

It might not be linked but I've noticed I get the error because of the cached view.

Which seems to be triggered by /js/popper.js.map

Cached view shouldn't be the issue since it's just blade template converted to PHP

I have a test setup now to replicate through an admin link. I will leave it for 24 hours, visit, and see what happens. If I'm able to reproduce, I'll be able to dig into why.

@bilfeldt I just set everything up. Route is loaded, session is in cookies I can see, so now I will leave it for 24 hours, and click the admin link again.
Can you confirm something for me, if you're able to... if you view the cookies for your app's domain, does the expire time say "Session End"? Laravel by default sets a timed expire which cased similar issues before, on auth, I override this setting to make it expire when someone closes the browser instead.

@ohmybrew I get the following info about the cookie. Note that you should maybe wait 26 hours as it looks like that is the expiration time.

Let me know if you need anything else.

@bilfeldt Not the XSRF token, look for one called "laravel_session", it may be slightly different in name if you've overwritten the default session name.

@ohmybrew that one has the same expiration.

Okay... I think thats the issue. It should expire on Session Close. Still, the auth middleware should see its an expired session... will investigate.

@bilfeldt Are you using filesystem for sessions or database or other?
I forced Laravel to expire the session after an hour... which worked and re-authed me fine.
I'm doing the same test now with APP_ENV as production to rule out a production based issue but wanted to double check what session driver youre using.

@ohmybrew I am using filesystem like so:
SESSION_DRIVER=file
SESSION_LIFETIME=120

Do note that I am re-authenticated just fine, but the controller is running twice, so the counter is incrementing by 2 instead of 1. Have you been able to reproduce this behaviour?

@bilfeldt ohh that's you're issue? Yes that's normal because during reauth, it sends you to your app url on your host, once it loads Shopify's esdk or app bridge detects it's not inside the iframe and loads it in one then.

@Kyon147 What session driver are you using? Whats a method I can do to attempt to repeat your issue?

@Kyon147 What session driver are you using? Whats a method I can do to attempt to repeat your issue?

Just using the default settings - it seems to be when Shopify session times out but the app is open and you try and do anything. As it no longer has a valid session it then just throws up errors.
SESSION_DRIVER=file
SESSION_LIFETIME=120

@Kyon147 So you have a link or button inside the page which you click, and causes the error?
Is this button/link behind 'auth.shop' middleware?

@ohmybrew now you mention it, the routes are not using the auth.shop which is bad on my part of probably not 100% understanding middleware...
The "welcome" does which is the first route but thinking of it, the other routes do not use the auth.shop middleware. Did not think about needing to put all of them behind it as in my head everyone went through "welcome" but did not account for when they are moving from one place to another after session expiry!
I'll put all these routes using the auth.shop middleware and see if the error stops.

Ah! Yes, its absolutely required. Maybe I should make it more clear in the docs. The exact reason is just that - it checks the Shop out completely (valid session? has it been deleted or trashed? does it still have a valid token? etc) and if anything fails, it kicks them to the auth flow.

@ohmybrew how stupid of me! It might be worth mentioning that any route created needs to have the auth.shop on it otherwise the user will be booted out. Although I completely get what you mean now it was a silly moment on my end! Hopefully, it can save someone else in the future :)
Thanks for taking the time to help though, much appreciated.  Love to help out at some point later down the line once I get more up to scratch on the inner workings on Shopify and Laravel a bit more.
Love the package.

@bilfeldt ohh that's your issue? Yes that's normal because during reauth, it sends you to your app url on your host, once it loads Shopify's esdk or app bridge detects it's not inside the iframe and loads it in one then.

@ohmybrew I am not completely sure I follow. If I use the admin link while having a valid session, then it opens the controller in the iframe. But if instead I use the admin link without a valid session, then the controller does it magic (probably outside the frame?) and I am redirected, where the controller is now doing it's magic inside the controller.
Is there a way to get around this? If the controller is doing some irreversible action, which a lot of admin links will do, then this won't work. Imagine for example that you have a controller that does some actions and then completes the order. When you use this action without an active session, then it will do all of that and then redirect you to the same controller again but this time it will fail since the order is already completed.
I hope it makes sense?

@bilfeldt Yes this is expected. Without a valid session, the package does a fullpage redirect to Shopify to get the token data, which in turn redirects back to the page (not in an iframe), this loads the controller/view, then Shopify's JS for AppBridge/ESDK sees its not in the iframe, and loads it in one again.

@ohmybrew thanks for the details.
I am thinking if there is any way around this. This could be an issue for all admin links  as I see it.
Is it possible to either:

Make an in-iframe redirect to Shopify to get token data if no valid session is present
Redirect back to a specific page instead of the route that the admin link pointed to? (this is not really a solution but a workaround)

@bilfeldt
oAuth has to happen at top-level, can not be in an iframe.
Hypothetically, I could skip the redirect, verify the HMAC request, and update the session and it wouldn't do the "double load" you see..
If the shop has a token (and per-user is not enabled): I could have it run through the session updater and skip the oauth redirect.
Two issues to this:

If you update the app's scopes, the user will not be asked to confirm scope permissions unless they go back to Apps and click the main app link
For people using per-user, they have to go through the whole auth anyways

I may make a special branch to test this method out... if I do, would you like to point your composer entry to it once I'm done and see if it gives you the effect you're looking for?

FYI I have a branch for this to do full and partial flow now... unit tests passed but have no tried physical tests. Branch is alt-flow. Will be doing physical tests shortly.

Hmm... seems to work ok in a physical test: https://streamable.com/drg5l

At the start I am loading the app through the main screen
At 0:09ish I am loading a an admin link
At 0:12ish-0:19ish I am deleting all app-domain cookies/session from Firefox
At 0:20ish the admin link re-loads with session fixed up and no iframe redirect happened.

Will continue to test...

if I do, would you like to point your composer entry to it once I'm done and see if it gives you the effect you're looking for?

@ohmybrew absolutely, would be more than happy to test.
One suggestion could be to implement this as a separate middleware that one can use for admin links where this double redirect is unwanted. What about authentication for Shopify webhooks, I would assume these are not using the normal auth middleware, but I am not sure how it works there?
Thanks for your much appreciated work in this matter.

@bilfeldt it's ready, I did some quick physical tests and all worked fine. Seperate middleware is not needed, detection happens and it decides what to do.
Change composer to point to "dev-alt-flow", run composter update and you should be good to try.

@ohmybrew This is simply awesome! This works on my test as well.
What is the new authentication logic then?
Thanks for the fantastic support.

@bilfeldt Glad it's working. I'll do some clean up and review on it plus write some new unit tests to support it before including it in a new release.
Essentially the middleware is split into two detections now.
A) Shop is nil? Shop is trashed? Shop in session doesn't match incoming shop? -- then: redirect to auth handler and tell auth handler it needs to do the full-page oauth flow
B) If A passes, then we check if the session is valid -- if not, then: redirect to the auth handler and tell the auth handler to skip the whole oauth flow.
So now the middleware will essentially set a "flag" to tell the auth handler if it needs to do the full oauth flow or not. By a simple if statement, we can skip the whole oauth flow and simply recreate the session for the shop since everything else is fine. This eliminates the whole redirect issue previously.

Will try and get this done for Sunday

Hey @ohmybrew
I've updated the routes to use the auth.shop middleware but now the app loads the "install" screen even though it has an entry in the DB.

Debugging what's happening it looks like it can't find the shop, so is sending over to the "install" screen above. Weirdly, the shop exists because when you load through the app screen it authenticates fine. Just seems to happen when already in the app and there is no valid session.
Here's the debug:

Unit tests are in place and working, doing more physical tests before pushing a release.

Not sure if this is related, but if I clear out the sessions in laravel and then go back into the app again, I am getting a blank screen in the shopify admin. It appears it is getting stuck in auth/fullpage_redirect.blade.php and the redirect is not happening. If I post the URL into the browser it goes back through the process and reauthenticates and then works. Look at the documentation here: https://help.shopify.com/en/api/embedded-apps/app-bridge/oauth I am not sure if what you have is the same intent or it was just not refactored to support app bridge. If so, I can give it a go and submit a PR.

v9.0.0 is out and should solve the bulk of the auth issues. Now there is a partial and full flow.
Partial flow will now happen when the shop is valid but the session has expired, the session will be simply updated.
This solves the issues of pages showing twice sometimes (once outside iframe, then inside iframe again), now if session expires, the page will show like normal.
Marking this closed for now as its gotten a bit lengthly and off-topic in some area. If anyone has other issues when on v9.0.0 please see the new issue template in the main repo root and add an issue and i'll gladly help.
@adamlevenson Please see issue template and open a new issues for your comment :)

@ohmybrew I now get stuck on "too many redirects" going to the "/partial" route

@darrynten have you checked that your domains are correctly setup? So that you do not end with an infinite redirect loop.


Sass-rails on Sprockets 4.

Sorry I haven't spoken up earlier, but Andreis13's work affects work toward supporting Sassc instead of the Sass ruby gem. Since there won’t be any template.rb file I think my changes should be applied to sprockets directly, specifically the sass_processor.rb file. Is that correct? If not, where is the new canonical location for this kind of support? I'm unsure whether to put this stuff in sprockets or sass-rails.

@malida I think we should move everything that is not Rails specific to sprockets and keep this project just to integrate things with Rails.
Instead of changing the SassProcess directly I think it is better to investigate a new processor that will deal with sassc, but if the code is too similar an option for the processor like we did with the importer on this PR would also work.
Does it sounds a good plan?

It sounds great! Thanks.