Prepare release 0.1.0

🚀 Description
Prepare release of 0.1.0 versions
✅ Checklist

[x] My code follows the code style and naming conventions of this project.
[x] I have updated the documentation (if appropriate).
[x] I have updated the changelog accordingly.
[x] I have read the CONTRIBUTING document.
[x] I have added tests to cover my changes.
[x] All new and existing tests passed.

:+1:


Move pipeline functions into a separate package

Changes

Moves the GetPipelineFunc and GetPipelineData to its own package
as previously the resources package has been doing too much.
No functional changes.
Part of #5024
/kind cleanup
Submitter Checklist
As the author of this PR, please check off the items in this checklist:

n/a Docs included if any changes are user facing
n/a Tests included if any functionality added or changed
[x] Follows the commit message standard
[x] Meets the Tekton contributor standards (including
functionality, content, code)
[x] Release notes block below has been filled in
(if there are no user facing changes, use release note "NONE")

Release Notes
NONE

/ok-to-test

/release-note-none

/retest

/retest-required

thanks Jerome! maybe pipelinespec could be a more descriptive package name?

Thank you for the comment. Changed to pipelinespec and retested.


Possible bug cause witness not produce block on time, but at next interval

https://bitsharestalk.org/index.php/topic,18951.msg249636.html#msg249636
Happened twice today. I think it's not a latency issue.
2015-10-24T03:25:00 th_a:invoke handle_block         handle_block ] Got block: #298723 time: 2015-10-24T03:25:00 latency: 551 ms from:
 mindphlux.witness  irreversible: 298700 (-23)                    application.cpp:496
2015-10-24T03:25:06 th_a:Witness Block Production block_production_loo ] Generated block #298724 with timestamp 2015-10-24T03:25:06 at
 time 2015-10-24T03:25:06                 witness.cpp:179
2015-10-24T03:25:06 th_a:invoke handle_block         handle_block ] Got block: #298724 time: 2015-10-24T03:25:03 latency: 3723 ms from
: rnglab  irreversible: 298701 (-23)                      application.cpp:496
2015-10-24T03:25:09 th_a:invoke handle_transaction   handle_transaction ] Got 1 transactions from network                       applic
ation.cpp:545
2015-10-24T03:25:10 th_a:invoke handle_block         handle_block ] Got block: #298725 time: 2015-10-24T03:25:09 latency: 1010 ms from
: delegate-1.lafona  irreversible: 298701 (-24)                   application.cpp:496
2015-10-24T03:25:10 th_a:invoke handle_block          _push_block ] Switching to fork: 00048ee5fc659531b4974f3d9781a7a82be5625b
                db_block.cpp:137
2015-10-24T03:25:10 th_a:invoke handle_block          _push_block ] pushing blocks from fork<PHONE_NUMBER>8ee4bee8781d6a7755ba09e9e71c1a0d1d8b                    db_block.cpp:147

2015-10-24T09:50:24 th_a:invoke handle_block         handle_block ] Got block: #306412 time: 2015-10-24T09:50:24 latency: 344 ms from:
 delegate.ihashfury  irreversible: 306386 (-26)                   application.cpp:496
2015-10-24T09:50:30 th_a:Witness Block Production block_production_loo ] Generated block #306413 with timestamp 2015-10-24T09:50:30 at
 time 2015-10-24T09:50:30                 witness.cpp:179
2015-10-24T09:50:30 th_a:invoke handle_block         handle_block ] Got block: #306413 time: 2015-10-24T09:50:27 latency: 3422 ms from
: verbaltech2  irreversible: 306387 (-26)                 application.cpp:496
2015-10-24T09:50:33 th_a:invoke handle_block         handle_block ] Got block: #306414 time: 2015-10-24T09:50:33 latency: 374 ms from:
 wackou  irreversible: 306387 (-27)                       application.cpp:496
2015-10-24T09:50:33 th_a:invoke handle_block          _push_block ] Switching to fork: 0004acee321e2d9ba26852c24af99e9a6d826bed
                db_block.cpp:137
2015-10-24T09:50:33 th_a:invoke handle_block          _push_block ] pushing blocks from fork<PHONE_NUMBER>aced9d269bbd0bb17fa02cbbe7f16262ff23                    db_block.cpp:147
2015-10-24T09:50:33 th_a:invoke handle_block          _push_block ] pushing blocks from fork<PHONE_NUMBER>acee321e2d9ba26852c24af99e9a6d826bed                    db_block.cpp:147
2015-10-24T09:50:36 th_a:invoke handle_block         handle_block ] Got block: #306415 time: 2015-10-24T09:50:36 latency: 345 ms from: dele-puppy  irreversible: 306388 (-27)                   application.cpp:496

Ah it's a latency issue


Live llava - run.sh AssertionError

Head at commit ID- 2d6187b00eaad34a4a51bf1e088baf4a600faa09
Hey Dusty, I am following your tutorial on my new AGX ORIN Dev kit but when I try to run the run.sh file, it fails at the end. I will need your help to solve this, please.
Sharing the terminal output below -
./run.sh   -e SSL_KEY=/data/key.pem -e SSL_CERT=/data/cert.pem   $(./autotag local_llm)     python3 -m local_llm.agents.video_query --api=mlc --verbose       --model liuhaotian/llava-v1.5-7b       --max-new-tokens 32       --video-input /dev/video0       --video-output Display://0       --prompt "How many fingers am I holding up?"
Namespace(disable=[''], output='/tmp/autotag', packages=['local_llm'], prefer=['local', 'registry', 'build'], quiet=False, user='dustynv', verbose=False)
-- L4T_VERSION=35.2.1  JETPACK_VERSION=5.1  CUDA_VERSION=11.4.315
-- Finding compatible container image for ['local_llm']
dustynv/local_llm:r35.3.1
localuser:root being added to access control list
+ docker run --runtime nvidia -it --rm --network host --volume /tmp/argus_socket:/tmp/argus_socket --volume /etc/enctune.conf:/etc/enctune.conf --volume /etc/nv_tegra_release:/etc/nv_tegra_release --volume /tmp/nv_jetson_model:/tmp/nv_jetson_model --volume /home/rajesh/Desktop/jetson-containers/data:/data --device /dev/snd --device /dev/bus/usb -e DISPLAY=:1 -v /tmp/.X11-unix/:/tmp/.X11-unix -v /tmp/.docker.xauth:/tmp/.docker.xauth -e XAUTHORITY=/tmp/.docker.xauth --device /dev/video0 --device /dev/video1 -e SSL_KEY=/data/key.pem -e SSL_CERT=/data/cert.pem dustynv/local_llm:r35.3.1 python3 -m local_llm.agents.video_query --api=mlc --verbose --model liuhaotian/llava-v1.5-7b --max-new-tokens 32 --video-input /dev/video0 --video-output Display://0 --prompt 'How many fingers am I holding up?'
/usr/local/lib/python3.8/dist-packages/transformers/utils/hub.py:124: FutureWarning: Using `TRANSFORMERS_CACHE` is deprecated and will be removed in v5 of Transformers. Use `HF_HOME` instead.
  warnings.warn(
16:32:47 | DEBUG | Namespace(api='mlc', chat_template=None, debug=True, do_sample=False, log_level='debug', max_new_tokens=32, min_new_tokens=-1, model='liuhaotian/llava-v1.5-7b', prompt=['How many fingers am I holding up?'], quant=None, repetition_penalty=1.0, save_mermaid=None, system_prompt=None, temperature=0.7, top_p=0.95, video_input='/dev/video0', video_input_codec=None, video_input_framerate=None, video_input_height=None, video_input_save=None, video_input_width=None, video_output='Display://0', video_output_bitrate=None, video_output_codec=None, video_output_save=None, vision_model=None)
16:32:47 | DEBUG | subprocess 34 started
16:32:47 | DEBUG | Starting new HTTPS connection (1): huggingface.co:443
16:32:48 | DEBUG | https://huggingface.co:443 "GET /api/models/liuhaotian/llava-v1.5-7b/revision/main HTTP/1.1" 200 2444
Fetching 11 files: 100%|█████████████████████| 11/11 [00:00<00:00, 59686.09it/s]
16:32:48 | INFO | loading /data/models/huggingface/models--liuhaotian--llava-v1.5-7b/snapshots/12e054b30e8e061f423c7264bc97d4248232e965 with MLC
Process Process-1:
Traceback (most recent call last):
  File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/opt/local_llm/local_llm/agents/video_query.py", line 115, in <module>
    agent = VideoQuery(**vars(args)).run()
  File "/opt/local_llm/local_llm/agents/video_query.py", line 22, in __init__
    self.llm = ProcessProxy((lambda **kwargs: ChatQuery(model, drop_inputs=True, **kwargs)), **kwargs)
  File "/opt/local_llm/local_llm/plugins/process_proxy.py", line 31, in __init__
    raise RuntimeError(f"subprocess has an invalid initialization status ({init_msg['status']})")
RuntimeError: subprocess has an invalid initialization status (<class 'AssertionError'>)
Traceback (most recent call last):
  File "/usr/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
    self.run()
  File "/usr/lib/python3.8/multiprocessing/process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "/opt/local_llm/local_llm/plugins/process_proxy.py", line 62, in run_process
    raise error
  File "/opt/local_llm/local_llm/plugins/process_proxy.py", line 59, in run_process
    plugin = factory(**kwargs)
  File "/opt/local_llm/local_llm/agents/video_query.py", line 22, in <lambda>
    self.llm = ProcessProxy((lambda **kwargs: ChatQuery(model, drop_inputs=True, **kwargs)), **kwargs)
  File "/opt/local_llm/local_llm/plugins/chat_query.py", line 63, in __init__
    self.model = LocalLM.from_pretrained(model, **kwargs)
  File "/opt/local_llm/local_llm/local_llm.py", line 72, in from_pretrained
    model = MLCModel(model_path, **kwargs)
  File "/opt/local_llm/local_llm/models/mlc.py", line 58, in __init__
    assert(self.device.exist) # this is needed to initialize CUDA?
AssertionError

Hi @rajeshroy402, please try my suggestion from this post:
https://github.com/dusty-nv/jetson-containers/issues/383#issuecomment-1944269051

Hi @dusty-nv , thank you. Did the changes at line 22 as suggested.
Still not able to run it. I am using the internal storage of the dev kit so for me /mnt/NVME/ wouldn't make sense and I removed that.
Below are my logs.
'''
./run.sh   -e SSL_KEY=/data/key.pem -e SSL_CERT=/data/cert.pem   -v /mnt/Desktop/jetson-containers/packages/llm/local_llm:/opt/local_llm/local_llm $(./autotag local_llm)     python3 -m local_llm.agents.video_query --api=mlc --verbose       --model liuhaotian/llava-v1.5-7b       --max-new-tokens 32       --video-input /dev/video0       --video-output Display://0       --prompt "How many fingers am I holding up?"
Namespace(disable=[''], output='/tmp/autotag', packages=['local_llm'], prefer=['local', 'registry', 'build'], quiet=False, user='dustynv', verbose=False)
-- L4T_VERSION=35.2.1  JETPACK_VERSION=5.1  CUDA_VERSION=11.4.315
-- Finding compatible container image for ['local_llm']
dustynv/local_llm:r35.3.1
localuser:root being added to access control list

docker run --runtime nvidia -it --rm --network host --volume /tmp/argus_socket:/tmp/argus_socket --volume /etc/enctune.conf:/etc/enctune.conf --volume /etc/nv_tegra_release:/etc/nv_tegra_release --volume /tmp/nv_jetson_model:/tmp/nv_jetson_model --volume /home/rajesh/Desktop/jetson-containers/data:/data --device /dev/snd --device /dev/bus/usb -e DISPLAY=:1 -v /tmp/.X11-unix/:/tmp/.X11-unix -v /tmp/.docker.xauth:/tmp/.docker.xauth -e XAUTHORITY=/tmp/.docker.xauth --device /dev/video0 --device /dev/video1 -e SSL_KEY=/data/key.pem -e SSL_CERT=/data/cert.pem -v /mnt/Desktop/jetson-containers/packages/llm/local_llm:/opt/local_llm/local_llm dustynv/local_llm:r35.3.1 python3 -m local_llm.agents.video_query --api=mlc --verbose --model liuhaotian/llava-v1.5-7b --max-new-tokens 32 --video-input /dev/video0 --video-output Display://0 --prompt 'How many fingers am I holding up?'
/usr/bin/python3: Error while finding module specification for 'local_llm.agents.video_query' (ModuleNotFoundError: No module named 'local_llm.agents')
'''

./run.sh -e SSL_KEY=/data/key.pem -e SSL_CERT=/data/cert.pem -v /mnt/Desktop/jetson-containers/packages/llm/local_llm:/opt/local_llm/local_llm $(./autotag local_llm)
Error while finding module specification for 'local_llm.agents.video_query' (ModuleNotFoundError: No module named 'local_llm.agents'

Double check that your  /mnt/Desktop/jetson-containers/packages/llm/local_llm path is correct - maybe you mean something more like /home/MY_USERNAME/Desktop/jetson-containers/packages/llm/local_llm ?
Also, you can start the container without the python3 -m local_llm.agents.video_query command, and it will just give you an interactive prompt into the container.  You can then navigate the container's filesystem and check that the changes you made are reflected inside the container.

Perfect, thank you.
The display is not opening as it says 'failed to create X11 Window.'
I tried understanding this but couldn't.
Is there another way to fix this?
My command -
./run.sh -e SSL_KEY=/data/key.pem -e SSL_CERT=/data/cert.pem -v /home/rajesh/Desktop/jetson-containers/packages/llm/local_llm:/opt/local_llm/local_llm $(./autotag local_llm) python3 -m local_llm.agents.video_query --api=mlc --verbose --model liuhaotian/llava-v1.5-7b --max-new-tokens 32 --video-input /dev/video0 --video-output display://0 --prompt "How many fingers am I holding up?"

Last lines from my terminal output -
18:03:03 | INFO | using chat template 'llava-v1' for model llava-v1.5-7b
18:03:03 | DEBUG | connected PrintStream to on_eos on channel=0
18:03:03 | DEBUG | connected ChatQuery to PrintStream on channel=0
18:03:03 | DEBUG | processing chat entry 0  role='system' template='${MESSAGE}\n\n' open_user_prompt=False cached=false text='A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions.'
18:03:03 | DEBUG | embedding text (1, 32, 4096) float16 -> ```A chat between a curious human and an artificial intelligence assistant.
Traceback (most recent call last):
  File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/opt/local_llm/local_llm/agents/video_query.py", line 117, in <module>
    agent = VideoQuery(**vars(args)).run()
  File "/opt/local_llm/local_llm/agents/video_query.py", line 40, in __init__
    self.video_output = VideoOutput(**kwargs)
  File "/opt/local_llm/local_llm/plugins/video.py", line 102, in __init__
    self.stream = videoOutput(video_output, options=options)
Exception: jetson.utils -- failed to create videoOutput device

OK, I take it that you have a physical display attached to your Jetson and aren't attempting this over SSH with X11 forwarding right?
This may sound strange, but try changing the code to create the videoOutput node first, above the LLM even.
Also, try running these inside the local_llm container first, to debug the video without the complexity of the LLM:
video-viewer.py /dev/video0 display://0

python3 -m local_llm.agents.video_stream \
        --video-input /dev/video0 \
        --video-output display://0

Yes, I have a physical monitor with keyboard and mouse connected directly to the AGX ORIN Dev Kit. I am using terminal inside the same device for this purpose.

@dusty-nv I'm coincidentally working on trying the get this up and running and having the same problems.
Running:
video-viewer.py /dev/video0 display://0
in the container works fine, however still getting the same failed to create videoOutput device when running video_stream.
Moving the --video-output flag earlier in the command didn't work either.
Thanks in advance.

I'm at this point also -- everything works perfectly except when trying to display the output video, or save an output file for that matter.  I have been successful with --video-input /dev/video0 --video-output webrtc://@:8554/output but nothing ever displays in the OpenGL window.
I spent a lot of time yesterday trying to debug the issue:

The typical $ video-viewer /dev/video0 display://0 works fine on the host (assuming you have jetson-inference installed)
Exercising the container with: ./run $(./autotag local_llm) video-viewer /dev/video0 display://0 works correctly.
Exercising the container with ./run $(./autotag local_llm) python3 /usr/local/bin/video-viewer.py /dev/video0 display://0 works correctly.
Exercising the container with ./run $(./autotag local_llm) python3 -m local_llm.agents.video_stream --video-input /dev/video0 --video-output display://0 --verbose results with a black OpenGL window, however with --verbose I can see that it is capturing frames.

There is not difference in the result if instead I run

./run $(./autotag local_llm) python3 -m local_llm.agents.video_stream --video-output display://0 --video-input /dev/video0 --verbose

It feels like maybe a callback isn't being run or something?  Or the output frame isn't being written, or something like that.
Again, I've only been able to get /dev/video0 to display via webrtc://@:8554/output, but I've never actually been able to see anything on the OpenGL window that pops up by default.
I'd love to help debug this issue if I can be of any help @dusty-nv

@cahlen @wpburns @rajeshroy402 is the common denominator that you are all on JetPack 5?
Over the weekend I tried reproducing this issue on both JetPack 5 and 6 on fresh systems, and unfortunately was unable to.

/dev/video0 --video-output display://0 --verbose results with a black OpenGL window, however with --verbose I can see that it is capturing frames.

Is the OpenGL window failing to be created, or does it pop-up a window that is literally black?   My interpretation is the later.

I'd love to help debug this issue if I can be of any help @dusty-nv

Thanks @cahlen, I appreciate your help, as I've been unable to reproduce this myself.  To make it easier for you, if you start the local_llm container by mounting your jetson-container's source tree into the container, you can interactively edit the local_llm source files on your device, and any changes will instantly be reflected inside the container (so you aren't constantly rebuilding it)
./run.sh \
  -v /path/to/your/jetson-containers/packages/llm/local_llm:/opt/local_llm/local_llm \
  $(./autotag local_llm)

Over the weekend, before I even began I re-flashed my Jetson AGX Orin to be completely fresh with Jetpack 6.
The OpenGL window displays, but yes, it is completely black.  I've included a few screenshots below with more information. I'll continue to debug on my end also today, and thanks for the mounting hint!

I tried webrtc again today and strangely this time it worked.
The only difference is that I changed my root from emmc to sdcard a couple of hours ago. So now, I am booting via the sdcard.
Below is the command that I ran for webRTC:
' ' '
./run.sh -e SSL_KEY=/data/key.pem -e SSL_CERT=/data/cert.pem -v /home/rajesh/Desktop/jetson-containers/packages/llm/local_llm:/opt/local_llm/local_llm $(./autotag local_llm) python3 -m local_llm.agents.video_query --api=mlc --verbose --model liuhaotian/llava-v1.5-7b --max-new-tokens 32 --video-input /dev/video0 --video-output webrtc://@:8554/output --prompt "How many fingers am I holding up?"
' ' '
I also installed the ssl certificates from here but the video was not playing.
Sharing a screenshot below which contains my terminal logs on the left and webRTC screen at the right.

That's pretty much where I also ended up getting @rajeshroy402.
With your browser, I ended up using Chrome and disabling any WebRTC stuff in chrome://flags/ and then my video feed appeared.
Nothing in my debugging has really gave me any hint as to why frames won't show up in glDisplay or take in recorded video / save video, especially since I can see that they're being passed to llava because inference comes out correctly within the logs.

That's pretty much where I also ended up getting @rajeshroy402.
With your browser, I ended up using Chrome and disabling any WebRTC stuff in chrome://flags/ and then my video feed appeared.
Nothing in my debugging has really gave me any hint as to why frames won't show up in glDisplay or take in recorded video / save video, especially since I can see that they're being passed to llava because inference comes out correctly within the logs.
@rajeshroy402 are you using a Jetson AGX Orin 32GB also?

@cahlen , Tried setting up with JP6.0 but I only have 128GB sd card (I am booting from a microSD card). So now reinstalling JP5.0.2 Runtime Revision 2 and will run through the entire steps again.
I am using AGX ORIN 64GB Dev Kit. Yesterday night, I was also trying to solve it by editing the python files in utils and llm folders but nothing worked.
@dusty-nv - I think this has something to do with the cuda Render command which is used in VideoOutput.
I will try more and see if I can share the logs.

@rajeshroy402 @cahlen okay, I was finally able to reproduce this and track this down - the fix ended up being https://github.com/dusty-nv/jetson-utils/commit/5a5bb422eada7fdbd7d0f53806cf8e0889f2352f
dustynv/local_llm:r36.2.0 has been rebuilt, so pull the latest and please let me know if it fixes the window rendering on your end (the JetPack 5 containers are rebuilding now)
I also attempted to address the mDNS issue in https://github.com/dusty-nv/jetson-containers/commit/87cec8f7f2a4e26d8b793e0805fd47ff6c6152c9 , but .local addresses still don't seem to resolve reliably inside containers, so for now please continue disabling chrome://flags/#enable-webrtc-hide-local-ips-with-mdns for WebRTC.

@dusty-nv That solved it on my end!  Thanks for your help!

@rajeshroy402 @cahlen okay, I was finally able to reproduce this and track this down - the fix ended up being https://github.com/dusty-nv/jetson-utils/commit/5a5bb422eada7fdbd7d0f53806cf8e0889f2352f
dustynv/local_llm:r36.2.0 has been rebuilt, so pull the latest and please let me know if it fixes the window rendering on your end (the JetPack 5 containers are rebuilding now)
I also attempted to address the mDNS issue in https://github.com/dusty-nv/jetson-containers/commit/87cec8f7f2a4e26d8b793e0805fd47ff6c6152c9 , but .local addresses still don't seem to resolve reliably inside containers, so for now please continue disabling chrome://flags/#enable-webrtc-hide-local-ips-with-mdns for WebRTC.

Working for me as well.
Thank you.

tried removing entire docker and reinstalling it using the below your guide (below image)

But it fails when I try to run sudo systemctl restart docker.service


Date of release label is wrong

It seems like the date of release label is wrong since 1.18.2 ver. It should be 2022.
Thanks

Thank you for bringing this to our notice. I have updated the version title.


Correct usage for P2P connection with UDP punchholing.

Hello!
I'd like to establish peer to peer connection between 2 clients using a server for initial address and port exchange. I already use a TCP connection for transferring the addresses to each client, etc..
Now I'd like to understand how to use LiteNetLib in P2P ? Can your library work without a server in this case ? I'm confused.
Any help appreciated :)

BUMP!

@Ahmad45123 there is sample https://github.com/RevenantX/LiteNetLib/blob/master/LibSample/HolePunchServerTest.cs
Also read about how this work in wiki https://en.wikipedia.org/wiki/UDP_hole_punching

Oh thank you!
To be honest the code isn't very clear at first glance as I can't seperate what's the code that's gonna run on the server and what on the 2 clients. But regardless I'll give it a go and come back with further questions, if any. :)

Works :)


 This means we drop all the try/catch statements and expect the caller to implement them as they see fit

geometry.transformTo(SRS) cannot perform transformations between reference systems based on different datum -- for example this function can't transform data in a state-plane SRS using NAD83 to spehrical mercator which uses WGS84. So the PR switches to using geometry.transform(gdal.CoordinateTransformation) which supports datum transformations.

re-implements cropping with caveats:

creates the world boundary in epsg:4326, then attempts to transform it into the file's native spatial reference
if this transformation fails, that likely means the world boundary is outside the bounds of the native SRS. In this case, no cropping is done. Otherwise, it crops with the same intersection logic that was there before.

adds a test script to run reprojection on every shapefile in mapnik-test-data. This helps us cover a slightly broader range of scenarios than we were covering before.

Question:
Cropping presents a scenario where a feature might fall entirely outside the bounds of the target SRS. In this case, we have to decide if we should drop the feature out of the output shapefile, or if we should keep the feature, but set its geometry to null. As written right now, this PR drops the feature out. Is this the right behavior?
cc @GretaCB @BergWerkGIS

As written right now, this PR drops the feature out. Is this the right behavior?

Yes, I dare say so.
If the feature is out of the +/-85.xxx bounds it cannot reasonably be displayed with Web Mercator anyway.
If anybody wants to display data close to or on the poles they have to look for other solutions.


Export : Missing artboard names

When exporting a project with multiple artboards, their names don't appear in the Bounds menu :

Instead, each artboard is named : Artboard : Untitled x (with x being a number).
This makes it hard to know which option to select.

For some context : I'm using Graphite on the web to create sprites for a video game, and it's very handy to be able to create one artboard per sprite without having to create multiple projects !

Thank you for this report, you've noticed something we've overlooked. Artboard naming was added sometime after building that menu and it seems we forgot to update it with the names.

Sure thing, glad to help! It's live on https://dev.graphite.rs and will be on the next https://editor.graphite.rs release in about half an hour.


Added contig tag to vcf in ivar_variants_to_vcf and included bcftools sort for vcf sorting

Added reference parameter for including a contig tag in vcf file for ivar_variants_to_vcf script. Thanks to this tag now vcf sorting can be directly done using bcftools sort module.
PR checklist

[x] This comment contains a description of changes (with reason).
[ ] If you've fixed a bug or added code that should be tested, add tests!

[ ] If you've added a new tool - have you followed the pipeline conventions in the contribution docs
[ ] If necessary, also make a PR on the nf-core/viralrecon branch on the nf-core/test-datasets repository.

[ ] Make sure your code lints (nf-core lint).
[ ] Ensure the test suite passes (nextflow run . -profile test,docker --outdir <OUTDIR>).
[ ] Usage Documentation in docs/usage.md is updated.
[ ] Output Documentation in docs/output.md is updated.
[x] CHANGELOG.md is updated.
[ ] README.md is updated (including new tool citations and authors/contributors).

Curious why one check is reported here as not completed yet but the action run summary here looks ok
https://github.com/nf-core/viralrecon/actions/runs/2225674949

Don't worry. I will fix these in an upcoming PR.


Status line looks clipped

On Kindle, probably a CSS thing

No idea why I thought so. It works fine


Adds the traditional BPMF mode

The PR adds another fcitx5 input method that supports traditional BPMF input mode.

It simply uses another language model.
The code for selecting candidates is modified.
It conflicts with #66

兩組 icon 的 padding 似乎不太一樣...


delete_tweet.py provides an authorization link that doesn't return the authorization PIN

Problem:
"delete_tweet.py" provides an authorization link that doesn't return the authorization PIN.
I do refer to the following block in the log after running the script:
...
Please go here and authorize: https://api.twitter.com/oauth/authorize?oauth_token=<token>
Paste the PIN here: <pin>
...

Solution:
As for "create_tweet.py", replacing the following line:
request_token_url = "https://api.twitter.com/oauth/request_token"
with the following:
request_token_url = "https://api.twitter.com/oauth/request_token?oauth_callback=oob&x_auth_access_type=write"
to fix the issue.
Please update the file in the repository accordingly.

 Issue still persists. I thought oath_callback=oob was supposed to be the default?

 Issue still persists. I thought oath_callback=oob was supposed to be the default?

 Issue still persists. I thought oath_callback=oob was supposed to be the default?

 Issue still persists. I thought oath_callback=oob was supposed to be the default?

@mowsie2k You are welcome! ☺


Will SFZero support keyswitches?

I just attempted to test keyswitches, and none of the selector keys have any effect.
So I have to assume this hasn't been implemented. Are there any plans to do so?
(The quandary that I'm in is that sfizz doesn't does support switches but doesn't save the instance's state correctly. So that's unusable. SFZero built into Carla does restore its state correctly but is missing features from the instrument.)

No plans to implement that, sorry.  This is the first I've heard of sfizz, looks promising, hopefully they'll fix that bug.

No plans to implement that, sorry.  This is the first I've heard of sfizz, looks promising, hopefully they'll fix that bug.

Ok, will close this issue.
The state of sample players in Linux is... unfortunate 😆 but if that's where it is, then I have to just go with it for now.

Ok, will close this issue.
The state of sample players in Linux is... unfortunate 😆 but if that's where it is, then I have to just go with it for now.


Fix csv unicode

tested in local, fixes #1

using default docker-compose.yml generates MySQL error:
InternalError: (pymysql.err.InternalError) (1267, u"Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation '='") [SQL: u'SELECT teams.id AS teams_id, teams.name AS teams_name, teams.email AS teams_email, teams.password AS teams_password, teams.website AS teams_website, teams.affiliation AS teams_affiliation, teams.country AS teams_country, teams.bracket AS teams_bracket, teams.banned AS teams_banned, teams.verified AS teams_verified, teams.`admin` AS teams_admin, teams.joined AS teams_joined, name \nFROM teams \nWHERE teams.name = %(name_1)s \n LIMIT %(param_1)s'] [parameters: {u'name_1': u"(\u0e07'\u0300-'\u0301)\u0e07", u'param_1': 1}]

Can conirm this is caused by default encoding of MySQL is not UTF-8, solved by specifying mysql cnf

Seems like, this issue can be fixed by changing name = team[0] to name = team[0].decode('utf-8'). So, we don't need to add dependency to additional library (unicodecsv).
Can you please try my suggestion and confirm that can fix unicode issue for your case?

Confirmed, will revise the PR soon

Oops, I just see your message. I already push my commits for  decode('utf-8') trick.

Yup, that's ok, thanks for the plugin


[1.13] Allow sync_file_range2 on supported architectures.

Allow sync_file_range2 on supported architectures - this syscall is a variant due to alignment considerations on some architectures.
Signed-off-by: Gabriel Linder<EMAIL_ADDRESS>cherry pick of #30971
cc @vieux

LGTM


Added option to disable structLogs for debug_trace* rpc methods.

Description
The easiest reliable way to get return data of a transaction is debug_traceTransaction rpc, but it comes with huge structLogs data, which uses a lot of network traffic.
This is a simple solution for that: Just add an option to disable it.
Changes include

[ ] Bugfix (non-breaking change that solves an issue)
[ ] Hotfix (change that solves an urgent issue, and requires immediate attention)
[x] New feature (non-breaking change that adds functionality)
[ ] Breaking change (change that is not backwards-compatible and/or changes current functionality)

Checklist

[ ] I have assigned this PR to myself
[ ] I have added at least 1 reviewer
[ ] I have added the relevant labels
[ ] I have updated the official documentation
[ ] I have added sufficient documentation in code

Testing

[x] I have tested this code with the official test suite
[x] I have tested this code manually

Manual tests

Start the chain
Make a transaction
Call trace_debugTransaction with disableLogs set to true and then false.
Check that structLogs field is filled only when disableLogs is set to false.

Additional comments
I removed some test code lines that skips certain test suites. I don't know exactly why they have been made skipped originally, but they seems to work well now.

so we don't have half of them be EnableXYZ and the other half DisableXYZ

@ohijiho I agree entirely with @dusan-maksimovic here. Also then it makes more sense to expose the EnableMemory, EnableStorage, and EnableStack fields, and no need to disable struct logs in general. WDYT?

so we don't have half of them be EnableXYZ and the other half DisableXYZ

@ohijiho I agree entirely with @dusan-maksimovic here. Also then it makes more sense to expose the EnableMemory, EnableStorage, and EnableStack fields, and no need to have DisableStructLogs in general. WDYT?

Then, structLogs is disabled by default and enabled when one of memory, storage or stack is enabled? If that's the case, the config will be restricted so that there's no option to enable only the structLogs.
FYI, the main purpose of this PR is adding an option to entirely disable the structLogs, which is different from disabling all three extra informations.


[RemoteMirror] Update interop to handle 4.2 libraries.

The Remote Mirror interop header now accepts an arbitrary number of remote mirror libraries so that it can have 4.1, 4.2, and 5.0 loaded side by side.
rdar://problem/45808282

@swift-ci please test

Build failed
Swift Test OS X Platform
Git Sha - a83bea8fef4c2a6594f7811bb2e721e97bd23dee

@swift-ci please test

@swift-ci

@swift-ci please smoke test and merge

@swift-ci please smoke test and merge

Sorry about the disturbance, if I'm not mistaken the script test.py refers to the source file test.swift
(it looks like the old files test4.swift, test5.swift were removed in https://github.com/apple/swift/commit/47be50cccc6fcfd0c5274185f28d75ea8eae026c#diff-fec5f6f30e172e9e11d336da7526c693 ), but I don't see test.swift (even on the master branch) anywhere, has it been committed / removed separately for some reason or maybe I'm missing something ?

Good catch! I apparently just missed adding the file to git. Fortunately I still have it locally, so I was able to add it in. Here's the PR with it: https://github.com/apple/swift/pull/23556
Thank you for pointing this out.


Latest QGC Fixed Wing Landing format will not parse using MAVSDK mission import

The latest QGroundControl (QGC) version (I’m currently running v4.2.3) has a fixed wing landing “sequence” or “syntax” that is not recognized by the MAVSDK parsing routine (I believe MAVSDK is not up to date on the latest QGC landing “syntax”). This is evidenced by the fact that an unedited working QGC mission exported to “.plan” format will not re-import using the MAVSDK “mission_import.py” script in the MAVSDK examples due to a parsing error. I can, however, get around this by manually creating MAV_CMD_DO_LAND_START & MAV_CMD_NAV_LAND mission items (essentially defining a landing as per older versions of QGC).

Thanks for the note. Contributions are always welcome :wink:.
https://github.com/mavlink/MAVSDK/blob/main/src/mavsdk/plugins/mission_raw/mission_import.cpp


feat: implement non-resumable parallel uploads

This is a part of #2951.
This is the raw API on which uploading files will be built.

This change is

I dismissed my own review because I should not be blocking things right now.


Typo correction

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs/consume-packages/Configuring-NuGet-Behavior.md
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


Oversized sprites not displaying correctly in tween renderer

          Sure, here's a test program:

https://puzzlescriptnext.polyomino.com/editor.html?hack=633749977f2bf70cd1feb14aa99d759b
This is what I see in my local branch with tweening enabled:

Here's the PuzzleScript Next site with tweening enabled:

Originally posted by @IrregularHex in https://github.com/david-pfx/PuzzleScriptNext/issues/68#issuecomment-2480400032

And this is the commit that fixes it: https://github.com/IrregularHex/PuzzleScriptNext-testing/commit/7613699f601b3e695c5de89e1940a14ddd1e3773

Accepted. This is a very smooth patch, and I'm particularly happy to see the use of getDrawPos(), which brings in other good stuff (I think).
Needs further testing, but I think the render order will still not match the main render loop.

@IrregularHex Note the new issue.

Done. See also #129, #68.


Merge changes from jon-export-v2 branch of original cli and release new module

Currently, the V2 CLI has a dependency on a branch of the V1 CLI. That needs to be surfaced into an npm release.
For now the workaround is to:
// Clone the CLI if you haven't already, outside the v2-cli repo
git clone git@github.com:tessel/cli.git
// Checkout the relevant branch
git checkout jon-export-v2
// Make this repo linkable
npm link --local

// Within the v2-cli repo, install all deps
npm install
// Delete the tessel cli module downloaded from npm
rm -rf node_modules/tessel
// Link it to the checked out branch
npm link tessel

Fixed with https://github.com/tessel/t2-cli/pull/36.


[WIP] only build in trigger phrase with test ceph comment

test ceph

test ceph

test ceph

test ceph

test ceph

test ceph

test ceph

test ceph


Flickering black rectangles on materials with alpha scissor [Intel Haswell graphics]

Godot version:
3.2.3, GLES3
OS/device including version:
2015 Apple Macbook Pro
Ubuntu 16.04 with Mesa 18.0.5 driver
Issue description:
On my laptop, which has an Intel Haswell Mobile graphics chip, materials with alpha scissor enabled appear to have flickering black boxes over them. The flickering black boxes appear to glow.
Performance is also really bad but that appears to have already been reported in #9725.

Steps to reproduce:

Use a device with an Intel Haswell Mobile graphics chip.
Create a project using the GLES3 backend.
Create a scene with a camera pointing at either a Sprite3D or a MeshInstance with a SpatialMaterial that has transparency and alpha scissor enabled.
Optionally, give the camera an Environment that enables glow. You'll see the black rectangles without this, but they won't glow.
Or just run the Main.tscn scene in the attached reproducer.

Minimal reproduction project:
haswell-glow-bug.zip

I see you're displaying the FPS in the window title. Doing this alone can decrease performance significantly as the window title will change very often, which X11 doesn't like.
I recommend using a Label to display the FPS instead.

I see you're displaying the FPS in the window title. Doing this alone can decrease performance significantly as the window title will change very often, which X11 doesn't like.
I recommend using a Label to display the FPS instead.

Thanks for the tips! Much appreciated.
Just tried Windows 10 on the same hardware, and it's unaffected by the flickering black rectangle bug.

Thanks for the tips! Much appreciated.
Just tried Windows 10 on the same hardware, and it's unaffected by the flickering black rectangle bug.

Which Haswell IGP is it exactly? See GPUs listed on https://en.m.wikipedia.org/wiki/Haswell_(microarchitecture)
I've been using Godot with an Ivy Bridge HD 4000 in the past with Mesa without major issues, but this might have regressed. I'll dig up the old machine to try again.
It might be worth testing olwith newer Mesa too as there's been tons of fixes since the version in Ubuntu 16.04.

Which Haswell IGP is it exactly? See GPUs listed on https://en.m.wikipedia.org/wiki/Haswell_(microarchitecture)
I've been using Godot with an Ivy Bridge HD 4000 in the past with Mesa without major issues, but this might have regressed. I'll dig up the old machine to try again.
It might be worth testing olwith newer Mesa too as there's been tons of fixes since the version in Ubuntu 16.04.

It's an Intel Iris Pro Graphics 5200.

It's an Intel Iris Pro Graphics 5200.

Might be worth testing with 3.2.2-stable to see if this glitch might have been exposed by changing Sprite3D from ImmediateGeometry to MeshInstance. CC @clayjohn

Finally dug up my old laptop, I can't reproduce the bug on Mageia 7 with Mesa 19.1.0 running on Intel HD Graphics 4000 (Ivy Bridge).
I'd suggest testing with a newer Mesa version to see if it has been fixed since 18.0.5.

I upgraded to a newer Ubuntu on my old laptop and verified that Mesa 20.0.8 doesn't have the black rectangles (and the performance is waaay better too).
That's with:

The same hardware
The same engine (although a different build of the game but that should make no difference)
Ubuntu 18.04 instead of Ubuntu 16.04
Mesa 20.0.8 instead of 18.0.5

It's possible that something else in the OS upgrade affected it, but it seems unlikely.

Sounds like this was indeed a Mesa driver bug which has been fixed between 18.0.5 and 20.0.8. The overall reliability and performance of Mesa has increased a lot in recent years.
I guess we can close this as not a Godot bug / not fixable (or worth fixing)? The percentage of Linux gamers still on Ubuntu 16.04 is likely very low. More concerning might be users on Debian 10 which is the current stable version and also with Mesa 18.3.6... but Debian and Linux distros in general need to provide backports of recent Mesa versions if they want their users to have a decent gaming experience.

Yes it makes sense to close it IMO. Thanks!


[topgen] Fix enum type warnings

enum for top package did not define any type. Change them to int unsigned.

this lgtm. Just FYI, if ever we need to pack these into arrays, we probably want to change them to logic. I recently debugged another warning where these were ints and then used for array packing.. the bit widths got all out of wack (I guess we could cast it too..).

this lgtm. Just FYI, if ever we need to pack these into arrays, we probably want to change them to logic. I recently debugged another warning where these were ints and then used for array packing.. the bit widths got all out of wack (I guess we could cast it too..).

Yeah. I agree. int or int unsigned is 32bit data. Need to convert it into logic or logic [W-1:0]. If this enum is used as index for arrays, then int should be fine.

I think we can merge this as it only changes the type of enum. WDYT @tjaychen


Feature request: Add support for --version on command line

Many command line tools provide a version flag, usually with -v or --version. Could dirk be updated to support this as well?

Added via 4a00eb078e9d2d11ed917f915291a17d966a83e5


All Channels Except Dizque Channels Disappear From Plex

I'm unsure if this is an issue with Plex, Dizque, or xTeVe but I will post here as well in case someone has come across a working solution. I am not the author of this reddit post but my issue is IDENTICAL.
https://www.reddit.com/r/PleX/comments/j0wsm0/live_tvdvr_channels_disappear_after_a_period_of/gr6c0tn/?newUser=true
From what others are saying in that thread, it appears Dizque may be causing this issue. The workaround to add dummy channels is going to take me a while since I have 228 channels in my xTeVe m3u, so I wanted to make sure I wasn't missing something before I proceed. Thanks.

Did you try disabling that thing about sending guide updates?

Did you try disabling that thing about sending guide updates?

I'm not seeing a setting like that I  Dizque or xTeVe.  There's something about refreshing the guide in the Plex DVR settings.

In dizqueTV's plex server settings.

In dizqueTV's plex server settings.

I tried disabling guide updates but it still failed. Once I disabled channel updates it stopped failing but I had no guide for the Dizque channels. I re-enabled guide updates and now I have EPG and a working DVR.
I'm curious... what exactly do these two settings do? Why would Plex need guide updates from Dizque if you have the same xmltv info mapped to those channels in xTeVe, and that xml mapped in Plex?

I don't really know, those checkboxes come from pseudotv's code.

@dbowles1975 per your first comment about creating dummy channels with flex content only, that is exactly what I have done and that does solve the problem.  not ideal, because every time i want to assign a new channel number in Xteve I need to make sure that channel exists in DizqueTV.  But... it works and I haven't found another way to solve the issue.  But if you do find another solution, please post here as i would be interested to try.

@dbowles1975 per your first comment about creating dummy channels with flex content only, that is exactly what I have done and that does solve the problem. not ideal, because every time i want to assign a new channel number in Xteve I need to make sure that channel exists in DizqueTV. But... it works and I haven't found another way to solve the issue. But if you do find another solution, please post here as i would be interested to try.

If you uncheck the "send channel updates" option for your Plex server the issue goes away.

@dbowles1975 thanks, ill give that a try!


Interpret NOMEN status

We want to allow and potentially recommend NOMEN status values to be used for the coldp:Name.status field.
In the first stage these then end up as verbatim data and the Normalizer will interpret the simplified Name.status using the NomStatParser which needs to be extended to cover all NOMEN values.
In a second phase we could consider to use the NOMEN values also in the interpreted view if there is enough take up.

@gdower @mjy could you provide me with a table of all nomen statuses and if you can already map them to the Clearinghouse values?
Would we expect full URIs or also just a simple name?

NOMEN is here: https://github.com/SpeciesFileGroup/nomen, in nomen.owl.
There are two things there: object properties, i.e. relationships between
names (technically between monomials), and classes, i.e. status on names
with no further explanation.
I can see about using the new ROBOT tool to dump TSV for you.
I believe @proceps did this mapping exercise?
On Tue, May 12, 2020 at 9:28 AM Markus Döring<EMAIL_ADDRESS>wrote:

@gdower https://github.com/gdower @mjy https://github.com/mjy could
you provide me with a table of all nomen statuses
https://github.com/SpeciesFileGroup/nomen and if you can already map
them to the Clearinghouse values
http://api.catalogue.life/vocab/nomstatus?
Would we expect full URIs or also just a simple name?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/CatalogueOfLife/backend/issues/716#issuecomment-627380859,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAAFQSAESCXU6VRQ7D3LMNTRRFMJFANCNFSM4M636JBA
.

I would expect only NOMEN classes as a name status, correct?

Yes.  You are not asserting a relationship between two names in this case, only one.  I spammed some quick and dirty explanation on the README.md here.

https://github.com/CatalogueOfLife/backend/commit/9c2297f58c0baf39f23837eb8b65fd3feab91c31

The Clearinghouse should now accept NOMEN class values for any name status given in ColDP, ACEF or DwC in the corresponding fields.
The parser accepts the full URI http://purl.obolibrary.org/obo/NOMEN_0000228 as well as the simple, local name NOMEN_0000228 and even NOMEN_228

Mapping is basically here:
https://github.com/CatalogueOfLife/backend/blob/master/parser/src/main/java/life/catalogue/parser/NomenOntology.java#L67
apply does apply to all subclasses too

Very cool @mdoering thanks for taking the time to try this out.

I even managed to read it straight from owl. So we can update it easily when Nomen changes

Nice. Did you use this?  https://github.com/owlcs/owlapi

I was thinking about it, but then I realized I need only very little from the ontology and as its serialized to xml/rdf I just wrote a simple xml parser for that which was simple and does not pull in more dependencies.


Consider scale and translation in apply_tf

This addresses issue #80
Note: Affine transformations are not inherently commutative so I'm not sure this is universally correct. It seems to work but maybe you know a more elegant solution?
Unfortunately, I didn't quite remember how to do the auto-formatting without having pre-commit...
Also, I'd be very grateful for any feedback on how well I adhered to best-practices in git (correct branch, etc...). I tried but it's all a bit new for me.
I did not change anything in the tests.

Hey!
You should generally make a new branch from main and submit a PR from that branch. This is because otherwise your main branch diverges from the one in this project, which makes it harder to update in the future.
It's easy to go back though:
git reset HEAD~  # <-- point the main branch to the commit before this one
git switch --create apply-tf-complete  # <-- make a new branch with this name
git commit -a -m "take into account other layer transforms"  # <-- make your commit again, now on correct branch
git push origin --set-upstream apply-tf-complete  # <-- push new branch to your fork

Then you can (and should) make a new PR from that branch.
I wrote a git tutorial many years ago — you might find it useful. https://jni.github.io/git-tutorial
As to the rotations etc, you're right, it's tricky, which is why I didn't immediately make a PR to fix things. 😅 But you shouldn't do it the way you've done it, instead we have a utility:
from napari.utils.transforms import CompositeAffine

that will take all the initial transforms and apply them for you in the right order, and make a matrix. However, I'm not 100% sure that I want to use it directly, because that means importing from napari. Maybe we can just copy the relevant code over.
PS: Also, after you make the PR you can fix your main branch by doing:
git switch main
git pull upstream  # <-- in case I made some changes
git push origin --force-with-lease  # overwrite the remote branch, but only if someone else hasn't changed it since the last time you pushed; not relevant here but good habit compared with --force

I'll close this one because it's going to get borked anyway when you fix your main branch. 😅

(And of course I'm happy to chat live if you encounter issues with git!)

Hey Juan,
Thanks for the reply!

git reset HEAD~  # <-- point the main branch to the commit before this one
git switch --create apply-tf-complete  # <-- make a new branch with this name
git commit -a -m "take into account other layer transforms"  # <-- make your commit again, now on correct branch
git push origin --set-upstream apply-tf-complete  # <-- push new branch to your fork

I fixed this but I didn't get around to look into properly applying the transformations yet. I'll make a new PR once I've done some work on that (probably towards the end of this week).
And thanks for the infos on git! Really helpful :)


A select into a decimal model translates to CAST([v].[Value] AS decimal(18,2)) (only two decimals recieved)

The statement select( new{decimalValue = (decimal) doubleValue}) translates into  CAST([v].[Value] AS decimal(18,2)) resulting in rounding to 2 decimals. Is this really intenden?
Steps to reproduce
Create a model and corresponding database with float type on Value
public class Index
{
        public int Id { get; set; }
        public double Value { get; set; }
}

Call it as:
DbContext.Indexes.Select(t=> new{decimalValue = (decimal)t.Value}).First();

This will give you a decimal value with maximum 2 decimals.
Further technical details
EF Core version: 3.0, and 3.1 preview
Database provider: Microsoft.EntityFrameworkCore.SqlServer
Target framework: NET Core 3.0
Operating system:
IDE: Visual Studio 2019 16.3

@smitpatel I assume this is because we use the default type mapping for decimal?

Yes, that is correct.

@smitpatel Are there any cases when that default type mapping is actual relevant. Or is the solution to actually change that default mapping. I cannot come up with any cases.

@KaptenJon The default type mapping is used because the use of decimal here is not associated with any decimal column in the database for which a different type mapping might be used. Implementation of #4978 would allow this to be changed.

@ajcvickers I understnand, but shouldent the default sql decimal type be something that correspond with .net decimal type.

@KaptenJon See #6965

Note from triage: duplicate of #4978.
Workaround is to force the conversion on the client. For example:
var fromStore = DbContext.Indexes.Select(t=> new{ t.Value }).First();
var converted = new { value = (decimal)fromStore.Value };


Improve the sideline camera

Positioning should be improved to show more of the field and the players

Done.


Getters returning null after updating state

Reproduction
Initialising and empty state then adding data but the getters still returns null after the state has been populated
Steps to reproduce the behavior
export const useLogin = defineStore('login_info', {
  state: () => ({

  } as any),
  getters: {
    getUserId: (state) => state.userId
  },
  actions: {
    setUser (params: any) {
      this.$state = {
        ...params
      }
    }
  },
  persist: true
})

setup () {
  const login = useLogin()
  function addUser () {
    login.setUser({
      name: 'fdd',
      userId: 1
    })
  }
  console.log(login.$state.userId)
  console.log(login.getUserId)
  const user = computed(() => login.getUserId)
  console.log(user.value)
  addUser()
  return {
    login,
    user
  }
}

Expected behavior
login.$state.userId returns the state
login.getUserId returns the state
const user = computed(() => login.getUserId) returns the state
Actual behavior
login.$state.userId returns the state
login.getUserId returns null
const user = computed(() => login.getUserId) returns null
A clear and concise description of what actually happens.
Additional information
export const useLogin = defineStore('login_info', {
  state: () => ({
    user: {}
  } as any),
  getters: {
    getUserId: (state) => state.user.userId || null
  },
  actions: {
    setUser (params: any) {
      this.$state.user = {
        ...params
      }
    }
  },
  persist: true
})

if i do this
Expected behavior
login.$state.userId returns the state
login.getUserId returns the state
const user = computed(() => login.getUserId) returns the state
Actual behavior
login.$state.userId returns the state
login.getUserId returns the state
const user = computed(() => login.getUserId) returns the state
works correctly what could be the problem

You need to set the initial state to null or undefined: state: () => ({ userId: null })

You need to set the initial state to null or undefined: state: () => ({ userId: null })

The issue has not be resolved you cant just close it
The reason why the state is empty is because theres so much data coming from the api and i need an empty state first userId is just part of the response

If you have a response coming from the server and it can have multiple properties that are unknow at build time, you can set a property on the object instead of replacing the whole $state:
defineStore('id', {
  state: () => ({ user: null }),
  actions: {
    setUser(user) {
      this.user = user
    }
  }
})

It seems like GitHub is bugging when transforming this into discussion but still locking it 🥲


[Plugin] Jira plugin

Summary
A plugin to visualize Jira data such as tickets open, closed , blocked , sprint progress etc
Project website
https://www.atlassian.com/software/jira
Context
Giving teams the visibility into how they are performing when it comes to feature delivery and tying that in with any service data can be pretty valuable.

I'm happy to work on this and happy to work with anyone else if they are interested

Nice! I’ve assigned you. Looking forward to seeing this!

As feedback into this, a few ideas:

the most simple alignment between the plugin and a component, being an annotation to align them to a single project, i.e.,annotations:
  jira/projectKey: MYPROJ

we have some squads who use a single Jira project for all of their work, but also some who manage multiple products and use components per product.  Ideally, if we were to add annotations into a catalog-info.yaml, it would be great to both identify a Jira projectKey, but potentially also identify a component?annotations:
  jira/projectKey: MYPROJ
  jira/component: "Product X"

a sprint health dashboard similar to the built in Jira Dashboard system would be ideal!

support for dedicated Atlassian Jira Data Center separate for Atlassian Jira Cloud (the SaaS solution), much in the same way as some of the plugins support GitHub.com vs. GitHub Enterprise with custom URLsintegrations:
  jira:
    host: jira.mycompany.com
    OAuth-Pem: keyname.pem

Additional possible feature:
a project info widget that shows:

the Jira icon selected for this project, if this is possible (it is customizable)
Project Name linked to open the project in Jira
Project Lead
Current active sprint(s)
List of roles and number of people per role (this may be a stretch

One interesting discussion we've been having is aligning squad sizing. We've had some people say they have a squad, and we've discovered a project may have 50 people listed as developers in it, and in a given sprint, they may have 25 people assigned to stories, even if they may turn around and SAY they have only a 9 person squad. So having this info bubbled up by Backstage may help align the behaviors to work more autonomously and drive the squads to want to fix it themselves (in much the same way that the Cost Insights plugins isn't the top-down approach, but bottom-up).

We have started working on this by the way. I will drop a progress update and some screenshots soon. Keep the ideas coming please!

I would be HAPPY to be your beta tester, @dtuite and happy to contribute.

@dtuite awesome ! I will assign this to you instead.

Thinking this issue is good to close seeing as it's developed in early stages, published into the Marketplace, and I'm using it as a starting point for more work happily. :) well done roadie.io team!

Clad we could help @adamdmharvey


Convert return from Rust into JSON valid to schema

Either Rust directly, or more likely from the gRPC return, we need to convert the release values and analysis graph into a JSON output that validates against the schema.

The relevant location for this is here:

Blocked on #81. Otherwise resolved.


added missing prometheus port configuration

The coredns service is already configured to expose port 9153.
All that's missing is the prometheus line in the coredns configmap and then metrics are scraped automatically when prometheus is installed.

Thanks !


Set both minting extrinsics to be free

@boymaas We'll need to upgrade the testnet machines once this is merged.


Add advanced follow management

This Draft Pull request brings a follow request management. It allows for manual accepting and rejecting a follow request and sends the proper ActivityPub response to the followers inbox.
It introduces a new custom post type ap_follow_request which is used to store follow requests. Each follow request post is the child post of the follower post.
The follower table in the admin page (currently only hardcoded for the application actor) is now a join between the information saved in the post types ap_follow_request and ap_follower.
Fixes

Currently if a user deletes a follower, this follower is deleted for all other WordPress ActivityPub actors too.
The follow request is not saved, so no Accept or Reject Activity can be sent later.

Other information:

[ ] Have you written new tests for your changes, if applicable?
Not yet. First I would like to discuss this proposal (next year, after the holidays of course). Also this is still a draft and proof of concept. There are many parts where things could and should be refactored as well as improved.

No Testing instructions, but a short video what can be done now
Bildschirmaufzeichnung vom 2023-12-25, 22-31-08.webm

This is a lot of overhead to simply have a state like "pending" or "to approve"! If the current db follower scheme is not possible to allow this easily, we maybe have to rethink it then?

If this is a completely different thing maybe we should handle it completely different? Maybe as a "server follow" or "server connection"?

The change does not respect the user, does it?
So if there is a Mastodon user trying to follow two blog users, then this change will only send an Accept from the user that approves first and then the Follower shows up as Accepted for all blog users?!?

I fixed a small typo, which may have lead to confusion, if anyone should have tested it.

If this is a completely different thing maybe we should handle it completely different? Maybe as a "server follow" or "server connection"?

I don't think it's any different. The main difference is that if we allow actors (something that can be followed within WordPress) to manually approve followers ( as:manuallyApprovesFollowers) then the follow process must be asynchronous.  Therefore we need to store the follow request somewhere. Also, if an actor inside WordPress decides later not to allow a certain follower, the follower relationship should not just be deleted on the WordPress side, but the original follow request should be rejected (or the accept should be undone - still unclear to me), anyway the instance of the follower should be informed.

But still: If the current db follower scheme does allow this easily, feel free to rethink the structure completely (but I would still avoid custom tables).

I already have further ideas in mind. You were quite right with "at first it felt like complete copy of the follower structure".
Maybe it's due to the fact that the Followers are being stored as Followers not as just actors with for example the post type being called ap_actors rather than ap_followers. Also note that now there are some other functinos in the follower class that are not needed anymore, I just did not have time yet to clear up things, the state is still more a "proof of conept".
Further I tried to have two things in mind:

Good integration of the Friends plugin (@akirk)
The advanced management of actors (https://github.com/Automattic/wordpress-activitypub/discussions/547).

I believe that I between the lines I have expressed my idea, for the ActivityPub actors within WordPress to be decoupled from the WordPress user table.

I don't think it's any different. The main difference is that if we allow actors (something that can be followed within WordPress) to manually approve followers ( as:manuallyApprovesFollowers) then the follow process must be asynchronous.

I do not speak about the approval process in general. You began with the PR because we need an approval process at the application level for Mobilizon and maybe Peertube. This process does not have to be mixed up with the classical follow process. The application user should not be followed by normal users, and it should not follow normal users. Therefore, the question is: Does it make sense to have a different scheme for it if there is no overlap anyway?

Maybe it's due to the fact that the Followers are being stored as Followers not as just actors with for example the post type being called ap_actors rather than ap_followers.

It's not about the naming (we can easily change that later on); it's the persistence that gets hackier and hackier. Inspired by the followers/following model of the friends plugin, I started with a custom taxonomy, which worked perfectly. Sadly, we had issues with that on WordPress.com, so I changed it to a custom post type. But it always felt like a compromise, and it's getting worse the more we try to add to that construct.

I believe that between the lines I have expressed my idea, for the ActivityPub actors within WordPress to be decoupled from the WordPress user table. So if the followers should in the future be store with post type 'ap_actor' the followed WordPress actors could also just stored with this post type.

If we try to use one custom post type for Followers and Followings, and the same for the Application, we have to work with sub-posts and metas even more, making everything even more complex and slow!

I am still not sure what to think about the sub-post, but regardless of that, I don't think it should be a different model or collection. It "only" adds a state to the follow process, so we should handle that in the follower class, in my opinion (even if it's technically a different post type).

I am still not sure about the sub-post solution (or the whole follower structure, like I described above), but regardless of that, I don't think it should be a different model or collection. It "only" adds a state to the follow process, so we should try to handle that in the follower class, in my opinion (even if it's technically a different post type).

I am open for discussions! :) I just had to decide for some structure to learn about everything involved in the follow handling process. I also thought about using terms/taxonomies or heavily use the post_meta. I should write those thoughts down. Please bear with me, I'm not yet an expert on the WordPress database structure and I can often only guess at the impact on performance. I am grateful to receive tips and will gladly change my code.

Does it make sense to have a different scheme for it if there is no overlap anyway?

If there are enough/any technical differences then I would answer yes. When receiving a follow I think there aren't any yet. Maybe one could think of only automatically rejecting all non- Application actors, or make that the actor is listed in the nodeinfo a condition too for even achieving the state where the WordPress admins can have an Accept option? But again this is IMHO just an extra condition in a handler, and not a real different process. Do you have other differences in mind?
About custom tables: People say to avoid them whenever you can. I basically just stick to that advise. I didn't reached the level of WordPress expertise to decide when using custom tables actually could make sense.

What about working with the post state (pending, approved, ...) instead of a new custom post type? I would also love to see the model and controller of the request merged into the follower structure if that's possible. To simplify things for implementers.
What do you think?

Or maybe we could simply work with metas, like activitypub_pending_user_id and rename it to activitypub_user_id when approved?

What about working with the post state (pending, approved, ...) instead of a new custom post type? I would also love to see the model and controller of the request merged into the follower structure (model & collection) if that's possible. To simplify things for implementers.

The main problem is that there can be multiple pending/approved states for each follower. For now I separated the logic from adding a follower and adding the follow relationship between the follower the targets. Now it should also be possible to save the follow requests in the post_meta for the follower. The information that has to be saved is the follow id (which is generated by the other instance and must not be lost) and the status. One could either user named meta field keys or a single meta field with serialized json. This would result in slow queries of course, but these queries would only be done when the user takes action in the WordPress admin section

Or maybe we could simply work with metas, like activitypub_pending_user_id and rename it to activitypub_user_id when approved?

Here we would in both cases have to save the id of the follow object somewhere related. Any ideas? Thats why I am struggling for so long :/

Because we had a lot of discussions and problems with taxonomies on WordPress.com I would avoid them for now. My problem is with the sub-type is, that it adds a lot of complexity that could break things.
Can you explain the current idea a bit more in detail? What if one mastodon user is trying to follow two WordPress users? We create a follower, but how many requests and how many user_id metas?

Here we would in both cases have to save the id of the follow object somewhere related. Any ideas? Thats why I am struggling for so long :/

My idea was, to add a pending follower as meta activitypub_pending_user_id to the follower object. And if the user accepts we rename the meta to activitypub_user_id?!? Then we would know if it's pending or not through the relation between the follower and the user.

Because we had a lot of discussions and problems with taxonomies on WordPress.com I would avoid them for now. My problem is with the sub-type is, that it adds a lot of complexity that could break things.

O.K.!

Can you explain the current idea a bit more in detail? What if one mastodon user is trying to follow two WordPress users? We create a follower, but how many requests and how many user_id metas?

When MastodonUser1 wants to follow WordPressUser1 the MastodonUser1 gets saved as a post with post type ap_follower if a post with the same guid does not exist yet. The guid reflects the Actor-id of the MastodonUser (it'S URL).

Now the id of the Follow request has to be stored somewhere (this is still to be discussed). We need the id in case we want to do async Accept or Reject responses.

If WordPressUser1 does not manually approve followers the follow relationship is added instantly via a postmeta for the Follower (in the post table as post type 'ap_follower', just like before this PR). Then the Accept response is sent.

When MastodonUser1 then sends a follow request to WordPressUser2 user nothing happens at step 1 cause the Follower is already known to WordPress. In step 2 we have a different Follow request id that also has a different target. If WordPressUser2 has also does not manually approve followers the follow relationship is added via an additional entry in the postmeta table, but the same key ('activitypub_user_id') but a different value: the user id of WordPressUser2.
My intuition would also have been to store the followers follow relationships of a WordPress user in the usermeta table: save an array of the custom post type ids of the followers. This is because most of the time we know about the user first and then want get its followers, not the other way round: get a follower and tell me all target users it has accepted follow relationships.
Which type of query and when?
When dispatching posts for a WordPress user and the follow relationships haven't changed the cached list of inboxes is used.
If the follow relationship have changed since the last dispatch, first the follow relationships have to be looked up and then with that list a distinct list of inboxes can be generated again.
If the user looks into his admin menu to browse his followers the query is not for the follow relationships, but for all the follow requests that target this WordPress user. I wouldn't mind if this query is rather slow, when the trade of is that the other queries are faster.

I started with storing all followers in one big user meta! I decided to have everything in the custom post and the post meta, to easily filter, sort and page the followers. If we add the ids to the user, we can't do that any more and have to use big lists of ids and query with IS IN.

This is the point were this solution seems not to be enough.

Mastodon1 tries to follow Blog1 (manual approve enabled). The Follower Mastodon1 will be created with the post meta activitypub_pending_user_id with the id of Blog1.
Masto1 tries to follow Blog2 (manual approve enabled). Follower Mastodon1 already exists, so it only adds activitypub_pending_user_id with the id of Blog2.
Mastodon1 is following Blog3 (manual approve disabled). Follower Mastodon1 already exists, so it only adds activitypub_user_id (without pending prefix) with the id of Blog3.

So the current state of Mastodon1 is he follows 1 Blog and two are pending (waiting for approval).
If Blog2 decides to approve the request, we change the activitypub_pending_user_id with the id of Blog2 to activitypub_user_id.
Should be possible and easy to have queries based on the different types.
Still not voting for this beeing the best solution, just wanted to show that it works ☺
TBD.

Thanks for reading through all my thoughts. :bow:
Doing what you proposed would work, but for storing the ids of the Follow request (not of the Follower actor). I would need something else too. For example a meta key called activitypub_follow_ids which contain a serialized array like
array(
   '<some_follow_id>' => <target_wp_user_id>,
   ...
)

Or using a customized key like activitypub_follow_id_<user_id> which holds the id. Both approaches don't seem ideal to me.

It seems hard to explain it in text.
It should work without helper tables, because I simply replaced the Follow_Request object (you introduced) with a activitypub_pending_user_id post meta for the follower. Because it is a post meta it has the follower id by default and maps it to a blog user and the name tells you that it's a pending connection. Currently you have activitypub_user_id to map a follower to a user. My proposal is to add activitypub_pending_user_id for pending users.
Maybe we have to have another call ☺

It seems hard to explain it in text.
It should work without helper tables, because I simply replaced the Follow_Request object (you introduced) with a activitypub_pending_user_id post meta for the follower. Because it is a post meta it has the follower id by default and maps it to a blog user and the name tells you that it's a pending connection. Currently you have activitypub_user_id to map a follower to a user. My proposal is to add activitypub_pending_user_id for pending users.
Maybe we have to have another call ☺

We definitely will! :blush:  (...I thought I would do real holidays and take some time off but I working on this without pressure is quite relaxing too!)
Back to the topic: The ActivityPub id of the follower (actor of type Person, Groups, etc.) is different from the id of the ActivityPub follow request (activity of type Follow).

Ah, because of the follow (activity) id!?!

If we then realize that nobody uses it we would maybe have a solution, too.

One more idea: why not use that to start an inbox/outbox custom post type and use that to store and process the request?!?

One more idea: why not use that to start an inbox/outbox custom post type and use that to store and process the request?!?

At the moment I can't exactly assess what the benefits of this might be.

One more idea: why not use that to start an inbox/outbox custom post type and use that to store and process the request?!?

At the moment I can't exactly assess what the benefits of this might be.

I am working on that anyway, because with comments support, we can no longer query the posts table for the Outbox Collection. A persistent Outbox is also needed for C2S support in the future. The Inbox was planned as second step, because of the same reasons and to also support Activities that are not directly interpreted by the plugin itself.
So to not have things twice or more, maybe we could re-use the Inbox idea?

I am working on that anyway, because with comments support, we can no longer query the posts table for the Outbox Collection.

For reference (I try to explain a bit more, for everyone following this tread): The Outbox is a OrderedCollection which contains everything a user has published through ActivityPub (their maybe differences depending on the audience of an activity and who queries the outbox). Getting a full outbox in the future would require fetching all of an actor's comments from the wp_comments table and all of their public activitypub-enabled posts from the wp_posts table and joining them together in order. I wonder where the "persistent" condition is not possible. Is there a better place to discuss this at the moment?

A persistent Outbox is also needed for C2S support in the future.

Client-to-server support: Interesting, but almost nobody implemented that (see https://socialhub.activitypub.rocks/t/activitypub-client-to-server-faq/1941). The Mastodon API kind of became the used alternative.

More related to this topic: If we would indeed abstract the actors in a custom post type, we could store follower_ids as a postmeta on the followed actor not the other way round. I think that then we could also store the follow requests as a (single) postmeta, if you still have doubts about adding too many custom post types (though I don't know of any disadvantages using custom post types for such things).

It's not really the number of CPTs, but the resulting complexity. That's why I also voted for merging the request logic into the follower collection/model and to handle it as a state, even if it is a different db-scheme. This way it would be easier to change the db structure later on.
If we really see them as Activities that needs an answer instead, then I would prefer the inbox collection.
I am fine with changing the WordPress User structure. But I am not sure in which way!!! Either to have all users as Actors in a custom post type (that simplifies and unifies the handling of virtual users like the Application and the Blog User) or to create WP_Users also for the Application and Blog User that has a similar effect.
I am open to discussions. Maybe we should start them in the Discussion Board?

I am open to discuss all options. Maybe we should start them in the Discussion Board?

I created a board: https://github.com/Automattic/wordpress-activitypub/discussions/623. As this is an import task that affects a lot of future work, I would suggest to get as many help from others as we can get: the open source community and experts on WP_Queries at Automattic.

I am currently also preparing a pull request similar to this one with minimal changes to the codebase, but follow-management being restricted to the application actor.
Besides that I also started a poll to ask the community how important advanced follow management is for them: https://graz.social/@linos/111699325774324467
And I noticed: also the timestamp for a follow request is a nice thing to have, especially for the follower table.

@pfefferle Any new thoughts on this meanwhile? Now I could find some time to draft an easier version o this focusing on follow management solely for the application actor, which should always require approval I'd say. I would add an extra tab on the settings page and keep the interface similar. The follow request IDs I would then story as JSON-within the database, which is not good practise, but since the requests will be very very few and we can avoid introducing other ways of storing the data.

We are currently discussing our possibilities with different DB schemes. I will post an update as soon as we are sure about our options.

We are currently discussing our possibilities with different DB schemes. I will post an update as soon as we are sure about our options.

Great! Than I'll focus on other issues and will come back to this one, once I hear an update from you! :)


As a player , I want directional view to be controlled through Mouse #Fayaz

This feature has been already implemented


When an Id can't be resolved, render a 404, per the IIIF spec

Coverage increased (+0.02%) to 93.741% when pulling cc38989ca0a8738c1c54018008b8172f88f9c62e on 404_error into 689e52da2183661bfa76eef0172999489b936029 on master.


Change delay system

Instead of +1 +3 +5 for right answer use geometric progression (multiply by x each time), and maybe leave only 2 buttons (easy and hard)

#7 implemented.


Logo shared between frontend and filament - adapt tailwind config if use tailwind

Hi, Thanks for this starter :) I'm discovering Laravel and Filament, and I think it's a great start 👍
I wanted to change the logo on the filament side and discover that it was not picking up tailwind there and that's because the logo is in /resources/views/components/logo.blade.php which is not set in the "content" of tailwind.admin.js
You can fix the issue by just adding this line in the content of the tailwind.admin.js
 "./resources/**/*.blade.php"

but maybe it's worth to create a separate logo file in the filament view folder so we don't generate more class than needed for tailwind (eg the class use in the frontend but not in filament).

Hey, no problem!
Good catch. I hadn't ran into that since most of my logos end up being SVG with generic Tailwind classes that Filament conveniently already has compiled for me in most cases.
I'd say a standalone logo for Filament would be sane. I'm not entirely against having the Tailwind admin config pick up View Components (./resources/views/components/**/*.blade.php) but I do agree that in some cases it could be a little messy, especially if your frontend styling is extensive.
I'm open to opinions on what to do for filament-starter in particular out of the box.

Hey, no problem!
Good catch. I hadn't ran into that since most of my logos end up being SVG with generic Tailwind classes that Filament conveniently already has compiled for me in most cases.
I'd say a standalone logo for Filament would be sane. I'm not entirely against having the Tailwind admin config pick up View Components (./resources/views/components/**/*.blade.php) but I do agree that in some cases it could be a little messy, especially if your frontend styling is extensive.
I'm open to opinions on what to do for filament-starter in particular out of the box.

Mmm difficult to say what to do by default here :P
Many different solutions and all kind of easy to implement depending on the way you go.
Maybe just a comment / doc to say that the logo is shared between frontend / filament with the impact on tailwind and/or just add the full path to the logo component in tailwind.admin.js so we keep the "extra class" to a minimum.

I agree.
Let's just put the logo component under https://github.com/Log1x/filament-starter/blob/main/tailwind.admin.js#L10
Want to do a PR? If not, just let me know and I'll push something up.

You can do it :)


Create LICENSE

Storing license in a separate file makes it machine-readable and also easier to get the full text (in case there is no internet connection or creativecommons.org gets unavailable somehow).

Thanks, it was fast! :)


fix: correctly pass table with schema when using comment

fixes #939

@osdiab Would you like to do a first review with approval? 😊

That makes sense to me, to have literal basically behave idempotently,
though the mechanism would need to be constructed with a little care.
It seems that Postgres schema and table names can in fact have periods in
them. So if you had "schema.with.dots"."table.with.dots" then if you
stripped the quotes first, you'd end up with
"schema"."with.dots.table.with.dots" which isn't right. So if the
literal function is made to be aware of this aspect of Postgres, it
probably should handle detecting a schema first.
But that would also mean that if you actually passed in as a user, the
name 'my.table' and you didn't want my to be interpreted as a schema
but rather that this would be the table name, then the correct behavior
would be ambiguous. That said, this seems rare and it doesn't seem like it
would be a problem just to put in the docs that if you want to have periods
in your table name, you need to use the object syntax.
Sound good?
Omar
On Wed, May 01, 2024 at 5:59 PM, Shinigami @.***> wrote:

@.**** commented on this pull request.
In src/operations/tables/shared.ts
https://github.com/salsita/node-pg-migrate/pull/1139#discussion_r1586040907
:

@@ -383,7 +383,7 @@ export function parseConstraints(
comments.push(
makeComment(
CONSTRAINT ${name} ON,

       literal(tableName),

       literal(table),

Yes, an alternative (I did not wanted to go in this PR) would be to check
for potential quotes and a dot . and if there is some, then normalize it.
e.g. literal "just" takes a string, and so if e.g. there was already a
literal-processed value (literal(literal({ schema: "myschema", name:
"mytable" })) => literal("myschema"."mytable")) would currently result in
double-quoted ""myschema"."mytable"", which is obviously an error.
So instead the literal function itself could e.g. remove all quotes, and
if there is a dot, then use schema + name.
—
Reply to this email directly, view it on GitHub
https://github.com/salsita/node-pg-migrate/pull/1139#discussion_r1586040907,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAONU3Q5CDO2W7WDYAD4FYDZACVGHAVCNFSM6AAAAABHAQCOF2VHI2DSMVQWIX3LMV43YUDVNRWFEZLROVSXG5CSMV3GSZLXHMZDAMZTGI3DEMJWHE
.
You are receiving this because you were mentioned.Message ID:
@.***>

That makes sense to me, to have literal basically behave idempotently, though the mechanism would need to be constructed with a little care.
It seems that Postgres schema and table names can in fact have periods in them. So if you had "schema.with.dots"."table.with.dots" then if you stripped the quotes first, you'd end up with "schema"."with.dots.table.with.dots" which isn't right. So if the literal function is made to be aware of this aspect of Postgres, it probably should handle detecting a schema first.
But that would also mean that if you actually passed in as a user, the name 'my.table' and you didn't want my to be interpreted as a schema but rather that this would be the table name, then the correct behavior would be ambiguous. That said, this seems rare and it doesn't seem like it would be a problem just to put in the docs that if you want to have periods in your table name, you need to use the object syntax. Sound good?

😲 I did not know that dots . are possible in names.
Yeah in this case, I think it is not a good idea yet, because the implementation would be much more complex.
Instead it can be just solved by just passing the correct think to the literal function as we did in this PR.


NPSP Trigger Exception when calling merge from batch job

Have the latest NPSP Version: 3.149 installed
Built a Mass Merging process in Salesforce, using DML Database.Merge(masterAccount, duplicateAccounts, false), which is working fine until I added support to Batch process the merging with the Flex Queue Jobs.
When calling the same merge code from a batch thread, using Database.executeBatch, with the exact same sample accounts getting Exceptions in NPSP code.
Merge attempt on 2 Household Accounts with Name, Email, and Birthdate populated
VARIABLE_ASSIGNMENT|[55]|err|"Error [statusCode=DELETE_FAILED, code=[xmlrpc=1209, statusCode=DELETE_FAILED, exceptionCode=null, scope=PublicApi, http=400], message=npsp.TDTM_Account: execution of AfterDelete\n\ncaused by: System.DmlException: Update failed. First exception on row 0 with id 0012g000001nlCjAAI; first error: SELF_REFERENCE_FROM_TRIGGER, Object 0012g000001nlCjAAI is currently in a merge operation, therefore a trigger can not update it.: []\n\n(npsp)\n\n\n\n\n\n\n\n, fields=null]"|0x578018ed
Merge Exception: npsp.TDTM_Account: execution of AfterDelete caused by: System.DmlException: Update failed. First exception on row 0 with id 0012g000001nlCjAAI; first error: SELF_REFERENCE_FROM_TRIGGER, Object 0012g000001nlCjAAI is currently in a merge operation, therefore a trigger can not update it.
Merge attempt on 2 Organization Accounts w/ Address fields populated
VARIABLE_ASSIGNMENT|[50]|res|"MergeResult [success=false, id=0012g000002OBOcAAO, errors=[Error [statusCode=DELETE_FAILED, code=[xmlrpc=1209, statusCode=DELETE_FAILED, exceptionCode=null, scope=PublicApi, http=400], message=npsp.TDTM_Account: execution of AfterDelete\n\ncaused by: System.DmlException: Delete failed. First exception on row 0 with id a1Q2g00000000UhEAI; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, npsp.TDTM_Address: execution of AfterDelete\n\ncaused by: System.NullPointerException: Attempt to de-reference a null object\n\n(npsp)\n\n\n\n: []\n\n(npsp)\n\n\n\n\n\n\n\n, fields=null]], mergedRecordIds=null, updatedRelatedIds=null]"|0x11b0cfe1
VARIABLE_ASSIGNMENT|[55]|err|"Error [statusCode=DELETE_FAILED, code=[xmlrpc=1209, statusCode=DELETE_FAILED, exceptionCode=null, scope=PublicApi, http=400], message=npsp.TDTM_Account: execution of AfterDelete\n\ncaused by: System.DmlException: Delete failed. First exception on row 0 with id a1Q2g00000000UhEAI; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, npsp.TDTM_Address: execution of AfterDelete\n\ncaused by: System.NullPointerException: Attempt to de-reference a null object\n\n(npsp)\n\n\n\n: []\n\n(npsp)\n\n\n\n\n\n\n\n, fields=null]"|0x4ea8e4e5
Are the NPSP Triggers safe when called from a batch thread?
There are several posts that talk about this same scenario (some around demand tools) but didn’t see any resolutions/workarounds posted.
I started debugging through the Cumulus code but thought I’d reach out to the group before continuing to debug to see if anyone else has some thoughts.
Here is the Public Repository for the code if that helps w/ anyone that wants to investigate and/or use the Mass Merging Process.  Supports manual merging from a VisualForce mass merge page or automated merging based on a machine learning merge confidence value.
https://github.com/501Commons/Salesforce-Bulk-MergeNPSP

@daveb-501commons I'm sorry but we don't provide support here in GitHub. I see your post in the Hub Tooling Group, and just added the Salesforce Developers group in to see if they can help you with your code.


Attack Flow: Abuse Cloud-based Driver Identification Systems

Exploit vulnerabilities in cloud-based systems that handle driver-identification to impersonate accounts or gain unauthorized access.


ChemProp classifier warnings

When I use the following code:
from optunaz.utils.preprocessing.splitter import Random
from optunaz.utils.preprocessing.deduplicator import KeepMedian
from optunaz.config.optconfig import ChemPropHyperoptClassifier
from optunaz.descriptors import SmilesBasedDescriptor, SmilesFromFile
config = OptimizationConfig(
data=Dataset(
input_column="Smiles",  # Smiles column.
response_column="Activity",  # Activity column.
training_dataset_file="reinvent4_preparation.csv",  # This will be split into train and test.
split_strategy=Random(fraction=0.2),
deduplication_strategy=KeepMedian(),
),
descriptors=[
SmilesFromFile.new(),
],
algorithms=[
ChemPropHyperoptClassifier.new(epochs=100, num_iters=2), #num_iters>2: enable hyperopt within ChemProp trials
],
settings=OptimizationConfig.Settings(
mode=ModelMode.CLASSIFICATION,
cross_validation=5,
n_startup_trials=50,
n_trials=300,
direction=OptimizationDirection.MAXIMIZATION,
),
)
Setup basic logging.
import logging
from importlib import reload
reload(logging)
logging.basicConfig(level=logging.INFO)
Avoid decpreciated warnings from packages etc
import warnings
warnings.simplefilter("ignore")
def warn(*args, **kwargs):
pass
warnings.warn = warn
study = optimize(config, study_name="BPA_ChemProp_hyperopt")
I get the following warnings:
/home/wout/.anaconda/envs/Qptuna/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1497: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples. Use zero_division parameter to control this behavior.
_warn_prf(average, modifier, f"{metric.capitalize()} is", len(result))
/home/wout/.anaconda/envs/Qptuna/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1497: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use zero_division parameter to control this behavior.
_warn_prf(average, modifier, f"{metric.capitalize()} is", len(result))
/home/wout/.anaconda/envs/Qptuna/lib/python3.10/site-packages/sklearn/metrics/_classification.py:1497: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use zero_division parameter to control this behavior.
_warn_prf(average, modifier, f"{metric.capitalize()} is", len(result))
I am not sure if this is a problem. I also wonder what the optimal amount of epochs, trials and etc are, because it feels like in the tutorial everything is small for the sake of computational power. I would think that the amount of trials should be as high as possible, but when I use it for ChemProp, all trials have the same outputvalue.

Thanks for the interest in QSARtuna (formally Qptuna). I would recommend trying the same run using the ChemPropClassifier (not the hyperopt version of ChemProp). The hyperopt version ChemPropHyperoptClassifier normally requires large numbers of n_iters, n_trials and epochs during training, see here, whereas the ChemPropClassifier will work quite well out of the box.

Thank you for your quick response,
I still get the same warnings, maybe it is because of the dataset? I have a dataset of 99 inactives and 33 actives. I used 20% as test data. I use Boolean values for activity, should it be binary?

@WoutVanEynde yes that may be really quite small a dataset to then perform CV 5 times. ChemProp training will also perform another splitting approach during training, too.
You could try to reduce the number of cross validation folds from 5. Perhaps you could even try using the default ChemProp parameters, to do that you could just set the CV to 1 fold, and the number of trials to 1. This would essentially apply the default (sensible) parameters to the ChemPropClassifier (as defined by the original ChemProp authors) and evaluate on the test fold.

Thank you for your response, it seems that when increasing the amount of trials something goes wrong as my predictive values only go up to 0.5 when the warning occurs. This warning looks like something that is explained here: https://stackoverflow.com/questions/54150147/classification-report-precision-and-f-score-are-ill-defined
But I have rechecked my input data and I only have 0 and 1 as activity. When keeping my trial on 1 or on a low value, it seems to predict correctly. At some random point it seems to mess up with increasing trials.
This might be a bit off track but are there any papers/literature you can recommend for beginners in machine learning/AI?
Thanks again for the information and help!

Yes, I see. I do not think it is your input data. This may be caused by your choice of splitting strategy "Random". This will not ensure that both 0 and 1 training instances are retained in the test & train splits. Can you try repeating with a stratified split e.g. using "Stratified(fraction=0.2)"?

That seems to give the same problems, even with CV = 1

I will close this since I think it is linked to the user dataset rather than QSARtuna behaviour


RPI4 does not boot on dunfell branch  when uart_enable=0

Description

On the Dunfell branch the RPI4 does not boot if uart_enable=0 is set. This was working properly when on the Zeus branch.
Steps to reproduce the issue:

Build the Dunfell branch.
Set uart_enable=0 in your config.txt
Nothing will append, no kernel is booting.

Describe the results you received:
The RPI4 is not booting anymore. The kernel never get to log in tty1.
Describe the results you expected:
The board should boot as is would always do.
Additional information you deem important (e.g. issue happens only occasionally):
This was already tracked in the #733 pull request (which does not propose a proper fix). This looks like a U-Boot regression issue. ~More over, re-using the Zeus firmware  allows us to boot a kernel however, the mmc0 is never found so we can't go much further in the boot sequence.~

More, on this, I had time to play a little more. It turns out that using the kernel 41.9 provided in this layer work perfectly well, no need to use the Zeus firmware or touch any other component, maybe it is related to the dtb ?

Same happening here, did you try with 5.10 too? I see some files related to that as well

I start to look at the .dts in the kernel tree and I noticed this. In the kernel 4.19, the /chosen node does not contains a stdout-path, but in the kernel 5.4 the following node is present
chosen {
		/* 8250 auxiliary UART instead of pl011 */
		stdout-path = "serial1:115200n8";
	};

I am not an expert with those configuration, but this look promising. Does any one know what are the impact of enable_uart=1 with the overlay ? Are they adding a value in the chosen node ? If they do this could explain it.

@hommeabeil Can you share what error do you see in u-boot, can you clear your uboot.env and see if that helps ?
From what I can see the fdt_addr may change if you update the firmware, however since u-boot saves that in the env, the boot may break.

I can't see any error since uart1 (serial1) is disable. I do not think this come from the u-boot env since I can reproduce it from a fresh sd card.
@om26er  Do you have any clue on how to debug U-Boot without a serial port ?

@om26er I usually build from scratch every time and I have the same issue, without a serial console I only see a black screen when powered

There's no workaround that can be easily implemented at the moment right?
I really need to be able to use the main serial pins since the rpi we use have a RS485 connection on it and before going with another bootloader I want to make sure there is no other way to use uboot

I was able to successfully boot by setting
# Enable UART
enable_uart=0
# Enable VC4 Graphics
# dtoverlay=vc4-fkms-v3d
dtoverlay=disable-bt

it seems there is no way to set a custom dtoverlay so I'll try to use a bbappend for that

The key information in the issue is that you're using uboot and it does look like this is a duplicate of https://github.com/agherzan/meta-raspberrypi/issues/732 so I'll close it and let the initial issue open.


Create SelectionSort.cpp

Hacktoberfest

Great work @sumitsingh8433 please give this repo a star if it really helped you to complete your PR.
Also follow me for follow back if you want to get connected with me for any such open source contribution program. Thank you 😊


docs/Installation: Use the documented --strip-components tar argument

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

--strip-components is the documented tar option, --strip only works because tar (both BSD and GNU) does partial matching on long options.

Thanks so much for your first contribution!  You rock, @mrpippy!