[BUG]: Resiliency: Occasional failure unmounting Unity volume for raw block devices via iSCSI

Bug Description
This issue was discovered running longevity on Unity for CSM Resiliency (est. 20%-30% of the time).  Longevity testing is a looped execution of the integration tests.  The integration tests were run regularly in a single, non-looped, iteration with no failures during development in Q1.
Expected behavior:
After inducing an error condition on a node, the managed pods and resources are supposed to be removed and recreated on a healthy node.
Observed behavior:
Occasionally, the unmount operation of a Unity raw block volume attached via iSCSI fails. This has been detected during longevity testing after running this scenario 10 times
Workaround:
See item 2 in the design limitations [known design limitations|https://dell.github.io/csm-docs/docs/resiliency/design/]
The recommended workaround is for the administrator to reboot the affected node.
Logs
NodeUnstageVolume: REP 0621: rpc error: code = Internal desc = runid=621 Volume podmonvol-xxxxxx-iSCSI-apmnnnnnnnnnnn-sv_61383 has been mounted outside the provided target path /var/lib/kubelet/plugins/kubernetes.io/csi/volumeDevices/staging/podmonvol-nnnnnnnncb"
level=error msg="NodeUnstageVolume failed:
level=error msg="Could not Unmount private block device.
level=info msg="Couldn't completely cleanup node- taint not removed- cleanup will be retried, or a manual reboot is advised"
Screenshots
No response
Additional Environment Information
No response
Steps to Reproduce

Unity raw volumes mounts via iSCSI on k8s node
Node failure in supported scenario causes node to be cordoned and resources migration
--> PV unmount fails with "device is busy" after pod has been deleted

Expected Behavior
PV should be unmounted successfully after pod has been deleted
CSM Driver(s)
CSI Driver for Unity 2.2
Installation Type
Helm
Container Storage Modules Enabled
Resiliency Podmon 1.1
Container Orchestrator
Kubernetes 1.23
Operating System
CentOS 7

Root cause:
After running several failovers for several hours, we observed that there are couple of staled loopback devices left on mountpoint of iSCSI block volume with Unity arrays. This possibly happening due to some timing when kublet is not cleaning some pods properly, even though those pods are not available or visible to user namespace.
Solution:
When Resiliency cleanup a node and not able to delete some mount point, and if those mount point are for block volume with Unity. We look for staled loopbackdevices for those mount point, if those are there, delete those staled loopbackdevices and unmount those mount. This way Resiliency is able to complete the cleanup and remove the taints from the node.


Add a free-form summary function to describe a dataframe (in the vein of R)

First cut. Please let me know your thoughts and thanks again to @jreback for teaching me.
Looks like this
                A_cat            B_str                C_bool           D_num  \
0            count=24         count=24              count=24        count=24
1       cardinality=2    cardinality=4              mean=0.5         mean=12
2  value:foo=16 (67%)  value:d=6 (25%)             std=0.511        std=7.07
3   value:bar=8 (33%)  value:b=6 (25%)         min:p47=False         min=0.5
4                      value:c=6 (25%)           median=True        p25=6.25
5                      value:a=6 (25%)          p53:max=True       median=12
6                                              cardinality=2        p75=17.8
7                                        value:True=12 (50%)        max=23.5
8                                       value:False=12 (50%)  cardinality=24

          E_regular
0          count=24
1         mean=4.17
2          std=3.14
3         min:p65=2
4         p70:p82=8
5         p87:max=9
6     cardinality=3
7  value:2=16 (67%)
8

for input
df = pd.DataFrame({'A_cat': pd.Categorical(['foo', 'foo', 'bar'] * 8),
                        'B_str': ['a', 'b', 'c', 'd'] * 6,
                        'C_bool': [True] * 12 + [False] * 12,
                        'D_num': np.arange(24.) + .5,
                        'E_regular': [9,8,2,2,2,2]*4,
                        })

[ ] closes #12460

@vii this is awesome! I would love to use pandas more if they have some of the functions that R has. Can you make the formatting something like this.
       E_regular
count       :      24
mean        :    4.17
std         :    3.14
min-p65     :       2
p70-p82     :       8
p87-max     :       9
cardinality :       3
value-2     : 16(67%)

closing. I think this is a nice idea. but would need a bit more flexiblity & examples to be accepted.


connecting to server failed

It has been working for a while, but after I rebooted my client computer(didn't change anything on client and server),  dnscrypt-proxy can't connect to server any more, only got the following output,
[NOTICE] Starting dnscrypt-proxy 1.6.0
[INFO] Generating a new session key pair
[INFO] Done
[INFO] Server certificate #1517516072 received
[INFO] This certificate has not been activated yet
[WARNING] Unsupported certificate version
[ERROR] No useable certificates found
[INFO] Refetching server certificates
[INFO] Server certificate #1517516072 received
[INFO] This certificate has not been activated yet
[WARNING] Unsupported certificate version
[ERROR] No useable certificates found
[INFO] Refetching server certificates
[INFO] Server certificate #1517516072 received
[INFO] This certificate has not been activated yet
any help will be greatly appreciated.

i think dnscrypt-proxy 1.6.0, not supported anymore
get new dnscrypt-proxy 2

I finally figure it out, it's because the client's timezone is different with the server's timezone, making them the same solves the problem.


Settings progress bar is too eager to appear

Notice how the progress bar is too eager to appear just after I type any character:
https://github.com/microsoft/vscode/assets/22350/02b18f63-c4bb-4a6b-aa9e-0db9bbe2f534
Showing the progress bar should have a much looser debounce, like 500ms, maybe even 750ms.

Hi, I'm new to contributing. Would this be a good first issue I could work on?


Topic/add tutorial

Moved the guidelines and tutorial for vehicle services from Velocitas.docs to this repo.
Updated references according to the project separation.

Hi guys,
would be great if you please could

review this,
possibly fix found typos and obvious errors, and
merge this.

Many thanks!


Leftover issues from Create Military Feature Geodatabase/Template Toolbox PR review

A few leftover items from the #165 PR review to be completed after the merge:
Major/Significant Issues:

[x] Subtype tool/step is not setting domains correctly - see for more info: https://github.com/Esri/military-features-data/pull/169#issuecomment-159670627 (Update: I believe this is not fixed, but haven't personally tested)
[x] Add Readme steps for (probably manual) remaining missing steps to import metadata from previous GDB and enable editor tracking on all the feature classes (created by, time created, etc. fields).

Non-major issues:

[ ] A little more information/arcpy.AddMessage about what step/featureclass/field is being worked on so when there is bad input the user knows what is incorrect - more exception handling for this same reason
[ ] Method addAField should add an exception handler that prints the bad field and allows the tool to continue - as the code works now a single bad field disrupts/ends the entire process, not allowing you to find multiple bad fields in your data at once.
[ ] Most of the time in this very long (>30 mins+) tool run is spent in arcpy.AddField_management calls, we should investigate if 30 secs for each call to this tool is normal or if another approach (ex. adding all fields at once) would work better
[ ] This code is very hard to follow and maintain because it uses line[X] through instead of actual well-described variable names - please change this
[ ] AddField Should check that selected domain exists in GDB and error if not before trying to add a field with that domain name (this should give an arcpy.adderror if the domain name is bad/nonexistent)
[x] Remove extra/unneeded CreateTemplateGDB subfolder under scripts
[x] Move Export Domains script/tool into the new toolbox (maybe under a "Testing" toolset)
[x] Delete old / unused update-domain-toolbox toolbox
[x] Add Export Fields/Subtypes to csv tools to new toolbox
[x] Add check input fields/subtypes csv vs. output fields/subtypes csv verification step (like domains has)
[x] Add some help labels about what parameters some of the tools expect (ex. I had no idea what to enter for the "AddMilitaryFeatureFields" tool

@lfunkhouser - this can be closed.
The major issues were addressed (subtypes not working and adding manual steps to the readme) - in latest version at: https://github.com/Esri/military-features-data/tree/dev/military-overlay/utils-source-and-test-data/schema-creation-utilities
The remaining issues were very minor code review issues from the old #165 PR review.

Thanks @csmoore. Closing this issue with remaining issues not addressed.


Is A1XFour ID yielding consistent results

Hi Mungewell.
QUESTION:
In your ZPTCF decode you print IDs are 32 bits, but in the reverse format only 28.
What is your opinion on the correct reference please?
NOTE: I only noticed the difference because A1X patches are first to manifest the difference.
I included a zip of tar file containing all the patches from an A1XFour incase you want to take a deeper look.
BACKGROUND
A1XPatches.zip
I noticed an inconsistency with the A1XFour - likely my mistake but can you help me check my bug please?
I pulled today to be sure it isnt my older variant.
pi@raspberrypi:~/Software/laterzoom-zt2/zoom-zt2 $ python3 decode_preset.py ../../ZoomPedalFun/python/mypedal/patch_11 -d
Container:
    fx_count = 5
    name = u'AG J-45   ' (total 10)
    ids = ListContainer:
        339738784
        16777248
        37748800
        150994992
        184549392
    TXJ1 = Container:
        length = 60
    TXE1 = Container:
        length = 68
        name = u'This Gibson J-45 sound has a dry'... (truncated, total 67)
    EDTB = Container:
        length = 120
        effects = ListContainer:
            Container:
                autorev = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8'... (truncated, total 24)
                reversed = Container:
                    control = Container:
                        param8 = 0
                        param7 = 0
                        param6 = 0
                        param5 = 0
                        param4 = 50
                        param3 = 50
                        param2 = 50
                        param1 = 24
                        unknown = 1
                        id = 71303328
                        enabled = True
            Container:
                autorev = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8'... (truncated, total 24)
                reversed = Container:
                    control = Container:
                        param8 = 0
                        param7 = 0
                        param6 = 0
                        param5 = 0
                        param4 = 50
                        param3 = 4
                        param2 = 1
                        param1 = 9
                        unknown = 0
                        id = 16777248
                        enabled = True

Notice
ids = ListContainer:
        339738784

But later
                        unknown = 1
                        id = 71303328
                        enabled = True

I was using the reversed IDs to find the FXID/GID from patch decode.
I hit an error
INFO:root:Packet length 869
INFO:root:Patch: AG J-45
INFO:root:Desc: This Gibson J-45 sound has a dry tone that is ideal for strumming.

INFO:root:  enabled: True
INFO:root:  FXID=160, GID=34
INFO:root:Exception looking up FXID: 160 34 AG J-45    71303328 0x44000a0

So it seems to me the ID should be 0x144000A0. Now I do see you decode this as 28 bits rather than 32.
Maybe that's my mistake - thinking the ID is 32bits? So I get a top 4 bits?
Except you print the IDs initially as 32 bits - so that's what's confusing me.
Nightly pull gives same answer as an older pull. I looks like the A series pedals are the first time I have encountered the additional higher bits.

Ok so I the 28 bit works nicely - do you think it makes sense to set the IDs also with 28 bit mask?
I LOVE what you did with Construct to pull out the Bitmaps ... my version is so lame in comparison.
I need to merge your latest code into my hacked version.
What I do is use your program (older fork) to pull out the ZT2.
From this I get the set of ZD2's and their IDs (note I was interpreting them as 32 bit).
The ZD2s get me the description, parameters (including max value) and their descriptions.
I also determine, from parameters and name, if FX is 1 or 2 slot.
Then I pull in the set of patches, and try to marry the FX ((this was the part that went awry on A1XFOUR - the previous pedals were not seemingly using the top 4 bits).
Then I read and parse these lists into a TkInter program to allow display of the given patch and allow FX to be changed.
Of course I need to take care of this 1 v 2 slot.
The A1X was different to its friends.
If you can give me a 2nd opinion on whether 28 or 32 bit is ID format I can modify my code either way and close this "issue" - it is more clarification.
Wouldnt it be so much easier if Zoom just published the Sysex.
I notice Boss pedals publish there's.

Ok so if I look at this FX say
      FX: {
            name: "HumBird",
            description: "Body characteristics of a Gibson Hummingbird, which is loved by pop
 and rock artists.",
            version: "1.00",
            fxid: 208,
            gid: 34,
            group: 20,
            groupname: "AG_MODEL",
            numParams: 4,
            numSlots: 1,
            filename: "MDL_HB.ZD2.BMP",
      },

I can see from AllZDL7.txt is ought to have type 0x144000F0.
And closer inspection ALL the MDL FX has their full 32bit compared with typical 28 bit. However, using the 28 bit version as a mask generates consistent FXID, GID for sysex control. Odd.

When using decode_preset.py you might want to use the '-s' ('--summary') option instead, it's a little nicer on the eyes.
The first array of 'ids' is ready and displayed as 32bit. The 'id' within EBDT block is only allocated 28bits... There's no doubt some history in how Zoom's FW has developed over time.


Add the possibility to give CrossTabClient instance in createLogux

To be more consistent with the master version, in createLogux method, you can give a existant instance of a CrossTabClient and use it instead of create a new one. If not present, the process remains the same as before.
I added a unit test for that and a small documentation in comments.

Change the base branch

Great idea. But since this version is not deprecated, perhaps we can simplify it and make the API similar to the main branch?
const client = new CrossTabClient({ … })
const createStore = createStoreCreator(client, options)
const store = createStore({ … })

I think these changes will make it easier to maintain this (0.8) version.

Yes I done this to not break past implementation but I totally agree it will be easier to maintain. Would you like I do the modification in this PR ?

I probably should have done this a long time ago. Let's do it here 🤘🏻
Maybe we should add some warnings about deprecated API to help migrate? I can do these myself before release.

I added the new way createStoreCreator like on main branch, I think the typing could be a bit better I let you check that. Please let me know if everything goes wrong

Will be released this week.

Released in v0.8.6

Thanks a lot


Allow setting of hostname

What is the purpose of this pull request? (put an "X" next to item)
[ ] Documentation update
[ ] Bug fix
[X] New feature
[ ] Other, please explain:
What changes did you make? (Give an overview)
Allows setting of hostname of the device
Which issue (if any) does this pull request address?
Is there anything you'd like reviewers to focus on?
I encountered an error which I haven't been able to reproduce. The documentation (https://www.balena.io/docs/reference/supervisor/supervisor-api/#get-v1devicehost-config) says that the endpoint being used reads configuration from things previously set with PATCH. I am wondering if the Patch request hasn't already been called, whether the GET endpoint works. I can't test this scenario because it would require reinstalling a device and I only have remote hardware.
@mrpher or @nucleardreamer could you test this for me? It would require flashing a card with a new Balena OS on a fleet, then having it join the fleet and see if there are any errors on first boot in the Balena Cloud log. It should simply say:
warn: Changing hostname to balena
warn: Hostname changed.

Anything more and we have an issue.

@maggie0002  I didn't see any errors.  Flashed a fresh OS on existing fleet and everything seems fine....  Logs are from first boot.
 mdns-advertise
 mdns-advertise  ><EMAIL_ADDRESS>start
 mdns-advertise  > node build/index.js
 mdns-advertise
 py-wifi-connect  [2022-03-14 15:59:48] - [INFO] - Checking for previously configured Wi-Fi connections...
 balena-device-ui  Listening on port 80
 mdns-advertise  * mdns - starting
 mdns-advertise  * mdns - IP: <IP_ADDRESS>
 mdns-advertise  * mdns - adding balena.local at address <IP_ADDRESS> to local MDNS pool
 mdns-advertise  * mdns - avahi group: /Client0/EntryGroup1
 py-wifi-connect  [2022-03-14 15:59:58] - [INFO] - A Wi-Fi connection or hotspot is already active.
 py-wifi-connect  [2022-03-14 15:59:58] - [INFO] - Ready...
 py-wifi-connect  [2022-03-14 15:59:58] - [INFO] - Listening on <IP_ADDRESS> port 9090

Visiting http://balena.local works out of the box too.
I didn't customize the hostname though.  I'm not sure where that config is done honestly.

@maggie0002 I didn't see any errors. Flashed a fresh OS on existing fleet and everything seems fine.... Logs are from first boot.
 mdns-advertise
 mdns-advertise  ><EMAIL_ADDRESS>start
 mdns-advertise  > node build/index.js
 mdns-advertise
 py-wifi-connect  [2022-03-14 15:59:48] - [INFO] - Checking for previously configured Wi-Fi connections...
 balena-device-ui  Listening on port 80
 mdns-advertise  * mdns - starting
 mdns-advertise  * mdns - IP: <IP_ADDRESS>
 mdns-advertise  * mdns - adding balena.local at address <IP_ADDRESS> to local MDNS pool
 mdns-advertise  * mdns - avahi group: /Client0/EntryGroup1
 py-wifi-connect  [2022-03-14 15:59:58] - [INFO] - A Wi-Fi connection or hotspot is already active.
 py-wifi-connect  [2022-03-14 15:59:58] - [INFO] - Ready...
 py-wifi-connect  [2022-03-14 15:59:58] - [INFO] - Listening on <IP_ADDRESS> port 9090

Visiting http://balena.local works out of the box too. I didn't customize the hostname though. I'm not sure where that config is done honestly.

I think you may have pushed the wrong branch. That looks like the main branch with MDNS doing the work. Could you try with this 'set-hostname' branch?
git clone https://github.com/maggie0002/balena-device-ui.git -b Set-hostname and then push that to the fleet before connecting a new device.

Think I reproduced your error... From my logs.
 balena-device-ui  Listening on port 80
 balena-device-ui  2022-03-14 16:30:46:3046 warn: Changing hostname to balena.
 balena-device-ui  2022-03-14 16:30:46:3046 warn: Hostname changed.

My mistake. Here are the complete logs.  And yes, http://balena.local works.
 balena-device-ui  Listening on port 80
 balena-device-ui  2022-03-14 16:30:46:3046 warn: Changing hostname to balena.
 balena-device-ui  2022-03-14 16:30:46:3046 warn: Hostname changed.
 balena-device-ui  Listening on port 80
 balena-device-ui  Error fetching current hostname.
Killing service 'py-wifi-connect sha256:16531a30c7d0a466428c526cfabd7a04404ff341925bc144bf88e8145e919c7b'
Supervisor starting
 balena-device-ui  Listening on port 80
 balena-device-ui  2022-03-14 16:30:46:3046 warn: Changing hostname to balena.
 balena-device-ui  2022-03-14 16:30:46:3046 warn: Hostname changed.
 balena-device-ui  Listening on port 80
 balena-device-ui  Error fetching current hostname.
Killing service 'py-wifi-connect sha256:16531a30c7d0a466428c526cfabd7a04404ff341925bc144bf88e8145e919c7b'
Service is already stopped, removing container 'py-wifi-connect sha256:16531a30c7d0a466428c526cfabd7a04404ff341925bc144bf88e8145e919c7b'
Killed service 'py-wifi-connect sha256:16531a30c7d0a466428c526cfabd7a04404ff341925bc144bf88e8145e919c7b'
Installing service 'py-wifi-connect sha256:16531a30c7d0a466428c526cfabd7a04404ff341925bc144bf88e8145e919c7b'
Installed service 'py-wifi-connect sha256:16531a30c7d0a466428c526cfabd7a04404ff341925bc144bf88e8145e919c7b'
Starting service 'py-wifi-connect sha256:16531a30c7d0a466428c526cfabd7a04404ff341925bc144bf88e8145e919c7b'
Started service 'py-wifi-connect sha256:16531a30c7d0a466428c526cfabd7a04404ff341925bc144bf88e8145e919c7b'
 py-wifi-connect  [2022-03-14 16:31:48] - [INFO] - Checking for previously configured Wi-Fi connections...
 py-wifi-connect  [2022-03-14 16:31:58] - [INFO] - A Wi-Fi connection or hotspot is already active.
 py-wifi-connect  [2022-03-14 16:31:58] - [INFO] - Ready...
 py-wifi-connect  [2022-03-14 16:31:58] - [INFO] - Listening on <IP_ADDRESS> port 9090

I removed the SET_HOSTNAME variable, pushed to the fleet, and re-flashed the device.  Came online, behaved normally, but without http://balena.local working.
 py-wifi-connect  [2022-03-14 19:13:30] - [INFO] - Checking for previously configured Wi-Fi connections...
 balena-device-ui  Listening on port 80
 py-wifi-connect  [2022-03-14 19:13:40] - [INFO] - A Wi-Fi connection or hotspot is already active.
 py-wifi-connect  [2022-03-14 19:13:40] - [INFO] - Ready...
 py-wifi-connect  [2022-03-14 19:13:40] - [INFO] - Listening on <IP_ADDRESS> port 9090
Supervisor starting
 py-wifi-connect  [2022-03-14 19:24:25] - [INFO] - Checking for previously configured Wi-Fi connections...
 py-wifi-connect  [2022-03-14 19:24:35] - [INFO] - A Wi-Fi connection or hotspot is already active.
 py-wifi-connect  [2022-03-14 19:24:35] - [INFO] - Ready...
 py-wifi-connect  [2022-03-14 19:24:35] - [INFO] - Listening on <IP_ADDRESS> port 9090
 balena-device-ui  Listening on port 80

I'll try modifying the dockerfile to install curl and try again

You can add it with api add curl in the container, rather than rebuilding it.

One other thing we will want to test for is: if avahi will pickup the hostname change and still advertise without a reboot. So basically start with the hostname set, change the variable, see if the variable.local is still accessible or if the previous variable persists.
If that is the behavior - we can simply add a note in the UI saying something like "Please reboot the machine to make the new hostname accessible"

@nucleardreamer I may have missed this in other convos, but why wouldn't we just take the balena device name at init (ie, frosty-pine) and allow http://frosty-pine.local?  Now that I'm thinking about it, is it really necessary to allow the hostname to be changed for users?  I doubt many would actually change it.  As long as its unique and not trying to name every device balena.  In which case I'm not even sure how it would handle collisions with multiple devices trying to resolve to http://balena.local

@mrpher oh yes, there is a little bit of context behind this. There are a ton of use cases relating to open fleets where the user doesn't have access to the balena dashboard at all, hence the strong use case for this project. Not only will they not know their device name by default, but essentially they would have to go look up the IP in their router or nmap to find the device.
The ideal use case is something like the the ribbit network, where they are seeking a local UI, and would probably but something like http://ribbit.local as their address in their deployment. I think just setting balena.local can be our default, but expecting most users to change it.

@nucleardreamer Got it, makes perfect sense now.  I guess also it could come in very hand for openbalena users too who lack the device url option, but want an easy way to get to the right device.

@mrpher this should be working now. Could you update from this branch and then push to a fleet, then have a newly flashed device join the fleet just like before? We are hoping for:
15.03.22 10:45:02 (+0000)  balena-device-ui  2022-03-15 10:45:02:452 warn: Changing hostname to balena.
15.03.22 10:45:02 (+0000)  balena-device-ui  2022-03-15 10:45:02:452 warn: Hostname changed.

Would be good if you could share the whole console output, just to be sure.
And then would also be good to hear how the experience is, is the device available right away from balena.local or did you have to restart it?

I have yet to be able to test this, but will give it a whirl soon!

Alright, after testing:

Setting hostname on first boot does work.
Setting hostname after first boot, does require a restart for the new hostname.local to resolve, so either we have to put a note under the input field in configuration, or figure out a way to restart the avahi service on the hostos
After setting the hostname, there is no way I can see to get back to what you had configured in environment variables previously? I'm not sure if that is a concern.
On the same note - we might want to fill in the default input value for hostname to what it's currently set to, there is no other place in the UI to know what it's set to.

Alright, after testing:

Setting hostname on first boot does work.
Setting hostname after first boot, does require a restart for the new hostname.local to resolve, so either we have to put a note under the input field in configuration (saying "hey, please reboot to have this take effect for .local resolution"), or figure out a way to restart the avahi service on the hostos.
After setting the hostname, there is no way I can see to get back to what you had configured in environment variables previously? I'm not sure if that is a concern.
On the same note - we might want to fill in the default input value for hostname to what it's currently set to, there is no other place in the UI to know what it's set to.

Some good food for thought. I am surprised you had to reboot it. When I used to use this endpoint on a Raspberry Pi or Orange pi it would come back up again. Sometimes it took a little while, but always reappeared. No harm if having a message to prompt people that a restart may be required though. I think that would be better than triggering a restart automatically, I try and avoid automating things that restart devices. Just because potential bugs can be breaking if something goes wrong.
I had gone back and forth on the idea of restoring back to the env variable as default. I considered something that would allow that to be triggered, but it seemed a fairly unusual scenario and meant more endpoints. If someone really needed too, they could always delete the lock file, or just set the hostname to the same value as the env var.
Setting the input field with the current value would probably be best done with an API call to the supervisor to get the hostname. It has already felt a little sluggish at times with all the calls, I think it's probably better to keep it minimal? Presumably the user will already know the current hostname, as they have had to type it in their browser. We could fetch the hostname from the url in the browser, but then if a user under some odd circumstance used the IP to access it it would look very confusing.

So I tested this again just now, after a little while it did come up with the new hostname set (after 60 seconds or so). I deleted the device, re-imaged and tried again, it was stuck on the old hostname still and I gave up after 20 minutes of waiting. This could be due to caching in my local network as well, but even if it is, it's probably a scenario someone would run into regardless.
I will say that this is working as expected for the most part. Worst case is we can revisit if we have a 100% repro of this issue (which I can't get it to do now it seems like). Lets move ahead!


Default argument for contentDescriptin

I have always met those warnings asking me to add some descriptions to ImageViews, same is for Composables. Do you guys regulary set them up? Personaly, I always ignore them, or just pass nulls everywhere...
So since we have wrappers around Image and Icon why not add default parameter for contentDescription: String? = null? I can send PR if you consider it

Do you guys regulary set them up?

Not much, but that's not something we're proud of. Actually, our long-term is to make accessibility better in our app. The main reason not to have a default value is to let us think of those images / icons, if there is or isn't an alternative text that says what it is.
E.g. search icon in text field does not need content description if there is a Label/Placeholder saying it is a "search" field.
Anyway, having this compulsory makes us think about that and we consider this a good option.


doc: Cleaner API docs, cleanup pipeline reference, faster rendering options, less noise in doc build output, changelog

Note: Please feel free to ignore reviewing the actual content of the changes. I re-ordered the classes in components.py and so the diff looks a lot bigger then it is.
This PR focuses on:

Make the API documentation cleaner

No longer a right side TOC, gives more space to the content
TOC has labels to describe if it's a method, attr etc...

Attributes and functions are now seperated as cards with some small CSS. This gives them much more visible seperation.

The pipeline reference was not useful and merely dumped module docs. This was changed to be a more handcrafted reference. With that:

Removed the module doc of the components, it wasn't useful.
Removed mentions of the syntactic sugar. This was too much info and not something to advertise immediatly.
Made the __init__ actually display the parameters it takes, which previously was not there.

Rendering took a while as it would rerun all code blocks, even for a minor string change.

just docs now only renders the documentation and does not run code

A helpful message to use just docs-code to run and render code is placed in the
code output

Loggers from SMAC and OpenML were polluting the documentation building output a lot when code was run. There are now hooks that disable this based on environment variables.

By default, the just docs commands will disable these log outputs

Added a change log tab

I removed the custom templates used during generation of API.

I added some documentation to the mkdocs.yml file as people investigating doc issues should look there first. This was also added to the CONTRIBUTING.md

Merged but feel free to let me know if something here needs to be changed!


Remove samples from -all distribution

Fixes https://github.com/gradle/gradle/issues/10938
Context

Gradle Core Team Checklist

[ ] Verify design and implementation
[ ] Verify test coverage and CI build status
[ ] Verify documentation
[ ] Recognize contributor in release notes

This is a revisit of a previous PR, this time CI pass all the way to nightly with some issues for release that I will disregards given the are related to buildSrc locks.


Pulumi Provider package.json Install Scripts Changed

Pulumi recently decided to remove the install script (.scripts.install) from their providers' package.json and instead make the CLI parse the package.json file and use the Pulumi package name information under .pulumi.name and .version. ProTI's pulumi-packages-schema plugins currently assume to get this information from the install script configuration, which is missing in some recent provider package releases.

Documentation on the .pulumi block in package.json: https://github.com/pulumi/pulumi/issues/10800#issuecomment-1252101855


Calculator should lose translucency when no longer in the foreground.

Problem Statement
When using the calculator on a second monitor the calculator is losing transparency when using the main monitor.
Evidence or User Insights
I personly keep this on my second monitor, tabbing to calculator and back to visual studio will cause the calculator to gain then lose transparency.
Proposal
Transparency should be lost when the calculator is no longer in the foreground, instead of focus loss.
Goals
The calculator should not be a visual distraction. Losing and regaining transparency when the application is visible to the user is a visual distraction.

Thanks for the idea, @mike0891! Calculator makes use of the acrylic material throughout the app. In particular, we use background acrylic, where this behavior is considered by design:

Background acrylic reveals the desktop wallpaper and other windows that are behind the currently active app, adding depth between application windows while celebrating the user’s personalization preferences.

I would recommend opening this up for discussion in Microsoft/microsoft-ui-xaml where the acrylic brushes are defined.

This is unfortunately a limitation of Fluent Design, Acrylic (the translucency/blur effect) is limited to the currently active app for performance reasons (what if you have a video playing in both screens in background?) but also because the distinction between foreground app and focused app is a little complicated. Let's imagine for example that you have 2 monitors, you open the Calculator on one and Edge on the other. Both application are "foreground", but what should happen if you drag the Edge window to the other monitor?

This is your friendly Microsoft Issue Bot. I've seen this issue come in and have gone to tell a human about it.


Constant recomposition upon navigation.

Greetings, I have the following issue that I need assistance of.. So, I have a top level navigation where currently I am solving in the following way:
@Composable
private fun ExecuteNavigation(
navController: NavHostController,
direction: Direction,
addToBackstack: Boolean?,
previousDestination: Direction?
) {
val destinationsNavigator = navController.rememberDestinationsNavigator()
destinationsNavigator.navigate(direction) {
    if (addToBackstack != true) {
        previousDestination?.let {
            popUpTo(previousDestination) {
                inclusive = true
            }
        }
    }
}

}
First issue that I meet is that if I pull navController.rememberDestinationsNavigator() outside the composable that I am calling the navigation from, the next screen that I land at keeps on recomposing infinitely. Basically, the only workaround that I found is to call the rememberDestinationsNavigator() locally.. I would have gone for navController.toDestinationsNavigator(), since I do not really need executeNavigation() to be a composable function, but the outcome is the same..
I would rather sort this one out first, after which I guess I would reach to my second question. Any assistance on that matter? What would cause this infinite next screen recomposition? I basically want to call the DestinationsNavigator at a top level.

Forgot to mention that currently I am using the v.2.x of the lib

Made some progress but not sure that this has to be the following way. I moved the destinationsNavigator to a top level and I did fix the recomposition the following way:
executeNavigation = { direction, addToBackStack, previousDestination ->
LaunchedEffect(direction, addToBackStack, previousDestination) {
executeNavigation(destinationsNavigator, direction, addToBackStack, previousDestination)
}
}
I still think that this is incorrect and infinite recomposition after screen navigation should not happen.
This brings me to my second question now, when i navigate back to Screen 1 , after initial navigation , components on the screen react to clicks, however only screen recmoposition happens.


Run capistrano with a seperate ruby to worked with current project bundler.

Please see this issue, thanks
https://github.com/bundler/bundler/issues/5950

Maybe the properly question is:
How to use capistrano to run bundle list with a seperate traveling-ruby (independent the ruby which is used in project), anywhy, capistrano just a deployment tools, it should run any shell command as use with
shell, right? as following:
x=$(bundle list)
# or x=`bundle list`
echo "$x"

use with shell, it always work.

Duplicate of https://github.com/bundler/bundler/issues/5950. Closing.


chore(main): release veto 0.3.20

:robot: I have created a release beep boop
0.3.20 (2024-05-22)
Bug Fixes

veto: use direct string return type (2803b0d)

This PR was generated with Release Please. See documentation.

:robot: Release is at https://github.com/fuf-stack/uniform/releases/tag/veto-v0.3.20 :sunflower:


[5.7] Disable failing distributed actor tests.

Example failure: https://ci.swift.org/job/oss-swift-5.7_tools-RA_stdlib-DA_test-simulators//65/console
Resolves rdar://92277271

Cherry-pick of change made on main in:
https://github.com/apple/swift/pull/58407


Adding "Continuation" for issue #627

The Pull Request resolves Issue #627
Description:
Adding the word Continuation

Curly bracket needs to be removed.


writebytes/readbytes broken?

I connected MISO and MOSI on my RaspberryPI and ran this program:
#!/usr/bin/env python
import spidev
def dmp(A):
    s = ""
    cnt = 0
    for a in A:
        s+="%0.2X " % a
        cnt=(cnt+1)%6
        if cnt == 0:
            s+="\n"
    print s

spi = spidev.SpiDev()
spi.open(0,0)
b = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0x00, 0x00, 0x00, 0x00, 0x95, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0xAD, 0xBE, 0xEF, 0xBA, 0xAD, 0xF0, 0x0D]
print "testing read/write bytes"
spi.writebytes(b)
dmp(spi.readbytes(len(b)))
print "testing xfer"
dmp(spi.xfer(b))
print "testing xfer2"
dmp(spi.xfer2(b))
spi.close()

The array b should be echoed, but instead there are only zeroes. I checked writebytes() with an oscilloscope and it seems like it doesn't send anything at all.
But xfer and xfer2 work.
Or have I misunderstood writebytes? I thought it doesn't return anything, but keeps the data in a buffer which is accessable via readbytes.
some other interesting stuff:
$ uname -a
Linux raspberrypi 3.18.9+ #768 PREEMPT Sun Mar 15 18:59:03 GMT 2015 armv6l GNU/Linux
$ modinfo spi-bcm2708
filename:       /lib/modules/3.18.9+/kernel/drivers/spi/spi-bcm2708.ko
alias:          platform:bcm2708_spi
license:        GPL v2
author:         Chris Boot<EMAIL_ADDRESS>description:    SPI controller driver for Broadcom BCM2708
srcversion:     4C511494EF4EBE6610ACDB6
alias:          of:N*T*Cbrcm,bcm2708-spi*
depends:
intree:         Y
vermagic:       3.18.9+ preempt mod_unload modversions ARMv6

I second this. Readbytes and writebytes do not seem to be working. Instead I am using xfer and xfer2.

Tested this on a Raspberry Pi 3, running Raspbian, Kernel 4.4.15 and Python 2.7.9.
Ran, simply:
from spidev import SpiDev
dev = SpiDev(0,0)
dev.writebytes([0,1,2,4,8,16,32,64,128])

Results were exactly as expected. 9 groups of clock pulses on my scope, with each bit asserted at the right time.
I used the repl to run the writebytes command and caught it in single-shot mode on my scope.
Same result sending: list(range(0,128)) - got the sequential list of numbers I expected.
Can you identify your Pi, by running:
cat /proc/cpuinfo | grep Revision

And I'll see if I can replicate on the same hardware.
I haven't tested readbytes yet.

Can you identify your Pi, by running:
Unfortunately I can't. At the time I posted this issue I've worked on a project for my university. Now it's finished and I don't have access to the hardware anymore. But maybe @jainakshay91 can help you.

I believe I am seeing this issue.
Hardware is a Raspberry Pi 3 Model B.
Software is Raspbian Jessie w/Desktop 2017-06-21 straight from raspiberrypi.org.
I'm using the spidev module built into the raspbian image; I don't know how old the module is.
Spi enabled via sudo raspi-config, but only /dev/spi0.0 and /dev/spi0.1 are present.  No /dev/spi1* devices.
Loopback wire connecting Rpi's pins 19 to 21 (SPI0 MOSI to MISO).
$ uname -a
Linux KC4KSU-41 4.4.50-v7+ #970 SMP Mon Feb 20 19:18:29 GMT 2017 armv7l GNU/Linux

$ cat /proc/cpuinfo | grep Revision
Revision	: a22082

$ python3
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import spidev
>>> s = spidev.SpiDev(0,0)
>>> d = [0xaa,0x55,0xcc,0x33]
>>> s.xfer2(d)
[170, 85, 204, 51]
>>> s.xfer(d)
[170, 85, 204, 51]
>>> s.writebytes(d)
>>> s.readbytes(len(d))
[0, 0, 0, 0]

With a scope, I can see that the calls to xfer2(), xfer() and writebytes() all generate proper signals on the MOSI line.  I get the same result using
Python 2.7.9 (default, Sep 17 2016, 20:26:04)
[GCC 4.9.2] on linux2
I see that the call to writebytes() generates a signal on MOSI that loops back to MISO.  I expect that the data on MISO is then read into a hardware or software buffer and that readbytes() would convey the data from that buffer.  Is this expectation wrong?
If there are instructions on how to build and install this module, please share and I'll retry using the latest source.

I just did the same check, with a loopback line between MOSI and MISO and got the same result for readbytes. xfer replicates the input as expected, but not writebytes/readbytes.

I have more info on this, I played with the SPI driver more on Raspberry, the issue is originating from the driver itself. I wrote some C code that does something similar as the python lib and it seems that it's not the library's fault, it's the way the driver works.

I believe that writebytes() and readbytes() cannot be used with a loopback, because when you use the former, you'll write 8 bits of data without reading, which means MISO ignores the written bits; then, when you readbytes() after that, you have already stopped sending data on MOSI, so there's nothing to read but 0.
In other words, you'd need to have an external device, at least to act as a buffer, in order to test this properly. I believe this is not a bug, but an implementation/testing error.

To provide some more explanation, I believe that write/readbytes() are meant for one-way transfer; i.e. "write bytes and ignore response" and "read bytes without writing anything", while xfer/2() are meant for reading while writing.

It seems to be an issue on the second SPI bus on the pi4  using spidev.  This code fails
from spidev import *
#BUS = 0
BUS = 1
spi = SpiDev(BUS,0)
spi.max_speed_hz = 1000000
spi.no_cs = True
spi.mode = 1
contents = [6]
#spi.xfer(contents)
spi.writebytes(contents)
while the other three combinations of BUS= 0/1 and xfer/writebytes work.  My /boot/config.txt includes
dtparam=spi=on
dtoverlay=spi1-3cs

Please ignore my last (too hasty) comment.  I was correct with the observation that it's spi1 related, but not in my diagnosis.   It seems to be an interaction between spi mode and the bus. On my system, both writebytes and xfer fail with xfer reporting
"SystemError: <method 'xfer' of 'SpiDev' objects> returned a result with an error set",
both work for (1,0), (0,0), and (0,1).
Also fails in the same way for MODE =3 but not for MODE = 2, so its definitely phase-related.
Here's my code:
#Fails for both xfer and writebytes for BUS = 1 and MODE = 1, works for other
#combinations.
from spidev import *
BUS = 1
MODE = 1
ComMethod = 'xfer'
ComMethod = 'writebytes'
spi = SpiDev(BUS,0)
spi.max_speed_hz = 1000000
spi.mode = MODE
contents = [6]
if ComMethod == 'xfer':
spi.xfer(contents)
else:
spi.writebytes(contents)
Since this is not the problem reported, (differing behavior of xfer and either readbytes or writebytes), it may have nothing to do with the reported problem.  Sorry for any confusion caused.


[Bug][seatunnel-core-flink] Updated FlinkRunMode enum to get the proper help message for run modes.

Purpose of this pull request
Exception on running start-seatunnel-flink.sh with APPLICATION_RUN option
Check list

[x] Code changed are covered with tests, or it does not need tests for reason:
[ ] If any new Jar binary package adding in your PR, please add License Notice according
New License Guide
[ ] If necessary, please update the documentation to describe the new feature. https://github.com/apache/incubator-seatunnel/tree/dev/docs

With the updated run mode, the help option now prints:
`bash-3.2$ bin/start-seatunnel-flink.sh -h
Usage: start-seatunnel-flink.sh [options]
Options:
-t, --check    check config (default: false)

-c, --config   Config file
-h, --help     Show the usage message
-r, --run-mode job run mode, run or run-application (default: run)
(values: [run, run-application])
-i, --variable variable substitution, such as -i city=beijing, or -i
date=20190318 (default: [])`


[Type Converter][Bug] Generating invalid code for a DAO list arguments

Hi. For example, DAO returns a list of entities using the list of fields that are converted in the query.
We have the following code:
@entity
class MyEntity {
  @primaryKey
  final MyId id;

  MyEntity(this.id);
}

@dao
abstract class MyDao {
  @Query('SELECT * FROM MyEntity WHERE id IN (:idList)')
  Future<List<MyEntity>> getById(List<MyId> idList);
}

@TypeConverters([MyIdConverter])
@Database(...)
abstract class MyDatabase extends FloorDatabase {
...
}

MyDao.getById will always return an empty list, because Floor generating invalid code for this method:
@override
Future<List<MyEntity>> getById(List<MyId> idList) async {
  final valueList0 = types
      .map((value) => "'$MyIdConverter.encode(value)'")
      .join(', ');
  return _queryAdapter.queryList(
      'SELECT * FROM MyEntity WHERE id IN ($valueList0)',
      mapper: (Map<String, dynamic> row) => MyEntity( _myIdConverter.decode(row['id'] as String)));
}

This code generates an invalid SQL query:
SELECT * FROM MyEntity WHERE id IN ('MyIdConverter.encode(value)')

The correct code should look like this:
map((value) => "'${_myIdConverter.encode(value)}'")

Thanks for your report and the early testing. I'm working on a fix already.

Thank you. When is the next release?

0.17.0 with the relevant fixes is now available


Allow sends to multiple buses from a single AudioStreamPlayer node

Draft state for now, I still need to open a proposal for this. Wanted to push in case anyone would like to test it.

Right now it uses linear units, and the loudness across all sends is not zero-sum. Those things could both change depending on feedback.

One comment on this is that we should probably put a little warning on the node somehow if it doesn't have any sends, and perhaps even make the minimum number of sends 1 instead of 0. If a user attempts to remove the last send, one is added for the Master bus. While testing I ran into a situation where I wasn't hearing audio playback and it wasn't clear that the player was configured with no sends.

I have a preference for using one unit across every parameter for loudness.
@ellenhp Mentioned crossfades with linear units are easier, and a huge reason this exists is crossfades, but we have linear2db.
So I wanted to poll the group.

Another tricky thing is that people probably won't understand that the decibels in the sends will be relative to the overall volume, not an "absolute" volume.

Won't the linear format will have the same confusion?

I don't think so. I do generally agree that we should probably be consistent with units, but people tend to understand linear units better than decibels in general so I doubt that people would have the same confusion.

I think that AnimationTree's implicit AudioStreamPlayer volume change should be eliminated and the user should be able to arbitrarily change the volume with ValueTrack. (Ref: #55218)
The only sense in which the current implicit blending exists is to bypass the linear blending of the AnimationTree and blend the volume on a log scale. With this fix, we should be able to consider making the implicit volume change in AnimationTree eliminated.

I don't think that's related to the sends of an AudioStreamPlayer though. The sends just determine where audio is sent, not how loud the stream is. Plus, like fire said it probably makes sense to remove all the linear units everywhere for audio. I was very confused by your comment in that PR which is why I hadn't responded, but I just went and left a comment. Let's continue discussion there for animation topics.


[LLVM] How do I get the kaleidoscope example running?

Chapter 4 of that LLVM tutorial https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/LangImpl04.html doesn't work since InitializeNativeTarget does not support any target.
Requested triple: x86_64-pc-windows-msvc
Registered Targets:
(none)
Original source in https://github.com/llvm/llvm-project/tree/main/llvm/examples/Kaleidoscope/Chapter4 and https://github.com/llvm/llvm-project/tree/main/llvm/examples/Kaleidoscope/include
I'm using VS2022 with vcpkg and installed
llvm                     14.0.4           The LLVM Compiler Infrastructure.
with default configuration
llc.exe --version
shows:
LLVM (http://llvm.org/):
LLVM version 14.0.4
Optimized build.
Default target: x86_64-pc-windows-msvc
Host CPU: skylake
Registered Targets:
x86    - 32-bit X86: Pentium-Pro and above
x86-64 - 64-bit X86: EM64T and AMD64
What do I miss?

The kaleidoscope examples in the build tree work, but only if I open the whole llvm folder with visual studio, ..\vcpkg_llvm\buildtrees\llvm\src\org-14.0.4-df58f01928.clean\llvm in my case, and build in cmake targets view.
So, what is the difference?
How do I get a vcxproj for a single source file?
Usually cmake provides that, but in this case I found none. VS just compiles to exe targets in ...\vcpkg_llvm\buildtrees\llvm\src\org-14.0.4-df58f01928.clean\llvm\out\build\x64-Debug\bin

Add WINDOWS_USE_MSBUILD option into the vcpkg_cmake_configure() function of \vcpkg\ports\llvm\portfile.cmake,
vcpkg_cmake_configure(
    SOURCE_PATH "${SOURCE_PATH}/llvm"
    WINDOWS_USE_MSBUILD
    OPTIONS

try to install llvm by vcpkg, after the config step, manually stop the install command, then you could find the vcxproj file in \vcpkg\buildtrees\llvm\x64-windows-dbg folder.


Add support for Remote Key Reference for dns_servers in virtual_network

As dns_servers here can set the ip as dns_servers = ["ip1", "ip2"]. It will also be great to have support to refer to the remote key state like:
dns_servers = {
  lz_key = lz_key_name
  key      = key_name
  ...
}

Reference to the existing file in aztfmod are:
aztfmod/modules/networking/virtual_network/module.tf
which existing settings is:
dns_servers = lookup(var.settings.vnet, "dns_servers", null)

@seanlok You want to reference the private remote ip address of Azure Firewall or from a virtual machine?

yeah. That will be great. else just have to hardcode the respective dns server in different segment.

Closing as integrated into 5.4.2


MapDB3 based collection factory should provide a queue and set implementation

Problem description
qEndpoint has an issue where a path query triggers an out of memory exception. See the makeQuey and makeSet calls in PathIteration.
For the MapDb3 implementation we should be able to add a queue that spills to disk.
Preferred solution
Implement a java.util.Queue wrapper for a mapdb3 QueuLong that should be able to work here.
Are you interested in contributing a solution yourself?
Yes
Alternatives you've considered
No response
Anything else?
Spilling to disk might make existing queries much slower. Perhaps take a much higher switch point from in memory to mapdb then the MemoryTillSizeXSet default.

Do you think it makes sense to consider an LMDB-based persistent data structure?
I've added a PersistentSet to the LmdbStore module.

An lmdb based collection factory is still in my would like to do list.
On Tue, Feb 6, 2024, 17:38 kenwenzel @.***> wrote:

Do you think it makes sense to consider an LMDB-based persistent data
structure?
I've added a PersistentSet to the LmdbStore module.
—
Reply to this email directly, view it on GitHub
https://github.com/eclipse-rdf4j/rdf4j/issues/4899#issuecomment-1930291526,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAHQYFNIXIMXUDSWRAXCXNDYSJMCHAVCNFSM6AAAAABC4GNCWOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSMZQGI4TCNJSGY
.
You are receiving this because you were assigned.Message ID:
@.***>

MapDb3 QueueLong is undocumented and does not work like I assumed. Have a simple wrapper around a map where head and tail are maintained as keys.


Right click menu, draw at left click

After improvemets of right click menu #91, it draw after left mouse button up. That does not allow to trigger benchmark mode.

Thanks for noticing that @StendProg! I fixed it now.


[BUG] Offsets updated, but gold not reading

When I checked the logs to see what was causing the crash, it spit this out in response.
My offsets are updated, but it is continuing to spit out bad info.
[16-35-25] Init Team data
[16-35-25] [WARNING] Lux not found in memory snapshot. Values will be incorrect!
[16-35-25] [WARNING] Sequence contains no matching element
[16-35-25] [WARNING] Master Yi not found in memory snapshot. Values will be incorrect!
[16-35-25] [WARNING] Mordekaiser not found in memory snapshot. Values will be incorrect!

{
"OffsetVersion": "13.6.1",
"GameOffsets": {
"Manager": "0x186e154",
"MapCount": "0x2c",
"MapRoot": "0x28",
"MapNodeNetId": "0x10",
"MapNodeObject": "0x14"
},
"ObjectOffsets": {
"ID": "0x8",
"NetworkID": "0xb4",
"Team": "0x34",
"DisplayName": "0x54",
"DisplayNameLength": "0x64",
"Pos": "0x1dc",
"Mana": "0x29c",
"MaxMana": "0x2ac",
"Health": "0xe7c",
"MaxHealth": "0xe8c",
"CurrentGold": "0x1bb4",
"GoldTotal": "0x1bc4",
"EXP": "0x32ec",
"Name": "0x2b04"
},
"FileVersion": "1.0"
}
hey man this is the new file working.
the "Manager" : switched from "0x186D154" to "0x186e154"

That worked! Thanks a ton!


Honor deletion records

Description
I think I added this as a precaution to prevent accidentally dropping records, but it is actually unnecessary and results in different behavior of feed depending on whether it is run directly or via the Faros Feeds wrapper.
It is safe to remove because, if we run a full sync in Airbyte, all models are reset, so it doesn't matter what happens in the feed. Feeds will always issue deletion records for "non-incremental" models only (unless invoked with --no-incremental) so it's safe to process these deletion records.
Type of change

[X] Bug fix
[ ] New feature
[ ] Breaking change

Related issues

Fix #1

Migration notes

Describe migration notes if any

Extra info

Add any additional information

@ypc-faros we might need to update the models list here again - https://github.com/faros-ai/airbyte-connectors/blob/main/destinations/airbyte-faros-destination/src/converters/faros-feeds/model_names.ts


Using timers in Encoder Mode

Is your feature request related to a problem?
No problem with the current version of this library, the "encoder mode" seems to be not implemented yet.
Describe the solution you'd like
A pure hardware version for dealing with encoders is welcome.
Describe alternatives you've considered
Using the official "MachineControl" library is not efficient.
Additional context
Hello,
We were having a look to the H7 ability to use encoders hardware entries like presented in this tutorial.
We are using Arduino, and already tried their pure software implementation.
It is unfortunately too slow for our needs.
Then we found your library which looks very good at playing with timers.
There is no example dealing with encoders .
How hard do you think it would be to add this encoder mode to your timers HAL ?
Thanks for any information

Hi @d-a-v
That seems interesting, but I'm sorry I have no bandwidth to finish this now.
But it seems the encoder is based on well written QEI (Quadrature Encoder Interface) code. You have to read the  QEI source code to use the encoder efficiently, not following the so simple example Encoders
IMHO, it's also not so complicated to even write a new library to deal with this Encoder feature efficiently.
I suggest you post on the Arduino_MachineControl issues or Arduino Forum to ask for help.
I'm closing this now as I currently don't have any intention and time to add this feature to this library. Certainly, any contribution to add the feature will be appreciated.
Good Luck,


Issue with Bicep usuage(subscription)

Good day,
My name is Rodney Effah and i need your help with my account as it keeps saying 'multiple accounts with the same username'. That's the error that pops out whenever i use this command: az deployment group create --resource-group testgroup --template-file main.bicep.
I am trying to use the sand-box on microsoft learn. Can you please help me with this.
Thank you.

route to service team


WIP: Update supproted platforms

Signed-off-by: John Roesler<EMAIL_ADDRESS>Description
Clarifies the platforms that are actually tested in this cookbook.
We can't test freebsd as there isn't a dokken image. Any thoughts?
Dropping fedora as specifically supported.
Issues Resolved
Contribution Check List

[ ] All tests pass.
[ ] New functionality includes testing.
[ ] New functionality has been documented in the README if applicable

You'll want to update the kitchen-orb to 1.0.1, as it removes fedora support :)

@damacus any insight into the failures with amazonlinux 2? https://circleci.com/gh/sous-chefs/haproxy/1162

I think we're missing headers
 STDERR: src/haproxy.c:66:10: fatal error: systemd/sd-daemon.h: No such file or directory
     #include <systemd/sd-daemon.h>
              ^~~~~~~~~~~~~~~~~~~~~

Have we classified amazon Linux 2 as a systemd platform?

That, platform family section looks like we should extract it out into a helper now 🤔

That, platform family section looks like we should extract it out into a helper now 🤔

Created an issue for a separate PR to that #340


Disable RightMenu

how can i disable right menu ?

same problem, how to disable one of the direction?
exsample : if i enable left swipe to open some menu in left menu, how to disable the right swipe in order to prevent user open the right menu (in this case there aren't anything there)

@yfsx  tnx body


Add a folder with name and print from bash script

Add a folder with my name as the folder name
Create a bash script that prints my name.

Somehow this got linked with the original project from Professor Im.  Redoing to have done in proper project.

Don't forget the first line that tells it's a Bash script.


Authentication, Part 2

TODO: Refactor for redux

Codecov Report
Attention: Patch coverage is 55.96708% with 214 lines in your changes are missing coverage. Please review.

Project coverage is 74.18%. Comparing base (96d7488) to head (805e9bf).

Files
Patch %
Lines

src/api/twitch/index.js
46.30%
138 Missing :warning:

src/pages/main-screen/index.jsx
30.76%
54 Missing :warning:

src/pages/authenticated-app/index.jsx
85.43%
22 Missing :warning:

Additional details and impacted files
@@            Coverage Diff             @@
##             main       #5      +/-   ##
==========================================
- Coverage   83.71%   74.18%   -9.54%
==========================================
  Files          15       16       +1
  Lines        1081     1321     +240
  Branches       36       42       +6
==========================================
+ Hits          905      980      +75
- Misses        176      341     +165

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


Use fnmatch on full path

Followup to #487, based on master.

According to https://github.com/ggreer/the_silver_searcher/pull/487#issuecomment-215927862 it should be fixed.
Closing.


[SPARK-16938][SQL] drop/dropDuplicate should handle the columns with qualified names

What changes were proposed in this pull request?
This PR fixes dropDuplicate not to raise exceptions on qualified column names. This bug is recently introduced by SPARK-15230 with commit https://github.com/apache/spark/commit/925884a612dd88beaddf555c74d90856ab040ec7 . Also, this PR fixes drop to handle correctly qualified column names. Currently, it does not remove them correctly if the arguments are string types.
Reported Scenarios
scala> val dfa = Seq((1, 2), (2, 3)).toDF("id", "a").alias("dfa")
scala> val dfb = Seq((1, 0), (1, 1)).toDF("id", "b").alias("dfb")
scala> dfa.join(dfb, dfa("id") === dfb("id")).dropDuplicates(Array("dfa.id", "dfb.id"))
org.apache.spark.sql.AnalysisException: Cannot resolve column name "dfa.id" among (id, a, id, b);

Here is the same result on Databricks CE / Spark 2.0.
How was this patch tested?
Pass the Jenkins tests with a newly added test case.

Test build #63330 has started for PR 14527 at commit 62c238a.

Test build #63330 has finished for PR 14527 at commit 62c238a.

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

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

Merged build finished. Test PASSed.

Test build #63468 has started for PR 14527 at commit fdeb02e.

Hi, @cloud-fan .
Could you review this PR when you have some time?

Test build #63468 has finished for PR 14527 at commit fdeb02e.

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

Merged build finished. Test PASSed.

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

This is consistent with drop, if we wanna fix it, we should also fix drop.
But one thing is, drop has a version that can take Column, so we can work around this case by df.drop($"tbl.col"). dropDuplicate only take strings.
cc @rxin , any ideas?

Oh, I see. I'll check drop, too.

Test build #63509 has started for PR 14527 at commit e8348dd.

Test build #63509 has finished for PR 14527 at commit e8348dd.

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

Merged build finished. Test PASSed.

Hi, @cloud-fan . Now, this PR fixes drop, too.

Test build #63734 has started for PR 14527 at commit fbd4c2c.

Test build #63734 has finished for PR 14527 at commit fbd4c2c.

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

Merged build finished. Test PASSed.

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

Test build #63855 has started for PR 14527 at commit aae4161.

Test build #63855 has finished for PR 14527 at commit aae4161.

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

Merged build finished. Test PASSed.

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

Test build #63988 has started for PR 14527 at commit dd9c369.

Hi, @cloud-fan .
Could you review this PR again?

Test build #63988 has finished for PR 14527 at commit dd9c369.

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

Merged build finished. Test PASSed.

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

Test build #64131 has started for PR 14527 at commit 167b055.

Test build #64131 has finished for PR 14527 at commit 167b055.

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

Merged build finished. Test PASSed.

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

Test build #64238 has started for PR 14527 at commit 00075f9.

Test build #64238 has finished for PR 14527 at commit 00075f9.

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

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

Merged build finished. Test PASSed.

Hi, @rxin and @cloud-fan .
Is it possible to fix this bug in 2.0.1 ?

Test build #64356 has started for PR 14527 at commit 9e03c81.

Test build #64356 has finished for PR 14527 at commit 9e03c81.

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

Merged build finished. Test PASSed.

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

Hi, @hvanhovell .
Could you review this PR?

Test build #64571 has started for PR 14527 at commit 9359601.

Test build #64571 has finished for PR 14527 at commit 9359601.

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

Merged build finished. Test PASSed.

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

Test build #64874 has started for PR 14527 at commit af51466.

Test build #64874 has finished for PR 14527 at commit af51466.

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

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

Merged build finished. Test PASSed.

Test build #64965 has started for PR 14527 at commit a30cd6e.

Test build #64965 has finished for PR 14527 at commit a30cd6e.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

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

Merged build finished. Test FAILed.

Retest this please

Test build #64983 has started for PR 14527 at commit a30cd6e.

Test build #64983 has finished for PR 14527 at commit a30cd6e.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

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

Test build #65024 has started for PR 14527 at commit 0970781.

Test build #65024 has finished for PR 14527 at commit 0970781.

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

Merged build finished. Test PASSed.

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

Hi, @cloud-fan .
Could you review this PR?

Test build #65140 has started for PR 14527 at commit c18781e.

Test build #65140 has finished for PR 14527 at commit c18781e.

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

Merged build finished. Test PASSed.

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

Test build #65248 has started for PR 14527 at commit 67ea924.

Test build #65248 has finished for PR 14527 at commit 67ea924.

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

Merged build finished. Test PASSed.

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

Sorry I was quite busy these days. It looks to me that a better approach is adding new API, instead of fixing the one with string parameter. cc @liancheng @yhuai what do you think?

Thank you for feedback, @cloud-fan ! I see.

@cloud-fan  by adding a new API do you mean move the logic into a new method in the Dataset class?


Method total does not exist - pagination

Version information

Laravel: v5.5
Voyager: v1.1.1
PHP: 7.1
Database: [type] [version] (e.g. MySQL 8.0)

Description:
I am trying to add some filters into query on 'VoyagerBreadController.php' controller file into '$dataTypeContent' query section, but I am getting method total does not exist error, could anyone please reply on same.
Any help would be highly appreciated.

You have to show us your query, otherwise we can't tell you what you are doing wrong.
Also, questions are better asked in our Slack group.

Closing this for now.
Please provide more informations, or, even better, ask in our Slack group.


Decision plot issue

When I tried running the below line, I have got the error along with the output plot.
shap.decision_plot(explainer.expected_value[0], shap_values[0], X, link="logit")
AttributeError                            Traceback (most recent call last)
 in ()
----> 1 shap.decision_plot(explainer.expected_value[0], shap_values[0], X, link="logit")
~\AppData\Local\Continuum\anaconda3\lib\site-packages\shap\plots\decision.py in decision_plot(base_value, shap_values, features, feature_names, feature_order, feature_display_range, highlight, link, plot_color, axis_color, y_demarc_color, alpha, color_bar, auto_size_plot, title, xlim, show, return_objects, ignore_warnings, new_base_value, legend_labels, legend_location)
538         show,
539         legend_labels,
--> 540         legend_location,
541     )
542
~\AppData\Local\Continuum\anaconda3\lib\site-packages\shap\plots\decision.py in __decision_plot_matplotlib(base_value, cumsum, ascending, feature_display_count, features, feature_names, highlight, plot_color, axis_color, y_demarc_color, xlim, alpha, color_bar, auto_size_plot, title, show, legend_labels, legend_location)
146         # place the colorbar
147         pl.ylim(0, feature_display_count + 0.25)
--> 148         ax_cb = ax.inset_axes([xlim[0], feature_display_count, xlim[1] - xlim[0], 0.25], transform=ax.transData)
149         cb = pl.colorbar(m, ticks=[0, 1], orientation="horizontal", cax=ax_cb)
150         cb.set_ticklabels([])
AttributeError: 'AxesSubplot' object has no attribute 'inset_axes'

Could you please provide more code? That would help to reproduce the error you're dealing with. Thank you.

import pandas as pd
import numpy as np
import shap
from xgboost import XGBClassifier
data = pd.read_csv("C:/Users/765204/Downloads/Iris.csv")
X = data.iloc[:,:4]
y = data.iloc[:,-1]
model =XGBClassifier()
model.fit(X,y)
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X)
shap.initjs()
shap.decision_plot(explainer.expected_value[0], shap_values[0], X, link="logit")

The code runs fine on my machine. I googled it, and it seems that the error comes from your matplotlib package. Make sure it is the newest one and/or upgrade it.
Come back if the error persists after upgrading.

Hey,
I am facing the same problem. I was wondering if you got any solution for this error.
Error encountered : "AttributeError: 'AxesSubplot' object has no attribute 'inset_axes'"
Thanks.

Same Problem, too......
What's the specific version of matplotlib package are you using?

I have similar issue.
Python 3.6, matplotlib 2.1.2.
This should be fixable by updating matplotlib to version 3.0 and above. A quick fix for those who don't want to mess around with mpl version:
Locate the decision.py file in your shap package: shap/plots/decision.py, and inside __decision_plot_matplotlib, update the relevant lines to:
        # place the colorbar
        pl.ylim(0, feature_display_count + 0.25)
        try:
            ax_cb = ax.inset_axes([xlim[0], feature_display_count, xlim[1] - xlim[0], 0.25], transform=ax.transData)
        except AttributeError:
            from mpl_toolkits.axes_grid1.axes_divider import make_axes_locatable
            ax_divider = make_axes_locatable(ax)
            ax_cb = ax_divider.append_axes("top", size="7%", pad="8%")

        cb = pl.colorbar(m, ticks=[0, 1], orientation="horizontal", cax=ax_cb)
        cb.set_ticklabels([])
        cb.ax.tick_params(labelsize=11, length=0)
        cb.set_alpha(alpha)
        cb.outline.set_visible(False)


Changes in manifest.json from V2 to V3 host permissions and permissions merged in to host_permissions?

It this right?
From the chrome side, it's the opposite
Document Details
⚠ Do not edit this section. It is required for learn.microsoft.com ➟ GitHub issue linking.

ID: 6fb3acda-9e0e-ced5-3f68-74f62fdb32d9
Version Independent ID: c30c7d65-d50b-fd32-d65e-c8e27e9e39a3
Content: Manifest file format for extensions - Microsoft Edge Development
Content Source: microsoft-edge/extensions-chromium/getting-started/manifest-format.md
Product: microsoft-edge
Technology: extensions
GitHub Login: @MSEdgeTeam
Microsoft Alias: msedgedevrel

AB#43357518

Thanks for filing. I do not have the answer to this offhand, but I'll make sure this is added to our team's backlog so we can take a look and update the docs if they're incorrect.

Thanks for opening the issue. We updated the document. Much appreciated.


Do image filters/processing lazily and on the GPU

I want to make a pixel enumerable / version of the image object that lazy evaluates everything and a version that turns the linq expressions and image filters into a GPU program.

Made some lazy evaluated enumerables

Closing and remaking the GPU work item


[Extended team WIP] ALMS-203 [iOS] Update quickstart app to use latest versions of Auth and Tracking SDKs

Going forward, please put "Extended team WIP" as a label instead of in the title. Thanks!

Closing this in favor of https://github.com/aws-geospatial/amazon-location-samples-ios/pull/4


[DOCUMENTATION] microshift dev environment not working by following the docs

After following the documentation to set up a microshift dev environment, microshift never finishes starting up the pods
The main problem is service-ca not starting properly, because it cannot connect with kubeapi:
dial tcp <IP_ADDRESS>:443: connect: no route to host
The solution was to add a firewall rule to allow traffic to <IP_ADDRESS>/16

Thanks, and nice to know about the automation way :)


Reproducing the paper results

Dear authors,
Thank you for your exciting work and very clean code. I am having trouble reproducing the results mentioned in the paper and would appreciate it if you could help me.
1. Reproducing the UNO results from table 4.
I was trying to get the scores on the samples of novel classes from the test split (Table 4 in the paper).
I have executed the commands for CIFAR10, CIFAR80-20, CIFAR50-50, and used Wandb for logging. However, the results on all datasets did not match the ones that I see in the paper. I took the results from incremental/unlabel/test/acc.

.
Paper (avg/best)
Reproduced (avg/best)

CIFAR10
93.3 / 93.3
90.8 / 90.8

CIFAR80-20
72.7 / 73.1
65.3 / 65.3

CIFAR50-50
50.6 / 50.7
44.9 / 45.7

Potential issues:

I am not using the exact versions of the packages mentioned in your ReadMe, and for that reason, I have run the CIFAR80-20 experiment twice, manually setting the seed (as in RankStats repo), however, I obtained very similar results. I also would not suspect a ~7% difference on CIFAR80-20 just to to the package version.
I may be using the wrong metric from wandb (I have used incremental/unlabel/test/acc). However, if you check my screenshot, for CIFAR80-20 all the other metrics are significantly different anyway (the value close to 72.7/73.1 does not appear anywhere).

2. How exactly the RankStats algorithm was evaluated on CIFAR50-50.
Could you please share if you performed any hyperparameter tuning for the CIFAR50-50 dataset when running the RankStats algorithm on it? I made multiple experiments and my training was very unstable, the algorithm always ends up scoring ~20/17 on known/novel classes.
Thanks a lot for your time.

I have just noticed that the batch size mentioned in the paper is 512, while the one in the ReadMe is 256. I suspect this could be the issue, will test it soon.

Hi! I have just rerun an experiment with batch size 256 on CIFAR100-80_20 and I got 71.7 for incremental/unlab/test/acc/avg, which is very close to the result published in the paper with batch size 512.

Also if you check the shape of the curve, it looks very different from your curves. I guess you are doing something wrong. It is very likely due to the version of pytorch-lightning and/or lightning-bolts. Try to use the exact versions I specified in the README.
Regarding ranking statistics, I remember I had some problems with hyperparameters too but in the end it was quite easy to get it running. I am going through my logs now and it seems I used this command for RS+:
auto_novel.py --dataset_root ./data/datasets/CIFAR/ --exp_root ./data/experiments/ --warmup_model_dir ./data/experiments/supervised_learning/resnet_rotnet_cifar100-50.pth --lr 0.1 --gamma 0.1 --weight_decay 1e-4 --step_size 340 --batch_size 256 --epochs 400 --rampup_length 300 --rampup_coefficient 25 --num_labeled_classes 50 --num_unlabeled_classes 50 --dataset_name cifar100 --IL --increment_coefficient 0.05 --seed 0 --model_name resnet_IL_cifar100 --mode train --comment RS+-50_50

I did not modify their code much so it should just work.

It was indeed an issue specifically with the libraries you mentioned, - I completely overlooked that they affect the optimization, etc.
Thank you for your prompt reply and time @DonkeyShot21.

As a side comment, I noticed that to evaluate your algorithm in the "task-agnostic" setup you generate predictions and solve the assignment problem separately for samples of known and novel classes.
Correct me if I'm wrong, but this might be the wrong way to perform such evaluation because one should have no knowledge on whether the group of samples belongs to known or novel classes, which you assume when performing such evaluation. The way I expected it to be is to use a joint dataloader that contains all the samples mixed and to apply Hungarian on all the resulting predictions at once.
It probably has negligible implications for this work because the classifier is trained well and the assignment problem solver assigns only one logit index to each class. But, as far as I see, assuming some novel class gets confused for the known class the majority of the time (I mean the highest logit it gets comes from the first head), such evaluation would not catch that as an error.
It might be, however, that such evaluation is expected and I just didn't get it from the paper, so just sharing my thoughts here.

Happy to help! I added a note in the README that warns about package versions.
Regarding the evaluation, I think the procedure I am following is correct because I am first concatenating the logits (preds_inc) and then I am taking the max of those concatenated logits. By doing this I lose the information about the task. Then in the compute() method of the metric class, I compute the best mapping on all classes (and not separately).

The (potential) problem, I believe, is that the linear_sum_assignment is computed not for all the data at once.
In the case when one tests on data with novel classes only, assume the model erroneously predicts logits from the first head for all the samples. Then the accuracy should be zero because you explicitly train the first head to predict known classes. However, because you test only on novel classes, the linear_sum_assignment could "distribute"/"match" logits from the first head to the novel classes and the accuracy would be above zero. There would be no problem with assigning those first-head logits to novel classes because no "known" images are being fed to linear_sum_assignment and those first-head logits are "free" to be assigned to something else.
However, if you would have a mixed dataset, then linear_sum_assignment would most likely have assigned those first-head logits to known classes, because they would dominate. And the novel classes would have to be assigned to something else, marking all the first-head predictions for novel classes as errors, and the final accuracy would be much lower.
But, once again, I think it doesn't affect evaluation for balanced and moderately large datasets like CIFAR/ImageNet.

Ok, now I understand. You are right, this is a potential problem. However, the assignments are quite stable (they are computed on the whole validation set) and, as you said, the potential issue never happens in practice. I remember I tried once to remove the unwanted assignments (the ones that contradicted the labeled head), but the results were exactly the same, while the code was more complicated, so I just removed it. Also, if I remember correctly, in Ranking Statistics they use the same evaluation procedure, so I just sticked to that.


[Frontend] Implement a basic useFetch hook

Goal
Implement a basic useFetch hook in the library. It can then be imported to make GET request from the frontend. We only need GET request right now (to fetch quizzes and questions)
Possible usage
import { useFetch } from "@/lib/hooks";
import { onBeforeMount, ref } from 'vue';
import type { Ref } from 'vue';
import type { Quizzot } from "@interfaces/quizoot";

const quizzes = ref<Quizoot.Quiz[] | null>(null);

onBeforeMount(async () => {
  const { data, error, isFetching } = await useFetch<Quizoot.Quiz[]>(`/api/quizzes`);
  quizzes.value = data;
  // Do something else
});

requirements

[ ] return at least data, error and isFetching (or isLoading)
[ ] should be implemented in src/lib/hooks.ts
[ ] should use axios and probably the makeRequest() function from @/lib/requests

References

Vue composable

@YacineSteeve interested ?

As an alternative, we can just use VueUse: usefetch. But I thought it might be a good coding exercise.. So whatever you think might suits well.

Sounds interesting, I take this one