Zmq threads and context threads

Hi Gary,
As discussed this is my attempt at addressing some of the magic numbers by using command line argument values, or defaults.
With your suggestion of having a -t / --threads (passed to MultiPullBroker) and -z / --zmq-context-threads (passed to zmq context), I repurposed the old -z ("Set the number of zmq sockets to connect to the Eiger with") to be a "zmq_context_threads" argument.
I also renamed variables which handled this argument to match its new purpose.
The biggest change to the code (as opposed to just renaming), was adding a new argument to HandleRxSocket so that it can make use of the command line argument value.
Thanks,
James

Thanks @JamesOHeaDLS !


[BUG]

Let me preface this by saying, I don't know if this is truly a bug or not, but the application is working in a way that I believe it shouldn't be.
Bug description:
I'm getting "resetting PCR restamping in PID 0x#### after possible discontinuity in original PCR" error messages displayed when executing a merge on a file that I have explicitly removed services and pids for.
In my example, I'm trying to isolate and pass through service 0x100B with pids 0x1022 (video) and 0x1023 (audio) and the pcr is 0x1022. I'm trying to filter out and drop all of the rest of the services and their associated pids. For example, my mpg file also has services 0x100C (pcr 0x1722) and 0x100D (pcr 0x1d22) that I want to filter out.
How to reproduce:
Execute the following tsp command:
tsp --control-local localhost --control-port 8000 -v -b 41209008 -I null -j -O ip localhost:8999 -P regulate
-P merge -j --no-psi-merge --ignore-conflicts -p 0x1022-0x1023 -d 0x0 -d 0x21-0x1021-d 0x1024-0x1FFE "tsp -v -b 3000000 -I file -i C:/files/file.mpg -P regulate"
-P pat -c -a 0x100B/0x21 -r 0x100C -r 0x100D
-P pmt -c -a 0x1022/0x1b -a 0x1023/0x81 -s 0x100B -r 0x0-0x1021 -r 0x1025-0x1ffe --pcr-pid 0x1022

Expected behavior:
No "resetting PCR restamping in PID 0x#### after possible discontinuity in original PCR" messages should display
Errors and logs:
I'm getting the following displayed on the screen:
* regulate: minimum packet burst duration is 2,000,000 nano-seconds
* null: initial input bitrate is 41,209,008 b/s
* regulate: regulated at bitrate 41,209,008 b/s
* merge: main stream bitrate reset to 41,209,008 b/s (was 0 b/s)
* regulate: minimum packet burst duration is 2,000,000 nano-seconds
* file: initial input bitrate is 3,000,000 b/s
* regulate: regulated at bitrate 3,000,000 b/s
* pat: PAT version 0 modified
* pmt: found service id 0x100B (4107), PMT PID is 0x0021 (33)
* pmt: PMT version 0 modified
* merge: resetting PCR restamping in PID 0x1022 (4130) after possible discontinuity in original PCR
* merge: resetting PCR restamping in PID 0x1722 (5922) after possible discontinuity in original PCR
* merge: resetting PCR restamping in PID 0x1D22 (7458) after possible discontinuity in original PCR

The * merge: messages repeat, though the pids will display in varying order.
Environment:

OS: Windows
OS version: Windows 10 Enterprise, 64 bit
TSDuck full version: 3.30-2710
Installation type: official binary TSDuck-Win64-3.30-2710.exe

Additional information:
I don't know if the cause of this issue is reflected in the output stream or not.
I truly appreciate your help!

Let me preface this by saying, I don't know if this is truly a bug or not, but the application is working in a way that I believe it shouldn't be.

All right, if you do not know if this is bug, why did you file it as a bug?
This is the second time I have to say that in a few days: A bug is something that is factually incorrect, proven incorrect, with evidences of inconsistency between the specification or documentation and the actual behaviour. Bug reports are even more appreciated if they are accompanied with evidences from the source code. Many times, most of the times, when someone (me included) observes an unexpected behaviour, meaning not matching our understanding of the product, the first reaction is to consider this as a bug. But the second reaction should be to think twice, try to really understand the situation and, when unsure, try to get some external advice.
Specifically, error messages are here to help. And when a message says "merge: resetting PCR restamping in PID 0x1022 (4130) after possible discontinuity in original PCR", this means that the merge plugin has found a possible discontinuity in original PCR. So, the question is obviously to check if there are possible discontinuities in original PCR in the stream coming from the merge pipe. And where does the stream come from ? From -I file -i C:/files/file.mpg. And what does -i means here? The answer is RTFM as usual. And what does happen when a file loops back (even more when infinitely)? Discontinuities! Discontinuities of everything, continuity counters, PCR, PTS, DTS, everything.


Fused QKV in Attention

Many models implementations now have moved to fusing the query/key/value in attention (when applicable) as this launches fewer kernels. This has been held off as we did not have a clean way of ingesting to/from fused/unfused weights, but now that we have the safetensors implementation with FusableWeightsMissingError, this is viable. This is one of the optimizations that we found benefitted performance and compile.
Note: Because weight names have been changed from query, key, and value in attention to qkv_fused, expectation tests needed to be re-run

code looks better than previously to me, especially with the QKVFused/Unfused classes minimizing code repetition. This being said, TP should not work right now, so are the TP tests passing? I guess it might work by not doing TP at all for the in_proj...

I tried the inference script with 13B and tp and it seems to be returning results that look ok, what set of tests should be run specifically?

closing in favor of #243


Simplify generating kubeconfig with embeded cert data

Add kubectl config support for generating single-source kubeconfig (cert data embeded). The initially suggested approach in #4517 of using kubectl config set doesn't work, as cobra|pflags cannot handle parsing multi-line strings as single arguments. This change adds a --embed-certs flag to the set-credentials and set-cluster commands which tell kubectl config to write raw cert data instead of path to cert file. Example:
$ kubectl config set-cluster --certificate-authority=/tmp/cadata --embed-certs=true

$ kubectl config set-credentials --client-certificate=/tmp/kubecfg.crt --client-key=/tmp/kubecfg.key --embed-certs=true

cc @liggitt, @deads2k

Responded to comments and added test coverage. PTAL.

lgtm

LGTM


Select markdown not working

Description
I can't select the block code generated in markdown.
since "selectable" is activated, solution
Code example to reproduce the issue:
self.md = ft.Markdown(
                self.mkt,
                selectable=True,
                extension_set=ft.MarkdownExtensionSet.GITHUB_WEB,
                code_theme="atom-one-light",
                code_style=ft.TextStyle(font_family="Roboto Mono"),
                on_tap_link=lambda e: self.launch_url(e.data),

            #on_tap_link=lambda e: ft.page.launch_url(e.data),
        )

https://github.com/flet-dev/flet/issues/1753 ?

We'll see if that can be improved with SelectionArea, but it's a dup of #1753, yes.

Yes, it should work, when will it be available?


Legofy animated gif results in OSError: [Errno 2] No such file or directory

15.0.0 Darwin Kernel Version 15.0.0: Sat Sep 19 15:53:46 PDT 2015; root:xnu-3247.10.11~1/RELEASE_X86_64 x86_64
Animated gif detected, will now legofy each frame and recreate the gif and save as lego_pixel_waterfall_bg__by_isohei-d4xntof.gif
Working on frame_0000.png
Working on frame_0001.png
Working on frame_0002.png
Working on frame_0003.png
Working on frame_0004.png
Working on frame_0005.png
Working on frame_0006.png
Working on frame_0007.png
convert -delay 10 -loop 0 ./tmp_frames/*.png /lego_pixel_waterfall_bg__by_isohei-d4xntof.gif
Traceback (most recent call last):
  File "/usr/local/bin/legofy", line 9, in <module>
    load_entry_point('legofy==0.0.1', 'console_scripts', 'legofy')()
  File "/Library/Python/2.7/site-packages/click/core.py", line 700, in __call__
    return self.main(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/click/core.py", line 680, in main
    rv = self.invoke(ctx)
  File "/Library/Python/2.7/site-packages/click/core.py", line 873, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Library/Python/2.7/site-packages/click/core.py", line 508, in invoke
    return callback(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/legofy-0.0.1-py2.7.egg/legofy/cli.py", line 14, in main
    legofy.main(image, brick=brick)
  File "/Library/Python/2.7/site-packages/legofy-0.0.1-py2.7.egg/legofy/__init__.py", line 119, in main
    call(command.split(" "))
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 522, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

This should be fixed, please try with the newest code.


GitPod does not load correctly

Because GitPod's Composer is still at v1, the lockfile does not work anymore. Upgrading is being dealt with https://github.com/gitpod-io/workspace-images/issues/339, but I am sure that it will not be closed in the next week/month. We could uninstall Composer with apt and install it again using the PHP setup script during the prebuild.

Fixed in https://github.com/aperta-principium/Interclip/commit/0c8837fbaccbe76f0d6ae5ff716802775750ed95


Adding tile caching to disk

Tested on native and wasm.

Hi, thanks for contributing!
However, I had a plan to introduce caching, but I was rather thinking about using reqwest's ecosystem, namely http-cache-reqwest for that.


Batch processing for large dataset enumerations

Outline/ideas from Anton: "I heard from Steven that a reaction template operation takes over 30 seconds to process 5,000 rows. That's getting too long for HTTP, so I think optimization makes sense.
First I would make sure you understand what scale we should aim to support (how many rows per operation, how many string substitutions per row). Then I would see how long that really takes and make sure we're not doing anything inefficient that could be fixed in a simpler way. You may want to benchmark on our VMs. That will require a login that Steven can set up, but I'd expect the VMs to be comparable to a laptop for python CPU.
I imagine a new web page where you can quickly upload your template and your table. These will immediately get written to a designated part of the server file system, like a special subdirectory of db/, and the page shows you what you've uploaded in a list. Each entry has a status, like "in process" or a percentage or "processed", and the entries update periodically, like by polling.
Our python server is single-threaded, so you can't use it to do the background work. I would write a script that scans the special subdirectory for eligible work, performs the work, writes back its progress to the same directory, and quits when it's done. The script is started as a subprocess from the new web page, and it can be retriggered by a button like "reprocess". The important thing is that the user's uploads are handled in the simplest possible way and the workflow is idempotent. Then when we mess up (background process crashes, a bug in the script, whatever), we can always reprocess and all is forgiven."

As a short term solution, we are planning to increase the worker timeout in the web server. Moving to e.g. 2 minutes should cover most cases and any remaining exceptions can be handled in coordination with the ORD reviewers.

Would this processing block serving?

I think we can avoid blocking by using multiple worker processes and/or threaded workers. Threaded workers explicitly allow us to sidestep the timeout issue: "One benefit from threads is that requests can take longer than the worker timeout while notifying the master process that it is not frozen and should not be killed."
https://docs.gunicorn.org/en/stable/design.html#how-many-threads

This can be done offline in coordination with reviewers, so not a critical feature. Closing for now.


Option to consider an offline device as "OFF"

Some power govee led's using a TV's USB port. When the TV is switched off, the Govee LED is also off, therefore stuck in the last state and reporting as offline.
We want to configure to consider a lamp "OFF" when offline. Default is to remember the last state.
We could probably use the learning storage (on home assistant "govee_learning.yaml" in the config folder) and add a new configurable state.

With the next version you can configure:
40:83:FF:FF:FF:FF:FF:FF:
  .....
  config_offline_is_off=True

Default is False, so if a device is offline the last state is still shown.
If you turn this to True, when the device is offline the power_state is off too.
In both cases when the whole API is down every state is kept.


Net: changed server seed

Changed server seed on 1 parent:f1fe366 commit dff1b883bd36256a324a61bbeff6bebb7da5396c

it should be done on DSW first


Hack workaround for multiple-extend

🐛 Bug Report
multiple extend was broken here: https://github.com/fastify/fluent-schema/pull/69
it was sort of fixed here: https://github.com/fastify/fluent-schema/pull/74
however, the result is the hack function below to extend multiple times:
export const extendMultiple = (...schemas: ObjectSchema[]): ObjectSchema =>
  schemas.reduce((prev, curr) => curr.extend(prev), S.object());

To Reproduce
// extend is not a function (technically, the second extend doesn't exist)
S.object().extend(S.object()).extend(S.object())

// ...or
const schema = extendMultiple(S.object(), S.object(), S.object());

Expected behavior
extend shouldn't be excluded from the return value here: https://github.com/fastify/fluent-schema/blob/5ffffb8110a6fe845ca6cd7bbaaf2dc358960b5a/src/ObjectSchema.js#L261-L278
Your Environment

node version: 12
os: Mac,
fluent-schema version: 1.0.3

Also, it's unclear what this means:

I decided to block all the method after .extend to avoid incorrect usage.

from https://github.com/fastify/fluent-schema/pull/69#issue-415436305
What is the incorrect usage?

const base = S.object()
  .extend(SCHEMA_BASE)
  .prop(
    'reason',
    S.string()
      .minLength(1)
  )

the fact that you first extend then you add the prop it could easily create confusion.
On the other hand, this is a fair case
S.object().extend(S.object()).extend(S.object())

Looks good! Any plan on merge / release?

v1.0.4 has been. published


doc: Add OpenOCD SWD information

Summary

Documentation was added for programming with OpenOCD. Closes #28.
Changes

Added OpenOCD example commands with explanation.
Small disclaimer that the GNSE should be powered when programmed.

Notes for Reviewers

OpenOCD added STM32WL support not too long ago, see this. If you're testing if it works, then you should also make sure that OpenOCD has the stm32wlx.cfg file.
Checklist

[x] Scope: The referenced issue is addressed, there are no unrelated changes.
[x] Run Locally: Verified that the docs build using make server, posted screenshots, verified external links.
[x] New Features Marked: Documentation for new features is marked using the new-in-version shortcode, according to the guidelines in CONTRIBUTING.
[x] Style Guidelines: Documentation obeys style guidelines in CONTRIBUTING.
[x] Commits: Commit messages follow guidelines in CONTRIBUTING, there are no fixup commits left.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.Mcrou seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.You have signed the CLA already but the status is still pending? Let us recheck it.


Update docs and comments accurately describe defaults

This PR updates the vars.md doc and comments in config_example.sh to more accurately describe default values which are assumed by other scripts.
Note that I have decided to remove spacing which made the vars.md columns aligned in markdown. It was not kept up to date anyway, and with some rows being very wide it decreased readability in my opinion. But naturally I'm open to doing it another way.
The non-whitespace changes in vars.md are as follows:
$ diff <(git show origin/master:vars.md | sed 's/\s\s*/ /g') <(git show origin/update/docs-about-variable-defaults-wgslr:vars.md)
14,15c14,18
< | EPHEMERAL_CLUSTER | Tool for running management/ephemeral cluster. | minikube, kind, tilt | Ubuntu default is kind. Only minikube is supported on CentOS |
< | EXTERNAL_SUBNET | This is the subnet used on the "baremetal" libvirt network, created as the primary network interface for the virtual bare metalhosts. | CIDR | <IP_ADDRESS>/24 |
---
> | EPHEMERAL_CLUSTER | Tool for running management/ephemeral cluster. | minikube, kind, tilt | "kind" when using docker as container (the default on Ubuntu), "minikube" otherwise |
> | IP_STACK | Choose whether the "baremetal" libvirt network will use IPv4, IPv6, or IPv4+IPv6. This network is the primary network interface for the virtual bare metal hosts. <br/> Note that this only sets up the underlying network, and fully provisioning IPv6 kubernetes clusters is not yet automated. If IPv6 is enabled, DHCPv6 will be available to the virtual bare metal hosts. | "v4", "v6", "v4v6" (dual-stack)) | v4 |
> | EXTERNAL_SUBNET_V4 | When using IPv4 stack, this is the subnet used on the "baremetal" libvirt network, created as the primary network interface for the virtual bare metalhosts. | IPv4 CIDR | <IP_ADDRESS>/24 |
> | EXTERNAL_SUBNET_V6 | When using IPv6 stack, this is the subnet used on the "baremetal" libvirt network, created as the primary network interface for the virtual bare metalhosts. | IPv6 CIDR | <IP_ADDRESS>/24 |
> | PROVISIONING_IPV6 | Configure provisioning network for single-stack ipv6 | "true", "false" | false |
17c20
< | CONTAINER_RUNTIME | Select the Container Runtime | "docker", "podman" | "podman" |
---
> | CONTAINER_RUNTIME | Select the Container Runtime | "docker", "podman" | "docker" on ubuntu, "podman" otherwise |
40a44
> | NODE_HOSTNAME_FORMAT | Node hostname format. This is a format string that must contain exactly one %d format field that will be replaced with an integer representing the number of the node. | "node-%d" |

Recreated as PR in upstream: https://github.com/metal3-io/metal3-dev-env/pull/643


Rewrite list(x for x in y) to list(y)

Given list(x for x in y), we first hit C400, which fixes to [x for x in y], which hits C416, which fixes to list(y). We should consider short-circuiting this.

I would like to contribute on this. Should I implement it on inside C400 or add an another rule which matches only expression of type list(x for x in y)?

I think we should augment C400 to support it.

Closed by https://github.com/astral-sh/ruff/pull/10419. Thanks @boolean-light!


(fix task docs) Adds missing type and fixes copy/paste typo

Task.fromNodeback was missing its type annotation, and annotation for folktale.data.task... was folktale.data.result... by accident.

Ah, thanksies


[NETBEANS-54] Module Review Apache License java.source.queries

Fix #105

Sorry, I'm closing this since it appears the automated script changes the license headers for this file.


includes/modules/bromsock.lua missing?

Can you help? This is the error that I'm getting.
Couldn't include file 'includes/modules/bromsock.lua

I have the same problem, here is a picture of the folder

and one of the ldd command

I've tried to look at it but I really cannot find why this happens, sorry. It works on my Ubuntu VM and it works on my servers and desktop. If you have more info then maybe we can look into it more

Having the same problem on a debian server. Might this be a debian Problem?


Unit tests fail

Hi.  When I run the unit tests, most of them run, but two of them fail.
ContentTools.ToolboxUI > Keyboard short-cuts
✓ should allow a non-content element to be removed with the delete key short-cut
X should allow a undo to be triggered with Ctrl-z key short-cut
Expected spy canApply to have been called. (1)
X should allow a redo to be triggered with Ctrl-Shift-z key short-cut
Expected spy canApply to have been called. (1)
I found the place in src/scripts/toolbox.coffee where the operating system was sniffed for, and I thought I knew how to fix it.  I put this code into src/spec/toolbox.coffee.
        console.log('Adjusted by Rick.  On Mac, has to be metaKey, not ctrlKey.');
        # keyDownEvent.ctrlKey = true
        keyDownEvent.metaKey = true

But not only did it not fix it, my console log didn't display.  Plainly, me solving the problem is inefficient.
       Regards,
       Rick

Hi @rhedin - I'm unable to reproduce this error in my set up (though I did notice I'm getting a bunch of unwanted console logs). Can I confirm what version of CT your working with?

ckeditor_4.6.1_standard
Sorry to be slow to respond, Anthony.  I've been sick.
If it can't be reproduced, oh well.  Let it go.
    Rick

Hi Rick, nothing to apologise for - hope you are feeling better now! Ant


⚠ ClamAV has degraded performance

In b7a2b05, ClamAV (https://spamassassin.apache.org/) experienced degraded performance:

HTTP code: 200
Response time: 378 ms

Resolved: ClamAV performance has improved in edcae02.


[PUI] Settings simplification and restructure

This PR:

merges the Profile page into the user settings
adds a specific primary frontend route for server settings
adds user account controls
adds user security settings (Email, SSO, MFA)
all the necessary API endpoints to view them

In a follow-up PR necessary API changes and a UI for user/group management (no permission managment is slated at this time) will follow; As we are not using the sessions framework for the new UI, I will not implement it here.

@matmair looks good :)

@SchrodingersGat this is ready for review; I had to add a few new APIs to get it going, unit test for those are tbd

@matmair looking really great here.
Some small notes below.

Also, are we going to display (maybe somewhere under the system settings) which SSO backends are available, and allow configuration? Or will that be another PR you think

The system checks if sso is enabled; I think that should be enough:

If do not have any plans to touch SSO backends. Supporting the 90+ backend options correctly seems like a lot of added work for a small one-time interaction per instance.

The texts follow the current ones so that a simple 100% TM match from Crowdin should cover translations (if already present)

Great :)

Thanks for this great update @matmair :)


Python module: ROC curve.

Hello,
Thanks for this great work!
Sorry for the issue, but I have a simple question.
I installed, using pip install dlib, the Python API (dlib version: 19.17.0) to use it with my Python code.
I was looking for the function compute_roc_curve in Python. I didn't find it. I read somewhere that not all the functionalities were implemented in the Python module. I want to make sure that I am not missing something. Thanks!
The reason I came to this library is that I am trying to compute the ROC curve for a large set (~26 million points). Using sikit-learn, it takes ~15seconds on CPU (on the server, and ~8seconds on my computer). I am looking for something faster.
If the dlib's Python module does not implement ROC curve, is there a way to call the C++ one from Python?
Many thanks!

It's not in the pyhton API.  You can call C++ stuff from python by defining a binding using pybind11.  That's how all of dlib is made callable from python.  You can see the code for doing this in the tools/python folder, which is where all of dlib's python binding code lives.  You can also read the excellent pybind11 documentation.

Thank you Davis for your quick and helpful reply!
I'll check pybind11 to see how to do it. [on the TODO list].
I close this issue.
Thanks!

No problem :)


Add DMA alloc support

In the context of ArceOS, when handling paging, all free regions were initially configured with caching attributes, which posed a challenge for DMA (Direct Memory Access) memory allocation during driver development where non-cached memory was required. The current modification approach involves:

On-demand Page Table Allocation: Instead of setting up all page table entries at boot time, the system now dynamically allocates necessary page table entries as they are needed. This strategy allows for more flexibility in configuring memory attributes at the time of memory allocation.

DMA Allocation with Non-Caching Attributes: When allocating DMA memory, if the existing page table space is insufficient, new page table entries are set up at this point, enabling the configuration of non-caching attributes. This ensures that DMA operations can access memory without the overhead of caching, which is critical for performance and integrity in certain scenarios.

Bytes Allocator Space Management: If the bytes allocator does not have enough available space to fulfill a memory request, it first identifies a segment of physical memory using the page allocator. Then, it configures the page table entries for this physical address range according to the required memory attributes (in this case, non-caching). Once these entries are set up, the newly allocated and configured memory segment is added to the bytes allocator pool. Subsequently, the bytes allocator can use this memory to satisfy the original allocation request.

This approach optimizes memory management by dynamically adjusting to the specific needs of different memory allocations, particularly those requiring non-cached properties, such as DMA operations. It enhances system efficiency and resource utilization by minimizing unnecessary caching where it's not beneficial.

Thanks for your PR.
But it seems to be a lot of destructive changes to the original architecture. There are several improvements that can be made to make the PR more simple and intuitive:

introduce a module axdma dedicated to allocate DMA memory, instead of implementing it in axalloc.
Similar to axalloc, axdma should contain a page allocator and a bytes allocator.
At initialization time, still add free memory regions to the kernel page table, thus avoiding modifying the page table attributes in axalloc. But eventually they should be modified in axdma (use axruntime::KERNEL_PAGE_TABLE).

In this way, there is almost no need to modify axalloc and axhal, and features can be used to configure whether axdma is enabled or not.

page table remap func not work.
you can checkout https://github.com/ZR233/arceos/tree/alloc2 for test with make A=examples/helloworld ARCH=aarch64 LOG=trace SMP=4  run

You should use PageTable::protect_region() instead of remap.


Archive docs that concern Internet Explorer

Since IE is now out of support, we should archive or update articles that pertain to IE.
https://blogs.windows.com/windowsexperience/2021/05/19/the-future-of-internet-explorer-on-windows-10-is-in-microsoft-edge/

Related issue #29297.


Provide text of comments without the user signature

And also for the first comment in a section, without the section title.

This would be really really awesome to have; a big +1 from me. Is there any timetable on working on it? (Trying to work out if I should bother implementing a temporary fix at my end ;p)

My plan right now is to address #17, then move on to this one. Unfortunately I don't have a ton of time to allocate to this at the moment so I am hoping to have it done by the end of the month.

Cool!

This is getting pushed back to sometime between 3/12 and 3/19 (my spring break).


Alternative attempt to fix #244

What about that test case I wrote? Could you please add it, too?
On Jan 5, 2015 6:37 PM, "Tomas Petricek"<EMAIL_ADDRESS>wrote:

You can merge this Pull Request by running
git pull https://github.com/tpetricek/FSharp.Formatting codeblocks2
Or view, comment on, or merge it at:
https://github.com/tpetricek/FSharp.Formatting/pull/245
Commit Summary

Alternative attempt to fix #244

File Changes

M src/FSharp.Markdown/MarkdownParser.fs
https://github.com/tpetricek/FSharp.Formatting/pull/245/files#diff-0
(4)
M tests/FSharp.Markdown.Tests/Markdown.fs
https://github.com/tpetricek/FSharp.Formatting/pull/245/files#diff-1
(18)

Patch Links:

https://github.com/tpetricek/FSharp.Formatting/pull/245.patch
https://github.com/tpetricek/FSharp.Formatting/pull/245.diff

—
Reply to this email directly or view it on GitHub
https://github.com/tpetricek/FSharp.Formatting/pull/245.

I don't think your test case should work as it is (it does not work in CommonMark), but I'll add it with 6 spaces.
I think the idea is that there should be 4 more spaces after the mark that starts the list i.e. - . Does that make sense? (I think my fix does that to some point - but not perfectly....)

I can live with 6 spaces. But I thought the newline (empty line) would end
the list.
On Jan 5, 2015 7:07 PM, "Tomas Petricek"<EMAIL_ADDRESS>wrote:

I don't think your test case should work as it is (it does not work in
CommonMark), but I'll add it with 6 spaces.
I think the idea is that there should be 4 more spaces after the mark that
starts the list i.e. -. Does that make sense? (I think my fix does that
to some point - but not perfectly....)
—
Reply to this email directly or view it on GitHub
https://github.com/tpetricek/FSharp.Formatting/pull/245#issuecomment-68748900
.

Oh, I see, I misunderstood your point - sorry about that!

In CommonMark, the following does not end the list:
- a

    not code

but two empty lines do end the list:
- a

    not code

Yeah I tried that too. Didn't work ;-(

Yeah, that was broken - I finally understand what you were saying :-) sorry for being a bit slow!
I think the last commit should work - you get <pre> in <li> with 6 spaces or in a separate block after </ul> with two newlines.

2 newlines and 6 spaces it works (seems a bit overkill)

Unless I'm missing something (again), you should need just 2 newlines (to end the list) and 4 spaces (to create a codeblock following the list). The following works on my machine:
- specified

    source https://nuget.org/api/v2

    nuget Castle.Windsor-log4net -> 3.2
    nuget NUnit

Alternatively, you could use 6 spaces and 1 newline to create a <pre> inside <li>:
- specified

      source https://nuget.org/api/v2

      nuget Castle.Windsor-log4net -> 3.2
      nuget NUnit

If this does not work, please reopen the issue!

I might have done something wrong when releasing this yesterday - if 2 newlines + 4 spaces don't work, please try 2.6.0 which will be on NuGet in a sec!


pekko label on repo

Thanks for your work on this project.
Would it be possible to add GitHub labels to the project? pekko and pekko-persistence would be useful. It's good for apps like https://index.scala-lang.org/ which uses the labels to categorise the Scala libs.

Sounds good.
@scullxbones could you do that? I don't have permissions to do so.

No problem. Done.


Globally switch from eagerly loaded dynamic imports to lazily loaded dynamic imports

Jira
http://vjira2:8080/browse/BDS-2129
Dependencies**
**to avoid any rendering issues

~Migrate Accordion to LitElement~
~Add Classes to Slotted Children decorator work~
~Migrate components to use <ssr-keep>~

Summary
Globally switches over our components to load without the "fake" polyfill loader we've still be using unnecessarily + load JS bundles using the default dynamic imports (vs the eagerly loaded imports previously getting used).
Note: this PR depends on the work from https://github.com/boltdesignsystem/bolt/pull/1857 to work consistently and reliably (exact same requirement as the lazy-queue migration for the remaining Bolt components)
Details
While this PR doesn't technically change any component-specific functionality -- just how the JS already in-place gets loaded -- this PR is meant to expose why the other "web performance-related PRs" are getting added in the first place...
This is because issues like components rendering out of order, etc has nothing to do with the new lazy-queue library and instead is due to existing issues we already had (but weren't getting enough visibility to know we needed to fix).
How to test

Review existing component docs pages (ex. Chips) to see the exact same rendering issues seen with the lazy-queue updates... but with our existing code.
Review the new Academy page prototypes (especially the ones with Carousels) to better understand why any of the other web performance PRs (ex. adding <ssr-keep> support) are a thing.

It was a little confusing seeing all the Accordion changes mixed in with this PR. I know you broke that work out into a separate PR (that was great). Can we also exclude that work from any other PRs so we don't need to review it twice? I understand that means you can't make a second PR until the first is merged. That would be a better workflow IMO.

🤔 I thought I had already merged those Accordion updates (and everything else on master) into this.... oh. 🤦
Sorry about that. I think I merged master into the accordion branch (and the accordion branch into this) but it looks like Github still wants me to merge master back into this to get the diff back to where it was.
I'm gonna merge this one down to master + update the lazy queue-specific PR to pull that latest in which should clean things up a bit.

PR was released with v2.23.0


Text input box not working after Chrome update.

Hi, as the title says, since a recent minor version update of Chrome 107, the text input box can only type and cannot send text.
After searching, it may be caused by Manifest Version 3.
Does the author have time to update the relevant code below so that the text input box can be reused?
This plugin is very useful, I hope the author will continue to maintain it, thank you!
:)
Chrome version: 107.0.1418.52
Extension version: 0.1.0 (From Chrome Webstore, Link)

@gugued
Sorry, I am not the author of youtube-live-chat-flow. I am just mirroring the entire Git repository of the code.
Please see this tweet (link) for the story behind why I am mirroring the code.
Simply put, the Japanese video posting site Nico Nico Douga did not like youtube-live-chat-flow. They thought Nico Nico Douga's advantage would be lost by a tool like youtube-live-chat-flow, which allows comments to flow in a Nico Nico Douga-like fashion.
Nico Nico Douga thought youtube-live-chat-flow was infringing on their patents, but Japanese patents are not infringed if you are not using the patents "in the course of business". Also, youtube-live-chat-flow is a Chrome extension, not the site itself, so it is not clear if it infringes patents.
Therefore, Mr. Kurita, the president of Nico Nico Douga, indirectly instructed the devotees to "threaten the developers with patents and have them delete the 'browser extension that flows comments in the style of Nico Nico Douga'" in the Twitter community where his Nico Nico Douga devotees gather.
As a result, the original author of youtube-live-chat-flow succumbed to the threat and deleted the repository.
I had originally copied (using git clone) the youtube-live-chat-flow code to my computer. A few days later, the original author's GitHub repository was removed, and I thought, "I can't accept that a good tool should be removed under pressure and made unusable when I don't even know if I'm infringing a patent," so I republished the youtube-live-chat-flow code stored on my computer on I published it on GitHub.
...To begin with, I don't use youtube-live-chat-flow much because I don't watch YouTube Live much. Furthermore, as mentioned above, I am not a youtube-live-chat-flow developer, so unfortunately I don't have much time to fix the bugs.
Pull requests are welcome. I hope someone will send me a pull request.

Oops, I forgot to mention something important.
https://chrome.google.com/webstore/detail/flow-chat-for-youtube-liv/elfdpkmfllnhhgnicaaeacbilcallpbd/
This Chrome extension was not uploaded by me. I did not upload it. It looks like it is based on this youtube-live-chat-flow code, but a third party uploaded it without my permission.
I know nothing about subdiox, and have nothing to do with him. If I update the code, I don't know if subdiox will update his Chrome Web Store extension accordingly. There is even a possibility that malware has been introduced.
(Sentences may be unnatural because machine translation was used.)

Here is an English translation of the Twitter thread you linked: https://twitter.com/fspls/status/1552217948504305664

This issue has already been fixed in subdiox's fork, and you can get the improved extension from the Chrome Web Store that subdiox is publishing (https://chrome.google.com/webstore/detail/flow-chat-for-youtube-liv/elfdpkmfllnhhgnicaaeacbilcallpbd?hl=ja).
I don't have the motivation to maintain this repository, so I recommend using that instead.


Build improvements

Each commit should be separately reviewable.
Close #29
Close #30

This now works. Feel free to put your opinion here.
Random note: you may want to enable Travis "Build PR" option.

Never used gulp but this seems like a good improvement and I don't foresee any real problems merging with my changes.

@ishitatsuyuki Thanks for the contribution, this is great! :100:


Mounting a volume file breaks filesystem in bizarre ways

I thought I was going insane while investigating this.
Here's a file, located in (pwd)/etc/krb5.conf, that I was trying to mount into a container. The contents of this file aren't important; you can see I've fiddled with it in the process of trying to resolve this issue.
[libdefaults]
default_realm = LOCALDOMAIN

[realms]
LOCALDOMAIN = {
    kdc = kdc:88
    foo = bar
    admin_server = kdc:749
    baz = zip
}

The md5sum of this file (as reported by the host system) is e2e55a4ef167b9aab10fd093589a6f9c. ls -l has this to say about it:
$ ls -l etc/krb5.conf
-rw-r--r--  1 jake  staff  142 Feb 15 00:17 etc/krb5.conf

Now let's do some exploring. First, no /etc/krb5.conf file exists in the Alpine base image:
$ docker run --rm -it alpine ls -l /etc/krb5.conf
ls: /etc/krb5.conf: No such file or directory

Mounting in the file with -v changes that, as expected:
$ docker run --rm -it -v (pwd)/etc/krb5.conf:/etc/krb5.conf alpine ls -l /etc/krb5.conf
-rw-r--r--    1 1000     50             142 Feb 15 08:17 /etc/krb5.conf

The uid/gid are unknown and the timestamp is different because of the TZ offset, but that's all to be expected.
Note: I use fish shell, which is why you're seeing (pwd) where youd expect $(pwd)`
Here's where things go off the rails:
$ docker run --rm -it -v (pwd)/etc/krb5.conf:/etc/krb5.conf alpine cat /etc/krb5.conf
[libdefaults]
default_realm = LOCALDOMAIN

[realms]
LOCALDOMAIN = {
    kdc = kdc.localdomain:88
    admin_server = kdc.localdomain:749
}

That's an older version of the file. At one point I saved that version, and I definitely mounted it into the container. I can't remember if I used -v or a compose file rule -- probably both, at different times.
But that version of the file no longer exists anywhere under (pwd).
But wait, there's more.
Here's what I get when I view the file with less:
$ docker run --rm -it -v (pwd)/etc/krb5.conf:/etc/krb5.conf alpine less /etc/krb5.conf
[libdefaults]
default_realm = LOCALDOMAIN

[realms]
LOCALDOMAIN = {
    kdc = kdc:88
    foo = bar
    admin_server = kdc:749
    baz = zip
}

~
~
~
/etc/krb5.conf

It's the correct version -- what I would have called the only version if not for this bizarre issue.
Furthermore, the MD5 checksum shows that it's the same file!
$ docker run --rm -it -v (pwd)/etc/krb5.conf:/etc/krb5.conf alpine md5sum /etc/krb5.conf
e2e55a4ef167b9aab10fd093589a6f9c  /etc/krb5.conf

So why does cat see a different version of this file than the other utilities do?
I figured it had to be a volumes bug. Somewhere in my boot2docker VM there was a copy of the old version of the file, living in some volume, and somehow that volume was getting loaded up... and then maybe the newer version was shadowing the older one.. and some utilities, er... while others...
Ignoring the fact that the above line of reasoning doesn't really hold up, I ran this before reproducing all of the above to post in this issue:
$ docker volume rm (docker volume ls -q)

At that point, docker volume ls showed no volumes, and running find / -name krb5.conf on my boot2docker VM found no results.
I can't fathom where this older version of the file is hiding, let alone different busybox utils see different versions of it.
Feedback is welcome on how I can improve this issue report. I have no idea how to reproduce the above scenario, but I'm leaving everything exactly as it is in the likely event that this needs more investigating. If there's stuff you want me to run, post it.

$ docker version
Client:
 Version:      1.10.0
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   590d510
 Built:        Fri Feb  5 08:21:41 UTC 2016
 OS/Arch:      darwin/amd64

Server:
 Version:      1.10.0
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   590d5108
 Built:        Thu Feb  4 19:55:25 2016
 OS/Arch:      linux/amd64

$ docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 478
Server Version: 1.10.0
Storage Driver: aufs
 Root Dir: /mnt/sda1/var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 264
 Dirperm1 Supported: true
Execution Driver: native-0.2
Logging Driver: json-file
Plugins:
 Volume: local
 Network: host bridge null
Kernel Version: 4.1.17-boot2docker
Operating System: Boot2Docker 1.10.0 (TCL 6.4.1); master : b09ed60 - Thu Feb  4 20:16:08 UTC 2016
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.956 GiB
Name: default
ID: UQ75:MAH2:6AVC:ISZO:WLVV:L63B:L2RI:KBVG:SINU:MSZA:6IG4:D4UH
Debug mode (server): true
 File Descriptors: 11
 Goroutines: 23
 System Time: 2016-02-15T08:55:42.020622045Z
 EventsListeners: 0
 Init SHA1:
 Init Path: /usr/local/bin/docker
 Docker Root Dir: /mnt/sda1/var/lib/docker
Username: jakelow
Registry: https://index.docker.io/v1/
Labels:
 provider=virtualbox

Further observations:
It still happens if I mount the parent directory, rather than the file.
$ docker run --rm -it -v (pwd)/etc:/etc alpine cat /etc/krb5.conf
[libdefaults]
default_realm = LOCALDOMAIN

[realms]
LOCALDOMAIN = {
    kdc = kdc.localdomain:88
    admin_server = kdc.localdomain:749
}

And, excitingly, it reproduces on other files.
$ echo "Hello, world!" > etc/hello
$ docker run --rm -it -v (pwd)/etc:/etc alpine cat /etc/hello
Hello, world!
$ echo "Bye now." >> etc/hello
$ cat etc/hello
Hello, world!
Bye now.
$ md5 etc/hello
MD5 (etc/hello) = 39c24d323add15a48dc040966fd4f20d
$ docker run --rm -it -v (pwd)/etc:/etc alpine cat /etc/hello
Hello, world!
$ docker run --rm -it -v (pwd)/etc:/etc alpine md5sum /etc/hello
39c24d323add15a48dc040966fd4f20d  /etc/hello

... but not with other images.
$ docker run --rm -it -v (pwd)/etc:/etc python:latest cat /etc/hello
Hello, world!
Bye now.
$ echo "P.S. no refunds." >> etc/hello
$ cat etc/hello
Hello, world!
Bye now.
P.S. no refunds.
$ md5 etc/hello
MD5 (etc/hello) = 932e6e471794630446153d1ffa05d4c9
$ docker run --rm -it -v (pwd)/etc:/etc python:latest cat /etc/hello
Hello, world!
Bye now.
P.S. no refunds.
$ docker run --rm -it -v (pwd)/etc:/etc python:latest md5sum /etc/hello
932e6e471794630446153d1ffa05d4c9  /etc/hello

Almost sounds as an issue with VirtualBox file sharing.
Note that docker volume rm won't make a difference in this case, because a bind-mounted directory is not created as a volume; it will bind-mount a directory on the host (the VirtualBox VM in this case) inside the container.
Wondering; which directory are you running this from? Is this directory inside your /Users directory?

Is this directory inside your /Users directory?

Yes. Give me a few minutes and I'll try to reproduce it outside that path.

@jake-low no that shouldn't work; if you're using boot2docker, only the /Users directory is shared with the virtual machine, anything outside that isn't, so doesn't exist in the virtual machine.

Running the same repro outside of /Users resulted in empty directories instead of files (meaning the files weren't accessible to the docker engine). My assumptions about how -v works in conjunction with remote engines was incorrect.
Anyway, I tried the repro from /tmp on my VM, and, predictably, the issue did not reappear.
$ docker-machine ssh default
Boot2Docker version 1.10.0, build master : b09ed60 - Thu Feb  4 20:16:08 UTC 2016
Docker version 1.10.0, build 590d5108
$ cd /tmp
$ echo "Hello, /tmp."
Bye now.

What mechanism is used to share /Users with the boot2docker VM? Where would I look on the VM's filesystem to see whether old versions of files are getting persisted?

I should have done a little more digging before I commented again, sorry about that.
You're definitely right about the VM file sharing being the problem.
$ docker-machine ssh default
$ cd /Users/jake/.../etc
$ cat krb5.conf
default_realm = LOCALDOMAIN

[realms]
LOCALDOMAIN = {
    kdc = kdc.localdomain:88
    admin_server = kdc.localdomain:749
}

If I write to the file from inside the VM, I see no change:
$ hostname
default
$ echo "Testing, testing" >> krb5.conf
$ cat krb5.conf
[libdefaults]
default_realm = LOCALDOMAIN

[realms]
LOCALDOMAIN = {
    kdc = kdc.localdomain:88
    admin_server = kdc.localdomain:749
}

But the change does have effect on the host!
$ hostname
Jakes-MBP
$ cat etc/krb5.conf
[libdefaults]
default_realm = LOCALDOMAIN

[realms]
LOCALDOMAIN = {
    kdc = kdc:88
    foo = bar
    admin_server = kdc:749
    baz = zip
}
Testing, testing

It's like a wormhole in the filesystem.

VirtualBox > About VirtualBox:
VirtualBox Graphical User Interface
Version 5.0.14 r105127
Copyright © 2016 Oracle Corporation and/or its affiliates. All rights reserved.

VirtualBox > Check for Updates:
You are already running the most recent version of VirtualBox.

Wow that's strange indeed, so looks like it's narrowed down to busybox cat vs less?
Files between the host and VirtualBox are shared using VirtualBox guest additions, I know there's this issue; https://www.virtualbox.org/ticket/9069, but not sure what the issue behind that is, and if the same could affect cat here.

I found another utility that suffers the same problem as cat: cp. On the VM:
$ cp krb5.conf krb5.conf.2
$ less krb5.conf  # this agrees with the host machine's view
[libdefaults]
default_realm = LOCALDOMAIN

[realms]
LOCALDOMAIN = {
    kdc = kdc:88
    admin_server = kdc:749
}

~
~
~
krb5.conf
$ less krb5.conf.2
[libdefaults]
default_realm = LOCALDOMAIN

[realms]
LOCALDOMAIN = {
    kdc = kdc:88
    foo = bar
    admin_serve
~
~
~
krb5.conf.2

And indeed, on the host machine (Jakes-MBP):
$ cat etc/krb5.conf.2
[libdefaults]
default_realm = LOCALDOMAIN

[realms]
LOCALDOMAIN = {
    kdc = kdc:88
    foo = bar
    admin_serve⏎

The common thread between cat and cp is this function, bb_copyfd_eof. It can (depending on the preprocessor) call sendfile under the hood, and it's the only place in Busybox's core utils that does so. I have a feeling the VirtualBox bug has to do with zero-copy syscalls.

@jake-low Can you link to the VirtualBox issue? I just ran into this today and waster waaaaaayyyy too much time trying to figure out what was happening. Perhaps a notice could be made in the Docker documentation?


Responsive design audit

Link to the Page
(whole site)
Describe the Issue
Given the recent doc page redesign and new preview elements, let's do another sweep to check for responsive issues throughout the site. We've already started to see a few creep up as part of the documentation content audit.
Are you able to create a Pull Request with the fix?
No

[ ] Just FYI that on my screen I'm seeing the TOC hide partially offscreen:

And also saw the highlight of current section in TOC disappear too.

fix by going 3x2


Consensus update

Problem
#634, nspcc-dev/dbft#15, nspcc-dev/dbft#16, nspcc-dev/dbft#17, nspcc-dev/dbft#18.
Solution
Merge.

LGTM, only suggest to unify commit messages into the same style. (subsystem: message)


mavsdk_server doesn't check if the server it is connected to is MavSDK.

Problem:
If another gRPC server is already on port 50051, MavSDK connect function succeeds, while the mavsdk_server starts and silently fails in the background.
For us it was QIKService3, some Qualcomm service for board discovery, which was listening on tcp6://<IP_ADDRESS>:50051.
Ideally, there should be a verification the server we connected to is valid.
To reproduce
Instal QIKService3 or a gRPC test server on 50051.
I tried netcat listening on port 50051 without success, so I suppose  it probably needs to be a gRPC server.
import asyncio
import logging
import sys
from mavsdk import System

logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)

drone = System()
await drone.connect(system_address="udp://<IP_ADDRESS>:14550")
# This succeeds even if no drone is connected because a server listen on 50051
version = await drone.info.get_version()
# This causes an error because get_version is not implemented.
# mavsdk_server dies silently in the background

Log
By default, the logging does not report those errors.
>>> drone = System()
>>> await drone.connect(system_address="udp://<IP_ADDRESS>:14550")
DEBUG:mavsdk.async_plugin_manager:Waiting for mavsdk_server to be ready...
DEBUG:mavsdk.system:[01:07:14|Info ] MAVSDK version: v2.12.5 (mavsdk_impl.cpp:26)
DEBUG:mavsdk.async_plugin_manager:Connected to mavsdk_server!
DEBUG:mavsdk.system:E0904 13:07:14.466524237   87615 chttp2_server.cc:1060]                UNKNOWN:No address added out of total 1 resolved for '<IP_ADDRESS>:50051' {created_time:"2024-09-04T13:07:14.466032843+02:00", children:[FAILED_PRECONDITION:Failed to add any wildcard listeners: Error in bind for address '[::]:50051': Address in useError in bind for address '<IP_ADDRESS>:50051': Address in use]}
DEBUG:mavsdk.system:[01:07:14|Info ] Waiting to discover system on udp://<IP_ADDRESS>:14550... (connection_initiator.h:22)
DEBUG:mavsdk.system:[01:07:14|Debug] New system ID: 1 Comp ID: 1 (mavsdk_impl.cpp:720)
DEBUG:mavsdk.system:[01:07:14|Debug] Component Autopilot (1) added. (system_impl.cpp:366)
DEBUG:mavsdk.system:[01:07:14|Debug] MAVLink: info: Connection to ground station lost	(system_impl.cpp:243)
DEBUG:mavsdk.system:[01:07:14|Info ] System discovered (connection_initiator.h:38)
DEBUG:mavsdk.system:[01:07:14|Error] Failed to bind server to port 50051 (grpc_server.cpp:172)
DEBUG:mavsdk.system:Failed to start, exiting...
>>> version = await drone.info.get_version()
Traceback (most recent call last):
  File "/usr/lib/python3.12/concurrent/futures/_base.py", line 456, in result
    return self.__get_result()
           ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/concurrent/futures/_base.py", line 401, in __get_result
    raise self._exception
  File "<console>", line 1, in <module>
  File "/home/alexis/mavsdk_venv/lib/python3.12/site-packages/mavsdk/info.py", line 856, in get_version
    response = await self._stub.GetVersion(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/alexis/mavsdk_venv/lib/python3.12/site-packages/aiogrpc/channel.py", line 40, in __call__
    return await fut
           ^^^^^^^^^
grpc._channel._MultiThreadedRendezvous: <_MultiThreadedRendezvous of RPC that terminated with:
	status = StatusCode.UNIMPLEMENTED
	details = ""
	debug_error_string = "UNKNOWN:Error received from peer  {created_time:"2024-09-04T13:07:16.212002745+02:00", grpc_status:12, grpc_message:""}"

What do you suggest we do?

I am not sure.
It took me a long time to figure out what was happening. A system identification would do the trick, do a gRPC call which ensure we are connected to a mavsdk server?

A system identification would do the trick, do a gRPC call which ensure we are connected to a mavsdk server?

Would it, though? If mavsdk_server starts successfully, then you will eventually receive MAVLink messages (that's your system identification). If mavsdk_server fails, you won't receive any MAVLink, but your gRPC "identification" call will fail just the same.
As you say, mavsdk_server knows that the port is already bound, and fails:
DEBUG:mavsdk.system:[01:07:14|Error] Failed to bind server to port 50051 (grpc_server.cpp:172)
DEBUG:mavsdk.system:Failed to start, exiting...

So to me, your problem here seems to be that somehow you did not have access to the mavsdk_server logs. Any kind of automation we would put on top of this would result in you getting the error message where you want it (because if the port you want to use for mavsdk_server is already bound, there is no way it will ever work).
Maybe my question would be: why did it take a long time for you to access the mavsdk_server logs, and do you think there is something that could make it easier? My feeling is that it is a bit of a leaky abstraction: users have to understand that there is a server running under the hood, so that if it doesn't work they immediately go check its logs :thinking:.
What do you think? :innocent:

Maybe my question would be: why did it take a long time for you to access the mavsdk_server logs, and do you think there is something that could make it easier?

It is not obvious because mavsdk_server is being spawned by the python connect() call but even though mavsdk_sever doesn't bind to the port and exits the python code goes on as if it was connected. Then after that any call to mavsdk_server results in an UNIMPLEMENTED error which doesn't really give a good hint of what is going on.
It is only when you enable debug logs that you can find the mavsdk_server error within all the other output.
If connect() would check that mavsdk_server was successfully running and throw an exception otherwise instead of continuing as if everything is fine, that would solve the issue here I believe.
Another option that would help is if we can promote mavsdk_server errors to loglevel error instead of debug. Then they would show up without having to change the loglevel I assume?
Yet another option would be to check the port before launching mavsdk_server and warn or throw an exception if it is not free.
Do any of those make sense to you?

though I assume that users may end up turning the MAVSDK logs off (the issue here exists because at least you guys don't keep them enabled all the time, so it seems like a fair assumption 😁).

As far as I can tell the mavsdk_server logs in MAVSDK-Python are only printed as debug logs and debug logs are not shown by default. So the mavsdk_server logs end up being swallowed and we didn't see the mavsdk_server error. This is not something we explicitly disabled.
While I don't necessarily have a great solution, the point I was trying to make was that anything that would prevent connect() from silently continuing as if mavsdk_server was working would have saved us time in figuring out the issue. And while we have figured out the problem I assume someone else will eventually hit the same issue. If we can make it easier for the next guy to figure it out it is a worthwhile investment :slightly_smiling_face:

Hmm it feels like a hack to me 😅. But nothing prevents you from doing it from your code, before you start MAVSDK!

I don't disagree, this solution is a bit of a hack. But to the second part, I don't think it is fair to expect the user to perform this check because the mavsdk_server and port are implementation details. We definitely were not aware MAVSDK-Python was using a grpc server before hitting and looking deeper into this issue.

Maybe there is something to do with the return code of mavsdk_server? Like MAVSDK-Python could detect that mavsdk_server stopped (with or without an error code) and... I don't know... throw an exception in Python? But then again, the exception would say "something wrong happened with mavsdk_server, please check the logs" 🙈.

Yes, logging if the process exits before we expect it to would be a step in the right direction and most likely sufficient. Do you have any objections to this solution? Personally I feel like it would have made the error more explicit and given us a hint were to look.

Yes, logging if the process exits before we expect it to would be a step in the right direction and most likely sufficient. Do you have any objections to this solution?

No, I think it would make sense for MAVSDK-Python to monitor mavsdk_server when it runs it :+1:.

That would be enough

Note that looking on the web, 50051 seems to be the default for many gRPC servers thus could happen to others:

https://xrpl.org/docs/infrastructure/configuration/configure-grpc
https://weaviate.io/developers/weaviate/api/grpc

Quick question, shouldn't we first check if a mavsdk_server exists before starting our own? Isn't mavsdk used with multiple clients to a single mavsdk_sever instance? (at least that is how I understood the project)
Today, the instance we start would crash if another mavsdk_server instance is already started and we would connect to the one that existed before. If we monitor our own instance, I expect we won't be able to run multiple clients.

I will close this. It will be a good reference for the next person searching for this issue :)

I will close this. It will be a good reference for the next person searching for this issue :)


Tests are failing due to wrong assumption

I'm packaging this for openSUSE. With the most recent update, I'm running into issues with the test suite. You can find the full build log here, but it basically boils down to this:
[   59s] ======================================================================
[   59s] FAIL: test_open_read_close (pyfakefs.tests.fake_stat_time_test.TestRealModeAPlus)
[   59s] ----------------------------------------------------------------------
[   59s] Traceback (most recent call last):
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 520, in test_open_read_close
[   59s]     self.check_open_read_close_non_w_mode()
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 287, in check_open_read_close_non_w_mode
[   59s]     self.assertLessExceptWindows(opened.st_atime, read.st_atime)
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 50, in assertLessExceptWindows
[   59s]     self.assertLess(time1, time2)
[   59s] AssertionError:<PHONE_NUMBER>.904 not less than<PHONE_NUMBER>.904
[   59s]
[   59s] ======================================================================
[   59s] FAIL: test_open_read_close_new_file (pyfakefs.tests.fake_stat_time_test.TestRealModeAPlus)
[   59s] ----------------------------------------------------------------------
[   59s] Traceback (most recent call last):
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 511, in test_open_read_close_new_file
[   59s]     self.check_open_read_close_new_file()
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 304, in check_open_read_close_new_file
[   59s]     self.assertLessExceptWindows(created.st_atime, read.st_atime)
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 50, in assertLessExceptWindows
[   59s]     self.assertLess(time1, time2)
[   59s] AssertionError:<PHONE_NUMBER>.948 not less than<PHONE_NUMBER>.948
[   59s]
[   59s] ======================================================================
[   59s] FAIL: test_open_read_close (pyfakefs.tests.fake_stat_time_test.TestRealModeR)
[   59s] ----------------------------------------------------------------------
[   59s] Traceback (most recent call last):
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 543, in test_open_read_close
[   59s]     self.check_open_read_close_non_w_mode()
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 287, in check_open_read_close_non_w_mode
[   59s]     self.assertLessExceptWindows(opened.st_atime, read.st_atime)
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 50, in assertLessExceptWindows
[   59s]     self.assertLess(time1, time2)
[   59s] AssertionError:<PHONE_NUMBER>.184 not less than<PHONE_NUMBER>.184
[   59s]
[   59s] ======================================================================
[   59s] FAIL: test_open_read_flush_close (pyfakefs.tests.fake_stat_time_test.TestRealModeR)
[   59s] ----------------------------------------------------------------------
[   59s] Traceback (most recent call last):
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 561, in test_open_read_flush_close
[   59s]     self.assertLessExceptWindows(opened.st_atime, read.st_atime)
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 50, in assertLessExceptWindows
[   59s]     self.assertLess(time1, time2)
[   59s] AssertionError:<PHONE_NUMBER>.228 not less than<PHONE_NUMBER>.228
[   59s]
[   59s] ======================================================================
[   59s] FAIL: test_open_read_close (pyfakefs.tests.fake_stat_time_test.TestRealModeRPlus)
[   59s] ----------------------------------------------------------------------
[   59s] Traceback (most recent call last):
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 593, in test_open_read_close
[   59s]     self.check_open_read_close_non_w_mode()
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 287, in check_open_read_close_non_w_mode
[   59s]     self.assertLessExceptWindows(opened.st_atime, read.st_atime)
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 50, in assertLessExceptWindows
[   59s]     self.assertLess(time1, time2)
[   59s] AssertionError:<PHONE_NUMBER>.356 not less than<PHONE_NUMBER>.356
[   59s]
[   59s] ======================================================================
[   59s] FAIL: test_open_read_close (pyfakefs.tests.fake_stat_time_test.TestRealModeWPlus)
[   59s] ----------------------------------------------------------------------
[   59s] Traceback (most recent call last):
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 446, in test_open_read_close
[   59s]     self.assertLessExceptWindows(opened.st_atime, read.st_atime)
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 50, in assertLessExceptWindows
[   59s]     self.assertLess(time1, time2)
[   59s] AssertionError:<PHONE_NUMBER>.808 not less than<PHONE_NUMBER>.808
[   59s]
[   59s] ======================================================================
[   59s] FAIL: test_open_read_close_new_file (pyfakefs.tests.fake_stat_time_test.TestRealModeWPlus)
[   59s] ----------------------------------------------------------------------
[   59s] Traceback (most recent call last):
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 424, in test_open_read_close_new_file
[   59s]     self.check_open_read_close_new_file()
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 304, in check_open_read_close_new_file
[   59s]     self.assertLessExceptWindows(created.st_atime, read.st_atime)
[   59s]   File "/home/abuild/rpmbuild/BUILD/pyfakefs-3.5.2/pyfakefs/tests/fake_stat_time_test.py", line 50, in assertLessExceptWindows
[   59s]     self.assertLess(time1, time2)
[   59s] AssertionError:<PHONE_NUMBER>.852 not less than<PHONE_NUMBER>.852

As you can see all of the timestamps are the same for me, so it seems that the assumption that it will be less is false.
I'm guessing the code in question is this:
https://github.com/jmcgeheeiv/pyfakefs/blob/f0c32f1972e3e176780ab247855719705084858e/pyfakefs/tests/fake_stat_time_test.py#L46-L50
Another interesting data point is that it works fine on my local machine (btrfs filesystem), but that it fails on our build service (see above), which is a XFS filesystem. Let me know if you need more information or want me to run some tests.

Yes, these tests are a bit fragile, as they depend on the used file system. I have been thinking about adding support for different file system time stamp resolutions, but this turned out a bit tricky, and is probably not really needed.
The failing tests are all tests on the real time system, that are there for comparison to check that we test the correct behavior in the fake fs. The only systems they are tested against currently are the ones used in the CI builds, e.g. ext4, HFS+ and NTFS for the different OSes. Looks like in XFS the access time is not or less frequently updated - Windows does not update it either by default for performance reasons.
I will probably just weaken these tests to check for less or equal - relying on access time stamps is usually not a good idea anyway...
If you need this for packaging, I can make a new minor release (e.g. 3.5.3) with the changes later today.

Thank you very much for coming back to me this quickly. Having this fixed would be great, so I would appreciate a new minor release :-).

Yes, this seems to fix it. Thank you very much.

Thanks for doing the packaging!


Documentation updates

Updated the formatting and content of the stack's documentation.
cocoadocs.org is not parsing swift 2.0 files currently:
https://github.com/CocoaPods/cocoadocs.org/issues/387
Docs can be generated and tested using jazzy and supplying the Swift 2.1 argument.
jazzy --swift-version 2.1

:+1:


Make function std::ping::ping concurrency safe #7

Took the PR from over and changed the error handling. However i can not run the tests on the branch or on master so i'm unsure if the code @michael-hartman provided is sound.

The function ping so far did not check the ident received. As a consequence the function ping might returned wrong results when used simultaneously from different threads, see https://github.com/aisk/rust-ping/issues/6 for more details.

This commit fixes the issue by checking the ident of the reply and comparing it with the expected ident.

Changes:

This avoids an additional error check in new code.
Receive echo in a loop until either the correct ident was received or a timeout occured.
I have tested the changes and they seem to work for me. Let me know if something still needs to be changed.

Summary by CodeRabbit
Summary by CodeRabbit

New Features

Enhanced the ping operation with time tracking and improved timeout handling.
Implemented a more robust loop for monitoring replies and timeouts during ping operations.
Refined error handling for better clarity during timeouts.
Added two new error types for decoding errors related to v4 and echo replies.

@aisk hello, hope you can have a check on it. thanks :)

Thanks for the help! I'll try to fix the unit test before publish new version. If you need use this, you can specify the github branch in the Cargo.toml.

@aisk another question i was wondering if we should return here
https://github.com/aisk/rust-ping/blob/94e8abb8516a6eea1fc5b4b067f73149d7c3e281/src/ping.rs#L90
the time_elapsed, (currently in code after that) because i think it is a most likely use case to get the duration. Currently in my code i have my own "Duration" to basically get the ping duration, which is reduntant.
It would however break the current call signature, that's why i ask :) (i would provide the pr)

@Kr0san89 I think not only the time, but other fields should be returned too. We can bump the minor version to indicate the breaking change since we are in 0.* as semver requires.


Bump to 0.2.96

r? @m-ou-se
(rust-highfive has picked a reviewer for you, use r? to override)

Could you also update here?
https://github.com/rust-lang/libc/blob/f86dbf242d1406c9f4855a7c420b501030d80d84/libc-test/Cargo.toml#L15

Done. Thanks.

Sorry for the delay! Now the queue is cleaned up and it's time to go :)
@bors r+

:pushpin: Commit 354747d6e059d3f9840829b47fa935fff8d37091 has been approved by JohnTitor

:hourglass: Testing commit 354747d6e059d3f9840829b47fa935fff8d37091 with merge 3df6aaa801b7e5ba1f20314416706e5a32bcb2b9...

:sunny: Test successful - checks-actions, checks-cirrus-freebsd-11, checks-cirrus-freebsd-12, checks-cirrus-freebsd-13
Approved by: JohnTitor
Pushing 3df6aaa801b7e5ba1f20314416706e5a32bcb2b9 to master...

Published on crates.io: https://crates.io/crates/libc/0.2.96

Thanks!


Replaced @Scheduled annotation with TbPrintStatsExecutorService

Pull Request description
Issue: #9906
General checklist

[x] You have reviewed the guidelines document.
[ ] Labels that classify your pull request have been added.
[ ] The milestone is specified and corresponds to fix version.
[x] Description references specific issue.
[x] Description contains human-readable scope of changes.
[x] Description contains brief notes about what needs to be added to the documentation.
[x] No merge conflicts, commented blocks of code, code formatting issues.
[x] Changes are backward compatible or upgrade script is provided.
[ ] Similar PR is opened for PE version to simplify merge. Crosslinks between PRs added. Required for internal contributors only.

Back-End feature checklist

[ ] Added corresponding unit and/or integration test(s). Provide written explanation in the PR description if you have failed to add tests.
[x] If new dependency was added: the dependency tree is checked for conflicts.
[x] If new service was added: the service is marked with corresponding @TbCoreComponent, @TbRuleEngineComponent, @TbTransportComponent, etc.
[x] If new REST API was added: the RestClient.java was updated, issue for Python REST client is created.
[x] If new yml property was added: make sure a description is added (above or near the property).

In addition, I have noticed that in most places where we have called printStats methods, those methods are declared as public however, they are used only inside the class. So we can replace them with a private access modifier.
Also, PR currently has a conflict with the target master so this needs to be fixed.


Use completion handler in functions of MockExposureManager (closes #1918)

This fixes the risk detection behaviour of MockExposureManager in the ENACommunity build for ENF v2.
See github ticket cwa-app-ios/issues/1918.
Description

The mock now simulates a successfull risk detection. The result of the detection is hard-coded as no detected exposure windows.
I have tested it on the XCode simulator for iOS 14.4. Each of the three added completion handlers was called, I verified this with a manual test and breakpoints.
I have performed no testing on a true device.
Link to Jira

EXPOSUREAPP-5006
Screenshots

@ndegendogo Thanks! Will be forwarded to the ticket and devs will be pinged!

@ndegendogo Thanks! Will be forwarded to the ticket and devs will be pinged!

@dsarkar actually, the CI pipeline seems unhappy - how am I now supposed to continue? Are there any log files or similar so I can figure out what is missing?

@ndegendogo
This is the failing test (idk if this helps 😁):
https://circleci.com/api/v1.1/project/github/corona-warn-app/cwa-app-ios/24840/output/104/0?file=true&allocation-id=60217673a283782ce790e2c9-0-build%2F5D9B1AFE
Link to circleci: https://app.circleci.com/pipelines/github/corona-warn-app/cwa-app-ios/10199/workflows/da74c782-173b-4b7e-bfcd-0448302ac01a/jobs/24840

LGTM, thanks for your contribution 👍


CLIENT_INFO field missing

From @martindsouza on July 26, 2013 13:35
A request from Patrick Jolliffe is to add the client_info field as a new column (similar to dbms_application_info). Submitted via comments on http://www.talkapex.com/2013/06/logger-200-released.html
Copied from original issue: tmuth/Logger---A-PL-SQL-Logging-Utility#25

Will not store for now since it's more specific to dbms_application_info.

The client_info column is now being stored..


chore(release): smoketest for v10.25.0-rc2

smoke test for v10.25.0-rc.2
Correct versions for following are:
React: v7.25.0-rc.3
Pictograms: v11.0.0-rc.3

This will have the same issue as before with the styles for pictograms, correct? 👀
Feel free to keep using the same PR btw for RCs, especially since this one has some style tweaks that need to happen. Then when you publish to latest you can add in the latest dependencies

e same issue as before with the styles for pictogram

@joshblack  yup - just pushed up the change for the styles scaling.

Is the increase in size intentional?

Is the increase in size intentional?

no I committed a change to bring it back down to scale to match what we currently have on the site - looks like it's still deploying. @tw15egan


Unable to call openai for fine-tuning in the DSP compiler

I am trying the new DSP compiler to get a less expensive model to work on my own questions. Here is the code from the notebook that I am using wiht my own set of unlabeled questions-
compiled_QA = dsp.compile(program=multihop_QA, examples=dev_pubmed_unlabeled)

I am getting the following error which I traced back to the compiler.py file and this line
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
Input In [56], in <cell line: 1>()
----> 1 compiled_QA = dsp.compile(program=multihop_QA, examples=dev_pubmed_unlabeled)

File ~/llm_search/dsp/dsp/primitives/compiler.py:164, in compile(program, examples, target)
    162 def compile(program, examples, target='ada'):
    163     training_data = simulate(program, examples)
--> 164     compiled_lm = finetune(training_data, target=target)
    166     def compiled_program(*args, **kwargs):
    167         with dsp.settings.context(compiled_lm=compiled_lm, compiling=False):

File ~/llm_search/dsp/dsp/primitives/compiler.py:155, in finetune(training_data, target)
    152     for line in training_data:
    153         f.write(ujson.dumps(line) + '\n')
--> 155 jobname, ft = openai_finetune(name, target)
    156 print(ft)
    158 ft = dsp.GPT3(model=ft, stop=" </s>")

File ~/llm_search/dsp/dsp/primitives/compiler.py:130, in openai_finetune(name, target)
    127 except:
    128     pass
--> 130 jobname, ft = openai_finetune_(name, target)
    132 with open(training_data_path, 'w') as f:
    133     f.write(ujson.dumps((jobname, ft)) + '\n')

File ~/llm_search/dsp/dsp/primitives/compiler.py:87, in openai_finetune_(name, target)
     84 print(command)
     86 # command = """python script.py"""
---> 87 process = subprocess.Popen(command.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     89 while line := process.stdout.readline().decode().strip():
     90     if 'created fine-tune:' in line.lower():

File ~/miniconda3/envs/lang_model/lib/python3.8/subprocess.py:858, in Popen.__init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text)
    854         if self.text_mode:
    855             self.stderr = io.TextIOWrapper(self.stderr,
    856                     encoding=encoding, errors=errors)
--> 858     self._execute_child(args, executable, preexec_fn, close_fds,
    859                         pass_fds, cwd, env,
    860                         startupinfo, creationflags, shell,
    861                         p2cread, p2cwrite,
    862                         c2pread, c2pwrite,
    863                         errread, errwrite,
    864                         restore_signals, start_new_session)
    865 except:
    866     # Cleanup if the child failed starting.
    867     for f in filter(None, (self.stdin, self.stdout, self.stderr)):

File ~/miniconda3/envs/lang_model/lib/python3.8/subprocess.py:1704, in Popen._execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, start_new_session)
   1702     if errno_num != 0:
   1703         err_msg = os.strerror(errno_num)
-> 1704     raise child_exception_type(errno_num, err_msg, err_filename)
   1705 raise child_exception_type(err_msg)

FileNotFoundError: [Errno 2] No such file or directory: 'openai'

Is it because the openai api has changed or I am missing any packages? Openai package is of course already installed. Thanks.

Hmm. The line that's failing is trying to execute a command (on the command line) that's openai ....
It can't find that package. If you run openai yourself in the same context where you're running this script what do you get?

Is this resolved?


⚠ Spryr has degraded performance

In 66bb744, Spryr (https://spryr.com) experienced degraded performance:

HTTP code: 200
Response time: 5024 ms

Resolved: Spryr performance has improved in d4efc9e after 7 minutes.


Multiple Bind (@Binds)

I am currently using as this:
   @Bind(R.id.tutorial_dot1)
   ImageView dot1;

   @Bind(R.id.tutorial_dot2)
   ImageView dot2;

   ...
   ...

   @Bind(R.id.tutorial_dot10)
   ImageView dot10;

Actually I am not interested in each element here. I just need an array and access them by index.
      @Binds(R.id.tutorial_dot1, R.id.tutorial_dot2, ... , R.id.tutorial_dot10)
      ImageView[] views;

Is it worth to add this feature?

This feature already exists, you can pass an array of IDs to @Bind:
@Bind({ R.id.one, R.id.two }) ImageView[] views;

I have just noticed bind takes multiple int. :(

what about BindDrawable? This does let me to bind multiple drawable. Is there any particular reason? @tomxor

That is not supported. Why would that be useful to you?
On Tue, Sep 15, 2015, 8:48 AM Cemalettin Koc<EMAIL_ADDRESS>wrote:

what about BindDrawable? This does let me to bind multiple drawable. Is
there any particular reason? @tomxor https://github.com/tomxor
—
Reply to this email directly or view it on GitHub
https://github.com/JakeWharton/butterknife/issues/349#issuecomment-140378113
.

Sorry, It was my fault.


IncrementGet

When doing an increment immediately followed by a getcount, will this be atomic. Can I use this value as an id for example?
Do I have to do this in a transaction?

Hi @ThomasDeLetter, thanks for posting your question.
In general the answer is yes: increment and decrement operations are atomic if the operation responds without throwing certain kinds of Datastore exception (e.g., DatastoreFailureException and DatastoreTimeoutException).  This is a subtle edge-case where the Google Datastore will report that the operation failed, but in reality the Datastore operation may have succeeded (see Data Consistency near the text "...If your application receives an exception when attempting to commit a transaction...")
This is a short-coming of the current appengine-counter interface design -- in these cases, there's no good way to know if your increment succeeded.  Your only recourse is to retry the increment until you don't receive a Datastore exception, but you would need to use ShardedCounterService#increment(counterName, amount, shardNumber, incrementUuid), which would allow you to catch the Datastore exception and retry in an idempotent fashion.  However, you would need to duplicate the random-shard-picking logic found in the implementation since that method requires you to specify the Shard to increment/decrement in order to enforce idempotence.
That said, even if the ShardedCounter interface were improved to help callers get around this issue, I would advise against using this library to generate identifiers.  While the ShardedCounter#getCounter operations are usually consistent, they're not always.  At best, the getCounter operations should be considered eventually consistent because the counter shards stored in the Datastore are fronted by memcache for accessing counts.  Occasionally, the counts reported by memcache to the caller of ShardedCounterService can be incorrect.  The library does it's best to always keep memcache in sync with the actual counter shards, but since memcache isn't actually connected to the CounterShards, sometimes it can get out of sync for a bit until the cache times out and the count is recalculated.
In my mind, the intended usage scenario for this library is one where you want to guarantee that an increment/decrement is applied (notwithstanding the above), but can tolerate getting the actual count ~99% of the time, and a slightly-out-of-date count some other percent of the time whenever memcache is latent/flaky/restarted, etc.
If you need to generate identifiers, I would suggest using the Datastore to do that work for you.  For example, would the Datastore allocateIds method work for you?

I've opened #32 as a task to track the improvement to ShardedCounterService that I outlined above.

Thanks for the reply!
I redesigned my project and i now work with allocateids.
Do you know by any chance if the allocateids are increasing? They do not need to be consecutive.

I'm not 100% sure on the allocateids, but I believe a block of ids is reserved, so they will not be consecutive, but they will be unique.


Allow props setting use case

Hello,
I was trying to set multiple properties on a node using a "props" parameter (as it is done here http://neo4j.com/docs/developer-manual/current/cypher/syntax/parameters/#cypher-parameters-create-node-with-properties).
I tried with the following anonymous parameter:
var props = new { id = ..., name = ... }
var parameters = new { props }
session.Run("...", parameters)

The Run with "object" parameters does not support this use case since the ToDictionary extension (from Internal/Extensions/CollectionsExtensions.cs) transform only the first level and do not go deeper (in the "props" anonymous object).
I agree it is probably useful only in the setting props use case, but would be could great to be able to do this easily. Or we could have a Props class that manage this use case and a new Run overload?
Thanks
Clément

Hi
You could provide multiple levels of property parameters if you use Run(string, IDictionary<string, object>)
var parameters = new IDictionary<string, object>{ {"props", new IDictionary<string, object> { "id", ... }, {"name", ... } }

Is this solves your problem?
Zhen

Yes that's what I did, but it is a bit more verbose than anonymous objects.
I even mixed both:
new { props = new Dictionary<string, object> { ... } }

https://github.com/neo4j/neo4j-dotnet-driver/pull/213

I am closing this as this is addressed by #213 and is already included in 1.4.1 release and merged in 1.5.0 branch.


WIP - Update Shipment with Original dates on BeforeSave()

Description
It appears that some shipments in staging are missing dates.  This code change wants to make the dates less fragile by ensuring they exist on the shipment each time it is saved (but only if they are missing).  We figured this out during a bug found while testing staging.
Reviewer Notes

[x] Refactor calculateMoveDates functions so they can be used in the BeforeSave() function
[x] Calculate dates in BeforeSave() method

Setup
Run through the service flow and create an HHG shipment.  Then go in the DB and remove the OriginalPackDate or OriginalDeliveryDate from that shipment.  Now do any updating on the shipment via the TSP app that might call PATCH or POST methods.  You should see those dates update in the DB.
Code Review Verification Steps

[ ] Code follows the guidelines for Logging
[ ] The requirements listed in
Querying the Database Safely
have been satisfied.
Any new migrations/schema changes:

[ ] Follow our guidelines for zero-downtime deploys (see Zero-Downtime Deploys)
[ ] Have been communicated to #dp3-engineering

[ ] There are no aXe warnings for UI.
[ ] This works in IE.
Any new client dependencies (Google Analytics, hosted libraries, CDNs, etc) have been:

[ ] Communicated to @willowbl00
[ ] Added to the list of network dependencies

[ ] Request review from a member of a different team.
[ ] Have the Pivotal acceptance criteria been met for this change?

References

Pivotal story for this change

Also, as a reference, should be making sure I don't conflict with @kimallen 's branch https://github.com/transcom/mymove/compare/kma-160866959-change-sm-hhg-homepage-by-status

Closing and following up in https://github.com/transcom/mymove/pull/1283


Make variableName, timingCategory and timingTime optional

Fixes #718

@miike has signed the Software Grant and Corporate Contributor License Agreement

Cherry-picked into release branch, closing


Have a test that runs before everything that verifies the state of test

Including:

Can network
Docker running
...

why are the errors from the tests not sufficient? too slow?
Ideally, we make make test totally 100% self sufficient, only depending on golang, and then we don't need this

related: #1029

So now we have:

make test runs the unit tests which are self-sufficient
make integration-test runs the integration tests which are self-sufficient apart from:

Estuary tests contact Estuary... but only if you have an ESTUARY_API_KEY set
Docker tests do a check for Docker and fail fast if it isn't present

Do we think that meets the brief?


Liked songs and Episodes not showing + Dubble dots on the progressbar and volumebar

So as the title states I cannot see the "Likes Songs" and "Your Episodes" buttons on the sidebar. They are there just not visible (See picture)
And the sliders for the progressbar and the volumebar is shown two times beneath eachoter. (See picture)
I have done the automatic installation and also checked with the manual to be sure.
My config:
`[Setting]
prefs_path              = C:\Users\kevin\AppData\Roaming\Spotify\prefs
color_scheme            = dark
inject_css              = 1
overwrite_assets        = 1
check_spicetify_upgrade = 0
spotify_path            = C:\Users\kevin\AppData\Roaming\Spotify
current_theme           = Bloom
replace_colors          = 1
spotify_launch_flags    =
[Preprocesses]
remove_rtl_rule       = 1
expose_apis           = 1
disable_upgrade_check = 1
disable_sentry        = 1
disable_ui_logging    = 1
[AdditionalOptions]
extensions            = bloom.js
custom_apps           = marketplace
sidebar_config        = 1
home_config           = 1
experimental_features = 1
; DO NOT CHANGE!
[Backup]
version = <IP_ADDRESS>2.gcc529952
with    = 2.10.2
[Patch]
xpui.js_find_8008 = ,(\w+=)32,
xpui.js_repl_8008 = ,${1}56,
`

@Sefohui  your spicetify version is 2.10.2 which is not the latest spicetify version (latest version is 2.12)
update spicetify by running spicetify upgrade  after backing up progress run bloom installation script again
Invoke-WebRequest -UseBasicParsing "https://raw.githubusercontent.com/nimsandu/spicetify-bloom/main/install.ps1" | Invoke-Expression
it must fix the issue

Can confirm on the double bubble issue. Latest version here.

It started working for me after the update aswell. Now. When I loaded back the theme in marketplace to change the color easy the dubble bubble re-appeared. Fixed this by removing it from the marketplace again and changing the color in terminal

Ah, that did it :P Double bubble fixed!

Yeah took me a while to figure that out aswell. Guess it doesn't really like being applied two times lol. Then I guess we can close this now :D

@wadforth @Sefohui Thanks for your troubleshooting and finding a proper solution I really appreciate that
If someone get this issue again ill reference this issue so this issue will help lots of bloom family members
If you are having any issues in future don't hesitate to open another issue
Enjoy bloom
Thanks