Thumbs up looks like a turkey

I cannot unsee that the thumbsup looks like a turkey.

If you are accepting pull requests, I will submit one.

Amazing.

-_-

Amazing

So.... :+1: for pull request??
Here's what I came up with as an alternative. Happy to make adjustments based on feedback.

And at smaller scale:

That definitely looks way better :+1:

+1

@jglovier wrote:
Here's what I came up with as an alternative. Happy to make adjustments based on feedback.

I think your alternative looks better, but still not ideal.
Because:
If you look at some of the other Twemojis which involve a fist:
"White up pointing index" Twemoji:

"Victory hand" Twemoji:

"Raised fist" Twemoji:

Then you can see that the lines between their fingers are white. And those white lines are thin.
Others, like the:
"Thumbs up sign" Twemoji:

"Thumbs down sign" Twemoji:

"Fisted hand sign" Twemoji:

have brown lines between their fingers and the lines are thick.
There are some more Twemojis which involve hands/skin where on some on of them thin white lines are being used in the design while on others thick brown lines are being used in the design.
I don't understand why there has to be this inconsistency. It looks, well, inconsistent and bad.
IMHO the Twemojis which are using the thin white lines look much better than the ones which are using the thick brown lines.

So, any chance you could make it like that, so that the "thumbs up sign" Twemoji, the "thumbs down sign" Twemoji and the "fisted hand sign" Twemoji would be more consistent with the "White up pointing index" Twemoji, "Victory hand" Twemoji, "Raised fist" Twemoji and so on?
Regards

@wp9015362 thanks for the awesome feedback!! You are so right re: inconsistent styles. I do like the idea of sticking with the white outline, although I'd love to hear from @caniszczyk or another maintainer before I go running too hard in any direction.
I know they commissioned the artwork for these from Icon Factory, and they were probably art directed externally from the open source efforts. From what I've seen the pull requests here have mostly been code related - not artwork - so I'd love if someone could confirm is this change is something the maintainers are even interested in?

@jglovier :
You're welcome :smiley: .
There's one thing I would like to ask while you are here if you don't mind:
I saw that on you're website:
http://joelglovier.com/
you're saying:

I work at GitHub where I’m part of the Creative Team.

GitHub currently seems to be using the Apple Emoji set in it's markdown, see:
https://github.com/blog/1289-emoji-autocomplete
https://github.com/blog/816-emoji
I am wondering:
Where does GitHub take it from?
And why does GitHub use the Apple Emoji set and not the Twitter "Twemoji" Emoji set?
And are there any plans to replace it with the Twitter "Twemoji" Emoji set?
Regards

@wp9015362:

Where does GitHub take it from?

We use: https://github.com/github/gemoji

And why does GitHub use the Apple Emoji set and not the Twitter "Twemoji" Emoji set?

Primarily because the Twitter set was not a thing when we implemented Gemoji.

@jglovier wrote:
We use: https://github.com/github/gemoji

So, does that mean that the Apple Emojis are open source as well?
Sorry if that might be a little off-topic, but since you are already here...
Regards

@wp9015362 I don't maintain the Gemoji project, so you'd have to refer questions about that project to that repository.

@jglovier wrote:
although I'd love to hear from @caniszczyk or another maintainer before I go running too hard in any direction.

@caniszczyk :
Any update?
Regards

I've seen this issue reported independently (https://src.sourcegraph.com/sourcegraph/.tracker/248), so I just wanted to say :+1:. I think improving the thumbsup, thumbsdown icons will help make twemoji even better. Thanks!

V2 has landed with 1661 covered emoji VS just 874 in previous version.
Easy way to update?
prefix /twemoji.min.js from MaxCDN via 2/twemoji.min.js and you're good to go.
P.S. it's probably still like a turkey, no designer ever read this repo

P.S. it's probably still like a turkey, no designer ever read this repo

Yeah, except @jglovier who even asked if it's OK to add the pull request for his much better version.
@WebReflection Please hand the maintenance over to someone else.
We switched to Emoji One a while ago.

@reFX-Mike thanks for your kind words and you are welcome for the latest release.
As reminder, I take care only of the JS side of this project and I'd love to have some graphic designer responsible for this repository.
If I leave here, you'll have zero maintenance, design and assets speaking.
As second reminder, I'm volunteering here, I don't work at twitter since 2014, and I'm not willing to take insults for free.
Thanks for your understanding.

@WebReflection then stop volunteering here. You completely ignore people (like you ignored @jglovier ), then claim that nobody submitted anything (which is obviously wrong) and now pout when called out.
I've experienced your "help" first-hand, when I offered to fix the gray moons (something I could have done in note-pad, since SVG are very simple text-files) but you had to "make sure" we're all legit etc.
You. Are. Hurting. This. Project. More. Than. If. You. Stopped. Contributing. At. All.

you keep not understanding how this repository works. It's not in my will, nor power, to take assets/design/graphic decisions whatsoever.
I've explained it to you a while ago, and I'll keep pointing at this very same post from now on every time you'll keep ignoring this fact.
I'm not maintaining the assets part of this project, you are complaining with the wrong person and I won't tolerate any other personal insult to me in this project.
Take care.

This thread is getting out of hand. I appreciate the passion for results, but @reFX-Mike being rude doesn't help open source. I'm certainly bummed to see the latest version not include a fix for this issue, and the lack of even a direct response. But I also appreciate the difficulty of maintaining a large open source project, and the work that @WebReflection is putting in. She should not be reprimanded for a problem which was not hers to address.
To the maintainers of this project, I'd suggest locking the discussion on this thread to prevent further mis-expressed frustration or superflous +1 comments.
And thanks for all of your efforts on this project. :heart:

Also, if the decision to not accept design changes via this repository is an intentional one, then it might be worth adding a wontfix label to this issue just for reference and clarification for future visitors.

@jglovier Just FYI: Andrea is not a "she" ;)

She should not be reprimanded for a problem which was not hers to address.

it's a he but Andrea is male name only in Italy, where I come from ... I'm kinda used to it, that's why people keep telling me I should put my face on my avatar.
I have to admit I like when people act differently mistaking my name, no matter if they support me or not :-)
Thanks for your understanding. If you check the commit history of this project, all new assets landed in one shot and I have no contact at all with any designer at twitter.
All I can do is push for it like I've done already in order to obtain this current release.
Examples:
https://github.com/twitter/twemoji/issues/116
https://github.com/twitter/twemoji/issues/103#issuecomment-173745303
Plus private messages with some contact I still have in there, unfortunately not a single designer.
Sad to find @reFX-Mike like "reward" for my effort ... but sure, I am hurting so much in here.
Cheers

it's a he but Andrea is male name only in Italy, where I come from ... I'm kinda used to it, that's why people keep telling me I should put my face on my avatar.

@WebReflection whoops - very sorry about that.

no reason to be sorry, it's a common mistake.
Once a manager in a famous company shaked my hand telling me: "welcome to this compani, Ayako" and after that shake her hand saying "and welcome to this company to you as well, Andrea"
Names are fun :-)
About flagging as won't fix, I'll do that because I've closed it assuming since all new assets landed and no change was made, there was no bug to consider so, actually, it is a won't fix.
Again it's very difficult to have a statement from anyone about this repo assets.
Contributors list is made of developers with no, or kinda little, graphical skills.
Apologies but that's really not my fault, I was going to fork this and drop entirely the assets part ... I'm very happy we released version 2 today (actually everything arrived the 29th of February, can you believe it?)


Loop semantic model

This change is

Current dependencies on/for this PR:

main

PR #2599

PR #2600

PR #2601   👈

This comment was auto-generated by Graphite.

@spapinistarkware queued this pull request to merge with Graphite.

Graphite failed to merge this pull request for an unknown reason. Try your merge again, or report a bug if you see this consistently.

@spapinistarkware queued this pull request to merge with Graphite.

Graphite failed to merge this pull request for an unknown reason. Try your merge again, or report a bug if you see this consistently.

@spapinistarkware queued this pull request to merge with Graphite.

Graphite failed to merge this pull request for an unknown reason. Try your merge again, or report a bug if you see this consistently.

@spapinistarkware queued this pull request to merge with Graphite.

Graphite failed to merge this pull request for an unknown reason. Try your merge again, or report a bug if you see this consistently.


make use of logger in config init file

What type of PR is this?
This PR makes use of logging instead of standard printing out the output

What this PR does / why we need it:
In config/init.py instead of giving the output in stdout python logger is used to display a warning when kube config path is not provided
Which issue(s) this PR fixes:

Fixes #263
Special notes for your reviewer:
Does this PR introduce a user-facing change?

Additional documentation e.g., KEPs (Kubernetes Enhancement Proposals), usage docs, etc.:

/assign

/release-note-none

This repo has been merged into the main python repo. We are archiving this repo. Please submit the PR to the main repo. Thanks!
/close


Terminal Tabs: Full-info rendering takes too much space

It feels weird to me that so much extra padding is required here, I get that it's for the inline actions to have enough space on hover, but could we perhaps instead make the inline actions overlap the title? Or require right-click to get to inline action in the narrow case as we do in the icon-only case?

We just guessed what a reasonable minimum width would be, where you could see both a 4 letter title and the actions. It probably would be better if we made it so the min width was just enough to show all the actions instead.

After seeing this with statuses, I think we should give just enough room for the 3 actions + status without getting clipped:

More feedback in https://github.com/microsoft/vscode/issues/121648, let's make it a little larger than the 3 actions plus the status so that you can always right click on the left side of the tab.


[SUPPORT]Error while running deltastreamer on top of backfilled data using Hudi

We have backfilled data using df.write.format(“hudi”) from db and then in same location and hive table trying to upsert new data using deltastreamer from kafka. We are facing below error when deltastreamer tries to upsert new data once backfill is done.
20/08/19 15:21:31 ERROR deltastreamer.HoodieDeltaStreamer: Got error running delta sync once. Shutting down org.apache.hudi.utilities.exception.HoodieDeltaStreamerException: Unable to find previous checkpoint. Please double check if this table was indeed built via delta streamer. Last Commit :Option{val=[20200819143204__deltacommit__COMPLETED]}, Instants :[[20200819143204__deltacommit__COMPLETED]], CommitMetadata={   "partitionToWriteStats" : {       "2019-06-16" : [ {       "fileId" : "da81b7ed-296b-4c3a-b3fe-823ded3e2e5f-0",       "path" : "2019-06-16/da81b7ed-296b-4c3a-b3fe-823ded3e2e5f-0_0-20-22_20200819143204.parquet",       "prevCommit" : "null",       "numWrites" : 6,       "numDeletes" : 0,       "numUpdateWrites" : 0,       "numInserts" : 6,       "totalWriteBytes" : 461439,       "totalWriteErrors" : 0,       "tempPath" : null,       "partitionPath" : "2019-06-16",       "totalLogRecords" : 0,       "totalLogFilesCompacted" : 0,       "totalLogSizeCompacted" : 0,       "totalUpdatedRecordsCompacted" : 0,       "totalLogBlocks" : 0,       "totalCorruptLogBlock" : 0,       "totalRollbackBlocks" : 0,       "fileSizeInBytes" : 461439     } ],     "2019-06-17" : [ {       "fileId" : "423f6ccc-2391-4565-bf2e-ef9fc1354e6d-0",       "path" : "2019-06-17/423f6ccc-2391-4565-bf2e-ef9fc1354e6d-0_1-20-23_20200819143204.parquet",       "prevCommit" : "null",       "numWrites" : 2251,       "numDeletes" : 0,       "numUpdateWrites" : 0,       "numInserts" : 2251,       "totalWriteBytes" : 787516,       "totalWriteErrors" : 0,       "tempPath" : null,       "partitionPath" : "2019-06-17",       "totalLogRecords" : 0,       "totalLogFilesCompacted" : 0,       "totalLogSizeCompacted" : 0,       "totalUpdatedRecordsCompacted" : 0,       "totalLogBlocks" : 0,       "totalCorruptLogBlock" : 0,       "totalRollbackBlocks" : 0,       "fileSizeInBytes" : 787516     } ]   },   "compacted" : false,   "extraMetadata" : {     "ROLLING_STAT" : "{\n  \"partitionToRollingStats\" : {\n    \"2019-06-16\" : {\n      \"da81b7ed-296b-4c3a-b3fe-823ded3e2e5f-0\" : {\n        \"fileId\" : \"da81b7ed-296b-4c3a-b3fe-823ded3e2e5f-0\",\n        \"inserts\" : 6,\n        \"upserts\" : 0,\n        \"deletes\" : 0,\n        \"totalInputWriteBytesToDisk\" : 0,\n        \"totalInputWriteBytesOnDisk\" : 461439\n      }\n    },\n    \"2019-06-17\" : {\n      \"423f6ccc-2391-4565-bf2e-ef9fc1354e6d-0\" : {\n        \"fileId\" : \"423f6ccc-2391-4565-bf2e-ef9fc1354e6d-0\",\n        \"inserts\" : 2251,\n        \"upserts\" : 0,\n        \"deletes\" : 0,\n        \"totalInputWriteBytesToDisk\" : 0,\n        \"totalInputWriteBytesOnDisk\" : 787516\n      }\n    }\n  },\n  \"actionType\" : \"deltacommit\"\n}",     "schema" : "<SCHEMA>"   },   "operationType" : "UPSERT",   "fileIdAndRelativePaths" : {     "da81b7ed-296b-4c3a-b3fe-823ded3e2e5f-0" : "2019-06-16/da81b7ed-296b-4c3a-b3fe-823ded3e2e5f-0_0-20-22_20200819143204.parquet",     "423f6ccc-2391-4565-bf2e-ef9fc1354e6d-0" : "2019-06-17/423f6ccc-2391-4565-bf2e-ef9fc1354e6d-0_1-20-23_20200819143204.parquet"   },   "totalRecordsDeleted" : 0,   "totalLogRecordsCompacted" : 0,   "totalScanTime" : 0,   "totalCreateTime" : 0,   "totalUpsertTime" : 0,   "totalCompactedRecordsUpdated" : 0,   "totalLogFilesCompacted" : 0,   "totalLogFilesSize" : 0 } at org.apache.hudi.utilities.deltastreamer.DeltaSync.readFromSource(DeltaSync.java:268) at org.apache.hudi.utilities.deltastreamer.DeltaSync.syncOnce(DeltaSync.java:226) at org.apache.hudi.utilities.deltastreamer.HoodieDeltaStreamer.sync(HoodieDeltaStreamer.java:121) at org.apache.hudi.utilities.deltastreamer.HoodieDeltaStreamer.main(HoodieDeltaStreamer.java:294) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:688)
Since Autocommit is false by default in hudi-spark method using df.write.format(“hudi”), I tried changing the withAutoCommit(false) to withAutoCommit(true) in DataSourceUtil.java creating the HoodieWriteConfig object, but then in backfill job we got FileAlreadyExistsException for .deltacommit file. I tired this in a new directory and still got this issue.
20/08/19 11:29:07 ERROR yarn.ApplicationMaster: User class threw exception: org.apache.hudi.exception.HoodieIOException: Failed to create file hdfs:/user/hive/warehouse/test.db/tbl_test/.hoodie/20200819112849.deltacommit org.apache.hudi.exception.HoodieIOException: Failed to create file hdfs:/user/hive/warehouse/test.db/tbl_test/.hoodie/20200819112849.deltacommit at org.apache.hudi.common.table.timeline.HoodieActiveTimeline.createImmutableFileInPath(HoodieActiveTimeline.java:437) at org.apache.hudi.common.table.timeline.HoodieActiveTimeline.transitionState(HoodieActiveTimeline.java:327) at org.apache.hudi.common.table.timeline.HoodieActiveTimeline.saveAsComplete(HoodieActiveTimeline.java:145) at org.apache.hudi.client.AbstractHoodieWriteClient.commit(AbstractHoodieWriteClient.java:165) at org.apache.hudi.client.AbstractHoodieWriteClient.commit(AbstractHoodieWriteClient.java:111) at org.apache.hudi.client.AbstractHoodieWriteClient.commit(AbstractHoodieWriteClient.java:102) at org.apache.hudi.HoodieSparkSqlWriter$.checkWriteStatus(HoodieSparkSqlWriter.scala:259) at org.apache.hudi.HoodieSparkSqlWriter$.write(HoodieSparkSqlWriter.scala:181) at org.apache.hudi.DefaultSource.createRelation(DefaultSource.scala:108) at org.apache.spark.sql.execution.datasources.SaveIntoDataSourceCommand.run(SaveIntoDataSourceCommand.scala:45) at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult$lzycompute(commands.scala:70) at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult(commands.scala:68) at org.apache.spark.sql.execution.command.ExecutedCommandExec.doExecute(commands.scala:86) at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkPlan.scala:131) at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkPlan.scala:127) at org.apache.spark.sql.execution.SparkPlan$$anonfun$executeQuery$1.apply(SparkPlan.scala:155) at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151) at org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:152) at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:127) at org.apache.spark.sql.execution.QueryExecution.toRdd$lzycompute(QueryExecution.scala:80) at org.apache.spark.sql.execution.QueryExecution.toRdd(QueryExecution.scala:80) at org.apache.spark.sql.DataFrameWriter$$anonfun$runCommand$1.apply(DataFrameWriter.scala:668) at org.apache.spark.sql.DataFrameWriter$$anonfun$runCommand$1.apply(DataFrameWriter.scala:668) at org.apache.spark.sql.execution.SQLExecution$$anonfun$withNewExecutionId$1.apply(SQLExecution.scala:78) at org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:125) at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:73) at org.apache.spark.sql.DataFrameWriter.runCommand(DataFrameWriter.scala:668) at org.apache.spark.sql.DataFrameWriter.saveToV1Source(DataFrameWriter.scala:276) at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:270) at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:228) at org.test.dp.connectors.HudiSink$.writeToHudi(HudiSink.scala:34) at org.test.dp.HistoryBackfillSparkJob$.main(HistoryBackfillSparkJob.scala:47) at org.test.dp.HistoryBackfillSparkJob.main(HistoryBackfillSparkJob.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:688) Caused by: org.apache.hadoop.fs.FileAlreadyExistsException: /user/hive/warehouse/test.db/tbl_test/.hoodie/20200819112849.deltacommit for client <ip> already exists at org.apache.hadoop.hdfs.server.namenode.FSDirWriteFileOp.startFile(FSDirWriteFileOp.java:388)
Is there any way that once i backfill data using hudi-spark, in that same hdfs location and hive table, deltastreamer can read metadata or something and start daily upsert from kafka

For switching from (unmanaged)spark.write() to deltastreamer, you need to provide the checkpoint explicitly to deltastreamer either by passing --initial-checkpoint-provider or --checkpoint.
To get an example checkpoint, you can start deltastreamer on a brand new table and have it complete one commit and inspect the .commit/.deltacommit file for the checkpoint

Hi @bvaradar I got an example checkpoint in kafka-topic,partition:offset format by test deltastreamer execution
Currently we are writing data into TiDB(sql) from kafka. and thinking to switch to hudi.  but again doubt is, once i complete backfilling using spark.write() where will i find -- checkpoint parameter before starting deltastreamer

@piyushrl :
The strategy would be to orchestrate this bootstrap and handoff in 3 steps

Copy the earliest checkpoint from kafka and save it after ensuring your upstream source is up to date till the checkpoint saved.
Perform spark.write() to hudi.
Run deltastreamer in single run mode and pass the checkpoint (1) as part of --checkpoint command line argument.

Added https://issues.apache.org/jira/browse/HUDI-1280 for smooth transition to deltastreamer.

@bvaradar In my usecase, the initial data is being loaded using spark.write() to hudi. Further data is flowing through kafka which I'd like to ingest on the same table. Steps I've followed are

spark.write to hudi
Run deltastreamer with checkpoint in the format kafkatopic,partition:0 I've kept 0 as offset as the kafka topic is newly created and I have all the data inside the topic when I run deltastreamer.

This is the correct way to do it, yeah?


Fix possible method missing exception for partition

In some cases capistrano pass only a single host to on function. In this case there is no partition method.
The idea of this patch is just to work around this issue. I reproduce it with Capistrano Version: 3.4.0 (Rake Version: 10.5.0) on rails 4.2.1

Hi @kirilkalchev,  thank you very much for your patch!
It seems good, but I think it could more simplify the patch by using Kernel#.Array, Could you try this way:
     def on(hosts, options={}, &block)
       return unless hosts
-      localhosts, remotehosts = hosts.partition { |h| h.hostname.to_s == 'localhost' }
+      localhosts, remotehosts = Array(hosts).partition { |h| h.hostname.to_s == 'localhost' }
       localhost = Configuration.env.filter(localhosts).first
     ...

in your environment?

Sorry for the delay. Works perfect. Do you need me to make the pull request or you will update it directly.

Thank you! OK, I will update it.


added imaged for the teams article

Added images needed for this pull request
https://github.com/MicrosoftDocs/msteams-docs/pull/2783

Docs Build status updates of commit 993bea2:
:warning: Validation status: warnings

File
Status
Preview URL
Details

:warning:Warning

Details

msteams-platform/assets/images/Update-Teams/FindVersionAfterInstallation.png
:white_check_mark:Succeeded
View

msteams-platform/assets/images/Update-Teams/UpdatingTeams.png
:white_check_mark:Succeeded
View

msteams-platform/assets/images/Update-Teams/UseSpaceToSelectGenerators.png
:white_check_mark:Succeeded
View

msteams-platform/assets/images/Update-Teams/YoSelectUpdateGen.png
:white_check_mark:Succeeded
View

msteams-platform/assets/images/Update-Teams/test.png
:white_check_mark:Succeeded
View

[Warning-RepositoryOwnerPermissionInsufficient] Owner laujan of repository https://github.com/MicrosoftDocs/msteams-docs has lost Admin permission. Please use Transfer Owner via Docs portal https://ops.microsoft.com to assign a new owner.

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

images only. Approved


firmware-util.sh: line 52: ./sources.sh: No such file or directory

$ cd; curl -LO mrchromebox.tech/firmware-util.sh && sudo bash firmware-util.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0   185    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
100  1441  100  1441    0     0    811      0  0:00:01  0:00:01 --:--:--   811

Downloading supporting files...
firmware-util.sh: line 52: ./sources.sh: No such file or directory
firmware-util.sh: line 53: ./firmware.sh: No such file or directory
firmware-util.sh: line 54: ./functions.sh: No such file or directory
firmware-util.sh: line 60: prelim_setup: command not found

PS: looks like it's a problem with snapped curl: it creates it's hierarchy within /tmp/snap.curl, thus an error:
$ sudo ls -R /tmp/snap.curl
/tmp/snap.curl:
tmp

/tmp/snap.curl/tmp:
firmware.sh  functions.sh  sources.sh

boot a live USB with a sane version of curl? I can adjust to use TMP=mktmp() or something I guess

As workaround I reinstalled curl with apt.
Setting TMP won't probably help as it seems still interpreted within that special /tmp/snap.curl/ directory..

I;m also getting that same error, but it gets a 400 error trying to source the 3 files?  I manually got them, but the way  Ubuntu is set up with 22.04 on my Dell Chromebook I can't get perms to copy them where they belong.  And I can't get into recovery mode nor update from SeaBIOS to fix that.  Ideas?  Can the script be rewritten to find those 3 where I have them?  symbiotic link or something?

As workaround I reinstalled curl with apt.

@PSCGOhio did you try that?

Yep, if it was in the thread it was tried.  The same obstacle of no SU
abilities stops me cold.
On Thu, Jul 7, 2022 at 5:40 AM bam80 @.***> wrote:

As workaround I reinstalled curl with apt.
@PSCGOhio https://github.com/PSCGOhio did you try that?
—
Reply to this email directly, view it on GitHub
https://github.com/MrChromebox/scripts/issues/184#issuecomment-1177321165,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AZ6NAJVMQETFCYC3HFGHFZ3VS2QYXANCNFSM5P3HPLLQ
.
You are receiving this because you were mentioned.Message ID:
@.***>

@PSCGOhio what are you trying to do? There is no Recovery Mode or SeaBIOS with my UEFI firmware. snap-installed curl is problematic, install via apt instead. You should have no problem then

Problem solved: I installed Ubuntu 23.04 on my Asus Chromebook C302C. To make a long story short, I managed to installed Mrchromebox. but no sound (Dummy sound), Bluetooth not working, etc. So I decided to install Qube OS, and it failed, leaving my Chromebook bricked. I found at medium.com/techtalkers, the solution using Ubuntu live usb. It failed with 22.04.2 (No curl), it was a mess: freezing, screen up side down, etc. Then I tried with 23.04 and I had the same problem Bam80 describes. But I didn't have the problems of 22.04.2. It was kind of neat, so when it failed, just out of frustration, I hit Install Ubuntu 23.04 instead of try. And it was lightning fast. It updated neatly, I installed immediately Nordvpn, VLC.  So far the only problem is no internal speakers sound, (Bluetooth works) and no tablet mode, but that's nothing compared with a bricked Chromebook and happy to say goodbye to Google consumerism. All this started because Google announced no more support starting some fatidic day of June 2023. I'm getting rid of all Google services, just to save the world.

Ah, I forgot to state that the freaking rabbit still appears at the beginning of booting

@cutervino my FAQ is pretty clear about needing to use apt-installed curl, not snap-installed, on newer versions of Ubuntu . There's simply no way to work around the limitations of snap-installed curl.

Ah, I forgot to state that the freaking rabbit still appears at the beginning of booting

I'm not sure I understand the problem, that's the firmware boot splash screen

I apologize MrChromebox, I shouldn't have used that word. No problem at all. I'm neither a geek, nor a techy guy. I'm just a citizen of the world that wants to help with the climate change. It's just that, when Ubuntu asked me to erase the whole disk at installation, I thought it'll delete everything. We all know your hard work on this project, and we thank you for that.
So I take this opportunity to ask you if there's a way to get the sound working and if it's possible to get tablet mode. I appreciate your help.

It's just that, when Ubuntu asked me to erase the whole disk at installation, I thought it'll delete everything

yes, it will erase everything on the target installation disk. The firmware is not stored there :)

if there's a way to get the sound working and if it's possible to get tablet mode. I appreciate your help.

on CAVE? Yes, but not using Ubuntu. Check the links on my FAQ page, as well as the #linux channel on the chrultrabook Discord server.


Services gone

Hi,
I am running version 2022.11.5 of Home Assistant and the latest release of this component (installed via HACS).
In the last days I found that all the jlrincontrol services are gone! They give an error in my automations and script and they are not available in the developer tools.
Anyone have any idea of why this has happened? I have of course restarted but nothing changed.

Im running latest HA and jlrincontrol and dont have this issue! Maybe you should reload the integration in the Integrations page?

Thank you for your reply, that actually seemed to have fixed it!


Beginning with v3.19, messing around with zfs volumes directly prevents container startup

Ubuntu Bionic
I have always enjoyed the flexibility of LXD in conjunction with the ZFS filesystem and how I was able to monkey around with ZFS volumes pretty much ad-hoc and I could in this fashion do a bunch of non-standard but useful workflows when testing this and that.
Beginning with v3.19 however, if I try to do something like:
lxc init ubuntu:bionic mytestcontainer
And then I decide, no you know what, that container should have some other rootfs:
/sbin/zfs destroy -r lxd/containers/mytestcontainer
-> now execute something that creates a volume in lxd/containers/mytestcontainer like a zfs send/receive for example or just rename an existing volume
lxc start

Then I get:
Error: Common start logic: Failed to run: zfs mount lxd/containers/mytestcontainer: cannot mount 'lxd/containers/mytestcontainer': no mountpoint set
Try `lxc info --show-log mytestcontainer` for more info

What has changed? This smells like all I need to do is tell zfs what the mount point should be ... But yeah, how and why now?
Would this new behavior potentially break backup schemes where people snapshot / reload their entire ZFS pool?
I realize this is all "non standard" - but I expect maybe others might run into problems with their existing toolchains if they rely on this flexibility (as I have done in some scenarios)

Our new storage logic is indeed a lot stricter than the previous one.
If something is missing that should be there, we error out immediately rather than go on and potentially hit issues later.
It shouldn't really impact what you've been doing, but you just need to make sure you do things the way LXD expects it.
In this case, the things to make sure of are:

mountpoint must be set properly
canmount must be set to noauto
the dataset should not be mounted if the container isn't running

If the above is all good, LXD should happily use the dataset.
The new storage driver is also a bit smarter about snapshot usage, LXD causes less snapshot pollution and also knows that users may have made snapshots outside of LXD. Those snapshots will be automatically ignored during migrations but will be considered blockers if for example, you're trying to delete a container that you've made out-of-lxd snapshots on.

Awesome - now, while I applaud that filesystem/snapshot stuff is becoming more robust, I am having a bit of trouble here...

mountpoint must be set properly

I tried looking at an existing container with zfs list and from that setting it to
zfs set mountpoint=/var/snap/lxd/common/lxd/storage-pools/lxd/containers/mycoontainer lxd/containers/mycontainer
And stuff blew up ... Hints? :)

canmount must be set to noauto

Where do I check/set this?

the dataset should not be mounted if the container isn't running

Ah this is maybe where I went wrong as the zfs command auto-mounted the dataset, and the config option you mention above needed to be run first I'm guessing? :)
I'll try and figure that out tomorrow if I don't hear back from you and report back here ...

zfs set mountpoint=/var/snap/lxd/common/lxd/storage-pools/lxd/containers/mycoontainer lxd/containers/mycontainer canmount=noauto DATASET will usually do it if not already mounted.
If already mounted, then you'll need to unmount it to avoid confusing LXD.

Awesome - I got this all working with your help. What I do, exactly, for prosperity:
# zfs set canmount=noauto lxd/containers/mycontainer
# zfs set mountpoint=/var/snap/lxd/common/lxd/storage-pools/lxd/containers/mycoontainer lxd/containers/mycontainer
# zfs unmount lxd/containers/mycontainer
# lxc start mycontainer

That final unmount is probably not required as the canmount=noauto should prevent any auto mounting, but I play it safe. This works!

Hello
This no longer works in v4.14 - it still worked on v4.8
Now when doing the above, I get:
root@asclepius:/home/master# zfs get canmount lxd/containers/mclaren
NAME                    PROPERTY  VALUE     SOURCE
lxd/containers/mclaren  canmount  noauto    local
root@asclepius:/home/master# zfs get mountpoint /lxd/containers/mclaren
/lxd/containers/mclaren: No such file or directory
root@asclepius:/home/master# zfs unmount lxd/containers/mclaren
cannot unmount 'lxd/containers/mclaren': not currently mounted
root@asclepius:/home/master# lxc start mclaren
Error: Failed preparing container for start: Failed to run: zfs mount lxd/containers/mclaren: cannot mount 'lxd/containers/mclaren': filesystem already mounted
Try `lxc info --show-log mclaren` for more info
root@asclepius:/home/master# zfs unmount lxd/containers/mclaren
cannot unmount 'lxd/containers/mclaren': not currently mounted

Hmm ok so already mounted somehow, let's check procinfo
# grep lxd/containers/mclaren /proc/*/mountinfo
/proc/105335/mountinfo:10174 347 0:534 / /var/snap/lxd/common/lxd/storage-pools/lxd/containers/mclaren rw,noatime shared:4091 - zfs lxd/containers/mclaren rw,xattr,posixacl
/proc/1282434/mountinfo:10174 347 0:534 / /var/snap/lxd/common/lxd/storage-pools/lxd/containers/mclaren rw,noatime shared:4091 - zfs lxd/containers/mclaren rw,xattr,posixacl
/proc/1356439/mountinfo:10174 347 0:534 / /var/snap/lxd/common/lxd/storage-pools/lxd/containers/mclaren rw,noatime shared:4091 - zfs lxd/containers/mclaren rw,xattr,posixacl
/proc/1402589/mountinfo:10174 347 0:534 / /var/snap/lxd/common/lxd/storage-pools/lxd/containers/mclaren rw,noatime shared:4091 - zfs lxd/containers/mclaren rw,xattr,posixacl
/proc/1418030/mountinfo:10174 347 0:534 / /var/snap/lxd/common/lxd/storage-pools/lxd/containers/mclaren rw,noatime shared:4091 - zfs lxd/containers/mclaren rw,xattr,posixacl
/proc/1701823/mountinfo:10174 347 0:534 / /var/snap/lxd/common/lxd/storage-pools/lxd/containers/mclaren rw,noatime shared:4091 - zfs lxd/containers/mclaren rw,xattr,posixacl
/proc/1714544/mountinfo:10174 347 0:534 / /var/snap/lxd/common/lxd/storage-pools/lxd/containers/mclaren rw,noatime shared:4091 - zfs lxd/containers/mclaren rw,xattr,posixacl
/proc/1775410/mountinfo:10174 347 0:534 / /var/snap/lxd/common/lxd/storage-pools/lxd/containers/mclaren rw,noatime shared:4091 - zfs lxd/containers/mclaren rw,xattr,posixacl
/proc/2220508/mountinfo:10174 347 0:534 / /var/snap/lxd/common/lxd/storage-pools/lxd/containers/mclaren rw,noatime shared:4091 - zfs lxd/containers/mclaren rw,xattr,posixacl
/proc/2419807/mountinfo:10174 347 0:534 / /var/snap/lxd/common/lxd/storage-pools/lxd/containers/mclaren rw,noatime shared:4091 - zfs lxd/containers/mclaren rw,xattr,posixacl
/proc/2580827/mountinfo:10174 347 0:534 / /var/snap/lxd/common/lxd/storage-pools/lxd/containers/mclaren rw,noatime shared:4091 - zfs lxd/containers/mclaren rw,xattr,posixacl

... And many more lines

Ok let's make sure we are unmounted
# nsenter -t 98526 -m umount /var/snap/lxd/common/lxd/storage-pools/lxd/containers/mclaren
root@asclepius:/home/master# grep lxd/containers/mclaren /proc/*/mountinfo
root@asclepius:/home/master# zfs unmount lxd/containers/mclaren
cannot unmount 'lxd/containers/mclaren': not currently mounted

But ...
# lxc start mclaren
Error: Failed preparing container for start: Failed to run: zfs mount lxd/containers/mclaren: cannot mount 'lxd/containers/mclaren': filesystem already mounted
Try `lxc info --show-log mclaren` for more info

What's changed in latest versions that's confusing LXD vis-a-vis mountpoints now? :)

Most likely some kind of in-kernel reference. Probably worth retrying after a while to see if it resolved, if not, the fact that it's not present in your mount table at all suggests a zfs bug so a reboot is pretty much the only way out of that.
Looking at a diff from LXD 4.8 to 4.14 I'm not seeing any real change to our mount logic. We still call zfs mount and zfs unmount. There have been some changes but they're around rounding disk quotas and VM volume map/unmap which doesn't affect containers.

Hmm ok that's unfortunate. One thing to note is that immediately after issuing the lxc start  after having killed the mounts with nsenter I again see mounts in proc
So it's as if LXD is getting partway - or maybe all the way - but then thinking there's a mount hanging anyway, if that makes sense.
I'll keep an eye on this, reboot when able, do more tests etc. and report back here what I find.

Maybe some of this rings a bell with @tomponline but in general, ZFS just doesn't really do well with namespaces, so I wouldn't put it past the zfs tool from setting up the mounts and then freaking out with an error ;)

@Kramerican yeah if you can get a reproducer after a fresh reboot that would be interesting.
Also first thing to check is if the mount is removed after doing lxc stop from snap's mount namespace, before starting to recreate the ZFS volume.

@Kramerican sorry, to be clear, I meant check the mount is removed from the snap's mount namespace after initiating a lxc stop from the normal namespace.

@tomponline Oh I see, yes that makes sense.
I cannot do this at the moment, but the first maintenance window I can justify sneaking in there I'll be trying that as well as rebooting the host in question and do further tests. I have no clue when exactly that will be possible so feel free to close this issue in the meantime if you want.
Thanks :)


[ImageCard] add upload capabilities

Closes #1754
Part of #1817
Summary
Add ability to upload images from local files or from url. Part of the Dashboard editor effort.
Change List (commits, features, bugs, etc)

created a new ImageUploader component
create a new check in ImageCard for existence of isNew prop and serve up uploader
created _image-uploader.scss
-added new utility function to handle fetch and conversion of images from url in cardUtilityFunctions.js

Acceptance Test (how to verify the PR)

Look at new story created for image uploader

:tada: This PR is included in version 2.141.0-next.25 :tada:
The release is available on:

npm package (@next dist-tag)
GitHub release

Your semantic-release bot :package::rocket:

:tada: This PR is included in version 2.141.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


RPC curl request format

In using curl requests to interact with a smart contract I have deployed to testnet, I am encountering
many errors related to the format of my curl request including: {"jsonrpc":"2.0","id":1,"error":{"code":-2147467261,"message":"Object reference not set to an instance of an object."}}
My smart contract is written in C# and the Main function signature looks like:
public static bool Main(string operation, params object[] args)
where the args object is expected to have entries with types in order string, byte[]
The way I am forming my curl request is:
curl -v -d '{"jsonrpc": "2.0","method": "invoke","params": ["<script hash>",[{"type":"String","value":"exampleOperation"},"params":{{"type":"String","value":"helloExample"},{"type":"ByteArray","value":"00"}}]],"id": 1}' http://<IP_ADDRESS>:20332
I'm not sure how I should form the request to properly interact with my contract.
Can anyone with experience with this please make suggestions?
(PS keeping in on the level of http calls to rpc for the sake of a programmable interface so please don't suggest gui type option).
Thanks so much in advance!

Another error I've been getting in trying to get the request format down is:
{"jsonrpc":"2.0","id":1,"error":{"code":-2147467262,"message":"Unable to cast object of type \u0027Neo.IO.Json.JObject\u0027 to type \u0027Neo.IO.Json.JArray\u0027."}}
where the attempted request is:
curl -v -d '{"jsonrpc": "2.0","method": "invoke","params": ["<scripthash>",{"type":"String","value":"someOperationName"},["example123",00]],"id": 1}' http://<IP_ADDRESS>:20332

This request appears does not produce errors, but the return value from the contract is incorrect:
curl -v -d '{"jsonrpc": "2.0","method": "invokefunction","params": ["<scripthash>","Main",[{"type":"String","value":"someOperationName"},{"type":"Array", "value":[{"type":"String","value":"example123"},{"type":"ByteArray","value":"00"}]}]],"id": 1}' http://<IP_ADDRESS>:20332
The return value from the contract is supposed to be bool false but instead it is:
{"jsonrpc":"2.0","id":1,"result":{"script":"<script>","state":"HALT, BREAK","gas_consumed":"0.059","stack":[{"type":"ByteArray","value":""}],"tx":"<tx>"}}
Does this mean my request was not well-formed? What else could be the issue?

Hi @geogearchon, I am quite busy today but I will try to check your case.
Meanwhile, try to compile, deploy and invoke at https://neocompiler.io

@vncoelho I just looked at the tool https://neocompiler.io, and it says the 'deploy' feature to the Neo testnet is incomplete.

Use it normally, we have a shared privatenet that resets 12 hours.
The testnet can be used but our system was not designed based on security, the focus was a didactic plataform.

As stated in the first post my goal is to make http calls to the rpc for I am programming against that endpoint, so a gui/webui is not useful this point in my project.

This request does not produce errors, but the return value from the contract is incorrect:
curl -v -d '{"jsonrpc": "2.0","method": "invokefunction","params": ["","Main",[{"type":"String","value":"someOperationName"},{"type":"Array", "value":[{"type":"String","value":"example123"},{"type":"ByteArray","value":"00"}]}]],"id": 1}' http://<IP_ADDRESS>:20332

You are not supposed to include the types in your request. Try something like:
curl -v -d '{"jsonrpc": "2.0","method": "invokefunction","params": ["","Main",[“someOperationName",["example123", "00"]]}' http://<IP_ADDRESS>:20332

Sorry, mistapped on mobile and accidentally closed and reopened.

Ha. Indecisive.
On Fri, Mar 8, 2019, 10:41 PM jsolman<EMAIL_ADDRESS>wrote:

Sorry, mistapped on mobile and accidentally closed and reopened.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/neo-project/neo-cli/issues/313#issuecomment-471151675,
or mute the thread
https://github.com/notifications/unsubscribe-auth/Arh40jomXrcpVBhk3mKuPjCYqe0Hp-Enks5vU1eIgaJpZM4bmILw
.

The way I am forming my curl request is:
curl -v -d '{"jsonrpc": "2.0","method": "invoke","params": ["

See also
https://docs.neo.org/en-us/node/cli/2.7.4/api/invoke.html
https://docs.neo.org/en-us/node/cli/2.7.4/api/invokefunction.html

Thanks for the last two tips @jsolman . From that formatting of the curl request I was able to invoke a function belonging to a 'helloworld'-ish contract I deployed to the test net.
Now I am encountering another small problem:
I cannot retrieve a value stored at a contract. I'd like to understand what I am doing wrong.
I deployed this contract with storage to the test net with script hash 0x0f8236169fc023893ce7f6882aae9157162b1fac
I made an invoke function call of the single method of the contract which should have stored a key value pair :"boo" where in my invocation the input string is "hello".
curl -v -d '{"jsonrpc": "2.0","method": "invokefunction","params": ["0x0f8236169fc023893ce7f6882aae9157162b1fac","store",[{"type":"String","value":"hello"}]],"id": 1}' http://<IP_ADDRESS>:20332

The invocation returned what appears to be a good return value which is a hex that translates to "stored".
{"jsonrpc":"2.0","id":1,"result":{"script":"0568656c6c6f51c10573746f726567ac1f2b165791ae2a88f6e73c8923c09f1636820f","state":"HALT, BREAK","gas_consumed":"1.075","stack":[{"type":"ByteArray","value":"73746f726564"}]}}

But when I call getstorage using the hex representation of the key, I get a null result.
curl -v -d '{"jsonrpc": "2.0","method": "getstorage","params": ["0x0f8236169fc023893ce7f6882aae9157162b1fac","68656c6c6f"],"id": 15}' http://<IP_ADDRESS>:20332

The above call appears to me to be consistent with what is outlined in the docs
https://docs.neo.org/en-us/node/cli/latest-version/api/getstorage.html
I'd like to get past these syntax mishaps so I can get into the meat of my project. All help is appreciated (but I'm keeping this low-level, please no gui suggestions).
For reference, here is the C# contract which compiled and deployed properly using dotnet and neo-compiler as well as https://neocompiler.io
using Neo.SmartContract.Framework;
using Neo.SmartContract.Framework.Services.Neo;

namespace Neo.SmartContract
{
  public class Testy : Framework.SmartContract
  {
    public static object Main(string operation, params object[] args)
    {
      switch(operation)
      {
        // args = [(string)word]
        case "store":
          return Store((string)args[0]);
        default:
          return false;
      }
    }

    private static string Store(string word)
    {
      string suprise = "boo";
      Storage.Put(Storage.CurrentContext, word, suprise);
      string returnVal = "stored";
      return returnVal;
    }
  }
}

.. Also compiling, deploying, and invoking the above C# contract yields null results when performing a storage query on the script hash with the invoked key all within https://neocompiler.io.
@jsolman , @vncoelho
I'm very stuck on this. I really hope to get deployment and interaction with this contract figured out so I can move on to the meat of my project.
Any help is appreciated. Thanks in advance.

We can look into your issue that uses a string key, but can you try using a byte array key to see if it works then?

Oh, actually you can’t invoke function, that is only for read only operations, since it doesn’t send any transaction to the chain.

Notice from the docs:
https://docs.neo.org/en-us/node/cli/2.7.4/api/invokefunction.html
“NOTE
This method is to test your VM script as if they were ran on the blockchain at that point in time. This RPC call does not affect the blockchain in any way.”

You need to create a signed invocation transaction that calls your store operation and use sendrawtransaction to send it via rpc.

FYI: You will need to use a library such as neon-js to generate the invocation transaction and sign it with a private key. You can’t easily do it with just a command line and curl. neo-cli has basic support now for creating an invocation transaction and invoking your smart contract. Currently it only supports passing string parameters, but more support for other parameter types will be added soon.

Thanks @jsolman for that info. I tried earlier to change the string key param to a byte param and I encountered the same difficulty both with the cli and the http://neocompiler.io tool.
I will look into neon-js to generate the invocation tx and sign with a private key.
The component of my project that is interacting with the Neo-Smart contract is a server written in C/C++ (for the sake of performance). I will read through the source of neon-js to make sense of the invocation/signing steps to evaluate whether the routine (C/C++ server) > (neon-js) > (Neo SC)
could be simplied to (C/C++ server) > (Neo SC) by writing the invocation/signing steps in C/C++ and absorbing it into my server code.
Thanks for looking into this!

I will leave it closed, @georgearchon, do not hesitate to open, reopen or ask anything else.


Fixes #32076 -- Add async cache methods to Base and DummyCache

Ticket-32076
Per DEP 9, the async methods of the cache default to running the synchronous version.

@felixxm I like the prefix! I've updated the PR with the prefix, docs, and release note.

@Andrew-Chen-Wang  Do you have time to keep working on this?

@felixxm yes, I should have time over the US's Labor Day weekend (this weekend). Was just waiting for a response pertaining to your comment here https://github.com/django/django/pull/13547#discussion_r637837628 from @andrewgodwin .

I am liking seeing the a prefix in action, by the way - I think this solidifies it as a style choice. Thanks for working on this!

@felixxm rebased. Thanks for the quick responses! Note: I also moved the release docs for the cache to 4.0.

@carltongibson Thanks for the review :+1: Docs updated.


use() ignores path for websocket proxy

Also see chimurai/http-proxy-middleware#204.
Expected behavior
The following should listen for websocket requests only under /__webpack_hmr.
express.use('/__webpack_hmr', proxy({ ws: true, target: 'http://...' }));

Websocket requests to other paths (e.g. /socket.io) should not be handled by the proxy.
Actual behavior
The proxy "hijacks" all incoming websocket requests, also those to /socket.io (see socketio/socket.io#3062).
Setup
Fiddle: https://github.com/ftes/socket.io-fiddle/pull/1/files

http-proxy-middleware: 0.17.4
server: express 4.13.4
socket.io: 2.0.3

proxy middleware configuration
proxy({ ws: true, target: 'http://localhost:4000' });

server mounting
var app = express();

app.use('/__webpack_hmr', proxy);
app.listen(3000);

Workaround
Pass path /__webpack_hmr as context to proxy.
const webpackHmrProxy = proxy('/__webpack_hmr', {
  target: 'http://localhost:4000',
  ws: true,
});
app.use(webpackHmrProxy);

Yea, it looks like it's sort of documented at https://github.com/chimurai/http-proxy-middleware#websocket but the docs don't really explain that for WebSockets, it requires that you specify the path on the proxy instance itself and it is expected that you app.use that without a path.


is it support mongoDB?

Daer Sir,
I have some questions and I am new I do not know where I should ask, so I open new Issues.
Is feather Library still in the stage of development and improvement especially websocket?
Can I use websocket in feather in realse  App?
Is feather work in Android?
is it support mongoDB?
Best Regards,
Tim Tom

feather is composed by 3 component: http server--cinatra, orm--ormpp, html render. If you want to know more detailes, you could find the video about feather on yutube.
ormpp don't support mongodb now, it support mysql/sqlite/postgresql now, it could be extended to support mongodb, but i have no time to do that now.
Indeed cinatra supported websocket, here is the example:https://github.com/qicosmos/cinatra/tree/master/lang/english
So you could use websocket in feather.
Feather is a cross platforma libary, need C++17, however i didn't use it in Android, so i'm sure if there are some compile errors, maybe you can have a try.
The c++ community website--purecpp.org is made by feather, i will improve feather in future.


Switch windSpeed and windDirection

The description of the return format doesn't match the tests or the examples below. I think windSpeed and windDirection should be in reverse order.

Well spotted, thanks!
Can you change this also in the hints.md too please?

Thanks @andrerfcsantos. Added the changes to hints.md. Let me know if you'd like me to make any other changes.


Fix random integer generation to match results from NumPy.

This pull request modifies Numba's PRNG to match NumPy when using np.random (while not modifying the behavior of random), implementing much of what is described in #2782.
It adds support for 64-bit integers, which was missing in the patch in the aforementioned issue, and fixes a problem with power of two ranges (extending the unit tests to check for this). Support for CPython's PRNG initialization was not added.

Looks like there is a failure on Windows, likely due to the fact that int is int32 there, not int64 like on Mac/Linux.  (I haven't traced through the code yet, but that is the top reason for things to fail on Windows...)

It's odd, since the test seems to be failing in the non-JITed NumPy path.

Codecov Report

Merging #3038 into master will decrease coverage by <.01%.
The diff coverage is 100%.

@@            Coverage Diff             @@
##           master    #3038      +/-   ##
==========================================
- Coverage   85.67%   85.66%   -0.01%
==========================================
  Files         327      327
  Lines       68897    68908      +11
  Branches     7815     7820       +5
==========================================
+ Hits        59025    59033       +8
- Misses       8625     8627       +2
- Partials     1247     1248       +1

Thanks for the patch. Will review shortly. I think you just unluckily hit np.random.RandomState.randint having a return type of np.int opposed to there being anything fundamentally at fault. Also, if it fails CI due to utterly unrelated problems on Python 2.7 please try merging in master and that may well fix it!

I wrote the special handling of power of two ranges to fix a direct issue I found power of two ranges and thus specifically checked for such numbers. On a more careful examination of the CPython and NumPy random implementations to determine why they differed with power of two ranges, I came across a comment that explains why the CPython implementation differs (to eliminate a special case) and makes for a much simpler fix—subtracting one from n before calculating the number of bits. Thus, I simplified the behavior (and added more comments).

@mpetroff thanks for the fixes. It was definitely worth visiting the implementations to find the underlying reason behind the differences, thanks for taking the time to do that, the code is much cleaner as a result. I think this can be merged after shipping 0.39.0 is complete.


Fix typo in config option

Hi @kaelig thanks for this, could you please read and follow the Contribution guidelines before submitting a PR.
(Your PR is missing a Developer Certificate of Origin)

Of course!
Developer Certificate of Origin
Version 1.1
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
660 York Street, Suite 102,
San Francisco, CA 94110 USA
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
DCO 1.1 Signed-off-by: Kaelig Deloumeau-Prigent<EMAIL_ADDRESS>

Thank you!


Bump version

Bumping version for @5tefan 's bug fixes

@5tefan I uploaded a new version to PyPI -- v 0.0.10


Add metrics relabel for CKAN

What
Relabel the CKAN metrics so that existing dashboards can be used in grafana to pick them up.
Reference
https://trello.com/c/3ARO34au/1149-relabel-ckan-metrics-to-match-ruby-app-metrics

The relabel itself is nice and straightforward though, good call!

I'll need to look into whether the relabelling can be done somewhere else

Looks like it can be added to the pod monitor so I'll try that out.

Managed to add it to podmonitor.yaml on the ckan helm chart instead


图片上有红色波浪线

config-center.html
不止这一个页面，好多图都有

config-center.html
不止这一个页面，好多图都有

Hi, It looks like that editor opened the spelling check, can you solve it?

of course, but I don't have the image's original file, where can I get it?

of course, but I don't have the image's original file, where can I get it?

Article has corresponding image links, I suggest you have a problem first article list, and then modified.

of course, but I don't have the image's original file, where can I get it?

Suggest you can ask the author of this article.


After klicking "submit" a JS exception is thrown preventing a new instance to be loaded to get labeled.

Describe the bug
"Label all Tasks" is broken in 1.1.0 (probably only with TimeSeries Labeling)
After clicking "submit" on a labeled instance, the current label gets stored, but no new instance is loaded. Instead the interface remains grayish. And a JS Exception is thrown
To Reproduce
Steps to reproduce the behavior:

Click: "Label all Tasks"
Assign label
Click "Submit"
Request is sent, page reloads, but remains grey.
In JS console an Exception is visible:

Expected behavior
A new instance is shown which can be labeled.
Screenshots
https://user-images.githubusercontent.com/4135093/126950492-02cefc86-a8d2-4a79-b71a-ed70811f4cdd.mp4
Environment (please complete the following information):

OS: Windows+Linux / Different Browsers
Label Studio Version [e.g. 1.1.0]

Additional context
Label Studio runs within Azure as a container instance. Data is fetched from azure storage.

@gillhofer I've checked it on the latest master branch and not found this problem.
Could you install LS from the latest master branch?

Appears to be a bug in 1.0.2 too, but not in 1.0.1.
#1014


Add glossary tooltip to Pod Priority and Preemption page

This is a feature request

What would you like to be added
https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/ should use a glossary tooltip for “affinity”
Why is this needed
Kubernetes uses the term “affinity” to mean a specific thing. A tooltip (and the hyperlink it implies) helps a reader learn more about this term if they are not sure.
Comments
/language en

/triage accepted

Hey, I will like to work on this !! Please let me know how can I proceed with this !! @kbhawkey !!

/assign


Enhancement appearance thumbnail

Fix #466
All the *.md and *.jpg file changes are generated.
https://www.cyberbotics.com/doc/guide/appearances?version=develop
VS
https://www.cyberbotics.com/doc/guide/appearances?version=enhancement-appearance-thumbnail

test me

Build Passed :ok_hand:
You can safely merge 'enhancement-appearance-thumbnail' into 'develop'.

:+1:

test me

test me

Build Passed :ok_hand:
You can safely merge 'enhancement-appearance-thumbnail' into 'develop'.

test me

test me

Build Passed :ok_hand:
You can safely merge 'enhancement-appearance-thumbnail' into 'develop'.

test me

Build Passed :ok_hand:
You can safely merge 'enhancement-appearance-thumbnail' into 'develop'.

Build Passed :ok_hand:
You can safely merge 'enhancement-appearance-thumbnail' into 'develop'.

:+1:


Bug in the poisson_reconstruction function?

Built fine, installed fine, but I got a problem from here and I was wondering if you know what to do:
Traceback (most recent call last):
File "main.py", line 44, in
faces, vertices = poisson_reconstruction(points, normals, depth=10)
File "src/pypoisson.pyx", line 100, in pypoisson.poisson_reconstruction (src/pypoisson.cpp:2413)
File "src/pypoisson.pyx", line 112, in pypoisson._poisson_reconstruction (src/pypoisson.cpp:2568)
File "stringsource", line 15, in string.from_py.__pyx_convert_string_from_py_std__in_string (src/pypoisson.cpp:6006)
TypeError: expected bytes, str found

I suppose that you ran the example successfully right?
How is your python environment?  Python version cython version?

I have exactly the same error on the example :
---> 10 faces, vertices = poisson_reconstruction(points, normals, depth=10)
11
12 #Helper function to save mesh to PLY Format
src/pypoisson.pyx in pypoisson.poisson_reconstruction (src/pypoisson.cpp:2671)()
src/pypoisson.pyx in pypoisson._poisson_reconstruction (src/pypoisson.cpp:2830)()
~/miniconda3/lib/python3.6/site-packages/pypoisson.cpython-36m-x86_64-linux-gnu.so in string.from_py.__pyx_convert_string_from_py_std__in_string (src/pypoisson.cpp:6736)()
TypeError: expected bytes, str found
Config :
Python 3.6.1 :: Continuum Analytics, Inc.
cython                    0.25.2                   py36_0

It's run perfect over Python2.7,
fails compiling with  python >3


Power usage node

Fixes #26

Pull Request Test Coverage Report for Build 73

5 of 5 (100.0%)  changed or added relevant lines in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.1%) to 97.222%

Totals

Change from base Build 71:
0.1%

Covered Lines:
84

Relevant Lines:
86

💛  - Coveralls


Evaluate function error

[ ] I have checked the documentation and related resources and couldn't resolve my bug.
Describe the bug
Evaluate throw an error. I had no issue last week! I believe I am using correct column names. Would appreciate your help!
`AttributeError: 'dict' object has no attribute 'rename_columns'

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
File <command-1197997617353352>, line 2
      1 from ragas import evaluate
----> 2 result = evaluate(fiqa_eval["baseline"], metrics=metrics, embeddings=dbx_embeddings, llm = chat_model)
      3 result

File /local_disk0/.ephemeral_nfs/envs/pythonEnv-5e4c1c3b-00b6-4dea-9167-94454942f6b6/lib/python3.10/site-packages/ragas/evaluation.py:143, in evaluate(dataset, metrics, llm, embeddings, callbacks, is_async, run_config, raise_exceptions, column_map)
    140     metrics = [answer_relevancy, context_precision, faithfulness, context_recall]
    142 # remap column names from the dataset
--> 143 dataset = remap_column_names(dataset, column_map)
    144 # validation
    145 dataset = handle_deprecated_ground_truths(dataset)

File /local_disk0/.ephemeral_nfs/envs/pythonEnv-5e4c1c3b-00b6-4dea-9167-94454942f6b6/lib/python3.10/site-packages/ragas/validation.py:19, in remap_column_names(dataset, column_map)
     14 """
     15 Remap the column names in case dataset uses different column names
     16 """
     18 inverse_column_map = {v: k for k, v in column_map.items()}
---> 19 return dataset.rename_columns(inverse_column_map)

AttributeError: 'dict' object has no attribute 'rename_columns'

Ragas version:
ragas==0.1.5
Python version:
Code to Reproduce
from langchain_community.embeddings.databricks import DatabricksEmbeddings

dbx_embeddings = DatabricksEmbeddings(endpoint = "databricks-bge-large-en")

ds = Dataset.from_dict({"question": eval_questions, "answer": answers, "contexts":contexts, "ground_truth": ground_truth})

chat_model = ChatDatabricks(endpoint="siegpt-gpt-4-chat")

from ragas import evaluate
result = evaluate(fiqa_eval["baseline"], metrics=metrics, embeddings=dbx_embeddings, llm = chat_model)
result

Error trace
Expected behavior
I expected this to go through with no issue.
Additional context
Add any other context about the problem here.

asa far as i see in the code, column_map is optional. https://github.com/explodinggradients/ragas/blob/962d40d1f5f45fe57266ec35176329b07dfc0ae5/src/ragas/evaluation.py#L86
also, i believe I am sending correct column names already. so, no need to rename them
https://github.com/explodinggradients/ragas/blob/962d40d1f5f45fe57266ec35176329b07dfc0ae5/src/ragas/evaluation.py#L112

i am bypassing the error by:
from ragas import evaluate
result = evaluate(fiqa_eval["baseline"], metrics=metrics, embeddings=dbx_embeddings, llm = chat_model, column_map = {"contexts":"contexts", "answer":"answer", "question":"question", "ground_truth":"ground_truth"})
result

I have the same issue. @lalehsg, how did you resolve it?

the error was misleading. it was not the column names. i had changed my data source, and therefore, i think i had messed up the "contexts" format as a list of lists. after fixing that, it went back to normal. could this be your issue? even if your context is empty you should pass a [] for it.

I'm still getting this error and no idea why I'm getting that

Anyone able to resolve this? I am getting the same issue.

I tried pass in an empty list but still getting the same error.... Is anyone able to resolve this?

@emilycsj @JANHMS @brito-bernardo @databinary were you able to resolve this?
from what I can understand from @lalehsg the missleading error message is the problem and the root cause is the Dataset format. We do have checks for that too but maybe its not catching this errors
can you guys check if the dataset maybe?

this is a small util function that might help
from datasets import Dataset, Features, Sequence, Value, ClassLabel, Array2D, Array3D, Array4D, Array5D, Audio, Image

def get_dataset_types(dataset):
    if not isinstance(dataset, Dataset):
        raise ValueError("Input must be a Dataset object")

    def get_feature_type(feature):
        if isinstance(feature, Value):
            return f"Value({feature.dtype})"
        elif isinstance(feature, ClassLabel):
            return "ClassLabel"
        elif isinstance(feature, (Array2D, Array3D, Array4D, Array5D)):
            return f"{feature.__class__.__name__}({feature.dtype})"
        elif isinstance(feature, Audio):
            return f"Audio({feature.sampling_rate}Hz)"
        elif isinstance(feature, Image):
            return "Image"
        elif isinstance(feature, Sequence):
            return f"Sequence({get_feature_type(feature.feature)})"
        elif isinstance(feature, dict):
            return {k: get_feature_type(v) for k, v in feature.items()}
        else:
            return str(type(feature))

    return {name: get_feature_type(feature) for name, feature in dataset.features.items()}

need you help to figure out the root cause and then we'll make the error messages better 🙂

solution, transform the synthetic data in df and back to dataset:
testset = generator.generate_with_langchain_docs(documents, test_size=10, distributions={simple: 0.5, reasoning: 0.25, multi_context: 0.25})
testset = testset.to_pandas()

from datasets import Dataset

questions = testset["question"].tolist()
answers = []
contexts = []

# Inference
for query in questions:
  # Call the RAG pipeline
  response = rag_pipeline(query)
  # Extract and print only the result
  formatted_result = response['result']
  answers.append(formatted_result)
  contexts.append([docs.page_content for docs in retriever.get_relevant_documents(query)])

# To dict
data = {
    "question": testset["question"].tolist(),
    "answer": answers,
    "contexts": testset["contexts"].tolist(),
    "ground_truth": testset["ground_truth"].tolist()
}

# Convert dict to dataset
dataset = Dataset.from_dict(data)
print(dataset)

result = evaluate(
    dataset = dataset,
    metrics=[
        context_precision,
        context_recall,
        faithfulness,
        answer_relevancy,
    ],
    llm=llm_openai,
    embeddings=embeddings_openai,
    run_config=RunConfig(max_workers=5)
)

df_eval = result.to_pandas()

@jjmachan I suppose you should review generator.generate_with_langchain_docs as it is not creating the format expected by ragas evaluated method

Tbh, I've tried multiples dataset even trying to do manually, but it didn't work at all. Idk maybe I'll try this approach from @DressPD .

@DressPD there is actually a function called to_dataset() that could help you but I agree, there is some boilerplate code you have to write.
can I ask you something @DressPD @brito-bernardo @emilycsj @JANHMS @brito-bernardo @databinary
If you were to design the what the evaluate() metrics takes in, what would it have been.

pandas dataframe
hf Dataset (the one we have)
python dict
a simple pydantic object that is behaves almost similar to a python dict with bit more type support

testset = generator.generate_with_langchain_docs(documents, test_size=10, distributions={simple: 0.5, reasoning: 0.25, multi_context: 0.25})
testset = testset.to_pandas() -- What code is used for llamaindex?


Always use user-level pub cache

Current flutter has a .pub_cache inside the flutter_root and merges that with ~/.pub_cache if that exists,
With this PR we will always use pubs own resolution for finding the pub cache.
To add packages to the flutter.zip download they are packaged as tar.gz and added to the pub-cache on first run by using the new pub cache preload functionality.
Fixes https://github.com/flutter/flutter/issues/37481
Pre-launch Checklist

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

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

@godofredoc you might want to look at the changes to the release packaging script dev/bots/prepare_package.dart.

merged in upstream to fix linux build tests

There are also many style issues in this PR. In particular, the style guide asks us to avoid breaking a line on an assignment operator. See: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#prefer-a-maximum-line-length-of-80-characters

If this sticks I can do a follow-up to clean up.


export csv give me error unknown encoding name - latin1

indipendent from the columns I choose I have always this error:
error unknown encoding name - latin1

error is at that line
https://github.com/sferik/rails_admin/blob/master/lib/rails_admin/support/csv_converter.rb#L38

maybe if you add 'latin1' here
https://github.com/sferik/rails_admin/blob/c71e2d25bf17d5130ee822812d595ef97a1b02e2/lib/rails_admin/support/csv_converter.rb#L6
you can fix the desease

ok i tested and in this way you can fix
https://github.com/nunziofiore/rails_admin/commit/0018bdd4bcd093ebc5ed80432395b07064f16318
I have no the right to make a pull request so let the issue open for you

Hi – thanks @nunziofiore!
I have the same problem. Meanwhile it's fixed in the main repo, it's possible to write the following code in ./config/initializers/rails_admin.rb for example
module RailsAdmin
  class CSVConverter
    remove_const(:UTF8_ENCODINGS) if (defined?(UTF8_ENCODINGS))
    UTF8_ENCODINGS = [nil, '', 'utf8', 'utf-8', 'unicode', 'UTF8', 'UTF-8', 'UNICODE', 'utf8mb4', 'latin1']
  end
end

Same problem here! Thanks @ekkans! Can't believe this hasn't been fixed yet.
If rails_admin requires particular DB encoding, just let us know...

Hi,
I also run into this issue
Unfortunately latin1 is not unicode, so adding it to UTF8_ENCODINGS is not a solution.
As per https://it.wikipedia.org/wiki/ISO/IEC_8859-1, latin1 should map to ISO-8859-1

@ekkans I had the same issue and your workaround fixed it form. However, is it not fixed in the main branch yet ?


Adds Stockholm format to IO

All done guys, ready for review! @jairideout @anderspitman

@Kleptobismol @jairideout done with my review. Everything looks really good for the most part. Most of my comments revolve around a couple coding style recommendations to make things more explicit and readable. Great work!

Thanks for reviewing @anderspitman! @Kleptobismol let @anderspitman know when you're ready for him to take another pass through.

Should we try to fix that weird Travis error before I address his comments @jairideout ?

I'm not sure why the Py3 builds are timing out. I'd recommend making the changes and pushing again in case it's a transient issue with Travis.

No problem.

The build is still failing, but passes locally. If anyone has any ideas, I'm all ears.

IMOO is because of matplotlib: warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.'). This can take a lot of time and might cause time outs. Not sure if the solution is to force a version or try to fix whatever is generating that warning.

I don't think it's matplotlib because this same warning appears in the Python 2.7 tests and they are passing. Also the warning appears at the top of the output when matplotlib is first imported. The timeout is happening somewhere in the middle of the tests.

@anderspitman done addressing your comments.

The Travis timeout is unrelated to this PR, master is timing out also. I'm debugging in #1255.

Looking better @Kleptobismol. I should probably clarify my comments about the temp variables. I shouldn't have tried to point out every instance I wanted you to change. It's more the general principle that's important, namely you want the code to explain itself as much as possible. One big way to do this is to avoid using "magic numbers", and instead have one central place that knows which indices match which parts of your data structure. There are several ways to do this. The most common is to have a "constant" that you use in place of the number, for example:
SEQ_NAME_INDEX = 0
data_seq_name = line[SEQ_NAME_INDEX]

Unfortunately for what you're doing, this would end up pretty messy because you would need to declare a global variable to use as your index constant.
If we take a step back, the trickiness is coming from needing to keep track of which index is storing what for each element of your OrderedDict. If you look at this line:
dna_data[data_seq_name] = [line[1], {}, {}]

Basically what we're doing is inventing a new object type. Each object of this type is a list where the first element is a string and the second and third are dicts. Each of these has a unique purpose which can be named. My recommendation would be to create a class to represent these objects. That would allow you to have named properties for each object of the class, rather than relying on indices. It could look something like this (untested):
class DNAData(object):
    @property
    def seq_data(self):
        return self._seq_data
    @seq_data.setter
    def seq_data(self, data):
        self._seq_data = data

    @property
    def gc_features(self):
        return self._gc_features
    @gc_features.setter
    def gc_features(self, features):
        self._gc_features = features

    @property
    def gr_features(self):
        return self._gr_features
    @gr_features.setter
    def gr_features(self, features):
        self._gr_features = features

    def __init__(self, seq_data, gc_feature, gr_feature):
        self.seq_data = seq_data
        self.gc_feature = gc_feature
        self.gr_feature = gr_feature

I think you'll find if you implement something like this, the rest of the code will become much cleaner to work with.
For example, the line above would become:
dna_data[data_seq_name] = DNAData(line[1], {}, {})

And here's an example (untested) of what rewriting one of your functions would look like using these principles.
def _parse_stockholm_line_gr(line, dna_data):
    """Takes ``#=GR`` line and returns parsed data."""
    line = _remove_newline(line.split())
    data_seq_name = line[1]
    gr_feature = line[2]
    whatever_line3_is = line[3]
    if data_seq_name in dna_data.keys():
        seq_data = dna_data[data_seq_name]
        if gr_feature in seq_data.gr_features.keys():
            raise StockholmFormatError(
               "Found duplicate GR label %r associated"
               " with data label %r" % (gr_feature, data_seq_name))
        seq_data.gr_features[gr_feature] = list(whatever_line3_is)
    else:
        raise StockholmFormatError(
            "Markup line references nonexistent "
            "data %r." % data_seq_name)
    return dna_data

That ended up being a lot of words. Let me know if this makes sense.

To add to @anderspitman suggestions, a collections.namedtuple might be helpful here instead of creating a custom class. namedtuple provides index and named property access.

Great suggestion

@anderspitman  if you'd like to take a final pass, it's ready.

Done with another pass @Kleptobismol. It looks great! Your use of _SeqData is perfect. Just a couple minor comments then I'd say this is good to go.

Thank you for reviewing, @anderspitman , @jairideout I think it's ready for the final pass!

Thanks for working on this @Kleptobismol and thanks for reviewing @anderspitman! I'll take a final pass through today or tomorrow.

@Kleptobismol this looks great! I had some inline comments, mostly focused on adding more unit tests to exercise some border cases. I haven't reviewed the code or docs in detail, will do that on my next pass.
One other thing I'd like to resolve is handling of trees. The format specifies:
For embedding trees:

    #=GF NH <tree in New Hampshire eXtended format>

    #=GF TN <Unique identifier for the next tree>
Notes:
* A tree may be stored on multiple #=GF NH lines.
* If multiple trees are stored in the same file, each tree must be preceded by a #=GF TN line with a unique tree identifier. If only one tree is included, the #=GF TN line may be omitted.

I think NH and TN are the only features that need to be handled differently than simple key/value pairs in GF metadata.
Here's one way to store the tree(s) in the TabularMSA's metadata dictionary (all other GF metadata are loaded into this too):
Single tree, no ID:
metadata = {
  'NH': 'tree in NHX format'
}

Single tree, has ID:
metadata = {
  'NH': {
    'tree-id': 'tree in NHX format'
  }
}

Multiple trees (must have IDs):
metadata = {
  'NH': {
    'tree-id-1': 'tree in NHX format',
    'tree-id-2': 'tree in NHX format'
  }
}

@ebolyen @anderspitman @Kleptobismol does this scheme/convention make sense? We could also store trees under 'TN' but the schemes I could think of weren't as clean.
One other change in behavior is repeated NH lines. Other repeated GF features are treated as text and concatenated with spaces. For trees stored in NHX format, it's probably safer to concatenate without adding a space to avoid introducing errors into the NHX string.
Does anyone have an example Stockholm file with a tree split over multiple NH lines, or a file with multiple trees? That'd be useful for testing.

@jairideout I agree with the conventions listed.

Thanks for taking a look @ebolyen! @Kleptobismol can you update the reader to handle trees as described above? We'll want some test cases that exercise:

single tree, no ID
single tree, has ID
multiple trees
tree split across multiple NH lines
duplicate tree IDs raises error

In my previous comment I mentioned:

One other change in behavior is repeated NH lines. Other repeated GF features are treated as text and concatenated with spaces. For trees stored in NHX format, it's probably safer to concatenate without adding a space to avoid introducing errors into the NHX string.

This is incorrect -- when joining features that are split across multiple GF lines, we should just concatenate the strings without adding a space. The example Stockholm files I've looked at all have a trailing space for text-like features, I missed this somehow.

Thank you all for your interest in reviewing my code! @jairideout I addressed all your comments, so it's ready for a final check.

Thanks for making these changes @Kleptobismol! I'll take another pass through soon.
The RDA and composition test failures are unrelated to your changes (see #1267). Note that there is a legitimate Stockholm test failure in the build.

Thanks for all your work on this @Kleptobismol!


Various smaller CMS run 3 changes

This PR adds a couple smaller updates to adapt to changes in correctionlib files for run 3 (e.g. new electron SFs, jet veto map, etc.)
In particular, this PR:

Adds a mechanism to the central jet veto map selector to account for additional veto map queries as required by the CMS 2023BPix recipe. For 2023BPix, the veto maps should be &'ed with the negation of a second map. This was rather straight forward, using the same corrector.
Generalize btag_weights to configure a custom weight name
Add jet phi to variables for JEC.
Add electron phi to variables for SFs.
Smaller "compactifications" of used/produced columns.

I left one very minor comment, looks good to me otherwise.

Thanks for the swift review (this one is indeed a showstopper for us right now).

Did you cross-check that the outputs are consistent with the previous implementation (e.g. by running a single cf_diff command)?

Yes, I run our entire chain for test samples and all looks good.


[pytorch] Better handle String tensor operations

Fixes #2379
Description
Brief description of what this PR is about

If this change is a backward incompatible change, why must this change be made?
Interesting edge cases to note here

Codecov Report
Base: 72.08% // Head: 74.34% // Increases project coverage by +2.25% :tada:

Coverage data is based on head (426cc30) compared to base (bb5073f).
Patch coverage: 73.71% of modified lines in pull request are covered.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
Additional details and impacted files
@@             Coverage Diff              @@
##             master    #2380      +/-   ##
============================================
+ Coverage     72.08%   74.34%   +2.25%
- Complexity     5126     6774    +1648
============================================
  Files           473      663     +190
  Lines         21970    29446    +7476
  Branches       2351     3055     +704
============================================
+ Hits          15838    21891    +6053
- Misses         4925     6066    +1141
- Partials       1207     1489     +282

Impacted Files
Coverage Δ

api/src/main/java/ai/djl/modality/cv/Image.java
69.23% <ø> (-4.11%)
:arrow_down:

...rc/main/java/ai/djl/modality/cv/MultiBoxPrior.java
76.00% <ø> (ø)

...rc/main/java/ai/djl/modality/cv/output/Joints.java
71.42% <ø> (ø)

.../main/java/ai/djl/modality/cv/output/Landmark.java
100.00% <ø> (ø)

...main/java/ai/djl/modality/cv/output/Rectangle.java
72.41% <0.00%> (ø)

...i/djl/modality/cv/translator/BigGANTranslator.java
21.42% <0.00%> (-5.24%)
:arrow_down:

.../modality/cv/translator/ImageFeatureExtractor.java
0.00% <0.00%> (ø)

.../ai/djl/modality/cv/translator/YoloTranslator.java
27.77% <0.00%> (+18.95%)
:arrow_up:

...ain/java/ai/djl/modality/cv/util/NDImageUtils.java
67.10% <0.00%> (+7.89%)
:arrow_up:

api/src/main/java/ai/djl/modality/nlp/Decoder.java
63.63% <ø> (ø)

... and 630 more

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

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


[fix] make properties overwritable (#3356)

This PR makes import side effects less aggressive by allowing __fetch_polyfill() to run several times.
See #3356 for more details.

Thank you! Mind adding a changeset? Would do it myself but I can't checkout this PR for whatever reason


Define Nested Querying

There are some changes that will cause some typescript headaches (see the source-html translator) if you've used raw maps in the brand mappers, but otherwise this should be transparent and compatible.
We'll need to write up some documentation, but for now it's probably best to look at the examples in the query-test.js file in the document package.
I also have the intent to move to having Transforms use a proxy to mutate the document to avoid having to duplicate the effort of maintaining annotation lists, but it got to be too much (the TransformResult interface can't do it as-is because text changes and ordering matter, and it doesn't account for those, so it's relegated for the moment to handling changes to the AnnotationCollection for chaining purposes).
Please let me know if the ergonomics are okay, and if there's anything obvious that we can do to improve them!
I don't want to spend too much more time on this in the short term, partially because I want to stop blocking work, and partially because I think this is a fairly big problem space and it might be good to get some early examples of use / problems before doing too much more.
Thanks!

@blaine Did you meant to push that last merge commit? I think a forced pull after I rebased onto latest should sort you out. Sorry for the confusion. Let me know if I can help...

@foobarrio no, I didn't! :( My command-line git isn't working reliably (hangs on ssh somewhat erratically) and I used Github Desktop which apparently does horrible things without telling you.