[SUPPORT] spark stuctrued streaming failed to update MDT metadata

Tips before filing an issue

Have you gone through our FAQs?

Join the mailing list to engage in conversations and get faster support at<EMAIL_ADDRESS>

If you have triaged this as a bug, then file an issue directly.

Describe the problem you faced
spark structured streaming ingest data with hoodie.metadata.enable=true, the async compaction will write a DELTACOMMIT instant to MDT, as the compaction is async, the data writer will rollback the inflight delta commit in MDT, when the compaction finish, the compaction writer will find the inflight deltacommit does not exit, throw an exception.
To Reproduce
Steps to reproduce the behavior:

Expected behavior
A clear and concise description of what you expected to happen.
Environment Description

Hudi version : 0.14.1

Spark version : 3.3.2

Hive version :

Hadoop version : 3.3.0

Storage (HDFS/S3/GCS..) : hdfs

Running on Docker? (yes/no) : no

Additional context
Add any other context about the problem here.
Stacktrace
24/03/20 09:51:23 INFO BaseRollbackActionExecutor: Rolled back inflight instant<PHONE_NUMBER>5114761
24/03/20 09:51:23 INFO BaseRollbackActionExecutor: Index rolled back for commits [==>20240320095114761__deltacommit__INFLIGHT__20240320095151179]
24/03/20 09:51:23 INFO BaseRollbackActionExecutor: Deleting instant=[==>20240320095114761__deltacommit__INFLIGHT__20240320095151179]
24/03/20 09:51:23 INFO HoodieActiveTimeline: Deleting instant [==>20240320095114761__deltacommit__INFLIGHT__20240320095151179]
24/03/20 09:51:24 INFO HoodieActiveTimeline: Removed instant [==>20240320095114761__deltacommit__INFLIGHT__20240320095151179]
24/03/20 09:51:24 INFO HoodieActiveTimeline: Deleting instant [==>20240320095114761__deltacommit__REQUESTED]
24/03/20 09:51:24 INFO HoodieSparkSqlWriterInternal: Config.inlineCompactionEnabled ? false
24/03/20 09:51:24 INFO HoodieSparkSqlWriterInternal: Config.asyncClusteringEnabled ? false
24/03/20 09:51:24 INFO MapPartitionsRDD: Removing RDD 570 from persistence list
24/03/20 09:51:24 INFO BlockManager: Removing RDD 570
24/03/20 09:51:24 INFO MapPartitionsRDD: Removing RDD 558 from persistence list
24/03/20 09:51:24 INFO BlockManager: Removing RDD 558
24/03/20 09:51:24 INFO MapPartitionsRDD: Removing RDD 562 from persistence list
24/03/20 09:51:24 INFO BlockManager: Removing RDD 562
24/03/20 09:51:24 INFO MapPartitionsRDD: Removing RDD 604 from persistence list
24/03/20 09:51:24 INFO BlockManager: Removing RDD 604
24/03/20 09:51:24 INFO UnionRDD: Removing RDD 581 from persistence list
24/03/20 09:51:24 INFO BlockManager: Removing RDD 581
24/03/20 09:51:24 ERROR HoodieStreamingSink: Micro batch id=10 threw following exception:
org.apache.hudi.exception.HoodieRollbackException: Failed to rollback /tmp/hoodie/hudi40/.hoodie/metadata commits<PHONE_NUMBER>5114761
	at org.apache.hudi.client.BaseHoodieTableServiceClient.rollback(BaseHoodieTableServiceClient.java:1065)
	at org.apache.hudi.client.BaseHoodieTableServiceClient.rollback(BaseHoodieTableServiceClient.java:1012)
	at org.apache.hudi.client.BaseHoodieTableServiceClient.rollbackFailedWrites(BaseHoodieTableServiceClient.java:940)
	at org.apache.hudi.client.BaseHoodieTableServiceClient.rollbackFailedWrites(BaseHoodieTableServiceClient.java:922)
	at org.apache.hudi.client.BaseHoodieTableServiceClient.rollbackFailedWrites(BaseHoodieTableServiceClient.java:917)
	at org.apache.hudi.client.BaseHoodieWriteClient.lambda$startCommitWithTime$97cdbdca$1(BaseHoodieWriteClient.java:941)
	at org.apache.hudi.common.util.CleanerUtils.rollbackFailedWrites(CleanerUtils.java:222)
	at org.apache.hudi.client.BaseHoodieWriteClient.startCommitWithTime(BaseHoodieWriteClient.java:940)
	at org.apache.hudi.client.BaseHoodieWriteClient.startCommitWithTime(BaseHoodieWriteClient.java:925)
	at org.apache.hudi.metadata.HoodieBackedTableMetadataWriter.commitInternal(HoodieBackedTableMetadataWriter.java:1092)
	at org.apache.hudi.metadata.SparkHoodieBackedTableMetadataWriter.commit(SparkHoodieBackedTableMetadataWriter.java:117)
	at org.apache.hudi.metadata.HoodieBackedTableMetadataWriter.processAndCommit(HoodieBackedTableMetadataWriter.java:810)
	at org.apache.hudi.metadata.HoodieBackedTableMetadataWriter.updateFromWriteStatuses(HoodieBackedTableMetadataWriter.java:865)
	at org.apache.hudi.client.BaseHoodieWriteClient.writeTableMetadata(BaseHoodieWriteClient.java:363)
	at org.apache.hudi.client.BaseHoodieWriteClient.commit(BaseHoodieWriteClient.java:286)
	at org.apache.hudi.client.BaseHoodieWriteClient.commitStats(BaseHoodieWriteClient.java:236)
	at org.apache.hudi.client.SparkRDDWriteClient.commit(SparkRDDWriteClient.java:104)
	at org.apache.hudi.HoodieSparkSqlWriterInternal.commitAndPerformPostOperations(HoodieSparkSqlWriter.scala:1081)
	at org.apache.hudi.HoodieSparkSqlWriterInternal.writeInternal(HoodieSparkSqlWriter.scala:520)
	at org.apache.hudi.HoodieSparkSqlWriterInternal.write(HoodieSparkSqlWriter.scala:204)
	at org.apache.hudi.HoodieSparkSqlWriter$.write(HoodieSparkSqlWriter.scala:121)
	at org.apache.hudi.HoodieStreamingSink.$anonfun$addBatch$2(HoodieStreamingSink.scala:138)
	at scala.util.Try$.apply(Try.scala:213)
	at org.apache.hudi.HoodieStreamingSink.$anonfun$addBatch$1(HoodieStreamingSink.scala:130)
	at org.apache.hudi.HoodieStreamingSink.retry(HoodieStreamingSink.scala:234)
	at org.apache.hudi.HoodieStreamingSink.addBatch(HoodieStreamingSink.scala:129)
	at org.apache.spark.sql.execution.streaming.MicroBatchExecution.$anonfun$runBatch$17(MicroBatchExecution.scala:665)
	at org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$6(SQLExecution.scala:109)
	at org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:169)
	at org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$1(SQLExecution.scala:95)
	at org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:779)
	at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:64)
	at org.apache.spark.sql.execution.streaming.MicroBatchExecution.$anonfun$runBatch$16(MicroBatchExecution.scala:663)
	at org.apache.spark.sql.execution.streaming.ProgressReporter.reportTimeTaken(ProgressReporter.scala:375)
	at org.apache.spark.sql.execution.streaming.ProgressReporter.reportTimeTaken$(ProgressReporter.scala:373)
	at org.apache.spark.sql.execution.streaming.StreamExecution.reportTimeTaken(StreamExecution.scala:68)
	at org.apache.spark.sql.execution.streaming.MicroBatchExecution.runBatch(MicroBatchExecution.scala:663)
	at org.apache.spark.sql.execution.streaming.MicroBatchExecution.$anonfun$runActivatedStream$2(MicroBatchExecution.scala:256)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
	at org.apache.spark.sql.execution.streaming.ProgressReporter.reportTimeTaken(ProgressReporter.scala:375)
	at org.apache.spark.sql.execution.streaming.ProgressReporter.reportTimeTaken$(ProgressReporter.scala:373)
	at org.apache.spark.sql.execution.streaming.StreamExecution.reportTimeTaken(StreamExecution.scala:68)
	at org.apache.spark.sql.execution.streaming.MicroBatchExecution.$anonfun$runActivatedStream$1(MicroBatchExecution.scala:219)
	at org.apache.spark.sql.execution.streaming.ProcessingTimeExecutor.execute(TriggerExecutor.scala:67)
	at org.apache.spark.sql.execution.streaming.MicroBatchExecution.runActivatedStream(MicroBatchExecution.scala:213)
	at org.apache.spark.sql.execution.streaming.StreamExecution.$anonfun$runStream$1(StreamExecution.scala:307)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
	at org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:779)
	at org.apache.spark.sql.execution.streaming.StreamExecution.org$apache$spark$sql$execution$streaming$StreamExecution$$runStream(StreamExecution.scala:285)
	at org.apache.spark.sql.execution.streaming.StreamExecution$$anon$1.run(StreamExecution.scala:208)
Caused by: org.apache.hudi.exception.HoodieIOException: Could not delete instant [==>20240320095114761__deltacommit__REQUESTED] with path /tmp/hoodie/hudi40/.hoodie/metadata/.hoodie/20240320095114761.deltacommit.requested
	at org.apache.hudi.common.table.timeline.HoodieActiveTimeline.deleteInstantFile(HoodieActiveTimeline.java:301)
	at org.apache.hudi.common.table.timeline.HoodieActiveTimeline.deletePending(HoodieActiveTimeline.java:243)
	at org.apache.hudi.table.action.rollback.BaseRollbackActionExecutor.deleteInflightAndRequestedInstant(BaseRollbackActionExecutor.java:294)
	at org.apache.hudi.table.action.rollback.BaseRollbackActionExecutor.finishRollback(BaseRollbackActionExecutor.java:259)
	at org.apache.hudi.table.action.rollback.BaseRollbackActionExecutor.runRollback(BaseRollbackActionExecutor.java:117)
	at org.apache.hudi.table.action.rollback.BaseRollbackActionExecutor.execute(BaseRollbackActionExecutor.java:138)
	at org.apache.hudi.table.HoodieSparkMergeOnReadTable.rollback(HoodieSparkMergeOnReadTable.java:218)
	at org.apache.hudi.client.BaseHoodieTableServiceClient.rollback(BaseHoodieTableServiceClient.java:1048)
	... 49 more
24/03/20 09:51:24 INFO HoodieStreamingSink: Retrying the failed micro batch id=10 ...
24/03/20 09:51:24 INFO BlockManagerInfo: Added rdd_604_0 in memory on host-10-19-29-165:40389 (size: 512.0 B, free: 365.9 MiB)
24/03/20 09:51:24 INFO TaskSetManager: Finished task 0.0 in stage 225.0 (TID 246) in 989 ms on host-10-19-29-165 (executor 2) (1/1)
24/03/20 09:51:24 INFO YarnScheduler: Removed TaskSet 225.0, whose tasks have all completed, from pool
24/03/20 09:51:24 INFO DAGScheduler: ResultStage 225 (start at <pastie>:64) finished in 1.218 s
24/03/20 09:51:24 INFO DAGScheduler: Job 138 is finished. Cancelling potential speculative or zombie tasks for this job
24/03/20 09:51:24 INFO YarnScheduler: Killing all running tasks in stage 225: Stage finished
24/03/20 09:51:24 INFO DAGScheduler: Job 138 finished: start at <pastie>:64, took 1.410154 s
24/03/20 09:51:24 INFO CommitUtils: Creating  metadata for UPSERT_PREPPED numWriteStats:1 numReplaceFileIds:0
24/03/20 09:51:24 INFO BaseSparkCommitActionExecutor: Committing<PHONE_NUMBER>5114761, action Type deltacommit, operation Type UPSERT_PREPPED
24/03/20 09:51:24 INFO SparkContext: Starting job: start at <pastie>:64
24/03/20 09:51:24 INFO DAGScheduler: Got job 141 (start at <pastie>:64) with 1 output partitions
24/03/20 09:51:24 INFO DAGScheduler: Final stage: ResultStage 229 (start at <pastie>:64)
24/03/20 09:51:24 INFO DAGScheduler: Parents of final stage: List()
24/03/20 09:51:24 INFO DAGScheduler: Missing parents: List()
24/03/20 09:51:24 INFO DAGScheduler: Submitting ResultStage 229 (MapPartitionsRDD[616] at start at <pastie>:64), which has no missing parents
24/03/20 09:51:24 INFO MemoryStore: Block broadcast_196 stored as values in memory (estimated size 154.3 KiB, free 364.3 MiB)
24/03/20 09:51:24 INFO MemoryStore: Block broadcast_196_piece0 stored as bytes in memory (estimated size 53.9 KiB, free 364.2 MiB)
24/03/20 09:51:24 INFO BlockManagerInfo: Added broadcast_196_piece0 in memory on host-10-19-29-153:57823 (size: 53.9 KiB, free: 365.8 MiB)
24/03/20 09:51:24 INFO SparkContext: Created broadcast 196 from broadcast at DAGScheduler.scala:1513
24/03/20 09:51:24 INFO DAGScheduler: Submitting 1 missing tasks from ResultStage 229 (MapPartitionsRDD[616] at start at <pastie>:64) (first 15 tasks are for partitions Vector(0))
24/03/20 09:51:24 INFO YarnScheduler: Adding task set 229.0 with 1 tasks resource profile 0
24/03/20 09:51:24 INFO TaskSetManager: Starting task 0.0 in stage 229.0 (TID 250) (host-10-19-29-165, executor 2, partition 0, PROCESS_LOCAL, 4449 bytes) taskResourceAssignments Map()
24/03/20 09:51:24 INFO BlockManagerInfo: Added broadcast_196_piece0 in memory on host-10-19-29-165:40389 (size: 53.9 KiB, free: 365.9 MiB)
24/03/20 09:51:24 INFO TaskSetManager: Finished task 0.0 in stage 229.0 (TID 250) in 46 ms on host-10-19-29-165 (executor 2) (1/1)
24/03/20 09:51:24 INFO YarnScheduler: Removed TaskSet 229.0, whose tasks have all completed, from pool
24/03/20 09:51:24 INFO DAGScheduler: ResultStage 229 (start at <pastie>:64) finished in 0.085 s
24/03/20 09:51:24 INFO DAGScheduler: Job 141 is finished. Cancelling potential speculative or zombie tasks for this job
24/03/20 09:51:24 INFO YarnScheduler: Killing all running tasks in stage 229: Stage finished
24/03/20 09:51:24 INFO DAGScheduler: Job 141 finished: start at <pastie>:64, took 0.088189 s
24/03/20 09:51:24 INFO HoodieActiveTimeline: Marking instant complete [==>20240320095114761__deltacommit__INFLIGHT]
24/03/20 09:51:24 INFO HoodieActiveTimeline: Checking for file exists ?/tmp/hoodie/hudi40/.hoodie/metadata/.hoodie/20240320095114761.deltacommit.inflight
24/03/20 09:51:24 ERROR AsyncCompactService: Compactor executor failed
org.apache.hudi.exception.HoodieException: Failed to update metadata
	at org.apache.hudi.client.BaseHoodieTableServiceClient.writeTableMetadata(BaseHoodieTableServiceClient.java:706)
	at org.apache.hudi.client.BaseHoodieTableServiceClient.completeCompaction(BaseHoodieTableServiceClient.java:330)
	at org.apache.hudi.client.BaseHoodieTableServiceClient.commitCompaction(BaseHoodieTableServiceClient.java:315)
	at org.apache.hudi.client.BaseHoodieWriteClient.commitCompaction(BaseHoodieWriteClient.java:1077)
	at org.apache.hudi.client.HoodieSparkCompactor.compact(HoodieSparkCompactor.java:61)
	at org.apache.hudi.async.AsyncCompactService.lambda$null$0(AsyncCompactService.java:84)
	at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1604)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalArgumentException
	at org.apache.hudi.common.util.ValidationUtils.checkArgument(ValidationUtils.java:33)
	at org.apache.hudi.common.table.timeline.HoodieActiveTimeline.transitionState(HoodieActiveTimeline.java:618)
	at org.apache.hudi.common.table.timeline.HoodieActiveTimeline.transitionState(HoodieActiveTimeline.java:599)
	at org.apache.hudi.common.table.timeline.HoodieActiveTimeline.saveAsComplete(HoodieActiveTimeline.java:224)
	at org.apache.hudi.table.action.commit.BaseSparkCommitActionExecutor.commit(BaseSparkCommitActionExecutor.java:311)
	at org.apache.hudi.table.action.commit.BaseCommitActionExecutor.autoCommit(BaseCommitActionExecutor.java:201)
	at org.apache.hudi.table.action.commit.BaseCommitActionExecutor.commitOnAutoCommit(BaseCommitActionExecutor.java:183)
	at org.apache.hudi.table.action.commit.BaseSparkCommitActionExecutor.updateIndexAndCommitIfNeeded(BaseSparkCommitActionExecutor.java:279)
	at org.apache.hudi.table.action.commit.BaseSparkCommitActionExecutor.execute(BaseSparkCommitActionExecutor.java:184)
	at org.apache.hudi.table.action.deltacommit.SparkUpsertPreppedDeltaCommitActionExecutor.execute(SparkUpsertPreppedDeltaCommitActionExecutor.java:44)
	at org.apache.hudi.table.HoodieSparkMergeOnReadTable.upsertPrepped(HoodieSparkMergeOnReadTable.java:126)
	at org.apache.hudi.table.HoodieSparkMergeOnReadTable.upsertPrepped(HoodieSparkMergeOnReadTable.java:88)
	at org.apache.hudi.client.SparkRDDWriteClient.upsertPreppedRecords(SparkRDDWriteClient.java:156)
	at org.apache.hudi.client.SparkRDDWriteClient.upsertPreppedRecords(SparkRDDWriteClient.java:63)
	at org.apache.hudi.metadata.HoodieBackedTableMetadataWriter.commitInternal(HoodieBackedTableMetadataWriter.java:1099)
	at org.apache.hudi.metadata.SparkHoodieBackedTableMetadataWriter.commit(SparkHoodieBackedTableMetadataWriter.java:117)
	at org.apache.hudi.metadata.HoodieBackedTableMetadataWriter.processAndCommit(HoodieBackedTableMetadataWriter.java:810)
	at org.apache.hudi.metadata.HoodieBackedTableMetadataWriter.updateFromWriteStatuses(HoodieBackedTableMetadataWriter.java:865)
	at org.apache.hudi.client.BaseHoodieTableServiceClient.writeTableMetadata(BaseHoodieTableServiceClient.java:701)
	... 9 more
24/03/20 09:51:24 INFO HoodieStreamingSink: Async Compactor shutdown. Errored ? true
.```

It looks like the MDT timeline instant action is in invalid state.

@xicm Are you using multi writer setup?

@xicm Are you using multi writer setup?

Single writer

The instant in the screenshot comes from another job, its name is not the same as the one in the stack trace.

@xicm Looks like other similar issues also https://github.com/apache/hudi/issues/10906
I recommend you to use HudiStreamer instead of Spark Structured Streaming.

@xicm Are you using multi writer setup?

Single writer

I using multiwriters for ingesting writer and offline clustering. Even they don't involve with overlapping file groups. MDT sometimes result in invalid state. For more information, in this case we don't configure multiple writers setup like ZK, is this the problem even two writers handle non overlapping file groups?

in this case we don't configure multiple writers setup like ZK

Should always configure the log provider if there are multi writers. But you are right, it is possible we make the metadata table non-blocking since 1.0 release.

@Qiuzhuang Feel free to close this issue if you are good on this.

but woudn't the inprocess lock provider kick in? and should avoid multiple writers to MDT. I am assuming the setup is,
spark streaming w/ async compaction or clustering. A single process, but multiple thread trying to ingest to MDT.
if in process lock provider is not kicking in, then its a bug.

The root cause is the deltacommit in MDT rollbacks the compaction instant(compaction in MDT is a deltacommit) in MDT.
When a compaction starts, it will create a inflight DeltaCommit in MDT, because the compaction is asynchronous, the data ingestion will go on, the writer will start a new delta commit both in data table and MDT. In MDT, the new deltacommit will rollback the uncompleted deltacommit(it is created by the async compaction).
Is it possible to filter the deltacommit created by compaction in MDT when we do rollback?

but woudn't the inprocess lock provider kick in? and should avoid multiple writers to MDT. I am assuming the setup is, spark streaming w/ async compaction or clustering. A single process, but multiple thread trying to ingest to MDT. if in process lock provider is not kicking in, then its a bug.

If async clustering is in the same process, we don't run into issue for now. But for multiple writes like offline clustering in another process, as indicated by @danny0405, we should have ZK lock provider to serialize MDT write.

Hi @danny0405 & @nsivabalan even I configure HMS lock provider for multiple writes, we still run into issues as when we query table, MDT corrupted.
d1f683ef-8927-4df8-9e12-b769b5980b46-0_358-1002-89404_20240410185726547.parquet: No such file or directory!

@Qiuzhuang Can you provide the lock configurations you set? Did you set hoodie.cleaner.policy.failed.writes=LAZY

@Qiuzhuang Can you provide the lock configurations you set? Did you set hoodie.cleaner.policy.failed.writes=LAZY

Sure, here is the configuration for offline clustering:
hoodie.clustering.async.enabled=true
hoodie.clustering.async.max.commits=4
hoodie.clustering.plan.strategy.target.file.max.bytes=1073741824
hoodie.clustering.plan.strategy.small.file.limit=419430400
hoodie.clustering.plan.strategy.max.num.groups=400
hoodie.clustering.execution.strategy.class=org.apache.hudi.client.clustering.run.strategy.SparkSortAndSizeExecutionStrategy
hoodie.clustering.plan.strategy.sort.columns=xx1,xx2
hoodie.layout.optimize.strategy=z-order
hoodie.write.concurrency.mode=optimistic_concurrency_control
hoodie.write.lock.provider=org.apache.hudi.hive.transaction.lock.HiveMetastoreBasedLockProvider
hoodie.write.lock.hivemetastore.database=xxx
hoodie.write.lock.hivemetastore.table=locker_xxx
hoodie.cleaner.policy.failed.writes=LAZY
hoodie.write.concurrency.early.conflict.detection.enable=true
We are also looking into this issue with our cloud vendor as well, FYI.

https://hudi.apache.org/docs/metadata#deployment-model-b-single-writer-with-async-table-services

Maybe we should set default value of hoodie.datasource.compaction.async.enable to false.
It's confusing to user that single writer needs a lock by default.
@danny0405


Support for other APIs (SDL, DInput)

Would be a nice to have
And a must if we want wheel support

I agree! We will wait for it!

inb4 pressure sensitive buttons and sixaxis from a ds3


Windows static IP

Can a static IP address be assigned in Windows OS? Even if I assign an Azure static IP, this concerns only public (translated) IP address, Windows sees only internal IP (for ex. <IP_ADDRESS>) and it sees it as DHCP assigned. Could I assign a second IP address to Windows network interface (for ex. <IP_ADDRESS>)?

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

ID: 4cff90b4-ed1e-5069-7863-2308911e80e5
Version Independent ID: e3e9842e-349b-7dd4-2b63-dc47a2ec0b56
Content: Virtual networks and Windows virtual machines in Azure
Content Source: articles/virtual-machines/windows/network-overview.md
Service: virtual-machines-windows
GitHub Login: @cynthn
Microsoft Alias: cynthn

@mcurko , There is an option in the portal to set the Private IP Static.

It is not recommended to change the IP address in the Guest OS and all IP management should be done from the portal.
yes, you can add another NIC to your VM. Please follow the below article: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/multiple-nics
Let me know if you have any questions.

OK, thanks!
Regards,
Marko Čurko
Marko Čurko
Senior Developer │ Perpetuum Mobile d.o.o.
Damira Tomljanovića Gavrana 13, 10000 Zagreb
m +385 91 2305 123 │ t +385 1 6390 834
marko.curko<EMAIL_ADDRESS>│ www.perpetuum.hrhttp://www.perpetuum.hr/
[logo]
From: KARTHIK SRINIVAS<EMAIL_ADDRESS>Sent: Friday, May 17, 2019 1:34 PM
To: MicrosoftDocs/azure-docs<EMAIL_ADDRESS>Cc: Marko Čurko<EMAIL_ADDRESS>Mention<EMAIL_ADDRESS>Subject: Re: [MicrosoftDocs/azure-docs] Windows static IP (#31476)
@mcurkohttps://github.com/mcurko , There is an option in the portal to set the Private IP Static.
[image]https://user-images.githubusercontent.com/47132998/57925298-69c63a80-78c5-11e9-92a7-dabeea2c9373.png
It is not recommended to change the IP address in the Guest OS and all IP management should be done from the portal.
yes, you can add another NIC to your VM. Please follow the below article: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/multiple-nics
Let me know if you have any questions.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/MicrosoftDocs/azure-docs/issues/31476?email_source=notifications&email_token=ADZUQI5ZK3YVHZUQRZRQTM3PV2J3NA5CNFSM4HNUKKB2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODVUQLIQ#issuecomment-493421986, or mute the threadhttps://github.com/notifications/unsubscribe-auth/ADZUQIYXMW5LOAURCTT3CS3PV2J3NANCNFSM4HNUKKBQ.

@mcurko Do you have any update for me?

@mcurko , I will close this issue now. If you have any follow up questions, please tag me.


IE crashes when using Hue Search box

Typing anything into the Search box in Hue causes Internet Explorer to crash every time. In Chrome it is fine.
This has been tested for:

IE  11.0.9600.18617
Hue 3.12 (via demo.gethue.com)
Hue 3.11

IE will crash each time.

Thanks for letting us know! https://issues.cloudera.org/browse/HUE-6133


describe the openid metadata as per openid specifications

describe the openid metadata as per openid specifications as per describe the openid metadata as per openid specifications

Closes/fixes #issue
Checklist

[ ] This PR makes changes to the public API
[ ] I have included links for closing relevant issue numbers

awesome, thanks there is just one little problem in the pipeline:
Warning: You have changed the public API signature for this project. Please copy the file "temp/oidc-client-ts.api.md" to "docs/oidc-client-ts.api.md", or perform a local build (which does this automatically). See the Git repo documentation for more info.

API Extractor completed with warnings
npm ERR! code 1
npm ERR! path /home/runner/work/oidc-client-ts/oidc-client-ts
npm ERR! command failed
npm ERR! command sh -c -- npm run build

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/runner/.npm/_logs/2023-03-03T09_18_27_726Z-debug-0.log
Error: Process completed with exit code 1.

-> please also add docs/oidc-client-ts.api.md in that merge request, i think // (undocumented) will change in the export interface OidcMetadata section...

since the merge to the main, I create a new pull request #908


[AutoPR applicationinsights/data-plane/applicationinsights/resource-manager] typo: applicationinsights data-lane and resource-manager

Created to sync https://github.com/Azure/azure-rest-api-specs/pull/4554

Closing PRs that are older than 1 month.


Github 2490 - Added equals method check even if actual/expected is null

GitHub #2490 - Added a condition to check equals method even if any of actual/expected is null as part of this feature request.

I think it is easier to read and understand with multiple if conditions.
Can you add the additional tests and the CHANGES files?

I think it is easier to read and understand with multiple if conditions.
Can you add the additional tests and the CHANGES files?

Thanks for the clarification. I have updated the test classes as discussed.

Is there any issue with the conditional or statement ? Because in the line 152 we are checking if both are null or not. Line 155 will only execute if anyone of expected and actual both is not null.

That is correct, however the issue is that if equals(null) returns true it will fall through to the !expected.equals(actual) && !actual.equals(expected) where the NullPointerException will then occur. This can be seen when executing areNotEqualImpl(new BrokenEquals(), null); with the initial code changes you proposed.

An equals(...) implementation returning true for null is broken and should ideally be detected by assertion libraries; or it should be documented by the assertion library that the test method (e.g. assertNotEquals) is only intended to compare two separate values and not to test whether a class correctly implements equals(...).

As previously said, assertNotEquals is not used to verify the equals method implementation.
It is the same for the other assertion libraries in the Java world.
A documentation update can solve your misunderstanding.
At the same time, the implementation can manage the null value by itself before a fallback to equals. I think it is a good compromise which will solve the issue too.

As previously said, assertNotEquals is not used to verify the equals method implementation. ... A documentation update can solve your misunderstanding.

Yes a documentation update would be fine for me. I think the current proposed changes by this pull request performing actual.equals(actual) would not follow the intended usage scenario either. Sorry @royanindya-code for all the trouble.
My main point was that assertNotEquals might be misused for equals implementation checks (in fact for other assertion libraries such misuse exists), so it would be good to add a documentation comment, on Assert or / and the assertNotEquals methods, clarifying that all the assertion methods are not intended to check whether a class implements equals correctly (but instead only to compare values).

@krmahadevan, I am not sure if this pull request was actually ready for merging. There was some misunderstanding regarding what the desired behavior is. However in the end @juherr wrote:

As previously said, assertNotEquals is not used to verify the equals method implementation.
[...]
A documentation update can solve your misunderstanding.

The current state of this pull request satisfies neither of those (I am not trying to blame @royanindya-code here, they did a good job, but my comments were confusing):

The changes now check actual.equals(actual) which does explicitly verify the equals method implementation (which assertNotEquals is not supposed to)
The documentation was not adjusted

@Marcono1234 - I merged it since @juherr had already approved it. I havent been following this issue closely.
With respect to the documentation not being adjusted, that would need a separate pull request targetted at https://github.com/testng-team/testng-team.github.io (If you would like to raise a PR to fix that, please go ahead) (or) are you talking about the javadocs ? If its the javadocs, then you can very well go ahead and raise a PR to fix that as well.

Ah sorry I meant the Javadoc. I have created a pull request for these documentation changes now, see #2512.
Should parts of this pull request now be reverted since actual.equals(actual) and expected.equals(expected) is explicitly what this library is not supposed to do. I am also not sure how useful some of the added unit tests are because they explicitly test that assertNotEquals does not call equals when one argument is null. That is an implementation detail and could cause confusion in the future if someone wants to change this.
@juherr what is your opinion on all of this?

IMO, the new tests are validating the expected behavior: null value is not equals to a not null value.

Hmm, ok, from that standpoint the tests make sense.
Though regarding actual.equals(actual) and expected.equals(expected), that behavior regarding null does not actually hold:
class BrokenEquals {
  @Override
  public boolean equals(Object o) {
    return false; // broken implementation
  }

  public static void main(String... args) {
    // ACTUAL: Throws AssertionError
    // EXPECTED: No AssertionError; assertNotEquals is not intended to check `equals` implementation
    Assert.assertNotEquals(new BrokenEquals(), null);
  }
}

@Marcono1234 I agree with the expectation. Could you add another test and propose a fix?

@juherr, created #2518 for it.


Sponsor section

Issue Related #571
Please Merge the PR #600 before this.
Top layout before

Mid Layout after

Current coverage is 47.26% (diff: 100%)

Merging #602 into development will not change coverage

@@           development       #602   diff @@
=============================================
  Files                5          5
  Lines              548        548
  Methods             52         52
  Messages             0          0
  Branches            88         88
=============================================
  Hits               259        259
  Misses             289        289
  Partials             0          0

Powered by Codecov. Last update 266bcad...634bb0b

Thanks. Please solve the relevant hound-ci issues. Thank you.

@mariobehling Try to solve maximum Houndci issues, Please merge after merging #600

@aayusharora  this has a conflict

@championswimmer Solved merge Conflicts !!


[sw/silicon_creator] Possible recovery paths for missing boot data in prod life cycle states

The current implementation favors security over availability since boot data includes security critical information such as min_security_version_rom_ext, and does not provide a way to recover a chip if it does not have any valid boot data entries in a prod life cycle state. Creating this issue to understand if we want/need a recovery path (in addition to the reliability measures we currently have) and to track this discussion.

https://github.com/lowRISC/opentitan/pull/13081 added the following entries to control default boot_data behavior in ROM:

CREATOR_SW_CFG_MIN_SEC_VER_ROM_EXT
CREATOR_SW_CFG_MIN_SEC_VER_BL0
CREATOR_SW_CFG_DEFAULT_BOOT_DATA_IN_PROD_EN

Closing this issue since I don't think we have any additional plans for this.
@cfrantz @moidx fyi


Container fails when adding codeprojectai:

Hi!
I just started testing this container to replace my Frigate instance.
I managed to add my first 2 (of 4) cameras but then I cannot add codeprojectai to the config. No issue if i leave default object detector.
Below the config file:
ffmpeg:
  camera:
    soggiorno:  # This value has to be unique across all cameras
      name: Soggiorno
      host: <IP_ADDRESS>
      port: 8554
      path: /unicast

    cameretta:  # This value has to be unique across all cameras
      name: Cameretta
      host: <IP_ADDRESS>
      port: 88
      path: /videoMain
      username: xxx
      password: xxx
      width: 1920
      height: 1080
      fps: 1
      codec: h264

codeprojectai:
  host: codeprojectai
  port: 32168
  object_detector:
    cameras:
      soggiorno:
        fps: 1
        log_all_objects: true
        labels:
          - label: person
            confidence: 0.8
            trigger_recorder: true
      cameretta:
        fps: 1
        labels:
          - label: person
            confidence: 0.7
            trigger_recorder: true
  face_recognition:
    save_unknown_faces: true
    cameras:
      soggiorno:
    labels:
      - person

## You can also use motion detection
mog2:
  motion_detector:
    cameras:
      soggiorno:  # Attach detector to the configured cameretta above
        fps: 1

## To tie everything together we need to configure one more component.
nvr:
  soggiorno:  # Run NVR for soggiorno
  cameretta:  # Run NVR for cameretta

# Now you can restart Viseron and you should be good to go!

This is the log seen in Portainer:

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 10-adduser: executing...
usermod: no changes
************************ UID/GID *************************
User uid:    0
User gid:    0
************************** Done **************************
[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 20-gid-video-device: executing...
[cont-init.d] 20-gid-video-device: exited 0.
[cont-init.d] 30-edgetpu-permission: executing...
************** Setting EdgeTPU permissions ***************
Coral Vendor IDs:
"1a6e"
"18d1"
Matching USB devices:
Bus 002 Device 002: ID 18d1:9302
No EdgeTPU PCI device was found
************************** Done **************************
[cont-init.d] 30-edgetpu-permission: exited 0.
[cont-init.d] 40-set-env-vars: executing...
****** Checking for hardware acceleration platforms ******
OpenCL is available!
VA-API is available!
CUDA cannot be used
*********************** Done *****************************
[cont-init.d] 40-set-env-vars: exited 0.
[cont-init.d] 50-check-if-rpi: executing...
********** Checking if we are running on an RPi **********
Not running on any supported RPi
*********************** Done *****************************
[cont-init.d] 50-check-if-rpi: exited 0.
[cont-init.d] 55-check-if-jetson: executing...
****** Checking if we are running on a Jetson Board ******
Not running on any supported Jetson board
*********************** Done *****************************
[cont-init.d] 55-check-if-jetson: exited 0.
[cont-init.d] 60-ffmpeg-path: executing...
****************** Getting FFmpeg path *******************
FFmpeg path: /home/abc/bin/ffmpeg
*********************** Done *****************************
[cont-init.d] 60-ffmpeg-path: exited 0.
[cont-init.d] 70-gstreamer-path: executing...
***************** Getting GStreamer path *****************
GStreamer path: /usr/bin/gst-launch-1.0
*********************** Done *****************************
[cont-init.d] 70-gstreamer-path: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
[2023-09-20 13:43:15] [INFO    ] [viseron.core] - -------------------------------------------
[2023-09-20 13:43:15] [INFO    ] [viseron.core] - Initializing Viseron
[2023-09-20 13:43:15] [INFO    ] [viseron.components] - Setting up component data_stream
[2023-09-20 13:43:15] [INFO    ] [viseron.components] - Setup of component data_stream took 0.0 seconds
[2023-09-20 13:43:15] [INFO    ] [viseron.components] - Setting up component webserver
[2023-09-20 13:43:15] [INFO    ] [viseron.components] - Setup of component webserver took 0.0 seconds
[2023-09-20 13:43:15] [INFO    ] [viseron.components] - Setting up component mog2
[2023-09-20 13:43:15] [INFO    ] [viseron.components] - Setting up component nvr
[2023-09-20 13:43:15] [INFO    ] [viseron.components] - Setup of component mog2 took 0.0 seconds
[2023-09-20 13:43:15] [INFO    ] [viseron.components] - Setting up component ffmpeg
[2023-09-20 13:43:15] [INFO    ] [viseron.components] - Setup of component nvr took 0.0 seconds
[2023-09-20 13:43:15] [INFO    ] [viseron.components] - Setting up component codeprojectai
[2023-09-20 13:43:15] [INFO    ] [viseron.components] - Setup of component ffmpeg took 0.0 seconds
[viseron-finish] Viseron exit code 256
[viseron-finish] Viseron received signal 4
[cont-finish.d] executing container finish scripts...
[cont-finish.d] done.
[s6-finish] waiting for services.
[s6-finish] sending all processes the TERM signal.
[s6-finish] sending all processes the KILL signal and exiting.

Interesting, what are the specs of your host?

It's a Asus PN41: https://www.asus.com/us/displays-desktops/mini-pcs/pn-series/mini-pc-pn41/
In the meantime I played a bit with codeproject.ai docker and now logs are different:

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 10-adduser: executing...
usermod: no changes
************************ UID/GID *************************
User uid:    0
User gid:    0
************************** Done **************************
[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 20-gid-video-device: executing...
[cont-init.d] 20-gid-video-device: exited 0.
[cont-init.d] 30-edgetpu-permission: executing...
************** Setting EdgeTPU permissions ***************
Coral Vendor IDs:
"1a6e"
"18d1"
Matching USB devices:
Bus 002 Device 002: ID 18d1:9302
No EdgeTPU PCI device was found
************************** Done **************************
[cont-init.d] 30-edgetpu-permission: exited 0.
[cont-init.d] 40-set-env-vars: executing...
****** Checking for hardware acceleration platforms ******
OpenCL is available!
VA-API is available!
CUDA cannot be used
*********************** Done *****************************
[cont-init.d] 40-set-env-vars: exited 0.
[cont-init.d] 50-check-if-rpi: executing...
********** Checking if we are running on an RPi **********
Not running on any supported RPi
*********************** Done *****************************
[cont-init.d] 50-check-if-rpi: exited 0.
[cont-init.d] 55-check-if-jetson: executing...
****** Checking if we are running on a Jetson Board ******
Not running on any supported Jetson board
*********************** Done *****************************
[cont-init.d] 55-check-if-jetson: exited 0.
[cont-init.d] 60-ffmpeg-path: executing...
****************** Getting FFmpeg path *******************
FFmpeg path: /home/abc/bin/ffmpeg
*********************** Done *****************************
[cont-init.d] 60-ffmpeg-path: exited 0.
[cont-init.d] 70-gstreamer-path: executing...
***************** Getting GStreamer path *****************
GStreamer path: /usr/bin/gst-launch-1.0
*********************** Done *****************************
[cont-init.d] 70-gstreamer-path: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
[2023-09-20 18:12:00] [INFO    ] [viseron.core] - -------------------------------------------
[2023-09-20 18:12:00] [INFO    ] [viseron.core] - Initializing Viseron
[2023-09-20 18:12:00] [INFO    ] [viseron.components] - Setting up component data_stream
[2023-09-20 18:12:00] [INFO    ] [viseron.components] - Setup of component data_stream took 0.0 seconds
[2023-09-20 18:12:00] [INFO    ] [viseron.components] - Setting up component webserver
[2023-09-20 18:12:00] [INFO    ] [viseron.components] - Setup of component webserver took 0.0 seconds
[2023-09-20 18:12:00] [INFO    ] [viseron.components] - Setting up component ffmpeg
[2023-09-20 18:12:00] [INFO    ] [viseron.components] - Setting up component codeprojectai
[2023-09-20 18:12:00] [INFO    ] [viseron.components] - Setting up component nvr
[2023-09-20 18:12:01] [INFO    ] [viseron.components] - Setting up component mog2
[2023-09-20 18:12:01] [INFO    ] [viseron.components] - Setup of component nvr took 0.0 seconds
[2023-09-20 18:12:01] [INFO    ] [viseron.components] - Setup of component ffmpeg took 0.0 seconds
[2023-09-20 18:12:01] [INFO    ] [viseron.components] - Setup of component mog2 took 0.0 seconds
[viseron-finish] Viseron exit code 256
[viseron-finish] Viseron received signal 4
[cont-finish.d] executing container finish scripts...
[cont-finish.d] done.
[s6-finish] waiting for services.
[s6-finish] sending all processes the TERM signal.
[s6-finish] sending all processes the KILL signal and exiting.

Hmm strange, how much RAM does it have?
Codeproject AI component is using the REST API so i am not sure how that could fail like this

Did you perhaps set a memory limit on the Docker container?

Try to use dmesg command after viseron exited.
I have similliar problem, and in dmesg output:
traps: python3[13462] trap invalid opcode ... in _dlib_pybind11.cpython-38-x86_64-linux-gnu.so[...]
I rebuid dlib as workarond.

Try to use dmesg command after viseron exited.
I have similliar problem, and in dmesg output: traps: python3[13462] trap invalid opcode ... in _dlib_pybind11.cpython-38-x86_64-linux-gnu.so[...]
I rebuid dlib as workarond.

how did you rebuild dlib?

how did you rebuild dlib?

I'm using a Dockerfile like this:
FROM roflcoopter/amd64-cuda-viseron:dev RUN apt-get -y update && apt-get install -y build-essential cmake python3-dev RUN pip install --force-reinstall dlib
And in my docker-compose.yml:
`
services:
viseron:
image: roflcoopter/amd64-cuda-viseron:dev   # < this line commented
build: . # < this line added to use Dockerfile insted image.

`

Looks very similar to the issue I had before. Not sure if something is missing from those Intel N series CPU.
https://github.com/roflcoopter/viseron/discussions/573

I had the same problem with codeprojectai.
Rebuilding dlib as indicated solved the problem of launching viseron.


Use this plugin with Thunderbird 60.3

It would be nice if it is possible to use this plugin with Thunderbird >=60.3
Are there any plans for this?

No plans for Thunderbird, I don't know how their API works or even how it works. I don't intend to be mean about this, but I won't be the one to add the feature. Someone who uses Thunderbird and knows JS could fork this and port it.


[BugFix] fix oss backup/restore without broker bug

Signed-off-by: xyz<EMAIL_ADDRESS>What type of PR is this：

[x] bug
[ ] feature
[ ] enhancement
[ ] refactor
[ ] others

Which issues of this PR fixes ：

Fixes #9967
Problem Summary(Required) ：

Checklist:

[ ] I have added test cases for my bug fix or my new feature
[ ] I have added user document for my new feature or new function

In current implementation, backup to oss can not parse srcUri: msg InvalidBucketName Message, The specified bucket is not valid.

run starrocks_admit_test

run starrocks_admit_test


Resolves Issue 83 - Support for & operator for unescaping

The patch is pretty simple, but it is working for me.  I would have added tests, but was unable to get the build working due to some missing rspec, even though I had installed it.

This work was merged here. Thanks!


[IOS] IsRefreshEnabled not working for ios

Hi,
IsRefreshEnabled not working for IOS and MACCATALYST
VirtualListView still shows refreshing indicator when pulled down, despite IsRefreshEnabled set to false.
Regards.

IsRefreshEnabled=False has no effect on iOS.


Update LICENSE

@carohansen @crowesn could you each comment to indicate agreement with these terms, before we merge?

closes #59

Works for me.

Fine for me as well.


Feat: Add wysiwyg editor & field for HTML

Summary
In addition to a markdown component, it would be awesome to have an html component with the same editing capabilities as the markdown wysiwyg.
Basic example
Similar functionality to forestry's textarea field where you select the html format on the widget.
Motivation
This could be useful if sourcing from say a json file and you need to content editors to be able to format text.

One strategy for rich content in JSON is to still use Markdown, and convert the specific nodes to HTML as needed.
You can modify gatsby-node.js with something like this for single nodes: (thanks LekoArts!)
exports.onCreateNode = ({
  node,
  actions,
  createNodeId,
  createContentDigest,
}) => {
  const { createNode, createNodeField } = actions

  // Check for the correct type to only affect this
  if (node.internal.type === `ExampleJson`) {
    const textNode = {
      id: createNodeId(`${node.id} markdown field`),
      children: [],
      parent: node.id,
      internal: {
        content: node.content,
        mediaType: `text/markdown`, // Important!
        contentDigest: createContentDigest(node.content),
        type: `${node.internal.type}Markdown`,
      },
    }

    createNode(textNode)

    // Add link to the new node
    createNodeField({
      node,
      name: `markdownContent___NODE`, // Before the ___NODE: Name of the new fields
      value: textNode.id, // Connects both nodes
    })
  }
}

For something like blocks, @dwalkr was able to wire up a solution for me in the starter we're releasing soon.
This way your config for transforming markdown can be used for both JSON nodes & your actual markdown files, so if you have posts in .md and pages in .json everything can work happily together :smile:
I'd go into more depth but my understanding of gatsby-node.js isn't there yet. The starter will be a good reference for this.

Nolan mentioned we can port some of this functionality from Forestry to create this component.

Hey @kendallstrautman is this functionality in Forestry open source?  I would much prefer to save my data as HTML over MD

@xaviemirmon Forestry is not open source (for now).

Dang! @DirtyF any thoughts on how we might progress this?

Unfortunately I just gotta do it at some point.    I’ll take a look when I got a few minutes, shouldn’t be much work


Position calculation is sus when the floating element is larger than viewport.

While debugging https://github.com/github/accessibility-audits/issues/4515 , I was able to narrow down the issue to this criteria.
When zoomed in, the floating element becomes of larger in height compared to the viewport. This results in negative top value in the anchor position calculation. Thus results in top parts of the floating element being cut off.
Before I can try to fix this by messing with the super complex calculations, I thought I'd float a test case to see if my assumptions are right.
I tried to keep the test case values as close to the real life use case as possible. You can see that the height of the floating element is 428px and the height of the viewport is only 400px. This already results in a negative top value which is buggy as far as I understand.
Open to feedback

@keithamus - Just paired with @siddharthkp and added a possible fix. Tested it on primer-react as well and it fixes the use case


Creation: add an option to allow volunteers to write comments

Sometimes, question is "Are you available this afternoon", and volunteer wish to say "I am, from 16 to 19 though!".
Currently, they can only say they are not available. We may find a way for them to attach an additional comment to their answers.
It's even more true on email communications, because on mobile he can answer other words than the required answers (that will display a "?" in the communication status with his answer in comment), but on email communications there are no text field.

done months ago


sample-apiserver failed to start

$ kubectl -n wardle logs wardle-apiserver-2109496523-s604f wardle-server
...
panic: unknown flag: --etcd-servers
goroutine 1 [running]:
panic(0x13efce0, 0xc4204452c0)
/usr/local/go/src/runtime/panic.go:500 +0x1a1
main.main()
/go/src/k8s.io/custom-metrics-boilerplate/sample-main.go:40 +0x126

Thanks @portis24 for the bug report!
I don't know how that happened really, probably a bad docker image push to the Docker Hub made by me.
However, now fixed ;)


A practical approach to Date and Time in JavaScript

Article checklist
ATTENTION: In your PR - add the ISSUE (topic form) # that this PR corresponds to. You can do this by also adding a comment that states "This fixes #(enter your Idea Content Form #)" to link and close your Idea Content (issue) when the PR is merged.
NOTE: (Please ensure that you have only one open issue + linked pull request at a time. This will ensure that we complete the article in a timely manner from inception to publishing.)
If you have not already please go over our Resources Page for more tips and tricks on how to improve our overall technical writing.
Preliminary Checks - Formatting and Structure

[x] Is the article you are submitting an in-depth and unique article? Does it go beyond what is in the official docs and what is covered in other blog sites. See these articles as examples.
[x] Does your article follow any of the suggested structure formats? - see example formats
[x] Is your article properly formatted in Markdown? - see Github Markdown guide
[x] Have you used the correct folder and file structure? - see Contribution Guidelines
[x] Is your article over 750 words? - Tool: Wordcounter.net
[x] Have you used our preferred heading structure? - H3 (###) and up
[x] Does your article provide enough value and detail about your topic? - Articles should be clear, accurate, and fully explained.
[x] Can your article be understood by beginners? - Assume the audience is smart but has no prior exposure to the common terminology in your article.
[x] Have you included a hero image that is 600x400 pixels and have the copyright to use it? - Tools: Pixlr Image Editor for resizing and Unsplash for Creative Commons images
[x] In your PR - add a comment that states "This fixes #(enter your Idea Content Form #)" to link and close your Idea Content (issue) when the PR is merged.

Grammar & plagiarism checks

[x] Have you spellchecked and grammar checked your article? - Tools: Write&Improve - ProWritingAid -  Grammarly
[x] Please place your article through a 3rd party plagiarism checker? We suggest using Quetext, this tool is free and has a daily limit. We typically accept articles with 10% or less.
[x] Have you checked your article for readability? - Tool: Hemmingway
[ ] Have you added sources for quotes and images that aren't yours?

Technical checks

[x] Are your code snippets properly formatted for syntax highlighting - see Syntax guide

Contribution guidelines
For first-time contributors and for more details, see Contributing Guidelines
This Fixes #2074

@Sajeyks  I will be reviewing this article.
cc: @hectorkambow

Thank you @Sajeyks for making the changes🚀. Let me go through them just to be sure before we proceed to the tech review.

@jerimkaura
I've updated the labels as you requested.

@Sajeyks thanks for making the change, let me check it.

plagiarism check done

Overall great work Gents 👍
Made some minor edits for flow/format - please be sure to review to see how future articles may be improved.
cc @jerimkaura - please go over my minor edits to improve future reviews 👍 - overall nicely done.


Remove maximum backreference distance limitation

Would it be possible to remove the current 2^25 backreference limitation?
I don't think that's too much of a problem for me personally, but it's a bit of a "gotcha" that the library has, which I think eventually should be removed to move it closer to perfection.

This limit was chosen because 25 bits is the maximum number of useable bits that can consistently be read into a single number using the standard JS bit-reading algorithm. There are other algorithms I could employ, but they will incur a pretty severe performance penalty.
The main reason I found this acceptable was that the Zstandard specification makes a suggestion to all encoders to output at most an 8MB backreference, and to all decoders to support at least an 8MB backreference. Indeed, unless specific options are used (e.g. ultra mode or --long) the backreference distance is capped at 8MB. Since fzstd supports 32MB backreferences, I thought it a reasonable sacrifice to maintain acceptable performance.
I probably won't change this unless there is sufficient demand.

I see, makes sense.
Just out of curiosity: would using BigInts for this incur in a major performance penalty too? I'm thinking perhaps whether longer backreferences are needed or not could be detected and a decision could be made on whether to use regular numbers of BigIns from that?

BigInts aren't necessary because it is still possible to fit 32 bits into a single number; it just won't fit into an Smi (30-bit signed integer) in V8, causing performance to suffer. In fact, BigInts are even worse than non-Smi numbers for performance: they can have a 10-100x performance penalty.

Closing until there's more demand for a higher backreference distance.


Is it possible to turn off cars/planes?

My team and I are using wrld3d js to plot points on a medieval-themed 3D map.
The planes and cars roaming around somewhat ruin this illusion.
Is it possible to turn them off, and if so, how?

Hi - this isn't currently possible in wrld.js, but I can see that it would be useful to be able to configure the traffic feature. We'll add to our plan.

any update on this / planned for a specific release time frame?

I'd like to add my support for being able to turn off cars, planes, etc. It really doesn't add any value. As a matter of opinion, I sincerely hope WRLD can provide alternatives to the very cartoony and childish (no insult leveled) graphics. It makes it very difficult for business users to grasp the power of the platform.

Thanks for the feedback Chris
We've scheduled ability to disable the animated traffic, provisionally expected end June 2018
For the request for a less cartoony appearance, there is work currently underway to provide a more neutral alternate theme that may be more suited for many business uses.

See https://github.com/wrld3d/wrld-themes for information on alternate themes.

Any news about this feature ?

We don't have this feature in development right now. That said there seems to be fair amount of support for it above. I will propose for the next release.

Hi @kegi
Apologies for the confusion, this feature is available in wrld.js version 0.1.1982 which was published earlier today. You can find documentation here:
https://docs.wrld3d.com/wrld.js/latest/docs/api/L.Wrld.map/
You can pass the "trafficEnabled" option when calling the L.Wrld.map constructor, e.g:
var map = L.Wrld.map("map", "your_api_key_here", {
       center: [37.7858, -122.401],
       zoom: 15,
       indoorsEnabled: true,
       trafficEnabled: false
     });

Hopefully this will do what you need. Please let us know if you need any more help.

this is GREAT, you guys rocks !


Code quality fix - Null should not be returned from a "Boolean" method.

This pull request is focused on resolving occurrences of Sonar rule
squid:S2447 - Null should not be returned from a "Boolean" method.
You can find more information about the issue here:
https://dev.eclipse.org/sonar/rules/show/squid:S2447
Please let me know if you have any questions.
Soso Tughushi

Hi Soso,
Thanks for your contribution. In this opportunity I personally don't agree with the "Null should not be returned from a "Boolean" method." statement. I think that one of the advantages of non primitive types is the ability to support null values. For example in cases where no value is one possibility to return.
Thanks


[YAML] test_get_traction_info_empty - Exception: Query failed

Background / motivation
Both tests in test_get_traction_info.py fail. It seems to be a sporadic failure. We should get to the bottom of the failures, and stabilize this test to be more reliable.
=========================== short test summary info ============================
FAILED pdr_backend/analytics/test/test_get_traction_info.py::test_get_traction_info_main_mainnet - Exception: Query failed. Url: https://v4.subgraph.sapphire-mainnet.oceanprotocol.com/subgraphs/name/oceanprotocol/ocean-subgraph. Return code is 503

            {
                predictSubscriptions(skip: 0, first: 1000 , where: {predictContract_: {id_in: ["0x123"]}, timestamp_gt:<PHONE_NUMBER>, timestamp_lt:<PHONE_NUMBER>}) {
                    id
                    txId
                    timestamp
                    user {
                        id
                    }
                    predictContract {
                        id
                        token {
                            id
                            name
                            lastPriceValue
                            nft{
                                nftData {
                                key
                                value
                                }
                            }
                        }
                    }
                }
            }
FAILED pdr_backend/analytics/test/test_get_traction_info.py::test_get_traction_info_empty - Exception: Query failed. Url: https://v4.subgraph.sapphire-mainnet.oceanprotocol.com/subgraphs/name/oceanprotocol/ocean-subgraph. Return code is 503

        {
            tokens(where: {
                nft_: {
                    owner: "0x4ac2e51f9b1b0ca9e000dfe6032b24639b172703"
                }
            }) {
                id
            }
        }
======= 2 failed, 330 passed, 3 skipped, 9 warnings in 108.16s (0:01:48) =======

See this log for full traceback.
Note: this failure is sporadic. So far, I've (Trent) only seen it once, in the log above (Jan 10, 2024).

Q: Was this issue was likely introduced in the tweaks for network override as part of PR https://github.com/oceanprotocol/pdr-backend/pull/510 ?
A: No, because both tests that fail have the network override off. (I double-checked this with more testing)

Closed by #534.


Query with ids hash not working

Version: 1.15.0
I have two model: User and Role
In ability I can manage all User and I want manage Role
Not work if I write:
can :manage, User
can :manage, Role, user: { id: User.ids } or { id: User.pluck(:id)  }
Working only if I write:
can :manage, User
users = User.all
users.each do |user|
can :manage, Role, user_id: user.id
end
This is a simple example. For more nested Models it's very difficult with many cicles inside.
Please verify and tell me the solution

Please refer to Stackoverflow for questions. Thanks.


enhancement: need config parameter min-rating

As of now, even with a stepping of 1, it is possible to give a 0-stars rating. Most existing implementations require that the user can vote only between 1 and 5 stars.
It should be possible to configure a minimum rating value. Of course this can be done using the rating-selected event handler (like not applying the vote if the value is less than 1 or whatever the user wants as a minimum), but since this will be a standard requirement this should probably be implemented as a config option min-rating.

Thanks for the feedback. I've given this a little thought and I'm not sure there is much of a use case for this because it can already be done with v-model:
new Vue({
  el: '#app',
  data: {
    rating: 1
  }
});

Here's the JSFiddle: https://jsfiddle.net/k0x9ayws/
Once set to 1 there isn't any way to set it to 0 without writing that implementation yourself and I can't see anybody needing to set a min-rating other than 1. I'm going to close this issue because such an implementation could cause conflicts with other props with little benefit to the majority of users.

I just set your example to 0 by clicking to the very leftmost part of the stars.

Ah, OK. That shouldn't happen, it makes no sense to have to click a 1 pixel column to reset the value, I'll get that fixed.

Fixed in version 1.5.0


[Bug] On graph series when use emphasis focus: 'adjacency' highlighting by category works wrong

Version
5.3.3
Link to Minimal Reproduction
https://echarts.apache.org/examples/en/editor.html?c=graph-label-overlap
Steps to Reproduce

set emphasis options to use focus: 'adjacency'
point mouse over different categories

Current Behavior
some nodes that does not belong to category are highlighted
Expected Behavior
only nodes that belong to category are highlighted
Environment
- OS:Windows
- Browser:any

Any additional comments?
No response

Cannot reproduce from my side. Can you make a screenshot?

Sure,
as you can see, my mouse is hovering category "C", but it is nodes that belongs to "A" and "B" are highlighted.

OK. This is a bug. But it's hard to say what's the expected result when hovering a legend item with emphasis.focus: 'adjacency'. Because when 'adjacency' is relative to a single node rather than a group of data.
But for sure, the legend has some bugs with hovering in this situation.

I suggest to use 'adjucency' for nodes as usual, but for legend just ignore that and highlight only related to category nodes

Yes, I think this makes sense.


Disable enable-virtualservice-status on istio-head test

Istio head test keeps failing as https://testgrid.k8s.io/r/knative-own-testgrid/serving#istio-head-no-mesh
This is most probably due to enable-virtualservice-status: true and nobody takes care of the result.
This patch changes:

to disables enable-virtualservice-status until https://github.com/knative-sandbox/net-istio/issues/585 was fixed.
to update Istio version as Stable=1.11.4 and Latest=1.12.0.

/cc @dprotaso @ZhiminXiang

/lgtm
/approve
FYI -  if you want to keep serving e2e pinned to istio 1.11 you'll want to update
https://github.com/knative/serving/blob/abf4d6933cd03187e02b41bb20e2ae5533de8ee2/test/e2e-common.sh#L25 to be stable

Thank you! I think 1.12 should be fine but will pin to 1.11 if it fails.


Constraint on the effects that are out of the monadic flow.

I would like to model a sample app here, one of the functions of it is to be able handle the request and return the response. In this model, it uses the effectful method onRequest to which we pass the handler (response returned will be converted to IO by interpreter and run on each request).
The problem I see here is that the app function in this case doesn't require LogEff effect constraint, which is used in the handler but is not used in the application monadic flow directly, it is only passed to handler here.
In my view, the app's signature doesn't reflect what the app is doing as a whole in this case. It reflects what the monadic flow is doing, not the app. What would you say about such an issue? Maybe it is possible somehow to achieve what I would like to see in this case?
module EffectfulApp where

import Effectful (Eff, Effect, type (:>))
import Effectful.TH (makeEffect)

data LogEff :: Effect where
  LogLine :: String -> LogEff m ()
makeEffect ''LogEff

data Request = Request {reqUrl :: String}
data Response = Response {resText :: String}

type RequestHandler es =
  ( (LogEff :> es) => Request -> Eff es Response
  )

data ReqEff :: Effect where
  OnRequest :: (forall es. RequestHandler es) -> ReqEff m ()
makeEffect ''ReqEff

app ::
  ( ReqEff :> es
  -- LogEff : es -- is not required, and gives the waning
  ) =>
  Eff es ()
app = do
  onRequest \(Request {reqUrl}) -> do
    logLine $ "Got request from " <> reqUrl
    pure $ Response {resText = "Hello!"}

Well, I thought about it, maybe I'm not correct her, LogEff is present inside the ReqEff, so probably it is quite ok then.

Then I will ask here another question, related at least to this sample app.
Here is the interpretation and run module"
import EffectfulLies (LogEff (..), ReqEff (..), Request (..), app)

--
import Data.Function ((&))
import Effectful (
  Eff,
  IOE,
  MonadIO (..),
  runEff,
  type (:>),
 )
import Effectful.Dispatch.Dynamic (interpret)

logEff ::
  (IOE :> es) =>
  Eff (LogEff : es) a ->
  Eff es a
logEff = interpret \_ -> \case
  LogLine msg -> liftIO $ putStrLn msg

reqEff ::
  (IOE :> es) =>
  Eff (ReqEff : es) a ->
  Eff es a
reqEff = interpret $ const \case
  OnRequest toResponse ->
    liftIO $ do
      _ <-
        runEff
          ( toResponse Request {reqUrl = "/some"}
              & logEff
          )
      pure ()

main :: IO ()
main = do
  runEff $
    app
      & reqEff
      -- we actually don't need logEff here but is is still can be applied
      & logEff

Why is it still possible to apply logEff interpretator to the program even if doesn't need it, and it can be just removed?

The es in Eff es a is polymorphic and so the runXs determine what the concrete effect list is. If you have:
app :: (Req :> es) => Eff es a
app = reqItUp

blah =
  app
    & runReq
    & runLogger

then the type of blah is something like Eff [Logger, Req] a and [Logger, Req] satisfies the constraint Logger :> es.
Doing the extra logEff shouldn't do anything because there are no log operations to interpret.
The interpreters determining the concrete stack is very similar to how mtl-style works.

I understand that it does nothing, but it seems to be misleading that such thing is allowed. In mtl, as you mentioned it, we can not hae yet another runSmthT on stack if it is not appropriate/needed, right?

If you want your application to have a closed set of effects, then you need to specify that. In
app :: (Req :> es) => Eff es a

You are saying app works for any es, provided Req is somewhere in es.
You could alternatively write
app :: Eff '[Req] a

And now app can only be used with runReq.
That said, this isn't idiomatic. runReq $ runLogger app isn't really a problem to worry about, it's just a bit wasteful

Ok, I see it for the app, b I have a currenlty reqEff signature as (IOE :> es) => Eff (ReqEff : es) a -> Eff es a and it doesn't work with closed app,
I tried to replace it with    Eff '[ReqEff] a -> Eff '[IOE] a but get the error:
Couldn't match type: '[]
                 with: '[IOE]
  Expected: Eff '[ReqEff] a -> Eff '[IOE] a
    Actual: Eff '[ReqEff] a -> Eff '[] a

And can not get how to put the interperter correctly.
For my case dummy interperter looks like the
runReq = interpret $ const \case
  OnRequest toResponse ->
    liftIO $ do
      _ <-
        runEff
          ( toResponse Request {reqUrl = "/some"}
              & runLog
          )
      pure ()

I think we'd need to see full code that we can compile to help here, but I don't think you're going down a very productive path. This is not how effectful is designed to be used - keeping es polymorphic and adding constraints is the idiomatic approach and I think it would be best to try and help building understanding there.

Indeed, what @ocharles said is accurate.
Using monomorphic effect stacks isn't even supported with higher order effects (see here, specifically the last example), so you shouldn't really do things this way.
Btw, I'll convert this thread to a discussion, since it's not an issue.


Coordinate systems for ‹game world› and ‹game boards›

As a developer, I'd like to know how to name and locate «the things» of the game, so that we can talk to each other 😸 about things, that would not be just things anymore.
More precisely: choose terms to designate the parts of our ‹world space›, ‹screen space›, ‹game world› and ‹game boards› (we have coined four terms!); describe the topologies of the ‹world space› (spherical/‹lat,long,alt›), ‹screen space› (2D/pixels), ‹game world› (flat or spherical? circular? surface or volume?) and the ‹game boards› (hexgrids, but why?); and choose coordinate systems, matching each topology. Explain how the ‹World Space› is partitioned in a ‹Game World›; and how the later is partitioned in ‹Game Boards›. Choose tuples of letters, to designate components of coordinates.
Actions

[ ] Topology & coordinate system for the ‹World Space› TODO 2D & 3D / physical world (lat/long/alt)
[ ] Topology & coordinate system for the ‹Screen Space› TODO ultimately, 2D / pixels
[ ] Topology & coordinate system for ‹Game World› TODO geodesic H3 / spherical world (flat? or with altitude?)
[ ] Topology & coordinate system for ‹Game Boards› TODO Hexgrid (honeycomb) and … coordinate system; what do we need to locate: faces, edges and/or vertices? do we have altitude?
[ ] Tuples of letters for every coordinate system TODO
[ ] Explainer document: which problems do we need to solve? TODO
[ ] Explainer document: why such topologies for the ‹Game World› and ‹Game Boards› TODO
[ ] Explainer document: characteristics of each coordinate system TODO
[ ] Explainer document: coordinate transformations TODO pipeline of the coordinate transformations
[ ] Describe the terms used to designate parts of the ‹Game World› and ‹Game Boards› TODO
[ ] Describe the topology of the ‹Game World› TODO
[ ] Describe the topology of a ‹Game Board› TODO

Documents

Wiki › Geometry of the game – Inspiration
Wiki › Geometry of the game – Explainer
Wiki › Geometry of the game – Coordinate systems

Reference articles

Amit’s Thoughts on Grids  Red Blob Games, Amit Patel, 09.01.2006

Location of origin game board
Location of origin game board in the game world:
$ brew install h3
$ geoToH3 --resolution 15 --latitude 46.1856616 --longitude 6.1579908
8f1f91ad1b84456

Reference articles:

H3geo › Docs › Table of Cell Areas for H3 Resolutions
H3geo › Docs › Unix-style Filters for H3
Google Maps › Help › Obtenir ou indiquer la latitude et la longitude


ui: Make source details do http requests from the top, too

We always try to resolve HTTP requests at the page, so that we
can wrap them in the Page component, and that will handle displaying
loading state and errors so we don't have to.
We do this for automation details, and then we pass in the info prop
as a map of label and value.
However, sources was different - instead of an object and a map of
info, we passed down information about the object we wanted, and a
bunch of callbacks.
This makes source pages behave more like automation
pages, and like the table views.
While I'm at it, set an empty object of the right type as initial
data, and that way we don't need question marks.

Great, the code looks cleaner and more consistent! 🎉
Two issues found during testing:

I ran into an error at a GitRepository details page:

Other source details pages I tested (HelmChart and HelmRepository) work fine, because the convertGitURLToGitProvider fucntion (which tries to convert an empty string and it causes the error) is used only on the  GetRepository detail page.
It looks like, now isLoading from the useGetObject hook is false initially, unlike the main  branch, where it is true at first. So, the details page probably "thinks" that the data was loaded already and tried to parse the URL. And because of the error the actual data is never loaded.

Besides, the AutomationsTable on the source details pages is empty for some reason, unlike the one in the main branch.

It looks like, now isLoading from the useGetObject hook is false initially, unlike the main branch, where it is true at first.

Aaaaah, that explains it! Thank you - I'd actually spotted the problem on error pages (where there's also no object), but I figured it was irrelevant to this change and was going to submit that separately. But no, of course. Yeah.

The AutomationsTable on the source details pages is empty for some reason, unlike the one in the main branch.

Ugh, missing source. prefix to the comparison.


Update http://localhost:8080/actuator/quickfixjclient port to 8081

Start client: java -jar simple-client/target/simple-client.jar
curl http://localhost:8080/actuator/quickfixjclient => Connection Refused ❌
curl http://localhost:8081/actuator/quickfixjclient => Ok ✅

Thanks @jknight


Can't install ESMValTool using instructions from anaconda.org

Hi there
Currently the instructions for installing the ESMValTool on the Anaconda website result in the following errors...
> conda install -c esmvalgroup esmvaltool
Fetching package metadata ...............
Solving package specifications:

PackageNotFoundError: Packages missing in current channels:

  - esmvaltool -> yamale

We have searched for the packages in the following channels:

  - https://conda.anaconda.org/esmvalgroup/linux-64
  - https://conda.anaconda.org/esmvalgroup/noarch
  - https://conda.anaconda.org/conda-forge/linux-64
  - https://conda.anaconda.org/conda-forge/noarch
  - https://repo.continuum.io/pkgs/main/linux-64
  - https://repo.continuum.io/pkgs/main/noarch
  - https://repo.continuum.io/pkgs/free/linux-64
  - https://repo.continuum.io/pkgs/free/noarch
  - https://repo.continuum.io/pkgs/r/linux-64
  - https://repo.continuum.io/pkgs/r/noarch
  - https://repo.continuum.io/pkgs/pro/linux-64
  - https://repo.continuum.io/pkgs/pro/noarch

After some consultation with the developers, the following code does work however...
conda install -c esmvalgroup -c conda-forge -c birdhouse esmvaltool

Presumably the documentation needs to be changed or the relevant packages moved or copied to conda-forge?
Thanks!
Jonny

Thanks for reporting! I can confirm the problem

The install command shown on anaconda.org is indeed incorrect, but unfortunately it looks like it cannot be edited. Of course we can add some information to our README.md here on github.
Note that we are in the process of getting esmvaltool version 2 on conda-forge. However, we are still at alpha release stage, so we felt that right now was a bit early, that's why we opted for our own conda channel for now, see issue https://github.com/ESMValGroup/ESMValTool/issues/6.

Thanks a lot for that 😄
Jonny

The latest release, v2.0a1 is now available on anaconda.org. I've added a note with the correct installation instructions in the description.


[bug] Fix support for exporting designs

Notes for Reviewers
Currently, Meshery Designs cannot be exported into original form (like K8s Manifests, or Helm Charts).
Reason is that while migrating from Apps -> Designs, the download handler was not completely migrated and that internally it was calling old application API of remote provider which was leading to unexpected behaviors.
https://github.com/meshery/meshery/assets/73700530/85657e61-9ca1-495d-ac63-41e7f506c0b3
This PR fixes #
Signed commits

[ ] Yes, I signed my commits.

🚀 Preview for commit 94738b4aecb1d49f5d7ef07f1ce5947cb10a8f51 at: https://6583760b3098fa7285d5c447--meshery-docs-preview.netlify.app


xptracker summary removes hidden skills

when hiding maxed skills from xp tracker, the total xp and xp/hr for the session still reflects all skills. this change resolves #12109 and means the infoboxes xp numbers now tally correctly with the total.

Not sure what the build error was, but Experience.MAX_SKILL_XP is 200M xp and hideMaxed config filters xp for skills at 99.


Fixes #835 Bad default for g:neomake_highlight_lines

Fixes #835
The docs say that g:neomake_higlight_lines is 0 by default. It wasn't. Now it is.
This also fixes g:neomake_highlight_columns not being respected.

Thanks.


Delegate kwargs when defining a method with chain

Without this, it will raise:
 ArgumentError:
   wrong number of arguments (given 2, expected 1)

if you try to pass a keyword arg to a chain method on Ruby 3.
~In Ruby, you must explicitly delegate keyword arguments. (See https://www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0/#delegation-ruby-3)~

if you try to pass a keyword arg to a chain method on Ruby 3.

As you may see, **opts delegation isn't really the best option. See https://eregon.me/blog/2021/02/13/correct-delegation-in-ruby-2-27-3.html for more details.
A correct way to fix this is:

May I kindly ask you to separate the fix for this case from
- @divisor % to_match == 0
+ to_match % @divisor == 0

fixes? And potentially add an example that would indicate that the previous implementation was incorrect.

As you may see, **opts delegation isn't really the best option. See https://eregon.me/blog/2021/02/13/correct-delegation-in-ruby-2-27-3.html for more details.
A correct way to fix this is:

Good catch — thanks for the link! Pushed up a fixed commit.
Minor clarification: **opts delegation is the best option if/when you only needs to support Ruby 3+ (i.e., as soon as we drop support for Ruby 2 someday :smile:), like I can do when developing apps. But in a library like this, yeah, you are right.

May I kindly ask you to separate the fix for this case from
- @divisor % to_match == 0
+ to_match % @divisor == 0

fixes? And potentially add an example that would indicate that the previous implementation was incorrect.

I would be happy to, except that breaks my test.
The example I added here actually does indicate that the previous implementation was incorrect. Without the fix, it fails with:
     Failure/Error: expect(10).to match
       expected 10 to be bigger than 5 and smaller than 10 and {:inclusive=>true} and divisible by 1

As you can see, 10 is divisible by 1.
I would rather just leave off the and_divisible_by(1) part of this line altogether:
  match = matcher.and_smaller_than(10, inclusive: true).and_divisible_by(1)

since it's the test would be simpler without it, but when I tried that, it raised:
     TypeError:
       nil can't be coerced into Integer
     # ./spec/rspec/matchers/dsl_spec.rb:381:in `%'

I considered doing further refactoring to make the and_divisible_by chain optional (as it should be), but figured that would cause a maintainer to complain about out-of-scope changes and that the bug-fix option I opted for instead would be just as trivial, and more appreciated.
Rather than wasting more time strategizing how best to incorporate this trivial test bug fix, may we please just include it here?
Or, if you'd prefer, would you mind just fixing the tests to however you'd like them? (I enabled the "Allow edits" option.)

just fix it now

Let's go for it :+1:

 SyntaxError:
  /__w/rspec-expectations/rspec-expectations/spec/rspec/matchers/dsl_spec.rb:357: syntax error, unexpected tLABEL
            chain :and_smaller_than do |ceiling, inclusive: false|

I suggest extracting those specs with the matcher involving block kwargs into a separate one, as we still support Ruby < 2.
You can put it inside binding.eval(<<-CODE, __FILE__, __LINE__) as some other examples do.

Migrated to the monorepo as rspec/rspec#130


Add unittests and simplify deltaDebug.py

To run unittests:
cd etc
python -m unittest

@oharboe
Should we add these tests to the CI? What is the expected runtime seconds/minutes/hours?

@vvbandeira I have no comments - feel free to approve and merge once the CI is resolved.

@vvbandeira Can you merge this first, then add CI integration later as time permits?


Engine v2 linux unopt not running Android lints

https://flutter.googlesource.com/recipes/+/refs/heads/main/recipes/engine/engine_unopt.py#100
They are now failing in prod https://ci.chromium.org/ui/p/flutter/builders/staging/Linux Unopt/407/overview
after https://github.com/flutter/engine/commit/9fd0082de8a9de77814493e3a8d25fe9b5384ab2
cc @godofredoc @gspencergoog

Reverting the change here https://github.com/flutter/engine/pull/42384


Infinite exp(?)

Is there an existing issue for this?

[X] I have searched the existing issues

Mod version
1.19.4+build.1
Is this a bug caused by this mod alone?
The bug was reproduced with this mod alone
List of mods to reproduce bug
No response
What happened?

Set to level 18. Check and Screenshot xp Bottler

Add 1 exp point through command . Check and screenshot xp Bottler

Steps to reproduce the bug
Gonna check if it's reproducible in vanilla tomorrow
Logs and screenshots
No response

Hey. Follow up.
https://youtu.be/BZ1hB2G9e6Q
mods used at the test:

PuzzlesLib-v6.0.11-1.19.4-Fabric.jar
cloth-config-10.0.96-fabric.jar
EasyAnvils-v6.0.0-1.19.4-Fabric.jar
experiencebottler-1.19.4+build.1.jar
fabric-api-0.83.0+1.19.4.jar
fabric-language-kotlin-1.9.5+kotlin.1.8.22.jar
ForgeConfigAPIPort-v6.0.2-1.19.4-Fabric.jar
health-levels-1.0.5.jar

It seems to be a bug that occurred from commit ed54a30eaf6cd94a5260969d3308b11acf01c31c. It has been fixed in v1.20.1+build.1. Please note that there is no release for v1.19.4+build.2 due to the older Minecraft version.

From now on, please try to describe the issue as much as possible in text rather than relying solely on screenshots or videos. While screenshots and videos are valuable sources of information, they should primarily complement the written description.

well. In this case it was hard for me because to properly give a description, I would've to be able to properly understand what was happening. I wasn't expecting a bug from a improved calculation logic.
So the 201a91774d132a2d0873d715f4ef6d1d78cb9aca commit should be safe to use? how would I go about to compile it as a jar for my server?

nvm. I'll just cope with it until I can upgrade to 1.20

To build the latest patched version 1.19.4, follow these steps (git needs to be installed):

Open the terminal in any directory.
Execute the command git clone https://github.com/eideehi/mc-experiencebottler.git
Execute the command cd mc-experiencebottler
Execute the command git checkout 1.19.4+build.1
Edit the file mc-experiencebottler/src/main/java/net/eidee/minecraft/experiencebottler/util/ExperienceUtil.java with any text editor.

Change line 71 to int level = 512;
Change line 110 to return TOTAL_EXP_CACHE[index] + Math.round(getNextLevelExperience(index) * progress);

Execute the command gradlew build

Once the build is complete, the modified experiencebottler-1.19.4+build.1.jar will be generated in the mc-experiencebottler/build/libs directory.

working *thumbs-up


Update revoke-ome-encrypted-mail.md

Updated AAD roles that can access reovoke mail function. @KCCross to review

@KCCross Please merge this PR. Thanks

After discussion, will merge.


Allow for debug logging in the Bolt driver when wrapped in neo4j-ogm

Current Behavior
As of today neo4j-ogm has its own DriverConfiguration class to configure the internal Bolt driver such class does not expose a way to inject a logging framework into the driver (see https://github.com/neo4j/neo4j-java-driver/blob/1.4/driver/src/main/java/org/neo4j/driver/v1/Config.java#L226).
Context
This is problematic for driver debugging purposes when the driver is used inside neo4j-ogm.
I would be nice if we could improve the current behaviour and simply debugging.
Possible Solution
I can suggest two ways forward on this:

expose a way to inject some kind of logging (by implementing the Logging in neo4j-jave-driver) into the driver or
have a configuration option that enables debug logging in the driver and logs through the neo4j-ogm logging system.

Thanks in advance for your help.

This has already been fixed in master by providing a way to pass in custom java driver instance.
Backported to 2.1.x - please try 2.1.4-SNAPSHOT.

Config config = Config.build()
    .withLogging(new ConsoleLogging(Level.FINE))
    .toConfig();

Driver driver = GraphDatabase.driver("...", config);
Components.setDriver(new BoltDriver(driver)); // set the driver with whatever you need```


Error: The requested platform 'globalcache-gc100' was not registered by any plugin.

Hi,
I am trying to enable the home bridge with the globalcache-gc100 plugin.
I installed it this way:
sudo npm install -g homebridge-globalcache-gc100
and modified ~/.homebridge/config.json this way
{
"bridge": {
"name": "Homebridge",
"username": "CC:22:3D:E3:CE:30",
"port": 51826,
"pin": "031-45-154"
},
"description": "This is Jacques's beautiful config.json file",

"platforms": [
{
        "platform": "globalcache-gc100",
        "name": "homebridge-globalcache-gc100",
        "host": "<IP_ADDRESS>",
        "ir_port": "4999",

        "rs232_devices": [
	{"name": "Xantech",
	 "port": "4999",
	 "base64_encoded": true,
             "commands": {
                 "on" : "AlBPTgM=",
                 "off" : "AlBPRgM="
             },
             "success_messages" : {
                 "on" : "AlBPTgM=",
                 "off" : "AlBPRgM="
             }
	}
        ]
}
]

}
Launching homebridge outputs:
[Wed Aug 17 2016 19:49:23 GMT-0700 (PDT)] Loaded plugin: homebridge-globalcache-gc100
[Wed Aug 17 2016 19:49:23 GMT-0700 (PDT)] Registering platform 'homebridge-globalcache-gc100.GC100Platform'
[Wed Aug 17 2016 19:49:23 GMT-0700 (PDT)] ---
[Wed Aug 17 2016 19:49:23 GMT-0700 (PDT)] Loaded config.json with 0 accessories and 1 platforms.
[Wed Aug 17 2016 19:49:23 GMT-0700 (PDT)] ---
[Wed Aug 17 2016 19:49:23 GMT-0700 (PDT)] Loading 1 platforms...
/usr/local/lib/node_modules/homebridge/lib/api.js:106
throw new Error("The requested platform '" + name + "' was not registere
^
Error: The requested platform 'globalcache-gc100' was not registered by any plugin.
at API.platform (/usr/local/lib/node_modules/homebridge/lib/api.js:106:13)
at Server._loadPlatforms (/usr/local/lib/node_modules/homebridge/lib/server.js:263:45)
at Server.run (/usr/local/lib/node_modules/homebridge/lib/server.js:71:36)
at module.exports (/usr/local/lib/node_modules/homebridge/lib/cli.js:40:10)
at Object. (/usr/local/lib/node_modules/homebridge/bin/homebridge:17:22)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
I searched online and cannot find why the requested platform 'globalcache-gc100' was not registered. Any help?

I did not change anything and today seems OK on that issue:
[Thu Aug 18 2016 10:05:36 GMT-0700 (PDT)] Loaded plugin: homebridge-globalcache-gc100
[Thu Aug 18 2016 10:05:36 GMT-0700 (PDT)] Registering platform 'homebridge-globalcache-gc100.GC100Platform'
[Thu Aug 18 2016 10:05:36 GMT-0700 (PDT)] ---
[Thu Aug 18 2016 10:05:36 GMT-0700 (PDT)] Loaded config.json with 0 accessories and 1 platforms.
[Thu Aug 18 2016 10:05:36 GMT-0700 (PDT)] ---
[Thu Aug 18 2016 10:05:36 GMT-0700 (PDT)] Loading 1 platforms...
[Thu Aug 18 2016 10:05:36 GMT-0700 (PDT)] [homebridge-globalcache-gc100] Initializing globalcache-gc100 platform...
[Thu Aug 18 2016 10:05:36 GMT-0700 (PDT)] [homebridge-globalcache-gc100] Initializing platform accessory 'Xantech'...
Scan this code with your HomeKit App on your iOS device to pair with Homebridge:
Not sure why... Could be a cache issue?


Can we add copyright section in footer section of website.

I am a member of LGM SOC
I would like to contribute, please allow me

Hi @smaranjitghose  I am LGM SOC-21 participant. I can make this changes please assign me

Check #680


py.typed no longer present

Hi!
Going from 0.3.0 to 0.5.0, I'm now getting errors with mypy. I think this is because the package is no longer including py.typed.
This might be because of this commit, changing include_package_data, but I may be mistaken.
https://github.com/lirsacc/statsd_client_python/commit/e41340b38b16328de340bab5c227327f7ddf3ffe
Thanks!

This should be fixed in 0.6.1 (got a bit mixed into updating packaging and wrongly thought I'd fixed it in 0.6.0)

That works great! Thank you so much!


Rebuild DMstack installation on Cori

From today's NERSC newsletter:

** Cori New Software Defaults **
Due to the upgrade of the operating system, we must also change the defaults for the Cray-provided software libraries. This includes new versions for the MPT, perftools, scientific and math libraries, compilers, and more. For more information on specific release numbers, please see http://docs.cray.com/books/S-9408-1606/ .

Once Cori is back online (~Jun 30th), I should probably reinstall w.2016.20.  It'll also be time to install v12.0

Hi Heather, according to the outage calendar cori is supposed to be back tomorrow. Getting the rebuilt w2016.20 release would be great so we can restart testing, ideally also on the new higher performance disk area (is that setup now?)

@tony-johnson unfortunately the higher performance area is not set up yet - I was told on Friday that the person who could help us was out on vacation last week.  I'm hoping this will be set up early this week.
The NERSC newsletter today indicated they wouldn't be back up until June 30th - it seems to be a revised schedule.  Let me pull up the quote..

Just an update..I've sent a fresh poke about getting the new directory space set up this week.. I remain hopeful!

Another update... Cori should be available, however I still cannot log in, either via the command line or through NX. Supposedly Cori is "Up": http://www.nersc.gov/users/live-status/ but I see no evidence of activity.  I've opened an incident (INC0086770) at NERSC to see if they can clarify the situation.

Cori is indeed back.. Apparently my failed attempt to log in yesterday while it was still down counted against me.  I have 5 failures and my account was locked :)  That's been fixed and now I'm in.  If anyone else continues to have trouble, a locked account may be the culprit.

@tony-johnson I think I have w.2016.20 now available in the high performance area for Cori:
/global/common/cori/contrib/lsst/lsstDM/w.2016.20
cd into that directory and "source setupDM-w.2016.20.sh" which should set up your environment correctly.  I ran the demo, and that succeeded the comparison of detected_sources reported that all was OK.
Just let me know if you run into any problems.

Hi @heather999 , your setupDM-w.2016.20.sh seems to have a bizarre bug that it works when invoked from the command line, but not when invoked from another bash script. It has to do with your use of BASH_SOURCE, but I do not exactly understand why.
export DM_DIR=/global/common/cori/contrib/lsst/lsstDM/w.2016.20
export DM_SETUP=setupDM-w.2016.20.sh
tony_j@cori06:~/scratch/Twinkles/trial> source ${DM_DIR}/${DM_SETUP}
notice: lsstsw tools have been set up.
This environment includes builds: lsst_apps b2120 and lsst_sims b2121
tony_j@cori06:~/scratch/Twinkles/trial> cat TwinklesTest.sh
#!/bin/bash
source ${DM_DIR}/${DM_SETUP}
tony_j@cori06:~/scratch/Twinkles/trial> ./TwinklesTest.sh
ModuleCmd_Switch.c(172):ERROR:152: Module 'PrgEnv-intel' is currently not loaded
dirname: missing operand
Try 'dirname --help' for more information.
./TwinklesTest.sh: line 7: cd: /lsstsw: No such file or directory
./TwinklesTest.sh: line 8: /global/cscratch1/sd/tony_j/Twinkles/trial/bin/setup.sh: No such file or directory
This environment includes builds: lsst_apps b2120 and lsst_sims b2121

Experimenting more, it appears that some of the module commands overwrite BASH_SOURCE (when it is invoked from another script as above). I don't know how that is even possible, but moving the line which uses BASH_SOURCE above the module commands seems to fix the problem.

@tony-johnson Thanks for figuring that out.. I will have to do some investigation and likely will end up sending a note to NERSC help.  Maybe that is some known consequence of dealing with these modules, but that's a surprise to me too!

For the record, running with the code installed on /global/common/cori/contrib/lsst appeared to make a dramatic difference to the batch jobs throughput. Thanks to Rollin for suggesting this (and to Heather for re-installing the stack).

Roughly speaking, how did it compare to running at SLAC?
On Thu, Jul 7, 2016 at 9:26 AM, Tony Johnson<EMAIL_ADDRESS>wrote:

For the record, running with the code installed on
/global/common/cori/contrib/lsst appeared to make a dramatic difference to
the batch jobs throughput. Thanks to Rollin for suggesting this (and to
Heather for re-installing the stack).
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/DarkEnergyScienceCollaboration/Twinkles/issues/268#issuecomment-231132223,
or mute the thread
https://github.com/notifications/unsubscribe/AArY9wa6vforwvNZKumpUBFyhVpTq69Nks5qTSicgaJpZM4I_NO9
.

@tony-johnson Just for the record.. while doing my first PhoSim install, I played a bit more with the modules loaded.  I found leaving "craype" loaded (as it is be default), seemed to play a little more nicely.  Before the Cori upgrade, it seemed necessary to remove it, but now it seems to cause complaints.
I create a modified setup script for w.2016.20, and left the original just as it was:
/global/common/cori/contrib/lsst/lsstDM/w.2016.20/setupDM-w.2016.20-New.sh
It might be interesting to give it a try sometime to see if that eliminates the bash oddness you saw previously.

@heather999 Yes your changes appear to have solved the problem I reported earlier.
@drphilmarshall Comparison of CPU/wallclock time between SLAC and NERSC can be found in the workflow section of slides at:
https://docs.google.com/presentation/d/1V3uQWBDu1ZXxkb2pwMFmNF8nUckYGUeZWb4XufzQSEc
Closing issue.


Refactor controller unit tests

Refactor the controller unit tests to be easier to read and have more thorough assertions (example, we do not currently verify fake client calls are to the right resources...).

I want to hold this until after #648 is in.

Adding this to 0.0.4, as it provides important updates to our controller test code that others need.
cc/ @vaikas-google


Improve documentation

Documentation from the VAA project needs to be merged with this.

To build VAA docs
git clone https://bitbucket.org/mbari/vaa-docs.git
cd vaa-docs
conda env create
conda activate vaa-docs
mkdocs serve

related issue: https://github.com/mbari-org/deepsea-ai-backend/issues/17


update jdk to 21

https://www.oracle.com/ca-en/java/technologies/java-se-support-roadmap.html
https://github.com/actions/setup-java
issue with jacoco? https://youtrack.jetbrains.com/issue/IDEA-336978/Update-bundled-JaCoCo-to-latest-version-0.8.11-to-support-Java-21

I was able to update to jdk 19 by just changing out JavaVersion.VERSION_17 for JavaVersion.VERSION_19 and updating the java toolchain


Is Android support ready to use?

I see that commit #29ebeb5 aims to have added Android support.
However on my tests, it only works on iOS. Under Android, the plugin is not available under @capacitor/core/Plugins namespace.
import { Plugins } from "@capacitor/core"
const { CameraPreview } = Plugins

console.log(CameraPreview, Plugins)
CameraPreview.start()

Am I missing something? Or Android support is still under development?
Thank you!

Did you add the plugin to MainActivity?

Thank you for your response!
What should be added to MainActivity?

You need to add
add(CameraPreview.class);
To the init method

Thank you!
Is this disclosed on the README or some plugin-specified docs? If not, may I send a PR?
Going a little out of the issue subject, is there support for switching the front/rear camera?

In the capacitor’s documentation is explained how to used the plugins, but I believe that I have to include it on documentation.
Switching camera is not supported right now, a PR is welcome ;-)


After the EQUAL operation is overwritten, Slice and long are used, and the latter bit is EQUAL to 8 bits to report an error #14519

Version: 0.221
After the EQUAL operation is overwritten, Slice and long are used, and the latter bit is EQUAL to 8 bits to report an error!
source code
@ScalarOperator(value = EQUAL)
    @SqlType(StandardTypes.BOOLEAN)
    public static boolean equal_string(@SqlType(StandardTypes.VARCHAR) Slice left, @SqlType(StandardTypes.BIGINT) long right) {
        return left.toStringUtf8().equals(String.valueOf(right));
    }

query sql:
select * from push_user_list_sms where ymd=20200511 limit 1

table desc:

Column
Type

uid
bigint

ymd
varchar

ymd is hive Partition the primary key
get errors:
Query failed (#20200513_023554_00007_e7mu7): Object 'Slice{base=[B@d146d99, address=16, length=8}' does not match type long

right length > 8  and right < 8 no problem

@qianmoQ an operator like equality (=, OperatorType.EQUAL), needs to operate on values of the same type (https://github.com/prestosql/presto/issues/3728)
If you want to compare varchar and numerical values, in SQL this would correspond to a "coercion".
Instead of defining a varchar / bigint EQUAL operator, you would modify coercion rules.
(In the code, this corresponds to io.prestosql.type.TypeCoercion#coerceTypeBase).
Having said that, please be aware that lack of coercion from integer/bigint to varchar is not an omission, but a deliberate choice.
Having such a coercion may look like usability improvement for users, and some database systems allow that,
but it may also lead to hard-to-understand behaviors. Let me know if you would like to learn more about this design choice.
Let me close this as answered. We can continue discussion here, but i encourage you to join our slack.
See you there!


Propose an API that enables extensions to drive multi document highlights

Testing #196342
We have an internal API to support X-document highlights. Our current implementation is very clever but we should propose an API/LSP spec so that extensions can drive this feature all the way

This is being worked on in conjunction with #196240. This API is being proposed to drive the development of semantic multi-document highlights, rather than the current textual functionality. The shape is as proposed as follows:
export interface MultiDocumentHighlightProvider {
       /**
	* Provide a set of document highlights, like all occurrences of a variable or
	* all exit-points of a function.
	*
	* @param document The document in which the command was invoked.
	* @param position The position at which the command was invoked.
	* @param otherDocuments An array of additional valid documents for which highlights should be provided.
	* @param token A cancellation token.
	* @returns A Map containing a mapping of the Uri of a document to the document highlights or a thenable that resolves to such. The lack of a result can be
	* signaled by returning `undefined`, `null`, or an empty array.
	*/
        provideMultiDocumentHighlights(document: TextDocument, position: Position, otherDocuments: TextDocument[], token: CancellationToken): ProviderResult<Map<Uri, DocumentHighlight[]>>;
}

namespace languages {
	/**
	 * Register a multi document highlight provider.
	 *
	 * Multiple providers can be registered for a language. In that case providers are sorted
	 * by their {@link languages.match score} and groups sequentially asked for document highlights.
	 * The process stops when a provider returns a `non-falsy` or `non-failure` result.
	 *
	 * @param selector A selector that defines the documents this provider is applicable to.
	 * @param provider A multi-document highlight provider.
	 * @returns A {@link Disposable} that unregisters this provider when being disposed.
	 */
	export function registerMultiDocumentHighlightProvider(selector: DocumentSelector, provider: MultiDocumentHighlightProvider): Disposable;
}

@Yoyokrazy let's keep this issue open and use it for the finalization of the API


Supervised ViT Checkpoint

Hi, thanks for this great repo! Could you by chance point me in the direction of the "Supervised ViT" described in Figure 3?

Hi!
As mentioned in the supplementary material, we used the supervised ViT vit_small_patch16_224 from the timm repository to generate Figure 3.
Our code supports running with different ViTs trained in a supervised manner / with DINO. Just specify --model_type <model_type> with any of the following options:
[dino_vits8 | dino_vits16 | dino_vitb8 | dino_vitb16 | vit_small_patch8_224 |  vit_small_patch16_224 | vit_base_patch8_224 | vit_base_patch16_224]

Also, we have just uploaded code to generate PCA to a collection of images as done in Figure 3. You can find it in pca.py.