Homebridge on different network

Describe Your Problem:
I recently reinstalled my homebridge server and I can't add my AC. My homebridge is on 192.168.0.x while my ac is on a different network 192.168.20.x. From the homebridge I can ping the ac, but during the scans it cannot detect it, even if I add it manually by it's mac address. The broadcast address is correct as can be seen from the screenshot. With the previous plugin versions 1.x I was able to make it work.
Logs:
[19/05/2024, 18:26:03] [GREE Air Conditioner] Initializing GREEAirConditioner platform...
[19/05/2024, 18:26:04] [GREE Air Conditioner] UDP server bind to port 7002
[19/05/2024, 18:26:37] [GREE Air Conditioner] Scan finished.

Plugin Config:
{
    "name": "GREE Air Conditioner",
    "port": 7002,
    "scanAddress": "<IP_ADDRESS>",
    "scanCount": 10,
    "scanTimeout": 3,
    "devices": [
        {
            "mac": "502cc6e004ef",
            "speedSteps": 5,
            "statusUpdateInterval": 10,
            "sensorOffset": 40,
            "minimumTargetTemperature": 16,
            "maximumTargetTemperature": 30,
            "xFanEnabled": true,
            "temperatureSensor": "disabled"
        }
    ],
    "platform": "GREEAirConditioner"
}

Screenshots:

Environment:

Plugin Version: v2.0.1
Homebridge Version: latest
Node.js Version: v20.13.1
NPM Version:
Operating System: Raspbian GNU/Linux Bookworm (12)

Version v2.0.x was a major change in the plugin. It was completly rewritten from the base and it requires a new configuration as well. Version v2.x has a new concept and a new developer. There is no guarantee that if a configuration has worked in v1.x will continue to work in v2.x
This plugin uses broadcast communication to pair with AC devices. Broadcast traffic is not routed to different subnets (DoS protection). Only a few routers support broadcast forwarding and they also require a very special configuration. If you can not move the AC unit into the same subnet then you have to search for a router which supports broadcast forwarding.
Short answer: Broadcast is for one subnet only. Using Homebridge and the AC unit on different subnet is not supported.

Hi @TKrisee
support for AC on different network was added in version 2.1.3


enhancement Optimize expression

Proposed changes

optimize expression comparison by
a) flatter method call stack
b) short circuit: if some simple field not equals, then return, and not compare to the big field, like Alias.name
lazy compute Alias.name which is computed by toSql. Now Alias.toSlot() will not generate long name immediately
cache Expresssion.inputSlots, it can save time when invoke this method multiple times
always compute Expression.unbound, it can avoid traverse the big expression tree

this pr can save about 200ms when submit some long sqls

run buildall

run buildall


KAFKA-6973: TopicCommand should verify topic-level config

KAFKA-6973: https://issues.apache.org/jira/browse/KAFKA-6973
Specifying an invalid config other than CreateTime or LogAppendTime will cause broker restarting to fail.
More detailed description of your change,
if necessary. The PR title and PR message become
the squashed commit message, so use a separate
comment to ping reviewers.
Summary of testing strategy (including rationale)
for the feature or bug fix. Unit and/or integration
tests are expected for any behaviour change and
system tests should be considered for larger changes.
Committer Checklist (excluded from commit message)

[ ] Verify design and implementation
[ ] Verify test coverage and CI build status
[ ] Verify documentation (including upgrade notes)

LGTM.

@omkreddy thanks for responding, so can it be merged to the trunk?


Mac filtering on the SFP

Hey,
My ISP annoyingly does not isolate customers. The SFP module gets all kinds of junk sent to it and I'd prefer to drop it all on the SFP instead of the router. Is adding mac filtering within the scope of this project ? sfp should only accept/frames from mac addresses on a allow list and drop every thing else.
The device I am using is, ODI DFP-34X-2C2

I think it's not possible,
it has basic iptables and ebtables, but those command are not permanent
perhaps try those

I tried with a ruleset like this,

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:80:05 brd 00:00:00:00:00:00
    inet <IP_ADDRESS>/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 38:3a:21:28:b6:58 brd ff:ff:ff:ff:ff:ff
3: eth0.2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 00:00:00:01:00:02 brd ff:ff:ff:ff:ff:ff
4: eth0.3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 00:00:00:01:00:02 brd ff:ff:ff:ff:ff:ff
5: nas0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:00:00:01:00:02 brd ff:ff:ff:ff:ff:ff
6: pon0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 00:00:00:01:00:02 brd ff:ff:ff:ff:ff:ff
7: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether 38:3a:21:28:b6:58 brd ff:ff:ff:ff:ff:ff
    inet <IP_ADDRESS>/24 brd <IP_ADDRESS> scope global br0

# ebtables -L
Bridge table: filter

Bridge chain: INPUT, entries: 4, policy: DROP
-s b4:8a:5f:24:3f:c1 -j ACCEPT # BNG / AC
-s a8:b8:e0:0:4a:d7 -j ACCEPT # RB5009

Bridge chain: FORWARD, entries: 4, policy: DROP
-s b4:8a:5f:24:3f:c1 -j ACCEPT
-s a8:b8:e0:0:4a:d7 -j ACCEPT

Bridge chain: OUTPUT, entries: 1, policy: ACCEPT
-j br_wan_out

Bridge chain: br_wan, entries: 0, policy: RETURN

Bridge chain: br_wan_out, entries: 0, policy: RETURN

Bridge chain: portmapping, entries: 0, policy: ACCEPT

And it does not work.
The SFP I have has a problem similar to some (non SFP) ONTs I have tried in the past. The rules added to ebtables only apply to traffic between SFP/ONT and the Router. It still allows all traffic from upstream.
My objective here was to stop garbage sent by my ISP and that is not fixed by this modification. I hope there is a easy way to reset ONT(because I have locked myself out of it, :grimacing:) and I'll continue looking.

Oh now it makes sense..
ebtables is just for filtering traffic passing through linux bridges. ref
I need to find some other way to filter traffic on pon0 interface. I don't like the idea of adding it to a bridge and then filtering it.

It looks like this may not be doable on the stock firmware. I tried once again with iptables and it still allows all traffic from the ISP. This should be doable with nftables but nftables is not present on the device.

I do not believe this is possible on the SFP.

ebtables is only for bridges and doesn't work here.
iptables(netfilter) can only filter traffic from router to sfp. It can not filter traffic from ISP.
nftables is not available on the sfp.

I was discussing this with some people and the consensus so far is, the linux on sfp is probably just to provide a control interface. There is a high speed path from fiber to other interface that linux doesn't get to see or do any thing with!


Suppressing std-err

This might be more of a need for advice than an issue.
I use Linux Deepin 15.3, which is based on Debian Sid Unstable.
GTK spits out lots of warnings to std-err when used, (might be more an OS issue or GTK being overly sensitive).
When I call the script directly i can filter out GTK warnings with grep:
{ python3 hello_world.py 2> >(grep -v Gtk-WARNING >&2); }
but according to the docs, i'm supposed to call the script as a module. However, the line below won't work:
{ python3 -m hello_world 2> >(grep -v Gtk-WARNING >&2); }
Any advice on how i can call in a module and still filter, or better yet a way/fix without this work-around?

I think toga can't suppress these warnings (I personally see them while running almost ANY app from terminal but everything works fine)

Yes - this is a "GTK being noisy" issue. There's not much we can do to make it quiet - other than, of course, fixing the reason why it's complaining. Rather than developing a mechanism to hide errors, I'd rather merge fixes that fix the underlying errors.

Closing this as a "wontfix". If GTK is being noisy, that is presumably for a reason, and we should fix that reason.


创建工单所属项目的产品数量不对

产品列表里面有20多个但是创建工单的时候只显示这四个

This problem has been fixed in version  dgiot-dashboard 4.4.0. Please update the front end to 4.4.0


Integer overflow in 32bit environment

Twitter's status id is now more than 2^32, so we cannot deal with the status id as Int with 32bit environment (such as iPhone4S).
For example, the code doesn't work correctly with iPhone4S, due to integer overflow.
let a:Int =<PHONE_NUMBER>48390145
print(a) //prints -289275903

Therefore, I can't use  func getStatusesShowWithID(id: Int, ...) to show https://twitter.com/gecko655/status/515496848048390145.
I think Swifter should include the same method with String argument, like
func getStatusesShowWithID(id: String, ...),
or should change the method to func getStatusesShowWithID(id: Int64, ...).
Is it correct?

Same problem in issue #70.
The use of the architecture-flavored Swift.Int for cursors renders them practically unusable on 32-bit platforms, as your app will choke on an overflow error when trying to parse a 64-bit cursor as a 32-bit integer.
Replacing the integers by either strings or Int64 ('long long') fixes the problem.


Trying to fetch data through the provided api but it is failing

Is your feature request related to a problem? Please describe.
I am trying to fetch data from the API you provided, but the request is failing each time. Can you please help?

Please send more details about http request and the error occured .


Correct ordered list setting in Readme

After reading the Toc.coffee script, I tested the ordered style. It shows only value 1 gives desired output.

Thanks @fest, I will change the documentation of the API attributes completely.


Call a microservice running on Fargate using API Gateway integration

Note the following information for the model:
Name: Call a microservice running on Fargate using API Gateway integration
Description: This sample project demonstrates how to use Step Functions to make a call to API Gateway in order to interact with a service on AWS Fargate, and also to check whether the call succeeded.
Simplicity: 1 - Fundamental
Language: Javascript
Diagram: Included in the PR.
PR: #201
Type: Standard
Framework: SAM
Author: Mohamed Salah

Please move the Step functions definition to a separate file, referencing in line on the template.yaml is not best practice

closing due to lack of response


Allow to set integer and boolean values in the mapping

Related to https://github.com/quarkiverse/quarkus-helm/issues/83#issuecomment-1249141644

@pjgg I think this is the only option to support values other than String.
Would you mind to review this?


View website with pages embedded

User Story
AS A user who has reached the Collective Foundation website
I WANT TO view the published content on the website
SO THAT I can learn more about the Collective Foundation

Is this done and closed in https://github.com/khmdagal/The-Collective-Foundation/issues/12 ?


TypeScript language service died unexpectedly 5 times in the last 5 minutes

Issue Type: Bug
I haven't changed anything... this just started happening today. WSL2/Windows 11. Worth nothing I've been on Windows 11 for about a week and this just started this morning.
 It looks like I hit some kind of watcher limit, I recall this issue from many years ago I suppose it's still a thing.
Running find -type d -name node_modules -prune -exec rm -rf {} \; at the top level seems to have resolved it for now.


Filter By PID

This will find pid "123" if you search for "12". Do we want this behaviour?

yes

all matching 38 for example

all matching 38 for example

Thanks!


feat!: trap with revert data

This PR adds revert data for user-defined messages in the TRAP opcode. Not all messages are returned as revert data, since compiler intrinsic messages are spammed all over SSA and codegening revert data for all those makes brillig function size blow up and impacts performance in a hard way due to deserializing load.
This is currently only for static assert messages, since dynamic ones are implemented as an oracle and probably need a rework to be able to return them as revert data.

Benchmark results
Metrics with a significant change:

circuit_simulation_time_in_ms (public-kernel-app-logic): 116 (+41%)
circuit_simulation_time_in_ms (public-kernel-teardown): 104 (+33%)
circuit_simulation_time_in_ms (public-kernel-setup): 102 (+32%)
tx_pxe_processing_time_ms (0): 1,477 (+29%)
tx_pxe_processing_time_ms (1): 1,097 (+41%)
tx_sequencer_processing_time_ms (1): 530 (+16%)
note_history_trial_decrypting_time_in_ms (5): 114 (+131%)
note_successful_decrypting_time_in_ms (8): 254 (+28%)

Detailed results
All benchmarks are run on txs on the Benchmarking contract on the repository. Each tx consists of a batch call  to create_note and increment_balance, which guarantees that each tx has a private call, a nested private call, a public call, and a nested public call, as well as an emitted private note, an unencrypted log, and public storage read and write.
This benchmark source data is available in JSON format on S3 here.
L2 block published to L1
Each column represents the number of txs on an L2 block published to L1.

Metric
8 txs
32 txs
64 txs

l1_rollup_calldata_size_in_bytes
772
772
772

l1_rollup_calldata_gas
6,784
6,808
6,808

l1_rollup_execution_gas
587,265
587,289
587,289

l2_block_processing_time_in_ms
1,340 (-7%)
4,749 (-10%)
9,191 (-9%)

note_successful_decrypting_time_in_ms
:warning: 254 (+28%)
491 (+3%)
1,017 (+6%)

note_trial_decrypting_time_in_ms
56.3 (-44%)
100 (+14%)
33.5 (-59%)

l2_block_building_time_in_ms
11,285 (+4%)
40,310 (+3%)
79,109 (+1%)

l2_block_rollup_simulation_time_in_ms
11,163 (+5%)
39,912 (+4%)
78,347 (+2%)

l2_block_public_tx_process_time_in_ms
5,731 (+8%)
22,419 (+8%)
45,032 (+8%)

L2 chain processing
Each column represents the number of blocks on the L2 chain where each block has 16 txs.

Metric
5 blocks
10 blocks

node_history_sync_time_in_ms
14,017 (-7%)
27,550 (-5%)

note_history_successful_decrypting_time_in_ms
1,342 (+8%)
2,443 (+6%)

note_history_trial_decrypting_time_in_ms
:warning: 114 (+131%)
109 (+19%)

node_database_size_in_bytes
18,690,128
35,053,648

pxe_database_size_in_bytes
29,859
59,414

Circuits stats
Stats on running time and I/O sizes collected for every circuit run across all benchmarks.

Circuit
circuit_simulation_time_in_ms
circuit_input_size_in_bytes
circuit_output_size_in_bytes

private-kernel-init
163 (+9%)
44,561
26,424

private-kernel-inner
186 (+20%)
72,188
26,424

private-kernel-ordering
127 (+18%)
51,090
39,297

base-parity
3,997 (+3%)
128
311

root-parity
1,126 (-1%)
1,244
311

base-rollup
13,262 (-2%)
110,820
957

root-rollup
49.7
4,551
821

public-kernel-app-logic
:warning: 116 (+41%)
48,151
40,933

public-kernel-tail
144 (+18%)
53,644
7,385

merge-rollup
12.1 (+18%)
2,760
957

public-kernel-teardown
:warning: 104 (+33%)
48,151
40,933

public-kernel-setup
:warning: 102 (+32%)
48,151
40,933

Tree insertion stats
The duration to insert a fixed batch of leaves into each tree type.

Metric
1 leaves
16 leaves
64 leaves
128 leaves
512 leaves
1024 leaves
2048 leaves
4096 leaves
32 leaves

batch_insert_into_append_only_tree_16_depth_ms
10.1 (-9%)
16.9 (-6%)
N/A
N/A
N/A
N/A
N/A
N/A
N/A

batch_insert_into_append_only_tree_16_depth_hash_count
16.8
31.6
N/A
N/A
N/A
N/A
N/A
N/A
N/A

batch_insert_into_append_only_tree_16_depth_hash_ms
0.584 (-9%)
0.519 (-6%)
N/A
N/A
N/A
N/A
N/A
N/A
N/A

batch_insert_into_append_only_tree_32_depth_ms
N/A
N/A
46.3 (-10%)
72.0 (-11%)
230 (-13%)
448 (-12%)
868 (-12%)
1,727 (-12%)
N/A

batch_insert_into_append_only_tree_32_depth_hash_count
N/A
N/A
96.0
159
543
1,055
2,079
4,127
N/A

batch_insert_into_append_only_tree_32_depth_hash_ms
N/A
N/A
0.474 (-11%)
0.444 (-11%)
0.420 (-12%)
0.417 (-12%)
0.413 (-12%)
0.414 (-12%)
N/A

batch_insert_into_indexed_tree_20_depth_ms
N/A
N/A
54.4 (-9%)
107 (-11%)
338 (-11%)
667 (-9%)
1,309 (-11%)
2,625 (-10%)
N/A

batch_insert_into_indexed_tree_20_depth_hash_count
N/A
N/A
105
207
691
1,363
2,707
5,395
N/A

batch_insert_into_indexed_tree_20_depth_hash_ms
N/A
N/A
0.479 (-10%)
0.482 (-11%)
0.461 (-10%)
0.457 (-10%)
0.455 (-11%)
0.456 (-10%)
N/A

batch_insert_into_indexed_tree_40_depth_ms
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
61.6 (-8%)

batch_insert_into_indexed_tree_40_depth_hash_count
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
109

batch_insert_into_indexed_tree_40_depth_hash_ms
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
0.537 (-9%)

Miscellaneous
Transaction sizes based on how many contract classes are registered in the tx.

Metric
0 registered classes
1 registered classes

tx_size_in_bytes
41,005
528,889

Transaction size based on fee payment method

Metric
native fee payment method
fpc_public fee payment method
fpc_private fee payment method

tx_with_fee_size_in_bytes
905
1,161
1,377

Transaction processing duration by data writes.

Metric
0 new note hashes
1 new note hashes
2 new note hashes

tx_pxe_processing_time_ms
:warning: 1,477 (+29%)
:warning: 1,097 (+41%)
3,784 (+5%)

Metric
1 public data writes
2 public data writes
3 public data writes
4 public data writes
5 public data writes
8 public data writes

tx_sequencer_processing_time_ms
:warning: 530 (+16%)
350 (+13%)
897 (+10%)
448 (+15%)
1,446 (+7%)
518 (+13%)

Docs Preview
Hey there! 👋 You can check your preview at https://661959e221cdc208cf27a814--aztec-docs-dev.netlify.app

This is currently only for static assert messages, since dynamic ones are implemented as an oracle and probably need a rework to be able to return them as revert data.

We would have to support returning a dynamic string in Brillig. I originally held off on adding it for dynamic assertions as to stay in line with ACIR. We have broken away with features in Brillig and ACIR (e.g. break and continue) so I think it would be fine to add this feature.

We could do this if we support returning a dynamic string in Brillig. I originally held off on adding it for dynamic assertions as to stay in line with ACIR. We have broken away with features in Brillig and ACIR (e.g. break and continue) so I think it would be fine to add this feature.

I'm going to think more on this line because this seems interesting!

I'm going to think more on this line because this seems interesting!

The reason we didn't resolve format strings in ACIR is because a fmt string resolution would require slices. But perhaps we could avoid a divergence with a better Display interface. We have an issue here for improving how string formatting is handled (https://github.com/noir-lang/noir/issues/4238).


Update --tree usage example to match option in the help info

Resolve #3083

@pascalberger https://github.com/cake-build/cake/issues/3083


style sheet not being included

Hi @ChrisHammond, I am having some issues with the container.css not being included. I figured this would be added automaticlly however. When I build my project all .ascx file for containers get added to the install zip folder, which works great. However, when I go to install the package in dnn, it says it can't find the container.css even though it is included in the project and I actually added an additional line to the .target file:

Any suggestions?

You'll want the Container.CSS file in the Containers folder, do you have it in there?

Yes sir. However, it's called conatiner.css (lower case (C)). Will that make a difference? @ChrisHammond

Shouldn't make a difference. In the .DNN file what "path" do you have referenced for that file?

I believe I am using what you originally had in there which is . However, I don't call out the container.css in the .dnn file though. Didn't think I needed to. That being said though, that was part of my trouble shooting. I did add it in there, but because the container.css is not being included in the root of the install.zip dnn errors out, saying it can't find the file.

Been a while since I've used a container.css file, but I think here's what's going on. You've got it in the containers folder, but the BUILD script pulls it into the ROOT of the ZIP file. I think you'll want to add the .DNN file reference to be something like
<component type="Container">           <containerFiles>             <containerName>HammerFlex</containerName>             <basepath/>             <containerFile>               <name>Main.ascx</name>             </containerFile>             <containerFile>               <name>Blank.ascx</name>             </containerFile>             <containerFile>               <name>container.css</name>             </containerFile>           </containerFiles>         </component>
Case shouldn't matter

That is how I had it before :) The build script is not grabbing the container.css though, only the ascx files. So adding the container.css to the .dnn file gives an error, because dnn doesn't see the stylesheet there.

Okay then next steps  would be to try to hardcode the reference in the skinpackage.targets file to see if it will pull in container.css into the root
Something like

<ItemGroup>
  <ContainerInclude Include="**\Containers\*.*" />
  <ContainerInclude Include="**\Containers\container.css" />
</ItemGroup>

Sorry @ChrisHammond that was a no go. It's still not pushing the conainer.css into the install zip.

Hi @ChrisHammond, thanks for your quick responses on this the other day. I was actually able to resolve the issue with the container style sheet not being included. I can now reference the style sheet in the dnn file and will now install with out any errors. Here is the fix for me:
<ItemGroup>
    <ContainerCSSInclude Include="**\Containers\container.css" />
  </ItemGroup>
 <Copy SourceFiles="@(ContainerCSSInclude)" DestinationFolder="Package/" />

Closing due to age


Fix long file paths on Windows

dub uses relative paths when compiling dependent dub packages, which sometimes result in file paths that are too long for mkdir on Windows. This patch fixes the issue by using the newer unicode Win32 path APIs to create directories and files in dmd.

@Laeeth No, I don't check that yet.

pls push the latest upstream to master so the diff isn't mental (or give me write access so I can)

Hey should I rebase and merge?

@Laeeth No, not yet.

@John-Colvin I rebased.


Cannot read project manifest -- Cause: Remote resource not found

Description of the bug
Hi, after resolving the network connection issue, I ran the test command again, but it seems that I still cannot get the results from scalepopgen. I suspect it might still be a network issue, but I can access Google normally. I'm confused and would appreciate your assistance.
Command used and terminal output
$ nextflow run scalepopgen -profile test,conda -qs 10
N E X T F L O W  ~  version 23.10.1
Pulling nextflow-io/scalepopgen ...
WARN: Cannot read project manifest -- Cause: Remote resource not found: https://api.github.com/repos/nextflow-io/scalepopgen/contents/nextflow.config
Remote resource not found: https://api.github.com/repos/nextflow-io/scalepopgen/contents/main.nf

Relevant files
No response
System information
No response

 -profile test,conda -qs 10

Hello, thank you for trying out the workflow. When you run nextflow run scalepopgen -profile test,conda -qs 10 it looks for the "scalepopgen" directory inside the nf-core repository, and it could not find the repo there. Try running this command nextflow run popgen48/scalepopgen -profile test,conda -qs 10, this should work then.

I will close this issue as it is not a bug.


fix: adjust filters padding on security page

Closes #2888

Go to the security page of a repository i.e. https://github.com/sindresorhus/refined-github/network/alerts
Note: you need to have some security alerts for the filter to be displayed
See that the sort filter on the right-hand side of the bar has some padding-right.

Before:

After:

Note: the selector isn't great but the markup is quite different on the security page than the other pages so I didn't want to make it overly complex just to have one selector that matched all the use cases.
<!--

Thanks for contributing! 🍄

1. LINKED ISSUES:
   Does this PR close/fix an existing issue? Write something like `Closes #10`

2. TEST URLS:
   Add some test URLs

3. SCREENSHOT:
   Add a screenshot here if your PR makes visual changes

https://twitter.com/fregante/status/1240347246874550274

@fregante bit harsh! fyi I did look into it and spent a bit of time messing around the existing selectors and as per my comment it was either add this new selector specifically for this case (which has a fairly different html structure than the other pages with filters) or make the existing one more complex.
I went for clarity.

I found it ironic because I posted it last night

This feature was tested on:

https://github.com/sindresorhus/refined-github/issues
https://github.com/sindresorhus/refined-github/pulls
https://github.com/sindresorhus/refined-github/pulls (after checking a checkbox)


Issue running algokit compile python

If I run algokit compile python file.py I get this output:
creating virtual environment...
installing puyapy...
Fatal error from pip prevented installation. Full pip output in file:
    /Users/giulio/.local/pipx/logs/cmd_2024-03-30_18.24.30_pip_errors.log

Some possibly relevant errors from pip install:
    ERROR: Ignored the following versions that require a different python version: 0.7.0 Requires-Python <4.0,>=3.12; 0.7.1 Requires-Python <4.0,>=3.12; 1.0.0 Requires-Python <4.0,>=3.12; 1.0.1 Requires-Python <4.0,>=3.12
    ERROR: Could not find a version that satisfies the requirement puyapy (from versions: none)
    ERROR: No matching distribution found for puyapy
Error installing puyapy.

The file  /Users/giulio/.local/pipx/logs/cmd_2024-03-30_18.24.30_pip_errors.log contains the same error messages as above.
algokit doctor gives this output:
AlgoKit: 2.0.1
AlgoKit Python: 3.12.2 (main, Feb  6 2024, 20:19:44) [Clang 15.0.0 (clang-15<IP_ADDRESS>.5)] (location: /Users/giulio/.local/pipx/venvs/algokit)
OS: macOS-14.4.1-arm64-arm-64bit
docker: 25.0.3
docker compose: 2.24.5-desktop.1
git: 2.44.0
python: Command not found!
python3: 3.12.2 (location: /opt/homebrew/bin/python3)
pipx: 1.4.3
poetry: 1.8.2
node: 21.7.1
npm: 10.5.0
brew: 4.2.15
I can run python without issue from the cli anywhere and I get a Python 3.12.2 interpreter.
I tried both installing algokit with brew and pipx, same result.
The other algokit commands work fine. Using puyapy directly also works fine.

Yeah, pipx is a bit fickle. If you installed pipx using Python 3.11 (or lower) then it often will use that same interpreter rather than the system one.
algokit compile py, if it can't detect puyapy in the current project, or globally, will do a pipx run puyapy for you, which I suspect is what's failing here.
Can you try what's suggested here and re-install pipx using a python 3.12 interpreter and then give it another go?

Ok, i made it work, what I did was a bit different since I have python and pipx installed through Homebrew.
With brew list I noticed that I had both<EMAIL_ADDRESS>and<EMAIL_ADDRESS>installed.
I uninstalled 3.11 with brew uninstall<EMAIL_ADDRESS>reinstalled pipx with Homebrew and now it is working.
Thanks!

Glad you got it sorted!

Another option is to install it with pipx manually and tell pipx what version of python to use with something like:
pipx install puyapy --python /path/to/python3.12


Add optuna to requirements

there isn't optuna in terminator/requirements.txt, so added it

@hamster-86 Thanks for your PR!
Could you modify this PR so that it only includes terminator/requirements.txt?
This PR seems to contain unnecessary contents related to #208 and #210.


Action not found.

Hello i have set up everything in the tutorial
and tried to use:
    try {      var extras = {};       var response = await RNHoverReactSdk.makeRequest("XXXXXX", extras);       console.log("got response: " + response.response_message);       console.log("transaction uuid: " + response.uuid);     } catch (e) {       console.log("request failed or cancelled. Reason: " + e.message);     }
This always giving result in console
 LOG  request failed or cancelled. Reason: com.hover.sdk.api.HoverConfigException: Action not found. Is your API key valid, have you created Actions on the dashboard, and have you called Hover.initialize()?

hi sorry this already done, mistakes made by me cuz i replaced the com.hover.apikey to my app packagename


Space in URL for video "neural-networks/3-perceptron-part 2"

Hi!
I noticed there's a space instead of a dash in the name of this folder : content/videos/neural-networks/3-perceptron-part 2
This leads to having this video URL : https://thecodingtrain.com/tracks/neural-networks/neural-networks/3-perceptron-part 2 (%20 being a url-encoded space).
Should we replace it with a dash or is it too late?

should be fine, the link is not linked in the video description


High CPU utilization is back

Looks like #633 is back.
I'm experiencing high CPU utilization in VSCode of 100 plus % (average around 120%) and rapid battery discharge when the plugin is activated.
Environment:
AppMap 0.97.1
VSCode 1.81.1 for Apple Silicon
OS: OS X

Thank you @spaquet for the report - we will take a look ASAP


No way to cancel launching a debug session that is stuck

Use F5 with a prelaunch task that never completes, e.g. because it wants watchers that aren't available
:bug: debug session starts spinning and never completes. I have to do a full window reload in order to retry the debug session launch

Merging into https://github.com/microsoft/vscode/issues/218267


Check all drive entries in config file - Do they actually exist?

With the new config file setup we want to check that any drive that is included as part of the config actually exists to prevent an error down the road...

It would be fantastic if it could create all dirs too.


Rxjs Subject misuse

First of all, thanks for writing this!
I have run into an issue and I don't know what would be a nice solution. Briefly: when a websocket connection fails, both onClose and onError are called, which makes sense, except for the dataStream subject.
Consider this snippet:
var x = new Subject();
x.error("error message");
// x.isCompleted === true, therefore:
x.complete(); // raises an ObjectUnsubscribedError

This is exactly what happens when an error occurs. I don't know what would be a nice solution for this, especially if you consider that you (sort of) want to abstract away reconnects in the dataStream (or at least that would be nice from my point of view).
Currently you would need to create another Subject for a new connection, and get the clients to resubscribe. This is OK but might need a bit of refactoring to make this obvious. Example: give the Subject as a parameter to the onInit callback, so it clearly represents only one connection.
Now I'm just using a stripped down version that does not have that Subject, and use only the callbacks and have my own observables that also perform some application logic.
I'm happy to make a PR after we discuss what would be a nice solution.
All the best,
Vlad

Hi Vlad,
That would be a solution. In the meanwhile rxjs created its own websocket. I'm not sure if we can make use it.
https://github.com/ReactiveX/RxJS/blob/2ef4682f7e6d2e305a1d5a81091c0f8364569024/src/observable/dom/WebSocketSubject.ts

How about perform the this.dataStream.complete() only when it doesn't need to reconnect?
    onCloseHandler(event: CloseEvent) {
       console.log('$WS.onCloseHandler()', arguments);
       console.log(event.code, this.normalCloseCode, this.reconnectableStatusCodes);
        this.notifyCloseCallbacks(event);
        if ((this.config.reconnectIfNotNormalClose && event.code !== this.normalCloseCode) || this.reconnectableStatusCodes.indexOf(event.code) > -1) {
            console.log('need reconnect');
            this.reconnect();
        } else {
          console.log('no need to reconnect')
          this.dataStream.complete();
        }
    };

Good idea. Could you please create a PR?

Cool. PR attached.


Printing without native libraries

Gathering ideas about how to have this plugin not use any native library.
This would make the plugin easier to manage and releasing on the Google/Apple store would be smoother and one will not need to worry about hardware architecture
Most printers support ,
Raw Port, IPP	, AirPrint etc.
So, we should be able to avoid using the native libs provided in the SDK.
The idea is to have your label as an image (HTML canvas -> png) or PDF and send it directly to the printer
This is nothing new and has already been done in:

https://github.com/RamyTalal/Label-Printer (PHP)
https://github.com/driehle/node-brother-label-printer (NodeJS)

One major issue with your proposal is that this would eliminate compatibility with Bluetooth (and USB on Android), since AirPrint/IPP will work ONLY over the WIFI interface.
Another issue is that the printers do not natively support PDF and PNG/JPG, which is why the SDK is needed to convert Image data into data the printers can understand. Though, certainly AirPrint (internally) can convert PDF/Image into the PWG Raster Graphic format used by these "driverless" interfaces, and the printer can handle that.
WARNING: If you use the simplest AirPrint implementation ("printingItem"), this is NOT capable of handling a label that is wider than tall (e.g. 4x3), because Apple AUTOMATICALLY rotates it and completely IGNORES the "orientation" field. So, you would have to implement the most complex API option ("printPageRenderer") if you want to control the orientation.
Also, AirPrint doesn't provide you with a lot of "printer settings" options that can be controlled in app software:

even something like setting the "halftone" to use to convert your graphic image into 1-bit per pixel data has to be done using the printer's "Embedded Web Server", which is not exactly easy to use.
And, you can't tell AirPrint what paper size to use, the printer tells the OS what paper size it is configured to use and that's the only option at print-time. (This is maybe less of an issue with QL printers compared to RJ printers, since QL uses keyed paper cartridges so printer knows what's in it. But, RJ and other models need to be configured externally some other way).
And, if you will support Continuous Roll paper (e.g. receipts), you absolutely MUST implement "cutLengthForPaper" API in order to CALCULATE the length of your job so the printer doesn't feed out 1-3 meters of paper for every page you print.

Plus, Apple is constantly changing AirPrint behavior almost every time they release an OS update. So, your stuff may work one day, and then user updates the OS and now everything is broken (e.g. iOS15 broke a lot of apps that use Continuous Roll paper, and it's still broken at iOS15.5).
And, these are just the iOS issues that come to mind off the top of my head.
Since Google eliminated GCP, I don't know how you would do IPP on Android (not my area of expertise).
So, these "driverless" options may seem like a good idea, but they are extremely limited in functionality compared to the SDK.
Generally speaking, the SDK will be much more "stable", and it will provide access to the full range of printer capabilities, including Bluetooth. Though, it may require regularly updating the SDK included with your plugin, to add support for new printer models, fix issues with OS updates, etc.
Is there a particular problem you are having with the SDK that is causing you to consider going down this road?
Best regards,
Rob

Hello @robr2112
Thank you very much for your elaborate response.
I do understand that there is a place for the native SDK, as it exposes all of the functionalities available on the Brother label printers. I do understand that.
However, there is a need for a lighter SDK.
In my situation, I have an app that is currently on Android and iOS.
I want to port it to Windows desktop, Mac, Linux,  chromebook.
My whole system is fully portable and platform agnostic except the brother printer SDK.
It would be great if the printer SDK was written in javascript without native dependencies.
You mentioned that we need the possibility to issue a "cutLengthForPaper" command.
That is very true ....
And when you think about it, you will realise that when one loads a continuous label in  the printer, one may want to turn on
label cutting on by default.
Most App developers just want to format the data and send it out to the printer.
Note that a customer of mine pointed me to DYMO ... they have a JavaScript fully portable SDK:
https://github.com/dymosoftware/dymo-connect-framework
This is very good not just for developers, but also for the end users as they do not need to be installing label printer drivers on Linux, windows etc

Hi @arcadius,
Thanks for your detailed reply. Sorry for late response.
I understand what you are saying!!
I see the Dymo solution requires a companion app to be installed on iOS/Android device in order for their "JavaScript SDK" to work. Unfortunately, we do not have a similar solution yet. But, stay tuned....
And when you think about it, you will realise that when one loads a continuous label in the printer, one may want to turn on
label cutting on by default.

I'm 99% sure there is a way to enable this as default behavior for printers that have a cutter. It may require sending a specific command or using a tool like Printer Setting Tool to set it as power-on default setting. Otherwise, the SDK will send a run-time command that is not "persistent", to enable the cutter options for that job only. AirPrint however does not provide any way to set these types of settings. That's one of the major problems with these "driverless drivers", as I said before. Anyway, if you really want to know how to enable this specific thing, we can chat more about it and I will try to verify the final 1%. But, I don't think that's the main topic here. ;-)
Most App developers just want to format the data and send it out to the printer.
The "format the data" part is a can of worms, because each printer vendor/model has different languages and capabilities. There are some printer "languages" that are common to most vendors, at least as emulation. But, these languages may not necessarily be friendly to a typical JavaScript developer. And, most printers are not able to decode PDF or PNG.
The "send it out to the printer" part is also problematic in a cross-platform situation, since I/O is generally dependent on the native OS. Bluetooth in particular has some OS and vendor dependent things, like the "MFi protocol string". WIFI has these IPP/AirPrint protocols that are more device independent, as you indicated. But, IPP is limited as concerns printer settings and options. So, there's always a trade-off.
Ultimately, you need to use a development tool that checks all the boxes for your situation. And, it's up to us to try to keep up with all the different tools used by all the different developers, and try to provide solutions for all of them. It's a challenge for sure. But, we're trying as best we can!! Hopefully we can provide a solution that fits your need mentioned here. I just can't promise anything.
Anyway, thanks for providing and maintaining this plugin that is based on the SDKs.
I know it is helpful to the Cordova developer community and to Brother.
Cheers,
Rob


KAFKA-15662: Add support for clientInstanceIds in Kafka Stream

Part of KIP-714
Add new configs and public API for Kafka Streams
Implement support to get admin client instance id

Build issues:

Second run: JDK 8 and Scala 2.12
Third run: JDK 17 and Scala 2.13

Failing KS tests pass locally (so they seems to be flaky only). Others are flaky/not related to this PR. Merging.


rustfmt cannot format code example with long #-hiding line

I've had an issue with format_code_in_doc_comments for some time and decided to finally try to fix it. The issue was that some of my examples did not get formatted.
While trying to implement a fix I managed to find the cause (#) and a workaround, but I'm not able to go further. A minimal repro here
https://github.com/Emilgardis/rustfmt-no-format/blob/main/src/lib.rs
and the fix being to increase max_width (in this example to 101)
Now, the line that is problematic is
/// # let long: Fooooooooooooooooooooooooooooooooo = Fooooooooooooooooooooooooooooooooo::hi();

however, that's only 94 characters in total starting from the start of the line, not from /// .
My expectation with #-hiding in rust examples is that it should not prevent this, and in fact, removing the # you can make the line as long as you want and the other code (and the long line) gets formatted.

Thanks for reaching out!
I think I know what's going on here, but need to investigate a little further. I'll follow up once I've had a chance to dive a little deeper into this.

Linking tracking issue for format_code_in_doc_comments #3348


Move logic around matching/equality etc. from areas in Freya in to Arachne

For types such as language tags, which define specific matching semantics as part of specs, move the implementations of matching etc. in to Arachne (currently implementations exist in Freya, but they're not framework specific, and would be potentially useful to other users of the types in Arachne.

Make a decision on this for 3.0

:+1:

Relevant negotiation methods included in PR #35


fix: bot port undefined

When using the UI on the defaultBotPort of 3978 and the use custom port was false the bot port would get reset to be undefined even if it was corrected by toggling use bot port checkbox.
We provided an initialState and always set the settings on store initialize to keep all the logic there insead of split as some in store setup and some in reducer.  This meant the reducer never received the initial undefined to set the botPort
It now always updates the client and sets the bot port.

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

npm package (@next dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Network connection no longer passed through in Ubuntu 20.04

Describe the issue
I recently set up a virtual Ubuntu v20.04 using UTM on my Macbook Pro M1. For the first several hours, and both turning on and off the vm entirely, network was passed through and I was still able to access browsers (I even watched a youtube video). However, as of today, with no changes to the Virtual Machine settings, it no longer has a network connection.
Configuration

UTM Version: 2.1.2
OS Version: Mac OS 11.4, Ubuntu 20.04
Intel or Apple Silicon? Apple Silicon

Debug log
debug.log
Upload VM
config.plist.txt
I had to upload it as a txt file, but there's my plist.

Did the internet connection of your MacBook Pro change between when internet was working and now? For example, did you go from one WiFi to another, go from work to home or something like that?
In that case I believe that your VM might not recognize the changed network and needs its DNS set to manual to it can continue to work on any network. https://phoenixnap.com/kb/ubuntu-dns-nameservers

@conath yes, that has happened, I didn't even think about that. I've read the tutorial, but I can't quite get how to resolve this issue in ubuntu. Is there a way to pass it through UTM itself? or do I set it up through the Network Proxy?

The cause of the problem is likely that one of your internet connections is IPv6 and the other is IPv4. The technical error is within a technology that UTM uses for network emulation, and should go away once UTM 2.2 is released, as that offers bridged networking. The issue is known for some time. So this is a duplicate of #2353 and/or #2429.
To work around it, you must change the DNS to manual within the guest. I always choose <IP_ADDRESS> as DNS server since that's a fast DNS provider.
Don't change any of the network settings in UTM - only in the guest.


Request for support for the Beaglebone AI

A user has requested support for the BeagleBone AI.  I'll add a Jellyfish link here in a moment.

Any updates on this?

Any updates on this?


Refactor in favour of single source of truth for stopsign decidedness

Please make sure these boxes are checked, before submitting a new PR.

[x] You ran the local CI checker with ./check.sh with no errors
[x] You reference which issue is being closed in the PR text (if applicable)
[x] You updated the OmniPaxos book (if applicable)

Issues
fixes #96
Breaking Changes
The StopSignEntry which is also read by the public API, does not contain a decided flag anymore, but instead an idx.
I don't think this is very noteworthy, since only decided StopSigns are read anyways.

I'd say we'll merge this last out of the ready PRs, since resolving the conflicts shouldn't be too hard here.

I removed the AcceptedStopSign and DecideStopSign messages now, also changed the LeaderState accordingly.

As @kevin-harrison found out, we need to update the accepted index when accepting a stopsign so that the prepare phase is correct (i.e., a stopsign can get adopted). This probably requires to change how the accepted index is calculated in InternalStorage

Right now we don't increment our accepted_idx in storage when we accept a stopsign (the StopSign PR dosen't seem to do this either). The accepted_idx becomes disconnected from the true state of the log. This causes problems, for example, when a leader wants to figure out the max promise of its followers to sync itself. If the followers are ahead by only a stopsign entry then the leader will see them self as equally up-to-date since the followers haven't incremented their accepted_idx .
Tim and I started changing my flexible-quorum merge branch to make the accepted_idx  include the stopsign, but this feature should probably be separated from that. Also I'm not sure how the changes interact with your new stopsign PR. Here is the unfinished work we started:
diff --git a/omnipaxos/src/sequence_paxos/follower.rs b/omnipaxos/src/sequence_paxos/follower.rs
index 366f3f6..21bf727 100644
--- a/omnipaxos/src/sequence_paxos/follower.rs
+++ b/omnipaxos/src/sequence_paxos/follower.rs
@@ -190,7 +190,6 @@ where
                     if let Some(ss_entry) = self
                         .internal_storage
                         .get_stopsign()
-                        .expect("storage error while trying to read stopsign")
                     {
                         let StopSignEntry {
                             decided: has_decided,
@@ -364,13 +363,12 @@ where
             let mut ss = self
                 .internal_storage
                 .get_stopsign()
-                .expect("storage error while trying to read stopsign")
                 .expect("No stopsign found when deciding!");
             ss.decided = true;
             let accepted_idx = self.internal_storage.get_accepted_idx();
             let old_decided_idx = self.get_decided_idx();
             self.internal_storage
-                .set_decided_idx(accepted_idx + 1)
+                .set_decided_idx(accepted_idx)
                 .expect("storage error while trying to write decided index");
             let result = self.internal_storage.set_stopsign(ss); // need to set it again now with the modified decided flag
             self.internal_storage.rollback_and_panic_if_err(
diff --git a/omnipaxos/src/sequence_paxos/leader.rs b/omnipaxos/src/sequence_paxos/leader.rs
index 04fb44b..e88fb36 100644
--- a/omnipaxos/src/sequence_paxos/leader.rs
+++ b/omnipaxos/src/sequence_paxos/leader.rs
@@ -572,12 +572,11 @@ where
                 let mut ss = self
                     .internal_storage
                     .get_stopsign()
-                    .expect("storage error while trying to read stopsign")
                     .expect("No stopsign found when deciding!");
                 ss.decided = true;
                 let old_decided_idx = self.internal_storage.get_decided_idx();
                 self.internal_storage
-                    .set_decided_idx(self.internal_storage.get_accepted_idx() + 1)
+                    .set_decided_idx(self.internal_storage.get_accepted_idx())
                     .expect("storage error while trying to write decided index");
                 let result = self.internal_storage.set_stopsign(ss);
                 self.internal_storage.rollback_and_panic_if_err(
diff --git a/omnipaxos/src/sequence_paxos/mod.rs b/omnipaxos/src/sequence_paxos/mod.rs
index c3f9852..32cfb51 100644
--- a/omnipaxos/src/sequence_paxos/mod.rs
+++ b/omnipaxos/src/sequence_paxos/mod.rs
@@ -251,7 +251,6 @@ where
                     if let Some(ss) = self
                         .internal_storage
                         .get_stopsign()
-                        .expect("storage error while trying to read stopsign")
                     {
                         if !ss.decided {
                             for follower in self.leader_state.get_promised_followers() {
@@ -356,7 +355,6 @@ where
         match self
             .internal_storage
             .get_stopsign()
-            .expect("storage error while trying to read stopsign")
         {
             Some(ss) if ss.decided => Some(ss.stopsign),
             _ => None,
@@ -473,7 +471,6 @@ where
     fn get_stopsign(&self) -> Option<StopSign> {
         self.internal_storage
             .get_stopsign()
-            .expect("storage error while trying to read stopsign")
             .map(|x| x.stopsign)
     }
 }
diff --git a/omnipaxos/src/storage.rs b/omnipaxos/src/storage.rs
index 9228580..e1f255c 100644
--- a/omnipaxos/src/storage.rs
+++ b/omnipaxos/src/storage.rs
@@ -213,6 +213,8 @@ where
     compacted_idx: u64,
     /// Real length of logs in the storage.
     real_log_len: u64,
+    /// TODO: docs
+    stopsign: Option<StopSignEntry>,
 }

 impl<T> StateCache<T>
@@ -228,12 +230,17 @@ where
             decided_idx: 0,
             compacted_idx: 0,
             real_log_len: 0,
+            stopsign: None,
         }
     }

     // Returns the index of the last accepted entry.
     fn get_accepted_idx(&self) -> u64 {
-        self.compacted_idx + self.real_log_len
+        let mut accepted_idx = self.compacted_idx + self.real_log_len;
+        if let Some(_) = self.stopsign {
+            accepted_idx += 1;
+        }
+        accepted_idx
     }

     // Appends an entry to the end of the `batched_entries`. If the batch is full, the
@@ -374,7 +381,7 @@ where
         } else if idx < virtual_log_len {
             Ok(Some(IndexEntry::Entry))
         } else if idx == virtual_log_len {
-            match self.get_stopsign()? {
+            match self.get_stopsign() {
                 Some(ss) if ss.decided => Ok(Some(IndexEntry::StopSign(ss.stopsign))),
                 _ => Ok(None),
             }
@@ -388,7 +395,6 @@ where
     where
         R: RangeBounds<u64>,
     {
-        let accepted_idx = self.get_accepted_idx();
         let from_idx = match r.start_bound() {
             Bound::Included(i) => *i,
             Bound::Excluded(e) => *e + 1,
@@ -397,24 +403,19 @@ where
         let to_idx = match r.end_bound() {
             Bound::Included(i) => *i + 1,
             Bound::Excluded(e) => *e,
-            Bound::Unbounded => {
-                let idx = self.get_accepted_idx();
-                match self
-                    .get_stopsign()
-                    .expect("storage error while trying to read stopsign")
-                {
-                    Some(ss) if ss.decided => idx + 1,
-                    _ => idx,
-                }
-            }
+            Bound::Unbounded => self.get_accepted_idx(),
         };
+
+        // TODO: this needs to be based off of real_log_len not accepted_idx since that includes the
+        // stopsign now
         let compacted_idx = self.get_compacted_idx();
+        let real_log_len = self.state_cache.real_log_len;
         let to_type = match self.get_entry_type(to_idx - 1, compacted_idx, accepted_idx)? {
             // use to_idx-1 when getting the entry type as to_idx is exclusive
             Some(IndexEntry::Compacted) => {
                 return Ok(Some(vec![self.create_compacted_entry(compacted_idx)?]))
             }
-            Some(from_type) => from_type,
+            Some(to_type) => to_type,
             _ => return Ok(None),
         };
         let from_type = match self.get_entry_type(from_idx, compacted_idx, accepted_idx)? {
@@ -686,11 +687,13 @@ where
     }

     pub(crate) fn set_stopsign(&mut self, s: StopSignEntry) -> StorageResult<()> {
+        self.state_cache.stopsign = Some(s.clone());
         self.storage.set_stopsign(s)
     }

-    pub(crate) fn get_stopsign(&self) -> StorageResult<Option<StopSignEntry>> {
-        self.storage.get_stopsign()
+    pub(crate) fn get_stopsign(&self) -> Option<StopSignEntry> {
+        // TODO: is this clone necessary when we merge new StopSign PR?
+        self.state_cache.stopsign.clone()
     }

     pub(crate) fn create_snapshot(&mut self, compact_idx: u64) -> StorageResult<T::Snapshot> {

Okay so I applied the small feedback changes.
Then I merged the caching from master and then made the changes to accepted_idx.


Have the "maxDate" and "minDate" boundaries via props

it would be good to have this feature

@Adesh added support for minDate and maxDate props in version 1.3.0. Please see Readme for usage


Translation to Portuguese - words

Words: "unfixed" to "instável", "mutating" to "mutante".

[x] I have read freeCodeCamp's contribution guidelines.
[x] My pull request has a descriptive title (not a vague title like Update index.md)
[x] My pull request targets the master branch of freeCodeCamp.
[x] None of my changes are plagiarized from another source without proper attribution.
[x] My article does not contain shortened URLs or affiliate links.

If your pull request closes a GitHub issue, replace the XXXXX below with the issue number.
Closes #XXXXX

Congratulations on your first merged pull request to freeCodeCamp. 🎉🎉🎉🎉


Fix hide-useless-comments selectors

LINKED ISSUES:
#3992

TEST URLS:
https://github.com/justinfrankel/licecap/issues/97

SCREENSHOT:
Before

after

As long as it was tested on the licecap thread for the similar comment it’s good to be merged

@cheap-glitch can you look this over? Why do we use different selectors for hide and unhide?

This broke https://github.com/sindresorhus/refined-github/pull/3992
In the linked Licecap thread you can clearly see that the similar comment is hidden, but not expanded later:

Also it might be a good time to also fix that little corner. The rule should be be:
.rgh our class .timeline-comment--caret:before {
	border-right-color: var(--github-red);
}

In the linked Licecap thread you can clearly see that the similar comment is hidden, but not expanded later

Weird, it's working for me (Firefox + 21.2.23).


Rename windows fork of deprecated-props to cross-plat

RNW also has the .win32 extension, change to plain .js to reflect that, since the file contents would be the same and

cc @yungsters

Can we also get rid of the *.ios.js file, then?

We could yeah, I'll push an update

@yungsters Done

@rectified95, published as v2.3.0. Thanks again.


Issue Report: /en-us/guides/exports/get-started

In "Downloading exports" section the link to "Ads" JSON example points to a wrong URL (...common-models/targets#json-examples) should be ".../ads#..."

This should be resolved now. Thanks for pointing out this issue!


Remove Default when useless on its own

Description
Some structs implement Default. When using said default its pointless on its own. It requires other methods which can easily lead to mistakes.
What is a Terminal::default()? (Chart)Dataset::default() without data.
To Reproduce

Just using default without something else is pointless:
let datasets = vec![
    Dataset::default(),
    Dataset::default(),
];
let x_axis = Axis::default();
let y_axis = Axis::default();
let chart = Chart::new(datasets)
    .x_axis(x_axis)
    .y_axis(y_axis);

// lets render... nothing?
let chart = Chart::default();

Expected behavior

Default should work on its own without further modifications.
Rust is well suited to create only valid data structures. The builder pattern is a great example for this preventing invalid data structures on build().
There should be a new method accepting the required data instead of manipulating a default.
-Dataset::default().data(data);
+Dataset::new(data);

In this case the data method should also be removed to have a single way of creating the struct. Especially with the single-use, short-lived structs there is no point in keeping the setters rather than confusion.
When structs contain other structs that have a Default implementation which does not make any sense on its own then Option::None is a way better fit instead of some pointless default.
Migration suggestion:

create new method with required arguments, deprecate the setter methods which are required, pointing towards the new method.
after some time remove said setters and Default implementation.

Defaults which seem useless
An easy indicator: When the documentation of the struct never uses the default() on its own.
Some are debatable like Style (its very convenient to use Style::default() over None) and especially widgets are straight forward.

[ ] BarChart

[ ] BarGroup
[ ] Bar

[ ] Block (default is useless but with titles and borders probably the simplest way to keep it that way?)

[ ] Title

[ ] Buffer

[ ] Cell

[ ] CalendarEventStore (unsure)
[ ] Canvas

[ ] Label
[ ] Layer
[ ] BrailleGrid
[ ] CharGrid
[ ] HalfBlockGrid
[ ] Circle
[ ] Line
[ ] Map (drawing with Color::Reset me be intended but very unlikely)
[ ] Rectangle

[ ] Chart

[ ] Axis
[ ] ChartLayout
[ ] Dataset

[ ] Clear (Clear::default() -> Clear)
[ ] Constraint (Either you don't need a layout or you want something specific?)
[ ] Gauge

[ ] LineGauge

[ ] Layout (Either you want a specific layout or you don't need it)

[ ] Margin (default is likely a bug? Explicit zero or something calculated)
[ ] Size (default is likely a bug? Explicit zero or something calculated)

[ ] Line (default is likely a bug? Should be explicitly empty?)

[ ] Span
[ ] Text

[ ] List
[ ] Masked (why mask nothing?)
[ ] Paragraph

[ ] Wrap

[ ] Scrollbar

[ ] ScrollbarState
[ ] symbols::scrollbar::Set (many empty str, what a benefit)

[ ] Sparkline
[ ] Style (unstyled == Option<Style>::None?)

[ ] Modifier (why created in the first place then?)

[ ] StyledGrapheme (default is likely a bug? Should always be something?)
[ ] Table

[ ] Cell
[ ] Row

[ ] Tabs
[ ] Terminal

[ ] CrosstermBackend

[ ] ModifierDiff

[ ] TermionBackend

[ ] Fg
[ ] Bg
[ ] ModifierDiff

[ ] reflow

[ ] WordWrapper
[ ] LineTruncator

Removing Default is a breaking change (which I'd be down to push), and thus requires proper deprecation

Yes, but we can not mark them as deprecated directly. That's why I think the only way to do it is with a bigger breaking release or by marking the setters deprecated. Which is also not ideal.

I don't think your example is good when we consider widgets could be stored (especially when rendering by ref). The setter is useful to avoid the entire re-creation of the widget.

I think there are two approaches to widgets: Storing the state or being thinner wrappers taking references. Currently the second one is used. rendering by ref would go towards storing stuff inside the widget itself. This question should be answered before thinking about removing the setters.
Personally I would like to always have useable things. If they should be empty (like your Dataset example), they should be created explicitly. It should not be possible to do so by accident. The API should push the people to use it correctly. Having a single way to use an object is the best way in doing so.

widgets could be stored

With serde support that is indeed something we need to think about.

First up - I'm definitely in agreement that values should be generally constructed in a usable state and the API should push the construction of valid structs.
There are a few things I think are worth considering to this:

partial construction of types is something that the builder approach makes possible, so initially useless values is often an intentionally allowed state.
Existing code should be generally easy to update to use the new methods
Use github searches to understand the impact of the change on downstream code - generally I use search queries like ratatui "barchart::default()" AND (NOT org:ratatui-org) AND (NOT is:fork)
Doing too many breaking changes at once causes user angst

partial construction of types is something that the builder approach makes possible, so initially useless values is often an intentionally allowed state.

Normally with the builder pattern there are two structs, the target one which only exists when possible and the builder which is kind of default in the beginning. Ratatui has both merged into a single struct.

Doing too many breaking changes at once causes user angst

I think removing Default should be done in its own update with a clear path what to do (default() -> new(something)). Before that we should update all the examples and so on, so we know this path is working well. Also, users looking at examples will already use that way and don't consider using default() as they haven't seen it somewhere. Marking required setters as deprecated pointing towards the new() method will also ease the path before the breaking change comes. I think that will reduce a lot of pain points on the breaking change. And we notice early what does not work well so far and can adapt before the breaking change happens.

Normally with the builder pattern there are two structs, the target one which only exists when possible and the builder which is kind of default in the beginning. Ratatui has both merged into a single struct.

Yeah - I think this was probably a mistake when compared to more formal builder approaches, but it's what we inherited, and it worked well for many apps. The pattern is sometimes called the builder-lite pattern. https://matklad.github.io/2022/05/29/builder-lite.html (and the associated reddit thread has more discussion)

I think removing Default should be done in its own update with a clear path...

Agreed.
I wonder whether it's worth considering a more explicit builder approach for the incremental build needs? Effectively meaning T::default().x() becomes T::builder().x().build() in user code.

I wonder whether it's worth considering a more explicit builder approach for the incremental build needs? Effectively meaning T::default().x() becomes T::builder().x().build() in user code.

For most widgets I don't think so. When a List has ListItems (even an empty Vec) its valid. The rest is optional. Keeping them that way is just simpler I guess.
So its only relevant for things like a Block which on its own is useless but has border or title which both make it useful.

https://rust-lang.github.io/api-guidelines/interoperability.html#c-common-traits

Note that it is common and expected for types to implement both Default and an empty new constructor. new is the constructor convention in Rust, and users expect it to exist, so if it is reasonable for the basic constructor to take no arguments, then it should, even if it is functionally identical to default.

There are a lot of structs mentioned in this. If you do decide to work on this, please don't submit a PR that is large and does all of these. This type of PR tends to be difficult to review reasonably and languishes in the PR queue because of that. More useful would be a smaller targeted PR for a few of these at a time.


WaveTournament | Custom Tournament Client Design using gosumemory

A reference design for gosumemory tournament support
Initially want to keep it by myself but it might be helpful for others to experiment
In action:
https://twitter.com/Victim_Crasher/status/1319851426600767488
Features:

1v1 to 4v4 OK
Best of Score automatically if you change it on tournament client
ScoreV2 OK (thanks for fix BlackShark)
Team Name OK (thanks for fix BlackShark)
Score calculation should have no bug now due gosumemory taking game score directly from client (again, thanks for fix BlackShark)
(Should have been) Easy to customize, just edit the pngs on WaveTournament/static folder

Screenshots
Chat + Warmup (Team score disabled) view

Chat + Team score enabled view

Gameplay

To code reviewer:
Please check index.js line 97, and please point me if there's more efficient way to change background image other than
if(tempImg !== data.menu.bm.path.full){
    tempImg = data.menu.bm.path.full;
    data.menu.bm.path.full = data.menu.bm.path.full.replace(/#/g,'%23').replace(/%/g,'%25').replace(/\\/g,'/');
    mapContainer.style.backgroundImage = `url('http://<IP_ADDRESS>:24050/Songs/${data.menu.bm.path.full}?a=${Math.random(10000)}')`;
}

Because sometimes it causes error and the image won't load

About image loading, can you give some examples otherwise i don't see any problems

About image loading, can you give some examples otherwise i don't see any problems

I did this because of windows file system that using \ instead of /
Might not be the best if used in other OS but then again BlackShark said that it wont support other OS atm.
.replace(/\\/g,'/');

About image loading, can you give some examples otherwise i don't see any problems

I did this because of windows file system that using \ instead of /
Might not be the best if used in other OS but then again BlackShark said that it wont support other OS atm.
.replace(/\\/g,'/');

well i figured out you need to use this
.replace(/\\/g,'/');

because you changing style of object in other counters i preferred to use src instead, it's okay i guess just web dev things
https://github.com/l3lackShark/static/blob/fb959c3f09e1fa6715c6b62f2949a7683b5e5612/Classic/index.js#L62

About image loading, can you give some examples otherwise i don't see any problems

I did this because of windows file system that using \ instead of /
Might not be the best if used in other OS but then again BlackShark said that it wont support other OS atm.
.replace(/\\/g,'/');

well i figured out you need to use this
.replace(/\\/g,'/');

because you changing style of object in other counters i preferred to use src instead, it's okay i guess just web dev things
https://github.com/l3lackShark/static/blob/fb959c3f09e1fa6715c6b62f2949a7683b5e5612/Classic/index.js#L62

Yea, I'm using different approaches. If it's still acceptable than I'm okay leaving it as is.

Thanks!


Revert "package_test: we haven't published a rocky 8 for arm with google-cloud-cli (#1006)"

Agent is released now and it breaks staging
This reverts commit f146c18299b6744443ba93432476e2c361939b50.
/hold

/cc @elicriffield @zmarano
fixes rocky in staging

/unhold

/lgtm


evdev events not firing

Sometimes when a device is created on the server, the device never creates axis events, only buttons/keys. LowLevel.writeEvent returns 0 but nothing happens. As far as I've seen, it only happens when the gamepad is interacted with within a second or so of loading. Refreshing and waiting briefly usually fixes it.
Could be a libevdev bug. Hard to diagnose further without more testing in different environments.

As far as I've seen, it only happens when the gamepad is interacted with within a second or so of loading.

I'm increasingly sure this is what makes the difference. So it seems that there is some kind of race condition at startup. We need to wait for the device to be fully initialised, whatever that means.
It's possible this only requires changes in the evdev library, and not in monpad itself.


State machine reactor ideas

Some ideas for improving the SM reactor from today's deep dive.
Supported operations:

Fast: find set of active states
Fast: find all updates for operation/operation SM
Fast: subscribe to state machine updates per operation

Idea: one notifiere, check if anything changed you care about

Slow: Rewriting SM history per-module

Unclear: should opid be an index or hash+monotonic index?

look into cursor-based approach
Do indices need to be global or local?

Edit(dpc): Please describe what each of <opid> <sm_idx> <state_idx> <state> mean first, I'm myself confused about op_id and sm_idx, their meaning and purpose.

DB schema proposal:

<opid> <sm_idx> <state_idx> -> <state> <start_time>   // set of all states that ever existed
<opid> <sm_idx>             -> ()                     // active set

DB schema proposal (redundant version of 1):

<opid> <sm_idx> <state_idx> -> <state> <start_time>   // set of all states that ever existed
<opid> <sm_idx>             -> <state_idx> <state>    // active set, redundant and lookup optimized

DB schema proposal:

<opid> <sm_idx> <state_idx> -> <state> <start_time>   // inactive set
<opid> <sm_idx>             -> <state> <start_time>   // active set

Testing:

Add way to test SM idempotency

To expand on the "log". If <opid> is kind of randomly allocated then the whole <opid> <sm_idx> <state_idx> is not a "log". It's insert-only, not append-only. It can be considered a table of sub-logs, where each <opid> <sm_idx> is append-only.
Global ordering is useful, because it allows following a global position in the log and reliably following everything without missing a single record. Even for debugging performance, being able to sort events by how they were actually processed is useful, and time can't be reliably used for that.
The insert performance is also much worse because database needs to reshuffle all btree nodes on the path on all insert, but i think that's unimportant, and unavoidable anyway.
Unfortunately we also do want a very fast "lookup only updates to a specific state machine", and prefixing every record with incremented id breaks it. Now events between state machines are interleaved, and sorted by when they globally happened.
We can ignore this aspect and accept that we don't have a "log", but "table of smaller-logs", or we need to add another "table"/"key"
<global_log_id> -> <opid> <sm_idx> <state_idx>

Where <globa_log_id> is just a u64 incremented every time an event is added. <global_log_id> uniquely identifies and ordered every event in the system.
If we don't have need for it now, it could always be added in the future. Thought I would argue, just having a fedimint-cli dev reactor event-log dump --position 163 --limit 10 would be a great too to have for debugging.

That would a neat thing to take care of, but we should probably open another issue for it, because I see some non-tirivial questions right away: "how do you know you're offline", "is it you being offline, or just e.g. Federation", "where is the best place to gate it - executor sm-s are not the only places that might be making chatty network calls".

Seems like it deserves its own issue

Turns out it already does have one (edited it in too) https://github.com/fedimint/fedimint/issues/3496


resource rename

just reset the copyTo in the buiild script and the resource name for M1

I'll be releasing a version soon that will work on the new ARM.

I'll be releasing a version soon that will work on the new ARM.


Secure test running orchestration

When we will be rolling out orchestration for the purpose of running tests it's important that we take some extra measures to ensure that it's properly secured.
This is just a brain-dump of what I have in mind on this topic and should probably restructured into a more formal threat model and specification ready for being implemented.
By making it possible for probes to run active tests, if the system is not properly secure, we could potentially expose all our active clients to attacks from some state actor.
The primary threat we want to mitigate against is some state actor compromising OONI servers and being able to orchestrate probes to de-anonymise them or do some undesirable actions.
One thing to keep in mind is that if the "device tokens" used for sending push notifications are compromised an attacker can send push notifications to our probes. These are currently stored in plaintext in the database.
Something that we should look into is the possibility of issuing signed requests for orchestration. These requests would be signed using some hardware security token by the authorised key and the probes would then verify the signature before proceeding to run the measurement. If the orchestration request is either not signed or contains an invalid signature it should be ignored.
For signing the requests we should use something that is fairly standard such as something part of the JOSE family (JWT, JWS, etc.).
We should look into how and if it's possible to create a JWS based on some hardware security module like the yubi-key.
Some discussions on this topic happened at the OONI gathering in berlin

part of the JOSE family (JWT, JWS, etc.) ... if it's possible to create a JWS based on some HSM

I'm not 100% sure if JW? is a way to go. Detached PGP signature on some blob may be easier to integrate into MK.

Detached PGP signature on some blob may be easier to integrate into MK.

PGP is a very complex protocol that we probably don't want to have to implement or integrate the terrible libraries out there into MK. JW* is on the other hand much simpler and has a variety of libraries for validating and creating them in a multitude of languages.

much simpler

Well, signing "object" sounds like more complex task than signing "blob", JW* also has some history of poor implementations. But, yeah, it may be better than PGP, I'm not familiar with state of GPGME library.

Well, signing "object" sounds like more complex task than signing "blob"

Actually what it signs is just a blob (the base64 encoding of the JSON serialisation of the JSON document).

JW* also has some history of poor implementations.

Heh, well at least it has many more implementation than PGP to choose from: https://jwt.io/ (44 implementation in 22 different languages)

Using a hardware security module to sign a JSON web token: https://connect2id.com/products/nimbus-jose-jwt/examples/pkcs11

Some of outcomes of discussion:

We want to protect our users ⇒ we want to use HSM to store key to sign orchestration requests.
Any person from the roster can sign orchestration requests, single signature is enough.
We want to be able to rotate and revoke keys used to sign orchestration requests ⇒ we need CA to sign keys and deploy new keys over-the-air.
We are not going to store CA keys in physically protected environment (like bank vault) ⇒ we need two CAs to be protected against accidental key destruction (due to fire, bad water pipes, etc).
Two distinct persons form the roster should store CA keys.
CA keys can't be updated, they are compiled into the app. We still can send notification to the user saying "Please, update the app" in case of lost CA key.
Revocation of CA keys is not possible as we have no plan for compromised CA key right now :-(
We should use RSA2048 for signatures as it's most widely adopted by variety of smartcards (RuToken, FSB-certified, OpenPGP card, FSFE-certified, Yubikey 4, Google-certified and Yubikey Neo, NFC-enabled one)

More discussions have lead to more conclusions:

We should drop the idea of having a root CA and instead hardcode the keys of people in the governance roster inside of the app itself.
Granting somebody rights to orchestration means shipping a new app update
Revocation means we just pushing a new app update with the new key

I ordered some yubikeys to continue implementing this thing and will put this on hold until they arrive.

One of the things to remember is that revocation doesn't work :)  As you note, "Revocation means we just pushing a new app update with the new key" - but you have to plan for people not applying the update.
This means you'll have part of the population not accepting commands from the new key, and part of the population vulnerable to misuse of the old key (if for example it was compromised.)
You can try adding an expiration date to keys but this assumes that the client has a correct and untamperable clock. (And you still risk orphaning people who don't apply updates.)

If you go with JWS and such, make sure you're very careful about not accepting stuff with NONE signatures and only the type of signature you expect - common bug in JWS stuff.

Might be a good idea to hardcode a third and keep that one in a safe deposit box or something, just in case two people lose their key. (Again, I'm thinking about the orphaning un-updated poeple problem).

@tomrittervg these are good points, thanks for chiming in!
On the topic of Revocation, some of the rational behind going for this simpler option (as opposed to having a CA and having a more complex scheme for dealing with this) is that:
a. Our app update stats show us that we actually have pretty high app update ratios:

on Android 89.3% of daily active users (DAU) are on the latest version of the app released on August 10th, with most "updated" users having updated within 24 hours of the release
on iOS 82.0% DAU are on the latest version released on August 18th, with also most users having updated within 24 hours of the release

b. Our plan for dealing with a compromised key is that of using message push notifications to inform users of the critical security breach as well as all other communication channels to encourage them to update to the latest version
I don't think in this case adding an expiration date to the keys is optimal as it means that it will ad an extra burden on the mobile team to have to make releases more often to keep up with the key rotation lifecycle. It also doesn't really do that much in the case of a compromised key since the attacker will likely have a sufficiently large window of time to use the compromised key and we would rather focus on making the effort of reaching out to users more effective.

very careful about not accepting stuff with NONE signatures and only the type of signature you expect

yes I am aware of this "feature" of the JWS spec and noticed that libraries don't actually document this critical caveat that well.

Might be a good idea to hardcode a third and keep that one in a safe deposit box or something, just in case two people lose their key

This is a very good suggestion. I think we should do it.

you have to plan for people not applying the update

Yep, the vague plan for people not applying the update is

either BIG SCARY WARNING pushed through orchestration saying that people absolutely must update because some of the keys is compromised
or kiss-of-death message pushed  through orchestration preventing old clients from being orchestrated (either "at all" or "with some specific key") that is signed either with ANY key from trust store or specifically compromised key (like PGP revocation certificate)

We've not reached consensus yet regarding the method we want to use. Maybe neither of them. In both plans the attacker who compromised the key should also "hack" OONI infrastructure to be able to send messages on behalf of OONI to notification hub. I assume that Apple and Google (who handle significant part of notification infra) may be considered trusted agents as we use theirs app stores to deliver the binary :-)

I don't think in this case adding an expiration date to the keys is optimal as it means that it will ad an extra burden on the mobile team to have to make releases more often to keep up with the key rotation lifecycle.

Yes, I agree that the expiration might make our life more complex.

We are going to be discontinuing orchestra in the future. We can close this issue as no longer relevant.


Remove mapping types

As part of v2.0 release, mapping types are getting removed from OpenSearch engine. Below are the changes in the opensearch-engine.

Removal of type from rest end-points
Removal of include_type_name parameter from API requests.

As part of this issue, please verify if type removal change on OpenSearch engine impacts this repository. If yes, then please remove the type references/usage from this plugin.
Top level changes are captured in gist below:
https://gist.github.com/dreamer-89/d76eaf639171e8ab32fa7f8b9d6c93d3
For more detailed changes, please check meta issue below:
Related: OpenSearch-engine meta issue

This does not affect performance-analyzer plugin.
PA does not have any actions like index creation, put mapping, get mapping, put template, get template and get field mappings APIs are not used.


Changing name of terminal with split terminals in Switch Active Terminal changes wrong terminal name

VSCode Version:

Version 1.22.2
Commit 3aeede733d9a3098f7b4bdc1f66b63b0f48c1ef9
Date 2018-04-12T16:38:45.278Z
Shell 1.7.12
Renderer 58.0.3029.110
Node 7.9.0
Architecture x64

OS Version: Windows 10

Steps to Reproduce:

Open terminal (AKA term1) and split it (with Ctrl+\)
Open another terminal (AKA term2)
Ctrl+Shift+P Switch Active Terminal
Click on the Rename button of term1 and change it's name, this changes fine: bash, bash -> client, bash
Click on the Rename button of term2 and change it's name, this changes the name of the second split terminal of term1: client, bash -> client, server

This happens when opening more terminals or split terminals.
Basically, the Rename action changes the terminal at index = line in the list of terminals,
but the list of terminals contains all the split terminals, so index = 2 in the switch list is the second terminal in the terminals list, which is the split terminal of term1 in the example.

This also happens with the Delete button, same idea. Deletes the wrong terminal.

@Tyrair can I get a comment on this?

@gioragutt sorry, working through a big backlog of notifications. I can repro the bug, will see if I can get it fixed in 1.24 👍

@gioragutt I fixed it, this was missed when the split concept was added. It will now rename/kill the last active  terminal (not necessarily the first) within the selected "tab".

@Tyriar First of all, thanks for the reply and work, that's immensely appreciated.
The change is acceptable,  although, you could just assign an index to each terminal and have it displayed in the dropdown.
f.e: tab 1 contains terminals 1, 2 and 3, and tab 2 contains 1 and 2.
The dropdown could consist of:

1.1 <name>
1.2 <name>
1.3 <name>
2.1 <name>
2.2 <name>

That's just as easy to implement, and might give more control over the terminals.
I haven't seen the source code for terminals, but if you iterate over tabs and you can get the terminals, or you can link each terminal to the index of it's tab, then that's quite straightforward.
@oriash93 תוקן 👍


Migrate examples into separate repo

@frauzufall and I discussed migrating the examples out of the main sciview repo into their own. This comes with an additional suggestion that we would actually have 2 repos of examples: 1 for Java implementations, and 1 for Kotlin implementations.
This would require some changes to scripts in https://github.com/scenerygraphics/sciview-update-sites (and the corresponding scripts for releasing to the SciView-Unstable update site in the main sciview repo), where we would need to add the sciview-examples-kotlin repository to the update site.
bump to @elect86 and @skalarproduktraum for discussion.

Would you still ship them together with sciview?

Definitely. We are going to need to eventually revamp the SciView-Unstable deployment, but as is the stable update site is setup on https://github.com/scenerygraphics/sciview-update-sites, which can easily add in a supplemental examples package (presumably from the proposed sciview-examples-kotlin repo)

@skalarproduktraum @ctrueden I'm revisiting this discussion after some time. This doesn't sound like a good use of our time right now, or even before 1.0.0.

What were the reasons in the first place?

I believe we wanted to make it easier for folks to work with smaller/simpler projects that changed less. Also to make it possible for a Java/Maven dev to have a project without needing to adjust to the gradle/Kotlin part of the codebase. That has been a pretty regular request from the community in the past.
This is something we can pretty easily do in the future, and I don't see a clear benefit at this point in time.

I like the simplicity of keeping the examples here in the same repository, as long as it doesn't bloat the repo size by many MB.
Tangentially: right now the repo is 135M, but only because @PowerOfNames's simvis branch bloats the repository hugely by committing many files to a models directory. That branch should never be merged as is, but rather reworked to never add large binaries in the first place.
Dumb question though: which files in this repo currently constitute "examples"? I couldn't figure it out.

Dumb question though: which files in this repo currently constitute "examples"? I couldn't figure it out.

This should have been more clearly stated as the "demos." We aren't shipping much sample data within sciview, and things like the CREMI data are fetched from a remote source and cached locally.

Thanks guys. FWIW, I force-pushed the simvis branch to get rid of the erroneously committed models (@PowerOfNames told me that their addition was unintential), so now the repo is only is only 16MB! :tada:

I'm closing this. I think the way the underlying need should be addressed is by providing more examples based on https://github.com/scenerygraphics/minimal-sciview-example-project and keeping the examples we have in the main repo.


[CodingStandard] Break lines with array items priority

Current behavior of LineLenghtFixer is with method call priority:
Before
$result = $this->someService->someMethod(
    [$this->someService->someSuperLooooooooooongMethod(), $this->someService->someSuperLooooooooooongMethod(
        1
    ), $this->someService->someSuperLooooooooooongMethod(
        2
    ), $this->someService->someSuperLooooooooooongMethod(
        3
    ), $this->someService->someSuperLooooooooooongMethod(4)]
);

After
$result = $this->someService->someMethod([
	$this->someService->someSuperLooooooooooongMethod(),
	$this->someService->someSuperLooooooooooongMethod(1),
	$this->someService->someSuperLooooooooooongMethod(2),
	$this->someService->someSuperLooooooooooongMethod(3),
	$this->someService->someSuperLooooooooooongMethod(4)
]);

Fixed with https://github.com/symplify/symplify/pull/2093/files


Implement SortCommand for sorting posts by postdate

syntax:
sort postdate asc
sort postdate desc

Codecov Report

Merging #32 (a557b24) into master (8764478) will decrease coverage by 1.71%.
The diff coverage is 2.08%.

@@             Coverage Diff              @@
##             master      #32      +/-   ##
============================================
- Coverage     62.29%   60.57%   -1.72%
  Complexity      424      424
============================================
  Files            86       88       +2
  Lines          1554     1598      +44
  Branches        171      174       +3
============================================
  Hits            968      968
- Misses          536      580      +44
  Partials         50       50

Impacted Files
Coverage Δ

...main/java/seedu/address/commons/core/Messages.java
0.00% <ø> (ø)

...java/seedu/address/logic/commands/SortCommand.java
0.00% <0.00%> (ø)

.../seedu/address/logic/parser/AddressBookParser.java
84.21% <0.00%> (-4.68%)
:arrow_down:

.../seedu/address/logic/parser/SortCommandParser.java
0.00% <0.00%> (ø)

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

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

...rc/main/java/seedu/address/model/ModelManager.java
69.56% <0.00%> (-3.17%)
:arrow_down:

src/main/java/seedu/address/model/post/Post.java
21.27% <0.00%> (ø)

.../java/seedu/address/model/post/UniquePostList.java
27.45% <0.00%> (-2.34%)
:arrow_down:

...in/java/seedu/address/storage/JsonAdaptedPost.java
62.96% <ø> (ø)

... and 2 more

Continue to review full report at Codecov.

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


Add support for command JSON.ARRAPPEND

Add support for the JSON.ARRAPPEND command in DiceDB similar to the JSON.ARRAPPEND command in Redis. Please refer to the following commit in Redis to understand the implementation specifics - source.
Write unit and integration tests for the command referring to the tests written in the Redis codebase 7.2.5. For integration tests, you can refer to the tests folder. Note: they have used TCL for the test suite, and we need to port that to our way of writing integration tests using the relevant helper methods. Please refer to our tests directory.
For the command, benchmark the code and measure the time taken and memory allocs using benchmem and try to keep them to the bare minimum.

could you please assign this to me

@raghavbabbar you already have a few on your plate, once you wrap that you can pick this one. trying to be fair here to others :) but thank you so much for being so eager.

@arpitbbhayani, I can pick this up. could you assign this to me?

@srivastava-yash assigned, thanks for picking this up.

@lucifercr07 @JyotinderSingh Quick question: So in JSON.ARRAPPEND we want to append to a list at a given path, so should I check the type of the fields that are already there in the array and then convert this value in the argument to the same type and only then append, right?
Or should I just append it assuming the user knows what they are appending? Either I can just run a sonic.UnmarshalString on the arg and just append. What do you suggest? Nothing was mentioned in the redis doc about it, maybe I can try finding it in their code

@lucifercr07 @JyotinderSingh Quick question: So in JSON.ARRAPPEND we want to append to a list at a given path, so should I check the type of the fields that are already there in the array and then convert this value in the argument to the same type and only then append, right?
Or should I just append it assuming the user knows what they are appending? Either I can just run a sonic.UnmarshalString on the arg and just append. What do you suggest? Nothing was mentioned in the redis doc about it, maybe I can try finding it in their code

You need to check the type of object already present at any path which you'd like to modify. If the object doesn't match the expected type you'll return an error. Ensure that test cases validating this behavior are also added.
Additionally, run the same commands on a redis instance (redis docs pages have an embedded cli to run redis commands) and ensure the results (including error responses) are consistent.


Error not connected to steam

When I press start it appears an error window telling that I'm not connected to steam.

Have you gone through the sign in process when the program starts, and if so does your Steam account own CS:GO?

I solved the problem temporarily by deleting the file sentry_*****.bin but after using it sometimes it appears again. Answering your question, yes I've signed in and I own CS:GO.

The sentry file gets created after the first time you sign in with a Steam email auth code (it's used so you don't have to input your auth code every time you log in, assuming you're not using mobile auth), but sometimes something can go wrong and deleting it then trying to sign in forces Steam to send you a new auth code to use for that program, which usually fixes the problem.
Do you keep getting the errors every time you sign in even after you've deleted the sentry file and forced it to be recreated?

No, as I said the file appears again and the error seems random, right now I can enter and search, but I don't know if next time I enter will be the same.

The file is supposed to be there, if you can sign in now then the file should be working fine and you can leave it as is.


[Bug] Problem loading widget configuration. Probably associated widget type was removed

Describe the bug
I followed everything in this Thingsboard Cloud Getting Started.
I can see the data coming in.  However, when I shared the dashboard with one of the customers.  I am getting the below error when he views the dashboard.

I do not have this issue when I am the one viewing the dashboard.  What could be the error?
Your Server Environment

cloud.thingsboard.io

Your Client Environment

Thingsboard Cloud

Connectivity

MQTT

Device vendor and model

To Reproduce
Steps to reproduce the behavior:

Go to '...'
Click on '....'
Scroll down to '....'
See error

Expected behavior
I should be able to see the dashboard.
Screenshots
Please see above.
Additional context
Add any other context about the problem here.

@donskytech
Hello,
it's not clear from the description, how this bug is related to the Edge service?
Do you have issues on the Edge service, or only on the thingsboard.cloud?
Please provide more details on your Edge configuration and screenshots from the Edge service.

@donskytech
Hello, it's not clear from the description, how this bug is related to the Edge service? Do you have issues on the Edge service, or only on the thingsboard.cloud? Please provide more details on your Edge configuration and screenshots from the Edge service.

Sorry, I probably made a mistake to where I should post my question.
This is in the Thingsboard Cloud Dashboard.
Can you transfer it for me to a proper project?

@donskytech
Hey, did you provide for the customers READ permissions for the Widget Type resource?

Hey,
I did not see this in the Thingsboard Cloud documentation Getting Started Guide
Where should I add this READ permission for the Widget Type Resource?
Thanks.

Hey,
Kindly disregard this issue.  I recreated a new user with a new Gmail and it is working fine now.


Extend customFields to other targets

Hi! Please add customFields to other targets, at least elasticsearch.
Request similar to this: https://github.com/kyverno/policy-reporter/issues/187

Thanks for your request. I will have a look on it this week.


Not working in Jupyter

When I try to test the game in Jupyter (notebook or lab) I can't play the game. When I try to press the up/down keys it responds by moving up or down a cell and when I try left/right it does nothing. It kinda seems like it might be displaying as a just image, I'm not sure.
Is there something I'm missing? Did I miss a step somewhere?

Can you provide some details on your setup?
What OS (and version), python version, the steps you followed to install jupylet.
Thanks for this report

Well,
I have tested it on Windows 10 - 64 bit
with Python 3.8.3
on updated versions of Chrome, Firefox, and Microsoft Edge (or whatever its called now)
and a clean installation of Jupylet,
and it works as expected.

What notebook are you trying to run?
Many of the demo notebooks have corresponding script version that you can run as regular Python scripts. do any of these work?


How HISTORY.md is automated?

Is HISTORY.md is a feature of git?
I cannot see any code that makes HISTORY.md

When you run make release it includes a call to:
gitchangelog > HISTORY.md
https://github.com/rochacbruno/python-project-template/blob/main/Makefile#L84

https://github.com/vaab/gitchangelog


[Test Proxy] Reduce excessive logging during tests

Description
At the moment, running tests against the test proxy frequently produces excessive logs. The two main sources are WARNING-level logs from urllib3 (emitted during test proxy startup, when we're polling for availability) and INFO-level logs from azure-core's logging policy (emitted in pytest's "Captured log call" after test failure).

To fix the former, proxy_startup.py now raises the logger level of urllib3.connectionpool to ERROR. Warnings are expected since we start up the test proxy during tests and poll for availability; in some cases, the amount of warnings emitted makes reading test output impossible.
To fix the latter, the SDK's root conftest.py now raises the log capture level to WARNING by default. This way, INFO-level logs emitted during test execution won't be captured and printed at the end of the test session.

If a custom log level is configured for the session with --log-level or --log-cli-level command line options, we don't modify the log capture level. In this scenario it's assumed that the user wants full control of log output.

All SDK Contribution checklist:

[x] The pull request does not introduce [breaking changes]
[x] CHANGELOG is updated for new features, bug fixes or other significant changes.
[x] I have read the contribution guidelines.

General Guidelines and Best Practices

[x] Title of the pull request is clear and informative.
[x] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, see this page.

Testing Guidelines

[x] Pull request includes test coverage for the included changes.

/check-enforcer override


docs: Expand processor/provider docs

Expand the processor/provider docs in 'getting started'. In particular how the store iterates over processors/providers.
Hopefully it is correct :grimacing:

Oh one more thing I wanted to mention is that I'd a default value is provided, no provider will attempt to I inject. It seems obvious but e.g. if you have Optional[sometype] = None, injection wouldn't be done.

yep!  Good thing to add

(if you ever run into a case where you need/want to be able to override default values with injected values, that would be a reasonable feature request, probably added as a parameter to inject)

Thanks for making the changes! I didn't have time to add a note on default values so did it here: #99


Not pinning dependent cookbooks causes issues for chef 11.x users

This cookbook depends on memcached.  When memcached upgraded to version 2.0.0, they included the compat_resource cookbook as a dependency - which breaks a chef 11.x convergence since compat_resource if only compatible with Chef 12.x.
You should consider pinning or soft-pinning the dependencies in this cookbook so they don't end up breaking later by upgrades of the dependent cookbooks.

Looks like the memcached cookbook isn't actually used by this cookbook, so that can get removed.

Fixed in https://github.com/hw-cookbooks/graphite/commit/1f649138a4a222a2a81ff47be9555a1b3cb4111b


[CB-14398] Add a service to choose the appropriate recovery action

All recovery attempts now flow into SdxRecoverySelectorService which is responsible for
selecting the correct recoveryService, and validating prior to running.
It's important for the canRecover method to narrow down the situations
where that particular recovery method can take place

pls wait until someone from @hortonworks/cloudbreak-duck checks upgrade related changes too

I am checking it now.

@yg-gd there are 3 items left form my review, thanks for the others.