No code-level control exists to control logging verbosity

The new logging in TyphoonConfigPostProcessor can only be modulated by OCLogTemplate-defined preprocessor macros (link).
It would be nice to make this controllable at a code-level (as opposed to preprocessor-level). This would support Cocoapod + Carthage workflows, where build settings are automatically generated.
Currently, to control this, my workflow would have to be:
-Update my project's dependencies
-Configure the Typhoon Xcode subproject's build settings to have the specific preprocessor macro
...and I'd have to remember to re-apply my settings, anytime the Xcode dependency subproject gets regenerated.
I've noticed this logging is particularly a problem in testing, where Assemblies might be stood up and torn down hundreds of times in succession (resulting in lots of console spew).

For those that come across this issue and are wondering about a workaround...
The following works for Cocoapods installations. Add this to your Podfile:
post_install do |installer_representation|
    installer_representation.pods_project.targets.each do |target|
      if target.name == "Typhoon"
        target.build_configurations.each do |config|
          config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)']
          config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'LOGGING_LEVEL_INFO=0'
        end
      end
    end
  end

This requires Cocoapods 0.38 or newer, due to breaking changes in the APIs used in this code (more here).
If you have Cocoapods older than 0.38, you might want to try this (untested!!):
post_install do |installer_representation|
    installer_representation.project.targets.each do |target|
      if target.name == "Typhoon"
        target.build_configurations.each do |config|
          config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)']
          config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'LOGGING_LEVEL_INFO=0'
        end
      end
    end
  end

Not sure if it matters, but I'm using the use_frameworks! option in my Podfile.
Also, just to be sure, the above snippet of code does not check if there's an existing preprocessor value for LOGGING_LEVEL_INFO. You'll need to refactor that if you may have an existing value (but that seems like an exceedingly rare situation).

@joshavant Thanks for reporting - right now modifying the Typhoon project settings via the Podfile is the only way to turn the logging off.
We'll think about the way to fix this issue in one of the next releases. And, of course, if you want to make a PR we'll greatly appreciate it!

@joshavant We've removed the TyphoonConfigPostProcessor logs for now - and still thinking of a better way of logging implementation. Thanks for posting the issue!


Power BI Actions-Create Workspace Step Fails in Azure DevOps

I keep getting this error I try creating a Build Pipeline using Service Connection details where i provide -
##Error - ResponseBody: {"error":"unauthorized_client","error_description":"AADSTS700016: Application with identifier '***' was not found in the directory 'Org_Name'. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You may have sent your authentication request to the wrong tenant.

I have been able to resolve the issue- But my next issue is that as this has succeeded and i can see Workspace is created in logs. But when i go to Power BI App, i dont see this auto created Workspace in the list of workspaces.
Can you let me know where we are going wrong ?

If you do not see the workspace you do not have permissions you will also have to add your self as a user.


CFFL

CFFL

Linter check found the following problems:
The following problems have been found:
ERROR: /tmp/abs_9dil35at99/clone/recipe/meta.yaml:22: missing_wheel: For pypi packages, wheel should be present in the host section
Errors were found

Linter check found the following problems:
The following problems have been found:
ERROR: /tmp/abs_395vhtppoo/clone/recipe/meta.yaml:22: missing_wheel: For pypi packages, wheel should be present in the host section
Errors were found


Translations missing in NuGet

Umbraco package contains it.

Thanks to pull request #29 this has been fixed! The plan is for this to be released in 1.2.0


K9 locked up on "upgrading database"

Expected behavior
I've used K-9 as my email app for several email accounts for several years now with no issues.
Actual behavior
When I click to open the app, it takes me to a white "upgrading database" screen that just continues to work. I can't access any of my emails accounts and it appears to be killing my battery.
Environment
K-9 Mail version: 5.201
Android version: 6.0.1
Account type (IMAP, POP3, WebDAV/Exchange):
Multiple accounts both POP3 and IMAP. The account it shows "upgrading" is IMAP.

How much data is K-9 Mail using on internal storage? How many accounts, folders, messages do you have (downloaded)?
Can you please record a debug log while "upgrading database" is running. https://github.com/k9mail/k-9/wiki/LoggingErrors

654 MB of internal storage used.
418 MB of data used since Sep 20, 2016??
I think it's 6 accounts and I have no idea on the folders.
I can't run a debug log because it's locked up on the "upgrading" page
the minute I open the app.
Nate
Anytime Logistics, Inc.
PO Box 2103
Denton, TX  76202
P<PHONE_NUMBER>
F<PHONE_NUMBER>
On 1/1/2017 10:45 PM, cketti wrote:

How much data is K-9 Mail using on internal storage? How many
accounts, folders, messages do you have (downloaded)?
Can you please record a debug log while "upgrading database" is
running. https://github.com/k9mail/k-9/wiki/LoggingErrors
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/k9mail/k-9/issues/1909#issuecomment-269934079, or
mute the thread
https://github.com/notifications/unsubscribe-auth/AXt150c8qsGrQFFiF6z9QOgECLWqxBvZks5rOIDlgaJpZM4LY1e2.

This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

I just cleared all data and started over. It's working now and I'll just
have to keep less "deleted/trash" sitting in the app.
Thanks,
Nate
Anytime Logistics, Inc.
PO Box 2103
Denton, TX  76202
P<PHONE_NUMBER>
F<PHONE_NUMBER>
On 1/1/2017 10:45 PM, cketti wrote:

How much data is K-9 Mail using on internal storage? How many
accounts, folders, messages do you have (downloaded)?
Can you please record a debug log while "upgrading database" is
running. https://github.com/k9mail/k-9/wiki/LoggingErrors
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/k9mail/k-9/issues/1909#issuecomment-269934079, or
mute the thread
https://github.com/notifications/unsubscribe-auth/AXt150c8qsGrQFFiF6z9QOgECLWqxBvZks5rOIDlgaJpZM4LY1e2.

This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

I can confirm this problem on Android 4.4.2 with K9-Mail 5.201. I can't enable debug logging because the App is not accessible because of the upgrade process.
Unfortunately this didn't happen on my own phone, so I can't do any follow up debugging. I just wanted to report that I experienced the same issue.

Same problem with me. Android 5.0.1 with K9 5.201. Reading from a single IMAP account.

Seems to work now. I deleted some spam, cleared the trash folder, deleted the cache, rebooted and let K9 run for about an hour.

Sounds like the database upgrade is working as intended, just can be really slow on large databases.
I'm not sure if we should invest time in finding out what's the exact cause for this and how we can optimize the process. By the time we're done most users will have upgraded the database or have started over.

Same issue here, android 6.0.1.  Been updating a single account's database for 12 hours now.  Can someone clarify what files I can safely delete to remove the database while still leaving my configuration?  I have 4 email accounts with various imap folder configurations and I'd rather not have to redo all of that setup.

A possible improvement would be to provide some visual details to the user, e.g. how long it will take, or at least that "something happens", i.e. that it isn't hung - a moving circle is just a stock animation, it doesn't mean that something is happening. I noticed in my second test that the amount of used data was increasing, although slowly. So if K9 can't guess a %, then at least mention something like count of items converted or whatever.

I'm having the same issue. K9 storage usage is 1.3gb and appears to be growing. K9 v5.201, Android 6.0.1.

Just opened k9 back up and appears all my mail is there. I did see a screen showing info about version upgrades, like it just was upgraded. I'm checking for new mail now and it appeared to take a while, but now starting to come in. I noticed the upgrade was going at 5am this morning and maybe completed around 8am, so 3 hours or so. Hope that helps somebody.

I see the same problem. K-9 version 5.203 on Android 7.0 (OnePlus 3 with OxygenOS 4.0.2). Android reports that K-9 uses 1.4GB of storage.
After K-9 version was updated, the app was stuck on upgrading the database. After 24 hours of waiting, I cleared all data (using the Android app manager) and imported my K-9 settings again.
It is a huge annoyance that the upgrade process cannot be done in background, so I can still read my email while the upgrade happens.

I have the same problem which started today at 9am EST and still running.  K-9 version 5.203 on Android 6.0.1.
Do I have to wait until it stops and clear all data and reload my K-9 settings again also?
Any insight would be helpful.
Thanks

Android 7.12, K9 V5.727,
hanging in the "upgrading databases" screen since hours without any noticeable progress.
K9 was in V 5.203 and is now already grown to V5.727 - why is this problem still not adressed?
Ty


chore(blog): article proposal based on basic concepts about APIs

Proposal of an article based on basic concepts about APIs and architectures.

Does anyone know why it's failing? Thanks in advance!

Does anyone know why it's failing? Thanks in advance!

@Barbanio The gifs you are using inside the Blog post are actually making the load time of the page very high. Here's the report of the Lighthouse which has been run on your PR - https://storage.googleapis.com/lighthouse-infrastructure.appspot.com/reports/1669810648285-95885.report.html.
Particularly this is the error:

@akshatnema Ok, thank you very much 😊

Thanks for your feedback 🙂
@derberg, I agree with you. I think it's a good idea to add images, otherwise, it's too dense.

Hello!
I changed the layout of the pictures in the post but I have two problems that I don't know how to solve:

I can't manage to place photos 2 and 4 on the right side.
Some parts of the text around some pictures have a different color and size than the rest.

Does anyone know how I can solve this?
Thank you very much in advance! ✨
@derberg

Thank you very much @derberg and @magicmatatjahu! I think it's ready 🙂 Any other suggestions?

/rtm


redspec and redccd failures: ImportError: No module named _bsddb

redccd and redspec failed after smooth installation of the package. The traceback is shown bellow:
...
File "/home/bquint/anaconda2/lib/python2.7/dbhash.py", line 7, in <module>
    import bsddb
File "/home/bquint/anaconda2/lib/python2.7/bsddb/__init__.py", line 67, in <module>
    import _bsddb
ImportError: No module named _bsddb

This is caused by systems that does not have the developer version of the Berkeley Database Libraries for C++. To fix that, one can do the following:

Use apt-get, aptitude or whatever package manager you have to find out what is
the version of the libdb?.?++ you have (the ?.? corresponds to the installed version).

Install the developer version of the installed package (e.g. libdb?.?--dev)

Install the bsddb3 Python package using pip or your favorite method.

Voi la! The problem should be fixed!

I will add this to a Wiki Page


CoeCLI Installation clarifications

For step 1 on this page under "To install the CoE CLI" it would probably be good to clarify that this means the "Source Code.zip" file as the GitHub landing page referenced has several zip files, including one specifically called "coe-cli.zip" that does not work with the rest of the instructions.
Furthermore, is the purpose of the coe-cli.zip documented anywhere? It contains a coe-cli.exe, which I assume is a prebuilt version of the CoE CLI, but I couldn't find any documentation on how to use it. All of the code examples use just "coe", so it's not being called directly, and running the exe itself does nothing.

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

ID: 6afd0cd6-006d-2efc-2702-a7daf5b92d67
Version Independent ID: 6afd0cd6-006d-2efc-2702-a7daf5b92d67
Content: Center of Excellence (CoE) Command Line Interface (CLI) installation - Power Platform
Content Source: power-platform/guidance/coe/cli/install.md
Service: power-platform
Sub-service: guidance
GitHub Login: @Grant-Archibald-MS
Microsoft Alias: grarchib

Thanks for your comment, @sefa-phaag. This issue has been assigned to the doc author for review.

Yes, please update this for clarification, because I also ran into a similar issue of just downloading the coe-cli.zip file rather than the source file.


Fix INP001

https://docs.astral.sh/ruff/rules/implicit-namespace-package
Continuation of #216 see comment
Note this will fail due to D104

I'm 👎 for adding extra files that aren't needed just to fix a ruff rule

Yeah, right. I don't understand why we need these. Our tests are not a public package, we don't ever do from package.tests import flibble, and pytest finds both the repo and the cookie-cut tests.
Adam once explained a genuine need for tests/__init__.py but I now can't find where that was.

Honestly, I don't care. However, my understanding is that tests is a public package because it isn't called _tests.

Found astral-sh/ruff#6474, so have removed __init__.py from tests. How do we feel about hooks? Also, in different.

How do we feel about hooks? Also, in different.

Very very very soft opinion, is to add it as another exception. It seems cookiecutter hooks (like git hooks) are supposed to be closer to a directory of executables. So... not a package. I mean: we could put bash scripts or whatever in there. (Obviously we won't do that, we're not crazy.)
But I'm also OK with leaving as-is. It's only this repo code. We're not adding bloat to users' packages.


Droid Sans

I updated the plugin Kirki Toolkit, and now Droid Sans font has disappeared? why so? Have you exlcuded that Font?

We use the googlefonts API to get a new list of webfonts every time (see https://developers.google.com/fonts/docs/developer_api)
In fact you can see the URL we use to download a fresh set of fonts on each update: https://github.com/aristath/kirki/blob/develop/Gruntfile.js#L9
If you open that URL on your browser you'll see that the font is no longer provided by google in their APIs.
If Google decide to add the font again, it will become available. Otherwise there's not much we can do to control google's webfonts API.

Ok. that make sense!
In the morning I wake up and found this error →
Warning: implode(): Invalid arguments passed in /home2/....../wp-content/plugins/kirki/modules/webfonts/class-kirki-modules-webfonts-link.php on line 146

Can you please try the develop version from here and let me know if that fixes the issue? Or you can just manually make this change https://github.com/aristath/kirki/commit/5bfe66fa4277015a9cb87b0b9eca6fe2494b6de4
If it works for you I'll release an update real quick.

Please forgive me I didnt understand what lines should I modify in the plugin folder?

Easies way is to just replace the wp-content/plugins/kirki/modules/webfonts/class-kirki-modules-webfonts-link.php file with this one: https://raw.githubusercontent.com/aristath/kirki/5bfe66fa4277015a9cb87b0b9eca6fe2494b6de4/modules/webfonts/class-kirki-modules-webfonts-link.php

Yes,
Thats solves the issue.

Excellent, thanks for confirming. 👍
I'm releasing 3.0.15 as we speak so that everyone get the fix.

Ok sir, thanks for the immediate help!


Only free the read buffers if we're not using them (3.1/3.0)

If we're part way through processing a record, or the application has
not released all the records then we should not free our buffer because
they are still needed.
CVE-2024-4741

Backport to 3.1/3.0 of #24394

Pushed to 3.1/3.0. Thanks.


MAX_SIZE ADDED

Sure I'll make the description clear.
On Sat, 9 Nov 2019, 12:41 pm Bhupesh Varshney<EMAIL_ADDRESS>wrote:

@Bhupesh-V requested changes on this pull request.
Thanks for your contribution but it looks like the Description is not
clear enough also please fix the format of markdown guidlines
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/Bhupesh-V/30-seconds-of-cpp/pull/320?email_source=notifications&email_token=ALVVHT57NNAFXNIWT76T4KLQSZSR7A5CNFSM4JBITRLKYY3PNVWWK3TUL52HS4DFWFIHK3DMKJSXC5LFON2FEZLWNFSXPKTDN5WW2ZLOORPWSZGOCK7ZOUI#pullrequestreview-314546001,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ALVVHT6ELSQSBKYBJIY6KNTQSZSR7ANCNFSM4JBITRLA
.

Closing this due to inactivity.
Thanks for contributing


Handle OTP 23 24

Took inspiration from cowboy in the fix:
https://github.com/ninenines/cowboy/commit/3a7232b019f975a594a696eace46abcbfeec5b2e
simply drop support for older OTPs.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


Translate ConfigureAwait fix for VB

Build is passing: https://ci.appveyor.com/project/code-cracker/code-cracker/build/<IP_ADDRESS>9


Make library symlinks relative

This allows distributions to be more easily relocatable, such as when bottling this library in Homebrew.

Hm... if I understand this correctly, it will create a symlink to the folder where the http parser was built. Which means that when the development directory will be removed - the links will be dangling.
Is it expected? Why is it useful?

Symlink targets are always in reference to the location of the symlink file itself, so since the symlink file location is inside of $(LIBDIR), the target will implicitly point to $(LIBDIR) as well.  In other words, this change should have no functional impact, except that if the files were moved after installation (if, for example, this library were bundled with some other piece of software that was meant to be portable, for instance) the symlink would not be broken.
As it stands now, if the absolute path to the library changes due to the folder being moved/relocated, the symlink will point to the incorrect path.  This is an issue when "bottling" this library in the Homebrew package manager for OSX.  Homebrew builds binaries for many of its packages, and Homebrew supports installation in non-standard prefixes (e.g. anything other than /usr/local/).  However, if the binaries contain hardcoded paths or other problems that make them difficult to relocate, those binaries cannot be installed in non-standard prefixes.  This patch makes it so that binary builds of this library are easily relocatable.

@jasnell may I ask you to take a look at this?

Yeah, I can take a look. Realistically it won't be until after 4.2.0 is out on monday tho. I have a whole bunch of sniff testing to do to make sure 4.2.0 is solid.

(I'll try to get it sooner than that tho)


Blade 130x: Move actuators to faster outputs

Describe problem solved by this pull request
The historically designated AUX outputs are directly connected to FMU and have a faster output rate.
Describe your solution
This is what rotary wings should default to. It also avoids complications with loading complex mixers.
Describe possible alternatives
We really need to move away from always using IO, so there is no good alternative.
Test data / coverage
This is UNTESTED and should be tested by heli contributors.

This unfortunately doesn't work in all cases because many older boards have just 4 AUX PWM outputs. Closing.


Danish locale is not exported

Version
7.0.0-rc.0
Environment
All
Reproduction link
https://github.com/NG-ZORRO/ng-zorro-antd/issues/2485
Steps to reproduce
Use Danish locale
What is expected?
The danish locale is expected to be usable.
What is actually happening?
The danish locale is not usable because it is not exported.
Other?
I added the danish locale but failed to actually export the locale. I will try to fix it.

fixed in #2599


[Feature Request] effects settings

I just want to reduce the reach of "long reach" cause i think it's too broken right now

I had been considering reducing the reach distance of the effect, as I agree, it feels a little too powerful. What do you think would be a good step in reach distance per level of effect?

I don't know if this is possible but it'd be nice to have an option to choose between block reach, pvp reach, and both. I don't mind using  the effect for building but it feels to OP when pvping-pveing.
I don't really know what to answer to your question. I tend to play more seriously and I love little additions but I don't like when something is too OP, so a way to set our own settings would be awesome.

i think a config for players to set their own values would be a great idea.
block reach and attack reach will almost always be op in pvp/pve even if its just a one block increase. personally i think the mere fact that its a beacon effect, being limitted both to the vanilla endgame and only certain areas of the world is already enough of a downside to make it fair, but thats just an opinion :p

i think a config for players to set their own values would be a great idea.
block reach and attack reach will almost always be op in pvp/pve even if its just a one block increase. personally i think the mere fact that its a beacon effect, being limitted both to the vanilla endgame and only certain areas of the world is already enough of a downside to make it fair, but thats just an opinion :p

Yeah, it kinda depends on the theme of your server tho. I wouldn't like my players farming bosses from a safe distance even if it's endgame. As you said, a config for players to set their own values would nice.

I will introduce an integer game rule for defining the reach increment per effect level. Block reach and attack range will share the same game rule as I feel it would be counter-intuitive if the player were able to reach entities further than they did blocks or vice versa.

Nice!

Implemented in https://github.com/ChloeDawn/BeaconOverhaul/releases/tag/1.4.2%2B1.17 https://www.curseforge.com/minecraft/mc-mods/beaconoverhaul/files/3476553


new google colab notebook

Hi @carsen-stringer
I've modified the existing Colab notebook and generated a notebook somewhat inspired by ZeroCostDl4Mic notebooks. Its only for 2D prediction right now and can be found here:
https://github.com/pr4deepr/cellpose-colab
I can do a similar one for 3D if needed
I've disabled the mxnet option as I just noticed you've moved to PyTorch.

yes, please. 3D will be appreciated a lot.
thanks

this notebook is amazing! please make a pull request with it added to the notebooks folder and we'll add it to the repo and a link in the readme (crediting you)

this notebook is amazing! please make a pull request with it added to the notebooks folder and we'll add it to the repo and a link in the readme (crediting you)


Authentication

I apologize if this is not the right place to ask questions. I couldn't find a discussion group or mailing list.
I recently started looking at the examples and documentation, and before I fully dive in, invest in learning it and developing larger web apps, I wanted to understand if it is fully intended for multi-user web applications.
The first thing that comes to mind is how to implement user authentication. Any simple approach?
I've seen in the documentation that there is a concept of "session", but I'm not sure how it fits with the concept of user session in a traditional web application and how you keep it secure. In web frameworks such as Flask or Bottle there is an authentication layer and also a session layer that take care of this. What would be the Flexx equivalent?
Thanks for any advise!

if it is fully intended for multi-user web applications.

Flexx could be used for that. If "multi" means a few, than Flexx can help connect things up (e.g. collaborative stuff). If "multi" is meant as in a more classical web server, than it's probably better to use Flexx to build the front end, but use flx.App.export() or flx.App.dump() to create static assets and serve these with your favorite web server.
In the latter case authentication is out of the scope of Flexx. In the former ... I've never had the need/time to have a proper go at it yet.

create static assets and serve these with your favorite web server.

Well, in my opinion, the power in Flexx is in the interaction between the front-end and back-end. There is no "fun" in using it just for writing the front-end and avoiding Javascript, without an interesting Python-based backend part.
Do you have any ideas on how to go about implementing authentication using the full stack solution (Tornado-based server)?
I believe that not having some authentication mechanism (or guidelines for it) is a big barrier for adoption as a web framework (as opposed to a desktop app framework, where authentication is irrelevant). After all, most web apps provide access to user data, which is always password and encryption protected.

I see your point, and yeah, it would be good for Flexx to have some sort of "builtin" solution for auth. Perhaps Tornado's mechanism can be leveraged?

I would be happy to help. I have experience with web apps in general, by I'm new to websockets.
I googled "tornado websockets authentication" and I found a fair amount of interesting reads. There doesn't seem to be anything standard though.
Perhaps it would be better to start with guidelines instead of going straight for a built-in solution. I usually prefer a modular approach, that way things are easier to integrate with existing code.
If we could start by discussing the architecture of Flexx, specifically the concept of "session" (I believe this is what needs to be protected), it would be ideal for me to understand what, when, and how the dialog between server and client must be secured.

Perhaps it would be better to start with guidelines instead of going straight for a built-in solution. I usually prefer a modular approach, that way things are easier to integrate with existing code.

I think this makes a lot of sense.
What we call a "session" in Flexx is bound to the websocket connection. But for authentication this "scope" might be too limited, as a user would need to login each time that the page is loaded. Many auth methods involve a cookie, which can be set via Flexx' session object (see set_cookie() and get_cookie()).

How about something like this: Have an authentication app (app in the sense of Flexx apps) which would set a cookie upon successful authentication and then re-direct to the second app (the intended target app). When the connection of the second app gets established, the first thing that is checked is the cookie. If it does not correspond to a valid logged-in user, it re-directs back to the login app and close the connection. If it does correspond to a valid logged-in user, we make some User object available to the code.
Of course, we would need to discuss the implementation details.
Another option is to dig into Jupyter Notebook/Lab. This is based on Tornado with websockets (you probably already knew that). And we copy from the more experienced guys. Unfortunately, I think Jupyter has just a single-user solution.

That sounds reasonable. It would also allow different variants of the authentication app, but the general approach can stay the same: an auth app sets a cookie, in the actual app this cookie is checked.
I agree that it could be worth looking at how Jupyter does it's authentication and see if we can use (part) of that approach.

This is where my lack of knowledge about websockets limits me: Would it be secure enough to check the cookie in the main app when the connection is first created or would we need to check it periodically? Is there a mechanism (a callback) to run code when the connection is established so that we can check the cookie? Are cookies sent by the client when a websocket connection is established?
I should do some reading, but I ask in case you already have some insight into this.

Good points. In theory it should be ok to accept the ws connection and check the cookie then. But my gut does not feel too good about that, because the ws connection can trigger a lot of magic. We'd have to do some sort of code review to identify potential risks. Perhaps it's better to check auth before accepting the ws ...

I created a short example with the basics: https://gist.github.com/jpcaram/696df0b2357326c4fd3965ef0d90f1c2
This should help being more concrete about the things we are talking about.
This example is written in pure user code, without any intervention in the Flexx code. There is an authentication app and a main app. The cookie is set by the auth app, and checked in init() of the main app. You are right about a lot going on before the cookie is checked. It works, but things start to get a little dirty. The first problem that I found is that the decorators for the methods will get called regardless of authentication. I used a hack for this in the code as you will see.
If the decorators are the only problem, can we just override the decorators?
What else do you think will break this approach?

Any feedback? I would like to continue working on this, so some suggestions as to where to look and things to try would be useful and much appreciated.

That's a nice example, especially since it does not even touch the Flexx code yet :)
For the decorator, I think a dummy widget is indeed the best solution (though it feels a bit awkward).
A potential risk could be that even though you're not creating the GUI for the user (instead showing "not logged in"), the code for the GUI could be present in JS. So an attacker might be able to still revive the GUI. So the current approach would feel fragile if you want to use it to shield a user from visiting certain pages.
That said, if all risk is contained in a few server-side actions, you could check the cookie there as well and you should be safe. Although ... the fact that there's an active websocket to the server (with quite a bit of complex stuff going on close to it) does leave an uncomfortable feeling :)
Ideally, I think, it would be nice to serve 403 for main if the user is not authenticated, but that'd need changes in the server code...
Does this help to get you going?

@jpcaram and @almarklein
Has there been any additional progress on this topic?
Is the code in the above example safe to use in a simple GUI application that runs on a local network?
It's a really great feature to have.

The example that I provided earlier is safe as long as you understand the limitations of it. Some we have already discussed in this thread.
I'm still working on this though, so there might be changes to the Flexx code in the near future that make the whole process more robust.
But for the time being, and specially if it is in a local network (i.e. with trusted users), it should be fine.

@jpcaram
Thanks. I got the system working, but I still have one problem.
I have two pages EntryPage and MainPage which I both serve with:
entry.serve('')
main.serve('MainPage')

When it is a fresh start and I try to directly access localhost:49190/MainPage it correctly redirects me to the EntryPage. But if I login on the EntryPage, which then redirects me to the MainPage, then close and reopen the browser, then again try to get to the MainPage directly with url localhost:49190/MainPage, it accepts it and in my console it shows that the session cookie is still valid (LoginOk from your example).
How do I reset this every time a user closes the browser, so that the credentials need to be entered every time the application is opened?
If I am missing something obvious I apologize, I'm quite inexperinced with web programming.
Thanks

@almarklein , do you mind if we discuss @matkuki 's specific issue here, even though the original purpose of this thread was for the development of the authentication features?
@matkuki , closing the browser doesn't mean anything. The cookie is still in your browser when you restart or reload the page, and that is what the server is checking. You need to add some more logic on the server side to do something like 1) allow the use of the cookie only once or 2) allow the use of the cookie for a given amount of time. In these cases you need to track the unique identity of the cookie and the time it was generated respectively.

@jpcaram
Great, thanks👍

@almarklein , before submitting any pull requests I wanted to discuss my approach.
I think that we need to call a method in the app before we call init(). For the sake of the discussion, lets call it prestart(). prestart() should be called immediately before init(), and depending on the return value of prestart(), we either run init() or do something else. Perhaps prestart() can raise an exception that it is caught in the server, before creating the session and the websocket.
This approach is much more general than just authentication and it is completely invisible to existing users until they decide to implement prestart(). Then we can build an authentication mechanism on top of it.
Your feedback is much appreciated. Thanks.

@jpcaram  That sounds reasonable. What class would prestart() be a method of? The App class?

@almarklein It would be a method of Component, which if I'm understanding correctly it what gets wrapped with App, right?
So, the usage pattern would be:
class MyApp(PyComponent):

    def prestart(self):
        if not authenticated:
            raise PreStartError('Not authenticated')

    def init(self):
        // Stuff available to the authenticated user.

Then we catch PreStartError in the right place, when the app is requested by the browser, but before we send anything back (and of course, before opening the websocket). We return instead some http code indicating failure. Alternatively, the user may define some alternative action (defining overriding some method), perhaps redirecting somewhere else.

Ah right. This looks like a sensible approach!

@almarklein could you help me out? My implementation of the prestart mechanism is almost done. However, I'm having some strange behavior.
This is what I have done so far:
In event/_component.py:
class Component(...):
    def prestart(...):
        pass

    def __init__(...):
        # Run user-defined initialization behavior if this is an app about to
        # establish a Session.
        if 'flx_is_app' in property_values and property_values['flx_is_app'] \
                and 'flx_session' in property_values:
            self.prestart(*init_args, **property_values)
        ...

In _app.py:
class AppManager(...):
    def create_session(...):
        ...
        # Instantiate the component
        # This represents the "instance" of the App object (Component class + args)
        try:
            app(flx_session=session, flx_is_app=True)
        except PreStartError:
            del self._session_map[session.id]
            raise
        ...

And finally, in _tornadoserver.py:
class AppHandler(...):
    def _get_app(...):
        ...
        if session_id:
            ...
        else:
            try:
                session = manager.create_session(app_name, request=self.request)
                self.write(get_page(session).encode())
            except PreStartError as e:
                self.write(str(e))

In general it seems to behave as expected. I override prestart() in my PyComponent to raise a PreStartError and I get the message on the browser. But I suspect there is something that I'm not handling correctly. I get this in the console:
Exception ignored in: <object repr() failed>
Traceback (most recent call last):
  File "/home/jpcaram/cloud/flex_develop/flexx/flexx/event/_component.py", line 350, in __del__
    if not self._disposed:
AttributeError: 'Main' object has no attribute '_disposed'

I does not break anything, it continues to run normally. I tried handling the exception in the constructor, adding self._disposed = False and re-raising,  but then it starts complaining about self._id. Every time I add the missing attribute, it tries to access some other one. So, it seems that some part of the program is trying to use the object created with app(flx_session=session, flx_is_app=True).
Any idea of what I'm missing? Thanks.

Mmm, prestart() happens too early, the component is missing some essentials :)  I think it would be better to implement somewhere in app/component2.py, e.g. by overloading _comp_init_property_values() in the PyComponent class. That method is called just before init() gets called.
This got me thinking: why not simply implement the logic in init() itself? We could create a special exception class that can be raised from there, and then caught in the appropriate places.

Could you write a short summary of the sequence of events when an app is requested until it is written to the client? I'm a bit in the dark. I want to make sure there is nothing left behind once we raise the exception. I would like to run prestart() before anything happens, or that I can fully undo what has been done when we catch the exception.
It might be possible to implement the logic in init(), but I think it would be best to hide it away from most users. This way we could create an authentication mechanism in some subclass, say SecurePyComponent, that has an easy usage and the user can write init() just like before. I think it is better to keep things separate.

I think it is better to keep things separate.

I first thought that init() would be fine, since users could simply do super().init(). But if they forgot, the auth is gone :P  Besides, I now realize that there is a better point to hook into.
Component.__init__() first does some basic initialization, before it calls _comp_init_property_values() and init(). It's only after calling init() that it sets up (event) connections with other components.
The Component._comp_init_property_values() initializes property values, but is also used as a hook in the JSComponent and PyComponent classes. They use this method because it's the best time in the initialization cycle (right before init()), and because they need the user-specified properties that get passed in as an argument.
The stuff going on in _component2.py with _comp_init_property_values()` /app/_component2.py#L352) is what makes the Py/JS interaction possible, and is a bit complex.
But that does not matter if we use _comp_init_property_values() as a hook too :)
class SecurePyComponent(PyComponent):
     def _comp_init_property_values(self, property_values):
         # ... do your thing here, raise if needed
         # Otherwise, go on as usual
         super()._comp_init_property_values(property_values)

Thanks for the explanation.
I tried your suggestion, and also running prestart() in other places. The problem now is that the destructor (__del__()) of the Component is looking for stuff that isn't there. Specifically, it is looking for things referenced in the decorators, but those thing aren't there because they were supposed to get created in init()  which we intentionally did not run.
I could override __del__() and have it check some flag that is set when PreStartError is caught. I suspect that it is fine to do nothing in __del__() in such case (have it just return). Please correct me if I'm wrong.

Ah right. Looking at the code, I think these three attributes are unset if we don't call _comp_init_property_values of the superclass: _session and _root from BaseAppComponent and  _event_listeners, __event_types_at_proxy and _has_proxy at LocalComponent.

I could override del() and have it check some flag that is set when PreStartError is caught.

I fear that not calling the appropriate dispose methods may bite us sooner or later. I think the best would be is to initialize (to None or empty list) these attributes in __init__ instead of _comp_init_property_values.

Hi, I also need authentication in my app and just found this issue. It seems that this approach just died somehow close to completion. What happened? Or, perhaps more relevant: What's the state of authentication in Flexx?


zip.compress promise does not resolve if compressing 3 or more files

This one is tricky, it took me a while to find the cause of it.
If I have an array of 3 files, and then compress them and wrap them in a Promise.all(), that promise does not resolve.
Minimal reproducible example:
import { zip } from "jsr:@deno-library/compress";
import { describe, it} from "jsr:@std/testing/bdd";

describe("zip", () => {
  it("should compress N files in a row", async () => {
    const N = 3;
    await Deno.mkdir("/tmp/zip-test", { recursive: true });
    const files: string[] = Array.from({ length: N }, (_, i) => `/tmp/zip-test/file_${i}.txt`);
    await Promise.all(files.map((file, i) => Deno.writeTextFile(file, `Hello, World! ${i}`)));
    await Promise.all(files.map((file, i) => zip.compress(file, `/tmp/zip-test/file_${i}.zip`)));
    await Deno.remove("/tmp/zip-test", { recursive: true });
  });
});

For any N >= 3 this test does not pass as the compress promise does not resolve. The compressed files do appear where they are supposed to, but the promise hangs.
Maybe I'm doing something wrong here, so I would be glad if someone can point me in the right direction.

The parameter of zip.compress is a file or a directory, and if you want to compress multiple independent files, you should use "jsr:@zip-js/zip-js".


Drewhutcheon patch 1

Added AWS Cloud Practitioner course to Learn--> Platforms and Infrastructure

Making new Branch without any conflicts.


Support non-Flakes please?

Hi, I tried this tool today and noticed it's Flakes-only.
I see now that the README mentions Flakes several times, but  I thought that a tool that builds on nix-eval-jobs and nix-output-monitor would not require Nix Flakes (experimental feature).

The remote building doesn't work without flakes just now.

Also it's unclear how to make the --systems flag work


Fix foreground notification display bug

cc @marcaaron @AndrewGable
Details
Turns out that we had included @react-native-community/push-notification-ios as a dependency in order to display the unread indicator badge on iOS. This conflicted with our UA integration, which merges foreground presentation settings from the AppDelegate. Does that even make sense? It's pretty close to being true. Details here.
Fixed Issues
https://github.com/Expensify/Expensify/issues/144297
Tests
Draft right now because I have to go and don't have time to resolve issues I encountered while testing this.

Screenshots

I'll give this a look once it's no longer a draft. Would you mind changing the title to indicate it's a WIP, or use GH's draft function to mark this as such?

Hey Luke, np - I'll mark this as WIP while I work on fixing the E2E tests.

@Luke9389 this is no longer WIP

Ok cool! Are there tests I can perform for this?

My bad @Luke9389 🤦
There are testing steps now 👍

No problemo my dude! 😄

I don't have an iPhone either so can't test this.


Update it.yml

Removing redundant indefinite article that produced "una una osservazione" in the rendered HTML when substituting for %{noun}.
Note that the use of a feminine indefinite article "una" preceding %{x} in the strings starting at line 4522 on creates an issue when the value is masculine (e.g. "una commento") and there's no easy way to fix this given how these messages are structured. It looks like the previous translator attempted to address this with (what I believe should read) "un/una' on line 4524-4525.

Hey Dario! Changes to the translation files will just get overwritten the next time we sync with Crowdin, so I just made this change there: https://crowdin.com/translate/inaturalistweb/38/en-it#22276. If you want to make any changes to translations in the future, please look on Crowdin first. Ideally source strings originate in the github repo, where Crowdin retrieves them, volunteers translate them on Crowdin, and then they flow back to the repo.
Also, FWIW, this and the other notification-related strings are some of the hardest ones to translate properly. We've had plans to overhaul translations for a long time, which would hopefully involve reducing the number of variables in these strings, but we've been pretty stymied by just keeping up with growth. Maybe we'll get there some day.

Totally understand, thanks for the pointer!


Problem with extending singleton-declared classes in Godot 3.2.4 rc5 (unless running --verbose)

Godot version:
Godot 3.2.4 rc5. This problem came with rc5, was fine in rc4 and before.
OS/device including version:
Windows 10.
Issue description:
A script can no longer extend a class declared inside a class inside a singleton. For example: extends MySingleton.MyClasses.MyClass now throws error, even though MyClasses and MyClass are constant declarations. However, extends MySingleton.MyClass would not throw error. Also if you run Godot with --verbose, there is no problem at all - which leads me to conclude that it's a bug.

Workarounds:

One workaround solution is to move all the classes from MySingleton.MyClasses under MySingleton. (So you'll have to add more singletons to get over this technicality.)
Another workaround is to reference the classes by filepath. (But then related reorganizations in the file structure will be painful.)

Steps to reproduce:
Follow the minimal reproduction project.

Basically you add a singleton (MySingleton).
Inside the singleton script, write a constant reference to a class (MyClasses).

This class in turn simply contains a collection of classes that you'd like to extend (MyClass).

Finally, extend the class from some script: extends MySingleton.MyClasses.MyClass. You'll get a Parser Error: Couldn't find the subclass: MySingleton.MyClasses.MyClass. And when you open up the project, it will open up with Parser Errors - unless you open Godot with --verbose, in which case all works fine.

Minimal reproduction project:
ClassProblem.zip

I tested on Linux and I can't reproduce the issue with either 3.2.4 RC 5 or a build from the current 3.2 branch.
That seems like a surprising regression as I don't recall any change between RC 4 and RC 5 that could affect this.

I can't reproduce either on Windows. Usually editor restart helps with similar problems.

Well, this is weird. I still do get the error every time and with --verbose not. My only uneducated guesses are:

This could have something to do with timing. And so running -verbose somehow delays that part which initially checks whether those classes exist - without it, they are checked "too early". (Though, weird that the problem remains after starting up.)  <-- Reminding of an older "_some_singleton not declared in the current scope" bug when running the game.
Very unlikely, but you don't happen to have some editor settings or such that could affect this ? (Or me?)

Aah.. I'm terribly sorry. This is an old bug (or not yet implemented feature) of 3.2 beta5. Messed up with shortcuts (so that's why --verbose worked, d'oh)..!  :O My bad, really sorry, closed the issue.


startsWithAnyIgnoreCase method

Hi, this is my first commit therefore all kind of feedback is more the welcome :)
I added the  startsWithAnyIgnoreCase  described in this topic:
https://issues.apache.org/jira/projects/LANG/issues/LANG-1682?filter=allopenissues&orderby=created+DESC%2C+priority+DESC%2C+updated+DESC

Concurrent open PR for LANG-1682: #848

-1: I do not think we want to have an "ignore case" version of this and that, or all APIs. Looking ahead, I see a Strings class with configurable attributes like the case sensitivity, charset, and maybe a few other items, then you can say Strings.CASE_INSENSITIVE.startsWith(...) and Strings.CASE_SENSITIVE.startsWith(...)


Workflows up to date

This PR includes the CD-CI workflows, the CD workflow will use the version number from
compiled StayInTarkov.dll as a Tag and add it to the title as well, to create a new release this will need to be triggered manually from Actions tab, the CI workflow will run on each PR, if the PR is closed and opened again, will run again, if the PR is changed/updated will run again and it will update the comment with link to direct download the compiled dll's
CI workflow with comment:

CD workflow:

It making a draft, you still need to push the draft to public.

I missed something before approving.

CI shouldn't be publishing and creating a release.

My idea for CI workflow was to create the debug version of the files and put them into the PR thread so they can be downloaded directly and tested, for ease of use, is this what you refer to about publishing?

It making a draft, you still need to push the draft to public.

The CD workflow has to be run manualy to create a Draft as I did not want the release to run every time and do two build workflows on each PR


Add branch+commit to "What to Test" field in TestFlight.

Adds the branch and last commit to the "What to Test" field in TestFlight to more easily determine the version of each available option in your TestFlight is.

@bjornoleh and @dnzyx If you could please verify there's nothing wrong with this PR, given you're both much more versed in fastlane than myself.

This is great! No, I don't think you'll break anything with this.
You could perhaps experiment with adding something like this as well, but don't know if it will fit or clutter things up:
This would display the ten last commit subjects in descending order:
git log -10 --pretty=format:"%s"
Bolus from watch (#326)
Change temp target slider number position consistent with #291 (#321)
New strings
Merge branch 'Crowdin' into dev
New translations localizable.string (Swedish) (#315)
Update build_iAPS.yml (#318)
Change slider numbering position and add spacing #291 (#316)
Crowdin Italian translations (#313)
Fix types
Merge branch 'Crowdin' into dev

https://git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History


inferSchema option does not infer TimestampType

Version 1.2.0: The inferSchema option does not convert data in the timestamp format YYYY-MM-DD HH:MM:SS to a TimestampType. It keeps it as StringType.

Thanks for reporting the issue.


Fix #127

Simplified if condition on pan responder move.
Can you review, @grabbou?

As mentioned on Discord, that will make the right-sided menu not working, because in that case, left will become negative straight away.

@Kureev now it should be good.


Allow opening multiple crates

Self-explanatory.

Do you mean like consuming multiple keys at 1 time? If so Quick Crate allows users to shift-right-click a crate and use all their keys.

No, not multiple crate keys at a time. Multiple crates at a time. Right now you have to wait until a crate that uses QuickCrate is done with their animation and then you can open a different crate.
See gif:
https://gyazo.com/c7b92bbfaf879314647d6c8a09956853
It also counts towards multiple players using the same crate with the QuickCrate animation, because you have to wait until the QuickCrate animation of player 1 is done before player 2 can open that same crate.
See gif:
https://gyazo.com/46b5128f36370bfd6a64ba386ef58fcf

The reason you have to wait is its a physical animation that needs to finish. If it doesn't finish it would override the current players opening animation. This would cause their prize to quickly disappear sometimes before they can even see it.
I might make an option to allow this override. I'll add it to my list of To-Dos but don't have a set time when it will be added.

I've seen a different crates plugin that uses animations that are only visible by the player who opens the crate. Is that not an option?

That uses packets and I do not use those. So no it would not be.

The suggestion is not declined, Moved to a tracking board which will be added to the README.


olm_deploy: Add a standalone registry Dockerfile that serves a sqlite database.

This adds a Dockerfile that will build the metering-ansible-operator manifest bundle and serve that bundle in an initialized sqlite data.
Unlike olm_deploy/Dockerfile.registry, this image can be consumed in a CatalogSource custom resource by itself, without the help of any further resources.
In order to use this Dockerfile, you could run the following:
$ podman build -f olm_deploy/Dockerfile.registry.dev -t quay.io/tflannag/metering-registry:latest
...
$ podman push quay.io/tflannag/metering-registry:latest

Once that container image has been build and pushed to an image registry, you would be able to consume that operator's manifest bundle by creating the following CatalogSource CR:
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
  name: custom-metering-ocp
  namespace: openshift-marketplace
spec:
  sourceType: grpc
  image: quay.io/tflannag/metering-registry:latest
  publisher: Metering Dev

I also added a README.md that aims to provide an overview of the contents of this directory.

/retest

/retest

/retest

This is no longer needed once we switch to using index images in CI - closing.


CyclicComponent must choose between chained or planned cycle and have a state

#183
As define before

[x] implement possibility to choose cycle type
[x] Add cyclic state

Hey @AlexandreIorio with the new Executor it's now possible to apply this feature.


Configure Azure Pipelines

This pipeline configuration builds the application and produces a build for the Release configuration.

ok


[Ubuntu] include Erlang only in ubuntu2004

Description
It was included by mistake.
Related issue: https://github.com/actions/runner-images-internal/issues/6027
Check list

[ ] Related issue / work item is attached
[ ] Tests are written (if applicable)
[ ] Documentation is updated (if applicable)
[ ] Changes are tested and related VM images are successfully generated

/azp run ubuntu2004,ubuntu2204


Hackage upload workflow

I noticed that the two package versions released to Hackage had very small changes

http://hdiff.luite.com/cgit/free-vl/diff?id=0.1.3&id2=0.1.2
http://hdiff.luite.com/cgit/free-vl/diff?id=0.1.2&id2=0.1.1

The last one is totally unncessary. The second could be done by making a new revision of the package. For example for the last release at https://hackage.haskell.org/package/free-vl-0.1.3/free-vl.cabal/edit
Also, are you aware of the "package candidate" feature (it's mentioned on https://hackage.haskell.org/upload)?
For the record, each package version uploaded to Hackage will take up storage and can't be removed, increases the index-tarball size everyone has to download and store locally, and will cause additional overhead for the cabal solver. Morever, as you don't seem to be using upper bounds, your package will inevitably stop working at some point, most likely requiring Hackage Trustees to step in, and retroactively edit in the missing upper bounds...
/cc @hvr

Hey,
Thanks for the note! I have no idea what the best way to work with Hackage is, so I'll keep this in mind with future revisions to the package. I had figured that since I was uploading my own docs that it might ease the load on Hackage but perhaps that's wrong.
In addition to the steps you outlined above, does there exist guidelines for the best way to work with Hackage?
Thanks for the feedback!


GitHub resources not available

The following resources are no longer available on GitHub:
https://draggable.github.io/formeo/assets/js/formeo.min.js
https://draggable.github.io/formeo/assets/css/formeo.min.css
Here is an example when navigating to the css file in the browser:

Also https://draggable.github.io/formeo/assets/img/formeo-sprite.svg
and
https://draggable.github.io/formeo/assets/lang/en-US.lang
are having the same issues and breaking the library.

Yikes. That's pretty bad I will have this fixed tomorrow

All of these assets should now be restored
https://draggable.github.io/formeo/assets/js/formeo.min.js
https://draggable.github.io/formeo/assets/css/formeo.min.css
https://draggable.github.io/formeo/assets/img/formeo-sprite.svg
https://draggable.github.io/formeo/assets/lang/en-US.lang

@Adrian-PIMSS can you try now?
https://draggable.github.io/formeo/assets/css/formeo.min.css

The asset formeo.min.css is now available.
However, we are still having issues with the updated component. There are differences between the component used on the demo site compared to the production version which we are using.
On the demo site https://draggable.github.io/formeo/ I added a Header, Paragraph, Divider, Select and Text Inout. This is what was displayed:

Note that the demo site uses demo.min.css and demo.min.js.
Adding the same controls on our website, gives the following results:

The name of each control is missing. The 6 dots selector is missing. The border of each control is missing.
Our website is using the formeo.min.css and formeo.min.js versions.
This is now critical for us because our application that is live in production is broken.

The asset formeo.min.css is now available.
However, we are still having issues with the updated component. There are differences between the component used on the demo site compared to the production version which we are using.
On the demo site https://draggable.github.io/formeo/ I added a Header, Paragraph, Divider, Select and Text Inout. This is what was displayed:

Note that the demo site uses demo.min.css and demo.min.js.
Adding the same controls on our website, gives the following results:

The name of each control is missing. The 6 dots selector is missing. The border of each control is missing.
Our website is using the formeo.min.css and formeo.min.js versions.
This is now critical for us because our application that is live in production is broken.

Thank you for the detailed feedback, I will look further into this issue.
The demo site uses formeo by way of import syntax but demos on codepen use formeo the way you described. Can you compare your app to the codepen demo?
https://codepen.io/kevinchappell/pen/NrXoRw

:tada: This issue has been resolved in version 2.2.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:

@Adrian-PIMSS Can you have another try with the latest version 2.2.0? formeo now attempts to load version specific style and svg resources, if they are not present yet it will load the fallback which is the latest version hosted on github pages. What this means is now you shouldn't need to manually define style and svg resources. see minimal example below.
<!DOCTYPE html>

    <title>Formeo Basic Test</title>

Ok we shall try that. I will get back to you with the results.

@kevinchappell We have now tested the change you suggested and that has overcome the problem with the 6 dots selector:

The outlines for boxes and titles (Header, Number and so on) are now also correctly displayed. Thanks for resolving this.
However, we do now have a new issue.
When we attempt to save the design of the form, then it generates an error.

We have traced this to the object that holds the details for the Column.
The property for ClassName was previously a string, but it is now expecting an array of strings.
We can get the data for the form design to save if we change the ClassName to an array. See here:

But, we have been using the formeo control for a number of years and our customers have hundreds of forms defined with the Column object holding the ClassName as a string. When we try to load the forms after modifying the ClassName to an array then we get an error. We cannot feasibly amend all the data for our customers to change it to an array.
Can you advise on this please.

@Adrian-PIMSS i am not able to replicate the issue so I think I need more information to help. I tried form data with column classname as a string and as string[] and both worked. The class definition for columns has not changed in 6 years and I am not sure where you are getting the schema you are referring to.

We have traced this to the object that holds the details for the Column.

can you link to it in the repo? the screenshot of the class schema is not from this project

Hi @kevinchappell - The screenshot I provided is from our code for the objects we use in our application to represent the data from the formeo control when a form design is made.
I will get a sample payload across to you tomorrow.

Hello @kevinchappell
Sorry it's taken a few days to get back to you. Here is an example where we created a basic form with only a Header, Textbox and Number on the form. Here is a JSON view of the payload that will be saved for that basic form:

Here is the payload itself:
{"Template":"{\"id\":\"ac62994f-e1b9-4880-b523-b23a2d568e9b\",\"stages\":{\"2d7d7981-04e2-4fe7-95ec-834ebe94d6a9\":{\"children\":[\"b2bb51a2-f37f-4255-9190-d51ab7fcd2d3\",\"d36e2b1e-2942-4e38-8686-d1b8414d99e3\",\"8cf7df6b-9fdc-4f03-bbe2-bb41b82b5922\"],\"id\":\"2d7d7981-04e2-4fe7-95ec-834ebe94d6a9\"}},\"rows\":{\"b2bb51a2-f37f-4255-9190-d51ab7fcd2d3\":{\"config\":{\"fieldset\":false,\"legend\":\"\",\"inputGroup\":false},\"children\":[\"1c71ea88-5ab0-41c5-951e-5c53f4a4b69b\"],\"className\":[\"formeo-row\"],\"id\":\"b2bb51a2-f37f-4255-9190-d51ab7fcd2d3\"},\"d36e2b1e-2942-4e38-8686-d1b8414d99e3\":{\"config\":{\"fieldset\":false,\"legend\":\"\",\"inputGroup\":false},\"children\":[\"eb2d3f15-e6d2-4783-a70f-6e213a4fbcac\"],\"className\":[\"formeo-row\"],\"id\":\"d36e2b1e-2942-4e38-8686-d1b8414d99e3\"},\"8cf7df6b-9fdc-4f03-bbe2-bb41b82b5922\":{\"config\":{\"fieldset\":false,\"legend\":\"\",\"inputGroup\":false},\"children\":[\"0b1f44f3-e740-4527-a55b-58ebef9a031d\"],\"className\":[\"formeo-row\"],\"id\":\"8cf7df6b-9fdc-4f03-bbe2-bb41b82b5922\"}},\"columns\":{\"1c71ea88-5ab0-41c5-951e-5c53f4a4b69b\":{\"config\":{\"width\":\"100%\"},\"children\":[\"c9b2078f-05c8-4f98-82af-68c01640126c\"],\"className\":[\"formeo-column\"],\"id\":\"1c71ea88-5ab0-41c5-951e-5c53f4a4b69b\"},\"eb2d3f15-e6d2-4783-a70f-6e213a4fbcac\":{\"config\":{\"width\":\"100%\"},\"children\":[\"929b7c6d-fe6d-47a1-b6d2-748aae0eca52\"],\"className\":[\"formeo-column\"],\"id\":\"eb2d3f15-e6d2-4783-a70f-6e213a4fbcac\"},\"0b1f44f3-e740-4527-a55b-58ebef9a031d\":{\"config\":{\"width\":\"100%\"},\"children\":[\"08f91142-fd27-4235-bc3b-fdbf3483ebc1\"],\"className\":[\"formeo-column\"],\"id\":\"0b1f44f3-e740-4527-a55b-58ebef9a031d\"}},\"fields\":{\"c9b2078f-05c8-4f98-82af-68c01640126c\":{\"conditions\":[{\"if\":[{\"source\":\"\",\"sourceProperty\":\"value\",\"comparison\":\"equals\",\"target\":\"\",\"targetProperty\":\"value\"}],\"then\":[{\"target\":\"\",\"targetProperty\":\"value\",\"assignment\":\"equals\",\"value\":\"\"}]}],\"tag\":\"h1\",\"attrs\":{\"tag\":[{\"label\":\"H1\",\"value\":\"h1\",\"selected\":true},{\"label\":\"H2\",\"value\":\"h2\",\"selected\":false},{\"label\":\"H3\",\"value\":\"h3\",\"selected\":false},{\"label\":\"H4\",\"value\":\"h4\",\"selected\":false}],\"className\":\"\"},\"config\":{\"label\":\"Header\",\"hideLabel\":true,\"editableContent\":true},\"meta\":{\"group\":\"html\",\"icon\":\"header\",\"id\":\"html.header\"},\"content\":\"Header\",\"action\":{},\"id\":\"c9b2078f-05c8-4f98-82af-68c01640126c\"},\"929b7c6d-fe6d-47a1-b6d2-748aae0eca52\":{\"conditions\":[{\"if\":[{\"source\":\"\",\"sourceProperty\":\"value\",\"comparison\":\"equals\",\"target\":\"\",\"targetProperty\":\"value\"}],\"then\":[{\"target\":\"\",\"targetProperty\":\"value\",\"assignment\":\"equals\",\"value\":\"\"}]}],\"tag\":\"input\",\"attrs\":{\"required\":false,\"type\":\"text\",\"className\":\"\"},\"config\":{\"label\":\"Text Input\"},\"meta\":{\"group\":\"common\",\"icon\":\"text-input\",\"id\":\"text-input\"},\"id\":\"929b7c6d-fe6d-47a1-b6d2-748aae0eca52\"},\"08f91142-fd27-4235-bc3b-fdbf3483ebc1\":{\"conditions\":[{\"if\":[{\"source\":\"\",\"sourceProperty\":\"value\",\"comparison\":\"equals\",\"target\":\"\",\"targetProperty\":\"value\"}],\"then\":[{\"target\":\"\",\"targetProperty\":\"value\",\"assignment\":\"equals\",\"value\":\"\"}]}],\"tag\":\"input\",\"attrs\":{\"type\":\"number\",\"required\":false,\"className\":\"\"},\"config\":{\"label\":\"Number\"},\"meta\":{\"group\":\"common\",\"icon\":\"hash\",\"id\":\"number\"},\"id\":\"08f91142-fd27-4235-bc3b-fdbf3483ebc1\"}}}"}1
We save this payload to the database, so it can be loaded when we are using the form to capture data.
We use objects that we have defined to represent the structure of the payload, one of these is a Columns object to represent the column in the Formeo control. This has always had the property ClassName defined as a string, but since the recent updates (20 Oct 2024) it has given an error when trying to put data into the Columns object because it wants to put an array in the ClassName property instead. This is the code change we had to make in order to get it to save:

However, we have hundreds of forms saved already with their layout having the ClassName defined as a string. When these forms attempt to load, it gives an error because the data has ClassName stored as a string, but it is attempting to put in into the array object that we have had to change.
I hope this makes sense! If you need more info please let me know.

@Adrian-PIMSS I understand your concern about impacting customers however I am 95% sure this error is coming from a schema you have defined in your software. The changes that shipped on October 20th were:

a bugfix for the field edit window
converting the build from webpack to vite
updating node modules.

The line change you shared does not exist in the Formeo project and all components (Stage, Row, Column and Field) use the same base class of Component so any change to className definition would have been done there and impacted all components.
Additionally, I created a Codepen with the payload you shared and did not observe any issue. I then created a second version where I modified the payload so one column had a string className and the another has a string[] className and again there was no issue.
What version of formeo are you experiencing the issue with? Can you create an example online that reproduces the issue?

Update: I was able to kind of replicate the error. it doesnt happen in formeo itself but I auto-generated a schema which also defined className as a string. This is technically a different issue than the one we've been discussing on so I created a new one we can follow-up on.

Many thanks for continuing to look at this @kevinchappell
I can see the new issue you have created.


Cannot export data for ODBC connections

Describe the bug
When connected to a database (in my case, SQL Server) with the odbc driver, you cannot export data with ctrl+e, even though the data is clearly exposed in the interface.
To Reproduce

connect to harlequin with odbc connector
run any query
press "ctrl+e" to export the data
you will get an error

Expected behavior
data exports as csv.
Actual behavior
you get this error.

Additional context
What database adapter are you using with Harlequin? ODBC
Can you tell us more about your system?

Shell: Powershell
Terminal: Windows Terminal
OS of the shell: Windows 11 (native)
OS of the terminal (if different from the shell):

I recognize this is actually a feature request, sorry in advance @tconbeer

Yeah this is expected for now. I actually think I'm going to change the whole export thing to just export the data in the table, since we already have that locally in Arrow. Would that work for you or do you expect something closer to a COPY TO statement?

Yeah I don't think 'copy to' is the right path. Since the data is already in arrow locally, it's makes more sense to me to use those libraries to export to csv etc.

Yeah, ok that's good validation. In the meantime, ctrl+a and ctrl+c will work for datasets that aren't too huge.


Moodle Build issues - New build is stuck

Moodle build is stuck for a new run. On Investigation and analysis of the error combined with a discussion with BCDevOps revealed that the CPU requests have been reduced from '4' to '2'.

Reopening due to build error: error committing container for step {E...mount layer, mount label "" too large 4103


pydantic.color is moved to pydantic_extra_types.color in V2 resulting in an error in odmantic converts(pydantic.color.Color)

Describe the bug
Using pydantic V2 import starlette_admin.contrib.odmantic.Admin results in an import error because pydantic.color is moved to pydantic_extra_types.color.
See the migration guide to V2.
To Reproduce
from starlette_admin.contrib.odmantic import Admin

raises this error
  File "/usr/local/lib/python3.11/site-packages/starlette_admin/contrib/odmantic/converters.py", line 55, in <module>
    class ModelConverter(BaseODMModelConverter):
  File "/usr/local/lib/python3.11/site-packages/starlette_admin/contrib/odmantic/converters.py", line 120, in ModelConverter
    @converts(pydantic.color.Color)
              ^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pydantic/__init__.py", line 363, in __getattr__
    return _getattr_migration(attr_name)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pydantic/_migration.py", line 306, in wrapper
    raise AttributeError(f'module {module!r} has no attribute {name!r}')
AttributeError: module 'pydantic' has no attribute 'color'

Environment (please complete the following information):

Starlette-Admin version: 0.12.2
ORM/ODMs: ODMantic

Additional context
pydantic  version: 2.5.3

If you pin your pydantic version, this will be resolved.

Do you plan integrate pydantic v2 ?

just     @converts(pydantic_extra_types.color.Color) need

Do you plan integrate pydantic v2 ?

I have no plan yet but PR is welcome

solve in #594


Added 'Maturity Model for Microsoft 365 – How to run a Maturity Model for Microsoft 365 workshop'

Category

[ ] Content fix
[x] New article

Docs Build status updates of commit 4fa6061:
:warning: Validation status: warnings

File
Status
Preview URL
Details

Community/microsoft365-maturity-model--run-workshop.md
:warning:Warning
View
Details

Community/microsoft365-maturity-model--run-workshop.md

Line 2, Column 1: [Warning-ms-author-missing] Missing required attribute: 'ms.author'. Add the current author's Microsoft alias.
Line 2, Column 1: [Warning-ms-prod-or-service-missing] One of the following attributes is required: 'ms.prod', 'ms.service'. Use ms.prod for on-premise products, or ms.service for cloud services.
Line 100, Column 5: [Warning-file-not-found] Invalid file link: 'media/microsoft365-maturity-model--run-workshop/Workbook - MM4M365 workshop tool - Quick assessment.xlsx'.
Line 130, Column 3: [Warning-file-not-found] Invalid file link: 'media\microsoft365-maturity-model--run-workshop\Workbook - MM4M365 workshop tool - Content Set.xlsx'.
Line 131, Column 3: [Warning-file-not-found] Invalid file link: 'media\microsoft365-maturity-model--run-workshop\Workbook - MM4M365 workshop tool - Hardcore Set.xlsx'.
Line 132, Column 3: [Warning-file-not-found] Invalid file link: 'media\microsoft365-maturity-model--run-workshop\Workbook - MM4M365 workshop tool - People Set.xlsx'.
Line 133, Column 3: [Warning-file-not-found] Invalid file link: 'media\microsoft365-maturity-model--run-workshop\Workbook - MM4M365 workshop tool - Quick assessment.xlsx'.
Line 2, Column 1: [Suggestion-ms-topic-missing] Missing required attribute: 'ms.topic'. Add a valid value to indicate the article type.

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Docs Build.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
Note: Your PR may contain errors or warnings unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel


feat: property controller

:warning: Please install the  to ensure uploads and comments are reliably processed by Codecov.
Codecov Report
Attention: Patch coverage is 0% with 24 lines in your changes missing coverage. Please review.

Project coverage is 57.64%. Comparing base (fde8b4d) to head (09b7851).

Files
Patch %
Lines

src/property_controller.jl
0.00%
24 Missing :warning:

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@            Coverage Diff             @@
##             main       #8      +/-   ##
==========================================
- Coverage   67.12%   57.64%   -9.48%
==========================================
  Files           6        7       +1
  Lines         146      170      +24
==========================================
  Hits           98       98
- Misses         48       72      +24

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


Edit this library

I want to know how to edit this library I have already forked and cloned the library?

How to make your first pull request on GitHub
btw, read this: https://github.com/ArthurHub/Android-Image-Cropper/issues/838


Release Google.Cloud.AIPlatform.V1Beta1 version 1.0.0-beta12

Changes in this release:
New features

Add LLM parser proto to API (commit 239b1c1)
Add Tool.GoogleSearch (commit ec1d79d)
Add GenerationConfig.Modality (commit ec1d79d)
Add GenerationConfig.SpeechConfig (commit ec1d79d)
Add GenerationConfig.MediaResolution (commit ec1d79d)
Enable FeatureGroup Service Account and IAM methods (commit 6ee5a6b)
A new value NVIDIA_H100_MEGA_80GB is added to enum AcceleratorType (commit 0ced559)
A new field list_all_versions to ListPublisherModelsRequest (commit afd7734)

Created release for Google.Cloud.AIPlatform.V1Beta1-1.0.0-beta12


make layouts self-contained

My understanding is that to test turntaking_bot.py (and presumably others), one has to edit files that are under version control (in app/static/layouts/). That is not ideal. It should be possible to distribute required layouts together with the bot, so that trying out / demoing a bot really is self-contained and can work just with start_server_and_bots.py.

related: #45


We can present more information about Character

What problem does this feature solve?
There will be more Character in the game. when I manage to conquer a new stage. I need to replace some Characters into new Characters, and the comparison of Character's properties will help me quickly find which one is the most effective.
What does the proposed API look like?
every level and every Character should be included.

Thanks for your comment! Unfortunately, after careful consideration we decided to not include the character information in Penguin Statistics for the following reasons:

To include such information requires a lot of code effort to polish the feature to the acceptable level of user satisfaction
There's already plenty of tools implements such feature which I think are quite good

This is not gonna be fixed.


release artifacts for release v0.3.0

Release Notes Draft:
Added new resources for SageMaker Studio

New resource Domain
New resource UserProfile
New resource App

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

/lgtm


Branch ugdg v1.4

Codecov Report

Merging #225 (c249d58) into master (e912d87) will not change coverage.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master     #225   +/-   ##
=========================================
  Coverage     76.61%   76.61%
  Complexity      806      806
=========================================
  Files           115      115
  Lines          2266     2266
  Branches        262      262
=========================================
  Hits           1736     1736
  Misses          455      455
  Partials         75       75

Continue to review full report at Codecov.

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


Expose renderers, so you are able to override or extend them on each platform

A first stab at addressing #33
FYI @MysterDru is this what you're thinking? Am I on the right track? I want to be absolutely sure I'm following common practices here. before shipping a new public API that I can't change after that.
Would you mind doing a code review? (some white space issues was also fixed so turn on ignore white space to make it a little more reasonable to look at)

I can circle back on this when I have a bit more time to devote to it. My nights and weekends get a little packed. I'd want to try a sample integration with the current changes, and do some customizing of the control.
I totally get where you're coming from on the level of extension. Making all the things public is for sure a point of no return. So, I'd want to make sure I'm not suggesting something that makes your life difficult as the maintainer of the project.


Cannot get Vulkan working

Hi, sorry if this is a dumb question. No matter what I do, I cannot seem to get Vulkan to work using this GUI. I have a GTX 1080Ti with Cuda and Cudnn installed.
[2020-06-15 21:48:50] Compatibility test is ongoing, please wait.
[2020-06-15 21:48:52] Compatible with waifu2x-ncnn-vulkan(Latest Version): No. [Advice: Re-install gpu driver or update it to the latest.]
[2020-06-15 21:48:54] Compatible with waifu2x-ncnn-vulkan(Old Version): No. [Advice: Re-install gpu driver or update it to the latest.]
[2020-06-15 21:48:55] Compatible with waifu2x-ncnn-vulkan(20200414(fp16p)): No. [Advice: Re-install gpu driver or update it to the latest.]
[2020-06-15 21:48:56] Compatible with waifu2x-converter: Yes.
[2020-06-15 21:48:56] Compatible with Anime4k(CPU Mode): Yes.
[2020-06-15 21:48:56] Compatible with Anime4k(GPU Mode): Yes.
[2020-06-15 21:48:58] Compatible with srmd-ncnn-vulkan: No. [Advice: Re-install gpu driver or update it to the latest.]
[2020-06-15 21:48:58] Compatible with waifu2x-caffe(CPU): Yes.
[2020-06-15 21:49:00] Compatible with waifu2x-caffe(GPU): Yes.
[2020-06-15 21:49:04] Compatible with waifu2x-caffe(cuDNN): No. [Advice: Install NVIDIA CUDA and NVIDIA cuDNN.]
[2020-06-15 21:49:05] Compatible with Realsr-ncnn-vulkan: No. [Advice: Re-install gpu driver or update it to the latest.]
[2020-06-15 21:49:07] Compatible with Python extension: Yes.
[2020-06-15 21:49:09] Compatible with FFmpeg: Yes.
[2020-06-15 21:49:09] Compatible with FFprobe: Yes.
[2020-06-15 21:49:09] Compatible with ImageMagick: Yes.
[2020-06-15 21:49:10] Compatible with Gifsicle: Yes.
[2020-06-15 21:49:10] Compatible with SoX: Yes.
[2020-06-15 21:49:10] Compatibility test is complete!
[2020-06-15 21:51:07] Detecting available GPU, please wait.
[2020-06-15 21:51:08] Detection is complete!
[2020-06-15 21:51:08] No available GPU ID detected!
[2020-06-15 21:51:17] Detecting available GPU, please wait.
[2020-06-15 21:51:18] Detection is complete!
[2020-06-15 21:51:18] No available GPU ID detected!
[2020-06-15 21:56:53] Compatibility test is ongoing, please wait.
[2020-06-15 21:56:55] Compatible with waifu2x-ncnn-vulkan(Latest Version): No. [Advice: Re-install gpu driver or update it to the latest.]
[2020-06-15 21:56:56] Compatible with waifu2x-ncnn-vulkan(Old Version): No. [Advice: Re-install gpu driver or update it to the latest.]
[2020-06-15 21:56:57] Compatible with waifu2x-ncnn-vulkan(20200414(fp16p)): No. [Advice: Re-install gpu driver or update it to the latest.]
[2020-06-15 21:56:57] Compatible with waifu2x-converter: Yes.
[2020-06-15 21:56:57] Compatible with Anime4k(CPU Mode): Yes.
[2020-06-15 21:56:58] Compatible with Anime4k(GPU Mode): Yes.
[2020-06-15 21:56:59] Compatible with srmd-ncnn-vulkan: No. [Advice: Re-install gpu driver or update it to the latest.]
[2020-06-15 21:56:59] Compatible with waifu2x-caffe(CPU): Yes.
[2020-06-15 21:57:00] Compatible with waifu2x-caffe(GPU): Yes.
[2020-06-15 21:57:02] Compatible with waifu2x-caffe(cuDNN): No. [Advice: Install NVIDIA CUDA and NVIDIA cuDNN.]
[2020-06-15 21:57:03] Compatible with Realsr-ncnn-vulkan: No. [Advice: Re-install gpu driver or update it to the latest.]
[2020-06-15 21:57:06] Compatible with Python extension: Yes.
[2020-06-15 21:57:07] Compatible with FFmpeg: Yes.
[2020-06-15 21:57:07] Compatible with FFprobe: Yes.
[2020-06-15 21:57:07] Compatible with ImageMagick: Yes.
[2020-06-15 21:57:07] Compatible with Gifsicle: Yes.
[2020-06-15 21:57:08] Compatible with SoX: Yes.
[2020-06-15 21:57:08] Compatibility test is complete!

That GUI is developed by me, not @nihui. 😅 It's not an offical gui for waifu2x-ncnn-vulkan.
So pls close this issue.
And if you wanna get vulkan working on your PC, try this:https://github.com/AaronFeng753/Waifu2x-Extension-GUI/wiki/Fix-engine-compatibility-issues#1-waifu2x-ncnn-vulkanand-srmd-ncnn-vulkan

That GUI is developed by me, not @nihui.  It's not an offical gui for waifu2x-ncnn-vulkan.
So pls close this issue.
And if you wanna get vulkan working on your PC, try this:https://github.com/AaronFeng753/Waifu2x-Extension-GUI/wiki/Fix-engine-compatibility-issues#1-waifu2x-ncnn-vulkanand-srmd-ncnn-vulkan

Not sure how I ended up here! LOL will close.


Documentation revamp

See plans: https://github.com/GrosSacASac/DOM99/blob/master/CONTRIBUTING.md
"Create a better documentation experience"
Also translations

use present tense in changelog

https://www.divio.com/blog/documentation/


sc.tl.dpt with error: detected group with only [] cells

Hello,
it's me again, really thanks for your kindly reply before.
when I analyze my own data using sc.tl.dpt with default n_branches, it worked well, but when I set  n_branches  more than 0, it occurred an error:
--> To enable computation of pseudotime, pass the index or expression vector
    of a root cell. Either add
        adata.add['iroot'] = root_cell_index
    or (robust to subsampling)
        adata.var['xroot'] = adata.X[root_cell_index, :]
    where "root_cell_index" is the integer index of the root cell, or
        adata.var['xroot'] = adata[root_cell_name, :].X
    where "root_cell_name" is the name (a string) of the root cell.
perform Diffusion Pseudotime analysis
    using "X_pca" for building graph
    using stored data graph with n_neighbors = 30 and spectrum
    [ 1.            0.9944264293  0.9934666753  0.9925051928  0.9899699688
      0.9893597364  0.9855745435  0.9840251803  0.981688261   0.9806631804]
    detect 1 branching
    do not consider groups with less than 2742 points for splitting
    branching 1: split group 0
WARNING: detected group with only [] cells

ValueError                                Traceback (most recent call last)
<ipython-input-3-b1749d943ac4> in <module>()
----> 1 get_ipython().run_cell_magic('time', '', 'sc.tl.dpt(adata_corrected,n_jobs=48,n_pcs=30,allow_kendall_tau_shift=False,n_branchings=1)\nsc.logging.print_memory_usage()')

/public/bioapps/ana/anaconda3/envs/python35/lib/python3.5/site-packages/IPython/core/interactiveshell.py in run_cell_magic(self, magic_name, line, cell)
   2113             magic_arg_s = self.var_expand(line, stack_depth)
   2114             with self.builtin_trap:
-> 2115                 result = fn(magic_arg_s, cell)
   2116             return result
   2117

<decorator-gen-59> in time(self, line, cell, local_ns)

/public/bioapps/ana/anaconda3/envs/python35/lib/python3.5/site-packages/IPython/core/magic.py in <lambda>(f, *a, **k)
    186     # but it's overkill for just that one bit of state.
    187     def magic_deco(arg):
--> 188         call = lambda f, *a, **k: f(*a, **k)
    189
    190         if callable(arg):

/public/bioapps/ana/anaconda3/envs/python35/lib/python3.5/site-packages/IPython/core/magics/execution.py in time(self, line, cell, local_ns)
   1178         else:
   1179             st = clock2()
-> 1180             exec(code, glob, local_ns)
   1181             end = clock2()
   1182             out = None

<timed exec> in <module>()

/public/workspace/jiping/scanpy-master/scanpy/tools/dpt.py in dpt(adata, n_branchings, n_neighbors, knn, n_pcs, n_dcs, min_group_size, n_jobs, recompute_graph, recompute_pca, allow_kendall_tau_shift, flavor, copy)
    127         adata.smp['dpt_pseudotime'] = dpt.pseudotime
    128     # detect branchings and partition the data into segments
--> 129     dpt.branchings_segments()
    130     # vector of length n_groups
    131     adata.add['dpt_groups_order'] = [str(n) for n in dpt.segs_names_unique]

/public/workspace/jiping/scanpy-master/scanpy/tools/dpt.py in branchings_segments(self)
    188             for each segment.
    189         """
--> 190         self.detect_branchings()
    191         self.postprocess_segments()
    192         self.set_segs_names()

/public/workspace/jiping/scanpy-master/scanpy/tools/dpt.py in detect_branchings(self)
    258                                   segs_connects,
    259                                   segs_undecided,
--> 260                                   segs_adjacency, iseg, tips3)
    261         # store as class members
    262         self.segs = segs

/public/workspace/jiping/scanpy-master/scanpy/tools/dpt.py in detect_branching(self, segs, segs_tips, segs_connects, segs_undecided, segs_adjacency, iseg, tips3)
    464         # branching on the segment, return the list ssegs of segments that
    465         # are defined by splitting this segment
--> 466         result = self._detect_branching(Dseg, tips3, seg)
    467         ssegs, ssegs_tips, ssegs_adjacency, ssegs_connects, trunk = result
    468         # map back to global indices

/public/workspace/jiping/scanpy-master/scanpy/tools/dpt.py in _detect_branching(self, Dseg, tips, seg_reference)
    632             if len(np.flatnonzero(newseg)) <= 1:
    633                 logg.warn('detected group with only {} cells'.format(np.flatnonzero(newseg)))
--> 634             secondtip = newseg[np.argmax(Dseg[tips[inewseg]][newseg])]
    635             ssegs_tips.append([tips[inewseg], secondtip])
    636         undecided_cells = np.arange(Dseg.shape[0], dtype=int)[nonunique]

/public/bioapps/ana/anaconda3/envs/python35/lib/python3.5/site-packages/numpy/core/fromnumeric.py in argmax(a, axis, out)
    971     except AttributeError:
    972         return _wrapit(a, 'argmax', axis, out)
--> 973     return argmax(axis, out)
    974
    975

ValueError: attempt to get argmax of an empty sequence```

    Does it mean that this data didn't contain any branches?
    Howerer, I do see some small tips when I plot using `diffmap` result or `sc.tl.dpt` with default branch. Could you help me to figure it out?

    Thanks,
    jiping

Hi Jiping!
I know that sometimes DPT detects groups with no cells in it; you can try setting the obscure option allow_kendall_tau_shift to False; sometimes this helps. But the problem goes deeper [see at the very end  here and there how branching groups are sometimes not meaningfully chosen). We're almost done with a method that combines the merits of DPT with conventional clustering that resolves this problem.
No, it doesn't mean that there is no branching signature in your data; but it is certainly not a strong one; in many "easy" cases, DPT works perfectly. You could also try to make the branching more proncounced by changing the preprocessing.
Hope that helps,
Alex
Btw: We started to set up a documentation at https://scanpy.readthedocs.io.

Hi Alex!
Before, I filtered gene with min_mean and min_disp, and left about 1300 genes for downstream analysis. Maybe the dataset is highly similar, so I reduce the gene number and choose the top 200 highly variable genes and it run without error.
Thanks a lot,
Jiping

Great to hear! :smile:


Update Gemfile.lock for security updates.

What the title says!

@dperez37 So what's this doing differently than https://github.com/livefront/gson-kotlin-adapter/pull/48 ?

Thanks @byencho


Naming Convention of Doc Id

Hi, I am confused about doc id naming convention.
Previously,  I learned the id should be unique and meaningless for human beings. Since if it means something to us, It might change.
However, when I checked the example here, SF is used as id of the doc.
import { doc, getDocFromCache } from "firebase/firestore";

const docRef = doc(db, "cities", "SF");

// Get a document, forcing the SDK to fetch from the offline cache.
try {
  const doc = await getDocFromCache(docRef);

  // Document was found in the cache. If no cached document exists,
  // an error will be returned to the 'catch' block below.
  console.log("Cached document data:", doc.data());
} catch (e) {
  console.log("Error getting cached docume

Some other demos use same naming convention.  I found it is much easier to fetch a doc when using meaningful id.
const docRef = doc(db, "cities", "SF");

However, if I use meaningless id, I have to select all doc and filter which initial field is SF, like
const cityQuery = query(citiesRef, where("initial", "==", "SF"));

To quick summarize

Meaningless id (auto generated by firebase)

pros: never change, unique
cons: hard to fetch

Meaningful id.

pros: easy to fetch
cons: might not be unique and might change

So which one is better?

@EhanDuan great question!
I think doc ids really depends on your use case.
meaningless id
In cases where you're dealing with data that is being inserted by users, you might want to go with the meaningless id, since you'll want to make sure that they're all unique. So for example, if you have a list of products where users are adding products everyday, the meaningless is better to avoid any clashes.
meaningful id
If you're dealing with a collection that rarely changes and there's less chance of users overwriting each other's data, then you can use meaningful ids.
In general, my recommendation would be: prefer meaningless ids when writing client code and only use meaningful ones in cases where you're inserting the data manually (throught the Firebase Console, or a script, etc) in a collection where you know they won't class.

@thatfiredev thanks for your detailed explanations. It helps a lot.
I am just thinking about an idea when subcollections are involved.
For collection, I should only use meaningful id.
The idea is from the following:

It does not make sense to use a meaningless id for collection, since no need to query all collections and then filter by name. But for doc, we can use query and filter when meaningless id;

The doc id could be generated automatically for meaningless. However, collection id we need to type manually;

Am I correct?

@EhanDuan That's correct. Collection ids needs to be meaningful at all times, as there's no way to query them.

@thatfiredev Great! Thanks!

Hi, I have a follow-up question about data based on our previous discussion.
Based on our situation, we use meaningless id for docs.

Scenario
My question is from the following scenario:

fetching data from database, displaying to users on webpage
users interact (CRUD)
sending interaction data back to database

My thoughts
For users, actual data fields like name is meaningful to them. So I need to display name  and other fields.
For server or me developer, the id of that piece of data is important since I can directly access to that doc and then update. Like firestore, we use id to access. Even using query where name == [name], the purpose is still to get id.
So in order to meet the above 2 needs, I decided to get both ids and datas together, like below where I fetched data at request time
export async function getServerSideProps() {
  // Fetch data
  const querySnapshot = await getDocs(collection(db, "skills"));
  const skills: any[] = [];
  const sIds: any[] = [];

  querySnapshot.forEach((doc) => {
    skills.push(doc.data());
    sIds.push(doc.id);
  });

  // Pass data to the page via props
  return { props: { skills, sIds } };
}

Question:
Is it a good practice to pass doc ids to the frontend? Will it cause ids exposed to users that might cause safety concern? If it is not a good one, how do I handle this scenario?
In case you need, here is the component code.
const FocusList = ({ skills, sIds }) => {
 // some process....

  // create a roaster (mapping relationship b/w sId and skill name)
  // Nextjs props need to be serialized like json. So I cannot generate this hashmap directly in getServerSideProps and pass.
  const roaster = new Map<string, string>();
  for (let i = 0; i < sIds.length; i++) {
    roaster.set(sIds[i], skills[i].name);
  }

  return (
        <CheckboxGroup >
          <Stack spacing={[1, 5]} direction={["column", "row"]}>
            {/* I want to display skills' names and hidden skills' ids which are used for db */}
            {sIds.length > 0 &&
              sIds.map((sId, index) => (
                <Checkbox
                  key={index}
                  value={sId}
                  onChange={handleCheck}
                  isChecked={selectedMap.get(sId)}
                >
                  {roaster.get(sId)}
                </Checkbox>
              ))}
          </Stack>
        </CheckboxGroup>
  );

@EhanDuan sorry I missed your question earlier.

Is it a good practice to pass doc ids to the frontend? Will it cause ids exposed to users that might cause safety concern?

Passing doc ids to the frontend should not be a concern.
However, you should make sure you've written tight security rules for your database.
We have some content that can help you get started with security rules in Cloud Firestore:

Structure Security Rules (Documentation)
Security Rules - Get to know Cloud Firestore #6 (Youtube video)
Security Rules deep dive - Better safe than sorry (Youtube video)

Great! Thanks, I did use passing id to the front end.  I will check on the security rules you mentioned also.
Thanks again.


Heroku Support

Do you have any plan for Heroku deployment?

@dubeychandan996 hi!
The next version will support any cloud deployment and will not require any console to scan QR code in logs!
The project is looking for contributors or sponsors, since I no longer use the project and there is no time to add new features :(

Now it supports all type of deployments


3.1.1 addresses issues that arose from the recent 3.1.1 release

Minor typo in the release announcement.
3.1.1 addresses issues that arose from the recent 3.1.~1~0 release

Thanks.  Fixed!


Git workflow slide: Are feature branches long-lived?

When looking at slide 9 of the presentation webMethodsIO_Integration_CICD.pptx it is unclear to me how long a separate feature branch is supposed to exist.
If we are talking about more than one or two day, that will likely cause problems. It also means that by definition we are not talking about CI anymore.
What is your view on that? Wouldn't it make sense to at least mention trunk-based development as the approach that is endorsed (put mildly) by the inventors of CD?
Thanks,
Christoph

Hey @christophjahn
Strangely Github didnt notify me on your issue (or may be I missed the mail, which is more probable and possible).
Very valid point. So the Git Workflow I have chosen as a sample is from one of the customer, where they use feature branches which is kept until Prod merge. They have 5 days releases. They follow more of a Gitflow than Trunk based. Again am not promoting any model here, rather took one example on which the solution was primary developed.

No problem about the delay, the same has happened to me multiple times ;-).
As to the slides, may I suggest to add what you wrote here. Otherwise folks might actually get the impression that SAG promotes this approach.

Updated the deck, will close the issue

Thanks!


No focus supported

bootstrap-switch can't check/uncheck it by keyboard. press [Tab] key will skip bootstrap-switch.
How make it focusable?

I wanted keyboard navigation and accessibility for bootstrap-switch but couldn't find any code. So I added the following lines to my .js file and now I can tab to this control and also tap [SPACE] key to toggle the state.

           $('.bootstrap-switch.bootstrap-switch-wrapper')
            .attr('tabindex',0)
            .on('focus', function () {
                $(this).addClass('bootstrap-switch-focussed');
            })
            .on('blur', function () {
                $(this).removeClass('bootstrap-switch-focussed');
            })
            .on('keyup', function (e) {
                if(e.which===32){
                    $('#trans_type').bootstrapSwitch('toggleState');
                }
            });

#690
I wanted keyboard navigation and accessibility for bootstrap-switch but couldn't find any code. So I added the following lines to my .js file and now I can tab to this control and also tap [SPACE] key to toggle the state.

           $('.bootstrap-switch.bootstrap-switch-wrapper')
            .attr('tabindex',0)
            .on('focus', function () {
                $(this).addClass('bootstrap-switch-focussed');
            })
            .on('blur', function () {
                $(this).removeClass('bootstrap-switch-focussed');
            })
            .on('keyup', function (e) {
                if(e.which===32){
                    $(this).find('input').bootstrapSwitch('toggleState');
                }
            });

This makes the focus to work when using keyboard navigation. However, focus under mouse operation still still buggy:
When you click and toggle to off state, then click anywhere in the web page outside the switch, focus still remains on the switch.


Changed OHIF Metadata

I added some of the changes for the ohif json format
the relevant files are:
OHIFViewerModel.cs
OhifService.cs
It is not complete, but maybe it helps a bit, otherwise just discard it.

Closing this PR as the changes in here has been adapted to he repo among other things. Thank you @nutzlastfan for proposing the changes!


use h1:base64(body) as the new format

The new beta API endpoint uses the go.sum inspired h1:base64(body) format for the digests instead of hex encoded. Update the tool to use that.
curl https://beta-asset.transparencylog.net/lookup/github.com/mozilla/sops/releases/download/v3.6.0/sops-v3.6.0.linux
1
h1:KAyjnSHmdA36UzKxLvQWmKzwFOXyd8XClsYeg7TMrSE=

tlog database tree
3
DskKVTdOH1UvyZOcMehIEuQKkg7/B1l9i56NH2NPzTM=

— log OAmnXqXM3k+oxEaX5l9Q2DsktEkJz8MQ80zuLXrOyieeRN4T66/u7Z/8AvliaX5Rl5lOyRxmuKSdGBKM0a+0X+yw0A0=

done via https://github.com/transparencylog/btget/commit/918a8ce0cb4b957722ed105a9f4fb8471a2035bb