[Request] Remove dependency of Renci.SshNet.Async

The nuget package Renci.SshNet.Async appears rather out of date. On its own it has a dependency of SSH.NET v2016.1.0 which indicates that it has a vulnerability with moderate severity. There is an issue created 12 months ago which asked to bump the dependency but nothing came of it. Consdering FluentStorage.SFTP uses later versions (see below) It appears that the package just needs csporj text edit and no other major changes.
This isn't as much of an issue for FluentStorage.SFTP as it currently has a dependency of SSH.NET (>= 2020.0.2) across all target platforms. So by default people using FluentStorage.SFTP do not have this problem to worry about.
However if you attempt to manually update SSH.NET to 2023.0.0 or even 2023.0.1 you will get an error while attempting to call ListDirectories
Method not found: 'System.Collections.Generic.IEnumerable`1<Renci.SshNet.Sftp.SftpFile> Renci.SshNet.SftpClient.EndListDirectory(System.IAsyncResult)'.
   at Renci.SshNet.Async.SshNetExtensions.ListDirectoryAsync(SftpClient client, String path, Action`1 listCallback, TaskFactory`1 factory, TaskCreationOptions creationOptions, TaskScheduler scheduler)

I don't know if this is due to SSH.NET having targets of .NET 6 and higher (and also .NET framework, and other things) while Renci.SshNet.Async package only has netstandard1.3;net40;uap10.0.
Playing around locally if I remove using Renci.SshNet.Async from SshNetSftpBlobStorage I get 2 errors. Both are calls to client.ListDirectoryAsync( which are here and here.
It looks like the people working on SSH.NET took on a dependency of Microsoft.Bcl.AsyncInterfaces to allow IAsyncEnumerable on frameworks that don't support it (here). I don't know how that would work here but it looks similar as this project also targets netstandard2.0 and up.
As for code changes, I have never used IAsyncEnumerable but I hacked this together which hopefully is a starting off point for someone who knows how to use this better.
I first changed
IEnumerable<SftpFile> directoryContents = await client.ListDirectoryAsync(fullPathGrouping.Key);

List<Blob> blobCollection = directoryContents
	.Where(f => (f.IsDirectory || f.IsRegularFile) && f.FullName == fullPath)
	.Select(ConvertSftpFileToBlob).ToList();

to
List<Blob> blobCollection = new List<Blob>();
await foreach (SftpFile file in client.ListDirectoryAsync(fullPathGrouping.Key, cancellationToken))
{
	if ((file.IsDirectory || file.IsRegularFile) && file.FullName == fullPath)
	{
		blobCollection.Add(ConvertSftpFileToBlob(file));
	}
}

and then later on
IEnumerable<SftpFile> directoryContents = await client.ListDirectoryAsync(folderToList, cancellationToken);
var tempBlobCollection = directoryContents
	.Where(dc => (options.FilePrefix == null || dc.Name.StartsWith(options.FilePrefix))
					&& (dc.IsDirectory || dc.IsRegularFile || dc.OwnerCanRead)
					&& !cancellationToken.IsCancellationRequested
					&& dc.Name != "."
					&& dc.Name != "..")
	.Take(options.MaxResults.Value)
	.Select(ConvertSftpFileToBlob)
	.Where(options.BrowseFilter).ToLis

to
var tempBlobCollection = new List<Blob>();
await foreach (SftpFile dc in client.ListDirectoryAsync(folderToList, cancellationToken))
{
	if ((options.FilePrefix == null || dc.Name.StartsWith(options.FilePrefix))
					&& (dc.IsDirectory || dc.IsRegularFile || dc.OwnerCanRead)
					&& !cancellationToken.IsCancellationRequested
					&& dc.Name != "."
					&& dc.Name != "..")
	{
		tempBlobCollection.Add(ConvertSftpFileToBlob(dc));
	}
}

// TODO: options.BrowseFilter()

(note: this doesn't use options.BrowseFilter, nor does it really make any use of options.MaxResults.Value).
With this I am able to push SSH.NET to 2023.0.1 in my test project which is a .NET MAUI app targeting .NET 8). My test project only ever calls ListAsync and never GetBlobsAsync so I don't know if that first half of the code even works correctly. I just know that it compiles and works for my use case here.

Can you make a PR for this, upgrading SSH.NET to the latest as well as the fixes you mentioned? It would be highly appreciated. Thanks.

I'll get onto that tomorrow for you. I won't be certain the way I used IAsyncEnumerable is the correct way though. I'll see if I can run the in project tests to ensure I test all target frameworks as well.

So with the stuff I said above regarding Microsoft.Bcl.AsyncInterfaces, it appears that this was all automatically handled by updating SSH.NET to 2023.0.1.
I did this change as a part of #56

Thanks, if you are done with this, please close this ticket.

Yep this one is all sorted. Thanks for accepting all those PRs so quickly


fix blank report with hit calling and support non-genus-specific hits

the blank reports were caused by lineage map version drift between
pipeline and webapp, e.g., species 1173061 got reclassified from
genus 43987 to genus 27316;  and also by a pipeline bug fixed in 1.6
non-genus-specific hits are important e.g. for some species of
escheria coli where the identical genome is uploaded to NCBI
under two distinct species under two distinct genera

Confirmed in testing that this at least changes the behavior from crashing and blank report to logs of singleton ad-hoc genera where the real one were not imported due to the pipeline bug and the lineage mismatch.   Now testing with the fixes for those bugs.


g3log package is not available

I am not able to download g3log package from vcpkg.

g3log is not included in vcpkg yet: https://github.com/Microsoft/vcpkg/issues/5684


Open existing controller from project files instead of creating a new one

Feat for #1404.

Includes changes to preview middleware client-side code.
Existing Controller Extension dialog checks for existing controller extension file before opening and shows an appropriate message with a link to open that file locally in VSCode.

@nikmace In case of an error. I do not see the full error message. I see only the status code error. Please make it so that the full error message is displayed. Furthermore what is the desired behaviour when a flex change is referencing a controller file that doesn't exist? Currently an error is thrown and one can no longer create a controller extension.

I think you should delete the respective change file (which points to a non-existent controller extension file) and create a new controller from scratch.

The existing functionality in this PR will be merged as it is and enhanced in #1460.


[DNM][experimental][WIP Yarn workspaces to help with Lerna

Description
with Lerna some yarn command do not work

I read this:
https://yarnpkg.com/blog/2017/08/02/introducing-workspaces/
https://doppelmutzi.github.io/monorepo-lerna-yarn-workspaces/
And tried to see if enabling Yarn workspace would help
Type of Change

Non breaking change ('update', 'change')

change
Added this to /package.json
  "workspaces":[
    "packages/*"
  ]

Yarn should not have to be configures as workspaces is enabled by default
After doing this, and rerunning yarn install from the root everything works.
It is compatible with lerna
After this i can run in manager and root and linode-js-sdk:

audit
outdated
upgrade

BUT
yarn install in packages/manager/ Still fails because of patch-packages.
Although supposedly it should support it :
https://github.com/ds300/patch-package/issues/42
Note to Reviewers
DO NOT MERGE, we need to talk and see if we think this is useful

Made a cleaner version of this


[BUG] Crash on iOS 14.5

I think the player crash when testing on iOS 14.5,
can you give an update for this issue? I'm still using version non null safety, it will be good if your release the version on non null safety.
Or give me instructions how to fix this

There is nothing error in console when crash happend, so i don't know why

This is crash log when i debug with XCode

The problem is on dependency plugin - 'userAgent' has not parsed.

also got same problem

flutter_inappwebview plugin causes the problem.
This is just a workaround, I modified method parse(options: [String: Any?]) in Options.swift as below, and it works.
    func parse(options: [String: Any?]) -> Options {
        for (key, value) in options {
            if !(value is NSNull) {
                if self.responds(to: Selector(key)) {
                    self.setValue(value, forKey: key)
                }
            }
        }
        return self
    }

oh, waw.
could you share more about this @NAKANISYNTH , it would be very helpful? where do I ned Options.swift?

This file? https://github.com/pichillilorenzo/flutter_inappwebview/blob/4469ec7/ios/Classes/Options.swift#L17-L24

@gyamoto Yes, that's it!
@muhajirdev Option.swift is in dependency plugin 'flutter_inappwebview'. So open Runner.xcworkspace in your repo and search Option.swift on it.

Thanks @muhajirdev . It work!

Is there an issue in https://github.com/pichillilorenzo/flutter_inappwebview/ to address this?

hey guys, I am not really sure where to find it.

is it somewhere here?

I can't find flutter_inappweview

@muhajirdev Press Shift + Command + O and search for Options.swift.

I can't find it too, any idea why?

I am using this plugin, version 6.1.1 btw
Also I tried to list the external dependencies here, in Android studio. Looks like youtube_player_flutter and flutter_inappwebview are not here. But it's in my pubpsec.yaml

flutter_inappwebview plugin causes the problem.
This is just a workaround, I modified method parse(options: [String: Any?]) in Options.swift as below, and it works.
    func parse(options: [String: Any?]) -> Options {
        for (key, value) in options {
            if !(value is NSNull) {
                if self.responds(to: Selector(key)) {
                    self.setValue(value, forKey: key)
                }
            }
        }
        return self
    }

This problem fixed when i try this one, thank youu so much!

In our case, we encountered a crash in iOS 14.5 while using Flutter 2.2 and version 7.0.0+7 of the package. Upgrading to 8.0.0 fixes the crash.

in case if you guys are unable to find Options.swift, try to search like this

Another way to find this file from vscode is:
Open dependencies tab, and search for flutter_inappwebview

To anyone that is having this issue on youtube_player_iframe, I fixed it.
Just add
youtube_player_iframe:
    git:
      url: https://github.com/thiagocarvalho0877/youtube_player_flutter.git
      path: ./packages/youtube_player_iframe
      ref: fix-inappwebview

https://github.com/thiagocarvalho0877/youtube_player_flutter


tensorflow sample?

I know this isn't really a python-ffmpeg question, but what kind of machine were you running the tensorflow_stream example on, and what kind of framerate were you getting? I'm using a g3s.xlarge instance (with a GPU) on AWS and I run it for 5 minutes and get maybe 5 seconds of output video.

You need to set up tensorflow for GPU support. pip install tensorflow-gpu for starters. It was quite an annoying/involved process to get TF running with proper gpu support on my VM at the time and my notes are scattered on the topic (and probably outdated).
Next time I go through the setup I'll try to compile it as some sort of VM provisioning script (at some point). Reproducibility is king of computing.
In the meantime, if you figure out steps to get proper TF GPU support on your VM feel free to share notes here, and it'll be much appreciated.


Decorated methods in cdef classes should be ordinary functions

See here for a discussion:
http://comments.gmane.org/gmane.comp.python.cython.devel/12466
Basically, whenever a method in a cdef class has an unknown decorator, it must become a plain function, i.e. its 'self' argument must be untyped.
Migrated from http://trac.cython.org/ticket/719

Moved from #1623:
Currently, a decorated method in a cdef class is only supported if the decorator does not change the meaning of the self argument. For example, when cythonizing this:
cdef object sm = staticmethod

cdef class A:
    @sm
    def fake_static_method():
        return 42

Cython complains:
Method fake_static_method has wrong number of arguments (0 declared, 1 or more expected)

I tried to fix this, but it is not easy since Cython first creates fake_static_method as a normal method and then adapts it. For arbitrary decorators to work, the only way would be for Cython to create a non-method function fake_static_method and then apply decorators on that.

it must become a plain function, i.e. its 'self' argument must be untyped.

I would like that as a feature request independently: I have use cases for a method like
cdef class Foo:
    def meth(object self):
        ...

to be able to write Foo.meth(anything), even if anything is not a Foo instance.

Which of #3383, #3961, #3966 would be the best candidate for solving this issue?

Which of #3383, #3961, #3966 would be the best candidate for solving this issue?

#3383 is definitely superceded by the other two (I'll close it as soon as I've separated out part 3 into an individual PR).
#3961 lets you solve the issue manually by overriding the type of the first argument.
#3966 provides an optional (off-by-default) automatic solution of making the first argument a fused type. In principle it could be turned on by default and then would solve the issue completely. But that does unexpectedly make certain functions fused.
So neither solves it completely - #3961 is the first step towards solving it and #3966 is the second step toward solving it.

#3383 is definitely superceded by the other two (I'll close it as soon as I've separated out part 3 into an individual PR).
#3961 lets you solve the issue manually by overriding the type of the first argument.
#3966 provides an optional (off-by-default) automatic solution of making the first argument a fused type. In principle it could be turned on by default and then would solve the issue completely. But that does unexpectedly make certain functions fused.
So neither solves it completely - #3961 is the first step towards solving it and #3966 is the second step toward solving it.


Login Failed !

I have this issue
←[91m[✗] Login Failed!←[0m {"user": true, "authenticated": false, "status": "ok"}
The first time is OK
but the second one I try and fail. I tried on change proxy but the issue still exists.

The password is wrong, that's why you're getting this. Check your password and try again.

well, it worked. Thanks for your recommends.


Add database

WHAT

Add database to media app sample;
Store playlist, media, and media download status in the database;
Added temporary approach for "offline first": it only hits the API if playlist table is empty;

WHY
In order to allow implementing offline first strategy.
HOW

Add MediaDatabase, MediaDownloadDao and PlaylistDao;
Add MediaDownloadEntity, MediaEntity, PlaylistEntity, PlaylistMediaEntity;

Checklist :clipboard:

[x] Add explicit visibility modifier and explicit return types for public declarations
[x] Run spotless check
[x] Run tests
[x] Update metalava's signature text files

Landing and will follow up on comments


Running crisper on HTML imports (e.g., Polymer files) produces a full HTML tree

crisper (2.0.1) seems to always outputs HTML as a well-formed document,  tags and all -- even if the input file is just , like most files intended to be used as a link rel="import" target.
This makes running crisper on Polymer element files a pain, because the result is a bunch of files which all think they're root HTML trees. This, in turn, breaks vulcanization's script ordering: Polymer/vulcanize#284

I think this boils down to what you're doing in https://github.com/Polymer/vulcanize/issues/284.

@ebidel, do you mean the other way around? I agree Polymer/vulcanize#284 is a weird case, and I only ran into it because of this issue here.
Or is your point that one should vulcanize first, then run crisper, not vice versa?

I meant that some of your issue might be what you're putting in imports. You're including a full html document with  tag. That doesnt make sense in an import.

I agree with you. It's the same reason why crisper's behavior is inconvenient: its output doesn't make sense in an import.
So feel free to close that bug as WAI if that makes sense.
To clarify, this bug (Running crisper on HTML imports (e.g., Polymer files) produces a full HTML tree) is described in more detail below:
Suppose I have a Polymer component x-test.html.
<link rel="import" href="paper-button/paper-button.html">
<dom-module id="x-test">
  <template>

</template>

</dom-module>

That's fine, and other HTML files can import that. Now let's remove the inline script to avoid CSP issues:
crisper -h out.html -j out.js -s x-test.html
That creates an HTML document with a  tag, so my component no longer makes sense:
<link rel="import" href="paper-button/paper-button.html">
<dom-module id="x-test">
  <template>

</template>
  </dom-module>

^ That behavior is what this bug refers to.

IIRC, vulcanize/crisper does this to make polyfill'd browsers like IE happy. I believe it also does things like stick a hidden attribute on the body so there's no possibility of visual FOUC. @azakus will know more of the dirty details.
FWIW, that out.html is still valid. Remember, HTML Imports are just HTML documents. In your example, someone can import out.html and use your element just as they could before. I don't understand what you mean by they "all think they're root files". HTML import documents are separate from the main page, even if they contain all the stuff in out.html.
http://www.html5rocks.com/en/tutorials/webcomponents/imports/

No, this is just the behavior of the parser we use parse5, not any attempt to make browsers happy.

I had this same issue with using crisper to process Shopify templates and snippets in a build process for Shopify. The parser, parse5, supports parsing fragments. I updated my local crisper definition to support that. I will submit a pull request.

Would love to see this pull request get accepted. While it works as said above, it's simply unnecessary kb we'll have to load in our files to have the html/body tags in there.

@azakus in that case wdyt about accepting this PR?


Find out what the default Gadfly color values are

I know I can introduce colors manually, but I like the color scheme of Gadfly, and could not find an easy way to retrieve a vector of colors in the default order as used by Gadfly.
Did I miss something? I could not find anything in the documentation, and the closest I got (but did not know what to do with it) by browsing through the code is Gadfly.Scale.color_discrete

The color palette is generated, so you won't find all the colors listed explicitly anywhere. But you can generate them yourself. Here's the code Gadfly uses:
using Color

n = 12
distinguishable_colors(n, ColorValue[LCHab(70, 60, 240)],
                       transform=c -> deuteranopic(c, 0.5),
                       lchoices=Float64[65, 70, 75, 80],
                       cchoices=Float64[0, 50, 60, 70],
                       hchoices=linspace(0, 330, 24))

You can change n to get the desired number of colors (which can be arbitrarily large).

Nice :). Thanks a lot for that.
Possibly a nice addition for the documentation?
Or even add a wrapper function around it so people can call it with always the same lchoices/cchoices/hchoices Gadfly uses (if those settings ever change in the future).

Nevermind, I should have known how to do this:
julia> using Gadfly

julia> a = Scale.color_discrete_hue()
DiscreteColorScale((anonymous function),nothing,nothing,true)

julia> a.f(3)
3-element Array{ColorValue{T},1}:
 LCHab{Float64}(70.0,60.0,240.0)
 LCHab{Float64}(80.0,70.0,100.43478260869566)
 LCHab{Float64}(65.0,70.0,0.0)

@woest Great tip, thanks!


test: Enhance JSON scraping pipeline test

This commit enhances the test suite for the JSON scraping pipeline by introducing the following improvements:

Separate configuration from the test code by loading it from a JSON file (config.json)
Use a parametrized fixture to run the test with multiple configurations automatically
Read the sample JSON file from a separate inputs directory for better organization
Add explicit assertions to verify the expected output (list of titles)
Improve test organization and separation of concerns using fixtures
Promote better coding practices and make the test suite more extensible

These changes aim to improve the testability, maintainability, and flexibility of the test suite. They make it easier to manage configurations, add or modify test cases, and ensure the robustness of the scraping pipeline. The test suite now follows best practices and is better prepared for future changes and requirements.

thank you!


Bump patch version

Purpose
Bumps a patch release

[x] I have read and checked the items on the review checklist.

bors r+

Thanks. We may want another release after #1939. I'll let you know.

Okay, let me know. If we're tagging another one tomorrow, I can wait to update the Coupler maybe

Thanks. We may want another release after #1939. I'll let you know.

Okay, let me know. If we're tagging another one tomorrow, I can wait to update the Coupler maybe

Sounds good. That PR is not quite working yet so I don't know whether we can get it done by tomorrow. I'll know more by tomorrow noon.


Documentation on API

It would be great to have documentation on the API.

Agreed @codeb0t. Want to help?


AVRO-3628: [Java] JUnit 4.x tests are not executed

Use JUnit 5.x Vintage engine instead of JUnit 4.x
What is the purpose of the change

Fix the execution of JUnit 4.x unit tests by using JUnit 5.x Vintage engine. Fixes AVRO-3628

Verifying this change
Check the stdout of the Maven build and make sure that JUnit 4.x tests are executed, e.g. avro-maven-plugin module should execute 11 tests.
Documentation

Does this pull request introduce a new feature? no

Just for info -- adding up the test cases before the change: 144 versus 10504 after the change :scream:

Just for info -- adding up the test cases before the change: 144 versus 10504 after the change scream

Yup, the CI will become slower again :-)


Race condition when configuring DDLogFileManagerDefault

Checklist

[x] I have read and understood the CONTRIBUTING guide
[x] I have read the Documentation
[x] I have searched for a similar issue in the project and found none

Describe the bug
I think I've found yet another configuration race condition.
If you want 10 logfiles of max 50MiB each, you'll have to set the following properties on the logfile manager:
logFileManager.logFilesDiskQuota = 500 * 1024 * 1024;
logFileManager.maximumNumberOfLogFiles = 10;

However the default values defined in DDFileLogger are 5 logfiles and 20MiB total disk quota.
The setters of both properties (setMaximumNumberOfLogFiles: and setLogFilesDiskQuota:) both call deleteOldFilesForConfigurationChange which in turn spawns a call to deleteOldLogFiles in a new default queue thread.
Setting both properties one after another thus creates a race condition where deleteOldLogFiles is running with one of the properties already updated and the other one still being on the default value.
For example when having 375MiB of logfiles in 8 files In the above case the logfile manager will delete 3 of the archived logfiles to not exceed the default of 5 logfiles even though we want 10 logfiles to be retained.
Flipping the configuration lines around will be even more disastrous because all logfiles but one would be deleted to remain below the 20MiB default disk quota, even though the user wants to configure a much higher quota (and believes they did so).
To Reproduce
Assuming there are multiple archived logfiles of 20MiB each, the following code should trigger the race condition:
logFileManager.maximumNumberOfLogFiles = 10;
usleep(10000);
logFileManager.logFilesDiskQuota = 500 * 1024 * 1024;

Possible solution
Add a new cleanupLogfiles method to the default logfile manager which calls deleteOldLogFiles in a new queue and gets automatically invoked once at least one file logger has been added to the logfile manager using initWithLogFileManager:completionQueue:. That way the user can configure everything they want using the logfile manager before creating a concrete logger.
The cleanupLogfiles should be part of the public API to allow for scenarios when users want to just use the logfile manager to manage their logfiles (e.g. clean up archived logfiles using some maximum numer of logfiles and some disk quota) without configuring a file logger.

Great, thanks for fixing it that fast!


rcamera methods?

Do these have an equivalent in naylib or is it not necessary?

I just ported rcamera to nim using c2nim, and then manually editing it
not sure if it works but it compiles fine (hopefully no mistakes due to sleepyness lel)

from math import nil
import raylib, raymath

const
  CAMERA_CULL_DISTANCE_NEAR* = 0.01
  CAMERA_CULL_DISTANCE_FAR* = 1000.0

##  raylib required functionality:
##  GetMouseDelta()
##  GetMouseWheelMove()
##  IsKeyDown()
##  IsKeyPressed()
##  GetFrameTime()
## ----------------------------------------------------------------------------------
##  Defines and Macros
## ----------------------------------------------------------------------------------
const
  CAMERA_MOVE_SPEED* = 0.09f
  CAMERA_ROTATION_SPEED* = 0.03f
  CAMERA_PAN_SPEED* = 0.2f
##  Camera mouse movement sensitivity
const
  CAMERA_MOUSE_MOVE_SENSITIVITY* = 0.003f
  CAMERA_MOUSE_SCROLL_SENSITIVITY* = 1.5f
  CAMERA_ORBITAL_SPEED* = 0.5f
  CAMERA_FIRST_PERSON_STEP_TRIGONOMETRIC_DIVIDER* = 8.0f
  CAMERA_FIRST_PERSON_STEP_DIVIDER* = 30.0f
  CAMERA_FIRST_PERSON_WAVING_DIVIDER* = 200.0f
##  PLAYER (used by camera)
const
  PLAYER_MOVEMENT_SENSITIVITY* = 20.0f
## ----------------------------------------------------------------------------------
##  Types and Structures Definition
## ----------------------------------------------------------------------------------
## ...
## ----------------------------------------------------------------------------------
##  Global Variables Definition
## ----------------------------------------------------------------------------------
## ...
## ----------------------------------------------------------------------------------
##  Module specific Functions Declaration
## ----------------------------------------------------------------------------------
## ...
## ----------------------------------------------------------------------------------
##  Module Functions Definition
## ----------------------------------------------------------------------------------
##  Returns the cameras forward vector (normalized)
proc getCameraForward*(camera: var Camera): Vector3 =
  return normalize(subtract(camera.target, camera.position))

##  Returns the cameras up vector (normalized)
##  Note: The up vector might not be perpendicular to the forward vector
proc getCameraUp*(camera: var Camera): Vector3 =
  return normalize(camera.up)

##  Returns the cameras right vector (normalized)
proc getCameraRight*(camera: var Camera): Vector3 =
  var forward: Vector3 = getCameraForward(camera)
  var up: Vector3 = getCameraUp(camera)
  return crossProduct(forward, up)

##  Moves the camera in its forward direction
proc cameraMoveForward*(camera: var Camera; distance: float; moveInWorldPlane: bool) =
  var forward: Vector3 = getCameraForward(camera)
  if moveInWorldPlane:
    ##  Project vector onto world plane
    forward.y = 0
    forward = normalize(forward)
  forward = scale(forward, distance)
  ##  Move position and target
  camera.position = add(camera.position, forward)
  camera.target = add(camera.target, forward)

##  Moves the camera in its up direction
proc cameraMoveUp*(camera: var Camera; distance: float) =
  var up: Vector3 = getCameraUp(camera)
  ##  Scale by distance
  up = scale(up, distance)
  ##  Move position and target
  camera.position = add(camera.position, up)
  camera.target = add(camera.target, up)

##  Moves the camera target in its current right direction
proc cameraMoveRight*(camera: var Camera; distance: float; moveInWorldPlane: bool) =
  var right: Vector3 = getCameraRight(camera)
  if moveInWorldPlane:
    ##  Project vector onto world plane
    right.y = 0
    right = normalize(right)
  right = scale(right, distance)
  ##  Move position and target
  camera.position = add(camera.position, right)
  camera.target = add(camera.target, right)

##  Moves the camera position closer/farther to/from the camera target
proc cameraMoveToTarget*(camera: var Camera; delta: float) =
  var distance: float = distance(camera.position, camera.target)
  ##  Apply delta
  distance += delta
  ##  Distance must be greater than 0
  if distance <= 0:
    distance = 0.001f
  var forward: Vector3 = getCameraForward(camera)
  camera.position = add(camera.target, scale(forward, -distance))

##  Rotates the camera around its up vector
##  Yaw is "looking left and right"
##  If rotateAroundTarget is false, the camera rotates around its position
##  Note: angle must be provided in radians
proc cameraYaw*(camera: var Camera; angle: float; rotateAroundTarget: bool) =
  ##  Rotation axis
  var up: Vector3 = getCameraUp(camera)
  ##  View vector
  var targetPosition: Vector3 = subtract(camera.target, camera.position)
  ##  Rotate view vector around up axis
  targetPosition = rotateByAxisAngle(targetPosition, up, angle)
  if rotateAroundTarget: ##  rotate around camera.position
    ##  Move position relative to target
    camera.position = subtract(camera.target, targetPosition)
  else:
    ##  Move target relative to position
    camera.target = add(camera.position, targetPosition)

##  Rotates the camera around its right vector, pitch is "looking up and down"
##   - lockView prevents camera overrotation (aka "somersaults")
##   - rotateAroundTarget defines if rotation is around target or around its position
##   - rotateUp rotates the up direction as well (typically only usefull in CAMERA_FREE)
##  NOTE: angle must be provided in radians
proc cameraPitch*(camera: var Camera; angle: sink float; lockView: bool; rotateAroundTarget: bool; rotateUp: bool) =
  ##  Up direction
  var up: Vector3 = getCameraUp(camera)
  ##  View vector
  var targetPosition: Vector3 = subtract(camera.target, camera.position)
  if lockView:
    ##  In these camera modes we clamp the Pitch angle
    ##  to allow only viewing straight up or down.
    ##  Clamp view up
    var maxAngleUp: float = angle(up, targetPosition)
    maxAngleUp -= 0.001f
    ##  avoid numerical errors
    if angle > maxAngleUp:
      angle = maxAngleUp
    var maxAngleDown: float = angle(negate(up), targetPosition)
    maxAngleDown = maxAngleDown * -1.0f
    ##  downwards angle is negative
    maxAngleDown += 0.001f
    ##  avoid numerical errors
    if angle < maxAngleDown:
      angle = maxAngleDown
  var right: Vector3 = getCameraRight(camera)
  ##  Rotate view vector around right axis
  targetPosition = rotateByAxisAngle(targetPosition, right, angle)
  if rotateAroundTarget: ##  rotate around camera.position
    ##  Move position relative to target
    camera.position = subtract(camera.target, targetPosition)
  else:
    ##  Move target relative to position
    camera.target = add(camera.position, targetPosition)
  if rotateUp:
    ##  Rotate up direction around right axis
    camera.up = rotateByAxisAngle(camera.up, right, angle)

##  Rotates the camera around its forward vector
##  Roll is "turning your head sideways to the left or right"
##  Note: angle must be provided in radians
proc cameraRoll*(camera: var Camera; angle: float) =
  ##  Rotation axis
  var forward: Vector3 = getCameraForward(camera)
  ##  Rotate up direction around forward axis
  camera.up = rotateByAxisAngle(camera.up, forward, angle)

##  Returns the camera view matrix
proc getCameraViewMatrix*(camera: var Camera): Matrix =
  return lookAt(camera.position, camera.target, camera.up)

##  Returns the camera projection matrix
proc getCameraProjectionMatrix*(camera: var Camera; aspect: float): Matrix =
  if camera.projection == Perspective:
    return perspective(math.degToRad(camera.fovy), aspect, CAMERA_CULL_DISTANCE_NEAR, CAMERA_CULL_DISTANCE_FAR)
  elif camera.projection == Orthographic:
    var top: float64 = camera.fovy/2.0f
    var right: float64 = top*aspect
    return ortho(-right, right, -top, top, CAMERA_CULL_DISTANCE_NEAR,
                      CAMERA_CULL_DISTANCE_FAR)
  return matrixIdentity()

##  Update camera position for selected mode
##  Camera mode: CAMERA_FREE, CAMERA_FIRST_PERSON, CAMERA_THIRD_PERSON, CAMERA_ORBITAL or CUSTOM
proc updateCamera*(camera: var Camera; mode: CameraMode) =
  var mousePositionDelta: Vector2 = getMouseDelta()
  var moveInWorldPlane: bool = if (mode == FirstPerson or mode == ThirdPerson): true else: false
  var rotateAroundTarget: bool = if (mode == ThirdPerson or mode == Orbital): true else: false
  var lockView: bool = if (mode == FirstPerson or mode == ThirdPerson or mode == Orbital): true else: false
  var rotateUp: bool = false
  if mode == Orbital:
    ##  Orbital can just orbit
    var rotation: Matrix = rotate(getCameraUp(camera), CAMERA_ORBITAL_SPEED*getFrameTime())
    var view: Vector3 = subtract(camera.position, camera.target)
    view = transform(view, rotation)
    camera.position = add(camera.target, view)
  else:
    ##  Camera rotation
    if isKeyDown(Down):
      cameraPitch(camera, -CAMERA_ROTATION_SPEED, lockView, rotateAroundTarget, rotateUp)
    if isKeyDown(Up):
      cameraPitch(camera, CAMERA_ROTATION_SPEED, lockView, rotateAroundTarget, rotateUp)
    if isKeyDown(Right):
      cameraYaw(camera, -CAMERA_ROTATION_SPEED, rotateAroundTarget)
    if isKeyDown(Left):
      cameraYaw(camera, CAMERA_ROTATION_SPEED, rotateAroundTarget)
    if isKeyDown(Q):
      cameraRoll(camera, -CAMERA_ROTATION_SPEED)
    if isKeyDown(E):
      cameraRoll(camera, CAMERA_ROTATION_SPEED)
    if not isGamepadAvailable(0):
      ##  Camera pan (for CAMERA_FREE)
      if (mode == Free) and (isMouseButtonDown(Middle)):
        let mouseDelta: Vector2 = getMouseDelta()
        if mouseDelta.x > 0.0f:
          cameraMoveRight(camera, CAMERA_PAN_SPEED, moveInWorldPlane)
        if mouseDelta.x < 0.0f:
          cameraMoveRight(camera, -CAMERA_PAN_SPEED, moveInWorldPlane)
        if mouseDelta.y > 0.0f:
          cameraMoveUp(camera, -CAMERA_PAN_SPEED)
        if mouseDelta.y < 0.0f:
          cameraMoveUp(camera, CAMERA_PAN_SPEED)
      else:
        ##  Mouse support
        cameraYaw(camera, -(mousePositionDelta.x * CAMERA_MOUSE_MOVE_SENSITIVITY), rotateAroundTarget)
        cameraPitch(camera, -(mousePositionDelta.y * CAMERA_MOUSE_MOVE_SENSITIVITY), lockView, rotateAroundTarget, rotateUp)
      ##  Keyboard support
      if isKeyDown(W):
        cameraMoveForward(camera, CAMERA_MOVE_SPEED, moveInWorldPlane)
      if isKeyDown(A):
        cameraMoveRight(camera, -CAMERA_MOVE_SPEED, moveInWorldPlane)
      if isKeyDown(S):
        cameraMoveForward(camera, -CAMERA_MOVE_SPEED, moveInWorldPlane)
      if isKeyDown(D):
        cameraMoveRight(camera, CAMERA_MOVE_SPEED, moveInWorldPlane)
    else:
      ##  Gamepad controller support
      cameraYaw(camera, -((getGamepadAxisMovement(0, RightX) * 2) * CAMERA_MOUSE_MOVE_SENSITIVITY), rotateAroundTarget)
      cameraPitch(camera, -((getGamepadAxisMovement(0, RightY) * 2) * CAMERA_MOUSE_MOVE_SENSITIVITY), lockView, rotateAroundTarget, rotateUp)
      if getGamepadAxisMovement(0, LeftY) <= -0.25f:
        cameraMoveForward(camera, CAMERA_MOVE_SPEED, moveInWorldPlane)
      if getGamepadAxisMovement(0, LeftX) <= -0.25f:
        cameraMoveRight(camera, -CAMERA_MOVE_SPEED, moveInWorldPlane)
      if getGamepadAxisMovement(0, LeftY) >= 0.25f:
        cameraMoveForward(camera, -CAMERA_MOVE_SPEED, moveInWorldPlane)
      if getGamepadAxisMovement(0, LeftX) >= 0.25f:
        cameraMoveRight(camera, CAMERA_MOVE_SPEED, moveInWorldPlane)
    if mode == Free:
      if isKeyDown(Space):
        cameraMoveUp(camera, CAMERA_MOVE_SPEED)
      if isKeyDown(LeftControl):
        cameraMoveUp(camera, -CAMERA_MOVE_SPEED)
  if (mode == ThirdPerson) or (mode == Orbital) or (mode == Free):
    ##  Zoom target distance
    cameraMoveToTarget(camera, -getMouseWheelMove())
    if isKeyPressed(KpSubtract):
      cameraMoveToTarget(camera, 2.0f)
    if isKeyPressed(KpAdd):
      cameraMoveToTarget(camera, -2.0f)

##  Update camera movement, movement/rotation values should be provided by user
proc updateCameraPro*(camera: var Camera; movement: Vector3; rotation: Vector3; zoom: float) =
  ##  Required values
  ##  movement.x - Move forward/backward
  ##  movement.y - Move right/left
  ##  movement.z - Move up/down
  ##  rotation.x - yaw
  ##  rotation.y - pitch
  ##  rotation.z - roll
  ##  zoom - Move towards target
  var lockView: bool = true
  var rotateAroundTarget: bool = false
  var rotateUp: bool = false
  var moveInWorldPlane: bool = true
  ##  Camera rotation
  cameraPitch(camera, -(math.degToRad(rotation.y)), lockView, rotateAroundTarget,
              rotateUp)
  cameraYaw(camera, -(math.degToRad(rotation.x)), rotateAroundTarget)
  cameraRoll(camera, math.degToRad(rotation.z))
  ##  Camera movement
  cameraMoveForward(camera, movement.x, moveInWorldPlane)
  cameraMoveRight(camera, movement.y, moveInWorldPlane)
  cameraMoveUp(camera, movement.z)
  ##  Zoom target distance
  cameraMoveToTarget(camera, zoom)

Here's the port, there may be mistakes dunno

Sorry I have considered it a lot but I don't plan to add more modules rewritten in nim, in fact I might remove some. But thanks for your effort!


users max level is 99

in test/routes/users.ts

it is 99.

Thanks, the limit is now set in 1056786


Browser PopUps such as autofill password are not shown

I have to disable Workspacer to make the pop-ups actually work

Quick question: Did you close this because its now solved, or did you close it because it never got adressed?


Safeguard against BitMap fonts in the CanvasItem editor

Fixes https://github.com/godotengine/godot/issues/52999, fixes https://github.com/godotengine/godot/issues/35462. Thanks to @arrowinaknee for investigating the issue!
Not relevant for master.

Thanks!

Cherry-picked for 3.3.5.


httpClient-4.x-plugin throw MalformedURLException

Please answer these questions before submitting your issue.

Why do you submit this issue?
[ ] Question or discussion
[ * ] Bug
[ ] Requirement
[ ] Feature or performance improvement

Question

What do you want to know?

Bug

5.0.0-GA 6.0.0-GA

Which company or project?

What happen?
org.apache.skywalking.apm.plugin.httpClient.v4.HttpClientExecuteInterceptor.java  [102]
String requestPath = new URL(uri).getPath();

But the uri is passed when the call is made, and there is no protocol.
String uri = httpRequest.getRequestLine().getUri();
String requestURI = getRequestURI(uri);
So an exception is thrown.

Requirement or improvement

Please describe about your requirements or improvement suggestions.

@ouronghui I think the easiest way to fix is, try to check whether the string starts with http: or https: before do url parse. Could you try to send a pull request to fix?

I fix this, 78c2327cc6

String uri = httpRequest.getRequestLine().getUri();

fixed.


⚠ Inventory API Endpoint has degraded performance

In 1841baf, Inventory API Endpoint (https://inventory.roblox.com/v1/users/82738847/assets/collectibles?limit=10&sortOrder=Asc) experienced degraded performance:

HTTP code: 200
Response time: 4963 ms

Resolved: Inventory API Endpoint performance has improved in c98fc35.


Auto-detect joystick axis origins

Currently, each axis' origin is its center which makes sense for analog sticks, but not for triggers.
Trigger origins are often on one end or the other of the axis currently, which, along with the current automatic deadzone system, renders these triggers unusable.
My suggestion: detect the axis origin at the same time as the deadzone, by taking the origin to which it is the closest to (whether -1, 0, or 1)
Examples:
Analog sticks' resting positions are centered, auto-detection should therefore use an origin of 0.
Triggers' resting position are on the -1 end of the axis, therefore, their origin should be auto-detected to -1.
That being said, SDL would remove the need for such detection given that triggers seem to be handled directly at SDL level if we look at #3708 as well as this piece of documentation:
https://wiki.libsdl.org/SDL_GameControllerAxis // https://wiki.libsdl.org/SDL_GameControllerGetAxis

This should now be resolved via #3900 (with --sdl enabled). Going to tentatively close - please comment if you have an issue with a specific controller.


Can not delete items in canvas for leaflet 0.7.7

leaflet.draw should support 0.7.7 but in canvas mode with leaflet v07.7  I can not delete items.

+1

+1
Same Problem here, do you have a solution?


How i can read width and height from raw data by mcu of jpeg without header?

Hi,
How i can read width and height from raw data by mcu of jpeg without header?
Also i have some jpeg have wrong alginment like this and how we automate fix it by remove the mcu or pixel from jpeg

The blocks in your file are all wrong:
jpegrepair 173756131-1631900b-dbb8-40f0-a8cd-1f801d8d0040.jpeg 173756131-1631900b-dbb8-40f0-a8cd-1f801d8d0040-fix.jpeg dest 0 0 delete 48

jpegrepair cannot determine width and height from raw data.
Usually the image size is known by using other images from the same camera.
Once the image has a proper header
if you need to insert or delete blocks, you could do something like this:
jpegrepair  173756131-1631900b-dbb8-40f0-a8cd-1f801d8d0040.jpeg  test.jpg dest 0 0 insert 23
But as @zvezdochiot  mentioned that is not all correct. The image size is not correct in the header or blocks need to be moved with 'copy'.

jpegrepair cannot determine width and height from raw data.
Usually the image size is known by using other images from the same camera.
Once the image has a proper header
if you need to insert or delete blocks, you could do something like this:
jpegrepair  173756131-1631900b-dbb8-40f0-a8cd-1f801d8d0040.jpeg  test.jpg dest 0 0 insert 23
But as @zvezdochiot  mentioned that is not all correct. The image size is not correct in the header or blocks need to be moved with 'copy'.

Could you suggest how we use this for batch jpeg because some jpeg have difference align error like this?

Hi @HanalogInstruments,  unfortunately, every image is likely different. It will be a manual process.
Your image seems to have misplaced blocks.  But even moving them does not quite align.
More investigation is needed to see if jpegrepair can be adjusted to fix this type of corruption.  It will still be manual, though.
jpegrepair  173756131-1631900b-dbb8-40f0-a8cd-1f801d8d0040.jpeg  test.jpg dest 0 0 insert 23 dest 0 0 42 23 copy 1 0

@HanalogInstruments do you have the original corrupted files for these (with corrupted headers)? so we can have a better understanding of the specific corruption.

I have some jpeg encrypted 153605 bytes from the header so only raw data without SOI-SOS
Sample:
https://drive.google.com/file/d/1emXcVGL3dWm7-ctVQT9by4_6Uie0MkzX/view?usp=drivesdk
Files I use (IMG_1333*) have standard tables - Huffman tables from JPEG standard and quantization tables for max quality (all "1").
But i need to fix information in SOF:
MCU layout (DataUnit per MCU) -> done ( s2x1.jpg ) ( same chroma sampling 4:2:2 )
Image dimensions -> i need you help to decode raw data to get width and height
https://drive.google.com/drive/folders/1Ylc61SRLVCjZ2nSla7e-8xmfg95EyMuu
Note:
use S2x1.jpg file as good header cut from SOI -> FFDA + 12 bytes
cut 0-153605 bytes ( dec ) of .jpg.nppp or jpg.wiot and merger it to the good header s2x1
because width and height from good header diffrence than the raw data from corrupted .jpg.* so we need to decode raw data and get width and height

173756189-7a05d3ed-286b-42b0-bd5e-d8a9905451bf.jpeg fixed.jpg seems to be fixed with:
jpegrepair  173756189-7a05d3ed-286b-42b0-bd5e-d8a9905451bf.jpeg fixed.jpg dest 0 0 delete 307
I was curious about 173756131-1631900b-dbb8-40f0-a8cd-1f801d8d0040.jpeg, as blocks/subblocks were in the wrong place.  Do you have the corrupted file for this?

This could be of help: https://quippe.eu/blog/2016/11/17/determining-minimum-coded-unit-dimensions.html

@dmahurin
Could you read the MCU look like this via code?
I think we found how to auto algin when we read the start MCU lenght from the block: and insert byte follow this blank MCU lenght
Pictures.zip

@HanalogInstruments

This could be of help: https://quippe.eu/blog/2016/11/17/determining-minimum-coded-unit-dimensions.html

This script gets the dimensions from the SOF, not from MCU.  Perhaps I misunderstand what you are suggesting.

@HanalogInstruments

This could be of help: https://quippe.eu/blog/2016/11/17/determining-minimum-coded-unit-dimensions.html

This script gets the dimensions from the SOF, not from MCU.  Perhaps I misunderstand what you are suggesting.

This is from SOF, i'm try suggest you this:

@HanalogInstruments

This could be of help: https://quippe.eu/blog/2016/11/17/determining-minimum-coded-unit-dimensions.html

This script gets the dimensions from the SOF, not from MCU. Perhaps I misunderstand what you are suggesting.

Can you try to update the width estimating & algin method from this to jpegrepair?:
https://arxiv.org/pdf/1410.2100.pdf
https://www.sciencedirect.com/science/article/pii/S1877050916317082

@dmahurin could you made a python script to insert or delete loop mcu from range like this and files save?

Hi @HanalogInstruments
See https://github.com/ImageProcessing-ElectronicPublications/jpeg-decomp ,

Hi @HanalogInstruments
See https://github.com/ImageProcessing-ElectronicPublications/jpeg-decomp ,

I have made it automate done:
https://github.com/dmahurin/jpegrepair/assets/100456607/cde45f22-1e3f-407f-a280-2e6515e47354


Move REDAXO version to /docker-compose.yml

Move REDAXO version from Dockerfile to /docker-compose.yml to improve maintainability.
https://github.com/FriendsOfREDAXO/redaxo-mit-docker/blob/2f2b18262a5438775e97eccca8b2b91e2fa377a8/docker/php-apache/Dockerfile#L28-L30

Too much hassle with args and env and stuff. We’ll just keep it as it is.


Dev to Main sync

Date: 25-08-2023
Developer Name: @Aryex82 @sahsisunny @Abhay5855 @satyam73
Please create the following index in firestore: https://github.com/Real-Dev-Squad/website-backend/issues/1463
PR Number(s):-
#1419 #1454

#1426

Issue Ticket Number:-

#1429

Backend changes

[X] Yes
[ ] No

Frontend Changes

[X] Yes
[] No

Database changes

[ X] Yes
[] No

Breaking changes (If your feature is breaking/missing something please mention pending tickets)

[ ] Yes
[X] No

Deployment notes
Any special instructions for the deployment
Tested in staging

[X] Yes
[ ] No

Date: 25-08-2023 Developer Name: @Aryex82 @sahsisunny @Abhay5855 @satyam73
Please create the following index in firestore: #1463 PR Number(s):- #1419 #1454

FEATURE: Fetch list of users based on last PR merged #1426

Issue Ticket Number:-

Add new API for fetching list of users based on last PR merged #1429

Backend changes

[x]  Yes
[ ]  No

Frontend Changes

[x]  Yes
[] No

Database changes

[ X] Yes
[] No

Breaking changes (If your feature is breaking/missing something please mention pending tickets)

[ ]  Yes
[x]  No

Deployment notes Any special instructions for the deployment
Tested in staging

[x]  Yes
[ ]  No

#1426


Revert "Bump activesupport from <IP_ADDRESS> to <IP_ADDRESS>"

Reverts phildini/stayinghomeclub#1483 due to ruby issues.

Closing in favor of https://github.com/phildini/stayinghomeclub/pull/1487


minor updates to readme and patches to npm

I think it's ok if I merge my private fork into a branch here myself


feat: auto update kpm version by git tag.

1. Does this PR affect any open issues?(Y/N) and add issue references (e.g. "fix #123", "re #123".):

[ ] N
[x] Y

fix #67

2. What is the scope of this PR (e.g. component or file name):

3. Provide a description of the PR(e.g. more details, effects, motivations or doc link):

[x] Affects user behaviors
[ ] Contains syntax changes
[ ] Contains variable changes
[ ] Contains experimental features
[ ] Performance regression: Consumes more CPU
[ ] Performance regression: Consumes more Memory
[ ] Other

4. Are there any breaking changes?(Y/N) and describe the breaking changes(e.g. more details, motivations or doc link):

[x] N
[ ] Y

5. Are there test cases for these changes?(Y/N) select and add more details, references or doc links:

[x] Unit test
[ ] Integration test
[ ] Benchmark (add benchmark stats below)
[ ] Manual test (add detailed scripts or steps below)
[ ] Other

6. Release note

Please refer to Release Notes Language Style Guide to write a quality release note.
None

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

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

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
701

Relevant Lines:
1742

💛  - Coveralls


No folder named "Labels", Tuple Index out of range, size mismatch.

First I think there's a small error in the README tutorial: Should the correct directory should be data/labels instead of data/classes ?
Anyways, I get the following traceback:
/home/nic/.conda/envs/piwise/lib/python3.6/site-packages/torch/nn/functional.py:1423: UserWarning: nn.functional.upsample_bilinear is deprecated. Use nn.functional.upsample instead.
  warnings.warn("nn.functional.upsample_bilinear is deprecated. Use nn.functional.upsample instead.")
/home/nic/machineLearning/Automatter/machine-learning/piwise/piwise/criterion.py:13: UserWarning: Implicit dimension choice for log_softmax has been deprecated. Change the call to include dim=X as an argument.
  return self.loss(F.log_softmax(outputs), targets)
Traceback (most recent call last):
  File "main.py", line 163, in <module>
    main(parser.parse_args())
  File "main.py", line 138, in main
    train(args, model)
  File "main.py", line 85, in train
    board.image(color_transform(outputs[0].cpu().max(0)[1].data),
  File "/home/nic/machineLearning/Automatter/machine-learning/piwise/piwise/transform.py", line 48, in __call__
    color_image = torch.ByteTensor(3, size[1], size[2]).fill_(0)
IndexError: tuple index out of range

My first attempt at an obvious solution was to change it to
color_image = torch.ByteTensor(3, size[0], size[1]).fill_(0)
But I still have a size mismatch error. Tensor is 256 x 256 and Mask is 256.

First I think there's a small error in the README tutorial: Should the correct directory should be data/labels instead of data/classes ?

Yes, I think it should be 'data/labels'. The README was not updated a while.

My first attempt at an obvious solution was to change it to
color_image = torch.ByteTensor(3, size[0], size[1]).fill_(0)
But I still have a size mismatch error. Tensor is 256 x 256 and Mask is 256.

The last time I used piwise which was more then a year ago. It worked straight out of the box, however memories are prone to failures. Some things I would suggest:

Did any pytorch api change?
Try different indices (debug the program)?
You used the Pascal VOC 2012 data?

I am not sure if this has any relevance but the color_transform takes an image labeled 0 to 17, 255 and converts it into a color images where each label has distinct colors. The implementation was more or less copy and paste from the Matlab script Pascal VOC 2012 provides.

I have the same issue. Did you find a solution?

No, I have not. Sorry I'm not of more help.
On Sat, May 5, 2018, 2:30 AM henning3871<EMAIL_ADDRESS>wrote:

I have the same issue. Did you find a solution?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/bodokaiser/piwise/issues/17#issuecomment-386792724,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ASZsAXVRRshLZUAPP9BdYYkxoDoTqdWwks5tvXEegaJpZM4R6LNt
.

The problem should be in transform.py. You can try deleting the lines 101 to 111 in main.py and try again.

board.image(color_transform(targets[0].cpu()[0].data)  will fix

This is caused by the gray_image 's axis,   after add this line  code
gray_image = gray_image.view(1,256,256)
in transform.py line 47,
the issue is solved.
    def __call__(self, gray_image):
 gray_image = gray_image.view(1,256,256)
  size = gray_image.size()
  color_image = torch.ByteTensor(3, size[1], size[2]).fill_(0)


[fix](inverted index) better support for Chinese tokenizer with default conversion to lowercase

…ult conversion to lowercase
Proposed changes
https://github.com/apache/doris/pull/32841

Further comments
If this is a relatively large or complex change, kick off the discussion at<EMAIL_ADDRESS>by explaining why you chose the solution you did and what alternatives you considered, etc...

run buildall

run feut

run buildall

run p0


API error

The API status says "error" but I click through and all is well?  First time user, so I'm not sure what to expect.

Bug Report Dump (Auto-generated)

Version 1.27.2<PHONE_NUMBER>)
Device: iPhone 7 (iOS 12.4)
TestFlight: false

+1
Sent with GitHawk

Hi @ke4roh, thanks for letting us know! This has been fixed and will be available in the next update.
You should be able to use the app regardless of the reported error.
See #2546


Nextion display support

Hi so I have a nextion display I was wondering if anyone has used this to control devices and if so do you have any examples

Can you be more specific with your request?  Are you currently using HomeSpan to control accessories via the Home App on your iPhone and want to add a nextion display to provide additional manual control?

Can you be more specific with your request? Are you currently using HomeSpan to control accessories via the Home App on your iPhone and want to add a nextion display to provide additional manual control?

Hi, yes we are currently using homeSpan and using our phones, so now we would like to have nextion displays to control the lights, fans, etc locally.
So I tried setting something up but it doesn't work the way I want it to.
So the way I have it kinda working is that the nextion display is communicating over serial and using the esp32 as a "StatelessProgrammableSwitch" detecting a long and single press to turn on and off the lights and fans.
The only problem is now I can update the home app tile using the programmable switch but once you control it from the app, the screen "Nextion Display" does not update so its then kinda pointless.
So maybe you can add a function that you can notify the network that an accessory has been updated or changed then you can use any device to update another accessory or something like that. I haven't looked into any code as I would have to learn  how it works and I don't really have the time do that right now, but you might know how to make something work quick.
I hope you can work on a solution as I think it would really be a cool add-on for this service.

If the Nextion Display is attached to the same device that physically controls the lights, fan, etc., then you should be able to update is locally within the update() loop (no need to using  StatelessProgrammableSwitch).  But if the display is attached to a separate ESP32 device, then StatelessProgrammableSwitch is the best way to communicate changes to the Home App, which in turn then communicates with the ESP32 device running HomeKit to perform the action (or any HomeKit device, not just a HomeSpan ESP32).
The problem with StatelessProgrammableSwitch is that by definition it's stateless:  Communication is only one way.  To solve this one would need an "out-of-band" communication between the two ESP32 devices that operates distinct from HomeKit.  A second, though more kludgy way, would be to create a duplicate copy of the fan and light Services on the ESP32 with the Nextion Display and configure your Home App with duplicate tiles assigned to an undisplayed room that are activated when the main tile for a light/fan is activated.

So I've thought of one way of doing this is by broadcasting a message across all the esp’s using esp.now but I’m not sure if that would work, I don’t know if you have worked with esp.now, or know of any software that can broadcast over the network like mqtt as then it would make this really easy.

Version 1.7.0 of HomeSpan (just released) now includes integrated support of ESP-NOW via a dedicated SpanPoint class.  See the tutorial for details.


Other functions from modernc.org/sqlite

Hi! First of all Thank you for this project 🌷
How  i can benefit from other features with the modernc.org/sqlite driver?
For example, I can create a custom SQLite function by writing this:
import sqlite "modernc.org/sqlite"

func main() {
// register a new sqlite function! easily: (e.g SELECT new_id();)
sqlite.MustRegisterScalarFunction("new_id", 0, newID)

// ....

}

But this function (and others) doesn't appear in your driver.
Thanks 🤗

Sure,
you must directly use the underlying driver
import (
   sqliteDriver "github.com/glebarez/go-sqlite"
  "github.com/glebarez/sqlite"
  "gorm.io/gorm"
)

// register a new sqlite function! easily: (e.g SELECT new_id();)
sqliteDriver.MustRegisterScalarFunction("new_id", 0, newID)

// create GORM DB
db, err := gorm.Open(sqlite.Open("sqlite.db"), &gorm.Config{})


[C++][Gandiva] A question about Gandiva's GetResultType for DecimalType

Describe the bug, including details regarding any error messages, version, and platform.
Below codes calculate the decimal type's precision and scale.
https://github.com/apache/arrow/blob/30e6d72242e376baa598b2e8f1d9b80d800a974c/cpp/src/gandiva/decimal_type_util.cc#L62
It seems different from our Redshift’s decimal promotion rules, is there any relevant background here?
scale = max(4, s1 + p2 - s2 + 1)
precision = p1 - s1 + s2 + scale

It may cause the decimal divide results different from normal expression calculate.
Component(s)
C++ - Gandiva

@pravindra Could you take a look at this?

I think it's a problem and we should fix it.
Below code could prove this problem:
// Normal expression
TEST(DecimalTest, Divide) {
  auto expr = arrow::compute::call("divide", {arrow::compute::field_ref("f1"),
                                              arrow::compute::field_ref("f2")});
  auto s = arrow::schema({arrow::field("f1", arrow::decimal128(11, 3)),
                          arrow::field("f2", arrow::decimal128(20, 9))});
  ASSERT_OK_AND_ASSIGN(expr, expr.Bind(*s));
  arrow::AssertTypeEqual(*expr.type(), *arrow::decimal128(32, 15));

  auto b = arrow::RecordBatchFromJSON(s, R"([
    ["1.982", "1.000000001"]
   ])");
  ASSERT_OK_AND_ASSIGN(auto input, arrow::compute::MakeExecBatch(*s, b));
  ASSERT_OK_AND_ASSIGN(auto res,
                       arrow::compute::ExecuteScalarExpression(expr, input));
  arrow::AssertArraysEqual(
      *res.make_array(),
      *arrow::ArrayFromJSON(arrow::decimal128(32, 15), R"(["1.981999998018000"])"));
}

// gandiva test
TEST_F(TestDecimalOps, TestDivide) {
  DivideAndVerify(decimal_literal("1982", 11, 3),
                  decimal_literal("1000000001", 20, 9),
                  decimal_literal("1981999998018000001982", 38, 21));
}

For normal expression results:

Below codes could prove this problem:

I'm not sure what is the important part in the codes. Could you explain it?

our Redshift’s decimal promotion rules

Could you show the URL that describes the rule?

is there any relevant background here?

Based on the kMinAdjustedScale comment, it seems that the current precision doesn't have strong reason but it's compatible with SQLServer and Impala:
https://github.com/apache/arrow/blob/6b1e254f3b62924f216e06e9e563e92c69f9efd3/cpp/src/gandiva/decimal_type_util.h#L54-L58

I'm not sure what is the important part in the codes. Could you explain it?

The test codes is the decimal divide operation in compute expression and gandiva expression.
We input the save decimal type (11, 3), (20, 9) with same input arr-data, but the results are different.
For compute expression, divide result's decimal type is (32,15); but gandiva expression's result is (38, 21).

Could you show the URL that describes the rule?

Below rules is our compute expression's rules:
https://github.com/apache/arrow/blob/9f0a28f61a068059a6e53f25a3ffcb1689d701ec/cpp/src/arrow/compute/kernels/codegen_internal.cc#L421
And the compute doc:
https://github.com/apache/arrow/blob/4fe364efa4be98b35964509e0e3d57a421a48039/docs/source/cpp/compute.rst#L501-L520.

Based on the kMinAdjustedScale comment, it seems that the current precision doesn't have strong reason but it's compatible with SQLServer and Impala:

Yes, but maybe we should unify these rules between compute expression and gandiva expression. Or the results will be different when user do optimize expression with gandiva?

Ah, I understand. You referred our compute module's behavior by "our Redshift’s decimal promotion rules". I thought that you refer Redshift's rules not our compute module's one.
I don't object that Gandiva can also use the rules but it breaks backward compatibility. Can we support both rules and use the current rule by default for compatibility?

I thought that you refer Redshift's rules not our compute module's one.

Actually our compute module's decimal rules is the same with Redshift's rules. Compute module implement the rules by two step:

Implicit cast. The logic is in CastBinaryDecimalArgs.
Output resolve. The logic is in ResolveDecimalDivisionOutput.

All these two steps are in expression Bind, and form the rules same with Redshift's numeric rules.

I don't object that Gandiva can also use the rules but it breaks backward compatibility. Can we support both rules and use the current rule by default for compatibility?

Agree.

@kou Added the compatibility in the pr. PTAL?

Issue resolved by pull request 40434
https://github.com/apache/arrow/pull/40434


accoundIdAndroid should be passed to SKPayment

Version of flutter_inapp_purchase
2.1.0
Platforms you faced the error (IOS or Android or both?)
IOS
Expected behavior
SKPayment has a applicationUsername property to determine who the customer is.
https://developer.apple.com/documentation/storekit/skpayment
It appears that requestSubscription / requestPurchase don't supply accoundIdAndroid to SKPayment
Actual behavior
N/A
Tested environment (Emulator? Real Device?)
Untested
Steps to reproduce the behavior
Reading documentation and library code

@peeto I was implementing this feature currently but found out that this is not passed down as arguements. Refer to https://stackoverflow.com/questions/37202248/how-to-assign-skpayment-applicationusername.

Would you provide more information about how should we support this?

The github issue is vague in it's response but I think it may be referring to this: https://developer.apple.com/documentation/appstorereceipts/transaction_id


Plans with dash in ID

I have a bunch of existing plans that I'm integrating with, and there plan IDs contain dashes ("-").
Any idea how I can integrate dashes into the Stripe.plan stuff?
I've tried:
Stripe.plan :'EU-2015' do |plan|
...
end
Stripe.plan 'EU-2015' do |plan|
...
end
...but no luck :(

'EU-2015'.to_sym

Sorry @lehresman, but that throws error:
rake aborted!
NameError: wrong constant name EU-2015
I tried:
Stripe.plan 'EU-2015'.to_sym do |plan|
...
end

Stripe.plan :hm_3_month do |plan|
  plan.name = "HealthMate 3-Months service"
  plan.amount = 3000
  plan.currency = "usd"
  plan.interval = "month"
  plan.interval_count = 3
  # plan.trial_period_days = 30
end

So how do I access it?  I've tried different things. I apologize in advance if it's a dum question.

@AndreiMotinga are you sure you dont just have to restart the rails console? :)

I did, multiple times. Just tried again and the same result.

I did, multiple times. Just tried again and the same result.
On Tue, Apr 12, 2016 at 1:40 PM, Gunnar Fornes<EMAIL_ADDRESS>wrote:

@AndreiMotinga https://u2176184.ct.sendgrid.net/wf/click?upn=TahjQDBmxsN33AqtL8JzHC3d-2BSpE0ugBZ32avTepADku7IZsJExAaD3EajwqXbpa_s5UH8bhnBaopYjthcNSRcYa2BzBl1KuOfIalXuq7k5zkvJDNcLUeDl-2FqOZNjtc5UGVAgoFTi8i4a2aIDNQqPh1O29n6nO0e9G79C4G0Dz0DoVG7uUUBMa-2FaAxsmzzRChl-2BpVemi-2Fvp3TXgsOw6J42Y5Y6ZLcE-2FHLAZ6A0Fj5tr3FzEbhdBovWCtHh-2BmfTvFIhd6XwUUgVbnckqAqpyHlajLdrd6SkDUHiPNYLY9mFavwCRLLn1DfmR66EjLUNw3V-2BXr7Vt5mWCx-2FQmZfkaAm8FVaTm0KXC2LPyST3JOAsat9o0CaeQxsZMRmqy9dh0VqyKXgEjtx8xLSYdzNozpewQ-3D-3D are you sure you dont
just have to restart the rails console? :)
—
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub
https://u2176184.ct.sendgrid.net/wf/click?upn=TahjQDBmxsN33AqtL8JzHJEzDz2neYwl50rwz8htzYSslXApQf-2Fr60ObRwMEc-2F4VdIZ4XBRCyEMpnrUeUX8WETkBxj3fce1tQKw249AfnuFj5h4T24owRKA7f9IgSom9_s5UH8bhnBaopYjthcNSRcYa2BzBl1KuOfIalXuq7k5zkvJDNcLUeDl-2FqOZNjtc5UGVAgoFTi8i4a2aIDNQqPh1O29n6nO0e9G79C4G0Dz0DoVG7uUUBMa-2FaAxsmzzRChl-2BpVemi-2Fvp3TXgsOw6J42Y5Y6ZLcE-2FHLAZ6A0Fj5tr3FzEbhdBovWCtHh-2BmfTvFIMU4uWBU6GD8RW823UqNGjuIPEzPDd-2BcJDhtANBNSkrIh6lB-2FlgWpmfMNYMp0z4kSv0SraiZAWycuRj8Q4cqOWQ6PbtfToLT0C-2Bv-2BOISxV34D-2B3Z-2F8-2FgMiUkyHXPxm2HxaE0EngGB2QaezPTXRlDZGQ-3D-3D

Hi @gunnar2k
Unfortunately stripe-rails tries to convert the plan id into a Ruby constant so the dashes are not going to work.
https://github.com/Everapps/stripe-rails/blob/b87d7460781c094223f46c211241a6b7c556f60b/lib/stripe/configuration_builder.rb#L70-L73
I can see why you'd want to integrate existing plans into the gem (and I can sympathize!) but I probably will not change the way the code works. It doesn't seem like it is possible to update the plan id, so you might have to create new plans instead.

Hi @tansengming I too am having this issue with existing plans with spaces.  I'd like to keep using this gem though as it offers a lot of other conveniences.
How about adding another attribute to the plan config constant_name that is used to define the Ruby constant, if present, instead of relying on the id?

@alexagranov that could work! I'll be happy to review an implementation of this if you'd like to take a stab at it.

Will try and get stabby in the next couple days. ;-)  Thanks for the quick reply on a closed issue!

https://github.com/tansengming/stripe-rails/pull/143


Improve Readme

Wanted to improve the readme and add a 3.3.0 changelog. Hope you don't mind I listed myself as a contributor.

thanks :)


How many iterations are an epoch?

@hkchengrex How many iterations are an epoch When training on youtubevos and Davis?

You can do print(len(train_loader))


PIM JSON dump corrupted

We have witnessed an invalid JSON dump of the PIM store on the backend (see the image). The error may have a connection to the front-end crash during the artifact preview.

It is unsafe to use fs.writeFile() multiple times on the same file without waiting for the callback. For this scenario, fs.createWriteStream() is recommended.

https://nodejs.org/dist/latest-v10.x/docs/api/fs.html#fs_fs_writefile_file_data_options_callback


[5.5] Stage the swift_continuation_await ABI change

Introduce a fake (but non-ABI) declaration to the swiftinterface which marks that an SDK support swift_continuation_await, and then only call it if that declaration exists, otherwise falling back on the old atomic sequence.  Using that sequence will badly mess up the runtime's tracking of task state, but it might still work, and more importantly things will still build, which solves the short-term problem.  Hopefully we can remove this hack soon.
Fixes rdar://problem/80787731.  5.5 version of https://github.com/apple/swift/pull/38528.

@swift-ci Please test


nyc test coverage not working with my project

https://github.com/duongduckien/backend-chat-app

Expected Behavior
I have already written 12 unit test with mocha, sinon, and chai. but the test coverage doesn't seem work correctly. all the statement isn't covered at all.
here is my nyc config:
"nyc": {
    "check-coverage": true,
    "all": true,
    "cache": false,
    "watermarks": {
      "lines": [
        80,
        95
      ],
      "functions": [
        80,
        95
      ],
      "branches": [
        80,
        95
      ],
      "statements": [
        80,
        95
      ]
    },
    "exclude": [
      "src/migrations",
      "src/seeds",
      "tests/",
      "ormconfig.ts",
      "src/app.ts"
    ],
    "include": [
      "src/**/*.ts"
    ],
    "extension": [
      ".ts"
    ],
    "require": [
      "ts-node/register"
    ],
    "reporter": [
      "text-summary",
      "html"
    ],
    "sourceMap": true,
    "instrument": true
  }

i don't know why it didn't cover the statement in the test case. did I do wrong the config
Observed Behavior
Troubleshooting steps

[x] still occurring when I put cache: false in my nyc config

Environment Information

it's working when I run the test with npm, I ran yarn before.

See https://github.com/istanbuljs/nyc/issues/921 and https://github.com/yarnpkg/yarn/issues/6746.

@duongduckien please test with nyc@next and let us know if that works for you.

@coreyfarrell I am experiencing the same problem. I took your advice and upgraded to nyc@next, but the issue persists.
Node Versions: 8.10, 10.16.3
NVM Version: 0.35.1
tsconfig.json
  "compilerOptions": {
    "module": "commonjs",
    "target": "es6",
    "inlineSourceMap": true,
    "moduleResolution": "node",
    "allowJs": false,
    "noEmit": true,
    "strict": false,
    "isolatedModules": false,
    "esModuleInterop": false
  },
  "include": [
    "src/**/*",
    "typings/**/*"
  ],
  "exclude": [
    "node_modules",
    "**/*.spec.ts",
    "test/**/*"
  ]
}

package.json.nyc
"nyc": {
    "extension": [
      ".ts"
    ],
    "require": [
      "ts-node/register"
    ],
    "include": [
      "src/**/*.ts"
    ],
    "exclude": [
      "**/*.d.ts"
    ],
    "reporter": [
      "text",
      "html"
    ],
    "all": true,
    "cache": false,
    "sourceMap": true,
    "instrument": true
  }

@j0nathan-ll0yd please open a new issue providing all required information.


Add .circleci/config.yml

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

what's this PR intended for?


Closure Externs for D3?

Is it possible to have a externs file available for d3 so that for those of us who want to use d3 along with closure can easily use the library? d3 variables/functions are rewritten when compiled in ADVANCED mode.

I've created externs for d3 v4.2.7 and shared them at http://pastebin.com/A4an42b2
I've also been experimenting with compiling d3 together with its caller using advanced optimizations. I replaced the bootstrapping code with a simpler version that Closure Compiler understands, blacklisted 171 properties that would break after renaming, and suppressed a few warning classes.
The results are promising. Besides the simple optimizations the compiler can also remove roughly 60% of the unused code. The only blocker is that the function inlining pass breaks some functions that declare variables after their first use (https://github.com/d3/d3/issues/2978).

@pallosp you are an absolute legend.   I needed externs for d3-hexbin so here those are, although not with the same level of detail, but working.
var d3_hexbin = {
    "version": {},
    "hexbin": function () {},
};
d3_hexbin.hexbin.prototype.hexagon = function(radius) {};
d3_hexbin.hexbin.prototype.centers = function() {};
d3_hexbin.hexbin.prototype.mesh = function() {};
d3_hexbin.hexbin.prototype.x = function(_) {};
d3_hexbin.hexbin.prototype.y = function(_) {};
d3_hexbin.hexbin.prototype.radius = function(_) {};
d3_hexbin.hexbin.prototype.extent = function(_) {};


When will it be released in the plugins store? Is there a Roadmap?

Just wanted to ask when we can find it in the plugins store? Are there things to fix first? Or is there something missing?

I can publish the plugin only when the binaries are in the repository, this is the PR for the binaries: https://github.com/opnsense/tools/pull/281

Otherwise no, I'm not planning changes before the first release

@mmetc ok thank you for that information :)


How to extract posterior over latent states from CategoricalMarkovChain

How does one extract the posterior over latent states from CategoricalMarkovChain? The object has an array with shape (length of chain, number of latent variables, number of latent variables). I don't see a clear answer in the documentation (https://www.bayespy.org/user_api/generated/generated/bayespy.nodes.CategoricalMarkovChain.html) or the example (https://www.bayespy.org/examples/hmm.html).
This seems so simple. I must be missing something obvious.

I found my answer:
from bayespy.inference.vmp.nodes.categorical_markov_chain import CategoricalMarkovChainToCategorical

latents_posterior = CategoricalMarkovChainToCategorical(latents).get_moments()[0]

Ah, sorry for the late response, but glad you found a solution. I wrote a bit longer response here: https://github.com/bayespy/bayespy/issues/28#issuecomment-636459097


Update documentation about enabling spot instances

Description

Motivation and Context

Breaking Changes

How Has This Been Tested?

[ ] I have updated at least one of the examples/* to demonstrate and validate my change(s)
[ ] I have tested and validated these changes using one or more of the provided examples/* projects

[ ] I have executed pre-commit run -a on my pull request

thank you but I think instead we will rely on the Karpenter documentation since this is not specific to the module


Improve component test coverage: radio fields

What is the context of this PR?
Based on the proposal to change and move around existing tests into a more informative structure and to write a consistent set of tests for each component, feature and survey.
Proposal: https://github.com/ONSdigital/eq-survey-runner/blob/master/doc/architecture/decisions/0002-refactor-functional-tests-into-surveys-components-and-features.md
Trello Card: https://trello.com/c/JccErqI4/1429-improve-component-test-coverage-radio-fields
How to review
Check that the radio.spec.js makes sense and run the tests to check that they all pass
i.e. yarn test_functional -- --spec=components/radio

@yoganandkunche @jcox-dev @ajmaddaford can you re-review? or dismiss your reviews?

We've agreed as a team this isn't achieving what we set out to do - to make the functional component tests clearer and more consistent. There are two key issues with the current approach:

The test schemas are too large, this leads to unclear tests with commands to complete pages that aren't relevant to the tests in order to reach the summary page.
Doing the tests for the 'other' radio option with the plain radio options confuses the tests - most of the testing that gets done is for the 'other' radio option.

We've agreed to try a new approach:

All component test surveys should only contain one question page, for the radio component this would mean survey schemas for:

optional
mandatory
optional with optional other
optional with mandatory other
mandatory with optional other
mandatory with mandatory other

Each set of tests for each survey would be in it's own spec file
Therefore there should be some correlation between the test surveys directory structure and
the functional tests directory structure e.g. data/tests/components/radio/optional.json would be tested by tests/functional/components/radio/optional.spec.js


optimize branch logic

based on feedback from #49 from @Melirius

Analysing the code I got to conclusion that corner case even if present in the initial code of Lepton, does not affect its behaviour. Citing https://github.com/microsoft/lepton_jpeg_rust/blob/main/src/structs/branch.rs
The only corner case is that in the case of 255 true and 1
false, the C++ version decides to set the probability to 0 for the next
true value, which is different than the formula ((a << 8) / ( a + b )).
The formula produces 1 here, and this does not affect neither https://github.com/microsoft/lepton_jpeg_rust/blob/main/src/structs/vpx_bool_reader.rs#L147 nor https://github.com/microsoft/lepton_jpeg_rust/blob/main/src/structs/vpx_bool_writer.rs#L159 as from VP8 spec range of tmp_range is [128,255], so that both bugged and formula version give split = 1.

@danielrh @Melirius found a way to make this even faster

This is so cool! After all these years you found a nice win in the inner loop :-)


fix CurpGroup related tests

Please briefly answer these questions:
#376
#377

what problem are you trying to solve? (or if there's no problem, what's the motivation for this change?)

what changes does this pull request make?

are there any non-obvious implications of these changes? (does it break compatibility with previous versions, etc)

#396


Support of next major release

Do you have plans to support the next major version of go (1.15, 1.16) ?

Yes as with each new release of Go we will update the stdlib mapping: add 1.16 and drop 1.14


Import literal "module"#export hoists import { export } from "module"

Fixes #113 (auto imports) by introducing syntax "module"#export that turns into a ref resulting from import { export as ref } from "module".
But I'd like some feedback (here or in #113) on whether we have the right syntax here. (It should be easy to change.)
One thing I don't like about this notation is that the default export is rather verbose: "module"#default. We can't use "module"# because that refers to length.

I think the original syntax of a snug prefix ^ could work pretty well. Similar to how symbols fit in despite object properties and labels.
I’m not as big a fan of overloading the length syntax since it requires the quotes which reduces some of the benefits.
^ ModuleSpecifier seems like it handles everything except spaces and in that case it could be explicitly wrapped with quotes.
The main open questions are:

how to suffix the module specifier to differentiate default vs named vs *.
Should the auto imports be hoisted or dynamic implying async within the function. I assume hoisted but maybe we could also have a prefix/suffix that modifies it to become dynamic.

Sorry I can’t experiment more myself but I’m away from PC for the rest of the week. (Mobile interface is also why I accidentally untoggled draft on this PR 😵💫)

Thanks for the feedback; I agree. ^module does seem good, but it has the problem that (without a suffix) we don't know whether ^module.x is accessing property x of the import, or is just specifying an extension of .x in the module filename. (See the recent discussion in #113.)
So I think we need some kind of character after the module name. This is what led me down the # path: ^module#export and ^module# for the default export. I went aggressive and removed the ^ but in hindsight I think that was a mistake. Maybe there's a better character than #. (Or require quotes, as in ^"module", but then how do we specify the export? ^"module"export seems weird.) If we want to embrace ^, we could go for ^module^export. And ^module^ could be the default export. I'm not sure whether this is better... It feels a little weird that module and export are different things but they get the same character.
I had forgot about * import. Maybe ^module* or ^module^* could work well for this?
I always had in mind that ^ meant "hoist to top", so I was favoring static import. But I agree a dynamic version could be nice. Dynamic is a bit less necessary because you could just put a (dynamic) import declaration on the previous line of where you need it. But still could be a bit more concise via this syntax (with an extra symbol or something to denote dynamic).

Maybe : for named export, ^. for property? And plain . is always part of the file name. We’ll need to play around to see what we prefer to be most common.

Unfortunately, we can't use : for named property because we want to support ^node:fs as a module name.
I wish we could use the same symbols from an import declaration, as in ^module{export}, which would mesh well with glob notation. Unfortunately, glob notation would dictate returning an object {export}, not the export itself, which isn't what we want.
Similar to ^module^export, Vendethiel points out we could do "module"^export. I find the ^ in the middle (in both cases) a little weird looking though, I think because it's so different from pinning, and it's weird to say "hoist this" in the middle. Maybe I should think of ^ as weird quotes and ^module^ is then balanced. Or maybe there's another symbol for the middle... ^module//export?

Here's a weird idea: if ^module is the default export and ^module* is the * export, then a named export would be equivalent to ^module*.export. So perhaps a natural shorthand would be ^module*export? (Similar to how ? is shorthand for ?., etc.) Certainly * is a rare character for a filename (because of globs). Though it is plausible that the default export is a number and you'd want to multiply it, you could use spaces in that case (^module * 2).
^module // import ref1 from 'module'
^module* // import * as ref2 from 'module'
^module*foo // import {foo as ref3} from 'module'
// or just use ref2.foo

Weirder idea: *module could be notation for the * export of module. Then *module.export is how we'd write the named export. Currently * isn't used as a prefix operator (except for generator methods), and it's a reasonable pneumonic that it's equivalent to import * from. I think the only downside is that we need a completely different notation for default export. Is it too much use of ASCII characters to reserve ^module for default export and *module for * export?
^module // import ref1 from 'module'
*module // import * as ref2 from 'module'
*module.foo // import {foo as ref3} from 'module'
// or just use ref2.foo

I think // is pretty interesting for the named export.
^lodash/add
^lodash//add

import ref from "lodash/add"
import add as ref1 from "lodash"

The advantage is it allows single / to remain the regular path separator. We could also consider defaulting . to being property access and require it being escaped or the whole path to be quoted for it to appear in the path since it seems uncommon there.
*. as a suffix seems pretty good for property access after a star import. I think star import is generally rare except for common JS compatibility.
Favoring default export and paths may help with code splitting.

Cool, // does look pretty compelling in that example. I assume people aren't going to use this syntax with whole URLs (though we could also allow those, by not allowing // to be preceded by :).
I forgot that // also means one-line comment. Are we OK with using it here, provided there is no space? We already have some exceptions to // being a comment, like ///...///. And the module name already has special unquoted string handling, so maybe it makes sense to have some magic. But I guess we would also have ^"module name"//export.

We could also consider defaulting . to being property access and require it being escaped or the whole path to be quoted for it to appear in the path since it seems uncommon there.

So including an extension in the filename would require quotes? Hmm, also an interesting idea. I guess we could still allow for leading ./ and ../../ which are also common. But with so many .s in module names, I think this might feel a little weird.

*. as a suffix seems pretty good for property access after a star import. I think star import is generally rare except for common JS compatibility.

My point was that import * as foo from 'module'; foo.bar is semantically equivalent to import { bar } from 'module'; bar (I think), so we could use ^foo*.bar or ^foo*bar as notation for either (probably preferring the latter compilation). That is, *.bar or *bar could act like //bar above. Though I guess if you do weird stuff like ^foo*.bar = 5 (changing the * import) then the future use of ^foo*.bar becomes murky...

On Discord, @vendethiel reminds us that the original PR's string-based approach would work well with ^ (as a suffix):
"module"^ // import ref from "module"
"module"^export // import { export as ref } from "module"
"module"^* // import * as ref from "module"

Could also add fun things like "module"^{export1,export2} to get multiple exports in an object.
We're overloading binary XOR (for named exports) but that seems fine for string literals.
If we wanted an unquoted version, we could use ^module^ and ^module^export (where ^ are acting more like quotes). This could co-exist with the quoted version.

I went ahead and implemented the following:
^module^ // import ref from "module"
^module^export // import { export as ref } from "module"
^module^* // import * as ref from "module"

"module"^ // import ref from "module"
"module"^export // import { export as ref } from "module"
"module"^* // import * as ref from "module"

Mostly I wanted to implement the * and default import machinery, which we'd need no matter what syntax we use.
We don't need to use this syntax, but I wanted to nudge a bit in this direction. I like that ^ is the sole character that represents import literals, and "^ as quotes" is starting to grow on me... I'm also not sure whether to keep both syntaxes or just one, or to use something else entirely.

If the quoted strings exist as a fallback we could do a more concise prefix caret for common cases:
^underscore/modules/map // import ref from "underscore/modules/map"
^underscore.map // import { map as ref } from "underscore"
^underscore.* // import * as ref from "underscore"

"module"^ // import ref from "module"
"module"^export // import { export as ref } from "module"
"module"^* // import * as ref from "module"

I generally prefer the prefix caret since it limits backtracking but a postfix caret could also work.

^underscore.map // import { map as ref } from "underscore"
^underscore.* // import * as ref from "underscore"

If we're going to require quotes for extensions and give . over to the language, I would have expected . to mean property access. In particular, I would have guessed ^underscore.map to correspond to import ref from "underscore"; ref.map. Maybe this would be a good place for //, as in ^underscore//map?
Combining with your suggestion of prefix caret (less backtracking is maybe also a good argument for human readers):
^underscore/modules/map // import ref from "underscore/modules/map"
^underscore.map // import ref from "underscore"; ref.map
^underscore//map // import { map as ref } from "underscore"
^underscore//* // import * as ref from "underscore"

^"./module.js" // import ref from "./module.js"
^"./module.js//export" // import { export as ref } from "./module.js"
^"./module.js"//* // import * as ref from "./module.js"

Or is conflict with comments too weird? (I didn't add syntax highlighting because it looks terrible.) At this point we could also consider # again: after a caret is a very special context.
^underscore/modules/map // import ref from "underscore/modules/map"
^underscore.map // import ref from "underscore"; ref.map
^underscore#map // import { map as ref } from "underscore"
^underscore#* // import * as ref from "underscore"

^"./module.js" // import ref from "./module.js"
^"./module.js"#export // import { export as ref } from "./module.js"
^"./module.js"#* // import * as ref from "./module.js"

Or we could follow the "^ means import" mantra and use it for module specifier and export specifier:
^underscore/modules/map // import ref from "underscore/modules/map"
^underscore.map // import ref from "underscore"; ref.map
^underscore^map // import { map as ref } from "underscore"
^underscore^* // import * as ref from "underscore"

^"./module.js" // import ref from "./module.js"
^"./module.js"^export // import { export as ref } from "./module.js"
^"./module.js"^* // import * as ref from "./module.js"

I'm still not sure I like any of these better than the currently implemented ^module^ syntax:
^module^ // import ref from "module"
^module^.map // import ref from "module"; ref.map
^module^export // import { export as ref } from "module"
^module^* // import * as ref from "module"

^./module.js^ // import ref from "./module.js"
^./module.js^.map // import ref from "./module.js"; ref.map
^./module.js^export // import { export as ref } from "./module.js"
^./module.js^* // import * as ref from "./module.js"

We could also consider snug : and :: in this context as a scope resolution kind of thing.

I don't think : is commonly used in an import path (full absolute Windows paths would be kinda bonkers IMO), so it's probably fine.
:: has some interesting prototype vibes (ignoring that coffeePrototype isn't on by default), pretending that ^module.prototype is the module itself, so its properties are the imports. I guess that would mean ^module:: would be the * import, while ^module::export would be the named export. Then the default export would be ^module, so it can't have any periods in it without using quotes?


Add option to run a local ELSEPA instance, without Docker

Draft. Comments welcome.

Is the "SimpleExecutable" wrapper worth it? I think the only thing it needs to do is call subprocess.run().
We should do better dependency checking, e.g. allow installation without Docker, and fail at runtime if it not available when ELSEPA_DIR is not set.

This approach doesn't allow multithreading (which works with docker). We're fine with just docker at the moment.