[DOC] Adding more guidance about Kubernetes and Helm

Could you consider adding more guidance about Kubernetes and Helm, e.g., in the installation doc, in the MIS sections in tutorial https://github.com/Project-MONAI/monai-deploy-app-sdk/blob/main/notebooks/tutorials/05_full_tutorial.ipynb
I guess most AI researchers in academia don't have any experience with Kubernetes. I know there're so many options for Kubernetes, but maybe we can start with a minimal learning environment setting for Kubernetes, like on a local machine.

@hw-ju I moved your request to App Server repo.
Remember that you can run a MAP locally on your machine using the App Runner included within App SDK. You don't need MIS for that.
But your request for MIS is still valid. @Danulf


Can't add Midea dishwasher MFD60S510Wi

Versions
Midea AC LAN 0.3.23
HA with latest updates
Description
Sorry for my bad English. I have Midea dishwasher MFD60S510Wi (static IP), when adding a device to HA it is automatically found, but when confirming I see a message in the form "The configuration is incorrect". If changing model to correct - same message.
Log in configuration.yaml enabled, but there's nothing in it.
If use Protocol V1 or V2 device is adding to HA, but all sensors are unavailable. Log attached below.
P.S. Integration update to alfa version available in HA, but it won't download.

Thank you for youre issue report, as most of us just take it and we may need time to check and fix it later.

Thanks for your work. If any information is needed on this issue, I will try to provide as much information as possible.

HA core version
2024.5.5
Integration version
v0.4.1
Device type and model
Dishwasher Midea MFD60S510Wi (latest firmware)
Used App
Midea SmartHome and Home Assistant
The description of problem
Upgrade integration to 0.4.1 and clear config in /.storage/midea_ac_lan
Try to connect:

Same if use "auto"

In Midea SmartHome app I see a message "Account logged in somewhere else"
In /.storage folder midea_ac_lan is not created
In home-assistant.log is nothing about midea_ac_lan. Debug is enabled in configuration.yaml.
If I try to connect manually:

Maybe I do something wrong?

no debug log should be an issue....
you can remove this integration and reboot HA, remove all the /configs/.storage/mides_ac_lan/
then reinstall it, after install, please confirm you have enabled debug log for midea_ac_lan from /configs/configuration.yaml file.
enable command can be found in readm.md file
once debug log can works, you can attack the debug log file, then we can check the detail error

Reinstall integration, reboot HA
In configuration.yaml add
logger:
default: warning
  logs:
    custom_components.midea_ac_lan: debug
    midea_local: info

Log, that repeats every time I try to add a device
homeassistant.log

Remove integration. Install 0.4.2
Debug log:
homeassistant.log

Thx, I debugged the issue and login fails because of
{'msg': 'user route does not exist', 'code': 10004}
I think there is a change in MSSmartCloud change

Thanks for your feedback!
Is the problem on my side or do I need to wait for some changes in the code?

Hello,
Same problem here with a Midea SU 5.35X14CS.
I hope you can find a solution.
Best regards,
T.

I think I got it, probably we release a new version in a few days

Please check with v0.4.3 and if still experience the issue, add the following to configuration.yaml , restart HA, and post the log:
logger:
  default: warning
  logs:
    custom_components.midea_ac_lan: debug
    midealocal: debug

Note: it is better to drag the log into the comment (which will add it as an attachment) and not copy paste as it is hard to read logs in GitHub.

Update to 0.4.3
homeassistant.log

2024-07-03 08:56:14.649 DEBUG (MainThread) [midealocal.device] [153931628223465] Authentication failed
Please double check with SmartHome mobile app that you can login.

In SmartHome in that time (translated):
09:11
Account logged in somewhere else
Your account has been registered on another device in Other. If you do
not do this yourself, please sign out of this device by visiting Manage
Sign-In Devices.

Please check with v0.4.3 and if still experience the issue, add the following to configuration.yaml , restart HA, and post the log:
logger:
  default: warning
  logs:
    custom_components.midea_ac_lan: debug
    midealocal: debug

Hi there,
Thank you for your work, unfortunately no noticeable change. Log attached, username anonymized, login with the real data via the SmartHome app works.
HTH,
T.

Note: it is better to drag the log into the comment (which will add it as an attachment) and not copy paste as it is hard to read logs in GitHub.
recent:///b8bac2509f9fc5261e893a6566850610

Hi there,
thank you for your work, unfortunately no noticeable change. Log attached, username anonymized, login with the real data via the SmartHome app works.
HTH,
T.
homeass.log

Unfortunately I don't think we can do something if authorization fails.

``@wuwentao and @chemelli74 I think this is a case that the 2nd key retrieval type might work. If this is true, https://github.com/rokam/midea-local/pull/200 should solve it.

Can you please try v.0.5.0?

"Can't get available token for this device"
homeass.log

Install 0.5.0
"Can't get available token for this device"
homeassistant.log

Same behaviour: Can't get available token for this device
homeass.log

@nikhomekgn , @ttrueten which mobile app are you using to control your devices ?
We need exact name (and maybe a screenshot of the icon just to be sure ).

Screen from "About"

all the token can't work for these 0xE1 device.
the same error as 0xDB device

Is this solvable?
Maybe you need some additional information from me?

@nikhomekgn , @ttrueten which mobile app are you using to control your devices ? We need exact name (and maybe a screenshot of the icon just to be sure ).
file:///home/tht/.config/Signal/attachments.noindex/1b/1bda73636afbe1e8dade7d4eb5c3a951c18a3641a4d599e2481cc95c31c64ea5

I understand that update 0.5.3 does not solve our problem, but I'm attach the log just in case
homeassistant.log

0.5.4 should fix your issue

@rokam updating to 0.5.4 did not help
homeassistant.log

由于github当前存在大量同样duplicate的issue，因此先关闭当前issue，统一使用 https://github.com/wuwentao/midea_ac_lan/issues/275 来跟踪和处理，避免大量重复问题的跟踪和处理。
当然，当前issue仍然可以继续更新和发送其他消息


Copy networking samples

This PR copies samples for various networking products to the product area directories. See csv.

Errors unrelated to this pr


Restructure backend data retrieval

Make the structure consistent with backend api
Move insert data from data_deposit.utils to external_data_retrieval

Fix logging for shared utils


Documentation in stats.multivariate.cdf

https://github.com/scipy/scipy/blob/b5d8bab88af61d61de09641243848df63380a67f/scipy/stats/_multivariate.py#L521
I believe the log is off, there.

The link above appears to be an old commit. It has been corrected in main.


automatically switch between local/remote data

Updates the import functions so that the code works out of the box for someone that hasn't got the data downloaded already.

Amazing, thank you. I'll sort out the merge conflicts and merge in when the new revision is ready to go.


tm2katepart fails at stylus syntax

this file doesn’t get parsed.
/var/lib/gems/1.9.1/gems/coloration-0.3.2/lib/coloration/readers/textmate_theme_reader.rb:19:in `parse_input': undefined method `delete_at' for nil:NilClass (NoMethodError)
        from /var/lib/gems/1.9.1/gems/coloration-0.3.2/lib/coloration/abstract_converter.rb:28:in `convert!'
        from /var/lib/gems/1.9.1/gems/coloration-0.3.2/lib/coloration/abstract_converter.rb:13:in `process_cmd_line'
        from /var/lib/gems/1.9.1/gems/coloration-0.3.2/bin/tm2katepart:5:in `<top (required)>'
        from /usr/local/bin/tm2katepart:19:in `load'
        from /usr/local/bin/tm2katepart:19:in `<main>'

I believe you should  be parsing this one instead: https://github.com/LearnBoost/stylus/blob/master/editors/Stylus.tmbundle/Syntaxes/Stylus.tmLanguage

…? this is exactly the same link that i posted. did you perchance paste the wrong one?

Hmm, ok I got different link from you in github's email notification about this issue so you probably edited the issue afterwards. I'll check it then.

oh, right. i edited it immediately afterwards, because i pasted the wrong link initially. sorry ;)


Look rotation viewing vector is zero

Explorer Alpha build versions:

Fixed by https://github.com/decentraland/unity-explorer/pull/2540


Native build / OS X 10.11.6

Configuration:
Macbook Pro Mid-2015 / OS X 10.11.6
openssl 1.0.2 installed separately to /usr/local/opt/openssl
configure [maven-hawtjni-plugin] was blowing up on the separate <arg>-L/usr/local/opt/openssl/lib</arg>. I found it builds correctly by combining all the linker arguments into the same <arg/>:
<arg>LDFLAGS=${jni-with-crypto} -L/usr/local/opt/openssl/lib -lcrypto</arg>
Do you know if anyone else has run into this issue?

Not that I know of, personally I'm using OS X 10.12 for development.


Deprecate CH2O

[ ] Remove use of ch2o generated models for testing
[ ] Let chainer_compiler.py use elichika instead of ch2o
[ ] Check if elichika-generated EspNet is not slower than ch2o-generated one

It seems s/ch2o/elichika/ for model_test.cc causes a regression for memory usage.


Output help by default - Fix #25

Are you getting 2 different color outputs when you use the help flag vs no flag?

Are you getting 2 different color outputs when you use the help flag vs no flag?

Yeah I saw that. I ran the default help option through a file called "make_red" to make it stand out like, "hey you messed up" but I actually don't know if I like how it looks haha. I'll probably just call help without the color (ln 71 is the line in question)

We can also just change 67 and remove make_red from .outputHelp()  right?
Then we won't need make_red().

We can also just change 67 and remove make_red from .outputHelp() right?
Then we won't need make_red().

Yup, i meant to say that we can maket he change on line 67, not 71. If we don't want red help we make that change and golden.

I don't think we need red help. Most progams i've seen if you enter the wrong options or call it w/o any required options, help is displayed white by default anyways


Cluster and Project Members shows "loading..." next to principle name

Setup

Rancher version:
Browser type & version:

Describe the bug
Cluster and Project Members shows "loading..." next to principle name rancher/dashboard#8615
To Reproduce
https://user-images.githubusercontent.com/1387263/229741149-290f1f67-b979-41c2-b713-9020fa95aa65.mov
Result
Expected Result
Loading... shouldn't show up
Screenshots

Additional context
This could be down v-clean-html

Engineering to write an automated test in #8804 to help with QA.


Counterintuitive Termination

I've noticed that some counterintuitive termination in my programs.  I'm often in a Shell context (because I'm using managed resources, or looping or whatever), and I want to do side-effecty things which produce no standard-output.
Consider the following:
fail :: Shell ()
fail = do
  inproc "curl" ["-o", "/tmp/foobar", "http://marxists.org"] empty
  liftIO $ print "Hello world"

I was surprised to see that this never outputted the text "Hello world".  Thinking back, it makes sense - the inproc call doesn't generate any standard output.  We could rewrite it as follows:
fail :: Shell ()
fail = do
  ignored <- inproc "curl" ["-o", "/tmp/foobar", "http://marxists.org"] empty
  liftIO $ print "Hello world"

Now it's clear - we're basically looping over an empty list and of course we'll never execute the print statement.
This is counterintuitive, because you can do a lot of side-effecty (no-return-value) things inside of this context!  For example, if i replaced inproc ... with touch /some/path, then the code would run to completion.  Thinking about it this way, the fix becomes obvious - we want a Shell () instead of a Shell Line, so we have to use liftIO $ sh $ inproc...
The reason this felt like a gotcha is that there's a pretty subtle difference between Shell () and Shell Line if you're just doing a drop-in replacement.  You can switch (e.g. between touch and inproc "curl"), and the code will still compile (but it will stop doing what you want).
Since the Turtle tutorial is really beginner-friendly, I wonder if it's worth maybe warning people that this can happen.  Maybe it'd be cool to supply a helper function (runForSideEffects = liftIO . sh), which could give a hint as to how to deal with this situation.

Note that liftIO . sh is the same as sh so runForSideEffects = sh
I can add a note to the tutorial, but I'll probably just recommend using sh directly

I also want to note that for this specific example you probably want to use procs instead of sh and inproc

@Gabriel439 that's great!  thank you!

@skatenerd: You're welcome! 🙂


Fix bundle name

If we do this, it seems like a good opportunity to go with azure-flexible-server-postgresql
this isn't a full rename, it's just matching the name of the github repo. this would match the convention of other clouds. might it be more trouble than it's worth? this rename just fixes what's in the canvas so bridgecrew can work.


Delayed Constraint

Hi,
I'm currently trying to add constraint regarding an established route.
So setting the initial Assignment works well, but because of the direct dependency of the constraint to the tours, it is giving a "Failing constraint" while the initialization phase.
Given this context, I tried to delay the application of the constraint using the definition of the Distribute Constraint :

std::vector min_cards(size_missions, 0);
std::vector max_cards(size_missions, 6);
BoundedFastDistribute* delayed_distribute = new BoundedFastDistribute(solver, vehicle_vars, min_cards, max_cards);
Demon* delayed_demon = solver->RegisterDemon(MakeDelayedConstraintDemon0(solver, delayed_distribute, &BoundedFastDistribute::Post,"DelayedDistribute"));
for(IntVar* vehicle_var: vehicle_vars) vehicle_var->WhenBound(delayed_demon);
solver->AddConstraint(delayed_distribute);

Did you have some hint on the subject ?

This make no sense.
Demons are owned by the constraints. You cannot hijack the protocol to add new events.
To delay a constraint, when it is posted, the constraint decides its priority.
The only thing you can do is copy the constraint code and change the demon macros in the Post.


Speech to text | Issue #21

Thank you for your contribution! Will review once we cut the auth release.

let me know @mmnasser2000

Looks like there is a merge issue (this should not change 296 files)

Thank you for your contribution!


replace panics with explicit ereport and error code

panic! is already being turned into error level reports, but with a generic error code. This makes it explicit.

I appreciate this PR. Thanks!

so to leave an approval with a clear conscience I'll just mention few refs that back up this implementation (also having in mind concern about "ereport and panic" in #6):

ereport! for ERROR level will eventually panic anyway so these changes don't alter the existing runtime behavior

code ref1 https://docs.rs/pgrx-pg-sys/0.11.3/src/pgrx_pg_sys/submodules/elog.rs.html#342
code ref2 https://docs.rs/pgrx-pg-sys/0.11.3/src/pgrx_pg_sys/submodules/panic.rs.html#293-299
code ref3 https://docs.rs/pgrx-pg-sys/0.11.3/src/pgrx_pg_sys/submodules/panic.rs.html#157-158

calling rust's panic (directly or indirectly) seems to be a proper way for pgrx, as per https://github.com/eeeebbbbrrrr/pgrx/blob/master/DESIGN-DECISIONS.md#protecting-the-rust-stack-read-lying-to-postgres

esp. this fragment:

After Rust's stack has unwound, the panic!() is handed off to ereport(), passing final error handling control back to Postgres.


Tests 0-5 of FlexLinkCoder.py output error message

Changing the test number from 6 to any value 0 to 5 gives the error shown below. I think this is just falling through to the graphing code that's part of test 6. Probably just need to add an indentation level to all the matplotlib code at the end of the file.
python % python3 FlexLinkCoder.py
Test 5 has passed.
Traceback (most recent call last):
  File "/Users/kb5mu/Documents/git/neptune/FlexLink/models/transmitter/python/FlexLinkCoder.py", line 837, in <module>
    plt.semilogy(SnrdB_List, BER_List[0], 'r')
                 ^^^^^^^^^^
NameError: name 'SnrdB_List' is not defined

No longer an active target for development, so keeping an open issue is moot.


[version changed] dataset doc example is invalid

The metadrive.examples.drive_in_argoverse file in doc dataset has disappeared.
Consider supplement it or switch to waymo/nusense/nuplan?

Yes, we deprecate the Argoverse Env now but provide support for nuScenes, nuPlan, and Level5 (coming) dataset now.
You can check this repo: https://github.com/metadriverse/scenarionet

We are going to complete the doc of new MetaDrive and Scenarionet soon. But if your wanna have a try in advance, feel free to ask any questions!


How to build network?

Multiple ways to built developer networks. I put some references in the "Resources" section.
We need to decide which to use by some time next month.

Hi, there!

Choose the approach of the second paper "Understanding a Developer Social Network and its Evolution" to build a network by mining github's bug reports for comments, but don't know how to get github's data yet

I think this issue has been solved. @19991010wan commit the code I sent to you (and your changes) once you finish compiling the networks.


carry on not working with v1.18 pre 3

tried all settings and removed all of carry capacity mods,  only using carry on mod,  items as chest and reed baskets cant pick up,  checked all the hot keys and switched hot keys to see if it makes a difference items will still not pick up,  also made sure that no items in either hand item when crouching will treat like im just opening chest.

Also updated to 1.18 pre 5. And issue is still happening will not let me pick anything up chests of any kind or any block items


Clarify evaluation semantics of repeated constant arrays

QEP 2 adds the [x, size = n] expression. However, it doesn't specify whether the expression x should be evaluated once and its result copied to every element, or if x should be evaluated n times.
The spec should be clearer about the evaluation semantics of repeated constant arrays. I would prefer to use the semantics that x is evaluated once.

I thought we had captured that in the proposal - I remember discussing it. The expression should be evaluated exactly once, independent on the size of the array (specifically also for size 0).


WireMock for Jetty should use LocalConnector and LocalEndPoint

Currently, WireMock is using the HttpChannel and other Jetty internals with little to no regard to the rapidly changing internals of Jetty.
A fake network connector is already provided by Jetty via the LocalConnector and LocalEndPoint objects, please use them instead.
If there is some feature missing from LocalConnector or LocalEndPoint that WireMock needs, then please let us know at https://github.com/eclipse/jetty.project

If we switch to a fake network connector, then presumably that means the app won't accept requests over the network?

Would break WireMock's core function, so won't fix


Add linting and activate Travis.

@stephenplusplus When you have a moment can you activate travis on this repo? https://travis-ci.org/stephenplusplus/google-proto-files
Also, once Travis builds and GitHub picks up the status check, can you add Travis as a required check for PRs? And maybe also disable force push to master if you haven't already.

Activated. It should hook into PRs after we merge this one and it has its first build.


Pandas TA strategy method goes into infinite loop: Windows Freeze Support Error

@twopirllc I was trying to run the below code on a dataframe
df.ta.strategy("Momentum")
print(df)

It goes into infinite loop and consumes all CPU on my windows 10 laptop.

Could you please help?
Originally posted by @rahulmr in https://github.com/twopirllc/pandas-ta/issues/138#issuecomment-751864255

Hello @rahulmr,
You are leaving a lot out of context for me to help you at this moment. If you could provide me more code to work with and some sample data that you are using, then we can move further.
Thanks,
KJ

code is very simple as below, I am not sure whether I am doing it in right way. But why it goes to infinite loop is what I am not able to understand. If there is some problem it must throw an error.
import yfinance as yf
import pandas_ta as ta

sbin = yf.Ticker("SBIN.NS")
df = sbin.history(period="3d", interval="15m")
df.ta.strategy("Momentum")

The output is as below, somehow tried to copy it.
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 143, in get_preparation_data
    return Popen(process_obj)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\popen_spawn_win32.py", line 46, in __init__
    _check_not_importing_main()
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 136, in _check_not_importing_main
    prep_data = spawn.get_preparation_data(process_obj._name)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 143, in get_preparation_data
    is not going to be frozen to produce an executable.''')
RuntimeError:
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.
    _check_not_importing_main()
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 136, in _check_not_importing_main
    is not going to be frozen to produce an executable.''')
RuntimeError:
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.
Traceback (most recent call last):
  File "<string>", line 1, in <module>
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 105, in spawn_main
    exitcode = _main(fd)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 114, in _main
    prepare(preparation_data)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 225, in prepare
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 105, in spawn_main
    _fixup_main_from_path(data['init_main_from_path'])
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 277, in _fixup_main_from_path
    exitcode = _main(fd)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 114, in _main
    run_name="__mp_main__")
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 263, in run_path
    prepare(preparation_data)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 225, in prepare
    pkg_name=pkg_name, script_name=fname)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 96, in _run_module_code
    _fixup_main_from_path(data['init_main_from_path'])
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 277, in _fixup_main_from_path
    mod_name, mod_spec, pkg_name, script_name)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 85, in _run_code
    run_name="__mp_main__")
    exec(code, run_globals)
  File "D:\trading\0sas_algo\crash.py", line 7, in <module>
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 263, in run_path
    df.ta.strategy("Momentum")
    pkg_name=pkg_name, script_name=fname)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 96, in _run_module_code
  File "D:\trading\0sas_algo\senv\lib\site-packages\pandas_ta\core.py", line 633, in strategy
    mod_name, mod_spec, pkg_name, script_name)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 85, in _run_code
    pool = Pool(self.cores)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\context.py", line 119, in Pool
    exec(code, run_globals)
  File "D:\trading\0sas_algo\crash.py", line 7, in <module>
    context=self.get_context())
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 176, in __init__
    df.ta.strategy("Momentum")
  File "D:\trading\0sas_algo\senv\lib\site-packages\pandas_ta\core.py", line 633, in strategy
    self._repopulate_pool()
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 241, in _repopulate_pool
    pool = Pool(self.cores)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\context.py", line 119, in Pool
    w.start()
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\process.py", line 112, in start
    context=self.get_context())
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 176, in __init__
    self._popen = self._Popen(self)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\context.py", line 322, in _Popen
    self._repopulate_pool()
    return Popen(process_obj)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\popen_spawn_win32.py", line 46, in __init__
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 241, in _repopulate_pool
    w.start()
    prep_data = spawn.get_preparation_data(process_obj._name)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\process.py", line 112, in start
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 143, in get_preparation_data
    self._popen = self._Popen(self)
    _check_not_importing_main()
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 136, in _check_not_importing_main
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\context.py", line 322, in _Popen
    is not going to be frozen to produce an executable.''')
RuntimeError:
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.
    return Popen(process_obj)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\popen_spawn_win32.py", line 46, in __init__
    prep_data = spawn.get_preparation_data(process_obj._name)
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 143, in get_preparation_data
    _check_not_importing_main()
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 136, in _check_not_importing_main
    is not going to be frozen to produce an executable.''')
RuntimeError:
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 105, in spawn_main
    exitcode = _main(fd)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 114, in _main
    prepare(preparation_data)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 225, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 277, in _fixup_main_from_path
    run_name="__mp_main__")
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 263, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "D:\trading\0sas_algo\crash.py", line 7, in <module>
    df.ta.strategy("Momentum")
  File "D:\trading\0sas_algo\senv\lib\site-packages\pandas_ta\core.py", line 633, in strategy
    pool = Pool(self.cores)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\context.py", line 119, in Pool
    context=self.get_context())
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 176, in __init__
    self._repopulate_pool()
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 241, in _repopulate_pool
    w.start()
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\process.py", line 112, in start
    self._popen = self._Popen(self)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\context.py", line 322, in _Popen
    return Popen(process_obj)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\popen_spawn_win32.py", line 46, in __init__
    prep_data = spawn.get_preparation_data(process_obj._name)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 143, in get_preparation_data
    _check_not_importing_main()
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 136, in _check_not_importing_main
    is not going to be frozen to produce an executable.''')
RuntimeError:
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 105, in spawn_main
    exitcode = _main(fd)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 114, in _main
    prepare(preparation_data)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 225, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 277, in _fixup_main_from_path
Traceback (most recent call last):
  File "<string>", line 1, in <module>
    run_name="__mp_main__")
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 263, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 105, in spawn_main
  File "D:\trading\0sas_algo\crash.py", line 7, in <module>
    exitcode = _main(fd)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 114, in _main
    df.ta.strategy("Momentum")
  File "D:\trading\0sas_algo\senv\lib\site-packages\pandas_ta\core.py", line 633, in strategy
    prepare(preparation_data)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 225, in prepare
    pool = Pool(self.cores)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\context.py", line 119, in Pool
    _fixup_main_from_path(data['init_main_from_path'])
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 277, in _fixup_main_from_path
    context=self.get_context())
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 176, in __init__
    run_name="__mp_main__")
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 263, in run_path
    self._repopulate_pool()
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 241, in _repopulate_pool
    pkg_name=pkg_name, script_name=fname)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 96, in _run_module_code
    w.start()
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\process.py", line 112, in start
    mod_name, mod_spec, pkg_name, script_name)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 85, in _run_code
    self._popen = self._Popen(self)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\context.py", line 322, in _Popen
    exec(code, run_globals)
  File "D:\trading\0sas_algo\crash.py", line 7, in <module>
    return Popen(process_obj)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\popen_spawn_win32.py", line 46, in __init__
    df.ta.strategy("Momentum")
  File "D:\trading\0sas_algo\senv\lib\site-packages\pandas_ta\core.py", line 633, in strategy
    prep_data = spawn.get_preparation_data(process_obj._name)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 143, in get_preparation_data
    pool = Pool(self.cores)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\context.py", line 119, in Pool
    _check_not_importing_main()
    context=self.get_context())
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 176, in __init__
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 136, in _check_not_importing_main
    self._repopulate_pool()
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 241, in _repopulate_pool
    is not going to be frozen to produce an executable.''')
RuntimeError:
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.
    w.start()
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\process.py", line 112, in start
    self._popen = self._Popen(self)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\context.py", line 322, in _Popen
    return Popen(process_obj)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\popen_spawn_win32.py", line 46, in __init__
    prep_data = spawn.get_preparation_data(process_obj._name)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 143, in get_preparation_data
    _check_not_importing_main()
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 136, in _check_not_importing_main
    is not going to be frozen to produce an executable.''')
RuntimeError:

Mine is windows 10 and I am using VSCodium IDE, Python 3.7.9 64 bit

Again tried with python 3.9.1 and still getting same issue. Control + C is also not working.
Anyways this is not high priority for me. I will concentrate more on the other stuff. Will continue there.
Let me know if you are able to reproduce this issue at your end. I can try to uploaded a video if I get time.

Thanks for bringing the Issue here @rahulmr. It makes is easier for other users to find this similar Issue.

Anyways this is not high priority for me. I will concentrate more on the other stuff. Will continue there. Let me know if you are able to reproduce this issue at your end. I can try to uploaded a video if I get time.

Also, what about the other code on the previous Issue? Or is that code not relevant?
Thanks,
KJ

Seems like issue with Windows 10, not sure though. I will try to execute the same code on other Windows VMs and confirm.

Also, what about the other code on the previous Issue? Or is that code not relevant?

No it is not relevant here. That issue is actually not an issue but help I need on how to work with pandas_ta. We will discuss it there.

I haven't tested it on Windows 10 yet. But will soon.

Yes, same issue on another windows machines as well. May be you can try Vultr Cloud for windows. It seems to be related with the multiprocessing module. Spwan.py

@rahulmr,
Interesting. I am not having that issue with my Windows 10 laptop either.
My Windows 10 results:

Are you strictly using just those 4 lines of code or are you all trying to set the number of cores prior to calling the df.ta.strategy method?
Thanks,
KJ

@rahulmr,
Interesting. I am not having that issue with my Windows 10 laptop either.
My Windows 10 results:

Are you strictly using just those 5 lines of code or are you all trying to set the number of cores prior to calling the df.ta.strategy method?
Thanks,
KJ

That's surprising for me. I will try your method from python prompt. Could you please try by running a script using python crash.py

This is great - some kind of tricky issue for me.
It is working from python prompt.
>>> sbin = yf.Ticker("SBIN.NS")
>>> df = sbin.history(period="3d", interval="15m")
>>> df.ta.strategy("Momentum")
>>> print(df)
                                 open        high         low       close   volume  Dividends  Stock Splits  ...  FISHERTs_9_1  INERTIA_20_14      K_9_3      D_9_3      J_9_3  KST_10_15_20_30_10_10_10_15       KSTs_9
datetime                                                                                ...
2020-12-24 09:15:00+05:30  265.100006  266.549988  264.700012  266.299988  1653388          0             0  ...           NaN            NaN        NaN        NaN        NaN                          NaN          NaN
2020-12-24 09:30:00+05:30  266.299988  266.649994  265.500000  266.299988  1346556          0             0  ...           NaN            NaN        NaN        NaN        NaN                          NaN          NaN
2020-12-24 09:45:00+05:30  266.299988  266.450012  265.500000  266.100006   914542          0             0  ...           NaN            NaN        NaN        NaN        NaN                          NaN          NaN
2020-12-24 10:00:00+05:30  266.100006  267.649994  266.100006  267.399994  1594715          0             0  ...           NaN            NaN        NaN        NaN        NaN                          NaN          NaN
2020-12-24 10:15:00+05:30  267.299988  267.799988  266.649994  266.799988  1050138          0             0  ...            And then I will add the updates.

Great it is working on my docker container
Details here:
root@node54310-pandas-r:~/sas# cat sbin.py
import yfinance as yf
import pandas_ta as ta

sbin = yf.Ticker("SBIN.NS")
df = sbin.history(period="3d", interval="15m")
df.ta.strategy("Momentum", verbose=True)
print(df)

root@node54310-pandas-r:~/sas# python sbin.py
[+] Strategy: Momentum
[i] Indicator arguments: {'append': True}
[i] Excluded[10]: above, above_value, below, below_value, cross, cross_value, long_run, short_run, trend_return, vp
[i] Multiprocessing: 3 of 3 cores.
[i] Total indicators: 34
[i] Columns added: 55
                                 open        high         low       close   volume  Dividends  Stock Splits  ...  SQZ_ON  SQZ_OFF  SQZ_NO  STOCHk_14_3_3  STOCHd_14_3_3  STOCHRSIk_14_14_3_3  STOCHRSId_14_14_3_3
datetime                                                                                ...
2020-12-24 09:15:00+05:30  265.100006  266.549988  264.700012  266.299988  1653388          0             0  ...       0        0       1            NaN            NaN                  NaN                  NaN
2020-12-24 09:30:00+05:30  266.299988  266.649994  265.500000  266.299988  1346556          0             0  ...       0        0       1            NaN            NaN                  NaN                  NaN
2020-12-24 09:45:00+05:30  266.299988  266.450012  265.500000  266.100006   914542          0             0  ...       0        0       1            NaN            NaN                  NaN                  NaN
2020-12-24 10:00:00+05:30  266.100006  267.649994  266.100006  267.399994  1594715          0             0  ...       0        0       1            NaN            NaN                  NaN                  NaN
2020-12-24 10:15:00+05:30  267.299988  267.799988  266.649994  266.799988  1050138          0             0  ...       0        0       1            NaN            NaN                  NaN                  NaN
...                               ...         ...         ...         ...      ...        ...           ...  ...     ...      ...     ...            ...            ...                  ...                  ...
2020-12-29 14:15:00+05:30  278.000000  278.350006  277.049988  277.399994  1333187          0             0  ...       0        1       0      70.481224      69.749927            62.894709            57.654916
2020-12-29 14:30:00+05:30  277.500000  277.899994  276.500000  277.750000  1194604          0             0  ...       1        0       0      68.110486      69.690995            54.537582            59.388621
2020-12-29 14:45:00+05:30  277.649994  277.850006  276.850006  276.950012   841302          0             0  ...       1        0       0      59.166718      65.919476            29.097088            48.843126
2020-12-29 15:00:00+05:30  277.000000  278.399994  277.000000  277.950012  2298641          0             0  ...       1        0       0      63.750203      63.675802            33.053394            38.896021
2020-12-29 15:15:00+05:30  277.950012  278.450012  277.250000  277.750000  2537262          0             0  ...       1        0       0      63.750203      62.222375            26.968237            29.706239

[75 rows x 62 columns]
root@node54310-pandas-r:~/sas#

Seems like a known issue with windows and multiprocessing freeze_support()
Link1
Link2
Link3
Link4

You can close this issue if you do not want to investigate further, as I have got the solution which is as below:
source code

import yfinance as yf
import pandas_ta as ta

def test():
    sbin = yf.Ticker("SBIN.NS")
    df = sbin.history(period="3d", interval="15m")
    df.ta.strategy("Momentum", verbose=True)
    print(df)

if __name__ == '__main__':
    test()

pwsh.exe console output
(venv) PS D:\trading\0sas_algo> cat .\crash.py
import yfinance as yf
import pandas_ta as ta

def test():
    sbin = yf.Ticker("SBIN.NS")
    df = sbin.history(period="3d", interval="15m")
    df.ta.strategy("Momentum", verbose=True)
    print(df)

if __name__ == '__main__':
    test()
(venv) PS D:\trading\0sas_algo> python .\crash.py
[+] Strategy: Momentum
[i] Indicator arguments: {'append': True}
[i] Excluded[10]: above, above_value, below, below_value, cross, cross_value, long_run, short_run, trend_return, vp
[i] Multiprocessing: 8 of 8 cores.
[i] Total indicators: 34
[i] Columns added: 55
                                 open        high         low       close   volume  Dividends  ...  STOCHd_14_3_3  STOCHRSIk_14_14_3_3  STOCHRSId_14_14_3_3  TRIX_30_9  TRIXs_30_9  TSI_13_25
datetime                                                                                ...
2020-12-24 09:15:00+05:30  265.100006  266.549988  264.700012  266.299988  1653388          0  ...            NaN                  NaN                  NaN        NaN         NaN        NaN
2020-12-24 09:30:00+05:30  266.299988  266.649994  265.500000  266.299988  1346556          0  ...            NaN                  NaN                  NaN        NaN         NaN        NaN
2020-12-24 09:45:00+05:30  266.299988  266.450012  265.500000  266.100006   914542          0  ...            NaN                  NaN                  NaN        NaN         NaN        NaN
2020-12-24 10:00:00+05:30  266.100006  267.649994  266.100006  267.399994  1594715          0  ...            NaN                  NaN                  NaN        NaN         NaN        NaN
2020-12-24 10:15:00+05:30  267.299988  267.799988  266.649994  266.799988  1050138          0  ...             I have seen that wrapping it in __main__ before could solve the Issue. Glad that it works though!
Regards,
KJ

Hi I have same problem with this code please help me. I use VScode and python 3.9.1 but get same error:
........
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 143, in get_preparation_data
return Popen(process_obj)
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\popen_spawn_win32.py", line 46, in init
_check_not_importing_main()
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 136, in _check_not_importing_main
prep_data = spawn.get_preparation_data(process_obj._name)
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 143, in get_preparation_data
is not going to be frozen to produce an executable.''')
RuntimeError:
An attempt has been made to start a new process before the
current process has finished its bootstrapping phase.
    This probably means that you are not using fork to start your
    child processes and you have forgotten to use the proper idiom
    in the main module:

        if __name__ == '__main__':
            freeze_support()
            ...

    The "freeze_support()" line can be omitted if the program
    is not going to be frozen to produce an executable.
_check_not_importing_main()

File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\spawn.py", line 136, in _check_not_importing_main
is not going to be frozen to produce an executable.''')
RuntimeError:
An attempt has been made to start a new process before the
current process has finished its bootstrapping phase.
    This probably means that you are not using fork to start your
    child processes and you have forgotten to use the proper idiom
    in the main module:

        if __name__ == '__main__':
            freeze_support()
            ...

    The "freeze_support()" line can be omitted if the program
    is not going to be frozen to produce an executable.

........

Thank you for these posts, and especially thank you for your workaround @rahulmr !!

@eervin123,
This is a common issue from Windows users and has been addressed in the pinned Issue #181. Have you tried the solution posted there? Essentially using:
if __name__ == '__main__':
    # Your code ...

Fwiw, I also develop on an Apple M1 Macbook so I haven't ran into this issue. But then again, I do not use code cells in VS Code for development or testing.
KJ


Can't change display scale on Kali

Describe the issue
Ok so the probleme is that when using Kali i changed my screen resolution and it worked perfectly but element were to small so i tried to change the scale but it display a black screeen when applied but luckly it cancel afterward because i can't confirm the modification.
Configuration

UTM Version: 4.2.5
macOS Version: 13.4.1
Mac Chip (Intel, M1, ...): M2

config.plist.zip

Execute this command after starting your kali box this will resize your kali screen, but you have to execute this each time you want to resize your screen its a daunting task but this is the only workaround.
sudo xrandr --output Virtual-1 --auto

Execute this command which is shared below, each time when you want to resize the screen you need to run it..
Bit daunting task but this is the only workaround for now.
sudo xrandr --output Virtual-1 --auto

Thanks

sudo xrandr --output Virtual-1 --auto

argh was hoping that it would solve it for me but it didn't. sad.

Aug 2024, kali 2024.2 build running on m2 mac with UTM
Had the same problem
Found Kali HiDPI Mode in settings (xfce). Turn it on, then navigate to Display and play with resolution to find the one most comfortable. I used 2940x1840, worked nicely on a small mac display.
I had also turned on retina mode or something in display settings in UTM itself while the VM was not running. Don't know if it helped but the picture is pretty clear now. Display scaling still produces black screen, but I don't need it anymore.


How to Use this Library

Hi There,
I am trying to implement a file system watcher display on macOS. I would like to have a session with you sometime on how to use this library.

Okay, cool. Have you tried it out yet? Any specific questions? There is some example code on the front page, but maybe I should add some more explanation.

Hey @EncodiaDotCo I'm not sure as a client which view to use, it seems that you have just tested outline view and I wanted to see basically how to use it in general vs in your specific example

There is only one view in this package, OutlineView. The basic idea is borrowed from other UI libraries with lazy expandable tree/outlines. You give it model, as in the example, which is a tree of object implementing TreeNodeProtocol.  That protocol give the OutlineView the info it needs to lazily build the tree as needed.

Do you think this library can work if i have a file system of thousands (maybe 10s of thousands) of files and performance would be good if i expanded collapsed at various nesting levels in the tree?

I think it should work. I should tweak the code (1 line change) to use SwiftUI's LazyVStack instead of VStack, because that could be an issue you expand 100's or 1000's of nodes at the same time.

yeah, keep me updated on updates and releases. currently trying to test it out and get a feel for the methods. i was thinking of creating like a shadow view of a large array with all the files and using your view to just lazy load whatever item is expanded

@EncodiaDotCo I noticed that when I try to modify this tree (like changing the name of the root) since the TreeNodeProtocol requires class based implementation the viewmodel does not register the changes. I have to create a new class and modify the data which causes the whole drop down view to collapse and rerender. Can you describe a use case for efficiently modifying/adding/deleting elements of this tree without overhead of creating new class instances?

You can definitely do this. The TreeNodeProtocol inherits from ObservableObject. So in the example code, if you were going to change the name of a node, you'd change name into: @Published var name: String. Then changes to it will get picked up. In my code, this does not cause the OutlineView to collapse and re-render. Follow a similar pattern for adding or removing children. You might have to make a property @Published or fire objectWillChange from the tree node, but the OutlineView will re-render with different children while keeping it's expanded/collapsed state.

I'm trying to pull the nodes out into a view model so that i can manage the state of the tree in a VM. And I can add methods to stream add events to the tree, deletion, etc. But I keep getting

By changing instead of @State to @ObservedObject

Is this the right design pattern for your library? What am I doing wrong?

I tried adding @MainActor but I can't seem to use that context in the initalizer of the view model

I was just writing to recommend that (marking the view model class). I think the actor stuff is not 100% working in some corner cases of SwiftUI. Maybe the new Fall 2022 release fixes the issues I saw last year.

I was able to implement a method to add a Node to the tree. However when I tried adding 10,000 nodes in one method (representing 10,000 files or leaf nodes) I got 100% CPU usage and the whole process froze my app for about 2 seconds before loading the entire view.

I basically implement the insert like inserting into a trie structure using a file path delimited by the "/" each directory is a node in the tree. Would you recommend any other approach to using this library?

You added 10,000 children to one node, or 10,000 nodes total in the whole tree?  Either way, I'm guessing the VStack can't handle it. Let me try updating the code to use SwiftUI's LazyVStack, which might be able to handle the 10,000 nodes. I'll try to update the code today and post back here in a few hours.

I added the 10,000 nodes total in the whole tree in one go. and sounds good

I didnt see any issues with expand collapsing, it was when the data was getting populated into the Tree there was some lag

I should update it to use LazyVStack anyway, but that sounds like it could be something not related to this package. Because if your root tree is only displaying, say 10-100 files, then the outline shouldn't have to know about the other 10,000. The TreeNodeProtocol is lazy for that reason. If you can attach sample code here, I can take a look at it.

Sure let me share you my code. Built mostly from your example code

import Foundation
import EncodiaOutlineView
import SwiftUI

@MainActor class BackupTreeViewModel: ObservableObject {
    @Published var backupTree: [BackupNode] = [BackupNode]()

    init() {
        makeOutlineRoots()
    }

    func makeOutlineRoots() {
        backupTree.append(BackupNode(path: "SEA-15471")) //this would be grpc to get the current host name
        //server side steam until it closes from grpc
    }

    func addBackupItem(newPath: String, newStatus: Status, isFileAdded: Bool) -> Bool {
        var eachDirectory = newPath.components(separatedBy: "/")
        eachDirectory[0] = "/"
        var currIndex = 0
        var currBackupItem = backupTree[0] //the current machine to start at
        while(currIndex < eachDirectory.count) {
            if(currIndex == eachDirectory.count - 1) { //is a folder and last file
                var truncatedPath = eachDirectory[0...currIndex].joined(separator: "/")
                if(truncatedPath != "/") {
                    truncatedPath.removeFirst()
                }

                if(isFileAdded) {
                    currBackupItem._children!.append(BackupNode(path: truncatedPath, isFile: true, status: newStatus/*, parent: currBackupItem*/))
                } else {
                    currBackupItem._children!.append(BackupNode(path: truncatedPath, status: newStatus/*, parent: currBackupItem*/))
                }
            } else {

                if(currBackupItem._children == nil) {
                    return false
                }

                var foundIndex = -1
                //look for the child if found dig into that
   checkExists: for childIndex in 0..<currBackupItem._children!.count {
                    if(currBackupItem._children![childIndex].name == eachDirectory[currIndex]) {
                        foundIndex = currIndex
                        currBackupItem = currBackupItem._children![childIndex]
                        break checkExists
                    }
                }

                //child not already found create and repeat process
                if(foundIndex == -1) {
                    var truncatedPath: String = eachDirectory[0...currIndex].joined(separator: "/")
                    if(truncatedPath != "/") {
                        truncatedPath.removeFirst()
                    }

                    currBackupItem._children!.append(BackupNode(path: truncatedPath, status: newStatus/*, parent: currBackupItem)*/))
                    let sizeForEnd = currBackupItem._children!.count
                    currBackupItem = currBackupItem._children![sizeForEnd - 1]
                }
            } //end else

            currIndex += 1
        }
        return true
    }//end add method

    func addAll() {
        for newPath in Constants.FILE_LIST_TEST {
            addBackupItem(newPath: newPath, newStatus: .processing, isFileAdded: true)
        }
    }
}

enum Status {
    case paused
    case processing
    case completed
    case error
}

final class BackupNode: TreeNodeProtocol {
    let id: UUID
    @Published var path: String
    let depth: Int
    @Published var currStatus: Status
    @Published var parent: BackupNode? = nil
    let isFile: Bool
    @Published var _children: [BackupNode]? = nil

    var name: String {
        if path == "/" {
            return "/"
        }
        if let index = path.lastIndex(of: "/") {
            let name = String(path.suffix(from: index).dropFirst())
            return name
        } else {
            return "(null)"
        }
    }

    var type: String {
        if(isFile) {
            return "File"
        } else {
            return "Folder"
        }
    }

    var parentName: String {
        if(parent == nil) {
            return "No Parent"
        } else {
            return parent!.name
        }
    }

    init(path: String, isFile: Bool = false, status: Status = .processing, depth: Int = 0, parent: BackupNode? = nil) {
        self.id = UUID()
        self.path = path
        self.depth = depth
        self.currStatus = status
        self.isFile = isFile
        if(!isFile) {
            _children = []
        }
        self.parent = parent
    }

    var canHaveChildren: Bool { !isFile }
    var isLoadingChildren: Bool { false }

    /// Lazy computed property
    var children: [BackupNode] {
        return _children!
    }
}

struct BackupTreeView: View {

    //@State var roots: [BackupNode] = makeOutlineRoots() //take this out into a view model
    @ObservedObject var backupContent = BackupTreeViewModel()
    @StateObject var selection = OutlineViewSingleSelectionModel<BackupNode>()
    // @StateObject var selection = OutlineViewMultiSelectionModel<Thing>()
    @State var expansion: Set<UUID> = []

    var body: some View {
        HStack {
            ScrollView {
                OutlineView(roots: backupContent.backupTree, selection: selection, expansion: $expansion) { node in
                    Text("Full Path: \(node.path)...Name: \(node.name)... Parent: \(node.parentName)")
                }//.onChange(of: expansion, perform: {param in print(param)})
            }
            .frame(width: 800)
            Divider()
                .frame(maxWidth: .infinity)
            Button("Add All", action: {backupContent.addAll()})

        }
    }
}

You can run the view, and click the button to add all the elements. If you have any redesign suggestions id be open to it. Our team will be sending me a all the files being backed up and i need to track the status of the files and display them with your view.

My guess is I am not using the lazy computed property properly, I'm populating the entire tree in one go. But regardless that is going to be my use case. I might need to use an auxiliary structure to hold the tree and based on expand/collapsing copy the data from that auxiliary structure into your outline view

Hi @ajdali. I updated the package to use LazyVStack, and I added an example to the Readme that may help you. It shows an example filesystem browser. It uses a background thread to load files. You may not need that, in which case you can skip the DispatchQueue and the sets to isLoadingChildren. That property exists so the UI can give some indicator when a background thread is loading the child nodes.

thank you very much ill take a look

@EncodiaDotCo I see that you currently have the UI structured that any click on the HStack triggers expand/collapse. In the case where I am adding a check box on the node for a user to click, how to I configure your library to only expand/collapse when the chevron arrow is clicked?
private func plainTapGesture() {
        onNodeClick?(node)
        let canExpand = node.canHaveChildren
        // Different ways to do selection/expansion behavior.
        // 1. Any tap on entire HStack causes both a) selection to go to this node, b) toggle expansion. The problem with
        //    this is that you have an open folder. You click on it to maybe see it's stats or just select it, and everything
        //    closes up. I don't like that.
        // 2. Only change the status if the click is on an already selected item
        // print("Node tapped: \(node.id), selection: \(selection?.id)")
        let alreadySelected = selection.contains(node)
        if !selection.allowsSelection || alreadySelected {
            if canExpand {
                toggleExpansion(node.id)
            }
        } else {
            selection.removeAll()
            selection.add(node)
        }
        log.debug("plainTapGesture canExpand=\(canExpand), alreadySelected=\(alreadySelected), node.id=\(String(describing:node.id))")
    }

There is no configuration for that now, but I could add one in next few days.
But actually I can't reproduce the bug you describe. If I have a checkbox, then clicking it changes the checkbox and not the expand/collapse state.
If you can show some example code, post it here. Actually, it would better to open a new issue for this topic and post it there.


WIP: [SD][v4.0] RCPs to use num of samples instead iterations

This PR should address https://github.com/mlcommons/logging/issues/351
Another PR to update the benchmark code will be opened in the training repo

@hiwotadese
Re-tagging as WIP, sorry. I'm trying to simplify the SD compliance checker - ETA is couple of hours.

Hi @nv-rborkar , can we merge this?


Be able to easily re-submit solutions sent to central by error

Sometimes students don't send solutions to the proper organization, which means not entering in the classroom.
We need an easy way for admins to, given an student and an organization, to push them back in the proper classroom.

@fedescarpa @aguspina was this issue solved with your latest changes about resubmissions?
You have exposed an HTTP API call that resubmits solutions, right?

Yup!
El dom., 21 de ago. de 2016 a la(s) 17:10, Franco Leonardo Bulgarelli <
<EMAIL_ADDRESS>escribió:

@fedescarpa https://github.com/fedescarpa @aguspina
https://github.com/aguspina was this issue solved with your latest
changes about resubmissions?
You have exposed an HTTP API call that resubmits solutions, right?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/mumuki/mumuki-teacher-tools/issues/99#issuecomment-241278841,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AD6mDJLbjyKa_2bPp6-PPC1rMRL6ok6Hks5qiLDLgaJpZM4IxddH
.

Closing.


Question: Extending Message Types

We are evaluating using Flyer (it looks fantastic so far) for a project we are working on. I have one question about Message Types... I see that currently File, Image, and Text are supported. Can the Types be extended easily if we plan to add additional features and use our own backend? If so, is there a suggested way of doing this that will fall in line with future updates to the package?
Thanks for taking the time to answer this :)

Hi @LegendAF, thanks for the feedback! We for sure will be adding the "System" type or something similar, which is usually used in a conversation with support and "Audio", "Video" somewhere down the road. What message types are you thinking of? Maybe we should consider other options.
Regarding the extension, I'm not sure if it can be extended right now, maybe only if we do a type called "Other" with a metadata Map and then in the chat UI if we see the type "Other" we expect a widget which will render this message? This is the first thing that came to my mind, but I'm open to any suggestions that you have to implement/improve what we have right now.

@demchenkoalex
I do not think current design is extendable and there would be version compatibility issues.
Once a new added message type is released, for the users who are still using olds packages will most likely show blank message screen or even crash due to some behavior like
https://github.com/flyerhq/flutter_chat_types/blob/710708ba5b1aff11f1d4cedc9e25c2ec54cdd924/lib/src/message.dart#L30-L38
There is a factory pattern to make it extendable
https://github.com/rongcloud/rongcloud-im-flutter-sdk/blob/3a16247cad4eabc9aaf6eb890c0400c5a191f7ba/lib/src/rong_im_client.dart#L57-L129
And the 'Unsupported' message type should be considered for version compatibility

Hi @Goxiaoy I don't consider myself a dart expert, so if you can help out with a "right way" to do it (even with a breaking change - we will have it soon anyway) that would be cool.

Just another thought - user will not use this package directly, it is bundled with a Chat UI. So when new features are added, the new Chat UI and/or Firebase Core is released, so I don't expect any crashes, since you can still use an old version. And because you are on an old version you don't have an option to create a new message type as well. What is the possible situation where this will be a compatibility issue? Other than removing message types which is not planned.

Hi @Goxiaoy I don't consider myself a dart expert, so if you can help out with a "right way" to do it (even with a breaking change - we will have it soon anyway) that would be cool.

I am really busy these days for finding tech stacks for my company, and occasionally find this package. I will keep watching this project and see what I can do in the frontend/backend once I have  enough time

Just another thought - user will not use this package directly, it is bundled with a Chat UI. So when new features are added, the new Chat UI and/or Firebase Core is released, so I don't expect any crashes, since you can still use an old version. And because you are on an old version you don't have an option to create a new message type as well. What is the possible situation where this will be a compatibility issue? Other than removing message types which is not planned.

You can not force evey end user to upgrade their app immediately. Once developers release a new version of app with the new version of Chat UI and/or Firebase Core, end users will face compatibility issue. It better to have some friendly notice like 'Your app does not support this kind of message , please upgrade your app to latest' instead of missing error handling

Oh okay, right. Thanks for bringing this up! We will work on that

Added custom and unsupported message types. custom has metadata map, which can be used to store anything and new version of the Chat UI will have buildCustomMessage function to build anything. unsupported will be used for backwards compatibility. Released in v2.2.0.


[Proposal] Relationship Eager Loading for Fractal Includes

Q
A

Bug?
no

New Feature?
yes

Framework
Laravel

Framework version
6.x

Package version
2.4.x

PHP version
7.3

Actual Behaviour
Currently, Dingo tries to eagerload  model based on the include keys in transformer, and uses the value as the resource key.
Expected Behaviour
It should be the other way round. The array key should be the resource key and the value should be used as the relationship name. This way, it won't affect the resource keys in the include query string.
Explanation
If would like to have something like this:
public $availableIncludes = ['billing_type' => 'billingType'];
instead of:
public $availableIncludes = ['billingType' => 'billing_type'];
in order to use a query string like myapiurl?include=billing_type
Comments
Is there a reason why it is implemented in the current way? Because I assume this is how it should have been thought about in the first place.
Note: After further testing, it seems this happens only with defaultIncludes? I'm confused, has this been implemented or is this manifestation part of fractal?

I have resolved this by using a CustomSerializer. It seems the issue is from Fractal.

If you have fixed it, I encourage you to do a PR into the fractal serializer project for the benefit of other users.


Clarify distinction between SPEC and implementation

There is a lot of discussions in projects around what it means to endorse vs what is written on each SPEC.
To help clarify things, I propose that we create an optional section on the SPECs to show our suggestion of implementation. E.g. for SPEC0 and SPEC4, we could add the section Suggested implementation and describe what we currently have with the calendar and lazy loading package.

Thanks for the suggestion, Pamphile. Can you expand a bit on what you think this section would contain? In my mind, the SPEC was the suggestion, but perhaps there's a further clarification needed.
I think we also agreed to make it more obvious what endorsement means, by adding a hover (and perhaps icon) to the SPEC list.

The SPECs already have two sections where this information should go:
### Core Project Endorsement

<!--
Discuss what it means for a core project to endorse this SPEC.
-->

### Ecosystem Adoption

<!--
Discuss what it means for a project to adopt this SPEC.
-->

We haven't completed this section for the existing SPECs. It would be great if you (or someone else) wanted to make a PR to update the existing SPECs with this information.

Yep, I am all for making a call 😃
I had a look and seems like these sections are not really filled for the current SPECs (0, 1, 4).
I think these sections are good and should be moved to the top, after the SPEC itself. What I would move to a specific section, would be the "implementation" part. This should make it clear that this is just an example.
Basically I would propose the following structure:
### Description

<!--
The SPEC itself.
-->

### Core Project Endorsement

<!--
Discuss what it means for a core project to endorse this SPEC.
-->

### Ecosystem Adoption

<!--
Discuss what it means for a project to adopt this SPEC.
-->

### Suggested implementation

<!--
An generic implementation which follows the SPEC
-->

Basically with recent discussions we need to be clearer on what is "required" and what is optional. E.g. for SPEC0 basically what we want (since we said NEP29 is valid) is that project have a deprecation policy for deps/Python. Up to us to add more constrains such as minimal support of e.g. 2 years if you want to be "compliant". This information would go into the Core Project Endorsement section and Ecosystem Adoption would list the NEP29 as NumPy's implementation.


v4.9.0 broke my deploy

Error: release retool failed, and has been rolled back due to atomic being set: failed to create resource: Ingress.extensions "retool" is invalid: spec: Invalid value: []networking.IngressRule(nil): either `defaultBackend` or `rules` must be specified

For somebody else with same problem:
ingress:
  enabled: false


Huge chain of anonymous classes leads to class file that is too big

This issue is seen here https://github.com/twitter/scalding/pull/1059
Digging around https://github.com/scala/pickling/issues/10 it looks like setting -Xmax-classfile-name may solve this, but this is an undesirable state for things to be in (if it can be avoided), especially since bijection is supposed to be a fairly dep-free, core lib that anyone can use.

I recently ran into the long classname problem.
I'm building a Docker container to have an easily distributable Scalding dev environment that can both compile my jar and run the job locally on Hadoop.
My project uses the sbt assembly plugin to package the dependencies (including bijection-core). On Docker, the maximum file name length is 242 characters, so when I try to run my job on Hadoop, unpacking bijection-core results in:
Exception in thread "main" java.io.FileNotFoundException: /tmp/hadoop-root/hadoop-unjar5063693169954638466/com/twitter/bijection/GeneratedTupleCollectionInjections$$anon$31$$anonfun$invert$10$$anonfun$apply$46$$anonfun$apply$47$$anonfun$apply$48$$anonfun$apply$49$$anonfun$apply$50$$anonfun$apply$51$$anonfun$apply$52$$anonfun$apply$53$$anonfun$apply$54$$anonfun$apply$55.class (File name too long)
	at java.io.FileOutputStream.open(Native Method)
	at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
	at java.io.FileOutputStream.<init>(FileOutputStream.java:171)
	at org.apache.hadoop.util.RunJar.unJar(RunJar.java:88)
	at org.apache.hadoop.util.RunJar.unJar(RunJar.java:64)
	at org.apache.hadoop.util.RunJar.main(RunJar.java:188)

Setting -Xmax-classfile-name to 240 make it possible to run a packaged jar containing bijection-core on Hadoop on Docker. I've been digging around, but couldn't find a workaround. Any suggestions are welcome.

I didn't know about the -Xmax-classfile-name option. I'm worried if this will make binary compatibility really fragile.
I wonder if we could just restructure the code. I think the main issue is how we have deeply nested traits in order to control the implicit resolution priorities. I'm not sure that deep nesting is needed. It should only be needed when there are multiple cases that would apply so we need a way to break a tie.
Sorry this is a pain.

+1 I'm hitting this problem as well with Zipkin, trying to run analysis jobs inside Docker (which has a lower character limit)

@eirslett I found a (not very pretty) workaround. You can mount a directory from the host system to your Docker container and set that as hadoop.tmp.dir (in core-site.xml). I'm still working on some other problems with my setup, so I'm not sure if that's enough to get a fully working environment, but that at least gets me past the unpacking error.

The problem is that it wouldn't work in every host environment... (like orchestration where you don't control the file layout, for example mesos, or a third party docker hosting provider)

I'm hitting this issue as well and it's preventing me from running Scalding jobs in a Docker container. Any update on decreasing the file name length to be under Docker's limit? I'm using Mesos as well so mounting a host volume into the container as work around isn't really a feasible solution.


Per-meshlet compressed vertex data

Objective

Prepare for streaming by storing vertex data per-meshlet, rather than per-mesh (this means duplicating vertices per-meshlet)
Compress vertex data to reduce the cost of this

Solution
The important parts are in from_mesh.rs, the changes to the Meshlet type in asset.rs, and the changes in meshlet_bindings.wgsl. Everything else is pretty secondary/boilerplate/straightforward changes.

Positions are quantized in centimeters with a user-provided power of 2 factor (ideally auto-determined, but that's a TODO for the future), encoded as an offset relative to the minimum value within the meshlet, and then stored as a packed list of bits using the minimum number of bits needed for each vertex position channel for that meshlet

E.g. quantize positions (lossly, throws away precision that's not needed leading to using less bits in the bitstream encoding)
Get the min/max quantized value of each X/Y/Z channel of the quantized positions within a meshlet
Encode values relative to the min value of the meshlet. E.g. convert from [min, max] to [0, max - min]
The new max value in the meshlet is (max - min), which only takes N bits, so we only need N bits to store each channel within the meshlet (lossless)
We can store the min value and that it takes N bits per channel in the meshlet metadata, and reconstruct the position from the bitstream

Normals are octahedral encoded and than snorm2x16 packed and stored as a single u32.

Would be better to implement the precise variant of octhedral encoding for extra precision (no extra decode cost), but decided to keep it simple for now and leave that as a followup
Tried doing a quantizing and bitstream encoding scheme like I did for positions, but struggled to get it smaller. Decided to go with this for simplicity for now

UVs are uncompressed and take a full 64bits per vertex which is expensive

In the future this should be improved

Tangents, as of the previous PR, are not explicitly stored and are instead derived from screen space gradients
While I'm here, split up MeshletMeshSaverLoader into two separate types

Other future changes include implementing a smaller encoding of triangle data (3 u8 indices = 24 bits per triangle currently), and more disk-oriented compression schemes.
References:

"A Deep Dive into UE5's Nanite Virtualized Geometry" https://advances.realtimerendering.com/s2021/Karis_Nanite_SIGGRAPH_Advances_2021_final.pdf#page=128 (also available on youtube)
"Towards Practical Meshlet Compression" https://arxiv.org/pdf/2404.06359
"Vertex quantization in Omniforce Game Engine" https://daniilvinn.github.io/2024/05/04/omniforce-vertex-quantization.html

Testing

Did you test these changes? If so, how?

Converted the stanford bunny, and rendered it with a debug material showing normals, and confirmed that it's identical to what's on main. EDIT: See additional testing in the comments below.

Are there any parts that need more testing?

Could use some more size comparisons on various meshes, and testing different quantization factors. Not sure if 4 is a good default. EDIT: See additional testing in the comments below.
Also did not test runtime performance of the shaders. EDIT: See additional testing in the comments below.

How can other people (reviewers) test your changes? Is there anything specific they need to know?

Use my unholy script, replacing the meshlet example https://paste.rs/7xQHk.rs (must make MeshletMesh fields pub instead of pub crate, must add lz4_flex as a dev-dependency) (must compile with meshlet and meshlet_processor features, mesh must have only positions, normals, and UVs, no vertex colors or tangents)

Migration Guide

TBD by JMS55 at the end of the release

Before merging, we need to commit a new bunny to https://github.com/JMS55/bevy_meshlet_asset and update the commit hashes in this repo

Not sure what you mean by delta encoding. Triangle strip compression maybe, maybe not. Nanite's method they found too slow for in-memory access, but I haven't evaluated the other paper I linked yet. We'll see when I get to it.

Main (54.72mb):

This PR (52.35mb):

Perf seems pretty much the same.
for x in -5..=5 {
    for y in -5..5 {
        for z in -5..5 {
            commands.spawn(MaterialMeshletMeshBundle {
                meshlet_mesh: meshlet_mesh_handle.clone(),
                material: debug_material.clone(),
                transform: Transform::from_translation(Vec3::new(
                    x as f32 * 15.0,
                    y as f32 * 5.0,
                    z as f32 * 5.0,
                )),
                ..default()
            });
        }
    }
}

Tldr; pretty much identical quality, asset size, and perf, but there's room to improve asset size in the future and we now unlock streaming.

Actually I should also check size in memory, and not just disk which also has LZ4 applied. Not a blocker, but would be nice to know. I'll check when I get a chance.

Main: 109.972084 mb
This PR: 63.614636 mb
Big win on memory usage! (previous comparisons above was LZ4-compressed disk size for the asset)


Add ability for admins to hide dandisets

This allows us to hide test dandisets and avoid polluting the public view of the archive.

@satra, @yarikoptic, @dchiquito, @mvandenburgh: do we still need this issue open? We have not added an explicit "hide" option, but we do prevent the display of empty dandisets by default now.

overall, admins may want to be able to control viewability, but i think this is a very low priority at this point.

i would be fine if this was closed for now. we could create a label called "orphaned". as in the idea may still be useful, but not going to implement at this point.

i would be fine if this was closed for now. we could create a label called "orphaned". as in the idea may still be useful, but not going to implement at this point.

Thanks Satra. I will leave it open but record its low priority (I am trying out a new issue tracking methodology).


Import models using relative paths

Prepare for the future, according to PEP328: https://docs.python.org/2/whatsnew/2.5.html#pep-328

Thanks :)


Almost every hut I open has a skilled mercenary

In some cases also an advance, but virtually no other results.
I believe before I built my first city, the outcomes were much more random.

I noticed this as well. It's very rare that I unleash barbarians, it should happen a lot more often. There appears to be a flaw in the random number generator. I will attempt to fix it.


Question: How does the ASP.NET team measure code coverage?

For the last couple of years I've become more and more interested in code coverage. It's become sort of professional gamification; level up and get to the next boss fight.
With the release of VS2017, Code coverage for .NET Core based projects seems to be lacking at the moment, and third party solutions such as Resharper don't provide an alternative yet.
I posed the same question to the corefx repo, and was pointed in the direction of OpenCover. Looking at the csproj files of that repo, it looks like they are pre-2017. Since you guys have now updated to 2017, you are in the same boat as the rest of us.
Have you figured out a way do code coverage? Any tricks or hacks you can share?

We don't have a formalized process for running code coverage. I can't speak for the remainder of the subteams inside Asp.NET / EF, but the Mvc team specifically hasn't focused much on code coverage as a a measure for determining what unit tests and how many to write.
@Eilon does the engineering team have any thoughts on this?

FYI
Resharper blog about their issues
Live unit testing
Live unit testing isn't supported for .NET Core, Se FAQ at the end of the post. I imagine this uses some of the same infrastructure as code coverage.
Community question on code coverage
This has a reply from the VS team about missing support.

Yeah code coverage just hasn't been a priority for us. We looked into it a bit a while ago (1+ years ago) and there weren't great options for us. I would imagine things are better these days, but we haven't looked deeply into it.

Well, it looks like things have temporarily taken a turn for the worse. With the updating feature of Visual Studio, hopefully it won't take that long until this becomes available.

Closing because we still don't run code coverage tools and don't plan to at this time.


ECTD deleted variants on the remote are not deleted locally on pull

From https://github.com/abapGit/abapGit/issues/6489#issuecomment-1717954996

Somewhere down these gigantic classes in their inheritance forests was a call to update the variants in the test data container. Only the import parameter for new and changed variants was supplied, not for removed ones. I removed a variant from the TDC and committed to a new branch. Then switched back und pulled to get the variant back. After now switching to the new branch again and pulling I am unable to remove the variant using abapGit.

Found it again in CL_APL_ECATT_UPLOAD->GET_VARIANTS_FROM_DOM_NEW, the call to CL_APL_ECATT_PARAMS->SET_VARIANTS( ).
This is SAP standard code. The GUI application appears unaffected by this though as it asks if all variants should be deleted on upload:

In CL_GUI_ECATT_DATA_EDITOR->UC_UPLOAD_VARIANTS a replace mode for CL_APL_ECATT_EXT_DATA=>UPLOAD_VARIANTS is determined using the user decision. UPL_SET_TEST_DATA in the same class accounts for this by calling CL_APL_ECATT_PARAMS->DELETE_VARIANTS( '*' ) before CL_APL_ECATT_PARAMS->SET_VARIANTS( ). We can probably do the same somewhere.
Edit: I may have mixed up the feature to download and upload just the variants or the whole test data container. I cannot find a way to update the whole test data container including its variants using the GUI, the object needs to be deleted first. However, the call to delete all variants should still work as both upload/download features appear to use the same classes.

maybe in ZCL_ABAPGIT_ECATT_VAL_OBJ_UPL->UPLOAD

I think it's ZCL_ABAPGIT_ECATT_DATA_UPLOAD->UPLOAD which looks a bit more difficult. To get access to lo_params in the same manner the easiest way would probably be to copy the implementation of CL_APL_ECATT_DATA_UPLOAD->UPLOAD, add the new delete_variants and move ZCL_ABAPGIT_ECATT_DATA_UPLOAD up one level in the inheritance tree. Otherwise you'd somehow have to attach the call between the initialization of the attributes and the set_variants call. Or call set_variants again in the subclass after the call of the parent implementation but save and close_object are already called then :shrug:

I'm not using ECATT. Go for it. Just has to work with this 😉

I am only using it for the fancy editable ALV for test data in unit tests ;) I'll have a go add it and maybe add / adjust some test cases in the test repo.
(ALV stands for ABAP List Viewer by the way :P )

+1 for ALV like this guy:


Position of the widget is not inside the taskbar

Hi, I found an issue in the position of the widget in the taskbar, here is how it looks:

I think a possible cause for this issue is that, I have a 2 in 1 laptop that could work as tablet, so the taskbar size and look changes to appear bigger and the look and position of the widget is correct in this mode.

I know, I might be in the minority here, but I would be glad if you could find a solution for it.

Hello and thank you for reporting the issue!
I have few questions to understand the situation:

Does the issue occur when you launch the widget or when you change tablet mode while the widget is already running?
What happen if you right-click on the widget and click on Re-position (إعادة التموقع)? Does it fix the issue?
Does the issue get fixed if you hide the widget then show it again? Or you have to close it completely then relaunch it?

Hi, thank you for responding.

Yes, the issue happen when I launch the widget. The thought of switching to tablet mode occurred to me when I noticed that the widget was slightly elevated above the taskbar. I’m aware that the taskbar height increases in tablet mode, and that’s when I discovered that the widget’s position gets corrected in this mode.
No, it doesn’t have any effect.
No, neither hiding the widget nor relaunching it resolves the issue.

@humantorch10 Thank you for the useful feedback.
Looks like your case is a little special, but no worries I will try to fix the problem.
However, I still have some questions and this time they are about your first screenshot. It shows an unexpected size of the widget:

Did you disable countdown in widget Settings?
What happen if you enable/disable Show countdown (إظهار العد التنازلي)?

Also, I would like yo know if your display scale is 100% or higher.
Thanks again.

Hello @Khiro95,
In Response to your questions, yes, however, another issue has surfaced. The option to enable/disable the countdown doesn’t seem to have any impact. It doesn’t display anything, and disabling it doesn’t alter the widget’s size. As for the display scale, it’s set to 200%, and my display resolution is 2.8k.
I hope my answer fulfills your questions.
Thank you for taking the time to look at this issue.

@humantorch10 Hello, and thanks again for the infos.
Actually there is a problem with the width of the widget since it doesn't respect DPI scale, thus the content is clipped. However, this problem is fixed in the next version.
I will try to fix tablet mode issue in the next version as well :)

Thanks a lot for your consideration.

@humantorch10 You are welcome :)
I wonder if you are willing to help me test a potential fix for this problem.
Unfortunately, I'm unable to test your case since I don't have a 2-in-1 device which support tablet mode, and I couldn't make Windows 11 switch to that mode in VM. A touchscreen is required :(
So the best I can do is to guess, thus I need other people to test the fix.
I'm planning to ship that untested fix in the next release (coming soon), but if it doesn't work then the real fix will come late.

Hi, @Khiro95
Of course, I will gladly want to test it, just tell me what I need to do to test it.

Hi @humantorch10 and thanks a lot!
Actually, I managed to make the taskbar behave similarly to yours when tablet mode is disabled, so I finally can reproduce your problem:

That's a good news because I can now fix it. However, since I cannot switch to tablet mode, I still need help with testing the dynamic switch while the widget is running.
So here is a zip containing a testing version (no installation is required) that should fix 2 issues:

The vertical position of the widget.
The width of the widget when display scale is not 100%.

Launch it and see if these two issues are fixed for you. Also switch to/from tablet mode while it's running and let me know if it react to that change and adapt automatically.
AwqatSalaat.WinUI.Issue_13.zip
Thank you for your help :)

Hi @Khiro95,
Firstly, I’d like to express my sincere appreciation for the time and effort you’ve dedicated to enhancing this fantastic application.
’m pleased to inform you that both the vertical alignment and the width of the widget have been successfully adjusted 😊. However, there are still some issues with the widget’s automatic adaptation when transitioning between tablet and normal modes, which I will demonstrate with the following images:
The first image depicts the initial state upon launching the app, where everything appears to be good.

Upon switching to tablet mode, as shown in the second image, the widget seems to be vertically off-center compared to the image in my original post. However, I’ll leave the final judgment to you.

The third image shows the appearance when reverting back to normal mode. It mirrors the initial state, which is a positive outcome.

That covers the first scenario. The second scenario involves clicking on ‘reposition’ in tablet mode and observing the results.
The fourth image displays the appearance in tablet mode after clicking ‘reposition’ from the initial state. In my view, it still appears vertically off-center, but I’m interested in hearing your thoughts as well.

Upon returning to normal mode, as shown in the fifth image, the original issue reappears, with the widget possibly positioned even higher above the taskbar than before.

Finally, after clicking the ‘reposition’ button, the issue is resolved and the widget returns to its initial appearance, as shown in the last image.

Before concluding, I want to extend my heartfelt thanks for your dedication to resolving even the smallest of issues. Personally, I am content with the current state of the widget, and while the automatic adaptation feature isn’t essential for me as long as the ‘reposition’ function operates as intended, it would certainly be a wonderful addition if you could implement it.
I hope my demonstration has been helpful and clear.
Thank you once again for your hard work.

Hi @humantorch10 and thank you for your kind words. Seeing the users of this widget happy encourages me to work harder to polish it and make it close to perfect. And at the end, I'm seeking reward from Allah and insha'Allah everyone who contributed, by giving suggestions or reporting issues or any kind of help, will have a share of this reward.
I really appreciate your high attitude and your time spent on helping me with the tests.
Your wonderful feedback and detailed report helped me a lot and I think I found the issue with the automatic adaptation. So here is an other zip file for another testing version that should finally have the correct fixes.
AwqatSalaat.WinUI.Issue_13_2.zip
And I apologize if I'm asking much, but please bear with me, at the moment you're my only hope for having this problem fixed at early stage insha'Allah.
Also since you are somewhat a "touchscreen user", I would like to hear your opinion about accessibility of the widget using touch instead of mouse & keyboard:

Do you find the widget touch-friendly? If not, which areas need improvements?
When tablet mode is enabled, do you think the widget should grow vertically or keep the original height?

Thanks again for the help :)

Hi @Khiro95, thank you for your continuous support and dedication to improving this widget app. Your passion and commitment are truly inspiring. And I hope it will be an ongoing reward for you from Allah.
I've downloaded and tested the current version, and unfortunately, the widget doesn't automatically adjust when I switch to tablet mode. However, the reposition button is now functional in tablet mode, allowing the widget to center vertically. Also, when reverting to normal mode, it doesn't adjust automatically, and I need to use the reposition button to center it. The key point is that the reposition button is now operating as expected.
I had hoped for the auto-adjust feature to work, but it still fails to detect the switch to and from tablet mode.
As for the tablet mode and the widget's appearance, I find its size in tablet mode to be satisfactory, and a vertical grow could also be visually appealing, so I remain neutral on this aspect. The widget's performance and appearance in touch screen mode are satisfactory, and I can't think of any improvements at this time.
Thank you very much for your efforts, and I am eager to assist and test any future updates or fixes.

Hi @humantorch10, thanks a lot for your collaboration.
Unfortunately, I will need to make advanced diagnostics with appropriate tools to fix the issue of automatic adaptation to/from tablet mode. With that being said, I'm glad that we have narrowed down the problem to a smaller issue. I will now start finishing the update to v3.1 so it should be available in the next few days insha'Allah. However, I will keep looking for a solution to the remaining issue and I hope to make it solved in future versions.
Once again, thank you for your help.

Insha'Allah after releasing v3.1 update, I will try to start working on v3.2 by first fixing the issue of automatic adaptation to/from tablet mode. I already have at least 2 other potential fixes in my head, but I don't want to let people wait more for v3.1 which contain important bugfixes and improvement. So we will continue with new tests after few days and insh'Allah we will find a solution to close this issue forever (or until Microsoft break something).

Hi @Khiro95, I just want to share this link with you, if it could help you in testing the taskbar look in touch mode.
https://itstechbased.com/how-to-enable-the-tablet-optimized-taskbar-in-windows-11-on-any-pc/

@Khiro95, I am very pleased to have been of help to you. ❤

Hi @humantorch10 I've just released v3.1 now, please update and let me know if the problem is solved or not.

@Khiro95 Again some issue with overlapping

@Khiro95 Again some issue with overlapping. It comes and goes like this.

Are you sure the problem is caused by Awqat Salaat WinUI widget and not caused by Traffic Monitor widget?
If possible, please continue discussion in your other issue or open a new one, so that we keep this one for tablet mode issues 😅

I am pleased to inform you that my issue has been resolved with version 3.2.
I experimented with 3.1 for a while and encountered numerous problems, including the dynamic update of positioning not working, so I decided to wait for the next release. With version 3.2, everything is functioning properly.
I am sharing this with you so that you can finally close the issue.

@humantorch10 I'm very happy to hear that this issue is resolved!
Thank you too for helping to improve the widget in tablet mode. May Allah reward you.


Fix regression in assignments

Fixes a bug where assignment polls could not be saved
Cleaned up some code
@FinnStutzenstein I was throwing some stuff out. Please note these changes

@FinnStutzenstein please review and merge