Fix Dockerhub build.

Since the Dockerfile is now in a subdirectory, the hook directory needs to be moved.
Per the docs:

Create a folder called hooks in your source code repository at the same directory level as your Dockerfile.

https://docs.docker.com/docker-hub/builds/advanced/
I forked the github repo and the dockerhub repo to test this new setup and it does work.
I've also created new dockerhub repos for graylog-forwarder and graylog-enterprise. Splitting up the hook files like this will ensure that each dockerhub repo only builds the intended image.
The graylog and graylog-enterprise builds will be kicked off (as usual) via the 4.0.1-1 style tag. The graylog-forwarder image build will be kicked off with forwarder-4.0.1-1 style tags.
The regexes in the dockerhub build logic have been updated so that graylog and graylog-enterprise images don't build when we create a forwarder-X.X.X tag.

The Dockerhub build rules for graylog were:

Source Type
Source
Docker Tag
Dockerfile location
Build Context

Tag
/.*/
{sourceref}
Dockerfile
/

Tag
/^([0-9]+).([0-9]+).([0-9]+)-([0-9]+)$/
{\1}.{\2}
Dockerfile
/

Tag
/^([0-9]+).([0-9]+).([0-9]+)-([0-9]+)$/
{\1}.{\2}.{\3}
Dockerfile
/

For the graylog and graylog-enterpris images, I have changed them to:

Source Type
Source
Docker Tag
Dockerfile location
Build Context

Tag
/^([0-9]+).([0-9]+).([0-9]+)-([0-9]+).*/
{sourceref}
Dockerfile
/

Tag
/^([0-9]+).([0-9]+).([0-9]+)-([0-9]+)$/
{\1}.{\2}
Dockerfile
/

Tag
/^([0-9]+).([0-9]+).([0-9]+)-([0-9]+)$/
{\1}.{\2}.{\3}
Dockerfile
/

This will ensure that when we create a tag like 4.0.1-1, that we will get images tagged with:

4.0.1-1
4.0
4.0.1

It will also ensure that tags like forwarder-3.3.9 don't trigger builds for the other images.

For future reference, when dockerhub fails to match its regex for a tag, you can tell by checking the webhooks in the github repo. There will be a failed webhook with an http 500 error, saying:
{"error": "Our service is temporarily unavailable. We'll be back soon!"}
That is a clue that the regex is wrong.

@bernd Alright, you rightly pointed out that this could be problem when we do a new 3.3 release, because it would be looking for the Dockerfile in the wrong place. I propose this solution:
For the graylog image:

Source Type
Source
Docker Tag
Dockerfile location
Build Context

Tag
/^([0-3]+).([0-9]+).([0-9]+)-([0-9]+).*/
{sourceref}
Dockerfile
/

Tag
/^([0-3]+).([0-9]+).([0-9]+)-([0-9]+)$/
{\1}.{\2}
Dockerfile
/

Tag
/^([0-3]+).([0-9]+).([0-9]+)-([0-9]+)$/
{\1}.{\2}.{\3}
Dockerfile
/

Tag
/^([4-9]+).([0-9]+).([0-9]+)-([0-9]+).*/
{sourceref}
docker/oss/Dockerfile
/

Tag
/^([4-9]+).([0-9]+).([0-9]+)-([0-9]+)$/
{\1}.{\2}
docker/oss/Dockerfile
/

Tag
/^([4-9]+).([0-9]+).([0-9]+)-([0-9]+)$/
{\1}.{\2}.{\3}
docker/oss/Dockerfile
/

For the graylog-enterprise image:

Source Type
Source
Docker Tag
Dockerfile location
Build Context

Tag
/^([4-9]+).([0-9]+).([0-9]+)-([0-9]+).*/
{sourceref}
docker/enterprise/Dockerfile
/

Tag
/^([4-9]+).([0-9]+).([0-9]+)-([0-9]+)$/
{\1}.{\2}
docker/enterprise/Dockerfile
/

Tag
/^([4-9]+).([0-9]+).([0-9]+)-([0-9]+)$/
{\1}.{\2}.{\3}
docker/enterprise/Dockerfile
/


Job screen help icons pointing to wrong paths

Currently pointing to /user-guide/jobs.html but should be /user-guide/jobs/ assuming the helpUrl prop is set to ...../docs/.
Also the default helpUrl value for the docker stack in config.yml was set to /docs/ which not needs to be /stroom-docs/docs/

Also the link to the help on the quick filter popup is broken

And properties screen, and dashboard expressions

Fixed in beta.177


5.5.0-1

Coverage remained the same at 66.663% when pulling 0b64ab6aece8db68de204e3856a966208daef6d1 on<EMAIL_ADDRESS>into ccea6b01854d6e0ee6067664c7365036b1999592 on master.


Add deployment health check to tilt deployment

Fixed in https://github.com/liferay/liferay-localdev/pull/50


qml qt6: use ZXing-based camera

This builds on top of https://github.com/spesmilo/electrum/pull/8545, to use the old ZXing-based camera code for QR code scanning on Android, instead of QtMultimedia, as the latter seems buggy in Qt6.4.
The p4a branch needs this commit:
https://github.com/sombernight/python-for-android/commit/f2741f0b7b6a4ac52fc6cb0dc9ac706e2287be02
TODO:

[ ] make scanner_layout.xml look reasonable
[ ] how to avoid hardcoding testnet/mainnet in SimpleScannerActivity.java in the imports?
[ ] test all scanning code paths

Hmm, opened PR against your repo instead of spesmilo sort of accidentally. But anyway, at least the diff is clearer this way.

I've merged this branch, but changed the zxing qr scan method to android-only, keeping the qt6 way for desktop/testing use, so we don't have to resurrect this when trying if things have improved in qt6.6+


No Pokeballs showing in shulker to use in Raid Den

When battling you can use pokeballs that are stored in shulker boxes. But when entering a raid battle after defeating Pokémon shows no balls to be used.

Even though Pokeballs are present in shulker in INV they are not able to be used.

This is a Pixelmon issue, already been forwarded. Closing.


Configure default profiles

It would be great to have the ability to configure or remove default shell profiles. Currently The list of profiles is cluttered and if you need to configure, say, your default powershell profile you'd have to make a new profile, but since there's already a default profile called powershell you would have to name the custom profile something else. Additionally the powershell default profile you never want to use is just cluttering up the list of profiles.
In my opinion just having the default profiles show up under Saved Profiles and allow them to be configurable like custom profiles would be enough. Even if I had to edit a file to change them I would be fine with that.
On a related note, it seems weird to have (for the default profile on new tabs) to have a default entry that points to an existing profile (i.e. Default (WSL / Default Distro) as well as the entry it points to. That's a minor nitpick though.

To me the pre-built profiles are quite handy. How about this –

Get rid of the Default Profiles terminology though pre-built profiles are still included in Terminus release.
Get rid of the Show default profiles in the selector
Rename Saved Profiles to just Profiles. The pre-built profiles are also listed here but the user has full control on them (clone/edit/delete/reorder).
Rename Profile (Default profile for new tabs) to just Default profile (or Default profile for new tabs).
For +New profile, get rid of the dropdown popup menu. It'll just create a new custom profile.

I use PowerShell a lot and it pulls my system profile, which is fine. I've played with creating other profiles, but it still pulls the system profile. Would this idea also allow Terminus to use a specific profile in Powershell, Bach, etc and not the system profile?

Update: the latest nightly now includes a revamped profile management system:

Local, SSH and serial profiles merged into a single editor
Local profiles now can be grouped
Support for custom icon, color and title settings for all three profile types
Profile templating
Global shell/args/env/working dir settings removed in favour of just creating a profile

I think is a good middle ground solution for both @clarkwang's and @KalixWolf's workflows - you can either keep built-in profiles enabled, or disable them and only customise the necessary ones as custom profiles.
The "new profile" still shows a selector as it's particularly important for Windows, where you need a whole bunch of base options to run e.g. Clink or Git-Bash.


Unable to re-run grapher step because dataset already exists

I have changed the metadata of a dataset, and, when trying to run the grapher step again (to update the metadata in grapher), etl fails. The error seems to be that the dataset already exists.
This can be replicated by re-running the grapher/energy/2022-08-03/electricity_mix step.

@pabloarosado I can't replicate it unfortunately, could you please post here the full traceback and ideally outputs of the following SQLs?
select id, name, shortName, version from datasets where name = 'Electricity mix (BP & Ember, 2022)';

select id, name, shortName from variables where datasetId = [id from previous SQL];

Thanks @Marigold, maybe it's an issue with my local grapher.
Traceback:
3. grapher://grapher/energy/2022-08-03/electricity_mix...
2022-09-20 09:17.16 [info     ] upsert_dataset.verify_namespace namespace=energy
2022-09-20 09:17.16 [info     ] upsert_dataset.upsert_dataset.start short_name=electricity_mix
2022-09-20 09:17:16,846 - [bugsnag] WARNING - No API key configured, couldn't notify
Traceback (most recent call last):
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1900, in _execute_context
    self.dialect.do_execute(
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute
    cursor.execute(statement, parameters)
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/MySQLdb/cursors.py", line 206, in execute
    res = self._query(query)
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/MySQLdb/cursors.py", line 319, in _query
    db.query(q)
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/MySQLdb/connections.py", line 254, in query
    _mysql.connection.query(self, query)
MySQLdb.IntegrityError: (1062, "Duplicate entry 'Electricity mix (BP & Ember, 2022)-energy' for key 'datasets.datasets_name_namespace_d3d60d22_uniq'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/prosado/Documents/owid/repos/etl/.venv/bin/etl", line 5, in <module>
    main_cli()
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/Users/prosado/Documents/owid/repos/etl/etl/command.py", line 119, in main_cli
    main(**kwargs)  # type: ignore
  File "/Users/prosado/Documents/owid/repos/etl/etl/command.py", line 147, in main
    run_dag(
  File "/Users/prosado/Documents/owid/repos/etl/etl/command.py", line 236, in run_dag
    time_taken = timed_run(lambda: step.run())
  File "/Users/prosado/Documents/owid/repos/etl/etl/command.py", line 243, in timed_run
    f()
  File "/Users/prosado/Documents/owid/repos/etl/etl/command.py", line 236, in <lambda>
    time_taken = timed_run(lambda: step.run())
  File "/Users/prosado/Documents/owid/repos/etl/etl/steps/__init__.py", line 503, in run
    dataset_upsert_results = upsert_dataset(
  File "/Users/prosado/Documents/owid/repos/etl/etl/grapher_import.py", line 93, in upsert_dataset
    ds = gm.Dataset.from_dataset_metadata(
  File "/Users/prosado/Documents/owid/repos/etl/etl/grapher_model.py", line 350, in upsert
    return session.exec(q).one()
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlmodel/orm/session.py", line 60, in exec
    results = super().execute(
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 1660, in execute
    ) = compile_state_cls.orm_pre_session_exec(
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/orm/context.py", line 316, in orm_pre_session_exec
    session._autoflush()
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 2257, in _autoflush
    util.raise_(e, with_traceback=sys.exc_info()[2])
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 208, in raise_
    raise exception
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 2246, in _autoflush
    self.flush()
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 3383, in flush
    self._flush(objects)
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 3523, in _flush
    transaction.rollback(_capture_exception=True)
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
    compat.raise_(
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 208, in raise_
    raise exception
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 3483, in _flush
    flush_context.execute()
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/orm/unitofwork.py", line 456, in execute
    rec.execute(self)
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/orm/unitofwork.py", line 630, in execute
    util.preloaded.orm_persistence.save_obj(
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/orm/persistence.py", line 245, in save_obj
    _emit_insert_statements(
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/orm/persistence.py", line 1238, in _emit_insert_statements
    result = connection._execute_20(
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1705, in _execute_20
    return meth(self, args_10style, kwargs_10style, execution_options)
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/sql/elements.py", line 333, in _execute_on_connection
    return connection._execute_clauseelement(
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1572, in _execute_clauseelement
    ret = self._execute_context(
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1943, in _execute_context
    self._handle_dbapi_exception(
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 2124, in _handle_dbapi_exception
    util.raise_(
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 208, in raise_
    raise exception
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1900, in _execute_context
    self.dialect.do_execute(
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute
    cursor.execute(statement, parameters)
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/MySQLdb/cursors.py", line 206, in execute
    res = self._query(query)
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/MySQLdb/cursors.py", line 319, in _query
    db.query(q)
  File "/Users/prosado/Documents/owid/repos/etl/.venv/lib/python3.9/site-packages/MySQLdb/connections.py", line 254, in query
    _mysql.connection.query(self, query)
sqlalchemy.exc.IntegrityError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely)
(MySQLdb.IntegrityError) (1062, "Duplicate entry 'Electricity mix (BP & Ember, 2022)-energy' for key 'datasets.datasets_name_namespace_d3d60d22_uniq'")
[SQL: INSERT INTO datasets (name, `shortName`, version, namespace, description, `createdAt`, `updatedAt`, `isPrivate`, `createdByUserId`, `metadataEditedAt`, `metadataEditedByUserId`, `dataEditedAt`, `dataEditedByUserId`, `nonRedistributable`, `isArchived`, `sourceChecksum`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)]
[parameters: ('Electricity mix (BP & Ember, 2022)', 'electricity_mix', '2022-08-03', 'energy', '', datetime.datetime(2022, 9, 20, 7, 17, 16, 824851), datetime.datetime(2022, 9, 20, 7, 17, 16, 824851), 0, 58, datetime.datetime(2022, 9, 20, 7, 17, 16, 824856), 58, datetime.datetime(2022, 9, 20, 7, 17, 16, 824857), 58, 0, 0, None)]
(Background on this error at: https://sqlalche.me/e/14/gkpj)

Query:
select id, name, shortName, version from datasets where name = 'Electricity mix (BP & Ember, 2022)';

Result:
5678	Electricity mix (BP & Ember, 2022)	electricity_mix__energy_2022_08_03	2022-08-03

Query:
select id, name, shortName from variables where datasetId = 5678;

Result:
471881	Electricity from bioenergy (TWh)	bioenergy_generation__twh
471882	Bioenergy (% electricity)	bioenergy_share_of_electricity__pct
471883	Carbon intensity of electricity (gCO2/kWh)	co2_intensity__gco2_kwh
471884	Electricity from coal (TWh)	coal_generation__twh
471885	Coal (% electricity)	coal_share_of_electricity__pct
471886	Electricity from fossil fuels (TWh)	fossil_generation__twh
471887	Fossil fuels (% electricity)	fossil_share_of_electricity__pct
471888	Electricity from gas (TWh)	gas_generation__twh
471889	Gas (% electricity)	gas_share_of_electricity__pct
471890	Electricity from hydro (TWh)	hydro_generation__twh
471891	Hydro (% electricity)	hydro_share_of_electricity__pct
471892	Low-carbon electricity (TWh)	low_carbon_generation__twh
471893	Low-carbon electricity (% electricity)	low_carbon_share_of_electricity__pct
471894	Net electricity imports as a share of demand (%)	net_imports_share_of_demand__pct
471895	Electricity from nuclear (TWh)	nuclear_generation__twh
471896	Nuclear (% electricity)	nuclear_share_of_electricity__pct
471897	Electricity from oil (TWh)	oil_generation__twh
471898	Oil (% electricity)	oil_share_of_electricity__pct
471899	Other renewables excluding bioenergy (TWh)	other_renewables_excluding_bioenergy_generation__twh
471900	Other renewables excluding bioenergy (% electricity)	other_renewables_excluding_bioenergy_share_of_electricity__pct
471901	Other renewables including bioenergy (TWh)	other_renewables_including_bioenergy_generation__twh
471902	Other renewables including bioenergy (% electricity)	other_renewables_including_bioenergy_share_of_electricity__pct
471903	Bioenergy electricity per capita (kWh)	per_capita_bioenergy_generation__kwh
471904	Coal electricity per capita (kWh)	per_capita_coal_generation__kwh
471905	Fossil fuel electricity per capita (kWh)	per_capita_fossil_generation__kwh
471906	Gas electricity per capita (kWh)	per_capita_gas_generation__kwh
471907	Hydro electricity per capita (kWh)	per_capita_hydro_generation__kwh
471908	Low-carbon electricity per capita (kWh)	per_capita_low_carbon_generation__kwh
471909	Nuclear electricity per capita (kWh)	per_capita_nuclear_generation__kwh
471910	Oil electricity per capita (kWh)	per_capita_oil_generation__kwh
471911	Other renewable electricity excluding bioenergy per capita (kWh)	per_capita_other_renewables_excluding_bioenergy_generation__kwh
471912	Other renewable electricity including bioenergy per capita (kWh)	per_capita_other_renewables_including_bioenergy_generation__kwh
471913	Renewable electricity per capita (kWh)	per_capita_renewable_generation__kwh
471914	Solar electricity per capita (kWh)	per_capita_solar_generation__kwh
471915	Per capita electricity (kWh)	per_capita_total_generation__kwh
471916	Wind electricity per capita (kWh)	per_capita_wind_generation__kwh
471917	Electricity from primary energy consumption (twh) (TWh)	primary_energy_consumption__twh
471918	Electricity from renewables (TWh)	renewable_generation__twh
471919	Renewables (% electricity)	renewable_share_of_electricity__pct
471920	Electricity from solar (TWh)	solar_generation__twh
471921	Solar (% electricity)	solar_share_of_electricity__pct
471922	Electricity demand (TWh)	total_demand__twh
471923	Electricity as share of primary energy (%)	total_electricity_share_of_primary_energy__pct
471924	Emissions (MtCO2)	total_emissions__mtco2
471925	Electricity generation (TWh)	total_generation__twh
471926	Net imports (TWh)	total_net_imports__twh
471927	Electricity from wind (TWh)	wind_generation__twh
471928	Wind (% electricity)	wind_share_of_electricity__pct

I suppose I need to update my local grapher database, given that electricity_mix__energy_2022_08_03 is still the old short name. So would updating the grapher container solve the issue?

This seems very similar to #486 , where we wanted to update a variable but it failed when one was already in place.

I can reproduce it locally as well.

@pabloarosado yes, that's most likely the issue. You need to apply the migration in grapher or as you say, update the grapher container.
@larsyencken is your dataset using old format of short names with versions too or can you reproduce it after the migration?

Probably duplicate of https://github.com/owid/etl/issues/486

Thanks @Marigold, I've updated grapher and re-run the same grapher step, and now I get a slightly different error. Now it's not complaining about the dataset being duplicated, but the first variable being duplicated:
sqlalchemy.exc.IntegrityError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely)
(MySQLdb.IntegrityError) (1062, "Duplicate entry 'Electricity from bioenergy (TWh)-5678' for key 'variables.variables_name_fk_dst_id_f7453c33_uniq'")
[SQL: INSERT INTO variables (`datasetId`, name, `shortName`, description, unit, `createdAt`, `updatedAt`, coverage, timespan, `sourceId`, display, `columnOrder`, code, `shortUnit`, `originalMetadata`, `grapherConfig`, `catalogPath`, dimensions) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)]
[parameters: (5678, 'Electricity from bioenergy (TWh)', 'bioenergy_generation_twh', None, 'terawatt-hours', datetime.datetime(2022, 9, 20, 14, 40, 38, 660429), datetime.datetime(2022, 9, 20, 14, 40, 38, 660431), '', '1990-2021', 27045, '{"name": "Bioenergy", "shortUnit": "TWh", "unit": "terawatt-hours"}', 0, None, 'TWh', None, None, 'grapher/energy/2022-08-03/electricity_mix/electricity_mix', None)]
(Background on this error at: https://sqlalche.me/e/14/gkpj)

I've also tried pulling the latest grapher and running yarn runDbMigrations, but I still get the same issue.

Post grapher migration I also get the same issue as @pabloarosado above.

Thank you both, that SQL output helped a lot. It happens only for this dataset and the reason is that we use double underscore in column names, e.g. bioenergy_generation__twh. This double underscore then gets converted into a single underscore before inserting to DB...
Which is wrong behaviour in my opinion. It is still using the old slugify function instead of underscore function that keeps double underscores. I've created a PR that doesn't modify column name and matches on both single and double underscores when doing upserts. That should get rid of this error and correctly update short names on grapher upserts.

I'm thinking that maybe we should simply use single underscores everywhere. But if you disagree, feel free to ignore it.


feat (features): add initialize setup modal window

Description
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this cha
https://github.com/user-attachments/assets/16cb8f70-704b-4d1d-9400-8b546fb99f77
nge.
Fixes # (issue)
Type of change
Please delete options that are not relevant.

[ ] Bug fix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] This change requires a documentation update

Checklist:

[x] My code follows the style guidelines of this project
[x] I have performed a self-review of my own code
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[x] My changes generate no new warnings
[x] Any dependent changes have been merged and published in downstream modules

Task linked: CU-86c04vj8p Initial setup 2 steps window

:tada: This PR is included in version 2.130.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


feat: speed up GetDashboard() by only fetching last 30 days data

Part of: https://github.com/casdoor/casdoor/issues/3455
second optimize, only check 30 days data

@glenn0n can you test this 2nd PR?


docs(tutorial/4 - Directory and File Organization): describe your cha…

What kind of change does this PR introduce? (Bug fix, feature, docs update, ...)
What is the current behavior? (You can also link to an open issue here)
What is the new behavior (if this is a feature change)?
Does this PR introduce a breaking change?
Please check if the PR fulfills these requirements

[ ] The commit message follows our guidelines: https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#commit-message-format
[ ] Tests for the changes have been added (for bug fixes / features)
[ ] Docs have been added / updated (for bug fixes / features)

Other information:
…nge...

Hi @ZachLamb can you sign the CLA please so that we can merge your PRs?

@petebacondarwin , done. sorry about the delay!


DB:create_entry currently not availble under linux

See for this: https://github.com/blt4linux/blt4l/issues/70
The thing is, that you use it in the BLTMod.lua file.
Can we use a current workaround like this one to check if we are under a linux environment and just return nil in that function? Other mods, depending on DB:create_entry just not work by now iirc. But for now, it would be a nice to have function, so you could use the same mods folder structure for windows and linux.

Mostly you can blame overkill for not implementing that function.

Checking BLT.PlatformName would be the easiest way if you want to nil it out, though I believe RomanHargrave is working on adding that.

This is the best way of doing it https://github.com/JamesWilko/Payday-2-BLT-Lua/issues/52#issuecomment-327919680

Mod images will no longer be created if DB.create_entry does not exist. https://github.com/JamesWilko/Payday-2-BLT-Lua/commit/54fd0a0f1e097a63c6a9defe106c60af0d38c013


[Settings][ImageResizer] Add fallback encoder description

The ImageResizer provides the Fallback encoder setting. It is not obvious what it is a fallback for.
The documentation on Fallback encoding describes it.
Add a description to the setting to make it obvious and descriptive from the settings dialog setting alone.

Before:

After:

PR Checklist

[x] Closes: #32564
[x] Localization: All end user facing strings can be localized

Hello and thanks for your PR. I think the words between the brackets are confusing. Maybe try and make on sentence? Something like... "Used when encoder (for original format) has no write-support" ?

/azp run

I think the words between the brackets are confusing. Maybe try and make one sentence? Something like... "Used when encoder (for original format) has no write-support" ?

The terminology used in the section title and setting header is "encoder". An encoder is always encoding for writing.
What I tried to do was use that established terminology in the sentence, but provide details in parentheses in case the encoder/decoder terminology is not familiar.
Using "Used when encoder (for original format) has no write-support" is wrong and confusing to me. The encoder writes nothing. It encodes.
We have a decoder for the original format, but not an encoder.
If we leave out the parentheses it would still be correct.

I dropped the parens to

Used when missing encoder for original format


url_launcher: Add statusBarBrightness field to launch for iOS

Launching from a dark background to a light background webview doesn't automatically update the status bar on iOS.  Adds an optional argument to set the status bar color, and restore the previous value.
Fixes: https://github.com/flutter/flutter/issues/19172

This issue still exists: https://github.com/flutter/flutter/issues/105139


Syntax highlight issue

Description:
There is a issue with syntax highlighting as when there are more than one return type all the return types will color in yellow except the first one which is blue. Color code should be blue.
Steps to reproduce:
function getDatesFromDateRange(string startDate, string endDate, int monthVarience) returns [int|error, int|error, int|error, int|error] {     log:printDebug("Start date is: " + startDate + ". End date is: " + endDate + ". Month varience is: " + monthVarience.toString());     int|error startYear;     int|error startMonth;     int|error endYear;     int|error endMonth;     if (monthVarience == 0) {         [startYear, startMonth] = extractYearAndMonthFromString(startDate);     } else {         time:Time|error tempTime = time:parse(startDate,"yyyy-MM-dd");         if (tempTime is time:Time) {             time:Time adjustedTime = time:subtractDuration(tempTime, 0, monthVarience, 0, 0, 0, 0, 0);             string|error startPeriod = time:format(adjustedTime, "yyyy-MM-dd");             if (startPeriod is string) {                 [startYear, startMonth] = extractYearAndMonthFromString(startPeriod);             } else {                 return [stringTimeConversionError,                         stringTimeConversionError,                         stringTimeConversionError,                         stringTimeConversionError];             }         } else {             return [stringTimeConversionError,                     stringTimeConversionError,                     stringTimeConversionError,                     stringTimeConversionError];         }     }     [endYear, endMonth] = extractYearAndMonthFromString(endDate);     log:printDebug("Start year is: " + startYear.toString() + ". Start month is: " + startMonth.toString());     log:printDebug("End year is: " + endYear.toString() + ". End month is: " + endMonth.toString());     return [startYear, startMonth, endYear, endMonth]; }
Affected Versions:
Ballerina 1.0.1
Suggested Labels (optional):
Syntax Highlighting , Tooling
Suggested Assignees (optional):
@Nadeeshaan,  @kaviththiranga

@yashodgayashan Could you please also mention the development tool(vscode/IntelliJ IDEA) you are referring here? :)

I can reproduce this in vscode

Hi,
That is produced from vscode. Sorry for the late reply.
Thank you. Regards
On Mon, Dec 2, 2019 at 7:44 PM Kavith Thiranga Lokuhewage <
<EMAIL_ADDRESS>wrote:

I can reproduce this in vscode
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/ballerina-platform/ballerina-lang/issues/19645?email_source=notifications&email_token=AHYUDDHKQH6J53KJ5GWFEO3QWUJ45A5CNFSM4JGTNCC2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEFTTWYA#issuecomment-560413536,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AHYUDDES35ZPBXNHUC6JOCDQWUJ45ANCNFSM4JGTNCCQ
.

--
Thank you.
Regards,
U.L.Yashod Gayashan Perera,
Undergraduate,
Faculty of Information Technology,
University of Moratuwa.


Check ALL results pages for multi-degree students

It should be easy to extend the script to check the results page for multiple degrees in a single scrape. The default behaviour could be changed to checking ALL results pages, and people with old/inactive degrees could turn these off in the configuration.

Default behaviour to check all degrees implemented on rich-results branch. To keep it simple, the script sends separate notifications for each degree.
TODO: Make single-degree watching configurable (with 'all degree' behaviour the default).


Testing: Data Layer

Module requiements
- schemas
- already we have some tests, but need to be extended with more scenarios

BCDB

already we have some tests, but need to be extended with more scenarios
performance tests

Description
We need to make sure that all the requirements of the security layer are working as expected.
Deliverable

A full test plan in TestQuality tool with all related test cases (Linux, Mac, Windows).
After approving those test cases, You have to implement them and integrate them with zeroTest.

Waiting for BCDB refactor to be complete to start testing it.


fix: Upgrade express dependency to latest version

#minor
Description
This PR fixes the 'outputs backtracking regular expressions' issue with the path-to-regexp package by upgrading it to a safe version.
Specific Changes

Upgraded express dependency to the latest version 4.21.0 in botbuilder-dialogs-adaptive-runtime-integration-express and testing/bot-integration to upgrade the transitive dependency path-to-regex.

Testing
This image shows the safe version of the path-to-regex package being installed.

Pull Request Test Coverage Report for Build<PHONE_NUMBER>3
Details

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 84.407%

Totals

Change from base Build<PHONE_NUMBER>4:
0.0%

Covered Lines:
20433

Relevant Lines:
22910

💛  - Coveralls


Fixed regression Android - Chat - Message gets displayed from right to left

Details
The root cause is that Android only converts RTL text to LTR text using Unicode controls and by default, when you start writing in a language that is written in RTL mode it converts the input text to RTL.
Here we are fixing this regression, this was caused because we did not take into consideration when the composer load for the first time and the user started writing with @, we include the @ in the regular expression list to validate if the composer can be converted to LTR.
Fixed Issues
$ https://github.com/Expensify/App/issues/30584
PROPOSAL:  https://github.com/Expensify/App/issues/30584#issuecomment-1785494092
Tests

Launch App
Open any chat and paste an RTL text in the compose box, for example " مثال "
Continue typing some content

[x] Verify that no errors appear in the JS console

Offline tests
N/A
QA Steps
Test 1.

Launch App
Open any chat and paste an RTL text in the compose box, for example " مثال "
Continue typing some content

Test 2.

Launch App
Open any chat and type @, should show a suggestion list
Continue typing some content
Delete everything, the composer should show the placeholder.

Test 3.

Launch App
Open any chat and enter line breaks (to convert the composer into multiline)
Type spaces and @, check if everything works.

[x] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If the PR modifies the form input styles:

[x] I verified that all the inputs inside a form are aligned with each other.
[x] I added Design label so the design team can review the changes.

[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native
https://github.com/Expensify/App/assets/5216036/f74efade-7b17-4221-a7bc-d1374c8fedff

Android: mWeb Chrome
https://github.com/Expensify/App/assets/5216036/c7f8d66a-7cb6-4d36-baa2-c02aadb7b6c6

iOS: Native
https://github.com/Expensify/App/assets/5216036/00f76d31-5a82-4002-a21b-0e5e11fb4252

iOS: mWeb Safari
https://github.com/Expensify/App/assets/5216036/6469cf6b-19da-416b-b591-0e9d8a3d2a64

MacOS: Chrome / Safari
https://github.com/Expensify/App/assets/5216036/9ab3ca2f-dbb4-4a75-a3f9-5d1e7d1fde29

MacOS: Desktop
https://github.com/Expensify/App/assets/5216036/d148a790-f928-43cd-8fee-24778744f7b3

@samilabud Conflicts!

@samilabud Conflicts!

Done!, thank you for letting me know, I hadn't noticed 😅.

Hi @samilabud!
This is still not working as expected. Please check below.
https://github.com/Expensify/App/assets/30054992/06cceea8-2ae9-4a04-b293-e89d3b723e05

Hi @samilabud!
This is still not working as expected. Please check below.
Screen.Recording.2024-01-14.at.1.31.53.AM.mov

Thanks for testing!, I have fixed the -at/@- regex to take into consideration the mention/searching, please double check:
https://github.com/Expensify/App/assets/5216036/86345e10-0c23-4f59-a2fd-81cc71e35f49

Reviewing again tomorrow.

@samilabud I am still seeing the following two errors:
https://github.com/Expensify/App/assets/30054992/d86f82f1-73a6-474c-adef-fb20c8994f3d
https://github.com/Expensify/App/assets/30054992/c9856bda-4569-4cca-9663-d2f95f83b9e5
At this point, since we have gone back and forth across this several times now, I think its not worth spending more of our time on this.

@allroundexperts I understand your point and I'm sorry for this back and forth, in my defense according to my tests of the first video bug can be reproduced in the Main branch, and the second is because the colon character was not in the list of allowed not to convert the input to RTL, if there are more characters like @ or : that trigger other events would be good to know to add them all to the list.
Result with the colon added:
https://github.com/Expensify/App/assets/5216036/1d063bc0-1c8b-4221-8934-58ec26193af8

Another bug @samilabud:
https://github.com/Expensify/App/assets/30054992/1e7a51b0-629e-49ce-a6f5-61c071dd3bdb

Another bug @samilabud:
Screen.Recording.2024-02-01.at.2.30.53.AM.mov

OMG 😣, it's fixed now.
Note: This strange behavior was happening even with @ (when tagging), because the LTR conversion was being called twice because the regular expression was only being taken into account for when to start writing in the composer.
Result:
https://github.com/Expensify/App/assets/5216036/6b98efa9-350f-4033-a629-485e4385ccdb

What's the status of this PR? Are there any plans to finish it?

This can be closed given we've closed the issue as well.

Hi @samilabud!
Can you please close this PR?


[bindings] [sample models] Manage deprecation and overloads in python

Correct the bindings for the newly-introduced models.

expose buildSampleModelHumanoidRandom in python
deprecate buildSampleModelHumanoidSimple in python
deprecate static method Model.BuildHumanoidSimple in python
add overloads for buildSampleModelHumanoid and buildSampleModelHumanoidRandom in python (for usingFF)

Two observations:

buildSampleModelHumanoidSimple was introduced by @nmansard in his last commits. Since it calls a function which is deprecated in C++, I thought it should be deprecated in python too. Until now, the way to create a simple humanoid in python was to call static method Model.BuildHumanoidSimple, which was calling the deprecated C++ function. It needs to be deprecated too if the warning has to appear in existing python code. Also, I think the pattern se3.buildSampleModelXXX is much better than se3.Model.BuildXXX. @nmansard's latest commit was going in this direction
If you agree, I would also deprecate Model.BuildEmptyModel, replacing it with se3.buildEmptyModel. Or, better, providing no replacement, since the empty constructor Model() is enough

Done. I also fixed a couple of other doxygen comments in C++, as they were not correct.
Other observation: right now, buildSampleModelHumanoidRandom(false) uses 3 prismatic and 3 revolute joints. This changes not only the joint configuration, but also the total number of joints, the name of the "root" joint, and the inertial properties of the model. If we want to keep a random humanoid, I think it should do as the newly-introduced buildSampleModelHumanoid(false), with a JointModelComposite (JointModelTranslation+JointModelSphericalZYX). However, I think it will be removed soon, therefore I did not go through the hassle of changing it and checking all tests still work (they should though).


do not support jaguarjs-jsdoc

It is not work with jaguarjs-jsdoc.
src/jsdocConfig.json
{
  "tags": {
    "allowUnknownTags": true
  },
  "source": {
    "excludePattern": "(^|\\/|\\\\)_"
  },
  "opts": {
    "destination": "./docs/gen"
  },
  "plugins": [
    "plugins/markdown"
  ],
  "templates": {
    "cleverLinks": false,
    "monospaceLinks": false,
    "default": {
      "outputSourceFiles": true
    },
    "path": "ink-docstrap", // here, i changed to jaguarjs-jsdoc, but it don't work .
    "theme": "cerulean",
    "navType": "vertical",
    "linenums": true,
    "dateFormat": "MMMM Do YYYY, h:mm:ss a"
  }
}

i can not find any code to process templates.path, but in file 'gulp-jsdoc3/dist/gulp-jsdoc.js', i find this:
 // Config + ink-docstrap if user did not specify their own layout
   if (!jsdocConfig.templates || !jsdocConfig.templates.default || !jsdocConfig.templates.default.layoutFile) {
        args = args.concat(['-t', inkdocstrap]);
   }

Hi,
Can you removing the line: args = args.concat?
Then add the following to your config:
  "opts": {
    "destination": "./docs/gen",
    "template": "/full/path/to/..../node_modules/jaguarjs-jsdoc"
  },

Per: http://usejsdoc.org/about-configuring-jsdoc.html#incorporating-command-line-options-into-the-configuration-file
If that works, I'll add a fix. I noticed that jaguarjs-jsdocs does produce an index that is similar to ink-docstrap in that it is missing my modules when I do it like that. Not sure if that's intended or not.

I had the same issue, commenting out
args = args.concat(['-t', inkdocstrap]);

And using
template: 'node_modules/docdash'

Worked for me.  Look forward to a fix.

Same here, commenting out the args.concat line, and passing in an opt.template works for me as well. Would love to see a fix as well.

Was this fixed? How can someone use a different theme?


Node mismatch with multiple m-if nodes

When m-if is used multiple times, the node in the data of m.emptyVNode changes and can lead to an inconsistency after hydration (when diffing).

I think this bug is still persist, i'm still pinpointing the problem so i can reproduce it in simple fiddle.


create SQL database

create a sql database for storing all the image and annotation info

Data collection and storage

SQL vs filesystem

COCO - Common Objects in Context
COCO - Download
COCO - data format
cocoapi/pycocoDemo notebook
cocodataset/cocoapi: COCO API - Dataset
cocoapi/coco.py

Installing local postgresql db on external HD
Looks like I just need to make sure the db file is on the external hd to run it from there....
maybe there's a guide for setting this up?

didn't get external HD installation but database created within root partition. Moving on for now...


Table View Data Exploration

Typical data exploration steps

go to table view
group by dimensionD1
find valueV1 interesting in dimensionD1
add filter dimensionD1=valueV1 and replace dimensionD2 in the group by clause.

Can we have nice way of doing this with UI ?
I'm thinking on the table view, on-clicking on any Cell, there can be dropdown to select dimensionD2, on selecting which filter & dimension will be replaced.
@mistercrunch  RFC.

+1, can we explore the data in table directly but not with group by?


made the select focus on pressing tab, added navigation by arrowkeys …

@fadiDL
DlMenu actually doesn't have any list-like structure inside it, all it shows is the slot you pass to it, so I don't think it would be possible to build the navigation directly inside the menu.

@prodan-eric what i meant by genaralize this is to allow other components that use menu like in a popup (portal) to have the arrow keys available. in this case we have to add this functionality to all components that have suggestions / menus that we want manually which is fine.
if thats the case add it as a hook so we can integrate it anywhere easily


Database file versioning

Description
Database files should store a version number. This can be used to track changes in the database file format.
In the future, we may use the version stored in this file to alert the user of backwards-incompatible changes or provide ability to migrate data.
Success criteria (What criteria will consider this ticket closeable?)

[ ] When creating a database, a file is created inside the database directory called metadata.toml containing a field called "version" which is the value of main.Version.

For now, let's write current version to a log file within the data directory on startup.
2018-05-17T05:18:34 v0.8.1-g45aeb9
2018-05-17T05:19:54 v0.8.1-g45aeb9
2018-05-17T06:07:21 v0.8.2-g8aafae


Panic on request

Similar to #7 and #4
Issue happens when I make a GET request to /ping
NodeMCU <IP_ADDRESS> build unspecified powered by Lua 5.1.4 on SDK <IP_ADDRESS>(39cb9a32)
In handler routes_auto.lc
Next handler http_default_handler.lc will be after routes_auto.lc
Server listening on port 80
Available memory is 26848 bytes.
> Begin Http request
Connection initialized with id 691
Request callbacks have been set. Available memory: 27632 bytes
Processing element 691
Request received: 	GET	/ping
Error occured during execution: ?:0: attempt to concatenate a nil value
PANIC: unprotected error in call to Lua API (bad argument #2 to 'on' (function or lightfunction expected, got nil))

List of uploaded files
	  |- init.lua (365 Bytes)
	  |- http-404 (19 Bytes)
	  |- http-302 (26 Bytes)
	  |- http_default_handler.lc (180 Bytes)
	  |- http_response_sendfile.lc (1536 Bytes)
	  |- espress_init.lc (1680 Bytes)
	  |- routes_auto.lc (932 Bytes)
	  |- http-200 (12 Bytes)
	  |- routes/ping.get.lc (280 Bytes)
	  |- router.lc (864 Bytes)
	  |- http-405 (27 Bytes)
	  |- http_request.lc (660 Bytes)
	  |- http-401 (21 Bytes)
	  |- http_response.lc (520 Bytes)
	  |- espress.lc (2860 Bytes)
	  |- http-400 (20 Bytes)
	  |- http_request_buffer.lc (680 Bytes)
	  |- http_prototypes.lc (944 Bytes)
	  |- ping.get.lc (248 Bytes)
	  |- http_request_processor.lc (672 Bytes)
	  |- http_response_send.lc (748 Bytes)
	  |- type-json (40 Bytes)
	  |- http-503 (28 Bytes)
	  |- http-500 (30 Bytes)
	  |- http-403 (18 Bytes)
	  |- http_getondata.lc (472 Bytes)
	  |- auth_api_key.lc (756 Bytes)

init.lua
espress = require 'espress'

function initialConnection()
    wifi.setmode(wifi.STATIONAP)

    -- Setup as Access Point
    wifi.ap.config({
        ssid = "Hame-Hue-Switch",
        pwd = "hamepassword",
        auth = wifi.OPEN
    })

    local server = espress.createserver();

    server:use("routes_auto.lc")

    server:listen(80);
end

initialConnection()

routes/ping.get.lua
return function(req, res)
    res:addheader("Content-Type", "application/json; charset=utf-8")
    res:send("{device: \Light Switch\"}")
end

Just realised I should be hitting /api/ping, when I do that it's loading my route file ok, but it seems to be after that the panic occurs but slightly different this time
Error occured during execution: bad argument #2 to 'on' (function or lightfunction expected, got nil) PANIC: unprotected error in call to Lua API (bad argument #2 to 'on' (function or lightfunction expected, got nil))

Hi @Johnathan , I see you are using an old version of NodeMCU.
Would you be able to upgrade to NodeMCU 2.X?

Yep, that's it sorted now sorry. I mistook the version of the library for the supported version of nodemcu.
Thanks for the speedy reply

No worries! Glad I could be of help. Have fun with the library, your feedback is welcome if you like it!


Cleanup cout in State Transition

These print-outs were introduced during development/debugging for the hardware. Now they can be removed unless objected.


Fix mergify condition

With the change of #5439, mergify complains its configuration is invalid:

Invalid condition 'closed=false'. Expected end of text, found '=' (at char 6), (line:1, col:7) @ pull_request_rules → item 1 → conditions → item 1

I can read that we have to use '-' prefix instead of '=' operator for negating a boolean condition: 🤔
https://docs.mergify.io/conditions/#grammar

mergify still says the same error...

mergify validator says -closed is valid and closed=false is invalid.
https://docs.mergify.io/configuration/#validation
Seems that .mergify.yml in the default branch is used.
https://docs.mergify.io/configuration/#file-used

I've rolled back this change to 86acd63. Would you merge this into the master once to see if it works?

@kmaehashi Failed to backport automatically.

Not cleanly cherry-picked


 Got error: 1 error occurred:
error 1:
ssh.StreamStdin failed: ssh.Session.Run failed: EOF

We don't understand why this happens but the tar file seems to be intact and can be extracted without errors. The file also gets fully extracted on the nfs_server

Hi @mayrstefan This sounds like a reasonable fix.
We are finishing a couples of fixes to our pipelines and will merge it asap.
Thanks for the PR!


Updated chains zip file

After #6106
chains.zip in Resources have been updated.

@eviltofu actually, this PR can be merged before #6106 if it only contains the commit "Updated chains.zip file"

Force-pushed after rebase master


Result Table Order Change on Tab Change

Azure Data Studio Version: 1.4.2-Insider

Steps to Reproduce:

Open a query window, have 2+ select statements ready and execute
(Current result in result section is as following)
Result for Query 1
Result for Query 2
Result for Query 3
Switch to a new tab
Switch back to the previous tag
The result will switch to
Query 3
Query 2
Query 1
(Switching tab again at this point will not change the order any further)

@anthonydresser this looks like a regression since the Jan release.  Could you please take a look?

I think I know whats the cause. Just need to reverse the order on the repopulation code. I can send a PR out today


Dev

change workcell_config.json to workcell.yaml;
refactor workcell core module to support load from config;

change workcell_config.json to workcell.yaml;
refactor workcell core module to support load from config;


E117: Unknown function: StatusBar

I recently migrated my old vimrc (with legacy script) to new vim9. Now when I tried to use my StatusBar() function in statusline, Vim9 gave me this error.
def StatusBar(): string
    var s = ''
    s ..= ' '

    if FugitiveIsGitDir()
      s ..= FugitiveHead()
    else
      s ..= '%f'
    endif

    s ..= '%='

    s ..= 'L: %l (%L), C: %v'
    s ..= '  '
    s ..= toupper(&enc)
    s ..= '  '
    s ..= '%Y'
    s ..= ' '

    return s
enddef

set statusline=%!StatusBar()

All items are local to the script by default.  That includes your StatusBar() function.  But the 'statusline' option is processed in global context, where script-local items are not accessible.
Make your StatusBar() function global, so that it can be accessed in global context.  Also, prefix the calls to the Fugitive*() functions with g: so that no error is given at compile time (alternatively, you could try exists_compiled()).
--- /tmp/vimrc	2022-08-20 19:06:15.139294109 +0200
+++ /tmp/fixed_vimrc	2022-08-20 19:06:32.591246454 +0200
@@ -1,9 +1,9 @@
-def StatusBar(): string
+def g:StatusBar(): string
     var s = ''
     s ..= ' '

-    if FugitiveIsGitDir()
-      s ..= FugitiveHead()
+    if g:FugitiveIsGitDir()
+      s ..= g:FugitiveHead()
     else
       s ..= '%f'
     endif
@@ -20,4 +20,4 @@
     return s
 enddef

-set statusline=%!StatusBar()
+set statusline=%!g:StatusBar()

But the 'statusline' option is processed in global context, where script-local items are not accessible.

I wonder whether that should be documented.  There is this at :help 'statusline':

Note that the "%!" expression is evaluated in the context of the
current window and buffer, while %{} items are evaluated in the
context of the window that the statusline belongs to.

But that doesn't explain that we're limited to a global function (or autoload function, which is similar).


eks-distro-base: validate libraries exist in minimal images

Issue #, if available:
Description of changes:
For minimal images, and in a few projects which base off minimal images adding additional packages, we sometimes intentionally exclude certain packages.  We ran into an issue recently when creating an image with wget where a package was left out that was necessary for wget to run.  Using ldd is an easy way to see what runtime deps a given binaries has.  The problem is ldd and other tools are not included in the minimal images.  This makes using ldd to verify a manual, error-proned, process.  This PR adds a script/target which copies the root of a minimal image back to al2 and uses ldd to ensure all binaries from the minimal root have access to all the necessary deps in the minimal root.
This is something we could/should add to the build-tooling repos as well to check downstream images.
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

/unhold


Multi-instance API discussion

We already have an implementation of multiple CCDirector instances in develop branch. There is stack type of situation.
While it seems to be a clever solution it might be confusing a little bit for newcomers that only want to have single Cocos2D instance to see something like
CCDirector pushDirector
CCDirector popDirector
That is why I guess we should discuss if there any other way to find a solution or at least syntax sugar for accessing the director.
I have a little bit of a thought on that. Right now every node having a reference to it's scene. Why not add director reference to the scene, so it can be accessed by:
node.scene.director
I think it can be useful sometimes, but that is of course debatable.

Stack of directors is a super bad idea, since we end up with global state again. scene.director is much much better. But look at SpriteKit, it hasn't SKDirector, all its functionality is moved to SKView. So should we have both CCDirector and CCView? Maybe they should be merged?


Opening a new terminal window does not restore the previous window's size and position on the screen

Windows Terminal version
1.13.10395.0
Windows build number
10.0.19044
Other Software
No response
Steps to reproduce

Open Terminal
Resize and reposition window
Close window
Open Terminal again

Expected Behavior
Terminal would open the window in the same position and size
Actual Behavior
The position and size are reset.
Note: I am not referring to session restore on start-up like you'd find in a web browser that can be enabled optionally. I'm referring to regular behaviour that people expect on desktop operating systems. And in particular, this makes it easier to use on smaller screens such as laptops.

Do you have window layout saving enabled? In Settings -> Startup -> "When Terminal starts" select the "Open windows from a previous session" option.

https://docs.microsoft.com/en-us/windows/terminal/customize-settings/startup#behavior-when-starting-a-new-terminal-session

Do you have window layout saving enabled? In Settings -> Startup -> "When Terminal starts" select the "Open windows from a previous session" option.

I don't want that, nor should I need that enabled to have this.

Alright so this is a new feature request - a setting to use the initialPosition, initialSize in state.json instead of the ones in the settings file. I suppose that could be a checkbox within the Launch Size expander. Ah, but then we've got the trick that we'd want one checkbox for "use previous position" and another for "use previous size". (admittedly, initialPosition isn't in the SUI yet, #9075). Then there's also the complicating factor that enabling "Open windows from a previous session" would spooky-action-at-a-distance check and disable those boxes.
So then it makes more sense to put this as another radio option in "When Terminal starts...". Or like, a checkbox under the "Open a tab with the default profile", that only ~reveals~enables itself when that radio button is selected? (hiding itself would be terrible discoverability)

An option doesn't really make sense to me. I don't really want anything complicated. I just want the default windowing behaviour I've come to expect from other apps. 🤷

We already have some other settings to control where the window is positioned and how big it is, so already we're off the rails of "other apps". I'm of the strong opinion that user preference is king - I'd love to give everyone as many knobs to control the Terminal as possible, to make it work exactly like they'd like.

Good defaults are always nice tho :)

I agree, it should just work  its standard windows behaviour. Should respect the monitor it was on as well. Let people override if required but please follow principle of least surprises.

Discussion outcome: This probably needs a miniature spec (AKA: we agree on it in the issue, and check in a quick markdown document about it) as the team couldn't come to consensus on whether this is a firstWindowPreference or a launchPosition, and whether this is part of or not a part of the session restoration code.

Thanks for bringing the outcome here!

Hah just came here to report this, I was thinking of two suggestions:

Option to always spawn at a set of coordinates OR at the center of the screen
Remember position properly

FWIW:
Option to always spawn at a set of coordinates  OR at the center of the screen are already settings.
Unifying those two with bullet point 2 is the one that this issue is tracking - finding a good way of exposing that setting to the user both as a UI and in json is the hard part.

FWIW:
Option to always spawn at a set of coordinates OR at the center of the screen are already settings.
Unifying those two with bullet point 2 is the one that this issue is tracking - finding a good way of exposing that setting to the user both as a UI and in json is the hard part.

Oh my bad, sorry. I didn't see it in the UI options.

Any updates here?

Nope. We'll make sure to update this thread when there is. In the meantime, might I recommend the Subscribe button?

That way you'll be notified of any updates to this thread, without needlessly pinging everyone on this thread ☺
As it stands, this issue remains at:

Discussion outcome: This probably needs a miniature spec (AKA: we agree on it in the issue, and check in a quick markdown document about it) as the team couldn't come to consensus on whether this is a firstWindowPreference or a launchPosition, and whether this is part of or not a part of the session restoration code.

If someone wants to sort out how exactly this should be implemented, we'd be more than happy to review a writeup ☺

If someone wants to sort out how exactly this should be implemented, we'd be more than happy to review a writeup ☺

FWIW, and when it comes to the implementation specifically, I believe this should use the GetWindowPlacement and SetWindowPlacement APIs. Those have been in use by other HWND applications for this purpose since forever.

Is this still an open bug?  I'm unable to get wt to open on any monitor but the primary, without hard-coding an absolute position.
Windows Version   10.0.19045 Build 19045
Windows Terminal Version 1.17.11461.0
settings.json:
    "initialPosition": ",",
    "launchMode": "default",
    "firstWindowPreference": "defaultProfile",
    "centerOnLaunch": false,

Steps to reproduce:

Start windows terminal from shortcut on desktop of monitor two.
( Shortcut points to %LOCALAPPDATA%\Microsoft\WindowsApps\wt.exe)
terminal opens on monitor one.
drag window to monitor two.
Close window via any method. (tested all of:  window-close widget, tab-close widget, alt+F4. typing "exit" in terminal)
Start windows terminal from shortcut on monitor two.

Expected behaviour:
terminal opens on monitor two, with previous state
Observed behaviour:
terminal opens on monitor one in a "default" state.  (though not one explicitly set)
note:  as alluded to above, I worked around this bug by hard-coding a window position, but now if I start a second terminal instance, it perfectly overlaps the first, instead of being offset by ~50px as usually happens when letting Windows decide.


Delete outdated notice

NOTICE is outdated and not used anymore
(all required dependencies are seen up-to-date in package manager files, and exact transitive dependencies depend on the build environment, and as such can not be documented in code anyway. For our release artifacts we DO generate sboms, and add them to the artifacts where they belong)

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 48.74%. Comparing base (e628c46) to head (3a80326).
Report is 4 commits behind head on main.

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@            Coverage Diff             @@
##             main      #13      +/-   ##
==========================================
+ Coverage   48.61%   48.74%   +0.12%
==========================================
  Files          31       31
  Lines       10879    10839      -40
==========================================
- Hits         5289     5283       -6
+ Misses       5590     5556      -34

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

If we are to remove NOTICE.md we should also remove it from https://github.com/eclipse-kuksa/kuksa-databroker/blob/main/.github/workflows/create_draft_release.yml#L93, then running that workflow should be no problem. It "entered" the release as the release action I created was based on https://github.com/eclipse/kuksa.val.services/blob/main/.github/workflows/release.yml where we also include NOTICE.md
But I am not sure if we "just" shall delete it. First, many of our license headers as of today refer to the NOTICE file like this:
https://github.com/eclipse-kuksa/kuksa-databroker/blob/main/databroker/src/broker.rs
/********************************************************************************
* Copyright (c) 2022 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
*
* This program and the accompanying materials are made available under the
* terms of the Apache License 2.0 which is available at
* http://www.apache.org/licenses/LICENSE-2.0
*
* SPDX-License-Identifier: Apache-2.0
********************************************************************************/

If using our style of copyright line it seems to be recommended practice to have a NOTICE file, see https://www.eclipse.org/projects/handbook/#ip-copyright-headers. For kuksa-incubation we have a NOTICE as well, but without third party info. So should we note have a notice file and include it in the release as long as we refer to it from license headers, as it says "See the NOTICE file(s) distributed with this work"
The Eclipse recommendations on Notice file seem to be quite rigid and possibly outdated if a project auto-generate SBOMs. A pragamatic way if we decide to keep the NOTICE file could possibly be to instead of stating third party licenses explain where to find that info, i.e. explain how/where you can find the data for a specific release, latest main or your specific build.
I think some decision would be good. Either we

Done, still needs a "fresh" approve


Gitea integration using wrong URLs

I am running a drone ci instance using the following docker-compose.yml
version: '2'

networks:
  drone:
    external: false
  proxy:
    external:
      name: proxy

services:
  drone-server:
    image: drone/drone:0.8
    expose:
      - 8000
      - 9000
    volumes:
      - ./drone:/var/lib/drone/
    restart: always
    networks:
      - proxy
      - drone
    environment:
      - DRONE_OPEN=true
      - DRONE_HOST={{REMOVED}}
      - DRONE_SECRET={{REMOVED}}D
      - DRONE_GITEA=true
      - DRONE_GITEA_URL={{REMOVED}}
      - DRONE_GITEA_GIT_USERNAME=Drone
      - DRONE_GITEA_GIT_PASSWORD={{REMOVED}}
      - DRONE_GITEA_PRIVATE_MODE=true

  drone-agent:
    image: drone/agent:0.8

    command: agent
    restart: always
    networks:
      - drone
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_SERVER=drone-server:9000
      - DRONE_SECRET={{REMOVED}}

After pushing into a activated repository Gitea shows the build status.

If the build succeeded the URL is working as expected (Redirecting to the defined DRONE_HOST)
But if a build is still pending or fails the URL redirects to http://drone-server:8000/
I don't think this is an intended behavior.
If you need any other details or configuration, let me know.

Hey there, we provide end-user support in our mailing list. Can you please start a thread? Thanks! https://discourse.drone.io/


[$500] Prevent nested markdown

We've been running into all sorts of issues by allowing nested markdown rules.
Ex: https://github.com/Expensify/App/issues/23034
Context: https://expensify.slack.com/archives/C01GTK53T8Q/p1694011229493309
As one of the new rules, let's prevent nested markdown
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~01f8d855ec7167b7ca
Upwork Job ID:<PHONE_NUMBER>058772480
Last Price Increase: 2023-09-12

Just to clarify is Hello world also nested markdown? Or is it only for cases with code-fence?

Good question, I think code fence situations only

Proposal
Please re-state the problem that we are trying to solve in this issue.
Prevent nested markdown in code blocks
What is the root cause of that problem?
I tested all combinations with nested code blocks and it looks like only strikethrough is applied to nested code blocks.
For example here are results of doing *```bold```*, _```italic```_, ~```strike```~

This is because in all other cases except strike-through we are checking if nested content contains <pre>, which means codeblock, we do not apply the styling.
https://github.com/Expensify/expensify-common/blob/35bff866a8d345b460ea6256f0a0f0a8a7f81086/lib/ExpensiMark.js#L209
Only in strikethrough we do not have this condition
https://github.com/Expensify/expensify-common/blob/35bff866a8d345b460ea6256f0a0f0a8a7f81086/lib/ExpensiMark.js#L214
What changes do you think we should make in order to solve the problem?
I think adding g1.includes('<pre>')  condition should resolve the issue:
  replacement: (match, g1) => (g1.includes('<pre>') ||this.containsNonPairTag(g1) ? match : `<del>${g1}</del>`)

What alternative solutions did you explore? (Optional)

@thienlnam This issue is mistitled, you are talking about fenced code blocks nested in markdown (inlines), not the other way around.

@parasharrajat Do you suggest extending the scope of this issue and closing the other one?

Hey @parasharrajat any update here?

Not overdue, @parasharrajat let us know he would be OOO.

Het @parasharrajat I believe you're back -- any update on this?

Bump on this again @parasharrajat! Just want to check -- are you working on a PR for this (i.e. fixing it yourself)? Should we still be collecting proposals, or is this more of a tracking issue (and thus should be moved to Weekly) at this time?

Hey @parasharrajat bump on my earlier question:

Bump on this again @parasharrajat! Just want to check -- are you working on a PR for this (i.e. fixing it yourself)? Should we still be collecting proposals, or is this more of a tracking issue (and thus should be moved to Weekly) at this time?

Sounds good @parasharrajat, will remove the Help Wanted label since it sounds like you will be raising the PRs!

Hey @parasharrajat any update on this? Seeing as this we're treating this as more of a project and it doesn't have any impact on functionality, I'm going to move this to Weekly

Bump @parasharrajat, any update?

Hey @parasharrajat it's been a while -- can you give an update please?

Bumped @parasharrajat for an update in Slack: https://expensify.slack.com/archives/C01GTK53T8Q/p1701217378545439

Looks like this issue was resolved in https://github.com/Expensify/App/issues/24281 which applied the same solution as I proposed.

This was closed without fixing the other linked issue https://github.com/Expensify/App/issues/26941


Add examples using robolectric @Config

Useful to show configuring the screen for different devices. Round vs Square watch.
These qualifiers should also affect which resources are loaded
@Config(
    sdk = [30],
    qualifiers = "w221dp-h221dp-small-notlong-notround-watch-xhdpi-keyshidden-nonav"
)

@Config(
    sdk = [30],
    qualifiers = "w221dp-h221dp-small-notlong-round-watch-xhdpi-keyshidden-nonav"
)

We could provide constants for known devices, similar to Paparazzi, and Android Studio.
@Preview(device = Devices.NEXUS_5X)

And config in https://cs.android.com/android-studio/platform/tools/adt/idea/+/mirror-goog-studio-main:artwork/resources/device-art-resources/wearos_small_round/layout
https://github.com/cashapp/paparazzi/blob/c10c435bd30025f3b5da64f846c6ecbd66d54515/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/DeviceConfig.kt#L475
https://android.googlesource.com/platform/tools/base/+/mirror-goog-studio-master-dev/sdklib/src/main/java/com/android/sdklib/devices/wear.xml

We could provide constants for known devices, similar to Paparazzi, and Android Studio.
@Preview(device = Devices.NEXUS_5X)

And config in https://cs.android.com/android-studio/platform/tools/adt/idea/+/mirror-goog-studio-main:artwork/resources/device-art-resources/wearos_small_round/layout
https://github.com/cashapp/paparazzi/blob/c10c435bd30025f3b5da64f846c6ecbd66d54515/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/DeviceConfig.kt#L475
https://android.googlesource.com/platform/tools/base/+/mirror-goog-studio-master-dev/sdklib/src/main/java/com/android/sdklib/devices/wear.xml

That is actually sth I’m releasing next week:
https://twitter.com/gio_sastre/status/1649073964617019400?s=46&t=ljy1XQW5SI3KUXpinEKEow
in this library:
https://github.com/sergio-sastre/AndroidUiTestingUtils
However, that is sth that would depend on ActivityScenario. So I believe, it might make sense to have this directly in Roborazzi?
It’s indeed very straightforward to implement.

Is this what you mean? I think it would be very useful to have.
object RobolectricDeviceQualifiers {
  const val NEXUS_5X = "w320dp-h540dp-xxxhdpi..."
...
}

Yep.
I don't know whether you need some data model for devices with different properties, but this is what I was asking for.
A data model might be useful for non robolectric running, or to copy and adjust. But robolectric has those APIs.

If we use the annotations provided by Robolectric, they don't allow us to implement methods similar to a builder. Consequently, we have no choice but to use constants. We can also use RuntimeEnvironment.setQualifiers("+land"). However, if the test is initiated by a Rule, the activity might already be started.
https://robolectric.org/device-configuration/
Nevertheless, we sometimes wish to conduct tests with variations, such as for smartphones and tablets.
This is indeed a challenging issue, but for now, I think it's acceptable to have some constants in place.

We can implement something similar to the example below. However, I believe it may not be the best solution.
fun test() {
...
}

@Config(
    sdk = [30],
    qualifiers = "w221dp-h221dp-small-notlong-notround-watch-xhdpi-keyshidden-nonav"
)
@Test
fun testRound() = test()
@Config(
    sdk = [30],
    qualifiers = "w221dp-h221dp-small-notlong-round-watch-xhdpi-keyshidden-nonav"
)
@Test
fun testNotRound() = test()

I think this is useful 👀
https://android.googlesource.com/platform/tools/base/+/mirror-goog-studio-master-dev/sdklib/src/main/java/com/android/sdklib/devices/nexus.xml#2837

It seems that the x and y dimensions (width and height) are in pixels, and you need them in dpi (that’s what Robolectric supports).
Moreover, only a few device characteristics are configurable via qualifiers.

If we use the annotations provided by Robolectric, they don't allow us to implement methods similar to a builder. Consequently, we have no choice but to use constants. We can also use RuntimeEnvironment.setQualifiers("+land"). However, if the test is initiated by a Rule, the activity might already be started.
https://robolectric.org/device-configuration/
Nevertheless, we sometimes wish to conduct tests with variations, such as for smartphones and tablets.
This is indeed a challenging issue, but for now, I think it's acceptable to have some constants in place.

That’s true, that’s why to do it dynamically, it must be linked to the ActivityScenarioTestRule.
but the solution with the constants is already a good improvement over the standard Robolectric solution imho 😊

I'm nearly finished with the task. It's harder than I thought. 😅
package com.github.takahirom.roborazzi

import java.io.File
import javax.xml.parsers.DocumentBuilderFactory
import org.junit.Test
import org.w3c.dom.Document
import org.w3c.dom.Node
import org.w3c.dom.NodeList

class GenerateQualifiersTest {
  @Test
  fun generate() {
    println(File(".").absolutePath)
    val xmlFiles =
      File("../scripts/devices").listFiles().toList().filter { it.name.endsWith(".xml") }
    println(xmlFiles)
    xmlFiles
      .forEach { xmlFile ->
        // parse xml
        val documentBuilderFactory = DocumentBuilderFactory.newInstance()
        val documentBuilder = documentBuilderFactory.newDocumentBuilder()
        val document: Document = documentBuilder.parse(xmlFile)

        val devices = document.getElementsByTagName("d:device").toList()

        devices.forEach { device ->
          // find device name
          val deviceNodes = device.childNodes.toList()
          val name = deviceNodes.first { it.nodeName == "d:name" }.textContent
          println(name)
          println(deviceNodes)

          val hardwareNodes = deviceNodes.first { it.nodeName == "d:hardware" }.childNodes.toList()
          println(hardwareNodes)

          val screenNodes = hardwareNodes.first { it.nodeName == "d:screen" }.childNodes.toList()
          println(screenNodes)
          val screenDimensionsNodes = screenNodes.first { it.nodeName == "d:dimensions" }.childNodes.toList()
          val xDimention = screenDimensionsNodes.first { it.nodeName == "d:x-dimension" }.textContent
          println(xDimention)

        }
      }
  }

  private fun NodeList.toList(): List<Node> {
    val list = mutableListOf<Node>()
    for (i in 0 until length) {
      list.add(item(i))
    }
    return list
  }
}

Nexus 5
[[#text:
        ], [d:name: null], [#text:
        ], [d:id: null], [#text:
        ], [d:manufacturer: null], [#text:
        ], [d:playstore-enabled: null], [#text:
        ], [d:hardware: null], [#text:
        ], [d:software: null], [#text:
        ], [d:state: null], [#text:
        ], [d:state: null], [#text:
    ]]
[[#text:
            ], [d:screen: null], [#text:
            ], [d:networking: null], [#text:
            ], [d:sensors: null], [#text:
            ], [d:mic: null], [#text:
            ], [d:camera: null], [#text:
            ], [d:camera: null], [#text:
            ], [d:keyboard: null], [#text:
            ], [d:nav: null], [#text:
            ], [d:ram: null], [#text:
            ], [d:buttons: null], [#text:
            ], [d:internal-storage: null], [#text:
            ], [d:removable-storage: null], [#text:
            ], [d:cpu: null], [#text:
            ], [d:gpu: null], [#text:
            ], [d:abi: null], [#text:
            ], [d:dock: null], [#text:
            ], [d:power-type: null], [#text:
            ], [d:skin: null], [#text:
        ]]
[[#text:
                ], [d:screen-size: null], [#text:
                ], [d:diagonal-length: null], [#text:
                ], [d:pixel-density: null], [#text:
                ], [d:screen-ratio: null], [#text:
                ], [d:dimensions: null], [#text:
                ], [d:xdpi: null], [#text:
                ], [d:ydpi: null], [#text:
                ], [d:touch: null], [#text:
            ]]
1080

I have implemented the feature. Please let me know if there's anything wrong with what I've done.
https://github.com/takahirom/roborazzi/pull/49

I suspect these are the configs we want for Wear, and probably other devices. Sorry for the bad link before.  I can put up a PR.
https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:sdklib/src/main/resources/com/android/sdklib/devices/
Wear OS Large Round
Wear OS Small Round
Wear OS Rectangular
Wear OS Square
Instead of the current
  const val WearOSSquare = "w187dp-h187dp-small-long-round-watch-hdpi-keyshidden-nonav"
  const val WearOSRound = "w213dp-h213dp-small-long-round-watch-hdpi-keyshidden-nonav"
  const val WearOSRoundChin = "w240dp-h218dp-small-notlong-notround-watch-tvdpi-keyshidden-nonav"


Updated recipe for pylexique version 1.2.2

Checklist

[X] Used a personal fork of the feedstock to propose changes
[X] Reset the build number to 0 (if the version changed)
[X] Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
[X] Ensured the license file is being packaged.

Release of pylexique version 1.2.2

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe) and found it was in an excellent condition.

@conda-forge-admin, please rerender

Hi! This is the friendly automated conda-forge-linting service.
I was trying to look for recipes to lint for you, but it appears we have a merge conflict.
Please try to merge or rebase with the base branch to resolve this conflict.
Please ping the 'conda-forge/core' team (using the @ notation in a comment) if you believe this is a bug.

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe) and found it was in an excellent condition.


vertically center on load

I think we should vertically center on load, as the highlighted frame is not shown in the following diagram:
https://upload.clinicjs.org/public/45af5a28189fc3216bf64303acfda224bb0203223e1286df17010739f236073f/12320.clinic-flame.html

That's weird, it seems to work fine for me. The chart scrolls the selected frame into view on page load.
Maybe you are referring to something else?

You are right, let's close this.


Scrollable widget is not scrollable in IOS switch controll

Steps to Reproduce

import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'List playground',
      home: TestPage(),
    );
  }
}

class TestPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _TestPageState();
}

class _TestPageState extends State<TestPage> {
  List<String> items = ['1', '2', '3', '4', '5'];
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: SizedBox(
          width: 300.4,
          height: 50.0,
          child: Directionality(
            textDirection: TextDirection.ltr,
            child: CustomScrollView(
              slivers: <Widget>[
                SliverFixedExtentList(
                  itemExtent: 22.2,
                  delegate: SliverChildBuilderDelegate(
                      (BuildContext context, int index) {
                      return TextWidget(
                        items[index],
                      );
                    },
                    childCount : items.length,
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
class TextWidget extends StatefulWidget {
  const TextWidget(this.data);
  final String data;

  @override
  TextWidgetState createState() => TextWidgetState();
}

class TextWidgetState extends State<TextWidget>{

  @override
  void dispose() {
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Text(widget.data);
  }
}

turn on switch control
try to select the text item

It should show the scroll options, but it only has tap.
Logs

I just learned from a Google team that their app was nearly blocked from release on iOS due to this issue. They got a temporary exception.

@goderbauer can you elucidate on what you were telling me earlier about what we need to be able to fix this?

Last time i check there is no available API in IOS to make a UI view to be consider scrollable in accessibility. The only way to make it accessibly scrollable in IOS is to use native UIScrollView.

@mehmetf Just be sure that we are talking about the same thing: Can you confirm that the blocker was that Flutter doesn't show this "Scroll down/up" option in the Switch Access action menu? Is there an internal bug that has more information about what required the temporary exception?

@Hixie If that is indeed the issue here, the problem is that iOS doesn't seem to offer an official API to make that option appear in the menu as pointed out by @chunhtai above. @chunhtai Didn't you also ask on StackOverflow if there's a way to implement this? Can you maybe link to that question?
One thing we could try is reverse engineer how UIScrollView interacts with the iOS a11y subsystem to figure out if we can maybe steal one of its a11y traits and use it for our scroll view. We'd have to implement that in the iOS a11y bridge (/cc @xster).

I have tried to ask this question in stackoverflow https://stackoverflow.com/questions/57466350/ios-switch-control-scrolling-in-opengl-backed-uiview
but got no response

I tried a few things to reverse engineer this:

I zero'd out the accessibiilityTraits property of a UISwitch and the UIScrollView, this causes VoiceOver to be wrong, but the action menu still has (tap, scroll).
I tried to use NSObjCMessageLoggingEnabled to log the messages being sent to the UISwitch when the action menu is displayed.  There are problems getting the logs on device  In order to get it working on device you have to fiddle with non-exported symbols.  I couldn't get it working and accessibility doesn't work on simulator.
I tried to hack objc_msgSend to log all methods sent to the UISwitch.  I tried using NSProxy and overriding forwardInvocation. UIKit seems to replace my proxy object or crash, similar to the problem this person had

The exception currently exists as an internal document. In fact there are a couple of complications that we need to resolve first before filing an internal bug. I will drive this with the client. Removing the critical tag for now.

In an attempt to figure out how that menu is propagated, I tried placing a breakpoint on objc_msgSend that doesn't pause execution with a conditional $x0 == <pointer to uiswitch> printing out (char*)$x1.  Even with the conditional, the breakpoint bogs down the system to the point where the UI isn't responsive and the Switch Control never finds the UISwitch.

@gaaclarke Just to be sure there's no misunderstanding: I don't think this is going to be anything on the UISwitch widget. The "scroll down" button in the screenshot above is somehow produced by the UIScrollView surrounding the element that currently has accessibility focus (it's just coincidence that focus is on a UISwitch in my example above).
I don't know how the UIScrollView produces the button, though. Maybe iOS internally walks up the hierarchy from the currently focused element to see if there are any UIScrollViews (or hopefully for us anything with an UIScrollView a11y trait) and if there are it adds that button? Idk...

@goderbauer I was thinking that too.  The techniques I tried would have worked for that as well but I couldn't get any of them working.  I didn't mention it but I tried zeroing out the accessibilityTraits of the UIScrollView but that button still showed up in the action menu.

@gaaclarke Thanks for looking into it.
Just for the record: There is a way to still scroll in Flutter with Switch Control on iOS:

Select an item inside a scrollable
Switch to the second page of the Switch Control menu that appeared
Select "Gestures" > "Flick"
Select the direction in which you want to scroll

@j-sid had an interesting idea for a workaround: We could use UIAccessibilityCustomActions to add custom items to the Switch Control menu of every element within a scrollable that can be used to scroll said scrollable.
Basically, for each SemanticsObject in the iOS bridge we would have check whether it is in a scrollable. If it is, we figure out what direction the scrollable can scroll in and then add the appropriate UIAccessibilityCustomActions for those scroll directions to the SemanticsObject. We should only do this if Switch Access is enabled (Those custom actions may otherwise confuse VoiceOver users, which don't need them since Flutter has proper scroll support there).
Open Questions:

How do we internationalize the label for the custom action on the engine side? Do we somehow need to pipe the internationalized labels in from the framework side?
What does the icon for these custom actions look like in the Switch Access menu? As far as I can see, there is no way in the API to provide a custom icon to match the icon that iOS produces natively. (This probably wouldn't be a deal breaker).

Looks like starting in iOS 14 we will even be able to provide a custom icon for those actions: https://developer.apple.com/videos/play/wwdc2020/10019/

bumping to p3 because this is what we want to look into in this quarter

Code Sample
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'List playground',
      home: TestPage(),
    );
  }
}

class TestPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _TestPageState();
}

class _TestPageState extends State<TestPage> {
  List<String> items = ['1', '2', '3', '4', '5'];
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: SizedBox(
          width: 300.4,
          height: 50.0,
          child: Directionality(
            textDirection: TextDirection.ltr,
            child: CustomScrollView(
              slivers: <Widget>[
                SliverFixedExtentList(
                  itemExtent: 22.2,
                  delegate: SliverChildBuilderDelegate(
                    (BuildContext context, int index) {
                      return TextWidget(
                        items[index],
                      );
                    },
                    childCount: items.length,
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

class TextWidget extends StatefulWidget {
  const TextWidget(this.data);
  final String data;

  @override
  TextWidgetState createState() => TextWidgetState();
}

class TextWidgetState extends State<TextWidget> {
  @override
  void dispose() {
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Text(widget.data);
  }
}

flutter doctor -v
[✓] Flutter (Channel dev, 1.21.0-1.0.pre, on Mac OS X 10.15.6 19G73, locale
    en-GB)
    • Flutter version 1.21.0-1.0.pre at /Users/taha/Code/flutter_dev
    • Framework revision f25bd9c55c (8 days ago), 2020-07-14 20:26:01 -0400
    • Engine revision 99c2b3a245
    • Dart version 2.9.0 (build 2.9.0-21.0.dev 20bf2fcf56)

[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
    • Android SDK at /Users/taha/Code/sdk
    • Platform android-29, build-tools 29.0.3
    • ANDROID_HOME = /Users/taha/Code/sdk
    • Java binary at: /Applications/Android
      Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6222593)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 11.6)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 11.6, Build version 11E708
    • CocoaPods version 1.9.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.0)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 47.1.2
    • Dart plugin version 193.7361
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6222593)

[✓] VS Code (version 1.47.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.12.2

[✓] Connected device (4 available)
    • SM M305F (mobile) • 32003c30dc19668f • android-arm64  • Android 10 (API
      29)
    • macOS (desktop)   • macos            • darwin-x64     • Mac OS X 10.15.6
      19G73
    • Web Server (web)  • web-server       • web-javascript • Flutter Tools
    • Chrome (web)      • chrome           • web-javascript • Google Chrome
      84.0.4147.89

• No issues found!

note to myself:

The scroll direction is inverse of flutter. The Scroll Down in switch controller means scroll up in flutter (unnature direction)

When there are nested scroll views one within another, the inner one always scrolls first.

We should also fix this https://github.com/flutter/flutter/issues/64279, otherwise the switch control scroll will be pretty confusing


I need your help

Hello, thanks for your time, and your project
Here, I manage with all this to send messages, but impossible to ensure that it arrives at trigger from a discord message, it remains pending
Moreover, the BOT seems offline when my workflow is activated, I don't know how to do it

Hi.
You can test if your discord bot is online sending on a channel where he is: /test True
This slash command must disappear if your bot is listening. In "test" mode you can click the "Execute Workflow" on your workflow for testing.
If your bot is not connected at all you must use the top right corner button "Active".
After all see your logs too.

Hi, could you provide more details (n8n version, n8n-nodes-discord version, server logs starting when you active the workflow)?

I don't no why, but, today, it's work fine...
Yesterday, I reinstalled everything, redid everything, tried to /test, activate the flow, run the workflow, but nothing happened
I just started my PC, test, it's OK
Thank you for your time, sorry it's my fault, have a nice day


Fix crash when re-importing GLTF scene while Animation window is open

In AnimationPlayerEditor::_node_removed, it will set player to nullptr, but there's still some messages _current_animation_changed in call queue, so it crashed with player being nullptr.
Fixes https://github.com/godotengine/godot/issues/96631

See:

https://github.com/godotengine/godot/pull/95795

This is probably not an appropriate fix, as discussed in that PR


post: Adam Wójcik and Martin Lingstuyl join CLI for Microsoft 365 maintainers team

Category

[ ] Content fix
[x] New article

Contents of the Pull Request
New article: Adam Wójcik and Martin Lingstuyl join CLI for Microsoft 365 maintainers team

thank you for contributing 🚀


Improve node label count metadata query

ANALYZE;
SELECT c.relname AS label, c.reltuples AS cnt
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_namespace n
ON n.oid = c.relnamespace
WHERE c.relkind = 'r'
AND n.nspname = 'test';
https://github.com/apache/age-viewer/blob/main/backend/sql/meta_nodes/AGE.sql

I have started working on this; both backend and frontend.

PR created

PR has been merged to master


Need a policy for updates with manual intervention

By manual intervention, I mean a user must take some action on each computer to make the code runs. Examples:

Need to add/modify an entry in a .json or .csv file
Need to install a python package

I have been manually updating the computers in 447. But now that we have computers in the ephys room and 428, this approach needs a precise policy. I propose:

[x] Add a section to the pull request templates that prompts for manual interventions

We add specific steps that need to be taken, and when (do you need to wait for the updates to merge? Can you do them ahead of time)

[x] Have designated users that are responsible for the manual interventions on their computers.

Ephys3: Xinxin
Ephys1: Kanghoon
428 Computers: Kenta
446/447: Whoever implements the breaking change (Alex, Han, Xinxin)

[x] Document this policy in the SOP Software Update Procedures

Thoughts? @hanhou @XX-Yin @KanghoonJ @hagikent

I created a PR to update the PR template

Looks great. Let's add a secondary responsible person for each (in case someone is away). How about this?
Ephys 3: Xinxin (primary), Kanghoon (secondary)
Ephys 1: Kanghoon (primary), Xinxin (secondary)
428: Kenta (primary), ? (secondary)
446/447: Alex, Han, Xinxin
This comment generally speaks to a major issue in how we communicate updates. We need everyone to buy into the protocol for implementing updates. We'll discuss this at the next software meeting.


Fix to ImageMagickHandler

-Saving an image back to the same location with a lower quality would result in a failure attempting to copy.
-Saving an image to a new spot with a lower quality would result in the image not having a new quality set.
Each pull request should address a single issue and have a meaningful title.
Description
Explain what you have changed, and why.
Checklist:

[x] Securely signed commits
[ ] Component(s) with PHPdocs
[ ] Unit testing, with >80% coverage
[ ] User guide updated
[ ] Conforms to style guide

Fixed via #3268