KI203 algo

Hello there,
amazing job done in here! I have on the table KI203 (pre facelift cluster). 27 01 provides 4 byte seed size and key size requested ( 27 02 ) is 4. I read all the comments from @VladLupashevskyi and based on his comment, the key is calculated based on the 4 bytes. Is it possible to modify KiAlgo1 to accept 4 bytes only? Thanks!

Hey @rumator try to put your 4 bytes seed instead of 1's as on this picture, you can leave zeros as placeholders, since they don't play any role in key calculation. As key you can take highlighted 4 bytes.
Not sure it will work, but please try and let us know, maybe also try to reverse endianess of seed or/and key.

Hello @VladLupashevskyi
I tested it and no luck, sec level goes from 61 11 02 to 61 11 00
 I will test different software version

Hi there,
so during the yesterday's night I tested some more alogs, but no luck. I tested simple 27 01 and also 10 F0 for "VDO mode" and then I got seeds by 31 FB 10. To be honest I don't know the difference between those 2 methods, but both gives 4 bytes, but I was not able to get any successful unlock.
With the CxF viewer I found interesting comment in cbf file:
27 01 function has description as following

!!!Bitte ab BR 211 den parallelen SECURITY-Dienst verwenden!!! Seedbytes fuer die Entriegelungsstufe 1 holen
10 92 has following

!!!Bitte ab BR 211 den parallelen SESSION-Dienst verwenden!!! Diagnosemodus Db-Diagnose einstellen
based on this I think that algo from ki211 suppose to somehow work on those clusters.
Any ideas welcomed,
thanks!

Hi, small update from my side, I dumped full firmware from the cluster. I did no find root keys yet.
https://github.com/rumator/ki203

Hey guys, just did a quick lookup.
These look like root keys for 7 access levels (so we need just last one to get lvl 7).

Key calculation function is located at: 0xf910b6-0xf91232. I could not find a proper C decompiler for it, but after a quick look  it looks like it's the same logic.
Be aware that this CPU is little-endian so you might try both options for root key: 27FC2D10 and 102DFC27.

And thanks for the dump @rumator :)

Hello @VladLupashevskyi, thanks for fast answer (and email with advice)!
Unfotunately its not working, I made this:

then tested both root keys as mentioned above (key has been inserted as 11 22 33 44 and 44 33 22 11). I also tested 27 01 + 27 02 and 31 FB 10 + 31 FA 10 but every combination change my 07 access level gained from eeprom to 00.
Sorry for basic question, but how did you interpret the hex dump to the screenshot whit the keys which you posted?
thanks!

ok heres my contribution.
KI203
key generation algo v1:
203XXXXXXX_0223 ; 0x758A9A61
203XXXXXXX_0287; 0xF8205A4F
203XXXXXXX_0290; 0x054EDE92
key generation algo v2:
203XXXXXXX_0247; 0x5B51DE37
203XXXXXXX_029F; 0x5F1D72EC
v3:
203XXXXXXX_0253; 0xEF2DA763
v4:
203XXXXXXX_029D; 0xFFFFFFFF
v5:
203XXXXXXX_029E; 0x8EB3DAC5

@rumator I did it via Ghidra, found a CPU module for this CPU.
Hmm... it looks like @Feezex knows more about all different algos for these clusters :D
What I would try is also to invert endiannes for seed itself for this algo, so you can try those 4 optioned mentioned earlier.
Otherwise I can try to figure out what it's doing via assembly later, unfortunately that module for CPU does not decompile well assembly to C.

example for version1 :
Seed 28 EC EA E9 > 92 AE 8E CE (pos change) XOR 0x758A9A61  = E7 24 14 AF
12 34 56 78 > 81 63 25 47 >  XOR 0x758A9A61  = F4 E9 BF 26
other versions posibbly have other transposition map, can sort it out later.
For now try to enter menu in KI as in 1st post, and get version.

Here I tried to figure out assembly that I saw first time today, maybe that would be helpful. Some things were not clear to me.

Btw 31 FB 00 and 27 are pointing to the same function, so they should work the same

I think your 0288 is a v1 with 0xF8205A4F key.
So seed 12 34 56 78 > reorder bytes as  81 63 25 47 ,  XOR it with F8205A4F.

I think I've got it, will try to come up with some test script soon

ki203v1_F8205A4F.zip
try this xDD

Just finished decompiling. Quickly did a python script, @rumator try it out.
def rotate_left(v,n):
     for _ in range(n):
         cond = v & 0x8000_0000
         v = (v << 1) & 0xFFFF_FFFF
         if cond:
             v |= 1
     return v

def rotate_right(v,n):
     for _ in range(n):
         cond = v & 1
         v = (v >> 1) & 0xFFFF_FFFF
         if cond:
             v |= 0x8000_0000
     return v

def count_ones(v):
     r = 0
     for _ in range(32):
         if v & 1:
             r += 1
         v = v >> 1
     return r

def seed_key(seed, root):
     seed_reorder = (
         ((seed & 0xFF00_0000) >> 16) |
         ((seed & 0x00FF_0000) << 8)  |
         ((seed & 0x0000_FF00) >> 8)  |
         ((seed & 0x0000_00FF) << 16)
     )
     print("Seed reordered", hex(seed_reorder))
     rotated_left = rotate_left(seed_reorder, 3)
     print("Rotated left 3 times", hex(rotated_left))
     xored = rotated_left ^ root
     print("Xored", hex(xored))
     ones = count_ones(root)
     print("Ones", ones)
     rotated_right = rotate_right(xored, ones)
     print("Rotated right", hex(rotated_right))
     result = (
         ((rotated_right & 0xFF00_0000) >> 16) |
         ((rotated_right & 0x00FF_0000))       |
         ((rotated_right & 0x0000_FF00) >> 8)  |
         ((rotated_right & 0x0000_00FF) << 24)
     )
     print(f"Key result: 0x{result:08X}")

So you give it seed and root key and B912496B would be your key with seed 11223344.

@Feezex my algo gives actually the same result as yours, but it has more steps that describe how it was actually implemented.

awesome you)) glad that we got same result, cool to see how its originally implemented.

this is amazing!
@Feezex your algo works like a charm!

@VladLupashevskyi unfortunately PY algo generates different values...

When I had idea almost 1 year ago "hmm would be nice to have some more info about the car on cluster" I would never expect how deep this rabbit hole can be! And I love it!

try PY with 27FC2D10 key

unbelievable, it works indeed!

so there are 2 different algos with 2 different root keys, which works same.
@Feezex that small exe file is yours? did you extracted root keys same way as Vlad did it?

no, i have another source

Woohoo congrats @rumator.
I think the reason there are „different“ versions of algos, is just because one can be derived or simplified with each other.
so you can rotate either seed or root key before xoring, or after. Also the result would be the same if you move bytes or bits in seed value, or in root key.
so @Feezex you algo can be actually more simplified to one xor.
so instead of doing

[12 34 56 78] > reorder bytes as [81 63 25 47]

for seed, you can actually reorder your root key in the same way and use original seed.
then if you use that reordered root key, the algo is just one xor

And I think that’s also the reason they moved to a different more complex logic for algo in w211 later, someone realized that despite all these multiple shifts, the „root“ key can be obtained just if you know one pair of key and seed, just by xoring

as far as i remember ver3 / 4 / 5 is totally another algo, while ver 2 has another bit reordering map

@VladLupashevskyi the speed which you identified the correct architecture from that dump is impressive. Do you have advice or pointers on how you figured out that arch and that specific address to map the memory into?
@rumator Thanks for starting this thread and following it all the way through. I'm also curious about how you made the dump; I'm assuming that a CFF is unavailable for this cluster?
@Feezex Thanks for building and sharing the exe and supporting this thread (along with all the other discussions and issues too!)

When I started this specific project, I hoped that it would become a small, cozy spot in the internet for random folks to collaborate and work together on seed-key algos (which was traditionally gated knowledge). You guys are doing that right now and it's amazing to watch this algo come to life. Well done, all of you ^^

@jglim hello, I followed Vlad's advices.

The address in EEPROM for ki211 that I checked was 0x0DE, 0x0DF which is for default lvl 2 is 0xA2C4 and for level 7 it's 0x5779

then with Arduino fault-tolerant shield dumped via UDS commands segment by segment.

12 34 56 78 > reorder >81 63 25 47 , xor  F8205A4F = 79 43 7F 08
12 34 56 78 xor "reordered xor" FFA28504 (F8205A4F) = ED 96 D3 7C

Влад дай почту или номер телефона

@jglim I was also surprised that it was so fast, I think it has to do with me doing reverse engineering of ki209/ki211 for more than a year on regular basis :D
I just used the dump that @rumator has provided with memory map and CPU, found it architecture in datasheet and CPU module for Ghidra and started to probe data structures that I know exist in ki211. Eventually I found a diag structure, disassembled it function by function until I noticed some xors and shifts in there. There was of course also a ref to some bytes which were 7 32bit random numbers.
I wonder also that those root keys might not be even random, because remember in ki211 algo there are 4 bytes that are "unused" for key calculation. It turns out that those 4 bytes are generated as follows: 4 bytes of real seed xored with root key of second level (default access lvl) and then rotated 5 times to left.
So you can get a root key for level 2 from 8 bytes seed and then somehow get root for any desired level. Either originally it was done by using some lookup table or generate it deterministically. For example what I noticed is that if root key for some level has F in the end all other root keys for other access levels have also F in the end. Tried to do some bruteforcing with different shifts and xors but no result. I have to say I am not that good in finding those dependancies as @Feezex :D
Very happy that this project is alive :)
@Feezex I will send you my contacts to your GitHub email.
P.S.: For fun I've implemented a snake on w209 cluster :D
https://www.youtube.com/shorts/D-FUJNtGVPk

@VladLupashevskyi your disassembly level of the cluster firmware is overwhelming! My goal is to reach multiple temps on the cluster display directly. Due to the limited options of the old cluster, I am thinking to move and retrofit W209/W203 FL cluster to preFL203. Both of them suppose to have MB91F. Based on your experience, is available F2MC-16LX plugin to Ghidra mature enough for this job or is it better to move on?
thanks!

Folks, I've added a new provider based on VladLupashevskyi's implementation as it is easier to adapt new keys from dumps if they become available in the future.
There are 3 new definitions, 0223, 0287 and 0290. These are using keys that were shared by Sergey here (0287 in rumator's use case). Please let me know if they work (or not)

@VladLupashevskyi That snake implementation is crazy! I'm guessing that it was hand-assembled into the existing firmware blob? It must have been a lot of effort to figure out how to drive the lcd, and the red backlight at the end is a nice touch. Again, very curious about how you did it and the thought process behind it. Time for you to write a long-form article? Would love to read it if you do -- let me know :^)

Thanks guys for your comments :)
@rumator I would say, better put w209 instead of preFL203, it looks nicer. Of course it's a taste thing :D
I have an experience with doing exactly that. We've put ki209 to w203 of my friend. You have to cut casing a bit, or better get a holder for w209 cluster (you'll still need to cut case a bit, but i think it's less there)
We've took a preFL ki209, but I believe fl ki209 should work as well. FW is built in a similar way on both, but if you dont want to have unexpected surprises, just take a preFL ki209. You'll need to move milage and SSID from old cluster. Also get all codings of ki203 and then do coding for ki209.
F2MC-16LX plugin cant do a proper C decompiling, which would slow down a process by a lot, so I would recommend to use friendly RISC FR50 of 209 or fl203 cluster :)
@jglim Yeah, it was hand assembled and patched to existing firmware. Maybe I'll write some article in the future, would be similar to that one: https://alexhude.github.io/2019/01/24/hacking-leica-m240.html (really nice read and also about fujitsu FR family, recommend to read if you haven't yet). Will let you know for sure! But I haven't finished with experimenting yet :D Trying to put MB91F362 CPU instead of 376 one now. That one has an external data and address bus, so I can put all the code into RAM, put breakpoints and do more debugging there. Given it's the same architecture and almost same peripherals on the 362 CPU it's relatively easy to achieve.
For now I can already boot the FW from there already, so let's see how it goes...
Cluster looks like an octopus now...

P.S.: For fun I've implemented a snake on w209 cluster :D
https://www.youtube.com/shorts/D-FUJNtGVPk

Oh... now i want this game on my ki211)))

@VladLupashevskyi That was a fun read, thanks! And wow that's super cool that you've got your custom board running even with the complexities of external memory; I've tried and failed** in a similar endeavour so I can appreciate the amount of work that goes into that. Can't wait to see what you'll build from there, maybe add a faster coprocessor paired with one of those 1920×480 displays?
** this was my attempt in building a minimal board using the 204's cpu. It didn't show up on the ISP when I tried to bring it online, and I never got to figure out why :(

Ok, i do like original algo usage because it works for version 2, while transposition map there is different in my algo version.
So V2.
203XXXXXXX_0247 - 024B; seed 12 34 56 78 > 78 56 12 34 > xor 5B51DE37> result  2307CC03 ;
203XXXXXXX_029F; seed 12 34 56 78 > 78 56 12 34 > xor 5F1D72EC> result  274B60D8;

@jglim your condense key converter works amazing.

It does works with V2 and you guys combined them, so you can add definitions.
    {     "EcuName": "KI203",     "Aliases": [],     "AccessLevel": 1,     "SeedLength": 4,     "KeyLength": 4,     "Provider": "KI203Algo1",     "Origin": "KI203_203_0247-024B_L7_@Feezex-@rumator-@VladLupashevskyi",     "Parameters": [       {         "Key": "K",         "Value": "BADEF289",         "DataType": "ByteArray"       }     ]   },       {     "EcuName": "KI203",     "Aliases": [],     "AccessLevel": 1,     "SeedLength": 4,     "KeyLength": 4,     "Provider": "KI203Algo1",     "Origin": "KI203_203_0247-029F_L7_@Feezex-@rumator-@VladLupashevskyi",     "Parameters": [       {         "Key": "K",         "Value": "62FB90EF",         "DataType": "ByteArray"       }     ]   },

Going to check another versions

v3_0253; seed 12 34 56 78 >D3 06 AE 79
v4_029D; seed 12 34 56 78 >4E 3F 5C 6D
v5_029E; seed 12 34 56 78 >7E 1F FE AD
and it works.

"Origin": "KI203_203_0253_L7_@Feezex-@rumator-@VladLupashevskyi",
      "Value": "3EFA72D6",

"Origin": "KI203_203_029D_L7_@Feezex-@rumator-@VladLupashevskyi",
      "Value": "FFFFFFFF",

"Origin": "KI203_203_029E_L7_@Feezex-@rumator-@VladLupashevskyi",
      "Value": "163B6ACF",

Can be closed now =)

@Feezex Nice! Glad to see that they can all fit in the same algo. Thanks for preparing and sharing this, along with the huge list of definitions on #12!

Folks, y'all are still welcome (and encouraged) to continue our conversations here, in this issue -- the "closed" state is simply an indicator that we have all completed our work on the KI203 seed/key, the thread remains unlocked.

@jglim  Just happened to notice that a guy is trying to sell this app.
Here on the video he shows installer protected by password and with his name there 😡  :
https://youtu.be/gqjtNhlDa1g?si=BFD-M57EXh9BzOjZ

Hey thanks for pointing that out. Unfortunately this isn't the first individual I've seen who is trying to make a profit off a largely unmodified copy of UnlockECU, and probably won't be the last.
When I first launched this project, I chose the MIT license as it was very permissive and allows for commercial usage, so curious folks who wanted to build something cool (e.g. ecu map editors? research on defeat devices?) could comfortably depend on this project and even monetize their projects at a later date. Commercial entities like workshops and professionals could also use this without worrying about licensing. Whatever "amazing road TV" is doing is legal, but definitely goes against the spirit of this project, and I don't approve of it.
I don't plan on adding any technical countermeasures (e.g. watermarks, urls, popups or packers/protectors) as I find that these tend to work against the end users, and will start a cat-and-mouse chase with less savory people. Rather, I hope that the name of our project here will become familiar enough so that newcomers can find their way here and access the real application for free. So far, this project has been the first organic hit on most search results, thanks to the many fine folks who have shared links on their websites and forums, and I hope it remains this way.
On the lighter note, it's fun to see some of your names appear as he shows off the application:

VladLupashevskyi, rnd-ash, https://youtu.be/gqjtNhlDa1g?t=97
WSorban: https://youtu.be/gqjtNhlDa1g?t=113
Feezex: https://youtu.be/gqjtNhlDa1g?t=126
jnewb1: https://youtu.be/gqjtNhlDa1g?t=93


Missing precondition documentation

This method is throwing is IsEnabled is false. This should be added to the documentation

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 6e4baacf-66ef-063e-5af7-d13f3fd50ee5
Version Independent ID: deefe87f-5615-b4c9-6000-5540cd6f6fe3
Content: MediaPlaybackSphericalVideoProjection.HorizontalFieldOfViewInDegrees Property (Windows.Media.Playback) - Windows UWP applications
Content Source: https://cpubwin.visualstudio.com/DefaultCollection/windows-uwp/_git/winrt-api-build?path=%2fwinrt-api-build%2fwindows.media.playback.mediaplaybacksphericalvideoprojection.yml&version=GBlive&_a=contents
Product: uwp
Technology: winrt-reference
Git Login: drewbatgit
Microsoft Alias: drewbat

Hello, thanks for your feedback on the documentation. WinRT APIs are designed such that exceptions are intended to provide feedback during app development and should not be caught at runtime. This is one reason our convention is not to document exceptions for WinRT APIs. The exception type and message should be sufficient to let you know the necessary changes in your code. In this example, your code should check the IsEnabled value before trying to set the HorizontalFieldOfViewInDegrees, rather than catching the exception at runtime.

I still think that this should be documented. If we do not want to document the exception, there should still be a note saying that the projection must be enabled before trying to change HorizontalFieldOfViewInDegrees.
With the current documentation, we don't know if we should do:

IsEnabled = true then HorizontalFieldOfViewInDegrees = xx
or
HorizontalFieldOfViewInDegrees = xx then IsEnabled = true

We can deduce this by running the app and receiving the exception but things are much easier and less time consuming when the intended usage is clearly documented.


Social links added

YouTube - https://www.youtube.com/c/KunalKushwaha
Discord - https://discord.io/commclassroom
Twitter - https://twitter.com/commclassroom
Instagram - https://www.instagram.com/commclassroom/
Github - https://github.com/commclassroom

This has already been updated, thank you for opening the PR.


Issues compiling templates with Elixir 1.17.rc0

When compiling a project using Elixir 1.17 rc0, the pattern matching from the tokenizer fails to match, giving errors such as the following:
== Compilation error in file lib/ogat_app/badges/emails/rejection_template.ex ==
** (CaseClauseError) no case clause matching: {:ok, 1, 14, [], [{:identifier, {1, 3, ~c"first_name"}, :first_name}, {:at_op, {1, 2, nil}, :@}], []}
    (mjml_eex 0.10.0) lib/mjml_eex/tokenizer.ex:60: MjmlEEx.Tokenizer.tokenize/6
    (mjml_eex 0.10.0) lib/utils.ex:46: MjmlEEx.Utils.escape_eex_expressions/1
    (mjml_eex 0.10.0) lib/mjml_eex.ex:228: MjmlEEx.get_raw_template/3
    (mjml_eex 0.10.0) expanding macro: MjmlEEx.__using__/1

It appears to be caused by :erlang_tokenizer.tokenize/3 now including an extra item in the returned tuple, which was introduced in this commit.

Thanks for the heads up! I'll fix this up over the weekend and cut a new release.

I merged in the PR with the fix. I'm going to test a few things out in my production app before cutting a release though. Look out for a release early next week :).

Thanks!

@akoutmos Running into the same issue I just wanted to say my setup works fine with master, so a release would be appreciated :)

I'm currently having issues with erlexec on my ARM mac:
$ mix test
Generated mjml_eex app

09:33:07.207 [notice] Application erlexec exited: :exec_app.start(:normal, []) returned an error: shutdown: failed to start child: :exec
    ** (EXIT) bad return value: ~c"Cannot find file ./_build/test/lib/erlexec/priv/false: no such file or directory"

09:33:07.217 [notice] Application telemetry exited: :stopped

09:33:07.217 [notice] Application phoenix_html exited: :stopped

09:33:07.217 [notice] Application eex exited: :stopped

09:33:07.217 [notice] Application mjml exited: :stopped

09:33:07.217 [notice] Application rustler_precompiled exited: :stopped

09:33:07.217 [notice] Application castore exited: :stopped
** (Mix) Could not start application erlexec: :exec_app.start(:normal, []) returned an error: shutdown: failed to start child: :exec
    ** (EXIT) bad return value: ~c"Cannot find file ./_build/test/lib/erlexec/priv/false: no such file or directory"

I'll be cutting a new release after I make a PR back to erlexec fixing this issue.

Ah, ok… I don't use that, so trouble on my arm mac. Thanks!

It only impact users that are using Node compiler as opposed to the mjml NIF. After some more digging cutting a release wouldn't change the fact that this is currently broken for people due to erlexec. Release has been cut!

Error while loading project :mjml_eex at …/deps/mjml_eex
** (File.Error) could not read file "VERSION": no such file or directory
    (elixir 1.17.0) lib/file.ex:385: File.read!/1
    …/deps/mjml_eex/mix.exs:89: MjmlEEx.MixProject.project_version/0

The file is indeed missing in the directory.

oof. Try it again. I forgot to add the version file to mix.exs package block -_-

Works fine, thank you and sorry for rushing you on the release :-/


[Analyzer] Convert to expression body can lead to unwanted results

The following suggestion to convert this expression to a function body changes the function from being assigned when the line is run, to being executed when the line is run. I understand that the fat arrow notation also means return, which means the function gets evaluated, but in my case, this causes the function to get run too early and was a beast to track down.
Link to DartPad example

changes the function from being assigned when the line is run, to being executed when the line is run

This is not expected - can you clarify?
In the linked dartpad the only difference is whether a value is returned, there is no difference on timing for when a function is executed.

Sorry, I'm my case, I believe that the function was being evaluated in order to set the variable when the variable was run across, not when the function was called. I was setting a variable equal to a function to be ready when it was called, but my setting that variable, the function was called to evaluate the variable, well before it was actually  used. It was a void function, so no real evaluation was necessary, but it still made a call to my bloc early than I planned. Does that make sense?

There must have been some other difference in the code. Using => would not cause the expression to be evaluated at the time the function is assigned to a variable.

Alright, Ill double check what I submitted, thanks!

Please re-open if you encounter this again.


python310Packages.elastic-apm: 6.14.0 -> 6.15.0

Changelog: https://github.com/elastic/apm-agent-python/releases/tag/v6.15.0
Description of changes
Remove asynctest. Related #216168

Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
23.05 Release Notes (or backporting 22.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 216726 run on x86_64-linux 1

2 packages built:

python310Packages.elastic-apm
python311Packages.elastic-apm


Question about training data

Did you train your model on the entire training set of COCO? Which split do you use? Current code is training on one single image.

Hi,
PH2P does not train the neural network. It optimizes the input embedding tokens of the text encoder used for conditioning in text-to-image diffusion models. That is, given an image, one can optimize the input embeddings using our PH2P to generate the prompt for a given image.
In the paper, we showed results on a subset of COCO test images, where we optimize the prompt (embeddings) for each image.
Since this is an optimization framework and not a training paradigm, we donot update the parameters of the diffusion model.
The code works independently for each image (one prompt per image). So to extend it to generation of multiple prompts for multiple images, one can run a batch-job.

Got it, thank you very much.

Got it, thank you very much.


Opportunity to change the button class and add additional classes the button

I'll take a closer look at the weekend. I have some doubts about the last commit regex This solution is clear but it definitely increases the size of the plugin. I try to keep the plugin as small as possible. Therefore, I do not know if I will use it in a library.
For the rest, it looks ok at the moment ;)
Thanks again teawithfruit, the extra classes will come in handy.


class instance variables is not to converted to its equivalent useRef in hooks

while converting stateful component to hook, instances variables in class is not coverted to its equivalent in hooks which is useRef().
https://reactjs.org/docs/hooks-faq.html#is-there-something-like-instance-variablesso any code with syntax:
this.sView
should be:
const sView = useRef()

I agree @RamyEl-basyouni . I've been pondering about this myself. Care for a PR? I'd love to point you in the right direction?

Hey @RamyEl-basyouni! I've just released a new version that supports useRef. I'd love for some feedback

:tada: This issue has been resolved in version 4.19.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


fix same iv on every connection

Hello, I found that every connection cipher iv is same, because of the copy of origin cipher.
It's a serious bug.
Solution is that set iv as nil for every copy.

sorry. cipher is nil at begin, so it's no matter.


Poor Performance with automatic_model_training.ipynb

Hi,
I tried to use automatic_model_training.ipynb but encountered significant issues, resulting in a model that does not work effectively at all.
Configuration YAML Used
{'augmentation_batch_size': 16,
 'augmentation_rounds': 1,
 'background_paths': ['./audioset_16k', './fma'],
 'background_paths_duplication_rate': [1],
 'batch_n_per_class': {'ACAV100M_sample': 1024,
  'adversarial_negative': 50,
  'positive': 50},
 'custom_negative_phrases': [],
 'false_positive_validation_data_path': 'validation_set_features.npy',
 'feature_data_files': {'ACAV100M_sample': 'openwakeword_features_ACAV100M_2000_hrs_16bit.npy'},
 'layer_size': 32,
 'max_negative_weight': 1500,
 'model_name': 'alice',
 'model_type': 'dnn',
 'n_samples': 10000,
 'n_samples_val': 2000,
 'output_dir': './my_custom_model',
 'piper_sample_generator_path': './piper-sample-generator',
 'rir_paths': ['./mit_rirs'],
 'steps': 50000,
 'target_accuracy': 0.7,
 'target_false_positives_per_hour': 0.2,
 'target_phrase': ['alice'],
 'target_recall': 0.5,
 'tts_batch_size': 50}

Output Results:
Final Model Accuracy: 0.6267499923706055
Final Model Recall: 0.25699999928474426
Final Model False Positives per Hour: 1.0619468688964844

I tested using the detect_from_microphone script.
On the other hand, I successfully trained using  training_models.ipynb with synthetic_speech_dataset_generation  for generating 10,000 samples (5000 for each model), and the results were fine without downloading the full negative data.
Questions

What might be causing the disparity in performance between the two notebooks?
For training_models.ipynb:
2.1. Do I need to download the entire negative dataset, and if so, what is the total size in GB?
2.2. Is generating 50,000 positive samples for each model necessary?
Any additional advice or constructive feedback would be greatly appreciated.

Thank you!

i change sample to 100,000 it was even worse
{'augmentation_batch_size': 16,
 'augmentation_rounds': 1,
 'background_paths': ['./audioset_16k', './fma'],
 'background_paths_duplication_rate': [1],
 'batch_n_per_class': {'ACAV100M_sample': 1024,
  'adversarial_negative': 50,
  'positive': 50},
 'custom_negative_phrases': [],
 'false_positive_validation_data_path': 'validation_set_features.npy',
 'feature_data_files': {'ACAV100M_sample': 'openwakeword_features_ACAV100M_2000_hrs_16bit.npy'},
 'layer_size': 32,
 'max_negative_weight': 1500,
 'model_name': 'alice',
 'model_type': 'dnn',
 'n_samples': 100000,
 'n_samples_val': 2000,
 'output_dir': './alice',
 'piper_sample_generator_path': './piper-sample-generator',
 'rir_paths': ['./mit_rirs'],
 'steps': 50000,
 'target_accuracy': 0.7,
 'target_false_positives_per_hour': 0.2,
 'target_phrase': ['alice'],
 'target_recall': 0.5,
 'tts_batch_size': 50}

Those numbers seem reasonable based on my past experience, so it's odd that the model isn't working well for you in practice. Can you share the trained model file, and/or the notebook you used to train the model that performs well?
As for the other questions:

The automatic model training notebook tries to use reasonable defaults and automation to set hyperparameters to simplify the training process. From my somewhat limited testing this works well most of the time, but it's not surprising to see that in some cases using a more manual process can produce a better model.

In general, more negative sample is better, but there are diminishing returns. In my own testing I have terabytes of negative data for different experiments, but I doubt all of it is needed. As for positive examples, usually between 20,000 and 50,000 is sufficient, but sometimes more can help (it depends on the model, from what I've seen).

I utilized the training_models.ipynb notebook from the repository and made modifications to filter positive clips. Here's the specific change I made:
positive_clips, durations = openwakeword.data.filter_audio_paths(
    [
        "pos_data/alice/VITS/",
    ],
    min_length_secs = 0.5, # minimum clip length in seconds
    max_length_secs = 2.9, # maximum clip length in seconds
    duration_method = "header" # use the file header to calculate duration
)

print(f"{len(positive_clips)} positive clips after filtering, representing ~{sum(durations)//3600} hours")

The output shows that there are 48796 positive clips after filtering, representing approximately 8.0 hours.
This is my second experiment with 50,000 generated examples. The first experiment, which involved 10,000 examples from VITS and WAVEGLOW, worked fine.
Unfortunately, I cannot attach the model file due to GitHub's limitations on file types. Is it possible for me to send it via email instead?
Thank you for your assistance!

Did you use the training_models.ipynb exactly as it is? even the same model as mentioned there?

I utilized the training_models.ipynb notebook from the repository and made modifications to filter positive clips. Here's the specific change I made:
positive_clips, durations = openwakeword.data.filter_audio_paths(
    [
        "pos_data/alice/VITS/",
    ],
    min_length_secs = 0.5, # minimum clip length in seconds
    max_length_secs = 2.9, # maximum clip length in seconds
    duration_method = "header" # use the file header to calculate duration
)

print(f"{len(positive_clips)} positive clips after filtering, representing ~{sum(durations)//3600} hours")

The output shows that there are 48796 positive clips after filtering, representing approximately 8.0 hours.
This is my second experiment with 50,000 generated examples. The first experiment, which involved 10,000 examples from VITS and WAVEGLOW, worked fine.
Unfortunately, I cannot attach the model file due to GitHub's limitations on file types. Is it possible for me to send it via email instead?
Thank you for your assistance!

@lea-xtend-ai can you put the model file into an archive (e.g., zip or tar)? That might help you attach it to this issue. See more details here: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/attaching-files

I have a model that I trained using the training_models notebook, and it's working more or less fine. However, I've noticed a few false positives, especially with words containing the "al" combination where the "s" sound is less crucial for recognizing "Alice."
The model file is named alice_v5.zip
Interestingly, I observed that the model created by automatic_model_training.ipynb is much lighter, weighing only 206 KB, whereas the one from training_models is 351 KB.

thank you again!

I've also observed sub-usual performance on some words: in my latest case 'apartment'. I can upload an example if that would help as well.

@dscripka Yes, I agree with you, but I haven't been able to get the "automatic model training notebook" to work properly, regardless of the parameters I choose.


Feature/110 text chunking

adds functionality to chunk the data before passing it to supabase.
additional stuff:

names are now fetched and mapped to the messages from slack
reworked the autolinter

@Kadi-7 @zenzeii As you can see we changed the pdf_reader in a way, that the pdf reader doesn't return the DataInformation List but the text. You were right this is better as the id naming shema can be set by the preprocessor and not the pdf reader.

@JessePalarus, @amela16, @Kadi-7, @zenzeii  We experimented a bit with our LLM and found the following two issues:

When names are in texts, deepL will translate them but not necessarily backward when giving an answer. Example: try my last name( Erben) It will translate it often to Heirs. This can and sometimes already leads to errors.
We added a dataset from Slack where I wrote something about cats. When running and asking for information about that, we see, that we get the right context(Supabase dataset) but the LLM still answers, that he has insufficient information.

If there are ideas or information, please answer. Else I would ask @tkonheiser and @SaraElBrak to maybe create tickets for this, for the next sprint, so we can investigate this.

Thanks for taking care of this issue. The code looks good! 😊
However when we use the function transform_text_to_chunks() for confluence it doesn't chunk correctly as described here https://github.com/orgs/amosproj/projects/17?pane=issue&itemId=29851702
I think the problem must lay somewhere here:

Issue and Bug Report are created. @emuguy1 Please have a look at Issue 129 and refine the steps to reproduce the error or let me know some more details, especially the message about cats and the corresponding question to the Slackbot.


claude 2 100k

was curious if chatcraft could support claude 2 100k, I find I've been using claude 2 a lot on html.
would be very useful if i can do iterate the outputs via a chat UI like chatcraft
this is my test scaffold I've been using claude 2 100k with: https://github.com/steven4354/anthropic-test/blob/main/test_html_100k.ts
the only supports 1 message right now unfortunately which makes it hard to iterate when the first output from claude 2 is wrong

Does it work with OpenRouter? See https://openrouter.ai/docs for the list of what they support.  Anything you can run with them we can do.

Does open router allow me to use my own api key like chatcraft? I have my own Claude 2 100k keys

I see here it says it supports Claude v2
But I'm not sure if that is the 100k version

cc @tarasglek, I know very little about our OpenRouter impl

Also says here it can use the openai keys
Have you used openrouter on chatcraft before? Is it good?

Openrouter is fantastic when it works. Problem is that between langchain and their changes it rarely works. We are moving off langchain so I can pin them down easier, give them a test case so we can keep working.

Hi @tarasglek @steven4354 I believe we can help with this issue. I’m the maintainer of LiteLLM https://github.com/BerriAI/litellm
TLDR:
We allow you to use any LLM as a drop in replacement for gpt-3.5-turbo.
If you don't have access to the LLM you can use the LiteLLM proxy to make requests to the LLM
You can use LiteLLM in the following ways:
With your own API KEY:
This calls the provider API directly
from litellm import completion
import os
## set ENV variables
os.environ["OPENAI_API_KEY"] = "your-key" #
os.environ["COHERE_API_KEY"] = "your-key" #

messages = [{ "content": "Hello, how are you?","role": "user"}]

# openai call
response = completion(model="gpt-3.5-turbo", messages=messages)

# cohere call
response = completion(model="command-nightly", messages=messages)

Using the LiteLLM Proxy with a LiteLLM Key
this is great if you don’t have access to claude but want to use the open source LiteLLM proxy to access claude
from litellm import completion
import os

## set ENV variables
os.environ["OPENAI_API_KEY"] = "sk-litellm-5b46387675a944d2" # [OPTIONAL] replace with your openai key
os.environ["COHERE_API_KEY"] = "sk-litellm-5b46387675a944d2" # [OPTIONAL] replace with your cohere key

messages = [{ "content": "Hello, how are you?","role": "user"}]

# openai call
response = completion(model="gpt-3.5-turbo", messages=messages)

# cohere call
response = completion(model="command-nightly", messages=messages)

@ishaan-jaff this is interesting.  We added support for OpenRouter.ai for a similar reason, and I think LiteLLM looks similarly interesting for our use case.
A long-standing feature we've been slowly working toward adding is support for more and arbitrary backends.
I'm going to add LiteLLM to the list of supported ones we include in the list.

@humphd if Openrouter solved that problem why add LiteLLM ?

@humphd if Openrouter solved that problem why add LiteLLM ?

Choice, ability to try different backends, decoupling from providers who may or may not exist in the future, etc.

Did OpenRouter get into Chatcraft? I don't remember using it on Chatcraft before
Was there some issues with openrouter? Maybe @ishaan-jaff gets the info on openrouter s drawbacks he could make liteLLM good enough for chatcraft use
Just throwing out random ideas if it'd possibly make things easier to add more model support. Not sure if helpful!

Did OpenRouter get into Chatcraft? I don't remember using it on Chatcraft before

You can use either OpenAI or OpenRouter.ai currently.

Ah I see, that's great I didn't see it in the settings. i'll test that out


jQuery 2+?

Your dependencies say jQuery 1.7+. Would breaking changes in 2 affect your plugins?

Just read their only incompatibility is browser support.


Link fix for Migrate doc

Signed-off-by: Mary Jinglewski<EMAIL_ADDRESS>:nut_and_bolt: Description: What code changed, and why?
Broken link on https://automate.chef.io/docs/migrate/ needed fixing. Added a few quick formatting fixes, and a comma or two.
:+1: Definition of Done
🟢 means go
:athletic_shoe: How to Build and Test the Change
make serve
Go to: localhost:1313/automate/
:white_check_mark: Checklist

[x] I have read the CONTRIBUTING document.
[ ] Tests added/updated?
[x] Docs added/updated?
[x] All commits have been signed-off for the Developer Certification of Origin.

Closing in favor of https://github.com/chef/automate/pull/4241


docs: updated Python docs index with all supported platforms

Also fixed #324 (broken link to Raspberry Pi page).

Thanks alot for fix - please add sign off!

Oops  indeed, sure will do in the evening today. Did that directly through GitHub web editor (handy for such small edits) and forgot it doesn't add that by default :smiley:

Added a sign off line.

Thanks a million! Merged with 621bf5266e3762e98347a3c5d4fed6c49339dd1b


Destination images used for Flight Status were set at 165x165 in Figma

Hi, Dale! The final destination images used for Flight Status were set at 165x165 in Figma. Here's a screenshot of the final design in the wild (which looks like it scaled to 226x226):

Originally posted by @KyleJones2 in https://github.com/AlaskaAirlines/auro-avatar/issues/6#issuecomment-921962486

@KyleJones2 you are correct, but this is not an issue with auro-avatar, see the attached screenshot. The size is being set in the app code. Please discuss this with your engineering team.

Okay, thank you for clarifying.


GameJolt_DataStorage_set issue

I tried make save system, but game crashes with error
`ERROR in
action number 1
of Key Press Event for E-key Key
for object obj_save:
DoAdd :: Execution Error
at gml_Script_Scr_GameJolt_Parameters (line 11) - 			str += "&"+string(argument[a]) + "=" + argument[a+1]
############################################################################################
gml_Script_Scr_GameJolt_Parameters (line 11)
gml_Script_GameJolt_DataStorage_Set (line 370) - 	url = Scr_GameJolt_Parameters(url,
gml_Object_obj_save_KeyPress_69 (line 3) - 	GameJolt_DataStorage_Set("coems", global.coems)`
Here is the code:
e = 1 if(e == 1 && m = 1){ 	GameJolt_DataStorage_Set("coems", global.coems) 	GameJolt_DataStorage_Set("doxscore", global.doxscore) 	GameJolt_DataStorage_Set("buff", global.buff) 	with(obj_savemon){ 		alarm_set(0, 5) 		visible = true 	} }

Thanks for reporting this issue, but in order to investigate we will need a small project which shows this issue. Please report this issue again, but ensure you have a suitable project open at the time and you have checked the “Include Project” option on the bug form.
Alternatively, you can attach it directly if it's something you are willing to share publicly, or upload via something like Google Drive so we can request access to keep it private. The ticket can then simply be re-opened.
We request a project to ensure we see exactly what you see, in how you've configured the project. As while we could follow the steps to recreate it, there could be additional settings missed that mean that we create a slightly different project to what you have, and therefore not see the issue you have, or something else.
Additionally, we can get a lot of bug reports, and stopping to create a project reduces our time to actually fix them.
If you have sent us a project, we can immediately test it in our source builds to see if the issue has been fixed, or to immediately hit the issue to fix it. Otherwise, we are needing to install the exact versions you have used, create a project, ensure that it triggers the same issues that you are reporting, and only then can we start work on fixing it.
Thanks!


[INTEL MKL]: Enable quantization using MKL-DNN

This PR removes the #ifdef INTEL_MKL_QUANTIZED to enable quantization in the default build.

@penpornk thank you for the quick review. This PR is ready to be merged. Other INT8 PRs are coming but this PR is not dependent on any of them.

Hi @pragyaak, is there anything blocking this from being merged?

@mahmoud-abuzaina yes, I am looking into it. Will update here.

@mahmoud-abuzaina this is now done. Thanks!

@pragyaak Thank you too!


Change in LeakCanary dependencies reduced my app us 20MB

Changing the dependency of leakcanary from implementation to debugImplementation, my application had a reduction in the final weight of about 20Mb
before
implementation "com.squareup.leakcanary:leakcanary-android:2.9.1"
after
debugImplementation "com.squareup.leakcanary:leakcanary-android:2.9.1"

Thank you! Added this


Allow build to set custom namespace

To avoid possible clashes, it has been recommended to allow for custom namespace setting.
Currently MaterialX has a hard-coded name space but this could be settable via a Cmake option
as is done for OCIO. Then each integration can set it's own namespace to help avoid clashes if MaterialX
is pulled in via multiple integrations.
Note that this could be a possible avenue to avoid things like global symbol clashes as mentioned in #772.
This is a check-in in OCIO repo for namespace setting:
https://github.com/AcademySoftwareFoundation/OpenColorIO/commit/b3f6e9d1dd22b7b86bdcd2820c4e6a69b353ad9e
Note: that namespace can also be used to encode version so the API entry points can be versioned:
https://github.com/AcademySoftwareFoundation/OpenColorIO/blob/main/CMakeLists.txt#L203-L214

Thanks for posting this issue, @kwokcb, and it's been resolved in #785.


Permission to quote.

You credited the "I was reluctant . . ." comment in "Five minute introduction to Mobservable + React" to "anonymous programmer". I want you to know that I stand by my words, now more than ever, and you certainly have my permission to  quote me. By the way, my name is "David Schalk", not "Alfred E. Neuman".
I am changing over to mobservable in my Websockets React Game of Score tutorial at "FPComplete. The mouse roll-over, group membership, and find-all-solutions functionality now depend on mobservable. When I am done, "setState" might be completely absent from the code.

Thanks! Much appreciated :).
I recognized the picture from the MAD game I have lingering around here somewhere :). Didn't know that a whole history was behind it though.

I created a repository named mobservable-react-buttons at
https://github.com/dschalk/mobservable-react-buttons.
On Mon, Aug 24, 2015 at 6:12 PM, Michel Weststrate
<EMAIL_ADDRESS>wrote:

Closed #20.
—
Reply to this email directly or view it on GitHub.


Openning a dataset creates 6 undo/redo steps

Steps to reproduce:

Open a dataset

@clyne How is BeginGroup/EndGroup supposed to be used? It appears only to be used in ParamsMgr which does not seem to handle dataset loading. Mainform does not have a ssave. There are comments that parts of dataset loading are not managed by ssave and need to be handled manually within the dataset loading code.

BeginGroup and EndGroup are used to group together a number of state changes (changes to the Params database) into a single event. When an undo or redo is performed all of the changes in a group are undone (redone) at once. For example, when navigating the scene all ModelView transforms between a mouse press and a mouse release are grouped together into a single “navigation” event.

On Nov 24, 2017, at 4:06 PM, StasJ<EMAIL_ADDRESS>wrote:
@clyne How is BeginGroup/EndGroup supposed to be used? It appears only to be used in ParamsMgr which does not seem to handle dataset loading. Mainform does not have a ssave. There are comments that parts of dataset loading are not managed by ssave and need to be handled manually within the dataset loading code.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

John Clyne
National Center for Atmospheric Research
303.497.1236 (w),<PHONE_NUMBER> (c)
<EMAIL_ADDRESS>

No longer possible due to the action clearing undo/redo


Fixed fabric-samples/asset-transfer-basic/application-gateway-typescr…

Fixed fabric-samples/asset-transfer-basic/application-gateway-typescript grpc client type check

@bestbeforetoday Can you take a look?

The connect method from @hyperledger/fabric-gateway expects GrpcClient obj as parameter.
But the '@grpc/grpc-js' client is not of type GrpcClient.
I have to cast the type to compile.

Based on bestbeforetoday comments, I'll go ahead and close.


How locust calculate average response time and R/S for users

hi all,
please, I need to know the mathematical equations that locust depend on to calculate its results. and how can I create a figure between the number of users and the average response time or request per second?

https://github.com/locustio/locust/blob/master/locust/stats.py

thank you very much this was useful


Remove accents from anchor links

Hi,
this extension almost works perfectly for our needs but there's one breaking issue: the generated TOC anchor links contain accents when the headings contain accents (in non-English languages).
The problem is that they don't work in Acrobat reader:
FAIL:
- [Bevezető](#markdown-header-bevezető)

OK:
- [Link header](#markdown-header-link-header)

Is there a way to clean up these special chars and replace them with normal ones? If not, please consider this as a feature request :)

I'm thinking of convert all the unicode character to URL encoded or ASCII.
This will be a new feature

Sounds great, thanks!

this is implemented in 3.0.7

In the meantime I had to fix it myself because of deadlines, and added a few other fixes as well, but thanks anyway!

Ah nice. A pull request will always be welcomed ;)


Improve documentation

Improve README:

introduce all event types, give pointers to relevant code sections
give instructions on how to set up shop as a developer

Improve swagger: Swagger can't deal with generic return types, which is why I removed EventWrapper and replaced it with DealerEventEnvelope, ListingEventEnvelope, EnrichedListingEventEnvelope and ListingUrlEventEnvelope.

LGTM, just a few namings. :)

Good feedback, thanks :)


python3Packages.scipy: 1.5.4 -> 1.6.0

Motivation for this change
https://docs.scipy.org/doc/scipy/reference/release.1.6.0.html
Things done

[X] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

X ] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[X] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Ensured that relevant documentation is up to date
[X] Fits CONTRIBUTING.md.

/rebase-staging

/rebase-staging

Going to build the commit against master and if this succeeds building scipy we can merge it into staging.

Going to build the commit against master and if this succeeds building scipy we can merge it into staging.


Add nginx http_stub_status_module

Fixes https://github.com/alfg/docker-nginx-rtmp/issues/99

Thanks! Will publish the image soon.


Update gradle 4.4.1 and parallelize builds

Any reason you've haven't gone for 4.5.1?

No, not really 😉

Merged, thanks


Intro to ASP.NET Core

Fixes #3460
Review URL

@scottaddie  quick review please. If @danroth27  can't review today - maybe after we merge.

@tdykstra  give @danroth27  a couple hours to respond - then merge.


ci: chmod +x zebrad

Maybe the actions should just fail on these errors instead of producing empty results file?

Ideally yes, I'll look into this, but I think this might be hard to implement. The main issue is that we use continue-on-error on the suite step (since cargo test may exit with a non-zero exit code). I'm not sure if we can somehow detect if it's due to an external issue or something else, at least I think this might be hard to do in the CI, but I'll investigate a little.


UppHub problem when TheIDE is installed under a folder with spaces

Now UppHub fails to run git clone if the folder where TheIDE is installed has spaces.
This can be solved by replacing in file ide/UppHub.cpp, line 555
cmd << ' ' << dir;
with
cmd << " \"" << dir << "\"";

Best regards
Iñaki

Thanks!
On Wed, Oct 9, 2024 at 5:04 PM Iñaki Zabala @.***>
wrote:

Now UppHub fails to run git clone if the folder where TheIDE is installed
has spaces.
This can be solved by replacing in file ide/UppHub.cpp, line 555
cmd << ' ' << dir;
with
cmd << " "" << dir << """;
image.png (view on web)
https://github.com/user-attachments/assets/c519a5af-6af7-40f6-9539-06e05bccb861
Best regards
Iñaki
—
Reply to this email directly, view it on GitHub
https://github.com/ultimatepp/ultimatepp/issues/208, or unsubscribe
https://github.com/notifications/unsubscribe-auth/AARH236PY4RHQW2NJU7DFELZ2VAYJAVCNFSM6AAAAABPUYHPYGVHI2DSMVQWIX3LMV43ASLTON2WKOZSGU3TMMRQG43TKNY
.


Add default prometheus address

Description
test it also on nkyma where the path is api/v1/namespaces/kyma-system/services/monitoring-prometheus:http-web/proxy/api/v1
Changes proposed in this pull request:

...
...
...

Related issue(s)

Resolves #1128 #1135

/retest


fix: normalize secret before retrieving values

:tada: This PR is included in version 2.0.0-rc.2 :tada:
The release is available on:

v2.0.0-rc.2
GitHub release

Your semantic-release bot :package::rocket:


Stop using Mirror and replace with KeyPaths

Mirror is slow.
KeyPaths are faster and type safe
Replace header, query, path and payload strings with keyPaths

Gonna close this as we may be able to resolve all these issues use propertyWrappers


:bug: add exports in package.json

i have some issue that using vitest.
It always import cjs version for styled-components, i want to import esm version.
add exports into package.json that can help it 🙏

I think more is needed... "types" is at the top and then usually "./package.json" is by itself outside of the "." block.

@probablyup can you give more specific info?

I just don't see why it's needed... why isn't the module package.json field being respected? It's a common bundler pattern.

it's a sample project that has error when running test with vitest.
if i change version to 6.0.0-beta.12, it is working.
the version that has exports.
https://github.com/RoySung/vite-preact-playground

@probablyup I cannot 100% explain why module is not respected, but at least in the node.js world it was "just" a proposal (@see https://stackoverflow.com/questions/42708484/what-is-the-module-package-json-field-for). Node.js settled for the package.json exports field starting with node v16 and thus it's important to have proper export maps defined when you want to e.g. use styled components together with Next.js and SSR.
@probablyup would you accept a backport to 5.x aswell? As we currently would like to stay with our project on 5.x but running into a problem with the export maps aswell there.

Further digging into this it seems that the exports have been removed because of a problem with typings (https://github.com/styled-components/styled-components/issues/3800#issuecomment-1453355949, hence https://github.com/styled-components/styled-components/pull/3961).
Actually IMHO the root cause of the issue with the types is a "misconfigured" .tsconfig file where the "old" node module resolution (prior to v16) is used and not the current one. -> https://github.com/microsoft/TypeScript/issues/51862#issuecomment-1358049778

Further digging into this it seems that the exports have been removed because of a problem with typings (#3800 (comment), hence #3961).
Actually IMHO the root cause of the issue with the types could be a "misconfigured" .tsconfig file where the "old" node module resolution (prior to v16) is used and not the current one. -> microsoft/TypeScript#51862 (comment) https://www.typescriptlang.org/tsconfig#node16nodenext-nightly-builds
This "new" resolution algorithm is available since Typescript 4.7. Maybe @DavidReinberger could jump in to confirm that using the new resolution algorithm solves his problem with the types.

Honestly I feel very uncomfortable with the exports object... it seems to be very easy to screw up and it's like impossible to test the plurality of project configs out there to make this safe to add :/

FYI I have done some extensive research on this topic during this week which I would like to summarize here.
Main assumptions

styled components want to support CommonJs and ES modules as a dual package
styled components targets >= node16

Node.js and module field
I can confirm that the module field is deliberately not supported by node.js (@see https://nodejs.medium.com/announcing-a-new-experimental-modules-1be8d2d6c2ff)

"While we are aware that the community has embraced the “module” field, it is unlikely that Node.js will adopt that field as many of the packages published using “module” include ES module JavaScript that may not evaluate in Node.js (because extensions are left off of filenames, or the code includes require statements, etc.)"

The module field in package.json was a proposal brought up by bundlers (for more context: originally from Rollup in 2017 - before there was a proposal for a jsnext:main field in 2015 which was superseded by the module field). So in the "bundler-world" the module field just works fine, but already the related github discussions for module and jsnext:main fields point out that there are some concerns regarding the ambiguity/flexibility of module and jsnext:main fields for different environments.
Instead Node choose to go forward with the exports field in package.json from >= v.16.x to provide

a modern alternative to "main" allowing multiple entry points to be defined, conditional entry resolution support between environments, and preventing any other entry points besides those defined in "exports". This encapsulation allows module authors to clearly define the public interface for their package.

For dual packages (CJS/ESM) like styled-components the exports field is the only way to support ES modules in a node.js environment (@see https://nodejs.org/docs/latest-v16.x/api/packages.html#writing-dual-packages-while-avoiding-or-minimizing-hazards - both approaches use the exports field).
Bundlers and the exports field
As stated above all the popular bundlers (while also supporting the module field) also are advocating for the exports field for supporting different environments:

Webpack: https://webpack.js.org/guides/package-exports/#providing-different-versions-depending-on-target-environment
Rollup: https://github.com/rollup/plugins/issues/208#issuecomment-1162367570
Vite: uses Rollup under the hood for production bundling and esbuild for development and also advocates use of exports field

for rollup: https://github.com/rollup/plugins/issues/208#issuecomment-1162367570
for esbuild: https://esbuild.github.io/api/#conditions

Parcel: exports is supported since v.2.9.0
SWC: bundling is a feature still under construction (https://swc.rs/docs/configuration/bundling) - although as seeing in https://github.com/swc-project/swc/issues/6092 exports is not supported, but fallback to module is.

Typescript and exports field
Typescript historically had two module resolution algorithms called classic and node, whereas node was renamed to node10 half a year ago (https://github.com/microsoft/TypeScript/pull/51901). As styled components is stating node16 as it's minimum requirement according to the Typescript Maintainers the moduleResolution field in .tsconfig should also switch to node16 consequently, which enables the exports field for types aswell. Moreover a detailed example of how to structure the package.json with exports field in a "most compatible" way is outlined in the typescript handbook:
{
    "name": "my-package",
    "type": "module",
    "exports": {
        ".": {
            // Entry-point for `import "my-package"` in ESM
            "import": {
                // Where TypeScript will look.
                "types": "./types/esm/index.d.ts",
                // Where Node.js will look.
                "default": "./esm/index.js"
            },
            // Entry-point for `require("my-package")` in CJS
            "require": {
                // Where TypeScript will look.
                "types": "./types/commonjs/index.d.cts",
                // Where Node.js will look.
                "default": "./commonjs/index.cjs"
            },
        }
    },
    // Fall-back for older versions of TypeScript
    "types": "./types/index.d.ts",
    // CJS fall-back for older versions of Node.js
    "main": "./commonjs/index.cjs"
}

What is still unclear to me whether you need to set the type field to module in typescript to get exports field support. If so probably more needs to be changed, "type": "module" means .js files will be interpreted as ES Modules and the file ending .cjs needs to be used consequently.
Moreover this PR only adds one entry for types whereas Typescript maintainers recommend to have separate type declaration files for ESM and CommonJS even if they look the same.
Conclusion
In conclusion to have the broadest and most future proof support having an exports field in package.json is vital for styled components, and I don't see any way around it, if you want to support ES modules.
As I would assume styled components wants to support ES modules and CommonJS in a hybrid approach, @probablyup how can we support you in going forward?

As I would assume styled components wants to support ES modules and CommonJS in a hybrid approach, @probablyup how can we support you in going forward?

Thank you very much for this, will review these materials today

To complicate things, I think there needs to be separate entries in "exports" for the styled-components/macro and styled-components/native entrypoints. I'm preparing a commit to add those to this PR. We'll need to ship this on the test tag and probably tweak it before releasing it to the masses.

I've published the code on this branch at styled-components@test for verification

Started to look into this one and it turns into a bit of a rabbit hole if you look at some of the component files... not sure it's safe to change outside semver-major


External jar fetch from private S3 bucket

I'm trying to use bazel-deps to resolve maven dependencies on AWS S3 with coursier(see https://github.com/johnynek/bazel-deps/pull/275 and https://github.com/coursier/coursier/issues/1488). If this works out, there's still something that I think it needs to be done here, I might be wrong, so bear with me.
Since bazel-deps puts the jars under //external:jar/, I'm assuming scala_maven_import_external needs to be able to recognise and download s3:// jar paths when building the project with such dependencies.

scala_maven_import_external underneath uses repository_ctx.download. This recently got authentication support (1.2.1?).
I think these are the bits you need to get in place.
Don't know a lot more though.
Good luck.


Switch docker image to scratch

This will drastically reduce overall image size.

Switched to alpine.3.3 instead. Overall size is 17Mb comparing to 308Mb


Swap request httpx

Closes #16 and removes deprecated loans and requests-specific methods.

@branchedelac @chadmcinnis @jalexsc If one of you could take a look at this PR, it would be much appreciated

I think it has to do with how the test runs are configured. I was looking at it yesterday, but I was going to create a new branch to try out a fix. I will say I've been using it with my 1.8.0 migration tool release candidates, and it's been fine. Though, I don't think I've done anything that requires using the folio_get_all method, yet.
—
Brooks Travis
Sr. FOLIO Implementation Consultant
EBSCO FOLIO Consulting Services
E: @.***
P:<PHONE_NUMBER>

From: branchedelac @.>
Sent: Thursday, April 27, 2023 4:39 AM
To: FOLIO-FSE/FolioClient @.>
Cc: Brooks Travis @.>; Author @.>
Subject: Re: [FOLIO-FSE/FolioClient] Swap request httpx (PR #19)
CAUTION: External E-mail
@branchedelac commented on this pull request.
The changes look good. Do you know why some of the tests are failing?
—
Reply to this email directly, view it on GitHubhttps://github.com/FOLIO-FSE/FolioClient/pull/19#pullrequestreview-1403636821, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AAAH6I2B44U6KANJOWFNGGTXDI5G5ANCNFSM6AAAAAAXL6XUPU.
You are receiving this because you authored the thread.Message ID: @.***>


Unable to install for Netbox3.7.3

Versions
NetBox Version: 3.7.3
NetBox DNS Version: 0.22.9
Python Version: 3.10.12
Describe the bug
I followed the detailed instruction:
https://github.com/peteeckel/netbox-plugin-dns/blob/main/docs/using_netbox_dns.md
Even after "pip install 'netbox-plugin-dns<0.23'", it still shows the following error:
django.core.exceptions.ImproperlyConfigured: Plugin netbox_dns requires NetBox minimum version 4.0.0.
Is this plugin still compatible with olcer NetBox versions, i.e < V.4.x?
Thanks.

Hi @iqwang, could please run
pip freeze | grep netbox-plugin-dns

in your venv and post the results here?
I just checked __init__.py to be on the safe side, and the version requirement is definitely correct:
__version__ = "0.22.9"

class DNSConfig(PluginConfig):
    name = "netbox_dns"
    verbose_name = "NetBox DNS"
    description = "NetBox plugin for DNS data"
    min_version = "3.5.0"
    max_version = "3.99.0"

Hi, I find out that it needs to specify the version in local_requirements.txt:
netbox-plugin-dns==0.22.9
Now it is successfully installed.
Thanks.


Implement DMA for constant source buffers

The lack of support for constant source buffers was first raised by @ryan-summers here https://github.com/stm32-rs/stm32h7xx-hal/pull/153#discussion_r515865869
This solution adds a 5th generic type parameter to Transfer, and uses this to implement Transfer for two different type constraints on BUF.
The additional generic type parameter will also be useful for MDMA support, which will also need its own versions of init, next_transfer, next_transfer_with and so on.
The downside is the additional complexity of another type parameter.

Overall I think the additional type parameter is worth it for the extra flexibility it provides. Merging into dma now, but still very open to receiving comments there

Overall I think the additional type parameter is worth it for the extra flexibility it provides. Merging into dma now, but still very open to receiving comments there

I don't think the type parameter is too much to ask. I'll give the const-buffer changes some test usage. Thanks for getting this together!

I don't think the type parameter is too much to ask. I'll give the const-buffer changes some test usage. Thanks for getting this together!


数据格式问题

你好，在评估msmarco指标时，是将content数据变为：
{"content": "A is ...", "B is ...", "C is ..."}   这种格式是吗？
每一个content后有多个候选的段落。

The data format is:
{"content": "A is ..."}
{"content": "B is ..."}
{"content": "C is ..."}
{"content": "Panda is ..."}
{"content": "... is A"}

, where each line is a dict containing a text instead of a list of text
You can refer to our example data: https://github.com/FlagOpen/FlagEmbedding/blob/master/examples/finetune/toy_evaluation_data/toy_corpus.json

The data format is:
{"content": "A is ..."}
{"content": "B is ..."}
{"content": "C is ..."}
{"content": "Panda is ..."}
{"content": "... is A"}

, where each line is a dict containing a text instead of a list of text
You can refer to our example data: https://github.com/FlagOpen/FlagEmbedding/blob/master/examples/finetune/toy_evaluation_data/toy_corpus.json

"Thank you for your reply, I have succeeded in making it."


Handle multiple .ads files for a given flight #.

A proposed change to push_data.py to handle multiple .ads files. Janine and Taylor to discuss on 8/4.

Rather than using globals, pass needed vars into functions

Closing this pull request since Janine has requested changes.


⚠ gorzdrav.org has degraded performance

In a372aff, gorzdrav.org (https://gorzdrav.org) experienced degraded performance:

HTTP code: 200
Response time: 3827 ms

Resolved: gorzdrav.org performance has improved in 25906c7.


0.18 release

I think it would be good to cut a new release soon.
What I'd like to see happen before we release:

Polish the signature work a little more - particularly #2784 and decide on #2703. (Further non-breaking improvements can be added after 0.18.)
I'm tempted to gate the APIs of pyo3::inspect behind an "experimental" feature, because we didn't finish off the rest of the type-hints use case and I'm a bit uneasy on whether it's in the right final shape until we do have the full type-hints pipeline working.
Tidy up / merge / close some of the many open PRs.

All other suggestions on what to add to the release are welcome.

I think we should finish up #2772 for the release, at least with a plan on how to improve the testing situation for PyPy.
#2690 also looks like something that would be good to finish up before the release.
And finally as it is breaking, I would be glad if we could make a decision on #2632. I don't think we will get further outside input soon and dragging this along further does not seem useful either. So I would suggest we either merge it or close it before the release.

#2398 also looks like it would round out our public API nicely but it seems blocked on the author adding tests and expanding the documentation for quite a while. Maybe we should adopt the PR and carry it over the finish line?

Sorry for the slow reply & agreed on all of the above. I have been busy / exhausted so my hope now is that I can put some effort into the release over the Christmas break :)
#2817 which is an issue running embedded PyO3 on 3.11.1 may also need a resolution before the release.


Update topic/datagrid-numeric-filter

Just updating the topic branch to be based on latest master.
I am asking for your blind trust that I can do a simple rebase, please don't re-review every single commit in there.

Nope. Nope nope nope.


Spark visitor refactor

Mostly moving some code around.

I moved non-plan visitor classes outside of the io.openlineage.spark.agent.lifecycle.plan package. I reduced visibility in several classes as they are only ever used within the package.
Created a QueryPlanVisitor abstract base class for plan visitors. This makes the class hierarchy easier to read and understand (extends QueryPlanVisitor<AppendData> rather than AbstractPartialFunction<LogicalPlan, List<Dataset>>) and also eliminates a small amount of boilerplate when visitors simply need to test that the node visited is an instance of some class or interface. I added a small test for the QueryPlanVisitor

This is purely a refactoring, so there should be no impact to the actual code execution.

Guess I was faster with Great Expectations fix here too 😉

Guess I was faster with Great Expectations fix here too 😉

Ah, glad that that's fixed. I was just testing that, but I'll rebase with your change instead.


Check preconditions on worker nodes before upgrading

Why is this PR needed?
Fixes https://github.com/SUSE/avant-garde/issues/1127
Fixes https://github.com/SUSE/avant-garde/issues/1128
What does this PR do?
Worker nodes have preconditions: they cannot be upgraded if all
control planes are not in the same version (the cluster version).
This patch adds help in case any of the preconditions for any node is
not matching at skuba node upgrade plan and skuba node upgrade apply.
Different cases have different preconditions, and this makes it clear
to the user what precondition is not met and how they can fix the
problem.
Status BEFORE applying the patch

When upgrading the platform in an HA environment, it's possible to skuba node upgrade plan/apply a worker node when not all control plane nodes have been updated yet.

Status AFTER applying the patch

When upgrading the platform in an HA environment, skuba node upgrade plan/apply will show a clear message if any of the preconditions for any node is not met, so the upgrade cannot be started.

Merge restrictions
(Please do not edit this)
We are in v4-maintenance phase, so we will restrict what can be merged to prevent unexpected surprises:
What can be merged (merge criteria):
    2 approvals:
        1 developer: code is fine
        1 QA: QA is fine
    there is a PR for updating documentation (or a statement that this is not needed)

There's a small detail missing. Will update the PR tomorrow.

2 master + 2 workers without load-balancer, deploy version 1.15.2 and upgrade first control plane node, I encountered this error :thinking:
I1205 15:15:40.107106   31598 states.go:40] === state kubernetes.install-node-pattern applied successfully ===
I1205 15:15:40.107124   31598 states.go:35] === applying state kubeadm.upgrade.apply ===
I1205 15:15:40.107145   31598 files.go:31] uploading to remote file "/tmp/kubeadm-upgrade.conf" with contents
I1205 15:15:41.949403   31598 ssh.go:168] running command: "sudo sh -c 'kubeadm upgrade apply --config /tmp/kubeadm-upgrade.conf -y'"
E1205 15:15:42.334532   31598 ssh.go:193] no InitConfiguration or ClusterConfiguration kind was found in the YAML file
E1205 15:15:42.334567   31598 ssh.go:193] To see the stack trace of this error execute with --v=5 or higher
I1205 15:15:42.535423   31598 ssh.go:168] running command: "sudo sh -c 'rm /tmp/kubeadm-upgrade.conf'"
Unable to apply node upgrade: failed to apply state kubeadm.upgrade.apply: Process exited with status 1

2 master + 2 workers without load-balancer, deploy version 1.15.2 and upgrade first control plane node, I encountered this error

Yes, the patch was not complete :grin:

Checked al possible cases I could come up with and this PR is working as intended now. Please, review :)

@suseclee

IMO, customers want to all in one for upgrade too like skuba cluster upgrade apply for easy upgrade instead

There's no such command right now, this would need to somehow solve how to pass the IP addresses, user and sudo for each machine at once. To the best of my knowledge it's good if they can script these commands away, but adding a skuba cluster upgrade apply would require an RFC most probably and this PR is trying to help with the upgrade procedure for this immediate release.

@jenting

The performance is not well, some functions would run twice when skuba node upgrade [plan|apply], lie kubeadm.GetCurrentClusterVersion .

I agree. We can improve performance on a follow up PR also for UpdateStatus that is performing many requests to the apiserver when it doesn't need that many.

All masters have to upgraded before workers?
Commit title: Check preconditions on worker nodes before upgrading - 53 chars, you are allowed 50 :)

Commit title: Check preconditions on worker nodes before upgrading - 53 chars, you are allowed 50 :)

I just cannot make any shorter while keeping it meaningful :), that check is not required so we can merge without that strict test passing :)

It works as described, now I'm unable to upgrade worker node before masters:
thehejik@dhcp225:~/git/scripts/cluster_tRp/cluster> skuba node upgrade apply -s -u sles -t <IP_ADDRESS> #(worker - masster not updated yet)
 This is an UNTAGGED version and NOT intended for production usage.
Unable to apply node upgrade: caasp-worker-th-skuba-update-0 is not upgradeable until all control plane nodes are upgraded

But there is still one issue, when I upgrade first master and then I ask again for skuba cluster upgrade plan it says:
skuba cluster upgrade plan
** This is an UNTAGGED version and NOT intended for production usage. **
Current Kubernetes cluster version: 1.16.2
Latest Kubernetes version: 1.16.2

Congratulations! You are already at the latest version available

But at the time ^ only first master was upgraded. @ereslibre do you think it deserves separate issue?

@thehejik are you sure that's the output of the code with this PR applied? It should be slightly different. Something along the lines:
node %s cannot be upgraded yet. The following errors were detected:
  - Make sure all control plane nodes match the current cluster version: %s, and retry after upgrading them

(same error message on plan and apply).
Regarding your question: whenever you upgrade the first control plane node of the cluster, the "current cluster version" is bumped (this is, the Kubernetes version stored in the kubeadm-config ConfigMap). So this is expected. Please, file another issue if you believe skuba cluster upgrade plan should also take into consideration the real status of the nodes compared to the current cluster version. This would mean improving its output.

@thehejik are you sure that's the output of the code with this PR applied? It should be slightly different. Something along the lines:
node %s cannot be upgraded yet. The following errors were detected:
  - Make sure all control plane nodes match the current cluster version: %s, and retry after upgrading them

(same error message on plan and apply).
Regarding your question: whenever you upgrade the first control plane node of the cluster, the "current cluster version" is bumped (this is, the Kubernetes version stored in the kubeadm-config ConfigMap). So this is expected. Please, file another issue if you believe skuba cluster upgrade plan should also take into consideration the real status of the nodes compared to the current cluster version. This would mean improving its output.

I think this is a very good idea especially customers with very large number of nodes in a cluster. They want to check upgrade status.

@thehejik are you sure that's the output of the code with this PR applied? It should be slightly different.

You are right, the output is different (I did it with older version), anyway it works as described with skuba from master, now the output is:
cluster> skuba node upgrade apply -s -u sles -t <IP_ADDRESS>
** This is an UNTAGGED version and NOT intended for production usage. **
Current Kubernetes cluster version: 1.16.2
Latest Kubernetes version: 1.16.2
Current Node version: 1.15.2

Unable to apply node upgrade: node caasp-worker-th-skuba-update-0 cannot be upgraded yet. The following errors were detected:
 - Make sure all control plane nodes match the current cluster version: 1.16.2, and retry after upgrading them

I think this is a very good idea especially customers with very large number of nodes in a cluster. They might want to check the upgrade status for nodes when they are lost (who knows).

Issue opened https://github.com/SUSE/avant-garde/issues/1144


performance codec fix

beat_period and tempo interface
changed input types (score, performance, deprecations)
feature_functions in to_match_score

Codecov Report
Patch coverage: 55.00% and project coverage change: -0.27 :warning:

Comparison is base (8638abf) 84.80% compared to head (959c1b3) 84.53%.

Additional details and impacted files
@@             Coverage Diff             @@
##           develop     #233      +/-   ##
===========================================
- Coverage    84.80%   84.53%   -0.27%
===========================================
  Files           69       69
  Lines        12215    12287      +72
===========================================
+ Hits         10359    10387      +28
- Misses        1856     1900      +44

Impacted Files
Coverage Δ

partitura/musicanalysis/performance_codec.py
71.84% <55.00%> (-12.07%)
:arrow_down:

... and 1 file with indirect coverage changes

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.

Add Documentation for User Defined Tempo Functions.

Should be merged after #207


ADD: BE translations, and add checkout result messages to DE

We already translated for nl_BE and de_AT is not supported by our module


Update question and answer and use 'onlyBreakOnSpace' option for URL

Work for this issue will begin begin on branch work-liquid-labs/cloudsite/238.


Bump module puppetlabs-stdlib to 4.25.1

This is a dependency for a lot of other modules, so should unblock a few other upgrades.
Removed the version pin.

Are we planning on “a lot of other upgrades” soon? Or is this a precursor to The Future when we get around to it?

The second one. Opportunistic house keeping!


Titlebar plugin

hi, i have setup config file from dalyIsaac but I cant add the Titlebar plugin.
Can some one help me as im not the best programmer?

The titlebar plugin is currently only available in the unstable release (ver. <IP_ADDRESS>).

This is how my TitleBarPlugin looks, the #r needs to be at the top, the rest in the doConfig function.
#r "C:\Program Files\workspacer\plugins\workspacer.TitleBar\workspacer.TitleBar.dll"

var titleBarPluginConfig = new TitleBarPluginConfig();
titleBarPluginConfig.SetWindowProcessName("gvim", new TitleBarStyle(showTitleBar: false, showSizingBorder: false));
titleBarPluginConfig.SetWindowProcessName("WindowsTerminal", new TitleBarStyle(showTitleBar: false, showSizingBorder: false));
titleBarPluginConfig.SetWindowProcessName("neovide", new TitleBarStyle(showTitleBar: false, showSizingBorder: false));
context.AddTitleBar(titleBarPluginConfig);

Thanks will give this an go!

If this issue is solved, please consider closing the issue :smile:


Introducing a python-based implementation of Dice coefficient computation

This implementation does not yet integrates all the feature of isct_dice_coefficient but it already solves the issue of small origin differences.
This implementation does only check shape of data instead of full orientation matrix.

Testing on sct_testing/large. Note the reduction of crashes.


Feat/ingest lambda

This looks great @Ricool06 and thanks so much for all the commenting. That will be incredibly useful if we revisit this after the Hackathon :+1: Very happy to have that merged in 😊


Setting value on facets

Hi @Yomguithereal ,
Just want to congratulate on version 1 first. Really really great work! One thing is Baobab, but just handling the repo, releases, community that is growing etc. Really excellent work, inspiring :-)
I have been thinking about facets a bit more and maybe this idea is going against the concept, but I just wanted to mention it as I think it is rather important.
I think there is one confusing thing about facet cursors and that is the fact that they do not have an "input" value. When I think about a facet I think of it as translating an "input" to an "output" using depending cursors.
Looking at the the example from the front page:
  currentProject: {
    cursors: {
      id: ['currentProjectId'],
      projects: ['projects']
    },
    get: function(data) {
      return _.find(data.projects, {id: data.id});
    }
  }

In this case the 'currentProjectId' is the actual "input". The 'projects' is just a dependency really, at least in comparison. So in more complex examples with many depending cursors it is difficult to understand how a facet works because you have to identify which cursor is the "input".
I also feel it is kind of artificial that you have a currentProjectId cursor and a currentProject cursor, where you set one cursor, but get the data from a different one. It is confusing compared to how a simple cursor works at least.
So I suggest extending the current functionality with:
  currentProject: {
    value: '123',
    cursors: {
      projects: ['projects']
    },
    get: function(data, value) {
      return _.find(data.projects, {id: value});
    }
  }

And when changing this facet you would:
tree.facets.currentProject.set('456'); // Or something similar (Facet API)

I can enforce this advantage by giving a more complex example:
  projectRows: {
    value: [],
    cursors: {
      projects: ['projects'],
      users: ['users']
    },
    get: function(data, projectIds) {
      return projectIds.map(function (projectId) {

        // Prevent mutation of project by attaching it as prototype
        var project = Object.create(data.projects[projectId]);
        project.user = data.users[project.userId];

        return project;
      });
    }
  }

So whenever you want to display new projectRows you would just: tree.facets.projectRows.set(['123', '456', '789']). If not doing this you would need a projectRowsIds state for input, add it as a cursor on the facet along with the other two cursors that are just dependencies. One place for input and a different place for output.
Does this make sense? :-) Sorry to be so late with this input, but if it makes sense it would be possible to add this functionality without affecting existing.
Okay, thanks for hearing me out :-)

Actually, taking this a step further for even more simplicity:
var projectsDisplayedFacet = new Baobab.Facet({
  value: [],
  cursors: {
    projects: ['projects'],
    users: ['users'],
    comments: ['comments']
  },
  get: function (data, value) {
    return value.map(function (id) {
      var project = Object.create(data.projects[id]);
      project.user = data.users[project.userId];
      project.comments = project.comments.map(function (commentId) {
        return data.comments[commentId];
      });
      return project;
    });
  }
});

// Imagine a big state tree for the application where you have different domains
var tree = new Baobab({
  admin: {
    projectsDisplayed: projectsDisplayedFacet
  }
});

// The value set on the facet behaves just like any other cursor value
tree.push(['admin', 'projectsDisplayed'], 'someId');

So the benefits here are:

You can nest Facets inside your existing tree, which makes them belong to the domain of the application section. This makes it easier to get an overview of your state

Facets behave just like a normal cursor, it just converts the input to a different output. Easier to understand and reduces overall complexity of your code and mental image

This is of course a bigger change, but yeah... in theory it could be integrated with existing API :-)

Thanks @christianalfoni,
What I don't like with this value proposal is that it actually fragment the app's state. Normally you have your app's state centralized in the Baobab tree, which enable you to easily serialize it and reinject it. With values, your state is no longer centralized and you need some gymnastics again to pass the needed data to you UI. (The currentProjectId, even if it sounds clunky, is in fact part of your app's state).
Inserting facets into a Baobab's state is also a bad idea in my opinion because you shouldn't insert anything else than data in the state.
On the same topic, what can actually be done in the v1 but is not documented yet is:

You can create facets through tree.createFacet({cursors: {...}}).
You can pass facets to facets:

var facet = tree.createFacet({
  facets: {
    name: 'existingFacetNameInTheTree',
    surname: tree.createFacet({...})
  }
})

Those exists because they are used internally by react integration.
Anyway, once again :), you open way to great reflexions about what the library should enable its uses to do. I also think that what seems clunky now is to be able to bind components to both cursors and/or facets to achieve what needs to be done.
I have some ideas where you store functions within the state to solve dynamic data like the ones proposed by facets but I lose the dependency system and this cannot be bought.

Hi again :-)
Yeah, that is a very valid point indeed and I agree that it is more important to keep a clean state tree regarding types than merging facets into it!
The "input" cursor could of course be handled with a convention on putting that first in the cursors definition too.
It still feels a bit weird to me having an action changing a state value which "magically" updates a facet used by a component. It just decouples something that I feel is very strongly coupled. But again, I have no idea how to couple this without merging facets with the tree... which indeed is a bad idea :-)
Hm, yeah, how is the syntax now for using facets with React? Is it supported?
Something like?:
var Comp = React.createClass({
  mixins: [tree.mixin],
  cursors: function () {
    return {
      fruit: ['fruit']
    };
  },
  facets: function () {
    return {
      projects: ['projects']
    }
  },
  ...
});

Both merges with state?

This is what it will look like when done (some tiny little pieces of code remain to be written for it to work):
var Comp = React.createClass({
  mixins: [tree.mixin],
  cursors: {
    fruit: ['fruit']
  },
  facets: {
    name: 'namedFacet'
  },
  ...
});

It will indeed merge with state with precedence given to cursors over facets.

Okay, cool, looking good :-)
Anyways, facets is a really great feature. Handle complex state in the state layer, instead of having these "state wrapper components".
I thought I would fire up a new article on Baobab this weekend. Get to know the new features, play around with facets etc. ;-)
You know if react will be ready with its facets by then?

I certainly hope so :)

Cool, keep it up! ;-)
Closing the issue, thanks for discussing!

Facets are now working along with react integration. Just polishing things up and then I'll release an initial react-baobab version on npm working with today's<EMAIL_ADDRESS>

:+1:


Remove deprecated feature of std::sync::ONCE_INIT

Bump lazy_static to latest release 1.4.0 and replace ONCE_INIT with Once::new() in the code base.

Still has warnings for deprecated std::mem::uninitilized(). Working in progress. Plan to fix it in same PR. Is that OK?

Yes, that’s fine! Thanks for the patch.
On Fri, Oct 4, 2019 at 9:23 PM AngleNet<EMAIL_ADDRESS>wrote:

Still has warnings for deprecated std::mem::uninitilized(). Working in
progress. Plan to fix it in same PR. Is that OK?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/weld-project/weld/pull/491?email_source=notifications&email_token=AAKMEYZLRUBR3GBFRSSWP2DQM5RG3A5CNFSM4I5ROXQ2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEAMDAOY#issuecomment-538456123,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAKMEYYFGMV47GRPGQG25NTQM5RG3ANCNFSM4I5ROXQQ
.

--
Shoumik

Fixed mem::uninitialized. @sppalkia Help review this. Thank you ~~~

Looks great, thanks for the submitting it!


Release 1.6

This change is

@devin-donnelly Here are the Kubernetes 1.6 reference docs.  Note that the docs are clearly versioned (yay?).

@pwittrock Fantastic, thanks.


⚠ Bofrost.at has degraded performance

In 2a03185, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 1447 ms

Resolved: Bofrost.at performance has improved in 5725436 after 6 minutes.


RDS IAM Authentication

Description
Currently, database connections in Kviklet are established using credentials. I propose enhancing this functionality by adding support for AWS RDS IAM authentication. This would enable the use of IAM roles to manage access to RDS databases, improving security and eliminating the need for hardcoded credentials.
Proposed Solution
Implement a configuration option to enable RDS IAM authentication. Modify the database connection logic to generate and use IAM authentication tokens when this option is enabled. For implementation, consider leveraging AWS SDKs to generate RDS authentication tokens. Documentation on RDS IAM authentication can be found here.
Benefits

Enhanced security: IAM roles reduce the risk associated with managing and exposing static credentials.
Simplified credential management: Developers and operators can use AWS's IAM system instead of manually rotating credentials.

Additional context
I know this feature is specifically aiming to solve an issue for AWS customers only. I think it is warranted to support it in this tool because of the widespread use of AWS.

Hey Derk, this has actually been on my todo list since day 1 just kinda been waiting for someone to ask for it.
Will look into this in the next few days 🤞


A few minor language fixes

Also dropped unused strings for dropped caching methods

Google had 'A' :innocent:


Ability to override executor (or image)

Is your feature request related to a problem? Please describe.
The provided executor always uses the latest hashicorp/terraform:light image, which can force unexpected upgrades and non-deterministic results between runs. For example CI/CD may work one week on Terraform 0.13 but the job would no longer run the following week due to syntax changes in Terraform 0.14. To override this currently you need to define your own jobs to wrap the Orb's commands which produces a lot of boilerplate code.
Describe the solution you'd like
The ability to pass your own executor to the jobs.
Describe alternatives you've considered
The terraform/default executor does have an image parameter that could be made accessible from the jobs, like the Node Orb does. I don't believe you can use a "null" default for a parameter though, so it results in duplicating the default versions across many places in the Orb, which would be harder to maintain. I'd be inclined to remove the executor parameter altogether to make it clearer that it's not usable by the Orb.
Additional context
I'll be happy to submit a PR if you can advice which solution you'd prefer.

The upgrade and push of 0.15.0 to hashicorp/terraform:light has caused another issue with init. I agree that adding the ability to specify your own image as a parameter would be great.

This will be resolved in #46


[WIP] Tentatively add checks to enforce build-phase code cannot touch layout-phase data

Related to: https://github.com/flutter/flutter/issues/126332
No need to merge or review this - this is just an attempt and I want to manually check the CI output to see if I can find extra bugs by this extra check.
Pre-launch Checklist

[ ] I read the Contributor Guide and followed the process outlined there for submitting PRs.
[ ] I read the Tree Hygiene wiki page, which explains my responsibilities.
[ ] I read and followed the Flutter Style Guide, including Features we expect every widget to implement.
[ ] I signed the CLA.
[ ] I listed at least one issue that this PR fixes in the description above.
[ ] I updated/added relevant documentation (doc comments with ///).
[ ] I added new tests to check the change I am making, or this PR is test-exempt.
[ ] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel on Discord.

@fzyzcjy I'm going to close this on the assumption you have looked at the CI output and no longer need to the PR; please don't hesitate to reopen or resubmit if you still need to update this.

Sure!


feature request: select delimiter

DAS-Tool requires a bin table formatted as: contig_id<tab>bin_id, while graphbin2 uses comma-delimited input/output bin tables. It would be helpful if the user could chose the delimiter for the input/output bin tables (especially the output).

Hello @nick-youngblut,
Thank you for the feature request. I will definitely incorporate the delimiter option. Until then, I will leave this issue open.

Added the functionality to specify the delimiter for input/output files.
Commit ID: c25a5f8c3d8f00cf6d7b4a187a0108eb27cf4506
Closing issue after reesolving.


Fix Sound Physics compatibility hack

Quite some time ago, you added a hack to have Sound Physics compatibility but along the updates it got lost and it wasn't working anymore. So i added a patch within Sound Physics to bring it back because there wasn't any development here and i thought that you wouldn't see a pull request. But now since there seems to be some activity, i figured i might do a pull request. It's a really simple fix too.

Actually I don't think ConfigSoundInstance ever had this.  This is the sound that plays when you hit the play button in the config.


SYSLOG missing

Hello,
SYSLOG outbound endpoint is missing. We should add :
SYSLOG (IP of SYSLOG server provided for deployment) TCP 6514 or UDP 514 Public VIP - /27
(or if we can have the true IP instead of the full /27...)

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 34d02f93-1ae9-eb2d-9c0f-0af012653885
Version Independent ID: 18f15ad2-ef9b-f883-c49b-09289a2e6fb8
Content: Publish Azure Stack Hub services in your datacenter - Azure Stack Hub
Content Source: azure-stack/operator/azure-stack-integrate-endpoints.md
Service: azure-stack
GitHub Login: @IngridAtMicrosoft
Microsoft Alias: inhenkel

@jbpaux Thanks for the feedback! I have assigned the issue to the content author to evaluate and update as appropriate.

In review

This is a duplicate of #706.
#please-close


Using on repeated elements

Hello. Is it possible to use Granim on multiple repeated elements within a page? Currently it only works on the first element, unless I define multiple instances of the init script to target different selectors?
// init
var newInstance = new Granim({
    element: '.gradient-bg',
    defaultStateName: 'state-1,
    direction: 'left-right',
    opacity: [1,1,1,1],
    isPausedWhenNotInView: true,
        states : {
            "state-1": {
                gradients: [
                    ['#AA076B', '#61045F'],
                    ['#02AAB0', '#00CDAC']
	        ],
	        transitionSpeed: 2500
           }
    }
});

You can't aim multiple nodes within the same instance, you will have to create a Granim instance for each canvas nodes.
You can see how to easily do it on this pen.
(Small detail but you forgot to close the string for the defaultStateName value and you set 4 values for the opacity array but you only have two colors for your gradients [it will still work though]).