legend do not work without handles

Description
There seem to be issues with get_legend_handles_labels when no handles are passed to ax.legend.
It would be better if this works as sometimes making handles are cumbersome.
Steps to reproduce
import proplot as plot

fig, ax = plot.subplots()
ax.plot([0, 1, 2], label='a')
ax.plot([0, 1, 1], label='b')
ax.legend()

Expected behavior: [What you expected to happen]
legend shows up
Actual behavior: [What actually happened]
ValueError                                Traceback (most recent call last)
 in
4 ax.plot([0, 1, 2], label='a')
5 ax.plot([0, 1, 1], label='b')
----> 6 ax.legend()
~/miniconda3/envs/basic2/lib/python3.7/site-packages/proplot/ui.py in _iterator(*args, **kwargs)
680                 result = []
681                 for func in objs:
--> 682                     result.append(func(*args, **kwargs))
683                 if len(self) == 1:
684                     return result[0]
~/miniconda3/envs/basic2/lib/python3.7/site-packages/proplot/axes/base.py in legend(self, loc, width, space, *args, **kwargs)
1399
1400         # Draw legend
-> 1401         return legend_wrapper(self, *args, loc=loc, **kwargs)
1402
1403     def draw(self, renderer=None, *args, **kwargs):
~/miniconda3/envs/basic2/lib/python3.7/site-packages/proplot/axes/plot.py in legend_wrapper(self, handles, labels, ncol, ncols, center, order, loc, label, title, fontsize, fontweight, fontcolor, color, marker, lw, linewidth, dashes, linestyle, markersize, frameon, frame, **kwargs)
3137     if list_of_lists:
3138         if any(not np.iterable(_) for _ in handles):
-> 3139             raise ValueError(f'Invalid handles={handles!r}.')
3140         if not labels:
3141             labels = [None] * len(handles)
ValueError: Invalid handles=[None].
Equivalent steps in matplotlib
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([0, 1, 2], label='a')
ax.plot([0, 1, 1], label='b')

ax.legend()

Proplot version
0.63

Thanks for the report, this is fixed now. Another issue that highlights the need for more robust testing

Hi @lukelbd ,
Is it possible to call legend  on an axis of a given plot of a subplots without the handles argument? Whenever I try this I get an error:
ax[1].legend(loc='b', ncols=4, center=True)
Error:
self.legend_ = mlegend.Legend(self, handles, labels, **kwargs) TypeError: __init__() got an unexpected keyword argument 'ncols'
It would be nice if the legend could directly access the default handles without relying on their generation when plotting...

Hi @ssssOO -- thanks for the report!
This was an unfortunate bug that occured when using the "side" locations instead of an inner location like 'upper left'. I copied your comment into a dedicated thread (#189), it's now fixed in the master branch.

Hi @lukelbd
This issue still appears when loc is passed.
ax.legend(loc='b')

Error:
No handles with labels found to put in legend.
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-58dceaf93eec> in <module>
      4 ax.plot([0, 1, 2], label='a')
      5 ax.plot([0, 1, 1], label='b')
----> 6 ax.legend(loc='b')

~/miniconda3/envs/basic/lib/python3.8/site-packages/proplot/ui.py in _iterator(*args, **kwargs)
    680                 result = []
    681                 for func in objs:
--> 682                     result.append(func(*args, **kwargs))
    683                 if len(self) == 1:
    684                     return result[0]

~/miniconda3/envs/basic/lib/python3.8/site-packages/proplot/axes/base.py in legend(self, loc, width, space, *args, **kwargs)
   1369         if loc in ('left', 'right', 'top', 'bottom'):
   1370             ax = self.panel_axes(loc, width=width, space=space, filled=True)
-> 1371             return ax.legend(*args, loc='fill', **kwargs)
   1372
   1373         # Fill

~/miniconda3/envs/basic/lib/python3.8/site-packages/proplot/axes/base.py in legend(self, loc, width, space, *args, **kwargs)
   1399
   1400         # Draw legend
-> 1401         return legend_wrapper(self, *args, loc=loc, **kwargs)
   1402
   1403     def draw(self, renderer=None, *args, **kwargs):

~/miniconda3/envs/basic/lib/python3.8/site-packages/proplot/axes/plot.py in legend_wrapper(self, handles, labels, ncol, ncols, center, order, loc, label, title, fontsize, fontweight, fontcolor, color, marker, lw, linewidth, dashes, linestyle, markersize, frameon, frame, **kwargs)
   3329
   3330         # Draw legend
-> 3331         leg = mlegend.Legend(self, *zip(*pairs), ncol=ncol, loc=loc, **kwargs)
   3332         legs = [leg]
   3333

TypeError: __init__() missing 2 required positional arguments: 'handles' and 'labels'

@kinyatoride It should be fixed on master; do you have the "development" version? Can be installed with pip install git+https://github.com/lukelbd/proplot

@lukelbd
This issue appears again in the development version (0.8.0.post5).
Error:
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/tmp/ipykernel_92559/3733033338.py in <module>
      5 ax.plot([0, 1, 1], label='b')
      6 #ax.legend(loc='b')
----> 7 ax.legend()

~/miniconda3/envs/basicf5/lib/python3.9/site-packages/proplot/figure.py in _grid_command(self, *args, **kwargs)
   2004         objs = []
   2005         for ax in self:
-> 2006             obj = getattr(ax, name)(*args, **kwargs)
   2007             if obj is not None:
   2008                 objs.append(obj)

~/miniconda3/envs/basicf5/lib/python3.9/site-packages/proplot/axes/base.py in legend(self, handles, labels, loc, location, queue, **kwargs)
   2765             self._add_guide('legend', obj, loc, **kwargs)
   2766         else:
-> 2767             leg = self._draw_legend(handles, labels, loc=loc, **kwargs)
   2768             return leg
   2769

~/miniconda3/envs/basicf5/lib/python3.9/site-packages/proplot/axes/base.py in _draw_legend(self, handles, labels, loc, width, pad, space, frame, frameon, ncol, ncols, alphabetize, center, order, label, title, fontsize, fontweight, fontcolor, titlefontsize, titlefontweight, titlefontcolor, **kwargs)
   2638             else:  # figure panel i.e. figure-wide legend
   2639                 axs = list(self.figure._iter_axes(hidden=False, children=True))
-> 2640         pairs = self._parse_handles_labels(
   2641             axs, handles, labels,
   2642             ncol=ncol, order=order, center=center, alphabetize=alphabetize,

~/miniconda3/envs/basicf5/lib/python3.9/site-packages/proplot/axes/base.py in _parse_handles_labels(self, axs, handles, labels, ncol, order, center, alphabetize)
   2339         axs = axs or ()
   2340         handles, labels = _to_list(handles), _to_list(labels)
-> 2341         list_of_lists = any(isinstance(h, (list, np.ndarray)) and len(h) > 1 for h in handles)  # noqa: E501
   2342         if list_of_lists and ncol is not None:
   2343             warnings._warn_proplot(

TypeError: 'NoneType' object is not iterable

Thanks, this was another quick fix (fdd53a6c). The refactors in v0.8 had been hanging over my head for 2 years -- now that they're finally done the next step is obviously to add many many more automated tests (goal for the end of 2021).
import proplot as plot
fig, ax = plot.subplots()
ax.plot([0, 1, 2], label='a')
ax.plot([0, 1, 1], label='b')
ax.legend()

import proplot as plot
fig, ax = plot.subplots()
ax.plot([0, 1, 2])
ax.plot([0, 1, 1])
ax.legend(labels=['a', 'b'])


Missing deps does not stop installer

When missing php-curl, the installer will state the dep is missing, but then state the force flag was present, so it will continue.

I belive it's possible to check if the extension exists at the start of the file.
Here's a snippet:
if(!extension_loaded ("php-curl")){
    die("PHP-Curl extension missing!<br/>Please enable it or the installer won't work.");
}

I do belive that's enough

We already do this check, you mis-read the actual issue.
There is a flag we support to ignore that dependencies are missing. That flag is being set incorrectly, so our installer thinks it's there when it is not.


Ektwnl patch 2

{
  "chainId": 101,
  "address": "FaYTnfmPK8uP4dvtECypG3ugCC3wQrG27pwkB1YkhXsG",
  "symbol": "DODG",
  "name": "DODG the Elephant Shrew",
  "decimals": 2,
  "logoURI": "https://avatars.githubusercontent.com/u/89343762?s=400&u=54c5b493bd54c2f24bab268207a58c2b023ce349&v=4",
  "tags": [],
  "extensions": {
    "twitter": "https://twitter.com/DODG_Sh"
  }
},

I agree to not ping anybody on Discord/Twitter/email about this pull request. Instead I will inquire by posting a new comment in the pull request if needed.

PRs are reviewed in bulk and and can take up to two weeks to be merged.
Please provide the following information for your token.
Please include change to the src/tokens/solana.tokenlist.json file in the PR.
DON'T modify any other token on the list.
At minimum each entry should have

Token Address:
Token Name:
Token Symbol:
Logo: (logo should be uploaded under assets/mainnet//*.<png/svg>)
Link to the official homepage of token:
Coingecko ID if available (https://www.coingecko.com/api/documentations/v3#/coins/get_coins__id_):

I edited the twitter line
"twitter": "https://twitter.com/DODG_Sh"


Open VSX Registry: Awareness and Important Steps

@bryphe has published this extension in the Open VSX Registry.
The service was recently transferred to the Eclipse Foundation and we want to ensure a seamless transition for our users. To ensure uninterrupted service and more exposure for your extension, I recommend the following.
To the maintainers: If you would like to take over publishing to open-vsx.org, here’s how: https://github.com/eclipse/openvsx/wiki/Publishing-Extensions
To the current publisher: Please sign the Eclipse Publisher Agreement. The signing process is explained in the Wiki (steps 1 and 2).
Claiming ownership of the namespace for your extension(s). To find out how to do this, see:
https://github.com/eclipse/openvsx/wiki/Namespace-Access
As owner you can add more namespace members (including service accounts) yourself in https://open-vsx.org/user-settings/namespaces. Note that publishing can be done by any contributor to the extension, namely those you add as namespace members once they have signed the Publisher Agreement as well.
Please also note that a license is now mandatory for publishing your extension to Open VSX. If your project doesn't have any license, please add one, preferably an open source license such as MIT. The publishing tool ovsx offers to automatically add the MIT license when you try to publish without a license.
Useful links:
Eclipse Publisher Agreement
Eclipse Foundation Open VSX Registry Frequently Asked Questions (FAQ)
More details are in these recent blog posts:
https://blogs.eclipse.org/post/brian-king/open-vsx-registry-under-new-management
https://blogs.eclipse.org/post/brian-king/new-era-open-vsx-registry
Today, there’s growing momentum around open source tools and technologies that support Visual Studio (VS) Code extensions. Leading global organizations are adopting these tools and technologies. This momentum has spurred demand for a marketplace without restrictions and limitations. We hope you join us on this journey as we continue to build the Open VSX community.
We look forward to continued innovation from you in 2021!

@chriswheeldon @bryphe Just a reminder for you in case you missed this. Our deadline was extended but the new one is approaching fast, this Friday January 29.

@chriswheeldon @bryphe Just a reminder for you in case you missed this. Our deadline was extended but the new one is approaching fast, this Friday January 29.


implements linedir (#line) for debugging

generates #line 5 "test.nim"

Nah, sorry, you missed the point entirely. NIF itself already has the line information in its AST. You can just query it and produce it before every function call and assignment statement.

Okay, I will generate #line from LineInfo instead


Physics2D: Multi-Threading

Operating system or device - Godot version:
Godot 2.1 Win
Issue description (what happened, and what was expected):
I turned on "Multi-Threading" for physics. And often after a while an error appears:
ERROR: Map<struct BroadPhase2DHashGrid::Element *,struct BroadPhase2DHashGrid::P
airData *,struct Comparator<struct BroadPhase2DHashGrid::Element *>,class Defaul
tAllocator>::_set_color: Condition ' p_node == _data._nil && p_color == RED ' is
 true.
   At: core\map.h:

The application in this case hangs.
Steps to reproduce:
Link to minimal example project (optional but very welcome):
https://dl.dropboxusercontent.com/u/80689824/PhyTest_MT.zip

I experience a similiar issue but for me it happens at:
ERROR: _set_color: Condition ' p_node == _data._nil && p_color == RED ' is true.
   At: core/set.h:152.

It appears to always happen somewhere where I make call_deferred calls from a worker thread to initialize and instantiate packed scenes. But it only happens 1 out of a 100 times and I have no clue how to reproduce.
But of course it could be something entirely else, but that's the only place where I noticed it.
Should I create a separate issue for it?

I experienced the same thing as supaiku-o. It seems very random. I tried to make a test file, but I could only get it to do it once or twice. It does seem to have to do with call_defferred calls in a Thread.

I thought multithreaded physics was still WIP? Crashing would still be a bug, though.

Looks like a race condition in set?

@raymoo: I guess it is a WIP, but still would love to be able to use it.
I made a test file that loads a ton of Nodes in a thread and queue_frees them. On my pc it causes it to loop error about 50% of the time. Don't think it has anything to do with physics since I used no physics nodes.
Test file: http://s000.tinyupload.com/?file_id=52870569225830189698
https://i.imgur.com/xO8hl8P.gif

Maybe some race condition with the call_deferred queue then? I haven't looked at all into this so I am just guessing.

@supaiku-o  In the test file I only have one call_deferred. its used to  call the function with wait_to_finish() later. I no longer think its has something to do with call_deferred.

Nvm I was using 2.1.3. It doesn't seem to do it in 2.1.4. This might be fixed.

@jtaart There can still be a race condition if multiple threads attempt to access the call queue at the same time.

First of all thank you for your report and sorry for the delay.
We released Godot 3.0 in January 2018 after 18 months of work, fixing many old issues either directly, or by obsoleting/replacing the features they were referring to.
We still have hundreds of issues whose relevance/reproducibility needs to be checked against the current stable version, and that's where you can help us.
Could you check if the issue that you described initially is still relevant/reproducible in Godot 3.0 or any newer version, and comment about it here?
For bug reports, please also make sure that the issue contains detailed steps to reproduce the bug and, if possible, a zipped project that can be used to reproduce it right away. This greatly speeds up debugging and bugfixing tasks for our contributors.
Our Bugsquad will review this issue more in-depth in 15 days, and potentially close it if its relevance could not be confirmed.
Thanks in advance.
Note: This message is being copy-pasted to many "stale" issues (90+ days without activity). It might happen that it is not meaningful for this specific issue or appears oblivious of the issue's context, if so please comment to notify the Bugsquad about it.

As there was no answer to the above request, we're closing this issue as inactive.
If you can still reproduce it, please open a new issue against a currently supported release of Godot.


Exception in on_socket_open: Non-thread-safe operation invoked on an event loop other than the current one

When running with the PYTHONASYNCIODEBUG=1  environment variable set, using the following code:
import asyncio

from asyncio_mqtt import Client

async def main():
    client = Client("test.mosquitto.org")

    print("Connecting...")
    await client.connect()
    print("Connected!")

    print("Sleeping...")
    await asyncio.sleep(5)
    print("Slept!")

    print("Disconnecting...")
    await client.disconnect()
    print("Disconnected!")

if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    try:
        loop.run_until_complete(main())
    finally:
        loop.close()
        loop.stop()

Connecting to an MQTT server raises the following exceptions:
$ PYTHONASYNCIODEBUG=1 PYTHONTRACEMALLOC=1 python3.8 test.py
Connecting...
Caught exception in on_socket_open: Non-thread-safe operation invoked on an event loop other than the current one
Traceback (most recent call last):
  File "test.py", line 25, in <module>
    loop.run_until_complete(main())
  File "/usr/lib/python3.8/asyncio/base_events.py", line 608, in run_until_complete
    return future.result()
  File "test.py", line 10, in main
    await client.connect()
  File "/home/flyte/workspaces/asyncio-mqtt/ve/lib/python3.8/site-packages/asyncio_mqtt/client.py", line 79, in connect
    await loop.run_in_executor(None, self._client.connect, self._hostname, self._port, 60)
  File "/usr/lib/python3.8/concurrent/futures/thread.py", line 57, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/home/flyte/workspaces/asyncio-mqtt/ve/lib/python3.8/site-packages/paho/mqtt/client.py", line 941, in connect
    return self.reconnect()
  File "/home/flyte/workspaces/asyncio-mqtt/ve/lib/python3.8/site-packages/paho/mqtt/client.py", line 1117, in reconnect
    self._call_socket_open()
  File "/home/flyte/workspaces/asyncio-mqtt/ve/lib/python3.8/site-packages/paho/mqtt/client.py", line 2071, in _call_socket_open
    self.on_socket_open(self, self._userdata, self._sock)
  File "/home/flyte/workspaces/asyncio-mqtt/ve/lib/python3.8/site-packages/asyncio_mqtt/client.py", line 303, in _on_socket_open
    self._misc_task = self._loop.create_task(self._misc_loop())
  File "/usr/lib/python3.8/asyncio/base_events.py", line 427, in create_task
    task = tasks.Task(coro, loop=self, name=name)
  File "/usr/lib/python3.8/asyncio/base_events.py", line 713, in call_soon
    self._check_thread()
  File "/usr/lib/python3.8/asyncio/base_events.py", line 750, in _check_thread
    raise RuntimeError(
RuntimeError: Non-thread-safe operation invoked on an event loop other than the current one
Caught exception in on_socket_close: 'NoneType' object has no attribute 'cancel'
Exception ignored in: <function Client.__del__ at 0x7f298a709dc0>
Traceback (most recent call last):
  File "/home/flyte/workspaces/asyncio-mqtt/ve/lib/python3.8/site-packages/paho/mqtt/client.py", line 660, in __del__
  File "/home/flyte/workspaces/asyncio-mqtt/ve/lib/python3.8/site-packages/paho/mqtt/client.py", line 704, in _reset_sockets
  File "/home/flyte/workspaces/asyncio-mqtt/ve/lib/python3.8/site-packages/paho/mqtt/client.py", line 698, in _sock_close
  File "/home/flyte/workspaces/asyncio-mqtt/ve/lib/python3.8/site-packages/paho/mqtt/client.py", line 2105, in _call_socket_close
  File "/home/flyte/workspaces/asyncio-mqtt/ve/lib/python3.8/site-packages/asyncio_mqtt/client.py", line 308, in _on_socket_close
AttributeError: 'NoneType' object has no attribute 'cancel'
sys:1: RuntimeWarning: coroutine 'Client._misc_loop' was never awaited
Task was destroyed but it is pending!
source_traceback: Object created at (most recent call last):
  File "/usr/lib/python3.8/threading.py", line 890, in _bootstrap
    self._bootstrap_inner()
  File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.8/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/lib/python3.8/concurrent/futures/thread.py", line 80, in _worker
    work_item.run()
  File "/usr/lib/python3.8/concurrent/futures/thread.py", line 57, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/home/flyte/workspaces/asyncio-mqtt/ve/lib/python3.8/site-packages/paho/mqtt/client.py", line 941, in connect
    return self.reconnect()
  File "/home/flyte/workspaces/asyncio-mqtt/ve/lib/python3.8/site-packages/paho/mqtt/client.py", line 1117, in reconnect
    self._call_socket_open()
  File "/home/flyte/workspaces/asyncio-mqtt/ve/lib/python3.8/site-packages/paho/mqtt/client.py", line 2071, in _call_socket_open
    self.on_socket_open(self, self._userdata, self._sock)
  File "/home/flyte/workspaces/asyncio-mqtt/ve/lib/python3.8/site-packages/asyncio_mqtt/client.py", line 303, in _on_socket_open
    self._misc_task = self._loop.create_task(self._misc_loop())
  File "/usr/lib/python3.8/asyncio/base_events.py", line 427, in create_task
    task = tasks.Task(coro, loop=self, name=name)
task: <Task pending name='Task-2' coro=<Client._misc_loop() running at /home/flyte/workspaces/asyncio-mqtt/ve/lib/python3.8/site-packages/asyncio_mqtt/client.py:318> created at /usr/lib/python3.8/asyncio/base_events.py:427>

I'm experiencing the same problem - thanks for already finding a fix!
Is the recommended workaround to use the master version until there is a new release?

@cmur2 Version 0.9.0 is now live. It includes the fix for this issue. :+1:


Allow registration from multiple devices

Users should be able to register on one device and associate their token also to other devices.
The client will ask Mercurius to send a notification to the token, Mercurius will send it to all the devices associated with it.

Fixed in #19.


login: Fetch all the data we'll want for an accounts table

This prepares for #34 by expanding the Account class to contain all the data we'll want to be able to record in an accounts table when each record is first added. That means following up on #39 to fetch more data in the login flow: the user's ID and the server's version information.
NB this requires adding a line to one's credential_fixture.dart. That's the second time we've had to make changes to that file, after #51. I expect it will be the last, as with #34 we'll get to remove that fixture mechanism entirely.

Thanks, LGTM! Please merge at will, then. 🙂

Thanks for the review!


[BUG] Navbar Top Corners Rounded does not look good

Description
The Top Corners are Rounded on navbar with does not look good
Screenshots

Any additional information?
No response
What browser are you seeing the problem on?
Chrome
Checklist

[X] I have checked the existing issues
[X] I have read the Contributing Guidelines
[X] I have read the discussion tab thoroughly and got the project idea
[X] I am willing to work on this issue (optional)
[X] I am a GSSoC'23 contributor

@rohansx @k-deepak04 Please assign this issue to me under GSSoC 23

@ManasMadan go for it

@k-deepak04 @rohansx Have Created a PR #434 Merging that closes this issue


Shallow props comparison in shouldComponentUpdate() makes charts redraw too frequently

The intention of the code seems to be that it will only redraw when the props are actually different, but in practice, it redraws as long as the props are a different object (i.e. basically always).

Hey @leifkb,
Apologies for late reply.
You are correct, we should either do deep comparison (somewhat performance ineffective) or we can return false for shouldComponentUpdate and if "redraw" is true in componentWillReceiveProps force an update?
Any thoughts are welcome.
Thanks for your time.


Question: observableResult()

What exactly triggers this function and what are the limitations? I often can't get results after insert or update...

It's triggered on any insert/update/delete of the same type returned by the query

tnx i will look into that 👍


pip install git+https://github.com/AI4Finance-Foundation/FinRL-Meta.git is broken

pip install git+https://github.com/AI4Finance-Foundation/FinRL-Meta.git creates only .dist-info
import finrl_meta gives:
ModuleNotFoundError: No module named 'finrl_meta'

Meet the same issue. There is only .dist-info file, no package be installed. Pls fix it. It seems caused by the setup.py file.

Hello - thanks for reporting this - the issue has been fixed. Note that for Windows, you need to install TA-lib manually. please revert back if the problem persists. Thank you !


HBASE-25513 When the table is turned on normalize, the first region may not be merged even the size is 0

HBASE-25513

:confetti_ball: +1 overall

Vote
Subsystem
Runtime
Comment

+0 :ok:
reexec
0m 29s
Docker mode activated.

The failed UT seems not related.

The failed UT seems not related.

The changes sound reasonable.

The changes sound reasonable.

Thanks for review @virajjasani

Thanks for review @virajjasani


alvr_get_frame return 0 while I porting on New HMD devices,could you help me debug what's wrong

since my HMD device not support OpenXR, I use tag v19.1.1
I porting all the apis called by cpp_main.cpp ,the lobby view show rightly.
then I connected to PC,audio can play rightly but video cannot show while steaming.
1.in render function,the alvr_get_frame return 0,streamHardwareBuffer is not nullptr;
//cpp_main.cpp
{
void *streamHardwareBuffer = nullptr;
auto timestampNs = -1;
timestampNs = alvr_get_frame(&streamHardwareBuffer);
}
2.add dbg info in dequeue_output_buffer,cannot get timestamp
12-22 00:16:15.406  4088  4215 I avr_rus : alvr_client_core::platform::android: Decoder dequeue buffer: OutputBuffer { codec: MediaCodec { inner: 0x70fa26a9a0 }, index: 16, info: AMediaCodecBufferInfo { offset: 0, size: 8, presentationTimeUs: 0, flags: 1 } }
12-22 00:16:15.406  4088  4215 I avr_rus : alvr_client_core::decoder: target_timestamp 0ns
could you help me debug this issue?
thanks a lot
an.zip

what is your headset?

the headset is Pimax Crystal

@highyun you can port ALVR to non-OpenXR platforms too, like PhoneVR does. You are always encouraged to use the latest version.

@zarik5 sorry ，I haven't used the Rust language before，the v20.5 seems have removed the Android and jni code?how should I port it without OpenXR?

thanks, it's my fault,the root cause is vrapi_EnumerateInputDevices return with  wrong value 0,already fixed


Using custom filter gives this error "this.customComponent.instance.ngOnChanges is not a function.".

Although my app is running fine but it is showing error.
ERROR TypeError: this.customComponent.instance.ngOnChanges is not a function FilterComponent.html:3
at CustomFilterComponent.ngOnChanges (ng2-smart-table.js:1299)
at checkAndUpdateDirectiveInline (core.js:31906)
at checkAndUpdateNodeInline (core.js:44367)
at checkAndUpdateNode (core.js:44306)
at debugCheckAndUpdateNode (core.js:45328)
at debugCheckDirectivesFn (core.js:45271)
at Object.eval [as updateDirectives] (FilterComponent.html:3)
at Object.debugUpdateDirectives [as updateDirectives] (core.js:45259)
at checkAndUpdateView (core.js:44271)
at callViewAction (core.js:44637)
This is my Custom Button that i am rendering in place of the filter
@Component({
template: <button class="btn btn-md btn-default" style="background-color: #d6d2d2" (click)="onClick('disbursement')">Select Range</button>   ,
})
export class RangeFilterComponent extends DefaultFilter implements OnInit {
inputControl = new FormControl();
constructor(private dialogService: NbDialogService) {
super();
}
ngOnInit() {
}
onClick=(event)=>{
this.dialogService.open(ShowcaseDialogComponent, {
context: {
title: 'Select Range',
button: 'disbursement'
},
});
}
}
This is the settings of the table
projectsTableSettings = {
hideHeader: false,
hideSubHeader: false,
add: {
addButtonContent: '',
createButtonContent: '',
cancelButtonContent: '',
confirmCreate: true,
},
edit: {
editButtonContent: '',
saveButtonContent: '',
cancelButtonContent: '',
},
delete: {
deleteButtonContent: '',
confirmDelete: true,
},
actions: {
add: false,
edit: false,
delete: false,
},
columns: {
name: {
title: 'Project Name',
type: 'string',
},
description: {
title: 'Description',
type: 'string',
width: "20%"
},
type: {
title: 'Project Type',
type: 'string',
},
scheme: {
title: 'Scheme',
type: 'string',
},
assigned_to: {
title: 'Engineer',
type: 'string',
},
assigned_contractor: {
title: 'Contractor',
type: 'string',
},
cost_disbursement: {
title: 'Cost Disbursement',
filter: {
type: 'custom',
component: RangeFilterComponent
},
width: "10%"
},
physical_progress: {
title: 'Physical Progress',
filter: {
type: 'custom',
component: RangeFilterProgressComponent
},
width: "10%"
},
},
};
Sorry for the bad format. I tried but could not make it right.

Have the same error, don't know how to solve it.

@luischueneuien kindly answer if you find a solution. Because of this error my pager is not displaying when loading.

Hello @luischueneuien I dont know its a correct way or not, but the error doesnot ocur for me now. What I did is I went to the line where the error was pointing. It was in node modules' ng2-smart-table.js. There I changed ngOnChange to ngOnInit. And it worked.

Well @PragyanD33p, I don't know if editing node modules files its a good idea, maybe adding
ngOnChanges(changes: SimpleChanges) {     if (changes.query) {       this.query = changes.query.currentValue;       this.inputControl.setValue(this.query);     }   }
to your custom component works

Thanks @luischueneuien. Its working. I think its better to keep the node modules untouched. I will close it then.

Is there any other solution? I do not like to touch the node modules code at all


url_launcher 5.7.8 failing on iOS 14+ when a default browser different than Safari is used.

In iOS 14 when you select a default browser other than Safari, the in-app browser behavior doesn't work anymore and instead of opening the URL in for example Chrome (which is my default browser).
In example code, the app goes to the else statement and throws the error 'Could not launch $url';
_launchURL() async {
const url = 'https://flutter.dev';
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}

@renecum Probably this is a duplicate of #65936 and should be closed. Regards.

Yes, this is definitely a duplicate of https://github.com/flutter/flutter/issues/65936.


No visual feedback on where exactly to click to close a tab

It's difficult to know where exactly to click on a tab to close it.
Reproduction Steps:

Open a file in Atom
Place your mouse on the left hand side of the file's tab
Move your mouse gradually closer to the tab's x icon, clicking continuously, and try to guess when your click will actually close the tab.

Expected behavior:
I'd expect one, some or all of these to happen:

The tab's close icon to not appear until the mouse is over the close icon's hitbox
The icon's hitbox to have a background colour
The mouse cursor to only change to the pointer cursor when the mouse is over the close icon's hitbox

Observed behavior:
When hovering anywhere over a file's tab, the close icon appears and the mouse cursor turns to the pointer cursor (the hand). When the mouse cursor is in range of the tab's close button there's no visual indication - making it surprisingly difficult to know if your click is going to close the tab or not.
Screenshots and GIFs
Annoyingly I can't take a screenshot and keep the pointer icon - so you'll have to imagine you're seeing the pointer mouse cursor on all the screenshots below. :)

Which of these would cause the tab to close?


Add a 4th font button and an API to set its font

Don't know why I can't create an issue in this repo. So I create a new issue at obsidian-excalidraw-plugin for potential further discussions. If I got something wrong or this is unneccessary, feel free to delete the issue.

I didn't have issues enabled for this repository. Now I do.
Btw, we can have a discussion in the PR directly.

so I notice that doing my edits on GitHub, I wasn't thorough enough.
App.tsx has two errors that I corrected after merging:
declaration for showFourthFont is correctly
export let showFourthFont: boolean = false;

And declaration of setLocalFont is correctly:
  public setLocalFont: ExcalidrawImperativeAPI["setLocalFont"] = (
    url: string,
    showOnPanel: boolean,
  ) => {
    this.setLocalFontUrl(url, showOnPanel);
  };

I didn't have issues enabled for this repository. Now I do. Btw, we can have a discussion in the PR directly.

Yes, not did I recall that we can discuss directly in the PR before I submit it. Sorry for creating an unneccessary issue.
And thank you very much for improving the commits, making the functions much more robust and controllable.


dotnet sdk cannot be opened

Problem encountered on https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/install
Operating System: macos (catalina)
Trying to install the package I ran into this error:
“dotnet-sdk-3.1.100-osx-x64.pkg” can’t be opened because Apple cannot check it for malicious software.
This software needs to be updated. Contact the developer for more information.

@dagood

This is documented as a known issue at https://github.com/dotnet/core/blob/master/release-notes/3.1/3.1-known-issues.md#net-core-installation-on-macos-catalina-1015, with a workaround. Also, https://github.com/dotnet/core/issues/3943.

Duplicate of https://github.com/dotnet/core/issues/3943


Fix label used in social media previews

Currently when you send a link to the docs in slack, the snippet view is created from this "twitter:title" element, which was confusingly set to "Docs team"

This changes that to say "Docker docs" instead. We can probably do something better using the pagetitle variable, but this at least fixes it for now.
Please take a look
@mstanleyjones @johndmulhausen
Signed-off-by: LRubin<EMAIL_ADDRESS>

Switched to use Page's title. Thanks, @sanscontext :)


more consistent format/clearer information

The following pull request contains some opinionated changes that I feel might better improve the experience for future students as someone who has completed the project.

Remove DELETED text to be more consistent with the other strikethroughed user story
Updated source and origin urls to be more consistent and also to use different author/post ids to reduce confusion as sometimes the origin would use the source's post id character. (e.g. /authors/xxx/posts/yyy was a source and /authors/yyy/posts/xxx was the origin. The usage of the same characters makes it seem like it's related)
(opinionated) All pagination and lists seems to use items except for comments. I believe that for consistency, it might be better to just use items as comments are the only paginated route that differs from this
(opinionated) Changed "Example liked object" to "Example Format" as there is never a time where any API will send the full liked object to another node. At most it will just be the like object within. It seems better to say "Example Format" as it describes the body of the /liked route.

Something I did not change here that I feel would be nice, would be to update all ids to just be a UUID instead of url.com/UUID
We were told that using just a numerical id for the id of the post would be fine and this later caused problems down the road as other groups had the URL format instead. There was unnecessary work to extract just the ids from the URL to store in our database and I feel that if all ids were just a randomly generated UUID, it would make the project a lot smoother as groups would no longer have to extract the post id from a post payload, as well as it would make more sense in terms of what real-world APIs return.

* (opinionated) All pagination and lists seems to use `items` except for comments. I believe that for consistency, it might be better to just use `items` as comments are the only paginated route that differs from this

All of the other lists should probably be changed to say what they are (like comments) rather than using items.

Something I did not change here that I feel would be nice, would be to update all ids to just be a UUID instead of url.com/UUID We were told that using just a numerical id for the id of the post would be fine and this later caused problems down the road as other groups had the URL format instead. There was unnecessary work to extract just the ids from the URL to store in our database and I feel that if all ids were just a randomly generated UUID, it would make the project a lot smoother as groups would no longer have to extract the post id from a post payload, as well as it would make more sense in terms of what real-world APIs return.

Using "just UUID" still allows for conflicts, they would probably need to be intentional conflicts, but I still think it's a bad idea. The better solution would be to make your own UUIDs for it and have a unique foreign key with the URL:
post_url = models.URLField(max_length=500, null=false, unique=true)
# then later
post = models.ForeignKey(... related_name='post_url')

I tried to suggest people do this in the discussion forum but apparently no one did.

I left the inbox items alone as I wasn't sure as to what it could be named. All other items keys should be renamed now though. 👍
I'm still a little iffy on the URL instead of a UUID because some of the routes in the specs appear as if the id is just the UUID portion of the URL rather than the full URL. I think of all of the routes in the spec, only ://service/authors/{AUTHOR_ID}/followers/{FOREIGN_AUTHOR_ID} specifies you need to have the foreign author id as the full url but encoded. The rest of the routes make it seem like the author id in the url params is just the UUID. Although, if you intend to make all ids URL encoded instead, (rather than UUIDs) I think alot of confusion could be cleared up if the Example (Server-to-Server API View) section was updated to reflect that, as it currently makes it seem like it's just the UUID part that should be specified as the author id in most urls. I wouldn't mind changing this if that's what you'd like.
In regards to intentional conflicts, if you mean like people purposely reusing UUIDs, I think that it would be kinda illogical for a student to do that ever considering the nature of UUIDs are meant to be unique, and they're basically destroying that if they aren't randomly generating them. If a student is purposely reusing UUIDs, then during connecting with other groups, they would just have to change their code to be str(uuid.uuidv4()) rather than whatever hacky code they have to generate uuids, and they wouldn't have the problem anymore. Also even with the URL ids instead, if they're using the same UUID intentionally, they'd still run into the same issue because there would be two duplicate objects with the same uuid, except now they just have the same url prefix.


bug

Hi, im doing exactly like the tutorial, but the EventListener function isnt triggering

Hi @FelipeZago14, what version are you using? Currently on the demo if you open up dev tools and then change any of the sliders you can see that the event is being triggered. The code on the demo is this:
document.addEventListener(
        'range-changed',
        (event) => console.log(
          `Range has changed!
           | Slider ID (if slider has an id attribute, else it will be null): ${event.detail.sliderId}
           | Min Range selection: ${event.detail.minRangeValue.toString()}
           | Max Range selection: ${event.detail.maxRangeValue}`
        )
 );

Are you placing the range selector inside of another web component or iframe and trying to add the listener somewhere that may not have "access" to that scope?

Hi, please open a new issue with a fiddle and steps to reproduce. Thank you!


added cob4-3 - updated

includes #365
and applies changes according to today's twist_mux, vel_smoother and laser scanner topic activity

CR: OK


Fixes #12 - Document the API

Updated the README to include documentation for the module API.

:+1: Thanks for this!

Needed this to finally retire my original module :-)
Regarding API-key limits... I can't find any restrictions on the AChecker web site.


Add descriptions for Node2D's skew and CanvasItem's clip_children

Some simple descriptions that hopefully make sense.

Thanks!


Feature flag not being enabled in RSpec specs on 1.2.1

This may be a duplicate of #821, but I don't know enough about the internals of the library to say if it is.
In a spec, my code tries to enable a feature flag, but the flag does not end up enabled:
# A helper we use in our specs
module TestUtils
  extend ActiveSupport::Concern

  def with_feature_flag(flag, value)
    old_value = Flipper.enabled?(flag)
    if value == false
      puts "disabling #{flag}"
      Flipper.disable(flag)
    else
      puts "enabling #{flag}"
      Flipper.enable(flag)
    end
    yield
  ensure
    if old_value == false
      puts "setting #{flag} back to disabled"
      Flipper.disable(flag)
    else
      puts "setting #{flag} back to enabled"
      Flipper.enable(flag)
    end
  end

  module ClassMethods
    def with_feature_flag(flag, value)
      around { |example| with_feature_flag(flag, value) { example.run } }
    end
  end
end

# Excerpt of our spec
context "when the automatic_button feature flag is enabled" do
  with_feature_flag :automatic_button, true

  context "when there is a failure message" do
    before { subject.object.fulfillment.failure_code = "cancelled" }

    it "returns the red banner" do
       puts "Flag symbol enabled? #{Flipper.enabled? :automatic_button}"
      puts "Flag string enabled? #{Flipper.enabled? 'automatic_button'}"
      expect(subject.banner.to_partial_path).to eq "admin/order_banners/automatic_processing_failure"
    end

    it "returns the red banner, even if it can be processed automatically" do
      subject.object.fulfillment.can_process_automatically = true
      expect(subject.banner.to_partial_path).to eq "admin/order_banners/automatic_processing_failure"
    end
  end
end

On 1.2.1:
$ rspec spec/decorators/order_decorator_spec.rb:114
Run options: include {:locations=>{"./spec/decorators/order_decorator_spec.rb"=>[114]}}
enabling automatic_button
Flag symbol enabled? false
Flag string enabled? false
setting automatic_button back to disabled

On 1.1.2:
$ rspec spec/decorators/order_decorator_spec.rb:114
Run options: include {:locations=>{"./spec/decorators/order_decorator_spec.rb"=>[114]}}
enabling automatic_button
Flag symbol enabled? true
Flag string enabled? true
setting automatic_button back to disabled

In case it's helpful, this is on Rails 7.0.8 and RSpec 3.12.0.

@norman Sorry you're running into issues. TestHelp was just added in 1.2 and is enabled by default. I'm guessing there's an order issue with the before/around callbacks.
To help isolate it, can you first try disabling the TestHelp integration?
# config/initializers/flipper.rb
Rails.application.configure do
  config.flipper.test_help = false
end

If your test pass after that, then I'm guessing what is happening is:

Your with_feature_flag helper enables the feature in the around block
TestHelp#flipper_configure gets called, resetting the current flipper instance
The specs run with the newly configured flipper instance

Sorry you're running into issues.

@bkeepers No worries! Thanks for the quick response and thanks for working on this library that my coworkers and I are super happy with.

To help isolate it, can you first try disabling the TestHelp integration?

Yes, the specs pass when I add the initializer your provided.

@norman can you try this branch with your original with_feature_flag helper?
gem 'flipper-active_record', git: 'https://github.com/flippercloud/flipper', branch: 'rspec-prepend'

@norman can you try this branch with your original with_feature_flag helper?
gem 'flipper-active_record', git: 'https://github.com/flippercloud/flipper', branch: 'rspec-prepend'

Yes! That worked.

Yes! That worked.

Awesome. And just to confirm, this is with config.flipper.test_help = true?

Yes! That worked.

Awesome. And just to confirm, this is with config.flipper.test_help = true?

 Sorry, I'm doing a million things at once right now and forgot to unset that. I still had your initializer running. When I removed it the specs no longer pass with your branch, the behavior is the same as my original report.

Howdy 👋🏻 🤠
FWIW Jumping in here to say I'm experiencing a similar issue in a Rails(7.0.8) app albeit we use Redis instead of ActiveRecord for Flipper. We are using RSpec v3.12 with Flipper.enable/disable in our tests. These tests were passing before this update.
The config changes in the Flipper initializer mentioned earlier in this thread allowed our Flipper-related tests to pass 🤩 , but the rspec-prepend gem branch did not. I was guessing at the gem though:
gem 'flipper-redis', git: 'https://github.com/flippercloud/flipper', branch: 'rspec-prepend'

I could be wrong there ☝🏻
LMK if you have other questions 🙏🏻


nodejs v0.12.0 (bootstrap)

in OSX nodejs v0.12.0,  after require('bootstrap/nodejs.js') I'm getting:
  vm.Script.runInThisContext.call(
                            ^
TypeError: Cannot read property 'call' of undefined
    at nodeGlobalRequire (/.../closure/goog/bootstrap/nodejs.js:70:29)
    at Object.<anonymous> (/.../closure/goog/bootstrap/nodejs.js:78:1)

looks like vm.Script.runInThisContext no more exists, but vm.runInThisContext
possible fix:
// Declared here so it can be used to require base.js
function nodeGlobalRequire(file) {
  var runInThisContextFn = vm.runInThisContext ? vm.runInThisContext : vm.Script.runInThisContext;
  runInThisContextFn.call(global, fs.readFileSync(file), file);
}

I don't think this has anything to do with closure-library. Filed on wrong project?

@MatrixFrog closure-library has a node.js shim layer. the path to it is in the bug report?

I submitted a fix for this at https://github.com/google/closure-library/pull/413. I have no idea why the author used vm.Script.runInThisContext instead of vm.runInThisContext, maybe it was a node v0.11 thing

thanks (ok for nodejs v0.10.29, v0.12.0)

#413 is merged so re-closing.


Minor style modifications

👌

Codecov Report

Merging #1 into master will increase coverage by 0.02%.
The diff coverage is 100%.

@@            Coverage Diff             @@
##           master       #1      +/-   ##
==========================================
+ Coverage   97.34%   97.36%   +0.02%
==========================================
  Files           2        2
  Lines         376      379       +3
==========================================
+ Hits          366      369       +3
  Misses          5        5
  Partials        5        5

Impacted Files
Coverage Δ

hermes.go
77.77% <ø> (ø)
:arrow_up:

default.go
100% <100%> (ø)
:arrow_up:

Continue to review full report at Codecov.

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


1.1.4 incompatible with 1.20.1

Modrinth has 1.1.4 listed as compatible with Fabric 1.20.1, but when I updated, my game consistently crashed at launch from a mixin error with Server Translations API.

Same here

Same


Add Content-Type to metadataHeaders

HeadObject doesn't return a content-type without this change

Codecov Report

Merging #56 (877e345) into master (92d5d4a) will not change coverage.
The diff coverage is 100.00%.

@@           Coverage Diff           @@
##           master      #56   +/-   ##
=======================================
  Coverage   65.90%   65.90%
=======================================
  Files          28       28
  Lines        2241     2241
=======================================
  Hits         1477     1477
  Misses        530      530
  Partials      234      234

Impacted Files
Coverage Δ

gofakes3.go
64.90% <100.00%> (ø)

Continue to review full report at Codecov.

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


Post release automated changes for databox releases

Post release automated changes for azure-arm-databox

API change check
API changes are not detected in this pull request.


I like the idea of formally linking Issues that depend on one another together. This tool: https://github.com/marketplace/actions/dependent-issues seems like it could help. It automatically scans through all issues that are marked as dependencies of any issue and indicates whether they have been resolved.

Could be nice - looks like it checks and notifies on a regular CRON basis too


support for deprecated vendor in nuxt-edge build

Plugin fails for latest nuxt-edge release, since vendor is deprecated.
This will allow both nuxt and nuxt-edge to build.
You can read more here

Thanks @unr !

Cheers, glad to see this merged quickly. :)


Question: Handling multiple StorageStates

Hey guys! I've the following situation, I've a solution that needs to run scenarios with different Storage States, let's say for the sake of simplicity we have 'No Auth', 'User' and 'Admin'. I generate the json files without trouble in a setup project, but then when it comes to use them I can only reference one Storage State per project.
To solve similar issues in Selenium + cucumber I would use with per-scenario hooks, In not-BDD playwright a possible solution is doing something like test.use({ storageState: "some.json" }); to set each test.
I'm using POM and instantiating pages in a fixture. This will instantiate pages with the 'page' object which has the context having the same storageState for the whole project.
I've explored solutions, one possibility is instantiating lots of fixtures, but this causes a lot of code repetition and would have to resort to slight variations in steps doing the very same but with differently instantiated page objects, on top of being possible not very performant. Other way could be setting projects per state and filtering features smartly but I'd scramble the suite, the reports would look clumsy, and I may end up with maybe 7 or 8 projects * cross-browser. I'd be difficult to follow up.
I've tried some hacky ways because pw doesn't expose an API to manage storageState in runtime, I can clear the storageState but writing it proves more difficult. Regardless I feel like there has to be a better way.
Is there a way around this issue in playwright-bdd ?

Hey @matiasleandronunez !
In general, the approach should be the same as for non-bdd Playwright projects. So you said, you apply test.use({ storageState: "some.json" }); for each test. Could you provide an example, how do you do this? I assume, you don't wrap each test with describe and apply test.use. I think you apply it on the file level or have any other structure, e.g. no-auth tests, user tests, admin tests. Having that structure, you can rely on it to use correct storageState.
For example, if your follow directories structure:
tests/
  noauth/
  user/
  admin/

then you can apply state dynamically based on the current test-file path:
export const test = base.extend({
  storageState: async ({ }, use, testInfo) => {
    if (testInfo.file.includes('/user/')) {
       await use('user-state.json');
    } else if (testInfo.file.includes('/admin/')) {
       await use('admin-state.json');
    } else {
       await use({ cookies: [], origins: [] });
    }
  },
});

Or you can apply state by bdd tags:
@admin
Feature: admin dashboard

    Scenario: show admin dashboard

Fixture:
export const test = base.extend({
  storageState: async ({ $tags }, use, testInfo) => {
    if ($tags.file.includes('@user')) {
       await use('user-state.json');
    } else if ($tags.file.includes('@admin')) {
       await use('admin-state.json');
    } else {
       await use({ cookies: [], origins: [] });
    }
  },
});

Another approach is to have special step that instantiates page with needed storageState. E.g.
Feature: admin dashboard

    Scenario: show admin dashboard
    Given I'm logged-in as admin
    # ...

It requires more code, here is the example.

Thanks for your answer! I'll try the first approach as it is cleaner and let you know if it worked.

Used the tag approach, worked like a charm! Thanks. Leaving the change here in case it can help someone else:
https://github.com/matiasleandronunez/playwright_ts_with_bdd/pull/5/files

You are welcome. Thanks for sharing!

I also implemented the approach using tags, which caused an issue unfortunately, and stumbled across this question.
In my current setup, as mentioned in another thread, I am using a project for BDD test cases and another project using "plain" playwright tests: https://github.com/vitalets/playwright-bdd/issues/166.
The issue arises when executing the non-BDD tests and is related to following storageState fixture:
storageState: async ({ storageState, $tags, loggingService }, use) => {
    for (const tag of $tags) {
      if (tag.includes("@user:")) {
        const user = tag.split(":")[1];
        loggingService.logMessage(`detected annotation ${tag} => using storage state ${user}`);
        storageState = `${process.env["AUTH_FILE_DIR"]}/${user}.json`;
      }
    }
    await use(storageState);
  },

The error message then is similar to one already seen in the other context with parallel execution of BDD and non-BDD:
Error: Can't find testMeta for key ""
Is there an issue in initialization of the $tags fixture when not using BDD style, or are there some expected limitations known.

@helmutchecker I confirm that's a bug, thanks for raising.
Created an issue for that https://github.com/vitalets/playwright-bdd/issues/189
Will fix in the nearest release.


Add cocotb example

Add an example with cocotb and verilator

Okay, here's something to try:

Merge 'main' to your branch to pick up https://github.com/fvutils/pyhdl-if/blob/main/examples/call/cocotb/call_sv_bfm/init_venv.sh
Remove the virtual environment (rm -rf example_venv)
Re-create Python 3.12 and init_venv.sh
Active the virtual environment
Run the Verilator Makefile

I'm currently using Verilator 5.024 and release cocotb. I can see the example working with this combination.

@Alex-Mann , I think you mentioned that you were running Verilator using a container. Can you add a script showing what this looks like? I'd like to add a CI test for the example and leverage that approach.

@Alex-Mann , I think you mentioned that you were running Verilator using a container. Can you add a script showing what this looks like? I'd like to add a CI test for the example and leverage that approach.

Yes, working on this now and will submit shortly.
Can you confirm on your end you see these issues by doing each of these changes individually? Both of these changes are needed to get this verilator example to work on my end with the following versions:
(example_venv) root@ff06d3679b42:/work/pyhdl-if/examples/call/cocotb/call_sv_bfm# python --version
Python 3.12.4
(example_venv) root@ff06d3679b42:/work/pyhdl-if/examples/call/cocotb/call_sv_bfm# verilator --version
Verilator 5.027 devel rev v5.026-97-g37a400209

Issue 1
https://github.com/fvutils/pyhdl-if/pull/5/files#diff-bd7f23cebd88b3c9519bca91f2fd84661028679b864a51438a16904396247d12L21 --> change delay to back to zero and see this issue:
Registry Issue due to Timing Delay when using Verilator

(example_venv) root@ff06d3679b42:/work/pyhdl-if/examples/call/cocotb/call_sv_bfm# make
rm -f results.xml
"make" -f Makefile results.xml
make[1]: Entering directory '/work/pyhdl-if/examples/call/cocotb/call_sv_bfm'
rm -f results.xml
MODULE=call_sv_bfm TESTCASE= TOPLEVEL=call_sv_bfm TOPLEVEL_LANG=verilog \
         sim_build/Vtop
     -.--ns INFO     gpi                                ..mbed/gpi_embed.cpp:108  in set_program_name_in_venv        Using Python virtual environment interpreter at /work/pyhdl-if/examples/call/cocotb/call_sv_bfm/example_venv/bin/python
     -.--ns INFO     gpi                                ../gpi/GpiCommon.cpp:101  in gpi_print_registered_impl       VPI registered
     0.00ns INFO     cocotb                             Running on Verilator version 5.027 devel
     0.00ns INFO     cocotb                             Running tests with cocotb v1.9.0 from /work/pyhdl-if/examples/call/cocotb/call_sv_bfm/example_venv/lib/python3.12/site-packages/cocotb
     0.00ns INFO     cocotb                             Seeding Python random module with<PHONE_NUMBER>
     0.00ns INFO     cocotb.regression                  pytest not found, install it to enable better AssertionError messages
0.00s - Debugger warning: It seems that frozen modules are being used, which may
0.00s - make the debugger miss breakpoints. Please pass -Xfrozen_modules=off
0.00s - to python to disable frozen modules.
0.00s - Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation.
Waiting for debugger attach
     0.00ns INFO     cocotb.regression                  Found test call_sv_bfm.entry
     0.00ns INFO     cocotb.regression                  running entry (1/1)
entry
/work/pyhdl-if/examples/call/cocotb/call_sv_bfm/call_sv_bfm.py:27: RuntimeWarning: Timer setup with value 0, which might exhibit undefined behavior in some simulators
  await Timer(0, 'ns')
post-timeout
dpi_init
-Info: /work/pyhdl-if/examples/call/cocotb/call_sv_bfm/call_sv_bfm.sv:131: $dumpvar ignored, as Verilated without --trace
Path: call_sv_bfm.init_bfm.init
     0.00ns INFO     cocotb.regression                  entry failed
                                                        Traceback (most recent call last):
                                                          File "/work/pyhdl-if/examples/call/cocotb/call_sv_bfm/call_sv_bfm.py", line 30, in entry
                                                            init_bfm = rgy.findObj(r".*\.init_bfm", regex=True)
                                                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                                          File "/work/pyhdl-if/src/hdl_if/hdl_obj_rgy.py", line 56, in findObj
                                                            raise Exception("Multiple matches to pattern %s: %s" % (inst_name, str(ret)))
                                                        Exception: Multiple matches to pattern .*\.init_bfm: None
     0.00ns INFO     cocotb.regression                  **************************************************************************************
                                                        ** TEST                          STATUS  SIM TIME (ns)  REAL TIME (s)  RATIO (ns/s) **
                                                        **************************************************************************************
                                                        ** call_sv_bfm.entry              FAIL           0.00           0.01          0.08  **
                                                        **************************************************************************************
                                                        ** TESTS=1 PASS=0 FAIL=1 SKIP=0                  0.00           0.22          0.00  **
                                                        **************************************************************************************

- :0: Verilog $finish
make[1]: Leaving directory '/work/pyhdl-if/examples/call/cocotb/call_sv_bfm'

Issue 2
Put this change back: https://github.com/fvutils/pyhdl-if/pull/5/files#diff-bf3fbcdfc3b7df9a281bcb107da2ff83cfe6e2fcbdf79f211acf56b39ae6f19aL52
And you will see wrong return value (returns the Cocotb event obj):
Return value issue, returns event rather than the awaited integer value

(example_venv) root@ff06d3679b42:/work/pyhdl-if/examples/call/cocotb/call_sv_bfm# make
rm -f results.xml
"make" -f Makefile results.xml
make[1]: Entering directory '/work/pyhdl-if/examples/call/cocotb/call_sv_bfm'
rm -f results.xml
MODULE=call_sv_bfm TESTCASE= TOPLEVEL=call_sv_bfm TOPLEVEL_LANG=verilog \
         sim_build/Vtop
     -.--ns INFO     gpi                                ..mbed/gpi_embed.cpp:108  in set_program_name_in_venv        Using Python virtual environment interpreter at /work/pyhdl-if/examples/call/cocotb/call_sv_bfm/example_venv/bin/python
     -.--ns INFO     gpi                                ../gpi/GpiCommon.cpp:101  in gpi_print_registered_impl       VPI registered
     0.00ns INFO     cocotb                             Running on Verilator version 5.027 devel
     0.00ns INFO     cocotb                             Running tests with cocotb v1.9.0 from /work/pyhdl-if/examples/call/cocotb/call_sv_bfm/example_venv/lib/python3.12/site-packages/cocotb
     0.00ns INFO     cocotb                             Seeding Python random module with<PHONE_NUMBER>
     0.00ns INFO     cocotb.regression                  pytest not found, install it to enable better AssertionError messages
0.00s - Debugger warning: It seems that frozen modules are being used, which may
0.00s - make the debugger miss breakpoints. Please pass -Xfrozen_modules=off
0.00s - to python to disable frozen modules.
0.00s - Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation.
Waiting for debugger attach
     0.00ns INFO     cocotb.regression                  Found test call_sv_bfm.entry
     0.00ns INFO     cocotb.regression                  running entry (1/1)
entry
dpi_init
-Info: /work/pyhdl-if/examples/call/cocotb/call_sv_bfm/call_sv_bfm.sv:131: $dumpvar ignored, as Verilated without --trace
Path: call_sv_bfm.init_bfm.init
post-timeout
reset: 1
reset: 1
reset: 0
break on this line
[Py] writing: 1
write
--> write
<-- write
--> read
<-- read (addr,data): 0,1
[Py] readback: <<Event at 0xffffaea6d0d0>.wait() at 0xffffaea678d0> # --------------- ISSUE ---------------
   210.00ns INFO     cocotb.regression                  entry failed
                                                        Traceback (most recent call last):
                                                          File "/work/pyhdl-if/examples/call/cocotb/call_sv_bfm/call_sv_bfm.py", line 49, in entry
                                                            assert wr_val == rd
                                                                   ^^^^^^^^^^^^
                                                        AssertionError
   210.00ns INFO     cocotb.regression                  **************************************************************************************
                                                        ** TEST                          STATUS  SIM TIME (ns)  REAL TIME (s)  RATIO (ns/s) **
                                                        **************************************************************************************
                                                        ** call_sv_bfm.entry              FAIL         210.00           0.02      13543.81  **
                                                        **************************************************************************************
                                                        ** TESTS=1 PASS=0 FAIL=1 SKIP=0                210.00           0.22        962.50  **
                                                        **************************************************************************************

- :0: Verilog $finish
make[1]: Leaving directory '/work/pyhdl-if/examples/call/cocotb/call_sv_bfm'

I can confirm that both changes are required to get the example working with Verilator. The change in call_proxy_dpi is required for all simulators. The change from 0-delay to 1-ns delay is Verilator specific, but works on all simulators.

I've pushed updates with the Dockerfile and flow, there are still some opens that I want to fix, namely:

[ ] Pin Docker image to specific python version tag (like Python 3.12.4)
[ ] Figure out a better place for this... maybe in the Makefile?
[ ] Put the generate py IF in the proper spot... also in the Makefile?

I'm open to your ideas here @mballance

Thanks for all the work on this, @Alex-Mann. There are a few things I'd like to continue poking at / refining, but this is certainly in a state where we can merge it and finish up the changes on 'main'. Alternatively, I think I can fork your branch and suggest changes there. Do you have a preferred workflow?

I'm good to merge this and then continue to refine it.
Being able to reproduce dev'p environment and results easily is important to me and Docker helps a lot with that.


RenderAsBody: avoid duplicate body in DOM

This solution is the only one that I found which does not flicker on refresh and does not result in having two body tags in the DOM.

Searching 1228 files for "document.AddEventListener("DOMContentLoaded", false, func("
19 matches across 19 files

I have a lot of experience doing this, and I will point out a "gotcha" that you may run into with this.
Depending on packages you import, and what variables you have defined at package level, you may get into a situation where main executes so late, that DOMContentLoading event gets fired before the listener is added, so the code inside never executes.
It can happen if you (or a package you import) have package-level variables such as:
var t = template.Must(template.New("").Parse(`...`)

Or some regexp.MustCompile (especially because of https://github.com/gopherjs/gopherjs/issues/390) package-level variables.
So, I would be careful with this solution.
I have not yet found a bullet-proof way to defer execution after the DOM body exists in situations where package-level variables may cause main to run "too late". I welcome suggestions for how to do better.

@shurcooL I've changed it a bit, please take another look.

That looks a lot like a solution that I was considering. I think it will work really well, and it will resolve the issue, so LGTM. I have one minor question I'll post inline.
Because this snippet is something I use so often, I'm still interested in looking for ways to make it better, for example, by making it shorter.

I can do some local testing in a bit to confirm it works.

I tested it out locally and it worked as expected.

LGTM


Review and change response codes in code with Gitlab API calls

          I would reserve 500 for situations we did not anticipate. It's not a fault in the backend service that the status badge can't be loaded. In the end it's a user error. The backend handles it, it does not fail in an unforeseen way (e.i. 500).

Originally posted by @amolenaar in https://github.com/DSD-DBS/capella-collab-manager/pull/665#discussion_r1154598380
This applies to all endpoints which use a connection to Git/Gitlab.

I think a couple of 4xx codes can be used instead of 500 (Internal Server Error).
Status code 500 ius reserved for unexpected errorous conditions.
The situations we encounter (expired credentials, invalid urls (= user input), etc.) are situations we anticipate. Situations a client can remedy. Hence we should return 4xx error codes.

403: You can try, but you do not have access
404: (Not Found) - If a resource cannot  be found. Can also be used if a resource can not be found downstream.
409: (Conflict) - Is appropriate IMHO, since the request cannot be fulfilled due to a conflict with the actual state of the system.
422: (Unprocessable Content](https://www.rfc-editor.org/rfc/rfc9110.html#name-422-unprocessable-content)  When we somehow cannot fulfill a user request (e.g. due to a "broken" downstream system).


Add option for creating interactive console connected to the notebook kernel

It would be a killer feature to have the functionality (which is already available in Jupyter Lab) to create interactive Python consoles connected to specific notebook kernels. The main usecase is to be able to work interactively based on the state of a notebook without having to tinker with the notebook itself.
I am speaking of this feature (from Jupyter lab)
You can connect a code console to a notebook kernel to have a log of computations done in the kernel, in the order in which they were done. The attached code console also provides a place to interactively inspect kernel state without changing the notebook. Right-click on a notebook and select “New Console for Notebook”:
(from the official documentation)
EDIT.
This may be related to #1278 , but I think the two requests are slightly different (in this case setting a breakpoint should not be needed).

Thanks for the suggestion. Does https://github.com/microsoft/vscode-jupyter/issues/4573 cover your use case?

Hmm, I must say I am nost sure. I am not familiar with the idea of "scratchpad" notebooks, but I think that the feature described there is more complicated than what I am suggesting. Here the idea is not to have a parallel "scratchpad" notebook (which would keep track of code in cells/chunks etc.) but just to have an ability to launch an IPython shell (within VS Code) which is binded to the kernel of a specific notebook (so all objects defined in the notebook are accessible there etc.).
My hunch is that it could be realized by spawning a Python Interactive window connected to a specific kernel, but if for some reason it may be only implemented via some notebook-like interface then I think the scratchpad would do too (although it still seems to me a bit of an overkill in regard to my particular usecase).
But whatever you decide to do about it thanks for the great work! You made data analysis with Python really great :)

Thanks for the feedback. I think #4573 at least comes close to what you're looking for. Once we start moving more seriously along that path, we will end up with something that can work for your scenario.


[Feature Request] Add a title containing inline markdown to the block-level custom containers

Checklist

[X] I searched existing issues and no one else requests similar feature.
[X] I think that 25%+ users are positive towards this feature.

Describe the feature
I'd like to have the possibility to add a title containing inline markdown elements to a custom container block.
Something like
::: Theorem **Pythagorean** theorem
Theorem statement
:::

That should be rendered as

Pythagorean theorem

Theorem statement

Maybe we can extend the return values allowed for the validate configuration parameter, so to include a dictionary containing the string that should be parsed as inline markdown, the name of block the result should be inserted into and the HTML tag to be used to render that block.
In that way, the extension user has the freedom to choose the syntax he wants to adopt.
If you like this idea, I can send a PR implementing this feature.
Additional context
No response

I think this is totally fine.

This could be easily done by calling md.renderInline, see https://github.com/vuepress/ecosystem/pull/274 as an example, so I won't build a new option for this.


"RotatingPlane" is called "RotatingPlain" in code

In the documentation the loading animation is called "RotatingPlane", but in the code it is misspelled "(SpinKit)RotatingPlain".

I clicked the wrong link on the documentation, seems like I'm at the CSS version ;)


Datums / Datum Sets

I think I am at a point with the storage layer where I/we need to start thinking about the information we will store for datums / datum sets. I will go ahead and layout the current storage for datums in Pachyderm and identify the problems. Then, I will talk about what we think we will do moving forward and some challenges/ideas that have come up over the course of the 1.8 improvements and the storage layer design process.
Current Model:
Each datum is downloaded, processed, and uploaded independently of other datums. The results of each datum are stored as two objects in object storage (hashtree and data). Each datum is identified by a hash created from information about the inputs and pipeline. We upload the hashtree to object storage with a tag consisting of this hash. These tags are used when determining whether we can skip a datum, which provides processing incrementality. The merge process prior to 1.8 would always merge these hashtrees from scratch for every job, which for obvious reasons was not providing the desired incrementality for workloads with expensive merges or lots of small jobs. With 1.8, we improved the merge process and implemented an optimization that would re-use the prior hashtree in cases where the workload was additive (only new datums added). This is nice, but it still means we have to re-merge from scratch when a datum needs to be removed from the parent commit's hashtree.
Moving Forward:
We are intending to address this shortcoming by adding information in the storage layer about what datums contributed what content to what files. The obvious solution seems to be a reverse index, a mapping from some datum identifier to a set of bytes in a file. Having this mapping should in theory make it possible to remove old datums and insert new ones. The question though is how do we represent a datum in the reverse index and quickly find which bytes need to be removed (the adding bytes part is easier because it is just merging in the new stuff). There is also a scalability challenge with needing to go to object storage for every datum during every job to check if it can be skipped or not (there is currently an optimization where the datums that can be skipped are serialized into an object, but it only applies to datums that were processed in a successful job).
Challenges/Ideas:

The reverse index can get very large for certain workloads. In the worst case, n x m entries where n is number of datums and m is number of output files. So, if we want to store a set of entries for each file that contains enough information to know what bytes a set of datums contributed, then we need to be very careful about the size of each entry. What I have proposed as of now is that we have an ordered list of entries that each contain an id and size of type int64. This means that each entry is 16 bytes, which means that we could handle a lot of them in most cases. The challenge with this is figuring out a mapping from the id back to a datum. I think there might be an alternative model for this, but I don't know what it is yet.
Figuring out if we want a consistent ordering of the output, and if so, what that ordering is. If we want output data to have the same order regardless of the order in which its inputs were created (multiple vs single commit, different orders for multiple commits), then I think our reverse index needs to capture order information. What has been proposed up to this point is that the output order should correspond with the lexicographical order of the input datums (which is a little unclear for datums that consist of multiple inputs).
We don't want to store two objects per datum if we have a lot of datums with small output, so we need to figure out some way to batch them. It seems to make sense to group them into datum sets (what we call chunks now), but what that means in terms of incremental processing and merging is pretty vague at this point and has the extra challenge that the current implementation (called chunks) moves the boundaries as datums are added/removed such that a datum can be moved to different chunks across jobs. The way I was thinking of it is that we could think of datum sets as sort of the checkpoints in a job, such that a user could effectively control batching of their data (if they know they have a lot of quick processing/small output datums) through configuring the datum sets. Users with workloads with long processing/large datums would just decrease the number of datums in a datum set.

The challenge with this is figuring out a mapping from the id back to a datum. I think there might be an alternative model for this, but I don't know what it is yet.

I was thinking that we'd identify the datums with a hash of the filenames, we could probably pack those into an int64, not sure if that would be as collision resistant as we need, but it might get close.

Figuring out if we want a consistent ordering of the output, and if so, what that ordering is.

I think we want this for a few reasons, 1) I think it's a good feature, it makes support for things like timeseries workloads a lot nicer. But possibly more important is 2) I think we need this for our deduplication to be as robust as we want it to be. If things aren't merging in a consistent order we're going to start getting into situations where we're storing multiple copies of the same data ordered differently.

(which is a little unclear for datums that consist of multiple inputs).

We probably just order based on the order the inputs appear. I.e. compare first inputs first, if they're the same compare second inputs, etc. Or does that not work?

but what that means in terms of incremental processing and merging is pretty vague

It seems like the reverse index helps us quite a bit with this, since we no longer need to worry about having an output that we want to use except for having data from a few datums that have changed. We can just merge and filter out the datums we don't want.

I was thinking that we'd identify the datums with a hash of the filenames, we could probably pack those into an int64, not sure if that would be as collision resistant as we need, but it might get close.

After talking with Matt a bit about this, I think I am convinced that we do not want to try and fit these identifiers into an int64. We probably just want to go with a string for the file path (or some concatenation for multiple inputs) for the datum. This can still get pretty large for map-reduce jobs, but I think it realistically will never approach worst-case performance (n x m) and we can also include information about this under some best practices guide that will talk about batching / fitting more work into each datum such that the number of datums can remain smallish while still mapping to a large number of output files.

I think we want this for a few reasons, 1) I think it's a good feature, it makes support for things like timeseries workloads a lot nicer. But possibly more important is 2) I think we need this for our deduplication to be as robust as we want it to be. If things aren't merging in a consistent order we're going to start getting into situations where we're storing multiple copies of the same data ordered differently.

k

It seems like the reverse index helps us quite a bit with this, since we no longer need to worry about having an output that we want to use except for having data from a few datums that have changed. We can just merge and filter out the datums we don't want.

The part that is vague is how to efficiently figure out what needs to be removed and added, not the actual adding/removing process.

Thoughts on datum sets and propagating diffs / incrementality
New Stuff:

Each commit will have an associated diff file set.
Stats will be replaced with a datum file set (which subsumes the stats functionality).

Notes about terminology:

Full file sets are full snapshots of a file system at a particular repo and branch.
Base file sets are the full file sets (normal or datum) associated with the parent commit of the commit being processed.
Datum file sets are associated with output commits.
In general, some of this terminology could be improved, but I think it is workable right now.

Diff File Set:

When a commit is finished, the data and operations associated with that commit will be recorded in the format of a diff file set. The diff file set is formed by merging all of the data and operations for the commit. This diff file set will be merged into the base file set to create the full file set for the finished commit. Both the diff and full file set will have semantic objects in object storage.

Datum File Set:

When a job is finished, the data and operations associated with each of the processed datums will be merged into the datum file set. The datum file set is structured in such a way to provide a direct mapping from a datum to its input and output as well as some additional metadata.

Format:
/datum-path-1/meta
  	     /pfs/in
		 /out
/datum-path-2/meta
	     /pfs/in
		 /out
/datum-path-3/meta
	     /pfs/in
		 /out

The meta file will store additional metadata about the datum (hash, stats, etc.). It may make sense for this to be a protocol buffer if we expect this to contain low volume data mainly because it would be easy to add new metadata later.

Computing datums to process/merge:
The datums associated with a job are the paths that match a glob pattern in the full file set associated with the commit that is used as input (keeping it simple right now with one input). A simple way to compute these paths is to read the input commit full file set and keep track of which paths match. If instead we use the input commit diff file set, the operation would be matching the glob pattern to a prefix of the paths in the diff file set to determine which datums need to be processed (sometimes just removed) for the job. This information is all we will need in terms of creating datum sets.
How this could play out in a job:
Processing:

The master creates datum sets based on ranges of datums found in the diff file set.
Workers claim these datum sets and do the processing (download datums from the input commit full file set) and merge the results into the normal and datum file set for the datum set. The normal file set for the datum set will be a diff for the datums within the datum set. There are three particular cases that need to be handled here:

Datum added: Worker processes/merges the datum and marks all of the output files in the normal and datum file set with the append operation.

This case applies when a datum is found in the input commit full file set, but not the base datum file set.

Datum modified: Similar to when a datum is added, but also reads the output from the base datum file set and adds the deletion operations for the files that were removed.

This case applies when a datum is found in the input commit full file set, and the base datum file set (and the hash is different).

Datum removed: Just the latter part of the datum modified case.

This case applies when a datum has been deleted in the input commit full file set, and exists in the base datum file set.

Merging:

As datums are processed, their results will be merged into a normal and datum file set associated with their respective datum sets.
At the end of the job, each datum set's normal file set will be merged into a diff file set for the output commit (this will be used downstream similarly to how we use the diff file set associated with the input commit). Then, the diff file set and datum file sets will be merged into the respective base file sets (it may make sense to also have a diff datum file set, but I am a little worried that we might already be pushing the storage a bit, particularly on workloads where there will not be much deduplication between the normal and datum file sets).

Random Notes:

Directory hashes will be computed at read time (for jobs we will take advantage of the diffs to not have to compute hashes for all of the directories). Also, directory size will be computed at read time (probably makes sense to have directory size not be computed on basic list operations).
We will store a datum's hash in the meta file. This will be used by the following jobs to determine if a datum needs to get processed or not. It will be updated when a datum gets modified.

Side note about the above post:
This model might actually let us bring back intra-datum incrementality in a sensible way. This model gives us a clear notion of the previous version of a datum (specifically just the immediately previous). This of course hinges on the datum path being the identifier for a datum across jobs.

A few thoughts and clarifications:
There's nothing special about the format of diff file sets, they're simply file sets that are understood to have a different meaning, is that correct?
This leaves out one of the trickiest parts of the processing step which is how you find datums which weren't added in this commit but weren't processed in the commit in which they were added due to processing failures (or the pipeline not existing when the commit was created). This seems like it's going to be pretty similar to what's needed to cross new datums in one input with old datums in another.
I'm not sure I understand what you're talking about with GlobFile needing to support a notion of matching prefixes, don't globs already allow you to match prefixes?

I think we should try to make datum iteration a streaming operation instead of reading in the full set of file infos. For crosses, the iterators should cache file infos themselves.

This is definitely necessary, in fact it needs to be a paginated streaming operation for it to work, so that works don't have to start at the beginning of the stream each time.

There's nothing special about the format of diff file sets, they're simply file sets that are understood to have a different meaning, is that correct?

Correct

This leaves out one of the trickiest parts of the processing step which is how you find datums which weren't added in this commit but weren't processed in the commit in which they were added due to processing failures (or the pipeline not existing when the commit was created). This seems like it's going to be pretty similar to what's needed to cross new datums in one input with old datums in another.

I think this is conceptually pretty simple. Basically, for each of the pfs inputs you need to walk backwards in the commit chain starting at the input commit until you reach the commit that matches the one associated with the most recent successful job. Then, make a merge call on all of the diff file sets associated with the commits encountered. If you mean tricky in the sense that deciding how far to go back before just using the full file set is tricky, then that may be true. The pipeline not existing when the commit was created is an easy one because the first job should just read the full file set from the input commits anyways.

I'm not sure I understand what you're talking about with GlobFile needing to support a notion of matching prefixes, don't globs already allow you to match prefixes?

This is actually not necessary. I was thinking we could be in a situation where we would have a file path in a diff file set that was under a directory without the corresponding directory entry. If that was the case, you would have to match the directory in the file path (if the directory matched the glob pattern). So, if you just had the file path /d1/f1 and your glob pattern was /*, then you would need to match the prefix /d1.

This is definitely necessary, in fact it needs to be a paginated streaming operation for it to work, so that works don't have to start at the beginning of the stream each time.

I assume you mean workers? I was thinking they would operate on path ranges, not some arbitrary index. A worker's iterator would index into the diff file set based on this range. Although, I still see the use case for pagination in terms of Dashboard stuff.

I think this is conceptually pretty simple. Basically, for each of the pfs inputs you need to walk backwards in the commit chain starting at the input commit until you reach the commit that matches the one associated with the most recent successful job. Then, make a merge call on all of the diff file sets associated with the commits encountered. If you mean tricky in the sense that deciding how far to go back before just using the full file set is tricky, then that may be true. The pipeline not existing when the commit was created is an easy one because the first job should just read the full file set from the input commits anyways.

This makes sense, thanks for clarifying. Is there a compelling reason to merge then iterate rather than iterating the different diffs in parallel?

I assume you mean workers? I was thinking they would operate on path ranges, not some arbitrary index. A worker's iterator would index into the diff file set based on this range. Although, I still see the use case for pagination in terms of Dashboard stuff.

Yup, definitely meant workers. Operating on path ranges makes sense, I think it's likely still worthwhile to have numerical pagination, since it's useful for dash and other clients as you mention. And also probably would be useful for computing those ranges.

Also worth mentioning, I think this basically brings us full circle on greedy vs. lazy merges. Writing out a diff file set is effectively deferring the merge until a later point. But it has a lot of added value here because in a lot of cases you don't want to read the full dataset, you just want to read the diff. One thing that I would like to see clarified a bit, that you're probably already working on, is what does the process for starting a merge look like. I think this is probably going to be similar to, or maybe even the same as the "symbolic merge" that we had talked about before.

Also worth mentioning, I think this basically brings us full circle on greedy vs. lazy merges. Writing out a diff file set is effectively deferring the merge until a later point. But it has a lot of added value here because in a lot of cases you don't want to read the full dataset, you just want to read the diff.

I don't think having a notion of a diff file set is quite the same as the lazy merge we originally had in mind. We are still merging the full file set eagerly, but we are keeping around a diff for each commit. What those diffs mean and how they are used will depend on the pipelines that have the branch as input. Merging them only becomes relevant when failed/killed jobs are involved. The primary use I had in mind for the diff file set was indicating what datums to process and what needs to be deleted, then using that information to extract the full information from the full file set (although there are some cases where this is unnecessary).

One thing that I would like to see clarified a bit, that you're probably already working on, is what does the process for starting a merge look like. I think this is probably going to be similar to, or maybe even the same as the "symbolic merge" that we had talked about before.

The symbolic merge is tricky because we are operating on object storage. I have been thinking in terms of just semantic paths, with the common case being to merge everything under a semantic prefix (everything under a commit prefix for example).

I think it's the same as a lazy merge in the sense that writing out what to merge and the process of merging are separate, and thus can in theory be delayed as long as we'd like to. In practice the plan right now is to start that merge process immediately, but I suspect that will change at some point soon and I think we're pretty well setup to do so.

the common case being to merge everything under a semantic prefix (everything under a commit prefix for example).

It seems like just recording that information, what you want to merge, in a database or etcd would effectively be a symbolic merge. Since it records what to merge without doing the merge. And I think that's basically what we had talked about since you need to have some method of communicating to workers what you want to merge and keep track of their progress on it.


[cxx-interop] Re-enable C++ stdlib overlay on Linux

It was previously reverted because it didn't work on CentOS 7. Now it works.

@swift-ci please smoke test

@swift-ci please smoke test


Add ability to catch uncaught exeptions

For some reason there are errors happening that arent being logged

Filesystem logger, console log, or both?


How to post an image

Hello
How can I post my picture to my linkedin wall with this API ?
I use 'submitted-image-url' But it does not work properly
Thanks

Hello
What does the LinkedIn docs say?

Linkedin Docs does not say much info about image
I want to know that when Have you ever tried this API to post a image ?

I have not tried it, no. Looking at the docs and it seams pretty straight forward, doesn't it?
{
  "comment": "Check out developer.linkedin.com!",
  "content": {
    "title": "LinkedIn Developers Resources",
    "description": "Leverage LinkedIn's APIs to maximize engagement",
    "submitted-url": "https://developer.linkedin.com",
    "submitted-image-url": "https://example.com/logo.png"
  },
  "visibility": {
    "code": "anyone"
  }
}

Im not sure why you run into issue, but it is not related to the client.

Yes I use this code and it will post image but the image is just a link and just is a preview of that image.
The image is not complete ( cropped ) and you should click on that link ( https://example.com/logo.png ) to see full image on that place.

Im not sure to be honest. Talk to LinkedIn support.
Im closing this because it is not client related.

Where is linkedin support ?

https://developer.linkedin.com/support

You mean I should ask this question on stackoverflow ? because linkedin does not have support for development on their site

Yeah, wherever. I cannot give you support for LinkedIn API. In the same way that you cannot give me support on Googles APIs. (We have nothing todo with them). If LinkedIn recommends you Stackoverflow, then sure. Use it =)
I can, however, do my best in giving you support on this open source linkedin api client, but your issue is not related to the client.


[Feature]: Make CalendarDayButton to expose it's assigned date

Options:

add it as a Property
use the Tag-property for it

Discussed in https://github.com/AvaloniaUI/Avalonia/discussions/13642

Originally posted by alessandrofrancesconi November 17, 2023
I have a <Calendar> and I need to highlight particular days.
For example, currently I have this UI (today is 17th):

While I need to re-color some cells depending on some logic:

thanks for the help!

I think this issue can be closed, as original author already got answer with multiple possible solutions. I just sent one another alternative how to do it.

Turns out DataContext is actually the assigned date. However when used in a converter the DataContext can be MainViewMOdel when the control is not loaded yet. So make sure to use a safe-cast.


Problem detected while loading the contents of the Prefab file: 'Assets/MRTK.Tutorials.GettingStarted/Prefabs/PressableCylinderButton.prefab'.

I am following the training to Hololens in "https://learn.microsoft.com/en-us/training/modules/get-started-with-object-interaction/", now i am in the buttons, and i have this error: Problem detected while loading the contents of the Prefab file: 'Assets/MRTK.Tutorials.GettingStarted/Prefabs/PressableCylinderButton.prefab'.
Steps to reproduce the behavior:

After importing the MRTK package 3.0.0, go to: Assets -> MRTK.Tutorials.GettingStarted -> Prefabs
Add "PressableCylinderButton" to the scene
See error

I thought there were supposed to be no problems with prefabs, was I missing something?

Unity Version 2023.1.12f1

MRTK Version MRTK v3.0.0 GA

HoloLens 2

Hi @CassiaVasconcelos, thanks for logging this. Could you confirm if you have the org.mixedrealitytoolkit.uxcomponents.noncanvas package in the project?

Thank you! I don't have "no-canvas" just uxcomponentes:

I didn't install it before because the project setup tutorial didn't indicate no-canvas (https://learn.microsoft.com/en-us/events/mixed-reality-dev-days/getting-started-with-your-first-mrtk3-project)

I just installed no-canvas, and I did "Reimport all" (Assets->Reimport All) I no longer have the import error, but also the object does not appear in the scene as a button and i get some initial errors (but they disappear when I clear)

@CassiaVasconcelos Ah that video might not align perfectly with these tutorials. I'd recommend going through the introduction to MRTK and object placement tutorials to make sure everything is fully set up and ready for the getting started with object interaction tutorial.
Those errors about the controller model prefabs are unfortunately expected and they won't affect anything. The button should look something like this:

It might prompt you to import TextMeshPro in order to show the text. If it helps, the final result of all of these tutorials can be found here for comparison.

@marlenaklein-msft  I was following the tutorial for the first time and there were several problems importing the 3.0 package, so I had been following the video just for the initial setup. I tried again now to create a new project and everything went well.
I really appreciate your time.
Thank you so much.

Great, glad to hear it! Let us know if you run into any other issues.


Adds Quantile Discretizer

Description of Changes

Adds Quantile Discretization for NumericalFeatures
Includes

[x] Code changes
[x] Tests
[ ] Documentation

Initially made this using IntVector instead of RealVector for the numQuantiles, but for some reason kept getting odd and opaque errors of the following type:
[error]   last tree to typer: Select(Select(Select(Ident(breeze), linalg), DenseVector), fill$mIc$sp)
[error]        tree position: line 44 of /Users/will/oss/doddle-model/src/main/scala/io/picnicml/doddlemodel/preprocessing/QuantileDiscretizer.scala
[error]             tree tpe: (size: Int, v: () => Int, implicit evidence$5: scala.reflect.ClassTag[Int])breeze.linalg.DenseVector[Int]
[error]               symbol: method fill$mIc$sp in object DenseVector
[error]    symbol definition: def fill$mIc$sp(size: Int, v: () => Int, implicit evidence$5: scala.reflect.ClassTag[Int]): breeze.linalg.DenseVector[Int] (a MethodSymbol)
[error]       symbol package: breeze.linalg
[error]        symbol owners: method fill$mIc$sp -> object DenseVector
[error]            call site: method splitEvenly in object QuantileDiscretizer in package preprocessing

@inejc I think the new version should address all of your comments! Just changing to DenseVector[Int] still had me running into that issue, but I don't have any particular insights that would allow me to debug so lmk if you can figure anything out.

@inejc Resolved all but one, let me know if it is a sticking point and I will change.


Moto generates incorrect certificate id for IoT Core

moto version: 1.3.6
boto3 version: 1.14.60
Moto is installed via pipenv and used with pytest.
This is where moto generates the IoT certificate id:
https://github.com/spulec/moto/blob/master/moto/iot/models.py#L133
AWS actually generates this certificate ID by getting the SHA256 of the certificate in DER format. I've found this via https://stackoverflow.com/questions/55847788/how-does-aws-iot-generate-a-certificate-id and confirmed with an AWS support ticket.
Part of our app relies on being able to deterministically generate the certificate ID, which currently is not possible to test with moto.
Please let me know what you think, I'd be more than happy to submit a match for this before the end of the week if you agree.

Sounds good to me @BenD10 - looking forward to a PR! Let me know if you need any help with this.

This is now part of moto >= 1.3.16.dev25