Implement Structure.dump_cmd/3

See https://github.com/elixir-ecto/ecto_sql/pull/423

[x] TODO: Change mix.exs back to released versions.

I think the CI failure is not caused by this change.

@maennchen try updating / rebasing this branch off of main. This was recently merged https://github.com/elixir-sqlite/ecto_sqlite3/pull/80

@warmwaffles I think I see one of the other issues. There was an insert_all integration test added that uses select statements for values and it doesn't seem like your adapter supports that. Which tag do you use to filter those? I can make the change in Ecto.

Another one was because stacktraces were added to logging and the test didn't take into account that for adapters like yours the integration tests are under the deps directory. Fixing it here: https://github.com/elixir-ecto/ecto_sql/pull/426.
There is also one other failure that looks like it has something to do with this change: https://github.com/elixir-ecto/ecto_sql/pull/399. But haven't figured it out yet.

@warmwaffles I've rebased onto main. There's however still a few problems left as @greg-rychlewski noticed.

Probably number 1 is better, because this is a super specific thing for sqlite? But let me know if you have a different idea.

This is probably a better idea to do.
It's probably okay to merge this into main and then follow up with tests. I am unsure why this PR doesn't have github actions running for it.

I haven't forgotten about this, just haven't had time to dig in more.

I think the actions are only running the first time the PR is opened because of this
pull_request:
    types:
      - opened

I think you need the synchronize activity for it to trigger on new commits.

@maennchen would you mind rebasing off of the latest main branch? I want to see if the workflow change I made gets picked up and kicks off.

@warmwaffles Rebased. Tests seem to be running :+1:

Excellent, thanks @greg-rychlewski for pointing out that I had that types section.

btw failed integration tests 1 and 3 can be fixed by updating to the latest commit on ecto/ecto_sql:
https://github.com/elixir-ecto/ecto/pull/3942
https://github.com/elixir-ecto/ecto_sql/pull/426

@greg-rychlewski Updated

@maennchen I sent a PR to your fork to fix the broken unit tests. the planner now returns the cast and dump version of the parameters and it was causing a match error.

@maennchen if you rebase on master the tests should all pass now

@greg-rychlewski Still seems to error, unfortunately.

@maennchen oh it looks like the PR I sent you was reverted: https://github.com/maennchen/ecto_sqlite3/pull/1/files. if that change is re-implemented it should all pass

@greg-rychlewski Oops, I rebased away your commit. I've brought it back.

After the update, the following test breaks:
== Compilation error in file integration_test/json_test.exs ==
** (KeyError) key :meta not found
    expanding struct: Ecto.Integration.Order.__struct__/1
    integration_test/json_test.exs:10: Ecto.Integration.JsonTest."test json_extract_path with primitive values"/1

After the fix 4 tests still fail with similar errors:
  * test query select selected_as/2 with having (3.9ms) [L#1608]

  1) test query select selected_as/2 with having (Ecto.Integration.RepoTest)
     deps/ecto/integration_test/cases/repo.exs:1608
     ** (Ecto.QueryError) unsupported expression :min_visits in query:

     from p0 in Ecto.Integration.Post,
       group_by: [p0.posted],
       having: selected_as(:min_visits) > 0,
       or_having: not (selected_as(:min_visits) > 0),
       order_by: [asc: p0.posted],
       select: %{posted: p0.posted, min_visits: selected_as(min(coalesce(p0.visits, 0)), :min_visits)}

     code: |> TestRepo.all()
     stacktrace:
       (ecto_sqlite3 0.8.1) lib/ecto/adapters/sqlite3/connection.ex:1403: Ecto.Adapters.SQLite3.Connection.expr/3
       (ecto_sqlite3 0.8.1) lib/ecto/adapters/sqlite3/connection.ex:1806: Ecto.Adapters.SQLite3.Connection.intersperse_map/4
       (ecto_sqlite3 0.8.1) lib/ecto/adapters/sqlite3/connection.ex:1356: Ecto.Adapters.SQLite3.Connection.expr/3
       (ecto_sqlite3 0.8.1) lib/ecto/adapters/sqlite3/connection.ex:1353: Ecto.Adapters.SQLite3.Connection.expr/3
       (ecto_sqlite3 0.8.1) lib/ecto/adapters/sqlite3/connection.ex:1172: Ecto.Adapters.SQLite3.Connection.paren_expr/3
       (ecto_sqlite3 0.8.1) lib/ecto/adapters/sqlite3/connection.ex:1143: Ecto.Adapters.SQLite3.Connection.boolean/4
       (ecto_sqlite3 0.8.1) lib/ecto/adapters/sqlite3/connection.ex:171: Ecto.Adapters.SQLite3.Connection.all/2
       (ecto_sqlite3 0.8.1) lib/ecto/adapters/sqlite3.ex:176: Ecto.Adapters.SQLite3.prepare/2
       (ecto 3.9.0) lib/ecto/query/planner.ex:182: Ecto.Query.Planner.query_without_cache/4
       (ecto 3.9.0) lib/ecto/query/planner.ex:152: Ecto.Query.Planner.query_prepare/6
       (ecto 3.9.0) lib/ecto/query/planner.ex:127: Ecto.Query.Planner.query_with_cache/8
       (ecto 3.9.0) lib/ecto/repo/queryable.ex:211: Ecto.Repo.Queryable.execute/4
       (ecto 3.9.0) lib/ecto/repo/queryable.ex:19: Ecto.Repo.Queryable.all/3
       deps/ecto/integration_test/cases/repo.exs:1624: (test)

@maennchen You can add these tags to the ignore list for the integration tests:
:selected_as_with_group_by
:selected_as_with_order_by
:selected_as_with_order_by_expression
:selected_as_with_having

@maennchen I believe if you drop the changes made to the mix.lock the conflict should be resolved.

@warmwaffles I've rebased and it seems the tests are failing again.
I've spent more time now rebasing this PR than writing it. I would welcome it if a maintainer makes sure that this PR is incorporated in a way that actually works.

@maennchen I'll see what I can do and try to retain your original authorship. Definitely want to keep your contributions attached.

Thanks a ton @maennchen for implementing this. It's been merged and deployed under v0.9.0


container crashes at startup

Describe the bug
I'm starting csvtocsvw via podman and the container exists immediately with the following error message:
[2023-01-18 14:26:29 +0000] [1] [INFO] Starting gunicorn 20.1.0
[2023-01-18 14:26:29 +0000] [1] [INFO] Listening at: http://<IP_ADDRESS>:8080 (1)
[2023-01-18 14:26:29 +0000] [1] [INFO] Using worker: sync
[2023-01-18 14:26:29 +0000] [3] [INFO] Booting worker with pid: 3
[2023-01-18 14:26:29 +0000] [4] [INFO] Booting worker with pid: 4
[2023-01-18 14:26:29 +0000] [5] [INFO] Booting worker with pid: 5
[2023-01-18 14:26:30 +0000] [3] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 134, in init_process
    self.load_wsgi()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
    return self.load_wsgiapp()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/local/lib/python3.8/site-packages/gunicorn/util.py", line 359, in import_app
    mod = importlib.import_module(module)
  File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 843, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/src/wsgi.py", line 1, in <module>
    from app import app
  File "/src/app.py", line 18, in <module>
    from annotator import CSV_Annotator
  File "/src/annotator.py", line 47, in <module>
    units_graph.parse(QUDT_UNIT_URL, format='turtle')
  File "/usr/local/lib/python3.8/site-packages/rdflib/graph.py", line 1306, in parse
    source = create_input_source(
  File "/usr/local/lib/python3.8/site-packages/rdflib/parser.py", line 404, in create_input_source
    ) = _create_input_source_from_location(
  File "/usr/local/lib/python3.8/site-packages/rdflib/parser.py", line 458, in _create_input_source_from_location
    input_source = URLInputSource(absolute_location, format)
  File "/usr/local/lib/python3.8/site-packages/rdflib/parser.py", line 282, in __init__
    response: HTTPResponse = _urlopen(req)
  File "/usr/local/lib/python3.8/site-packages/rdflib/parser.py", line 270, in _urlopen
    return urlopen(req)
  File "/usr/local/lib/python3.8/urllib/request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/local/lib/python3.8/urllib/request.py", line 531, in open
    response = meth(req, response)
  File "/usr/local/lib/python3.8/urllib/request.py", line 640, in http_response
    response = self.parent.error(
  File "/usr/local/lib/python3.8/urllib/request.py", line 569, in error
    return self._call_chain(*args)
  File "/usr/local/lib/python3.8/urllib/request.py", line 502, in _call_chain
    result = func(*args)
  File "/usr/local/lib/python3.8/urllib/request.py", line 649, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found
[2023-01-18 14:26:30 +0000] [3] [INFO] Worker exiting (pid: 3)
[2023-01-18 14:26:30 +0000] [4] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 134, in init_process
    self.load_wsgi()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
    return self.load_wsgiapp()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/local/lib/python3.8/site-packages/gunicorn/util.py", line 359, in import_app
    mod = importlib.import_module(module)
  File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 843, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/src/wsgi.py", line 1, in <module>
    from app import app
  File "/src/app.py", line 18, in <module>
    from annotator import CSV_Annotator
  File "/src/annotator.py", line 47, in <module>
    units_graph.parse(QUDT_UNIT_URL, format='turtle')
  File "/usr/local/lib/python3.8/site-packages/rdflib/graph.py", line 1306, in parse
    source = create_input_source(
  File "/usr/local/lib/python3.8/site-packages/rdflib/parser.py", line 404, in create_input_source
    ) = _create_input_source_from_location(
  File "/usr/local/lib/python3.8/site-packages/rdflib/parser.py", line 458, in _create_input_source_from_location
    input_source = URLInputSource(absolute_location, format)
  File "/usr/local/lib/python3.8/site-packages/rdflib/parser.py", line 282, in __init__
    response: HTTPResponse = _urlopen(req)
  File "/usr/local/lib/python3.8/site-packages/rdflib/parser.py", line 270, in _urlopen
    return urlopen(req)
  File "/usr/local/lib/python3.8/urllib/request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/local/lib/python3.8/urllib/request.py", line 531, in open
    response = meth(req, response)
  File "/usr/local/lib/python3.8/urllib/request.py", line 640, in http_response
    response = self.parent.error(
  File "/usr/local/lib/python3.8/urllib/request.py", line 569, in error
    return self._call_chain(*args)
  File "/usr/local/lib/python3.8/urllib/request.py", line 502, in _call_chain
    result = func(*args)
  File "/usr/local/lib/python3.8/urllib/request.py", line 649, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found
[2023-01-18 14:26:30 +0000] [4] [INFO] Worker exiting (pid: 4)
[2023-01-18 14:26:30 +0000] [5] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 134, in init_process
    self.load_wsgi()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
    return self.load_wsgiapp()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/local/lib/python3.8/site-packages/gunicorn/util.py", line 359, in import_app
    mod = importlib.import_module(module)
  File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 843, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/src/wsgi.py", line 1, in <module>
    from app import app
  File "/src/app.py", line 18, in <module>
    from annotator import CSV_Annotator
  File "/src/annotator.py", line 47, in <module>
    units_graph.parse(QUDT_UNIT_URL, format='turtle')
  File "/usr/local/lib/python3.8/site-packages/rdflib/graph.py", line 1306, in parse
    source = create_input_source(
  File "/usr/local/lib/python3.8/site-packages/rdflib/parser.py", line 404, in create_input_source
    ) = _create_input_source_from_location(
  File "/usr/local/lib/python3.8/site-packages/rdflib/parser.py", line 458, in _create_input_source_from_location
    input_source = URLInputSource(absolute_location, format)
  File "/usr/local/lib/python3.8/site-packages/rdflib/parser.py", line 282, in __init__
    response: HTTPResponse = _urlopen(req)
  File "/usr/local/lib/python3.8/site-packages/rdflib/parser.py", line 270, in _urlopen
    return urlopen(req)
  File "/usr/local/lib/python3.8/urllib/request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/local/lib/python3.8/urllib/request.py", line 531, in open
    response = meth(req, response)
  File "/usr/local/lib/python3.8/urllib/request.py", line 640, in http_response
    response = self.parent.error(
  File "/usr/local/lib/python3.8/urllib/request.py", line 569, in error
    return self._call_chain(*args)
  File "/usr/local/lib/python3.8/urllib/request.py", line 502, in _call_chain
    result = func(*args)
  File "/usr/local/lib/python3.8/urllib/request.py", line 649, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found
[2023-01-18 14:26:30 +0000] [5] [INFO] Worker exiting (pid: 5)
[2023-01-18 14:26:30 +0000] [1] [WARNING] Worker with pid 4 was terminated due to signal 15
[2023-01-18 14:26:30 +0000] [1] [WARNING] Worker with pid 5 was terminated due to signal 15
[2023-01-18 14:26:30 +0000] [1] [INFO] Shutting down: Master
[2023-01-18 14:26:30 +0000] [1] [INFO] Reason: Worker failed to boot.

To Reproduce
podman run -it ghcr.io/mat-o-lab/csvtocsvw:latest gunicorn -b <IP_ADDRESS>:8080 wsgi:app --workers=3
podman run -it ghcr.io/mat-o-lab/csvtocsvw:latest also crashes
Expected behavior
container starts without issues and keeps running
Screenshots
Desktop (please complete the following information):

OS: Fedora 37

schould be solved with new release


Better API for bots?

It would be really nice if the current Elixir API supported a "bot mode" and "bot-only" accounts, which would:

Be able to join multiple rooms at once
Have a special badge after their display name showing that the user is a bot
Be able to implement do-it-yourself sharding, which would need to log into the account with multiple clients at once
Get rate limited by the API if they are performing too many actions on one room

yeah, rate limiting is really importing, bots are messing up the experience

bots are messing up the experience

A temporary workaround is to write to a queue that is dispatched every second.

yeah, rate limiting is really important, bots are messing up the experience

what are they doing right now?

They join, send a msg, leave, join, send a message, leave. Doing it really fast.

Also, room admins probably should be able to turn off bots or allow only some bots to join

Also, room admins probably should be able to turn off bots or allow only some bots to join

I think using an allow-list like discord (& I think twitch) would work the best. Then admins have full control over the bots

Is anybody working on this? if not is anyone willing to help me out on the front end part sometime?

I own a bot. My current workaround is a queue that sends a message every second.

Also, room admins probably should be able to turn off bots or allow only some bots to join

Yeah which is more reason to have application authentication like discord.com/developers does it. Having an ID for each bot and token for each bot which doesn’t change.
Also is it even possible with the current architecture to allow accounts to join multiple rooms?

Adding onto this, having a regenerable token. If you're bot's token gets leaked you're screwed.
cough cough Honbra leaking my bot account's token cough cough

@dragonismcode I think deleting accounts still delete everything so you should be able to regen token that way for now


What is the value of COMMERCE_CLIENT_SHORT_CODE in on demand sandbox

Hey @joji-litmus7 ,
If you continue to have problems with this please post a question in the Commerce Cloud Developer Community: https://developer.commercecloud.com/s/
Cheers,
Josh


Added an Attested TLS SDK sample

There are two  OE SDK samples included in this PR. It utilizes the APIs built for addressing this issue(
https://github.com/microsoft/openenclave/issues/1325)

tls_between_host_enclave
Demonstrates how to establish an Attested TLS channel between an non-SGX client and an enclave
tls_between_enclaves
Demonstrates how to establish an Attested TLS channel between two SGX enclaves

Looks good in general. A couple of questions

It appears that enclave code in both samples is more or less the same. I might be missing something though. If it is so, then maybe we could just have one enclave shared between both samples? The second sample could just be a non enclave app connecting to a TLS server running from the first sample.

I also noticed that the enclave code used in the other samples have the same code with a few minor differences. It should be possible to reduce duplication by having one C file and have the enclaves just #include this file.

I am working on removing the code duplication. Thanks for the great feedback

bors r+

bors r+


Update link : 'For more languages refer to Language Types'

https://developer.huawei.com/consumer/en/doc/development/AppGallery-connect-Guides/agcapi-reference-langtype

I'm getting the following failure:
Lang is: en-EN
Obtaining a Token
Obtaining a Token - Done
Obtaining the File Upload URL
Obtaining the File Upload URL - Done
Uploading a File
Uploading a File - Done
Updating App File Information - add previoulsy [REDACTED]ed file
FileName: build_102.apk
Updating App File Information - Done
Message:[AppGalleryConnectPublishService]The language does not exist !
Code: 204144650

@lmr001 You should use one of allowed languages from page you linked in first comment.
For English only this two is available:
()

@lmr001 You should use one of allowed languages from page you linked in first comment.
For English only this two is available:
()

@klamborowski  I did change it, see below.
Lang is: en-US
Obtaining a Token
Obtaining a Token - Done
Obtaining the File Upload URL
Obtaining the File Upload URL - Done
Uploading a File
Uploading a File - Done
Updating App File Information - add previoulsy [REDACTED]ed file
FileName: build_104.apk
Updating App File Information - Done
Message:[AppGalleryConnectPublishService]The language does not exist !
Code: 204144650

I've made some test runs.
en-US -> Failed (The language does not exist ! Code: 204144650)
en-GB -> Failed (The language does not exist ! Code: 204144650)
pl-PL -> Success
Both en languages is valid according to Huawei documentation.
https://developer.huawei.com/consumer/en/doc/development/AppGallery-connect-References/agcapi-app-file-info_v2
@lmr001 Did you submit issue to Huawei bug tracker?

@klamborowski No I did not submit issue.

@lmr001 I've got response from Huawei.

Dear developer,
Please set en-US or en-GB language information first.
You can find instruction in https://developer.huawei.com/consumer/en/doc/development/AppGallery-connect-References/agcapi-app-language-info_update_v2.
Sincerely,
Huawei Developer Alliance Support Team

Probably it could also done via App Gallery Console. Could you check AppGallery Connect -> App information -> Localization and let me know which languages you have there?
For me there is only Polish, which could be reason of failures on en family language:

@lmr001 for English (UK) you should use en-GB.
Please try it and let me know if it helps.

@lmr001 did you try solution above?

@klamborowski The solution works. This can be closed.


Single-cell RNA-Seq: Tutorial "Clustering 3K PBMCs with Scanpy"

Still need to do:

[x] Add questions
[x] Add objectives
[x] Add take-home messages

But the content of the tutorial itself is ready for review (@mtekman and any single-cell person) and to be tested

this looks amazing, give me an hour or two to make some small wording changes

@mtekman can you please use the suggestion mode in github or push to this branch.
@hrhotz thanks for the review!
And of course, @bebatut amazing work. Enjoy your days off!

@bgruening Yep I will push

@bebatut The tutorial looks great from my side - each section follows nicely from the other, there are a lot of details given without ever losing context, and I feel that the user becomes very intimate with the AnnData format structure so that they know exactly what is being added and manipulated at each step. The explanation of PC's was excellent and I think you really covered everything. Kudos!

Thanks a lot for the reviews and suggested changes! 😄


New Rule Suggestion: PSAvoidShorteningParameterNames

As long as we're trying to get people to stop using aliases and positional parameters and shortened command names, we should fix the parameters too.
Summary of the new feature
A new rule that complains when you write Get-Content -Pa file.txt -ov contents and offers suggestions with the full proper parameter name of each parameter: Get-Content -Path file.txt -OutVariable contents
It should complain about shortened parameters and parameter aliases, when you're passing them directly -- but shouldn't worry about splatting or pipeline properties, etc.
Bonus points if you make it a ConfigurableRule with a setting to ignore parameter names that match aliases (as opposed to just being shortened forms of parameters or parameter aliases).
Double bonus points if you make AvoidPositionalParameters also a ConfigurableRule so people can choose to fail even if only one positional parameter is passed.

Sounds good to me. Feel free to submit a PR for that. When doing this it'd probably also be easy to make the new UseCorrectCasing rule correct parameter names as well


[deps] Upgraded selenium

Similar to : https://github.com/openwisp/openwisp-network-topology/pull/187

Coverage: 97.872% (+0.06%) from 97.811% when pulling e995f206c09080805399f69fb33a702173d3561d on upgrade-selenium into 7a065c0cb4496e6f6c3ae0bab455cf27f04ce497 on master.


Maarten/clockwise import

We need to do this on production. So this one is based on the master branch.

gonna close this. Import is done. Leftovers in #283


Any plans to support token-based authentication on non-AKS Azure ARC clusters?

Hi,
As per https://docs.microsoft.com/en-us/azure/machine-learning/how-to-authenticate-web-service it seems that token-based authentication will not be available on non-AKS clusters over Azure ARC.
Is supporting this something in the roadmap and, if so, by when?
If not, are there any alternatives to key-based authentication on non-AKS clusters?
Thanks

we've already support token-based auth, set auth_mode: aml_token in online_endpoint yaml to make it work


Allow more than 1 root element for Template

What problem does this feature solve?
Right now you can only have 1 root element per template. I know this is by design, but I find myself wrapping everything around a
 a lot. Now, most of the time is not a big deal, I can live with that, the problem is when either Bootstrap requires a very specific hierarchy, or when dealing with Tables that also require a very specific hierarchy and wrapping everything on a div is not an option.
What does the proposed API look like?
Now, there will be a couple of things to figure out, mainly to what element will the properties provided on the Custom Element will be attached to. I think there two things that can be done:

Find the first child and stick everything to it.
Provide a custom attribute to indicate to what element they should be attached to.

Can you build a specific scenario in which you need a template with multiple root nodes? I've been using Bootstrap and tables with Vue since the beginning and have never needed multiple root nodes.

Provide a custom attribute to indicate to what element they should be attached to.

FYI you can use $listeners and $props to easily pass down things to the element you want
You can have multiple root elements in functional components:
render: h => [h('p', 'one'), h('p', 'two')]

Personally, I actually like the fact that we only have one root as it clears out the questions you just listed because there's only one possible answer

On my very specific Table use case I have a Category component that I would like to contain two
 root elements. In the first
 I will show the Category information, in the second
 I will list all the Category Items with its details. And the main Category body will control the visibility of the second one. I want it to look something like this:
Category.vue
<template>

		{{ category.id }}
		{{ category.name }}

...

</template>

Now I know I could move them to two separate components and have them communicate, but they really belong together, they have computed properties and methods they will share, and yes I can move those to a mixin, but that just makes everything a bit more complex.
Now, regarding Bootstrap, I recently stumbled on this:
I was using an input-group and I needed to have something like this:

    <input v-show="isDisabled" class="form-control form-control-sm"/>
    <vue-numeric v-show="!isDisabled" class="form-control"/>

Now, the input/vue-numeric pair is reusable, I actually have quite some logic around those two, so I wanted to reuse them, but the input-group itself is not reusable, since in some places I don't need an input group or the input group is very different.
Now when I move the <input> and the <vue-numeric> into its own component I'm forced to use v-if and v-else. Unfortunately, that caused a whole lot of other problems, I needed both elements to be mounted at all times, and working around it wasn't fun, my problems would be gone if I could just have them both mounted and just v-show them as necessary. Of course, I found a way to work around it, but it wasn't the clean simpler approach I wanted and that I can achieve in other frameworks.
I truly love Vue, this is a just a tiny minor complain and I will never go back. It would just be nice to have the option. The nice thing about this feature is that if you don't want to you don't have to use it even think about it, just keep wrapping everything in a div.

FYI you can use $listeners and $props to easily pass down things to the element you want

I was wondering about that, I remember reading that long time ago, but couldn't find it, thanks for the tip

The new react version has Fragment: https://reactjs.org/blog/2017/11/28/react-v16.2.0-fragment-support.html. They can do:
<template>
  <>

		{{ category.id }}
		{{ category.name }}

...

   </>
</template>

What about using this syntax in Vue ?

Honest question here, why do we even need to wrap everything on a single root element, is this a technical limitation or an arbitrary decision?

Technical, due to how the diff algorithm is written. It's obviously possible to update it, but it takes significant changes to the current algorithm (React did that during a complete rewrite).

Got it, thank you for the details

@sirlancelot Or when you're using Nuxt, where everything is a Vue SFC.

@tochoromero.  IMHO, your example can be easily refactored by extracting items list to another child component. My view of components - they should be atomized. If it container of items, then it shoud consist of container component and item component.

Having multiple root elements in template would be nice and for some js libraries or ui frameworks it seems necessary.
So far i've reached to a workaround like this:
Defining a dummy component:
<template>

		<slot></slot>

</template>

Then use it like:
<template>
	<Dummy>

test

	</Dummy>
</template>

By the way i couldn't manage to fix it without using jquery ;)

vue 是中国人的骄傲.

Here is another use case I'm struggling with:
My parent component defines a grid with multiple named template-areas. Ideally my child component would do:
<template>

Stuff

Other stuff

</template>

But since the child component has to have a single wrapping element, it doesn't work. I can work around it, but it causes problems.

Could someone open an issue in vue-loader, then?

https://github.com/vuejs/vue-loader/issues/1167

I'm also struggling with the lack of multiple root nodes in components. I have reviewed the comments in this issue and written up my problem below.
My layout uses CSS grid. In a CSS grid, the grid areas apply to the direct child of the display: grid element. Since a Vue component must have a single root element, it is not possible to have a component represent multiple grid areas (e.g. multiple rows or columns). This is essentially the same as the problem @tochoromero raised where a single component cannot represent multiple
 elements. For my use case, the best workaround I have found is to forgo a component and use <template>  instead (second example below).
@trusktr mentioned that display: contents is coming soon. display: contents can be used as an imperfect workaround for this problem for CSS grids. I say imperfect because display: contents is not semantically equivalent to replacing the parent div with its children in the DOM. This can be seen in the first example below where the#app > div selector applies to the display: contents div and not its children.
In response to @sirlancelot I have created some fiddles which show the issue. I am keen to see how @sirlancelot would work around this issue (and the
 problem), since it's useful to have a range of options available.
Here's an example using display: contents and a single root div in the component:
https://jsfiddle.net/avv3vgae/28/
Here's an example of the <template> workaround:
https://jsfiddle.net/h7rav21u/13/
With tables, if you want a component to represent multiple
 that's possible by using
 as the root element. As discussed, it is not possible for a component to represent multiple
 and I don't think display: contents can help us here.
@LinusBorg if you'll permit me a meta question: where is the best place to continue discussion of the implementation of this feature?

@euoia There's not a real place for that yet, but we are ni the middle of setting up a seperate repository where RFCs can be suggested and discussed with the community. That would probably be the best place for this.
It will be available soon and will be properly announced when the time has come.

I have a pretty compelling real-world case where I'm not sure how I can proceed without having access to multiple root nodes.
I'm developing what's essentially a table+accordion.  That is, the table adds more rows when you click on it to show more details for that entry.
My table is located in the Researcher Groups component, which has a sub-component: "app-researcher-group-entry (ResearcherGroupEntry).
I'm using Vue-Material, but the problem would be the same if I was using a plain .
Anyway, my structure is kind of like:
   // ResearcherGroups.vue
<template>
    <md-table>
        <md-table-row>
          <md-table-head></md-table-head>
          <md-table-head>Researcher</md-table-head>
          <md-table-head>Type</md-table-head>
          <md-table-head></md-table-head>
          <md-table-head></md-table-head>
        </md-table-row>
        <app-researcher-group-entry v-for="(group, index) in researcherGroups" :key="group.label" :groupData="group" :indexValue="index"></app-researcher-group-entry>
    </md-table>
</template>

And in ResearcherGroupEntry.vue:
<template>
<md-table-row>
    <md-table-cell>
      <md-button class="md-icon-button md-primary" @click="toggleExpansion">
        <md-icon v-if="expanded">keyboard_arrow_down</md-icon>
        <md-icon v-else>keyboard_arrow_right</md-icon>
      </md-button>
      <md-button @click="toggleExpansion" class="index-icon md-icon-button md-raised md-primary">{{indexValue + 1}}</md-button>
    </md-table-cell>
    <md-table-cell>{{groupData.label}}</md-table-cell>
    <md-table-cell>Group</md-table-cell>
    <md-table-cell>
      <md-button @click="openTab" class="md-primary">
        <md-icon>add_box</md-icon>
        Add Client / Client Type
      </md-button>
    </md-table-cell>
    <md-table-cell>
      <md-button class="md-primary">
        <md-icon>settings</md-icon>
        Settings
      </md-button>
    </md-table-cell>
  <app-add-client-to-group-tab :indexValue="indexValue" :groupData="groupData" :closeTab="closeTab" :addClientToGroupTab="addClientToGroupTab"></app-add-client-to-group-tab>
  </md-table-row>

</template>

Here's where the problem comes in.  I want to be able to expand the clients like this from our mockup:

This would be trivially easy if I could just add another  into the ResearcherGroupEntry component.  Unfortunately, wrapping  with a div or span tag won't work here (it messes up the table).
If I wasnt using Vue Material, I might have considered using JSX for this component, because then I could simply use .map in the parent to create an array of components based on the two variables.  I might still be able to do that with v-for directives, but I'm not sure.  What I may have to do is create, from props, a crazy pseudo array merging in parents and children, but that's UUUUUGLY code.

Why use vue material prevents you to use jsx (or render function)?

Because I'm not sure the JSX would recognize the components.  Maybe not.  Maybe a render function is needed here.

@ashraj98 Unrelated to this project, what's the best way to contact you for a guaranteed reply? Or rather, if it's your email how long until you usually respond? No rush on anything.

I feel like a compelling reason is simply that we shouldn't forced into using arbitrary
's in SFC's, especially when there are many use cases that they cause problems. If my component or page's root element is
, but I want to stick a ./loader.svg into the list while it loads, I now have to wrap my
 and <Loader /> into a
 that I do not need. Whether that's passing functional and adding a <Fragment />, I don't think it matters.
It's a real problem that people are using hacks to solve, like the above jQuery frightening and clever piece above.

I think we all agree to say that is a missing feature. The Vue developpers say that is currently difficult to implement because of the diff algorithm. One of the solution for now is to not create a child component when we have this use case. We can split the parent component into multiple render functions and compose our parent. (It is easier with JSX)
For this, we can do:
const genChildren = h => {
  return [h('div', "someStuff"), h(div, "Other stuff")];
}

// parent component
render(h) {
  return h('myGridWrapper', genChildren(h))
}

@titouancreach How would this work? you're not getting the multiple root elements error? I assume myGridWrapper would be a render-less component (rendering a slot with a render function). Then, whatever you throw in it, you're going to get the error.

@adi518 You are getting an error if a component tries to render multiple nodes. But a function can returns an array, that is valid javascript

Why, so what are the caveats of this workaround?

@adi518
That's not a workaround... It's just adding a wrapping
 around multiple nodes.
The only workaround is to use a functional component that doesn't have this single root limit, but you lose data/methods that normal components have.

@titouancreach Sorry, I didn't see the reference to that snippet. In that case, yes, a functional does the job.
@fnlctrl Yea, only a functional component works, but no instance is a show stopper.

@adi518 @fnlctrl the workaround is to split the big render function into multiple functions instead of creating a child component.

Here's another use case. If you know how I could do this without multiple root nodes, please do tell, I'm kindof stumped.
Some details:

I need the two elements in the same component because they reference each other. I could abstract the data out, but that seems messy and then scoping is weird.
I cannot wrap these two elements in a div or anything because both elements are dynamically positioned on the page over other elements and I can't have elements covering other stuff because that will block mouseover events. I could disable mouse events on that parent wrapper, but having that invisible box there seems pointless.
The dataset stuff is set by a script in another component not listed here, just take those for granted.

<template lang="html">

{{ tName }}

{{ func }}

</template>

@titouancreach That will only work with a functional component.

Is a general solution just to have two components, one that purely handles the DOM layout, and another that configures the actual elements? So....

<template>

    <slot name="first-body" />
    <slot name="second-body />

<template>

And then to use it:

		{{ category.id }}
		{{ category.name }}

...

Maybe this is what @sirlancelot was referring to?

@adi518 This will work with anything because we don't create any children here, we are just splitting (compose) the render function. It's just pure javascript.

@tochoromero how did you solve your input-group-addon issue with Bootstrap? I came here via the same problem, that Bootstrap has really specific ordering for these addons and an extra wrapping div breaks it.

@bbugh I really didn't solve it, I just tried to make my component as generic as possible but still wrapping it on a div with the input-group class :(

Another possible workaround, besides using display: contents, is using https://linusborg.github.io/portal-vue. With portal-vue, the grid could be set up something like this:

<portal-target multiple name="grid" />

<portal to="grid">

child 1 content

more child 1 content

</portal>

<portal to="grid">
child 2 content
</portal>

The above would render the following:

child 1 content

more child 1 content

child 2 content

@chipit24 Yes, but that solution still includes a parent element. The whole point is being able to render with a parent.

@adi518 but Fragment is a parent element but is a virtual one so I am confused with what you mean by that.
Should it render any element? no it shouldn't
Could be like Fragment? absolutely, the whole issue with this is rendering an extra element, no necessarily using another component as a wrapper.

@adi518 The portal elements in my example do not render a parent element, so I'm not sure what you mean.
This is a top hit for me in Google, and I'm posting an example that wasn't mentioned before of how to work around not having actual fragments. The example I posted works for my use case.

It won't work in the sense that the Portal component adds its wrapper element, as it is a stateful component
{{ $children }}
 . You are still constrained. Your solution is good for that case. When you really need no parent elements at all you are stuck until Vue actually adds this functionality.

 I'm still rookie in VueJS. I think I kinda found a suitable solution which supports all the requirements : fragment can be root, and are not functional.
Can you guys check this : https://www.npmjs.com/package/vue-fragments ?

@y-nk That's an interesting approach.

@adi518 my understanding of vDOM doesn't allow me to do it for SSR. My main problem is about finding the parent of that fragment enabled node. it seems impossible to find the exact place it is inserted and i don't know why. such a mystery is ... mesmerizing. If anybody can help, that would be more than welcome...

@y-nk Done some adjustment to your solution: https://github.com/y-nk/vue-fragments/issues/1

I don't believe that this issue is more complicated than
Vue.component("vue-fragment", {
  functional: true,
  render(h, { children }) {
    return children;
  }
});

Functional components allow you to send back a list of elements instead of a single one.
<vue-fragment>

Hello

World

    </vue-fragment>

This will render directly into the parent component the children without adding an extra component.

@adi518 thanks a lot for your feedbacks/corrections :) i'm trying hard to work on SSR but it's a case i cannot really crack yet.

@adi518 added abstract so it's now totally transparent within the tree (parent and children are linked correctly without the v-fragment node in between)
anyone to review/correct/contribute-to-ssr ?

+1 for a solution for this

Additional note: while
 will solves 90% of
 issues, cases where it should generates two <option> need a bit of hack.
Simplified case:
<template>
    <option :value="x">X</option>
    <option :value="x + 1">X + 1</option>
</template>

Currently is impossible do that without some kind of wrapper hack, because anything inside <select> that not <optgroup> or <option> will be ignored by browser, and <optgroup> will change the behavior.
The same could be applied to example below:
<template v-for="x in range">
    <option :value="x" v-text="someMagic(x)"></option>
</template>

Someone have some clue to where we could try improve the current code to support that? At least a start point, so some devs could try to help the vue team too.

@rentalhost: I'm not a Vue dev, but thank you for the <option> use-case. I'm curious, can you elaborate a bit more on it? What's your use-case of wanting <option> values output in a different template than the one that outputs the <select>?

@effulgentsia so... basically, I have an API that will returns a file tree like that pastebin. User can select any file from some folder. So the final structure should be like (jsfiddle): (Note the InnerFolder indent because it is inside of OuterFolder.)
<select>
    <option disabled>🖿 OuterFolder</option>
    <option> FileA.ext</option>
    <option> FileB.ext</option>
    <option disabled></option>
    <option disabled> 🖿 InnerFolder</option>
    <option>  FileA.ext</option>
    <option>  FileB.ext</option>
</select>

The problem is that due to original API structure, the best way to do should be like:

<template>
    <select>
        <v-folder-option :folder="folder" :depth="0"></v-folder-option>

    </select>
</template>

<template>
    <option disabled></option>
    <option disabled v-text="depthSpacing() + folder.title"></option>
    <option v-for="node in folder.nodes" v-text="depthSpacing() + node.title"></option>
    <v-folder-option v-for="child in folder.children" :folder="child" :depth="depth + 1"></v-folder-option>
</template>

But this approach is impossible for now.
So what I had to did was to "collapse" the API JSON to a "single level", so I got something like that pastebin. With that I could build a yet compatible way, like that:

<template>
    <select>
        <template v-for="node in nodes">
            <template v-if="node.type === 'folder'">
                <option disabled></option>
                <option disabled v-text="depthSpacing(node.depth) + node.title"></option>
            </template>
            <template v-else>
                <option v-text="depthSpacing(node.depth) + node.title"></option>
            </template>
        </template>
    </select>
</template>

The vue seems more simple, but the collapse method should be considered as part of a new complexity.

so there is still not yet a solution to render multiple children like React.Fragment does?
Just wondering, I know stuff like this can take time, just has been seen suggestions but did not see any follow up...
Note: I am writing Vue with JSX btw...

if allowing multiple root is too difficult to implement, would'nt it be possible to provide a custom tag which serves as an invisible wrapper, exactly like the <template> tag ? (except that the <template> tag cannot be included inside another <template> tag).

Two solutions have existed for quite some time now:

Use a vue functional component (see the second comment of this issue)
Use vue-fragments (third-party extension)

@posva Can we get this thread locked so that future readers will see these solutions?

Closing as this was implemented in Vue 3 but cannot be backported to Vue 2


FHB-381 build warnings (part 1)

Part 1 - fix warnings
Note: Temp addition of , feature/fhb-381-build-warnings build trigger - will remove at end

Just tweaking the title so Jira can pick it up :)

What's coming in part two, just so I know what the scope of this PR is


Is there a way to observe an object attribute without it being converted to a ViewModel?

Hi :)
Is there a kb.observable() equiv. of the collection's "models_only" flag? I have some attributes of a model that are objects. I want my ViewModel's attribute to track the object changing but don't want a ViewModel. Currently I'm using the following but it would be nice if it was part of the kb package:
function rawObservable(model, key)     {         var observer = kb.triggeredObservable(model, 'change:' + key);         return ko.pureComputed(function() {             observer();             return model.get(key);         });     }

Did you try a factory?
Maybe something like:
class MyViewModel extends kb.ViewModel
  constructor(model, options) ->
    super(model, options, {factories:
       key: {create: (model, options) -> return model; }
    })

I'm not hot on coffeescript so just to clarify, I think the code above would be used to define a constructor for the attribute that would usually be turned into a ViewModel. Then when using kb.observable() you would supply that constructor which would then return the model directly rather than a viewModel created from it. Is that about right?
So I could define a generic 'don't make me into a ViewModel' ViewModel constructor and use that where I wanted the actual model.

@far-blue Hmmm. I might not understand your use case. My assumption is that the observable is part of a ViewModel which i why I suggested a factory for the attribute in question.
Can you show me a little more context to your problem and explain why a factory is not a fit?

Closed due to inactivity


Fix pipelines to run for PRs from forks of pydpf-core

Several contributors tend to fork the project before contributing instead of cloning it, however the current pipelines are not set-up to run for PRs from such forks. This seems to be possible for pymapdl and maybe should be made available for pydpf-core. Conditions to be met are to be discussed.

@PProfizi That's an interesting information. Internally we've been promoting some tutorial videos from @jgd10 on working with Github. If my memory is correct in this video it is recommended to fork the project. Perhaps internally we should highlight that for PyDPF cloning is needed ?

#216
I confirm this does not work for me either. Indeed the best practice given in other projects and docs is to fork, so this pipeline behavior should most likely be changed in the very near future.

this pipeline behavior should most likely be changed in the very near future.

The reason why it's failing is the use of GitHub secrets. Secrets aren't copied to forked repos, so the pipelines fail as they can't pull the private DPF binaries.

Running the pipelines from forks is, in the end, not something we may want to allow. Closing as not planned for now.


Annotate sqlalchemy.orm.mapper.validates

Adds type annotations to the validates decorator. I'm using this one quite a bit in a project, would love to get it typed!

I have signed it


[Feature Request] Ability to Export Content from Signed Books

Hello! I would like to request a feature to export the content from signed books in the mod. This would make working with text in these books much easier and more convenient.

That sounds reasonable! It will be slightly lossy, as Scribble can't do RGB colors, hover events, click events and custom colors, but that should almost never be an issue anyway.

It would make pirated copies of books a lot easier.
I am not sure I am a fan of that.
Maybe the mod could check if you are the author of the book, or, the more vanilla way,
you can't save books that are a copy of a copy, just as you are unable to copy such a book in the game.

Hmm, interesting point, hadn't thought of that. I think I'm going to leave it in for now, as copying books will always be possible, even without the mod. Copies of copies have their uses, but I still don't think its an issue, as it's not a 1-to-1 copy (author will be different). If you are using a book as a keycard for example, this won't compromise that. Beyond that, I think it's a very niche use case to want to prevent piracy of books, generally it's not really a big problem.


[Schema Registry] Generate from latest TypeSpec

Packages impacted by this PR
Issues associated with this PR
Describe the problem that is addressed by this PR
Generate RLC layer from TypeSpec for 2022-10 API version
What are the possible designs available to address the problem? If there are more than one possible design, why was the one in this PR chosen?
Are there test cases added in this PR? (If not, why?)
Provide a list of related PRs (if any)
Command used to generate this PR:**(Applicable only to SDK release request PRs)
Checklists

[ ] Added impacted package name to the issue description
[ ] Does this PR needs any fixes in the SDK Generator?** (If so, create an Issue in the Autorest/typescript repository and link it here)
[ ] Added a changelog (if necessary)

API change check
API changes are not detected in this pull request.

API change check
API changes are not detected in this pull request.

API change check
API changes are not detected in this pull request.

API change check
API changes are not detected in this pull request.

API change check
API changes are not detected in this pull request.

Live pipeline tests pass here

API change check
API changes are not detected in this pull request.

API change check
API changes are not detected in this pull request.

API change check
API changes are not detected in this pull request.


animating different element on hover

How would I implement this css:
li:hover ~ li p {
  animation: wave-animation 0.3s infinite;
}

Right now I have this:

What Im trying to do is make the hand shake when i hover the words.
Thanks.

something like
  style([
     selector("li p", [
         hover([ animation(~duration=200, ~iterationCount=infinite, waveAnimation, ), ]),
      ],
 ), ])

with animationWave defined with keyframes
let waveAnimation =
  Css.(
    keyframes([
      (0, [transform(...)]),
      (100, [transform(...)]),
    ])
  );

?

Thanks. I will try to implement. I have tried adding it here https://github.com/idkjs/bs-css-emotion-footer/blob/2a63e5fec8ca0c7b34782019e9313e1bc70c5967/src/Footer.re#L52 but that doesnt do the trick. It animates the hand when you hover on the hand. Will keep at it.

Yes, of course, only the hand is a 'p'.
if you put a style on each li, you can just use:
  let li =
    style([
      selector("li:lastChild", [gridColumn(1, 2), gridRow(1, 2)]),
      hover([animation(~duration=300, ~iterationCount=infinite, waveAnimation)]),
    ]);

or if you put a style on 'ul', an easy way to do it is:
  let ul =
    merge([
      style([
        display(`inlineGrid),
        gridAutoFlow(`row),
        gridGap(px(24)),
        justifyContent(`center),
        margin(`auto),
        children([hover([animation(~duration=300, ~iterationCount=infinite, waveAnimation)])]),
      ]),
      style([media("(min-width: 500px)", [gridAutoFlow(`column)])]),
    ]);

Thanks for this feedback. I think I explained it wrong. The idea is that when you hover over the three items, they do not move but it triggers the p tag/hand to wave.
I got it to produce that result by moving the selector call inside of the hover call like so:
  let li =
    style([
      selector("li:lastChild", [gridColumn(1, 2), gridRow(1, 2)]),
      hover([
        selector(
          "~ li p",
          [
            animation(~duration=300, ~iterationCount=infinite, waveAnimation),
          ],
        ),
      ]),
    ]);

The last thing I cant figure out is how to move the hand to the front of the line.
This is just a port of this codepen.
It has the hand in the first position. It may be related to justify-items in the original css.
Is justify-items: center; the same as justifyContent(`center). I don't see justify-items in the api anywhere.
Thanks.


Fix bankAccountID not being passed on manual BA connect

Details

Due to https://github.com/Expensify/App/pull/22245 there was a regression where bankAccountID was not being passed when going through connect manually flow. So if you came back to it, it'd reset your draft on some pages and wouldn't find the bank account you were working on.
Fixed Issues

$ https://github.com/Expensify/App/issues/23408
Tests

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

Offline tests

QA Steps

Go to Workspace > Bank Account > Connect Manually
Fill out bank account, company, and something in personal details but do not save and continue
Back up to bank account step
Continue to company and personal details and verify personal details are still filled

[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 / Chrome
[x] iOS / native
[x] iOS / 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 a new component is created I verified that:

[x] A similar component doesn't exist in the codebase
[x] All props are defined accurately and each prop has a /** comment above it */
[x] The file is named correctly
[x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[x] The only data being stored in the state is data necessary for rendering and nothing else
[x] If we are not using the full Onyx data that we loaded, I've added the proper selector in order to ensure the component only re-renders when the data it is using changes
[x] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[x] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[x] All JSX used for rendering exists in the render method
[x] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[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(themeColors.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 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.
[x] I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

Screenshots/Videos

Web

https://github.com/Expensify/App/assets/12980971/d69268e0-748f-4eba-a659-ae0a9d63ac58

Mobile Web - Chrome

chrome.webm

Mobile Web - Safari

https://github.com/Expensify/App/assets/12980971/a067dee1-0bde-4dfd-a3a3-6a7bc7a5ac90

Desktop

https://github.com/Expensify/App/assets/12980971/ff26286d-b831-4281-975e-b3924aafc325

iOS

https://github.com/Expensify/App/assets/12980971/99927680-6e68-4664-a762-e8438f6c3927

Android

ezgif.com-gif-to-webm.webm

@Li357 can you please add QA steps?

Reviewer Checklist

[x] I have verified the author checklist is complete (all boxes are checked off).
[x] I verified the correct issue is linked in the ### Fixed Issues section above
[x] I verified testing steps are clear and they cover the changes made in this PR

[x] I verified the steps for local testing are in the Tests section
[x] I verified the steps for Staging and/or Production testing are in the QA steps section
[x] I verified the steps cover any possible 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 checked that screenshots or videos are included for tests on all platforms
[x] I included screenshots or videos for tests on all platforms
[x] I verified tests pass on all platforms & I tested again on:

[x] Android / native
[x] Android / Chrome
[x] iOS / native
[x] iOS / Safari
[x] MacOS / Chrome / Safari
[x] MacOS / Desktop

[x] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[x] I verified proper code patterns were followed (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] 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 verified that this PR follows the guidelines as stated in the Review Guidelines
[x] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[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] If a new component is created I verified that:

[x] A similar component doesn't exist in the codebase
[x] All props are defined accurately and each prop has a /** comment above it */
[x] The file is named correctly
[x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[x] The only data being stored in the state is data necessary for rendering and nothing else
[x] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[x] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[x] All JSX used for rendering exists in the render method
[x] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[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(themeColors.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 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.
[x] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Web
https://github.com/Expensify/App/assets/108292595/0f4d8769-5320-48a4-af84-6803107f0cbe

Mobile Web - Chrome

Mobile Web - Safari

Desktop

iOS

Android

Hey @Li357! Could you add screenshots to the checklist whenever you get a chance?

@srikarparsi Added for web, iOS, mobile safari, and desktop. Android emulator's giving me a lot of trouble unfortunately. I'll try to get them when I have the time

@srikarparsi Uploaded Android videos 👍

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

🚀 Deployed to staging by https://github.com/srikarparsi in version: 1.3.48-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to production by https://github.com/puneetlath in version: 1.3.48-5 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to staging by https://github.com/srikarparsi in version: 1.3.49-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to production by https://github.com/Beamanator in version: 1.3.49-3 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅


useLocaleHead stop workding when upgrade to 8.0.0-rc.5

Environment

Operating System: Linux
Node Version:     v18.17.0
Nuxt Version:     3.7.4
CLI Version:      3.9.0
Nitro Version:    2.6.3
Package Manager<EMAIL_ADDRESS>Builder:          -
User Config:      typescript, $development, runtimeConfig, build, nitro, modules, unocss, i18n, image, vue, $production
Runtime Modules<EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>Build Modules:    -

Reproduction
https://stackblitz.com/edit/github-s3mfea-rnbn7m?file=layouts%2Fdefault.vue
Describe the bug
When I upgrade from 8.0.0-rc.3 to 8.0.0-rc.5, useLocaleHead stop working.
Additional context
No response
Logs
[vue-i18n-routing] Locale ISO code is required to generate alternate link

Hmm, It appears to have been degrade by rc.5 release. /cc @BobbieGoede
https://github.com/nuxt-modules/i18n/compare/v8.0.0-rc.4...v8.0.0-rc.5

Ah, I believe this is a bug introduced by my refactor, sorry about that! 🙏
Fortunately there is a simple workaround for this, if you add another property to each locale, it should work as expected. I recommend adding a name to each locale, but any key will do. I have changed your reproduction to demonstrate here.
As for the reason this happens, the shape of the configured locales { code: string; iso: string; } is identical to the shape of string locales after being normalized. My bug incorrectly tries to restore the original configuration and writes that to .nuxt/i18n.options.mjs, I will look into a fix shortly!


 (I added a failing test demonstrating the issue)
This PR fixes the behavior so that children get passed their their original props in addition to the updated className.

Thanks!

@tikotzky Thanks for awesome work! and published as v2.6.3 just now :)


Is it possible to create a table where one column contains a link to a note, and another column is populated with all the tags from within each note?

Problem
stated above
Solution
create a table where one column contains a link to a note, and another column is populated with all the tags from within each note
Additional details
No response

Any ideas on this?

I was gonna leave a similar comment, as I am so used to Notion having a page within in each/every line. Even DB folder the only really viable alternative to this plugin, it also links to a note/page.
I want to be able to make a database for content, like blog posts, and then the Name (main) column will take you to that note

As I understand it you can embed a note within each row of a column, so this functionality should work for you!

Related: #384

I've tried embedding a note ,and your related doesn't seem to relevant? The meta data in my notes all checks out, but it wouldn't mean that they would pop up in NLD


For new release switch to minified js dependencies

When I added back the dependencies into the webpacked refactoring of the extension, for debugging purposes I used the unminified version wherever possible. This causes webpack to throw warnings, though, since the popup/options entrypoints are now pretty big (>3mb each). I don't think this is that big of a deal, especially for an extension rather than a webapp, but before release we should switch all dependencies in options.js and popup.js to minified.

I am closing this issue as @kalicki1 mentioned that the Firefox extension review requires unminified libraries. Given that webpack still works, just with warnings, I think it is OK. Feel free to reopen if you prefer @stanleymarkman.


Document how to add custom CA certs

We should give an example of how to add a custom CA to allow for air-gap scenarios.

This should likely be done using the cloud-config file writing. A follow on issue would be to build a mechanism to update the certs after deployment

@agracey You mean adding a CA in the deployed cluster?

Adding a CA to the OS itself. This is important when airgapped as you need the cert to allow for downloading the containers for the cluster itself.

To include a custom registry mirror with a custom certificate I'd do it from the machine registration cloud-config. So any node registering to this end point would be set. I do not exactly remember what I was actually testing what I did a simiar setup (I think I was trying to test IBS builds form registry.suse.de), the certificate was functional but the mirror registry setup was not (as I was not actually testing it I did not spend time on debugging).
I'd set a registration cloud-config to something similar to:
spec:
  config:
    cloud-config:
      write_files:
      - path: /etc/elemental/ca_certs/custom.pem
        owner: root:root
        permissions: '0644'
        content: |
          -----BEGIN CERTIFICATE-----
          MIIG6DCCBNCgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBqDELMAkGA1UEBhMCREUx
          ...
          -----END CERTIFICATE-----
      - path: /etc/rancher/k3s/registries.yaml
        owner: root:root
        permissions: '0644'
        content: |
          configs:
            registry.suse.de:
              tls:
                ca_file: /etc/elemental/ca_certs/custom.pem

This is mostly aiming to follow k3s docs

We would need this on both the ISO and the installed system. David's config looks simple enough but we need to document how to get it into the SeedImage as well.


Sorting Elements

Hi,
first of all, I really like this library. Thanks for your hard work.
Secondly I have a question. I have column with div elements is free of inputs. I would like to sort this kind of a column but the problem is that when I use sorter function inside custom field the parameters index1, index2 are undefined.
Is there anything I need to look for when sorting DIVs and is that even possible?
Thanks

Thank you for the feedback!
Could you please post your grid config in comments?

Closing due to inactivity


The publishing tool fails to combine files

https://github.com/tripleblindmarket/safe-places/issues/59

Unfortunately I cannot provide the test data I am using as it is personal data.
Steps to reproduce
Redact two files containing different data (in this case, one from Spain, one from the US) from the same day
In the publishing tool, load both files
Publish the data
Expected behaviour
The file exported from the publishing process should contain both redacted datasets
Actual behaviour
Only one dataset is included. The following is visible in the console:
Uncaught TypeError: Cannot read property 'length' of undefined
at updateStats (index.html:1504)
at updateExposurePoints (index.html:1404)
at updateDateRange (index.html:1343)
at HTMLDocument. (index.html:1314)
at e (jquery.min.js:2)
at t (jquery.min.js:2)

@kylemtowle
@penrods
What your take on the above?
Should we support the ability to load multiple files in the publishing tool on the MVP?
I'd prefer holding off implementation on this until the next version.  For now, suggest simply showing an error message if the user tries to load more than one file.

per conversation with @kylemtowle will not support loading of multiple files at this time, however will gracefully handle errors

That's fine, but note the product spec says that files are to be aggregated, and it would a significant privacy issue if each individuals location history was to be stored unaggregated.

Adam,
You are correct, but that happens by default when the app is used with a fully implemented backend, which is the intended production use.
Thanks,Kyle
On Saturday, April 25, 2020, 05:51:35 AM PDT, Adam Leon Smith<EMAIL_ADDRESS>wrote:
That's fine, but note the product spec says that files are to be aggregated, and it would a significant privacy issue if each individuals location history was to be stored unaggregated.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

@AdamLeonSmith
Could you test again on dev_mvp?
When I loaded these two files on the publisher tool, all points showed up without any problems.
files.zip

@AdamLeonSmith sorry.  Accidentally got issue #26 and #5 confused with that commit.  This issue is still open


encoding/gob: documentation incomplete(or wrongly implemented)

What version of Go are you using (go version)?

go version go1.11.2 linux/amd64

Does this issue reproduce with the latest release?
yes
What operating system and processor architecture are you using (go env)?
go env Output
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/jaap/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/jaap/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/lib/go"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/home/jaap/go-projects/templatebuilder/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build816382028=/tmp/go-build -gno-record-gcc-switches"

What did you do?
I implemented the gob.GobEncoder (and gob.GobDecoder) interface(s) using pointer receivers on both ends.
What did you expect to see?
I expected to see gob calling my encoder and decoder to transmit the data
What did you see instead?
Gob doesn't use my encoder/decoder.
After debugging I could see that it does recognize that it implements both GobEncoder and GobDecoder, but for some reason doesn't use them.
After removing the * from the Encoder(making it a non-pointer receiver) receiver gob does use my implementation(successfully).
UPDATE:
I know that this is because I pass a non-pointer to enc.Encode() but this is was a bit frustrating.
Maybe just add a note that using a pointer receiver only works with pointer values, while non-pointer receivers work with both pointer and non-pointer receivers.

/cc @robpike for further comments.

Please show a complete, compact program that illustrates the problem.

https://play.golang.org/p/idvKWcdTPiI
By commenting out line 36(BWithPointerData())  you can see that it works when a pointer is given and not vice versa.
I was a bit confused at the time of reporting this, I think a simple warning/comment in the documentation warning about this would have made my day a lot easier, and I expect this will help other people too.

This is how Go works. I'm not sure it's the gob's package job to explain the difference between the method sets of pointers and values.
https://golang.org/doc/faq#different_method_sets

I think it would be more convenient if there would be a reference to the faq in the gob(and JSON...) documentation.
If you encounter something you can't figure out, you look at the definition(of the interface in this case), not the general faq.
Although I thought it "worked" with JSON, it also doesn't encode with a pointer method, but it does decode using the unmarshal method(unlike gob).

If you encounter something you can't figure out, you look at the definition(of the interface in this case), not the general faq.

If that "something" is not related to that type, I think that expectation is incorrect. If I am working with encoding/json, and I cannot figure out how slice append work, I do not expect that to be explained in the interface definition.
Method sets are a design of the programming language itself and not specific to any package. I don't think adding a link to the FAQ just in gob and json, for something that is general to the programming language, is very helpful.
It is clearly documented in the spec and also in the FAQ.
I am going to close this as the original issue title is resolved. There is no issue with encoding/gob. If you feel method sets need to be documented more prominently, please feel free to open an issue with suggestions, and with reasoning explaining why the current documentation is not enough. Thanks.


Document new monthly job: search & destroy spammers

User story
It seems that we have a lot of SPAM profiles on the website.  This is bad for us:

Because it lowers trust in the platform when users see this
Because Google probably takes this into account for SEO

Best solution for this problem
To start somewhere we need a recurring job to find these spammers and ban them. This will give us insights about what types of contents are there and eventually how we could automatize or provide tools to do this more easily.
The goal of this issue is to document the procedure as well as the types of SPAM contents encountered in https://docs.opencollective.com/help/internal/moderation.
MVP
The MVP for this job should be:

Search for spam Collectives, expenses and comments
Ban or limit the spammers profiles :hocho:
Document the procedure

Metrics

Fewer spam on the platform
(limited) reduce of support requests for SPAM

First round completed, banned 438 profiles from the platform. Mostly "keto" stuff.
Data is below, I'll close the issue after updating the documentation with the steps I followed.

nb_deleted_profiles
deleted_users
nb_deleted_tiers
nb_deleted_members
nb_deleted_updates
nb_deleted_payment_methods
nb_deleted_connected_accounts
nb_deleted_conversations
nb_deleted_conversation_followers
nb_deleted_comments
nb_deleted_expenses
nb_deleted_applications
nb_deleted_orders
nb_deleted_notifications
nb_deleted_users
deleted_profiles_ids

438
232
4
222
50
172
0
0
0
0
12
1
0
0
232
{70569,47767,47782,73216,73224,74094,70572,73238,66133,47874,47886,47894,75077,49114,75085,70091,74111,49125,69238,75076,51551,51552,51554,51559,75103,74403,21276,75110,27255,27257,27258,27259,57090,57087,25974,67019,57108,48105,48114,48137,48124,55619,55623,46031,77340,49261,49285,58618,45240,75293,58634,61253,50092,59919,50094,46887,59930,50111,46134,46138,77396,51149,50120,49417,49418,48411,50506,50520,48556,75304,50535,48568,39075,50836,77459,77461,40399,75812,73420,73428,48673,55732,55737,48689,55750,55756,50217,50223,55763,50250,45634,46503,47609,45676,47611,68381,48782,48775,47649,47653,45732,57282,48798,48807,57307,49756,55857,73473,75821,75824,73466,46632,49798,49824,44619,44630,44792,44789,44793,45896,44980,46770,50375,46771,46767,47186,45093,48981,49100,47645,55892,60101,55896,75447,55899,60106,51051,51269,51444,61416,77562,68972,53859,60136,53861,53001,53862,61428,60147,77589,77598,54821,54824,77627,57431,71503,62462,76045,57449,68307,62477,62489,62497,72239,72243,72244,56032,60221,60224,72265,56048,60235,62519,57540,62521,62523,67091,67092,67093,67097,67106,67105,52216,57575,62536,57585,57587,67129,52365,52378,52391,76121,52509,52537,53182,65589,52692,53867,77773,53873,65611,52849,54041,53883,77794,77796,53887,65620,58998,72353,77797,66331,65635,67218,66351,67915,67223,77843,67237,67496,67244,61698,53190,53335,77853,71537,57689,64669,67755,67536,53367,62668,62673,66424,67769,64705,67772,64706,67560,70099,71587,67567,73496,70103,71593,71595,67931,70114,60498,53644,53497,53650,53504,53526,53630,57805,76276,56381,76285,60550,68006,70779,67405,76360,57838,63632,66548,63886,66550,63888,70808,63890,63893,66559,72469,72474,72659,63904,63905,66573,72673,63675,64902,60657,61886,61887,64911,61890,72489,73061,58009,61901,69796,53886,53949,78044,78052,78061,60717,78065,78088,71001,78034,58121,54166,54167,76508,62980,58147,71767,69447,58154,59473,63007,60813,73110,60832,69417,59505,62054,59523,69435,59547,78295,62083,62096,62099,78315,78321,70389,78421,76717,58286,76726,56794,64089,76744,76755,56826,58334,58335,76789,76790,69592,61004,61006,59724,69599,66762,71197,78454,71200,71202,66767,61025,78471,54298,78481,78515,54296,54303,54320,54463,71995,58443,58444,61041,54498,71242,56967,61047,66770,61049,54583,58475,54609,54607,72829,66055,66062,59761,54791,54917,66799,63189,62272,62276,54955,62289,63210,55144,55150,66832,65398,66844,55405,55412,76957,78755,72075,72080,55517,78829,78830,76992,77002,79011,79009,79030,79032,79029,79028,69203,69199,79244,79240,79287,79286,79281,79299,69966,72081,72090,73671,73673,73927,73928,74607,74626,73956,72672,73726,74676,74682,74446,74879,75127,75337}

Job documented in https://docs.opencollective.com/help/internal/jobs/search-and-destroy-spammers. I'll now be doing this on a monthly basis.


Support TailwindCSS

Tailwind is already supported (you can import its CSS and add a postcss.config.js). There is even a test for it: https://github.com/tajo/ladle/tree/master/tests/css
https://www.ladle.dev/docs/css


Broken demo app

I've tried the demo app but no luck. It launches but nothing shows up on screen.
Any ideas?

@pjelar Did you use a real token?

Using a sandbox token. Do I need a real token?

@pjelar No, that should be fine. I will look into it, have you tried importing the module into it's own project?

@pjelar In order to launch the demo app, you have to change the "main" entry in the package.json to "main": "node_modules/expo/AppEntry.js",. I'll update the README.

Thanks for updating
On Wed, 24 Feb 2021 at 02:59, Jordan Baczuk<EMAIL_ADDRESS>wrote:

Closed #2 https://github.com/burstware/expo-plaid-link/issues/2.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/burstware/expo-plaid-link/issues/2#event-4368507216,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAHGC4DRNA7CVILU43B2WFDTARTQ5ANCNFSM4XZHQRLQ
.


Refactoring

make code slightly more idiomatic. remove dependency on struct. demote Option[string] to string for fields where empty string is functionally equivalent to none. manually generate JsonNode to reduce size of json payload.
look at the refactoring commit to ignore indentation changes. can split it up later if needed.

Hi, thanks a lot for this!
This mostly looks great but I'm not 100% keen on toJson as it will make adding new fields a little bit more annoying. As a rule of thumb I value programmer time much higher than user time : )
I'll try and review and get this merged soon as it looks like a "grasp the nettle" PR where it'll get stale very quickly.

toJson reduces payload size and simplifies other code, since we dont have to rely on Option just to generate null fields.

I think ideally it would throw a compile-time error if there were any properties in MessageResp that it didn't handle. I'm concerned that someone will add a property and then spend a long time trying to work out why their code isn't working

i made so it raises compile time error if a field isnt handled in toJson


CSV ?sql= should indicate errors

https://latest.datasette.io/_memory.csv?sql=select+blah is a blank page right now:

curl -I 'https://latest.datasette.io/_memory.csv?sql=select+blah'

HTTP/2 200
access-control-allow-origin: *
access-control-allow-headers: Authorization, Content-Type
access-control-expose-headers: Link
access-control-allow-methods: GET, POST, HEAD, OPTIONS
access-control-max-age: 3600
content-type: text/plain; charset=utf-8
x-databases: _memory, _internal, fixtures, fixtures2, extra_database, ephemeral
date: Mon, 07 Aug 2023 23:12:15 GMT
server: Google Frontend

Originally posted by @simonw in https://github.com/simonw/datasette/issues/2118#issuecomment-1668688947

This may end up being a renderer plugin hook design question too.


Markdown: indented code blocks cause text to be marked as invalid.

Describe the bug
If I am viewing changes from commits for a markdown file, large amounts of text are marked invalid at the end of an indented code block. I believe the markdown is valid (the file is displayed correctly in a number of markdown editors) and the highlighting makes the code very difficult to read.
I have only noticed this happening for the last few months.
See example images below.

This is rendered (in GitHub) as

which is what I wanted. So I can't see where the error is.
Here's a link to an example in my public repo. https://github.com/mendix/docs/commit/20b334e90d4f069326b4a1e4a51120801b900660#diff-fa4e89b8b6b7fca9589f44b77d58a53d33c15272a2853b46e55e86e0aee2e7f0R205
Expected behaviour
There should be no highlighting for this syntax. If the indented code block ticks are a syntax error according to strict Markdown, then only the ticks should be highlighted. But I don't believe this should be highlighted at all.
Related discussion
None that I have found.
Additional notes
I've raised this with GitHub (https://github.com/orgs/community/discussions/66093), but I understand that here is a better place to report the problem.

I've raised this with GitHub (https://github.com/orgs/community/discussions/66093), but I understand that here is a better place to report the problem.

Nearly. From our troubleshooting doc:

Linguist detects the language of a file but the actual syntax-highlighting is powered by a set of language grammars which are included in this project as a set of submodules as listed here.
If you experience an issue with the syntax-highlighting on GitHub, please report the issue to the upstream grammar repository, not here.
Grammars are updated every time we build the Linguist gem so upstream bug fixes are automatically incorporated as they are fixed.

Closing as this will be an issue with the upstream grammar and not Linguist.


Setting timezone

Is there a way to change the timezone of flask-admin? eg. postgres uses timestamptz and I'd like to be in a timezone other than local system timezone.

There's an issue open for this one already: https://github.com/flask-admin/flask-admin/issues/772
There's a workaround described in the last post.


PR to send the ranking components modified

Description
Fixed all about ranking
Change List
[Add] Added ProfilePage.js to redirect to a specific user through the table or cards
[Edit] Edited RankingCard.js, RankingTable.js and RankingPage.js to add the functionality to redirect to a specified user throught one of these components

[Edit] Edited Layout.js to solve a problem in a navbar

[Edit] Edited element.js and index.js to create the logic functionality of ProfilePage.js

List of Developers
This feature will be implemented by the following Developers:

@giorgiosld

This pr have a bug inside the Layout.js so i will close now


Accept jaeger.Batch Thrift type in HTTP handler

Also add a test using jaeger-client (depends on https://github.com/uber/jaeger-client-go/pull/161 and new release of the client)

Coverage remained the same at 100.0% when pulling 5ad601dd3836c020821e7663a53e488c5094a396 on http-thrift-batch into 27242eaee3a4c04f2760e4dcf5f315f5528ed1b3 on master.

Coverage remained the same at 100.0% when pulling 2f1827af347b6ac45aaddaee8da334c0b86698ae on http-thrift-batch into 27242eaee3a4c04f2760e4dcf5f315f5528ed1b3 on master.


Make instruction blocks collapsible, and save the state for each project

I bet it would save workers a lot of scrolling over time.

for each project for each block?

Yeah. So if I collapse a given instruction block for the project, it stays collapsed as I continue to work on tasks.

it can be done in the front end but to store these in the backend the change is YUGE and probably not worth it, i.e we only store the results of the input components

closing, not feasible to implement it as originally described, also workers don't seem to have issues with it
reopen if it's really an issue, and after some major modifications of this issue


Incorrect shared socket when debugging extension with custom data directories

I am trying to debug my VSCode extension, but I need to use separate data paths because I don't want to mess up my local settings. After setting the data paths in the arguments for the extension host launcher, the extension marketplace becomes inaccessible to the extension host instance. Weirdly, this isn't an issue with portable versions.

VSCode Version: 1.43.0
OS Version: Linux 5.5.8-1-MANJARO

Note: I am currently using VSCodium, but I can confirm this also happens with the OSS and Insiders versions as well.

Steps to Reproduce:

Clone https://github.com/arnohovhannisyan/vscode-incorrect-socket
Run start.sh or start.bat
Start debugging with F5
Go to the Extensions tab to find the error
Check the console for the error

Screenshots:

Does this issue occur when all extensions are disabled?: Yes

I have no idea how these arguments are executed when running extensions.

You cannot use a different data dir and expect everything to work, I am sure there are more issues. Please remove those parameters from the launch configuration and it should be fine.


custom text not showing on facebook share

when i add custom text content  in ' text ' field. it's not showing up on facebook share.
$("#share").jsSocials({
shares: ["facebook"],
url: "http://url.to.share",
text: "this is my custom text which is not showing in fb share",
showLabel: true,
shareIn: "blank"
}

Facebook doesn't use that text.
Only thing facebook uses is the url.
It then visits the url and fetches all information from that webpage (either via og tags, or via 'logic')

@Ruud68  thanks for replying. is there any way to show the custom content while sharing facebook ?

@kirankiru, please checkout the following issue https://github.com/tabalinas/jssocials/issues/8

Can anyone able to send the text while sharing with Facebook.
Please help me out...


[Don't Merge] [MSYS-722] Fixes of Knife search not working with forward slash.

Knife search not working with forward slash
Pass:
knife search node 'stack_id:arn\:aws\:cloudformation\:eu-west-1\:569478613970\:stack//*'
knife search node 'stack_id:arn\:aws\:cloudformation\:eu-west-1\:569478613970\:stack/*'

$ bundle exec knife search node 'stack_id:arn\:aws\:cloudformation\:eu-west-1\:569478613970\:stack//*'
2 items found

Node Name:   ammy-cnt
Environment: _default
FQDN:        ammy-cnt.ammy-cnt.d7.internal.cloudapp.net
IP:          <IP_ADDRESS>
Run List:
Roles:
Recipes:
Platform:    centos 7.1.1503
Tags:

Node Name:   msys
Environment: _default
FQDN:        msys-Lenovo-E41-80
IP:          <IP_ADDRESS>
Run List:    recipe[cache_replication_group]
Roles:
Recipes:     cache_replication_group, cache_replication_group::default
Platform:    ubuntu 16.04
Tags:

$ bundle exec knife search node 'stack_id:arn\:aws\:cloudformation\:eu-west-1\:569478613970\:stack/*'
2 items found

Node Name:   ammy-cnt
Environment: _default
FQDN:        ammy-cnt.ammy-cnt.d7.internal.cloudapp.net
IP:          <IP_ADDRESS>
Run List:
Roles:
Recipes:
Platform:    centos 7.1.1503
Tags:

Node Name:   msys
Environment: _default
FQDN:        msys-Lenovo-E41-80
IP:          <IP_ADDRESS>
Run List:    recipe[cache_replication_group]
Roles:
Recipes:     cache_replication_group, cache_replication_group::default
Platform:    ubuntu 16.04
Tags:

Signed-off-by: piyushawasthi<EMAIL_ADDRESS>Description
[Please describe what this change achieves]
Issues Resolved
[List any existing issues this PR resolves, or any Discourse or
StackOverflow discussion that's relevant]
Check List

[ ] New functionality includes tests
[ ] All tests pass
[ ] RELEASE_NOTES.md, has been updated if required (not required for bugfixes, required for API changes)
[ ] All commits have been signed-off for the Developer Certificate of Origin. See https://github.com/chef/chef/blob/master/CONTRIBUTING.md#developer-certification-of-origin-dco

Please don't merge, as per @btm suggestion we have to add unit test cases for forward slash.
as: it "returns search results when the query contains a slash"

@btm - I have added some test cases please review PR, and let me know in case of any concerns.

Thanks for valuable question @stevendanna
1: if query_string contain single forward_slash then Chef::ServerAPI will return Net::HTTPServerException: 400 "Bad Request" error.
2: Yes as per issue it's related to the node.
3: I think Chef::ServerAPI.

1: if query_string contain single forward_slash then Chef::ServerAPI will return Net::HTTPServerException: 400 "Bad Request" error.

Yes, but why?


print the expr name when expr error happened

dev=> explain select 'abc'::int from t;
ERROR:  Failed to run the query

Caused by these errors (recent errors listed first):
  1: Expr error
  2: Parse error: integer invalid digit found in string

expected:
dev=> explain select 'abc'::int from t;
ERROR:  Failed to run the query

Caused by these errors (recent errors listed first):
  1: Expr error: in expression CAST
  2: Parse error: integer invalid digit found in string

Duplicated with #12913?