Asynchronous write still sync?

Hello,
First off, I'd like to thank you for this amazing library. It's the best around.
The issue:
I'm using the library with my Raspberry Pi 3b to make some music-playing floppy disks. I translated one program that I found online from C++ to Javascript and got Imperial March playing flawlessly on one floppy at a time.
The issue arrises when I try to play two of them simultaneously. The notes get strange and it seems like the commands are being interpolated.
Then I tried to spawn (with tmux) two node processes, one playing each floppy. This time I got the first floppy playing correctly, but the second one was mute until the first one stopped playing.
Question:
Is this something related to the Pi's GPIO being only able to handle one I/O at a time, or this is something related to the library itself?
This is my very first time working with GPIO, so I don't really know its limitations.
Environment:
Device: Raspberry Pi 3b
Distro: Raspbian GNU/Linux 9.3 (stretch)
Node version: v11.9.0
onoff version: 3.2.6
Here is my code: (View on GitHub)
//MIT Licensed: view README.md
const { promisify } = require('util');
const { Gpio } = require('onoff');
const timer1 = new (require('nanotimer'))();
const timer2 = new (require('nanotimer'))();
const timestamp = new Date();

function sleep(ms) {
    // return new Promise(resolve => setTimeout(resolve, ms));
    return new Promise(resolve => timer1.setTimeout(resolve, '', ms + 'm'));
}
function microsleep(us) {
    return new Promise(resolve => timer2.setTimeout(resolve, '', us + 'u'));
}

function millis(){
    return new Date() - timestamp;
}

const {
    Cn, Cs, Dn, Ds, En, Fn, Fs, Gn, Gs, An, As, Bn, Zz,
    Bs, Df, Dn2, Ef, En2, Es, Gf, Gn2, Af, An2, Bf, Bn2, Zz2
} = require('./notes');

/**
 * Frequencies in hundredths of Hz, e.g. middle A = 44000
 * 4 Octaves with 12 notes per octave, i.e. C to B
 */
const freq = [
    [ 13081,13859,14683,15556,16481,17461,18500,19600,20765,22000,23308,24694 ],
    [ 26163,27718,29366,31113,32963,34923,36999,39200,41530,44000,46616,49388 ],
    [ 52325,55437,58733,62225,65925,69846,73999,78399,83061,88000,93233,98777 ],
    [ 104650,110873,117466,124451,131851,139691,147998,156798,166122,176000,186466,197553 ]
];

/**
 * Frequency (in Hz) is converted to Floppy Delay using the formula:
 *    314000 / frequency = floppy delay
 * so middle A = 314000 / 440 = 714
 *
 * Lowest realistic note is delay = 1550
 * Highest realistic note is delay = 210
 */
const floppyConv = 31400000;

// Calculate all our floppy delays at the start
const floppyDelay = JSON.parse(JSON.stringify(freq));
for (let octave = 0; octave < 4; octave++)
    for (let note = 0; note < 12; note++)
        floppyDelay[octave][note] = floppyConv / freq[octave][note];

class Floppy {
    constructor(directionPin, stepPin){
        this.directionPin = new Gpio(directionPin, 'out');
        this.stepPin = new Gpio(stepPin, 'out');
        this.directionPin.write = promisify(this.directionPin.write);
        this.stepPin.write = promisify(this.stepPin.write);

        this.resetMotor();
    }

    async resetMotor(){
        await this.directionPin.write(0);
        for(let i = 0; i < 10; i++){
            await this.stepPin.write(1);
            await this.stepPin.write(0);
            await sleep(1);
        }

        await this.directionPin.write(1);

        for(let i = 0; i < 10; i++){
            await this.stepPin.write(1);
            await this.stepPin.write(0);
            await sleep(1);
        }

        await sleep(400);
    }

    async playNote(note, octave, length){
        let dir = 1;
        const pause = floppyDelay[octave][note] * 10;

        const endTime = millis() + length;
        while (millis() < endTime){
            await this.directionPin.write(dir);

            //dir = 1 ? 0 : 1
            dir = 1 - dir;

            await this.stepPin.write(1);
            await this.stepPin.write(0);
            await microsleep(pause);
        }
    }

    async rest(length){
        const endTime = millis() + length;
        while (millis() < endTime)
            await sleep(5);
    }

    /**
     * song[note_num][note, octave, length]
     */
    async playSong(song, tempo)
    {
        // Convert tempo in BPM to millisecs
        const noteLen = 60000 / tempo;

        for (let i = 0; song[i][0] != -1; i++){
            const length = song[i][2] * noteLen;

            if (song[i][0] == Zz)
                await this.rest(length);
            else {
                await this.playNote(song[i][0], song[i][1], (7 * length) / 8);
                await this.rest(length / 8);
            }
        }
    }
}

const drive1 = new Floppy(17, 18);
const drive2 = new Floppy(22, 23);
const song = require('./hardcoded_songs/imperial_march');
drive1.playSong(song.notes, song.tempo);
drive2.playSong(song.notes, song.tempo);

First off, I'd like to thank you for this amazing library. It's the best around.

Thank you very much :smile:
I think the behaviour that you are seeing is related to how NanoTimer objects work. A NanoTimer object has a queue of timeouts rather than multiple timeouts running at the same time.
For example, the following program takes 15 seconds to run and not 5 seconds as might be expected.
var NanoTimer = require('nanotimer');
var timer = new NanoTimer();

console.log('                 - ' + getTime());

function getTime() {
  return new Date().toISOString().substring(11, 19);
}

timer.setTimeout(function() {
  console.log('1s has expired   - ' + getTime());
}, '', '1s');

timer.setTimeout(function() {
  console.log('3s have expired  - ' + getTime());
}, '', '2s');

timer.setTimeout(function() {
  console.log('6s have expired  - ' + getTime());
}, '', '3s');

timer.setTimeout(function() {
  console.log('10s have expired - ' + getTime());
}, '', '4s');

timer.setTimeout(function() {
  console.log('15s have expired - ' + getTime());
}, '', '5s');

Hers's the output of the above program:
                 - 21:08:23
1s has expired   - 21:08:24
3s have expired  - 21:08:26
6s have expired  - 21:08:29
10s have expired - 21:08:33
15s have expired - 21:08:38

The example code posted in the original post creates two Floppy objects. Both of these Floppy objects use the same NanoTimer objects (timer1 and timer2) so they interfere with each other.

I'm using the library with my Raspberry Pi 3b to make some music-playing floppy disks.

This sounds like a very interesting project.

This sounds like a very interesting project.

Thanks! Maybe take a look at some videos, if you like it. There are some guys on YouTube doing the same.
Got some progress
After fixing that nanotimer thing, the interpolation issues are gone, but the results are now the same as spawning two node processes with tmux. Just like that situation I mentioned before:

Then I tried to spawn (with tmux) two node processes, one playing each floppy. This time I got the first floppy playing correctly, but the second one was mute until the first one stopped playing.

Is there any limitation to writing simultaneously to many pins at a time? Because this code is basically flooding writes.
Updated code: (View on GitHub)
//MIT Licensed: view README.md
const { promisify } = require('util');
const { Gpio } = process.platform == 'linux' ? require('onoff') : { Gpio: function(){ this.write = (err, cb) => cb() } };
const nanotimer = require('nanotimer');
const timestamp = new Date();

function millis(){
    return new Date() - timestamp;
}

const {
    Cn, Cs, Dn, Ds, En, Fn, Fs, Gn, Gs, An, As, Bn, Zz,
    Bs, Df, Dn2, Ef, En2, Es, Gf, Gn2, Af, An2, Bf, Bn2, Zz2
} = require('./notes');

/**
 * Frequencies in hundredths of Hz, e.g. middle A = 44000
 * 4 Octaves with 12 notes per octave, i.e. C to B
 */
const freq = [
    [ 13081,13859,14683,15556,16481,17461,18500,19600,20765,22000,23308,24694 ],
    [ 26163,27718,29366,31113,32963,34923,36999,39200,41530,44000,46616,49388 ],
    [ 52325,55437,58733,62225,65925,69846,73999,78399,83061,88000,93233,98777 ],
    [ 104650,110873,117466,124451,131851,139691,147998,156798,166122,176000,186466,197553 ],
    [ 209300,221746,234931,248901,263702,279382,295995,313596,332243,352000,372931,395106 ]
];

/**
 * Frequency (in Hz) is converted to Floppy Delay using the formula:
 *    314000 / frequency = floppy delay
 * so middle A = 314000 / 440 = 714
 *
 * Lowest realistic note is delay = 1550
 * Highest realistic note is delay = 210
 */
const floppyConv = 31400000;

// Calculate all our floppy delays at the start
const floppyDelay = JSON.parse(JSON.stringify(freq));
for (let octave = 0; octave < freq.length; octave++)
    for (let note = 0; note < freq[0].length; note++)
        floppyDelay[octave][note] = floppyConv / freq[octave][note];

const notesNames = [
    'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'
];

class Floppy {
    constructor(directionPin, stepPin){
        this.directionPin = new Gpio(directionPin, 'out');
        this.stepPin = new Gpio(stepPin, 'out');
        this.directionPin.write = promisify(this.directionPin.write);
        this.stepPin.write = promisify(this.stepPin.write);

        this._timer1 = new nanotimer();
        this._timer2 = new nanotimer();

        this.sleep = (ms) => {
            // return new Promise(resolve => setTimeout(resolve, ms));
            return new Promise(resolve => this._timer1.setTimeout(resolve, '', ms + 'm'));
        };
        this.microsleep = (us) => {
            return new Promise(resolve => this._timer2.setTimeout(resolve, '', us + 'u'));
        };

        this.resetMotor();
    }

    async resetMotor(){
        await this.directionPin.write(0);
        for(let i = 0; i < 10; i++){
            await this.stepPin.write(1);
            await this.stepPin.write(0);
            await this.sleep(1);
        }

        await this.directionPin.write(1);

        for(let i = 0; i < 10; i++){
            await this.stepPin.write(1);
            await this.stepPin.write(0);
            await this.sleep(1);
        }

        await this.sleep(400);
    }

    async playNote(note, octave, length){
        console.log('Note: ' + notesNames[note] + (octave + 1));

        let dir = 1;
        const pause = floppyDelay[octave][note] * 10;

        const endTime = millis() + length;
        while (millis() < endTime){
            await this.directionPin.write(dir);

            //dir = 1 ? 0 : 1
            dir = 1 - dir;

            await this.stepPin.write(1);
            await this.stepPin.write(0);
            await this.microsleep(pause);
        }
    }

    async rest(length){
        const endTime = millis() + length;
        while (millis() < endTime)
            await this.sleep(5);
    }

    /**
     * song[note_num][note, octave, length]
     */
    async playSong(song, tempo)
    {
        // Convert tempo in BPM to millisecs
        const noteLen = 60000 / tempo;

        for (let i = 0; song[i][0] != -1; i++){
            const length = song[i][2] * noteLen;

            if (song[i][0] == Zz)
                await this.rest(length);
            else {
                await this.playNote(song[i][0], song[i][1], (7 * length) / 8);
                await this.rest(length / 8);
            }
        }
    }
}

module.exports = Floppy;

Is there any limitation to writing simultaneously to many pins at a time? Because this code is basically flooding writes.

I'm not aware of any limitations. That being said, I'm not familiar with the implementation details of the Linux drivers and can't make any statement about the exact details of how they function.

After fixing that nanotimer thing, the interpolation issues are gone, but the results are now the same as spawning two node processes with tmux. Just like that situation I mentioned before:

Then I tried to spawn (with tmux) two node processes, one playing each floppy. This time I got the first floppy playing correctly, but the second one was mute until the first one stopped playing.

I gave the above program a try with LEDs rather than floppies. The LEDs blinked together in the same pattern most of the time but not all the time. The second LED wasn't off till the first one stopped. To be honest, I wouldn't expect to see the exact pattern on both LEDs all the time because I don't think it's going to be possible to get independent timers to remain fully synchronous with one another using JavaScript running on Raspbian.
 If it turns out that there is a problem with onoff the issue can be reopened. Feel free to comment on this issue if further information becomes available.


phoebus-scan-server: nixos module

Closes #74

Seems to work great, thanks a lot! Could you add some documentation about it? Something that covers at least the "default" usecase, for example like this: https://github.com/epics-extensions/EPNix/blob/master/doc/nixos/guides/phoebus-save-and-restore.md
If you have some, some example config / link to upstream documentation would be helpful, but I couldn't find something other than these two files:

https://github.com/ControlSystemStudio/phoebus/blob/v4.7.3/services/scan-server/src/main/resources/examples/scan_config.xml
https://github.com/ControlSystemStudio/phoebus/blob/v4.7.3/services/scan-server/src/main/resources/config/scan_config.xsd


Timeout too soon

Describe The Bug:
I have been using homebridge on a mac for years in terminal.  I just installed HomeBridge UI X yesterday and love it.  But every few hours the login screen comes up.  I set the timeout in advanced settings to the max which I think it like 100 days.  So it should not be timing out.  Problem is I cant sit and stare at it all day so no idea exactly when it goes back to login screen because nothing in log or anything.  Otherwise it seems to be working
For now I turned off AUTH to see if that helps but since I want to open this up to check on my iphone when not home I think I should have AUTH even though I use a different port.
To Reproduce:
Just run homebridge and check on it every hour.  Within a few hours its down
Expected behavior:

Logs:
Please tell me what log files you want and where they are.  The regular homebridge log shows nothing.
I attached regular homebridge logs and Config file
config.json.zip
Homebridge logs.zip
Environment:

Node.js Version: <14.4.0>
NPM Version: <6.14.5>
Homebridge Version: <1.1.0>
Homebridge Config UI X Version: 4.21.0
Operating System: macOS
Process Supervisor: hb-service

dont think I mentioned when I log back in homebridge is still running so it does not go down.  I just dont want it to logme out as i want it to display status at all times.  I can live with one logout every month or so but not every few hours.

two things.  I turned on debug logging for the UI.
and
When I changed the session time to the MAX I saw the config update get changed in the log but I did not restart homebridge.  It was saved in the preferences but maybe I needed to restart homebridge for it to take effect so I just did.  It went down 3 times in 22 hours so if it makes it until tomorrow morning I will close this issue.

UPDATE- Bug confirmed.  Ran 15 hours with NO AUTH and did not have any issues
Turned AUTH back on and was out for about 4 hours.  Came back and it was on login screen.
I noticed there is old bug EXACTLY this one saying AUTH would timeout before the setting.  It is back i guess.

You will need to restart and logout and log back in for the change to take effect.
86400000 seconds is 1000 days, and the expiry is embeded in the JWT token. This seems to be working.

I just totally rebooted the machine and logged in again.  We will know later today.
Please leave open.

by the way every time previously I made any change (after the first time) I used the RESTART button in the admin.  This time I totally rebooted the computer.  I will update in 6 hours.  Never gone that far on AUTH but went over a day in NO AUTH.

OK a complete reboot seemed to stop this.   Before we close this....does every change require a complete restart of the system?   If so why the restart homebridge button in the interface.

No. You just need to restart AND logout for that particular change.


refactor(theme-classic): cleanup of code blocks

Motivation
Just small cleanups in the code.
Have you read the Contributing Guidelines on pull requests?
Yes
Test Plan
Preview (tests pages)
Related PRs

Wonder if we should remove this language CSS class from the code container,

The div one is added by MDX, iirc. It's added again in the CodeBlock component so that the div would still get this class name when used in JSX. You can try removing it in our code, and check if it still appears.

As I can see, MDX doesn't produce any div for code blocks -- all these elements inside code blocks are created inside <CodeBlock>, or am I misunderstanding something? Initially I had a question, why do we need to add another (duplicated) CSS class (see below), if it's already added to the <pre> element automatically.
https://github.com/facebook/docusaurus/blob/4c0914c0350cdd2e30d222469d8388efbbedcea0/packages/docusaurus-theme-classic/src/theme/CodeBlock/index.tsx#L104-L105

In MDXComponents, we map pre to CodeBlock:
https://github.com/facebook/docusaurus/blob/c42f22b9bd4d39d48f3349031acb27d37db89bd7/packages/docusaurus-theme-classic/src/theme/MDXComponents/Code.tsx#L32-L37
And language-xxx is part of the default blockClassName. You can experiment with removing that [language-${language}]: language && !blockClassName.includes(language-${language}), ; I just tried, the language-xxx is indeed still there because it's added by MDX.

Uh-huh, I get it, but then why are we trying to manually add a CSS class with language? Does it mean that [`language-${language}`]: language && !blockClassName.includes(`language-${language}`) can be removed?

Because we allow users to use <CodeBlock language="java"> within React pages. If we don't manually apply this class name, that means div.language-java will not be able to consistently target Java code block containers. I doubt if it happens a lot, but it's always good to be consistent.

🤪 sorry but not sure to understand if this is ready to merge and you both agree or not? That looks good to me but not 100% sure about the className change

The current change looks fair to me. I think language-js needs to stay but the current js class name on the inner content can be removed.


Error when using @allow decorators

Using 0.67.0 now results in a hard error when compiling contracts that use @allow.create('NoOp') or any other @allow decorator. I have a feeling it used to show a warning, but would still compile, but how it's completely blocking.
Weirdly, I can do do bun run compile-abi inside the TEALScript repo, which includes multiple @allow.call('OptIn') decorators and that succeeds. But trying to use them in my own project fails.
TEALScript:
import { Contract } from '@algorandfoundation/tealscript';

class Demo extends Contract {
  @allow.create('NoOp')
  deploy(): uint<64> {
    return 42;
  }
}

Error:
Error: TypeScript diagnostics failed
src/contract.algo.ts:4:3 - error TS1241: Unable to resolve signature of method decorator when called as an expression.
  The runtime will invoke the decorator with 2 arguments, but the decorator expects 3.

4   @allow.create('NoOp')
    ~~~~~~~~~~~~~~~~~~~~~

  node_modules/@algorandfoundation/tealscript/types/global.d.ts:995:65
    995 declare type decorator = (target: Object, key: string | symbol, descriptor: PropertyDescriptor) => PropertyDescriptor;
                                                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    An argument for 'descriptor' was not provided.
src/contract.algo.ts:4:4 - error TS1270: Decorator function return type 'PropertyDescriptor' is not assignable to type 'void | (() => uint<64>)'.

4   @allow.create('NoOp')
     ~~~~~~~~~~~~~~~~~~~~

0.67.0 now uses your tsconfig.json for an internal instance of the TypeScript project. If experimentalDecorators is not set to true in your tsconfig then this will happen. I presume that is the issue here. 0.67.1 will automatically override this with a warning.
Give 0.67.1 a try and see if that works.

AH! Thank you, that makes sense. Funnily enough I had another project with a jsconfig.json file instead of tsconfig.json and I ran into the below error when trying to compile the contract. I realised what was going on in the tealscript.ts file and fixed that project, but didn't realise about experimentalDecorators. Solved!
node:internal/errors:497
    ErrorCaptureStackTrace(err);
    ^

TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefined
    at new NodeError (node:internal/errors:406:5)
    at validateString (node:internal/validators:162:11)
    at Object.join (node:path:1175:7)
    at processFile (~/Development/TEALScript/ABIMethodTest/node_modules/@algorandfoundation/tealscript/dist/bin/tealscript.js:52:45)
    at ~/Development/TEALScript/ABIMethodTest/node_modules/@algorandfoundation/tealscript/dist/bin/tealscript.js:112:29
    at Array.forEach (<anonymous>)
    at Object.<anonymous> (~/Development/TEALScript/ABIMethodTest/node_modules/@algorandfoundation/tealscript/dist/bin/tealscript.js:112:14)
    at Module._compile (node:internal/modules/cjs/loader:1241:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1295:10)
    at Module.load (node:internal/modules/cjs/loader:1091:32) {
  code: 'ERR_INVALID_ARG_TYPE'
}


Implement first version of flow allocator

Implement flow allocator with Directory Forwarding Table that always forwads Flow Allocation requests to the only neighbor of the sensor (the gateway) in the DIF.

First version was implemented successfully


Program crashes and becomes unresponsive

I'd appreciate if you could elaborate on the extents and use cases for this program. In relatively complex designs (100 components), I ran this and it just made KiCAD unresponsive after 30 seconds and nothing would snap it out of that. Was this not meant to handle larger systems? Any ideas or experiences on crashing?

It just takes a while to run. There is no loading bar at the moment.
You can set the number of passes to be 1, and then run it several times, and it will give the same result. A single pass shouldn't take too long.
The design I was testing it on is not enormous, but it's not small either - it has 132 components and about 800 vias. Three passes takes about 22 seconds to run on my machine.

It just takes a while to run. There is no loading bar at the moment.
You can set the number of passes to be 1, and then run it several times, and it will give the same result. A single pass shouldn't take too long.
The design I was testing it on is not enormous, but it's not small either - it has 132 components and about 800 vias. Three passes takes about 22 seconds to run on my machine.

I gave it half an hour and nothing but a frozen GUI. Maybe it's a difference of... processor.

I gave it half an hour and nothing but a frozen GUI. Maybe it's a difference of... processor.

Might be something in your design is crashing it then. If you can try and find what's causing it, it would be helpful. You could do a binary search by deleting half the design and seeing if it still crashes, then deleting half of what remains, and so on.

Might be something in your design is crashing it then. If you can try and find what's causing it, it would be helpful. You could do a binary search by deleting half the design and seeing if it still crashes, then deleting half of what remains, and so on.

I'll do that sometime this week and report back.

I'll do that sometime this week and report back.

I'm also facing the same issue.
It seems to hang KiCad right after the dialog is shown. It doesn't seem to matter whether I clicked on RUN or just closed the dialog.
Application: KiCad
Version: (5.1.12-1-10_14), release build
Libraries:
wxWidgets 3.0.4
libcurl/7.64.1 SecureTransport (LibreSSL/2.8.3) zlib/1.2.11 nghttp2/1.39.2
Platform: macOS Catalina Version 10.15.7 (Build 19H1519), 64 bit, Little endian, wxMac
Build Info:
wxWidgets: 3.0.4 (wchar_t,STL containers,compatible with 2.8)
Boost: 1.76.0
OpenCASCADE Technology: 7.5.3
Curl: 7.54.0
Compiler: Clang 10.0.1 with C++ ABI 1002
Build settings:
USE_WX_GRAPHICS_CONTEXT=ON
USE_WX_OVERLAY=ON
KICAD_SCRIPTING=ON
KICAD_SCRIPTING_MODULES=ON
KICAD_SCRIPTING_PYTHON3=OFF
KICAD_SCRIPTING_WXPYTHON=ON
KICAD_SCRIPTING_WXPYTHON_PHOENIX=OFF
KICAD_SCRIPTING_ACTION_MENU=ON
BUILD_GITHUB_PLUGIN=ON
KICAD_USE_OCE=OFF
KICAD_USE_OCC=ON
KICAD_SPICE=ON

Interesting. I tried the plugin on the file you shared and it worked fine for me.

I tested on Arch linux and Windows, I'm unable to test it on macOS right now.
If it crashed before you even hit run, that might mean it's something in the GUI that's causing problems. Did you run the teardrops plugin OK? Have you tried any other kicad plugins?
Your version info has USE_WX_GRAPHICS_CONTEXT=ON, whereas both of my installs have it off. The docs say that's an experimental flag, but they might be out of date. Did you compile this build yourself?

I'm using precompiled KiCad, installed via Homebrew package manager https://brew.sh/
I did install the teardrop plugin and another plugin IBOM https://github.com/openscopeproject/InteractiveHtmlBom and they both ran fine.
I too am guessing there's something in the GUI that's causing it to hang hard, but haven't been able to get it setup to run from the command line. Running python that's packaged with KiCad is rather finicky..

MacOS 12.0.1
Kicad 5.1.10-1-10_14
GUI freeze
message from command line:
Traceback (most recent call last):   File "/Applications/KiCad/kicad.app/Contents/SharedSupport/scripting/plugins/kicad-round-tracks/round_tracks_action.py", line 79, in run     Popen(['pcbnew', new_name])   File "/Applications/KiCad/kicad.app/Contents/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 394, in __init__     errread, errwrite)   File "/Applications/KiCad/kicad.app/Contents/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1047, in _execute_child     raise child_exception OSError: [Errno 2] No such file or directory

Does it work if you untick "create a new file" ?

In my case it still hangs the main UI and I had to force-quit KiCad afterwards.
Here's what I did:

I opened KiCad with the above project.
I clicked on the pcbnew icon to open the layout editor
I refreshed the plugins via "Tools"->"External Plugins..."->"Refresh Plugins" menu
I ran the Kicad-Round-Tracks plugin via "Tools"->"External Plugins..."->"Round the tracks (new file)" menu
The dialog opened and I can uncheck the "create new file"

Up until just before the dialog appeared pcbnew was still responsive (moving my mouse moved the cross hair), but almost immediately after the dialog appeared KiCad hung. I can close the dialog or click on "Run" and KiCad would stay unresponsive until I force-quit it and restart it.
One observation: if I selected "new file" and clicked on "Run" it did create the rounded track version of the board with the name "<board_name>.kicad_pcb-rounded" that I can rename to something.kicad_pcb and open with pcbnew after I restarted KiCad.

Hi, same problem here on macos 11.6.1: new pcb board is written but GUI hang. I suspect that the GUI become unresponsive because this plugin try to open a second instance of pcb_new. This is not allowed on macos: you can have only one instance at a time.
On macos, the plugin should create a new board and exit (new kicad_pcb file without new project file)

Hi, same problem here on macos 11.6.1: new pcb board is written but GUI hang.
Even if I close the plugin window without action, GUI is hang. It seems that there is problem at exit.
Note that on macos, the option "open the newly created file" should no be available : you can have only one instance of a running programm (here, pcb-new) at a time.

I have macos 11.6.2 with the same issue.  Just hangs the entire kicad instance.

I will look into this when I can. If anyone wants to lend me a macbook that would speed things up (I just wasted several hours trying to run macos in a vm)

I will look into this when I can. If anyone wants to lend me a macbook that would speed things up (I just wasted several hours trying to run macos in a vm)

Have a look at  https://github.com/foxlet/macOS-Simple-KVM Worked for me on a spare machine, no issues at all.

That should fix the GUI hang, please try it out.
The "open the newly created file" error posted by pondahai is a separate problem. There is probably a way to fix it but to be honest I've always thought that part was janky. You can launch multiple instances of pcbnew but it isn't really supposed to be used that way, I might get rid of that entirely, maybe make the default to run in-place and offer to save a backup file.

Doesn't hang for me any more, but doesn't run either. Crashes complaining that 'BOARD_DESIGN_SETTINGS' object has no attribute 'GetNetClasses' (line 46 round_tracks_action.py , self.board.GetDesignSettings.GetNetClasses.NetClasses() )

Sorry about that - please try the branch "kicad-5" - I just started porting everything to kicad 6 which has broken compatibility.

Thanks, that fixes that problem - it now rins and produces curved/rounded tracks.
The only thing that remains is that if I run it a third time, it locks up pcbnew. First 2 times there's no issue on a really simple board. Third time always locks up.

I'm not sure about that one. I've cherry-picked the commit that possibly fixes the process not ending correctly.
The intended use case is to keep the unrounded source file, and run the plugin to generate a rounded output file. If you're running it repeatedly on the same file, since each pass basically doubles the number of tracks, running three times with three passes could quite easily cause it to lock up by having too many tracks.

Ok, that's fine. I can work with that as a process. build my board, rebuild/add remove stuff then generate rounded tracks last minute to seperate pcb file.

Since KiCad 6 is released, I think I'm going to focus on the KiCad 6 version for now.

Absolutely, fully understand this.


FSet is setting incorrect values in fields with very large values

Hello,
I ran into an with setting a field with a very large value using FSet resulting in an incorrect value set in Tile38. The issue appears to be caused by the rounding configured in the floatString function. I suspect a fix might be as simple as updating the formatFloat function to be something like this instead.
func formatFloat(v float64) string {
	return strconv.FormatFloat(v, 'f', 0, 64)
}

An example of a failure case:
_ = client.Keys.JSet("test", "example", "key", "value").Do()
_ = client.Keys.FSet("test", "example").Field("id",<PHONE_NUMBER>12345680).Do()

The code will result in example having a field id set to<PHONE_NUMBER>00000000 instead of the expected value<PHONE_NUMBER>12345680. However, manually setting the field in the cli does give the expected results. This can be sen in the Tile38 cli:
<IP_ADDRESS>:9851> GET test example WITHFIELDS
{"ok":true,"object":"{\"key\":\"value\"}","fields":{"id":123456789000000000},"elapsed":"19.377µs"}
<IP_ADDRESS>:9851> FSET test example id<PHONE_NUMBER>12345680
{"ok":true,"elapsed":"9.808µs"}
<IP_ADDRESS>:9851> GET test example WITHFIELDS
{"ok":true,"object":"{\"key\":\"value\"}","fields":{"id":123456789012345680},"elapsed":"20.699µs"}

I can create a PR if needed; let me know if I should do anything besides adding a test case to TestKeys.

Fixed by https://github.com/shadowspore/t38c/pull/52
Thank you for sending a PR


Upgrade to M6 - Server doesn't close the connection

Hi,
I just upgraded to Spring Boot 2.0.RC1 and Spring Cloud Gateway M6 and the server doesn't close the connection. The client waits for the confirmation that the full response has been sent.
I changed the logging level to
        <logger name="org.springframework.cloud.gateway" additivity="false" level="TRACE">
            <appender-ref ref="console"/>
        </logger>

        <logger name="org.springframework.http.server.reactive" additivity="false" level="DEBUG">
            <appender-ref ref="console"/>
        </logger>

        <logger name="org.springframework.web.reactive" additivity="false" level="DEBUG">
            <appender-ref ref="console"/>
        </logger>

        <logger name="reactor.ipc.netty" additivity="false" level="DEBUG">
            <appender-ref ref="console"/>
        </logger>

With SB 2.0.M7 & SC M5 - The server returns a response and closes the connection and here are the last lines in the log
2018-02-13 16:41:43.476 DEBUG 7732 --- [ctor-http-nio-2] r.ipc.netty.http.server.HttpServer       : [id: 0x4a2531f4, L:/0:0:0:0:0:0:0:1:12000 - R:/0:0:0:0:0:0:0:1:50466] FLUSH
2018-02-13 16:41:43.476 DEBUG 7732 --- [ctor-http-nio-2] r.ipc.netty.channel.ChannelOperations    : [id: 0x4a2531f4, L:/0:0:0:0:0:0:0:1:12000 - R:/0:0:0:0:0:0:0:1:50466] Discarding inbound content
2018-02-13 16:41:43.476 DEBUG 7732 --- [ctor-http-nio-2] r.ipc.netty.http.server.HttpServer       : [id: 0x4a2531f4, L:/0:0:0:0:0:0:0:1:12000 - R:/0:0:0:0:0:0:0:1:50466] USER_EVENT: [Handler Terminated]
2018-02-13 16:41:43.477 DEBUG 7732 --- [ctor-http-nio-2] r.i.n.channel.ChannelOperationsHandler   : [id: 0x4a2531f4, L:/0:0:0:0:0:0:0:1:12000 - R:/0:0:0:0:0:0:0:1:50466] Disposing context reactor.ipc.netty.channel.ServerContextHandler@4f0b52c4
2018-02-13 16:44:21.649 DEBUG 7732 --- [ctor-http-nio-3] r.ipc.netty.http.server.HttpServer       : [id: 0x55e2be17, L:/0:0:0:0:0:0:0:1:12000 - R:/0:0:0:0:0:0:0:1:50467] READ COMPLETE
2018-02-13 16:44:21.655 DEBUG 7732 --- [ctor-http-nio-3] r.ipc.netty.http.server.HttpServer       : [id: 0x55e2be17, L:/0:0:0:0:0:0:0:1:12000 ! R:/0:0:0:0:0:0:0:1:50467] INACTIVE
2018-02-13 16:44:21.657 DEBUG 7732 --- [ctor-http-nio-3] r.ipc.netty.http.server.HttpServer       : [id: 0x55e2be17, L:/0:0:0:0:0:0:0:1:12000 ! R:/0:0:0:0:0:0:0:1:50467] UNREGISTERED
2018-02-13 16:46:23.583 DEBUG 7732 --- [ctor-http-nio-2] r.ipc.netty.http.server.HttpServer       : [id: 0x4a2531f4, L:/0:0:0:0:0:0:0:1:12000 - R:/0:0:0:0:0:0:0:1:50466] READ COMPLETE
2018-02-13 16:46:23.619 DEBUG 7732 --- [ctor-http-nio-2] r.ipc.netty.http.server.HttpServer       : [id: 0x4a2531f4, L:/0:0:0:0:0:0:0:1:12000 ! R:/0:0:0:0:0:0:0:1:50466] INACTIVE
2018-02-13 16:46:23.620 DEBUG 7732 --- [ctor-http-nio-2] r.ipc.netty.http.server.HttpServer       : [id: 0x4a2531f4, L:/0:0:0:0:0:0:0:1:12000 ! R:/0:0:0:0:0:0:0:1:50466] UNREGISTERED

With SM 2.0.RC1 & SC M6 - The server returns a response but doesn't close the connection and here are the last lines in the log. Also the navigator continue to spin and to wait an answer.
2018-02-13 18:27:35.733 DEBUG 55189 --- [ctor-http-nio-6] r.ipc.netty.http.server.HttpServer       : [id: 0x2ff0be30, L:/0:0:0:0:0:0:0:1:12000 - R:/0:0:0:0:0:0:0:1:52232] FLUSH
2018-02-13 18:28:11.905 DEBUG 55189 --- [ctor-http-nio-7] r.ipc.netty.http.server.HttpServer       : [id: 0x7b91ee3f, L:/0:0:0:0:0:0:0:1:12000 - R:/0:0:0:0:0:0:0:1:52233] READ COMPLETE
2018-02-13 18:28:11.906 DEBUG 55189 --- [ctor-http-nio-7] r.ipc.netty.http.server.HttpServer       : [id: 0x7b91ee3f, L:/0:0:0:0:0:0:0:1:12000 ! R:/0:0:0:0:0:0:0:1:52233] INACTIVE
2018-02-13 18:28:11.906 DEBUG 55189 --- [ctor-http-nio-7] r.ipc.netty.http.server.HttpServer       : [id: 0x7b91ee3f, L:/0:0:0:0:0:0:0:1:12000 ! R:/0:0:0:0:0:0:0:1:52233] UNREGISTERED

Here is the output with a simple curl
HTTP/1.1 200 OK
Access-Control-Allow-Headers: *
Access-Control-Allow-Methods: GET, OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: *
Content-Type: text/plain;charset=UTF-8
transfer-encoding: chunked

http: error: ConnectionError: HTTPConnectionPool(host='localhost', port=12000): Read timed out.

Here is an example of my code
    @Bean
    fun tcsGatewayProxy(tcsGatewayService: TcsGatewayService) = router {
        (accept(MediaType.APPLICATION_JSON) and "/storefront/**").nest {
            GET("**", { tcsGatewayService.remoteServe(it, "storefront") })
            DELETE("/", { tcsGatewayService.deleteKey(it, "storefront") })
        }

        ("/cacheKey/**").nest {
            GET("/", { tcsGatewayService.generateCacheKey(it) })
        }
    }

Let me know if you need more info.

None of that looks like gateway

What do you mean?
Here are my dependencies
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

Your example code isn't gateway and nothing in the logs show gateway. I'm just as confused

I understand. I am closing the issue for now. I will try to remove the gateway dependency and if I am getting the same issue, I will open it on webflux project.

Just for your information, I added undertow as dependency and I don't have the issue anymore. Seems there is an issue with Netty.


Fix #77. Add a function to delete an imagestream not owned by the component

Add a function to delete an imageStream not owned by the component CRD
Delete the imageStream if running on OCP
Use unstructured object to avoid to have to import OpenShift API Type

This should be part of a Delete call that handles clean-up when a component is deleted.

LGTM. To be tested when of course it will be possible to use again buildah and/or kaniko to perform a docker push to the internal docker registry. Can be merged ;-) @metacosm


Provide example of modeling using mongoose and mongodb

Still being worked on, and has also become the branch that Karma is being worked on, which @ShevaDas is helping out with. Closing request.


gpu v100 16G RuntimeError: CUDA out of memory.

What is the minimum gpu memory to run?

Hi @xyxxmb, thanks for your interest!
Please see this issue and this issue.
It could happen because you are attempting a combination that is out of distribution, generally (e.g., in the examples from our notebook) it shouldn’t happen.


readme - INFLUXDB_NAME not mentioned

Hi, Thanks for your Project, which works great for my new Piko12 with some small amendemends. I noticed that the environment variable INFLUXDB_NAME is ommitted in the readme. Recommend to add for completeness.
Frank

Thanks!


Device pixel ratio support added

This pull request detects the user device pixel ratio and adjusts the mouse position to it

can you keep original coding style? I can't know where you modified.


Checksums missing for some versions

On https://www.pulumi.com/docs/get-started/install/versions/
Clicking “Checksums” for 3.40.0 and 3.40.0-alpha.1662150830 leads to AccessDenied.
https://get.pulumi.com/releases/sdk/pulumi-3.40.0-checksums.txt

#8044 temporarily removed the checksum links. We'll add the links back once the checksum files have been published.


Cannot read property 'prototype' of undefined

I've just tried to install atom-raygun package and has thrown up the error.
Anyone have any idea's?
Below are the error details.
[Enter steps to reproduce below:]

...
...

Atom Version: 1.0.0
System: Ubuntu 14.04.2
Thrown From: atom-raygun package, v0.2.1
Stack Trace
Failed to load the atom-raygun package
At Cannot read property 'prototype' of undefined

TypeError: Cannot read property 'prototype' of undefined
    at __extends (/home/james-tt/.atom/packages/atom-raygun/lib/application-list.coffee:4:199)
    at /home/james-tt/.atom/packages/atom-raygun/lib/application-list.coffee:11:5
    at Object.<anonymous> (/home/james-tt/.atom/packages/atom-raygun/lib/application-list.coffee:65:5)
    at Object.<anonymous> (/home/james-tt/.atom/packages/atom-raygun/lib/application-list.coffee:67:4)
    at Module._compile (module.js:452:26)
    at Object.requireCoffeeScript (/opt/atom/resources/app.asar/node_modules/coffee-cash/lib/coffee-cash.js:85:19)
    at Module.load (module.js:347:32)
    at Function.Module._load (module.js:302:12)
    at Module.require (module.js:357:17)
    at require (module.js:376:17)
    at Object.<anonymous> (/home/james-tt/.atom/packages/atom-raygun/lib/atom-raygun.coffee:4:21)
    at Object.<anonymous> (/home/james-tt/.atom/packages/atom-raygun/lib/atom-raygun.coffee:65:4)
    at Module._compile (module.js:452:26)
    at Object.requireCoffeeScript (/opt/atom/resources/app.asar/node_modules/coffee-cash/lib/coffee-cash.js:85:19)
    at Module.load (module.js:347:32)
    at Function.Module._load (module.js:302:12)

Commands
     -1:05.3.0 command-palette:toggle (atom-text-editor.editor.is-focused)
  2x -1:01.7.0 core:move-down (atom-text-editor.editor.mini.is-focused)
     -1:01.4.0 core:confirm (atom-text-editor.editor.mini.is-focused)
     -1:01.4.0 settings-view:uninstall-themes (atom-text-editor.editor)
     -0:50.1.0 editor:move-to-first-character-of-line (atom-text-editor.editor.mini.is-focused)
     -0:49.3.0 core:confirm (atom-text-editor.editor.mini.is-focused)
  7x -0:37.6.0 core:move-down (atom-text-editor.editor.mini.is-focused)

Config
{
  "core": {
    "themes": [
      "one-light-ui",
      "one-light-syntax"
    ],
    "disabledPackages": [
      "wrap-guide",
      "atom-prettify",
      "highlight-css-color",
      "highlight-css-color"
    ],
    "projectHome": "/home/Dropbox/Term 2/"
  }
}

Installed Packages
# User
atom-beautify, v0.28.7
atom-raygun, v0.2.1
autoclose-html, v0.18.0
color-picker, v2.0.9
language-ejs, v0.2.0
linter, v1.2.3
linter-cpplint, v0.1.4
linter-csslint, v0.0.14
linter-jshint, v0.1.7
linter-tidy, v1.0.1

# Dev
No dev packages

sorry didn't check the url


Bower and NPM

Hey,
Thanks for awesome project! :wink:
Also it would be nice to able to install it with Bower and NPM.

Answer


Group event emitters aren't functioning properly.

Describe the bug
Group event emitters do not work and return "You do not have permission to view this groups shout/wall."  regardless of the user's permissions.
To Reproduce
Steps to reproduce the behavior:

Attempt to get the wall posts of a group on an account that you know has access to the wall.
Ensure you are handling errors.
Watch how it says "Initialization Error: You do not have permission to view this group's wall." in the console.

Expected behavior
This should not be happening if the account has the ability to view the shout or wall.

Do you get the same error when using getShout / getWallposts?

Closing due to inactivity.


Update non-functional requirements section in DG

fix #24

Codecov Report

Merging #42 (140386b) into master (acf4fa2) will not change coverage.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master      #42   +/-   ##
=========================================
  Coverage     72.15%   72.15%
  Complexity      399      399
=========================================
  Files            70       70
  Lines          1232     1232
  Branches        125      125
=========================================
  Hits            889      889
  Misses          311      311
  Partials         32       32

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update acf4fa2...140386b. Read the comment docs.


How to add rules into rules.d? I don't know the detailed steps.Can you help me?

The easiest approach is to install the package libu2f-udev, available for Debian and Ubuntu.
You can also install the udev rules available here: https://github.com/Yubico/libu2f-host/blob/master/70-u2f.rules
Refer to documentation on using Udev for your Linux distribution for instructions.


iOS - Done button doesn't close keyboard

On Android when I press the "done" button on the keyboard, the keyboard is closed. On iOS, this does not happen. Pressing "done" does nothing on iOS.
There is no way to close the keyboard due to the other issue of clicking outside of the keyboard also not closing the keyboard. (https://github.com/zleao/zoft.MauiExtensions.AutoCompleteEntry/issues/9)

Fixed in version 3.0.1


Add get_mut to deal with unsoundness of Robj

In GetSexp we have a get, but not a get_mut. While these functions return pointers, it doesn't mean the semantics of exclusive (mut) and shared (ref) should be completely neglected.
I believe this is referred to as unsoundness.
EDIT:

[ ] It is important that the unsoundness from Clone for &Robj is dealt with as well.

This deals with the warning in #641.

I've requested a review of this to you @yutannihilation, because we have already somewhat initiated a conversation about this.

@Ilia-Kosenkov I need to make snapshot tests pass, as I did indeed change macros.
Can you please provide me a way to do this? Note that you have to be a bit explicit, as the whole extendrtests thing is very sensitive. Thx!

So you changed some code that is generated as part of macros expansion. The easiest way is to run tests locally, observe the diff and then accept snapshot using {testthat} command (you will see a prompt).

In theory, as the definition of SEXP is *mut, shouldn't all API call require mut then?
pub type SEXP = *mut SEXPREC;

(https://extendr.github.io/libR-sys/libR_sys/type.SEXP.html)
Honestly, I'm not sure if there are any API call on SEXP that is guaranteed NOT to mutate the R object. For example, even *_ELT() might change the state of the underlying data if it's ALTREP. If it's always with mut, then isn't it effectively the same as always without mut?
The example I picked might be just a corner case, and I don't think the direction of this pull request is all wrong, but at the moment I have no idea what is the supposed interface.

In theory, as the definition of SEXP is *mut, shouldn't all API call require mut then?

It is a little complex I think. A pointer isn't a &mut or &, but we are treating it like that.
At the very least, the current change makes the rust code make sense. If you allocate a Vec,
and then insert elements into it, you'd need to set that Vec to mut.

Honestly, I'm not sure if there are any API call on SEXP that is guaranteed NOT to mutate the R object. For example, even *_ELT() might change the state of the underlying data if it's ALTREP. If it's always with mut, then isn't it effectively the same as always without mut?

I think you're 100% correct here. Regardless of this, I think we want to maintain "ownership" / soundness / whatever it is called, when we are within the Rust part of the interface. I am quite sure that SEXPs change
a lot. I believe they point to themselves and even another object, and they contain GC information, and all sorts of nonsense. It is more like that Robj, encompass a pointer, and the interior mutability of the underlying data, not pointer, we can at least pretend we are upholding properly.
Sorry, I'm not a rust-systems guy enough to actually have the right, succinct explanation for this.

The example I picked might be just a corner case, and I don't think the direction of this pull request is all wrong, but at the moment I have no idea what is the supposed interface.

Should I ask a Rust person to review this? @jojojet has been kind enough to give some of our PRs a good luck, and they are very much involved with projects that does.. somewhat similar things.

My question is, if the API call should require mut, isn't it what should be enforced on libR-sys (or something intermediate between)'s side? I'm afraid it's not significantly different to carefully choose .get() or .get_mut() than to carefully use .get() if it still depends on our carefulness. You still can mistakenly use .get() on where it should be .get_mut(), right?

Good points! And I'd totally be up for writing an intermediary layer between extendr and libR-sys that was more.. minimal. For now, I think it is fine these things are intertwined with extendr, until we figure them out.
I'd like to point out, that the meaning of unsafe, is that you "carefully" write code, and that this code
is reviewed, and constantly up for discussion, because it isn't obvious why it is okay, because the compiler
aren't enforcing anything, but that it is okay because we said so (through stating unsafe).
Although, @jojojet relayed to me, that this is okay for now, but the fact that Clone is implemented for &Robj makes this attempt a little short. I asked @jojojet to put his comment here, so I won't put anymore words in his mouth.
Awesome stuff all around folks!

I do not know this is failing.
rror: test failed, to rerun pass `--test serializer_tests`

  Caused by:
    process didn't exit successfully: `D:\a\extendr\extendr\target\x86_64-pc-windows-gnu\debug\deps\serializer_tests-c8bc75661f3b52d6.exe --nocapture` (exit code: 0xc0000028)
  Error: 'Test extendr-api \w tests for x86_64-pc-windows-gnu target': cargo failed with code -1073741784 (args: +stable-msvc test --manifest-path extendr-api/Cargo.toml --features tests --target=x86_64-pc-windows-gnu  -- --nocapture)
ci-cargo: D:\a\_temp\36b2f20c-9c14-49dc-b32d-b4e9d3a84c70.ps1:16
Line |
  16 |    ci-cargo +$toolchain test --manifest-path extendr-api/Cargo.toml -- …
     |    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | 'Test extendr-api \w tests for x86_64-pc-windows-gnu target': cargo failed with code -1073741784 (args:
     | +stable-msvc test --manifest-path extendr-api/Cargo.toml --features tests --target=x86_64-pc-windows-gnu  --
     | --nocapture)

I've run this test locally, and it works. You have to run cargo test --test serializer_tests --features serde -- --nocapture, to see it.
When I search, the only thing of note that I find, is this (I searched on the exact exit code from the test).
https://github.com/bytecodealliance/wasmtime/issues/1967
Please hellp.

So how does it work if both methods return SEXP? SEXP is a pointer to SEXPREC structure, so if we returned something like *const SEXPREC from .get() and *mut SEXPREC from get_mut(), it would've been better, but I guess it is incompatible with the rest of the API in libR-sys.

I think it is important to make sure that the rust api has the proper semantics. And also this is a little confined change that I think we can agree on and approve.
Part of my rework of Robj, that I've described in #608, etc., is to make Robj work more like a Box, then what it is right now, which is an Rc.
We cannot really return *const SEXPREC, because nowhere does the R-API really use that...


Confirming updates made for release 5 have made it to the browser?

This can't happen before release 5 has been made in the browser but once it has been we need to confirm the updates made as part of the following tickets were propagated to the browser

[ ]  https://app.zenhub.com/workspaces/dataset-wrangling-status-5f994cb88e0805001759d2e9/issues/ebi-ait/hca-ebi-wrangler-central/240
[ ]  https://app.zenhub.com/workspaces/dataset-wrangling-status-5f994cb88e0805001759d2e9/issues/ebi-ait/hca-ebi-wrangler-central/72
[ ]  https://app.zenhub.com/workspaces/dataset-wrangling-status-5f994cb88e0805001759d2e9/issues/ebi-ait/hca-ebi-wrangler-central/91
[ ]  https://app.zenhub.com/workspaces/dataset-wrangling-status-5f994cb88e0805001759d2e9/issues/ebi-ait/hca-ebi-wrangler-central/74
[ ]  https://app.zenhub.com/workspaces/dataset-wrangling-status-5f994cb88e0805001759d2e9/issues/ebi-ait/hca-ebi-wrangler-central/245
[ ] https://app.zenhub.com/workspaces/dataset-wrangling-status-5f994cb88e0805001759d2e9/issues/ebi-ait/hca-ebi-wrangler-central/174
[ ] https://app.zenhub.com/workspaces/dataset-wrangling-status-5f994cb88e0805001759d2e9/issues/ebi-ait/hca-ebi-wrangler-central/114
[ ] https://app.zenhub.com/workspaces/dataset-wrangling-status-5f994cb88e0805001759d2e9/issues/ebi-ait/hca-ebi-wrangler-central/221

acceptance criteria
For each of these projects, confirm the exported update (data and/or metadata) is visible in the browser
If it is, great tick the box
If it isn't please resurrect the dataset ticket and add it to the needs update column with information about what update was attempted and didn't make it, Please tag @clairerye in any ticket where this is the case so she can coordinate resolution of these bugs. Only tick the box after those steps are done

@ami-day I have moved the ticket to the "To Do" list so that it doesn't get lost. I will try and tag the primary wranglers that might need checking if the updates made it to the browser.

#240 is stalled pending bulk updates (Ami): If no objections, @ami-day I'll add labels audr,Internally Blocked and move it to "Needs Update". Maybe I'll explore creating BulkUpdates label

#72 - Two updates were pushed, curator and publication link (Ray): Looks up to date to me in the browser. @rays22 Could you, please, confirm and if so tick the box in the ticket description?

#91 - Curator was updated (Marion/Wei): Looks up to date to me in the browser. @Wkt8 Could you, please, confirm and if so tick the box in the ticket description?

#74 - Errors with file names (Ami): To be checked. Also Mallory appears as the curator. It should be Ami right? @ami-day I don't know how to check if this change made it. Could you, please, confirm and check the box in the ticket description? If the curator needs changing maybe you need to re-open the ticket and add it to the Needs Update pipeline on the wrangling board.

#245 - Ami appearing as contributor rather than curator (Ami): From the ticket is unclear if updates were pushed. It is not updated in the browser. @ami-day could you, please, clarify? It might be that the ticket was closed without actually pushing the update.

#174 - v3 to v2 change required (Ami): Looks up to date to me in the browser. @ami-day Could you, please, confirm and check the box in the ticket description?

#114 - It's on the list but I don't see that any updates were done (not obvious) (Ami) Needs clarification or closing @ami-day to confirm

#221 - Structure changes of the metadata due to errors in pipelines (Ami): I can't check it myself. @ami-day could you, please, confirm if the changes made it through and if so tick the box in the description of the ticket?

Thanks everyone!

Thanks @ofanobilbao , will have a look at these today

@ofanobilbao I have looked into these and selected the ones I checked that are done.
There are a few outstanding issues:

The update for this project is blocked until we can make bulk updates in ingest prod., as you had written above: https://app.zenhub.com/workspaces/dataset-wrangling-status-5f994cb88e0805001759d2e9/issues/ebi-ait/hca-ebi-wrangler-central/240 update blocked

I am still showing up as a contributor for the following project in the data portal, though looking at the project in ingest prod., I am not sure what the specific problem is and how to update it, as my name is associated with the "data curator" label, and looks identical to how the curator info. looks in other exported projects in the contributors tab in ingest: https://contribute.data.humancellatlas.org/projects/detail?uuid=0fd8f918-62d6-4b8b-ac35-4c53dd601f71

There doesn’t seem to be info anywhere about this project needing an update, it was curated and exported a while ago, not sure why it is on the list, I think it may have been incorrectly listed here? https://app.zenhub.com/workspaces/dataset-wrangling-status-5f994cb88e0805001759d2e9/issues/ebi-ait/hca-ebi-wrangler-central/114

I will close this ticket and create a new ticket for the immune HIV project contributor issue. There is already a ticket for point 1 and I think point 3 should not have been included in the list.


[ZK ACL] Fix zk_conn_str in helix-vcr-tool

The complete zkString is zkConnString/namespace

Codecov Report
Attention: 4 lines in your changes are missing coverage. Please review.

Comparison is base (d878bb7) 70.29% compared to head (65e28b4) 17.04%.

Additional details and impacted files
@@              Coverage Diff              @@
##             master    #2615       +/-   ##
=============================================
- Coverage     70.29%   17.04%   -53.25%
+ Complexity    11124     2885     -8239
=============================================
  Files           806      806
  Lines         65158    65158
  Branches       7940     7940
=============================================
- Hits          45800    11107    -34693
- Misses        16761    53235    +36474
+ Partials       2597      816     -1781

Files
Coverage Δ

.../github/ambry/clustermap/HelixVcrPopulateTool.java
0.00% <0.00%> (ø)

... and 618 files with indirect coverage changes

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


Scaladoc @link split by scalafmt causes warning

When scalafmt formats scaladoc and splits a {@link SomeClass} tag, this results in a scaladoc warning
and the link is not rendered.
I am not really an expert but think that many of the Javadoc syntax can be used in scaladoc. In practical
terms it made it much easier to port a Java library to a Scala library.
Going forward with scaladoc 3, it would be great if these things were supported but I totally would like
things deprecated as needed to whatever the scaladoc 3 state of the art should be along with a good
suggestion on how to change the link.
https://docs.oracle.com/en/java/javase/17/docs/specs/javadoc/doc-comment-spec.html#link
Note: wrapping @code does not cause a warning.
https://docs.oracle.com/en/java/javase/17/docs/specs/javadoc/doc-comment-spec.html#code
Example result of scalafmt wrapping at column 80 and splitting the link.
/**
   * Creates an instance of a class, initializing its fields from a {@link
   * Config}.

Results in the following warning:
[warn] /Users/eric/workspace/sconfig/sconfig/jvm/src/main/scala/org/ekrich/config/ConfigBeanFactory.scala:13:3: Could not find any member to link for "".
[warn]   /**
[warn]   ^
[warn] 34 warnings found

If the whole link block remains on one line then the warning goes away.
Some examples at least in the ekrich/sconfig codebase:
{@link Config}
{@link Config#hasPathOrNull}
{@link ConfigValue#valueType valueType}
{@link ConfigValueType#NULL NULL}

I'm also not an expert but if you're using javadoc syntax which is not documented anywhere to be supported by scaladoc, you could disable wrapping.

in scaladoc, [[ ... ]] provides the same functionality.

It says that they are supported and given that they are parsed and work if not wrapped I would say that is good enough evidence. https://docs.scala-lang.org/overviews/scaladoc/for-library-authors.html

Also being a Scala Native dude, I would like to see more Java ported to Scala and as such it would be great if the javadoc would just work as a first cut - it is hard enough to make the code work, let alone if the docs don't work. We already had this change this which is similar (a wrap which causes an error) https://github.com/scalameta/scalameta/issues/2398
I had like 100 sites in sconfig to get things working. https://github.com/ekrich/sconfig/commit/ffd581a9d89cb73299473299aedb63e769471ac9

Is it possible to have a scalafix for this? If that could be applied and used then this could be closed.

I used a regex to replace {@link x} to [[x]] and {@code yyy} to `yyy` and this not only make the scaladoc more readable but scalafmt does not split these items.


Server should make use of project_name

Send to client so clients can save their tokens by app name
Namespace the metadata and horizon databases in the cluster so multiple horizon apps can be stored

This was fixed for 1.0


Battery display for peripherals in system tray

Description of the new feature / enhancement
When using windows on a laptop there should usually be a battery icon to display the device's current battery level, my feature proposal suggests to allow a user to do this with (bluetooth) peripherals in a similar fashion. For reference, iOS offers you the options to put a widget showing all battery levels either on your home screen, your lock screen or "today view". I think the system tray is perfect for doing this without having to build something completely custom.
Scenario when this would be used?
This feature could be very useful to see the battery level of your wireless mouse and headset. As someone whose headset doesn't last a very long time this could be convenient for quickly glancing over the battery status in a way that feels native to the OS rather than opening the settings for this information.
Supporting information
I don't have the knowledge about windows' API's to be of any help to the implementation but I would imagine that there is a device API or at least some way to read out battery levels. Next this data would be displayed in the system tray, preferably a separate icon per device. You can "hide" the icons by dropping them in the hidden system tray but it'd be convenient if you can mange which ones do and do not show up manually. Additional options are to color them, change the icons at different battery levels, so forth and so on.

You can do this in Windows today!  Just click the > on the bluetooth quick setting item

Hm, this is an unfortunate resolution as it's 1. assuming I'm using windows 11, and 2. not pinned on the taskbar but hidden behind a menu I have to click on which is exactly what I was trying to avoid with this feature request. I guess I get it though, no sense in wasting time on reimplementing a windows 11 feature...


Replace date-range-picker with a self-contained directive.

As requested by Niclas, we have wrapped the date-range-picker into a directive with simple interface.
It has a slight dependency on angularMoment for formatting the date string in the date-picker-header, but could be removed upon request.
This directive handles two types of validation by itself.

ng-invalid-order   :  the start date is greater than the end date.
ng-invalid-empty  :  the start date or the end date is not set.

Error messages with translation will be provided automatically, but can be muted upon user's need. In the later case, the user can watch the errors from the binding to provide customized error messages by himself.

Good to see new stuff!
Is it possible to add angular moment as a npm dependency ?
I will push the test environment with karma, please add some tests for this directive.

Hi @bladine , I have updated the pr based on your suggestions.

Thanks @stephenwan
I've seen this empty file : js/date-range-picker/date-range-picker.directive.js~ if you could delete it.
About angular and angular material you upgraded to the latest version, is it on purpose due to the future upgrade in the project ? Or can we keep the old version for now?

Hi @blandine, I have removed the *~ file. It was mistakenly committed before I added that pattern into .gitignore, and went unnoticed thereafter. About the versions for angular and angular-material, it actually doesn't matter for my pr. I did the naive npm install *** --save without thinking about compatibility. Could you help me to adjust the package.json with the versions you prefer? Thanks.

hi @stephenwan I put the same versions as in the project as comments, so you can update easily your commit. Btw always keep a static version of the different modules.
thanks for the changes, I'm ready to merge after this :)

Thanks @blandine ! They are not in the correct versions.


Unable to connect to testamate

Hello, according to the Docker configuration file, after I made the configuration, I was unable to connect to and access testamate on the intranet, and I also couldn't see data on Grafana. I would like to ask if it is necessary to map port 5432 on the router to use your project? Also, how do I need to set up to access testamate normally on the intranet? When I used the testamate project before, I only mapped the 3000 port as a router, and the 4000 port does not need to be mapped on the intranet. Thank you for your answer. Here is my Docker configuration
version: "3"
services:
teslamateagile:
image: mattjeanes/teslamateagile:latest
restart: always
environment:
- DATABASE_USER=teslamate
- DATABASE_PASS=123456
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
- TeslaMate__UpdateIntervalSeconds=300
- TeslaMate__GeofenceId=11
- FixedPrice__TimeZone=Asia/Shanghai
- TeslaMate__EnergyProvider=FixedPrice
- FixedPrice__Prices__0=07:00-11:00=0.5783
- FixedPrice__Prices__1=11:00-13:00=0.3783
- FixedPrice__Prices__2=13:00-22:00=0.5783
- FixedPrice__Prices__3=22:00-07:00=0.3783
- ENCRYPTION_KEY=123456
- VIRTUAL_HOST=<IP_ADDRESS>
- TZ=Asia/Shanghai
- MQTT_HOST=mosquitto
- MQTT_USERNAME=tesla
- MQTT_PASSWORD=234567
- MQTT_PORT=1883
- Logging__LogLevel__Default=Debug
- Logging__Console__FormatterName=simple
- "Logging__Console__FormatterOptions__TimestampFormat=yyyy-MM-dd HH:mm:ss.fff "
- TeslaMate__LookbackDays=
- TeslaMate__Phases=
- DATABASE_PORT=5432
ports:
- 4025:4000
volumes:
- ./import:/opt/app/import
cap_drop:
- all
database:
image: postgres:16
restart: always
environment:
- POSTGRES_USER=teslamate
- POSTGRES_PASSWORD=123456
- POSTGRES_DB=teslamate
- TZ=Asia/Shanghai
volumes:
- teslamate-db:/var/lib/postgresql/data
grafana:
image: ccr.ccs.tencentyun.com/dhuar/grafana:latest
restart: always
environment:
- DATABASE_USER=teslamate
- DATABASE_PASS=123456
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
- TZ=Asia/Shanghai
ports:
- 3010:3000
volumes:
- teslamate-grafana-data:/var/lib/grafana
mosquitto:
image: eclipse-mosquitto:2
restart: always
command: mosquitto -c /mosquitto-no-auth.conf
ports:
- 1883:1883
volumes:
- mosquitto-conf:/mosquitto/config
- mosquitto-data:/mosquitto/data
volumes:
teslamate-db:
teslamate-grafana-data:
mosquitto-conf:
mosquitto-data:

Hey, the time zone mainly affects the fixed price provider as it will interpret your times under the selected timezone. Everything gets normalised to UTC in the output logs but the data should be correct

You can define it with any IANA timezone code but the logs will not show this as your dates are converted into UTC when the app starts up. The logs are only really designed to be used for debugging, the calculated value will appear in Grafana. If you convert the timezone in the logs back to your configured time zone it should all add up.

Yes you can have multiple instances of TeslaMateAgile running as long as they are using a different geofence ID

Looks like we didn't close this one off before, glad I could help!


Ensure copyright headers are correct/intact

Give credit where credit is due

Updated all py, cpp, c, h files with Flo copyright notice


Casts -> array support for textarea

I use a column as array, I can add and show data. But I can't edit. Because field casting as array. We need to convert to string.
    protected $casts = [
        'veri' => 'array'
    ];

On edit page, it's ok.

Thanks！


Intellij sbt 1.5.0 use home_dir/.ivy2/local as repository instead of Coursier

hi I have a project which suddenly has some error when I am doing sbt load command. As my local sbt is 1.3.2, the project specified sbt version is 1.5.0, all of them are bigger than 1.3.0, this sbt project should go to Coursier, but instead it goes to home_dir/.ivy2 to search for all jars. My other sbt project are working just fine...
I tried delete the project and refork one, invalidate the Intellij cache, either of them works...
This is my project setting:
build.properties specify `sbt.version=1.5.0`,  scala version in build.sbt is 2.12.15
Intellij IDEA  2022.3.3 (Community Edition),   sbt plugin is 2022.3.20

Here are the log details when I trigger sbt load:
/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home/bin/java -Djline.terminal=jline.UnsupportedTerminal -Dsbt.log.noformat=true -Dfile.encoding=UTF-8 -Didea.managed=true -Dfile.encoding=UTF-8 -Didea.installation.dir=/Users/userName/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/223.8836.41/IntelliJ IDEA CE.app/Contents -jar /Users/userName/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/223.8836.41/IntelliJ IDEA CE.app.plugins/Scala/launcher/sbt-launch.jar
[info] welcome to sbt 1.5.0 (Azul Systems, Inc. Java 11.0.13)
[info] loading settings for project global-plugins from credentials.sbt,plugins.sbt ...
[info] loading global plugins from /Users/userName/.sbt/1.0/plugins
[info] loading settings for project bladelier-tools-build from plugins.sbt ...
[info] loading project definition from /Users/userName/IdeaProjects/bladelier-tools/project
[info] loading settings for project bladelierTools from build.sbt,release.sbt ...
[info] resolving key references (13788 settings) ...
GitDescribeOutput(GitRef(v3.1.8),GitCommitSuffix(1,78230b7a),GitDirtySuffix(+20230712-1013))
[info] set current project to bladelier-tools (in build file:/Users/userName/IdeaProjects/bladelier-tools/)
[warn] there are 3 keys that are not used by any other settings/tasks:
[warn]
[warn] * common / maintainer
[warn]   +- /Users/userName/IdeaProjects/bladelier-tools/build.sbt:181
[warn] * bladelierTools / Test / coverageEnabled
[warn]   +- /Users/userName/IdeaProjects/bladelier-tools/build.sbt:7
[warn] * bladelierTools / gitRemoteRepo
[warn]   +- /Users/userName/IdeaProjects/bladelier-tools/build.sbt:47
[warn]
[warn] note: a setting might still be used by a command; to exclude a key from this lintUnused check
[warn] either append it to Global / excludeLintKeys or call .withRank(KeyRanks.Invisible) on the key
[info] sbt server started at local:///Users/userName/.sbt/1.0/server/c5dd0c64a5baeb389dda/sock
[info] started sbt server
sbt:bladelier-tools>
;set root.scala.collection.Seq(historyPath := None,shellPrompt := { _ => "" }
,SettingKeyroot.scala.Option[root.sbt.File]
in root.sbt.Global := root.scala.Some(root.sbt.file("/private/var/folders/v9/vbxmj8w54bn_9s_258z0z34c0000gq/T/sbt-structure.xml")),SettingKey[root.java.lang.String]
("sbtStructureOptions")
in root.sbt.Global := "download, resolveClassifiers")
[info] Defining Global / sbtStructureOptions, Global / sbtStructureOutputFile and 1 others.
[info] The new values will be used by cleanKeepGlobs
[info] 	Run last for details.
[info] Reapplying settings...
GitDescribeOutput(GitRef(v3.1.8),GitCommitSuffix(1,78230b7a),GitDirtySuffix(+20230712-1013))
[info] set current project to bladelier-tools (in build file:/Users/userName/IdeaProjects/bladelier-tools/)
[info] Applying State transformations org.jetbrains.sbt.CreateTasks from /Users/userName/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/223.8836.41/IntelliJ IDEA CE.app.plugins/Scala/repo/org/jetbrains/scala/sbt-structure-extractor_2.12_1.0/2022.3.1/sbt-structure-extractor-2022.3.1.jar
[info] Reapplying settings...
GitDescribeOutput(GitRef(v3.1.8),GitCommitSuffix(1,78230b7a),GitDirtySuffix(+20230712-1013))
[info] set current project to bladelier-tools (in build file:/Users/userName/IdeaProjects/bladelier-tools/)
[warn] sbt 0.13 shell syntax is deprecated; use slash syntax instead: Global / dumpStructure
Downloading https://artifactory.qa.companyXX.com/artifactory/snapshots/com/companyXX/bladelier/reader-index_2.12/3.1.5/reader-index_2.12-3.1.5.pom
Downloading https://artifactory.qa.companyXX.com/artifactory/snapshots/com/companyXX/bladelier/core_2.12/3.1.5/core_2.12-3.1.5.pom
Downloading https://artifactory.qa.companyXX.com/artifactory/snapshots/com/companyXX/bladelier/standalone-indexer-common_2.12/3.1.5/standalone-indexer-common_2.12-3.1.5.pom.sha1
Downloading https://artifactory.qa.companyXX.com/artifactory/snapshots/com/companyXX/bladelier/core_2.12/3.1.5/core_2.12-3.1.5.pom.sha1
Downloading https://artifactory.qa.companyXX.com/artifactory/snapshots/com/companyXX/bladelier/standalone-indexer-common_2.12/3.1.5/standalone-indexer-common_2.12-3.1.5.pom
Downloading https://artifactory.qa.companyXX.com/artifactory/snapshots/com/companyXX/bladelier/reader-index_2.12/3.1.5/reader-index_2.12-3.1.5.pom.sha1
Downloading https://artifactory.qa.companyXX.com/artifactory/releases/com/companyXX/bladelier/standalone-indexer-common_2.12/3.1.5/standalone-indexer-common_2.12-3.1.5.pom.sha1
Downloading https://artifactory.qa.companyXX.com/artifactory/releases/com/companyXX/bladelier/core_2.12/3.1.5/core_2.12-3.1.5.pom.sha1
Downloading https://artifactory.qa.companyXX.com/artifactory/releases/com/companyXX/bladelier/reader-index_2.12/3.1.5/reader-index_2.12-3.1.5.pom.sha1
Downloading https://artifactory.qa.companyXX.com/artifactory/releases/com/companyXX/bladelier/core_2.12/3.1.5/
Downloading https://artifactory.qa.companyXX.com/artifactory/releases/com/companyXX/bladelier/reader-index_2.12/3.1.5/
Downloading https://artifactory.qa.companyXX.com/artifactory/releases/com/companyXX/bladelier/standalone-indexer-common_2.12/3.1.5/
Downloading https://artifactory.qa.companyXX.com/artifactory/snapshots/com/companyXX/bladelier/document-model_2.12/3.1.5/document-model_2.12-3.1.5.pom
Downloading https://artifactory.qa.companyXX.com/artifactory/snapshots/com/companyXX/bladelier/document-model_2.12/3.1.5/document-model_2.12-3.1.5.pom.sha1
Downloading https://artifactory.qa.companyXX.com/artifactory/snapshots/com/companyXX/projectA/common/common-io/1.12.48/common-io-1.12.48.pom
Downloading https://artifactory.qa.companyXX.com/artifactory/snapshots/com/companyXX/projectA/common/common-io/1.12.48/common-io-1.12.48.pom.sha1
Downloading https://artifactory.qa.companyXX.com/artifactory/snapshots/com/companyXX/bladelier/hadoop-utils_2.12/3.1.5/hadoop-utils_2.12-3.1.5.pom
Downloading https://artifactory.qa.companyXX.com/artifactory/snapshots/com/companyXX/bladelier/hadoop-utils_2.12/3.1.5/hadoop-utils_2.12-3.1.5.pom.sha1
Downloading https://artifactory.qa.companyXX.com/artifactory/snapshots/com/companyXX/projectA/tokenizer/tokenizer-api/2.6.19-RELEASE/tokenizer-api-2.6.19-RELEASE.pom
...
https://companyXXcentral.corp.companyXX.com/artifactory/companyXX.sbe.releases-nxrepository/…
https://companyXXcentral.corp.companyXX.com/artifactory/companyXX.sbe.releases-nxrepository/…
[error] stack trace is suppressed; run 'last common / coursierResolutions' for the full output
[error] stack trace is suppressed; run 'last index-verifier / ssExtractDependencies' for the full output
[error] stack trace is suppressed; run 'last index-comparator / ssExtractDependencies' for the full output
[error] stack trace is suppressed; run 'last generic-tools / ssExtractDependencies' for the full output
[error] stack trace is suppressed; run 'last index-dumper / ssExtractDependencies' for the full output
[error] stack trace is suppressed; run 'last index-analyzer / ssExtractDependencies' for the full output
[error] stack trace is suppressed; run 'last common / ssExtractDependencies' for the full output
[error] stack trace is suppressed; run 'last byname-generator / ssExtractDependencies' for the full output
[error] (common / coursierResolutions) coursier.ResolutionException: Encountered 17 error(s) in dependency resolution:
[error]     com.companyXX.projectA.maven:maven-globalproperties:0.9.30:
[error]         not found:
[error]             /Users/userName/.ivy2/local/com.companyXX.projectA.maven/maven-globalproperties/0.9.30/ivys/ivy.xml
[error]             https://repo1.maven.org/maven2/com/companyXX/projectA/maven/maven-globalproperties/0.9.30/maven-globalproperties-0.9.30.pom
[error]         unauthorized:
[error]             https://artifactory.qa.companyXX.com/artifactory/snapshots/com/companyXX/projectA/maven/maven-globalproperties/0.9.30/maven-globalproperties-0.9.30.pom (Artifactory Realm)
[error]             https://artifactory.qa.companyXX.com/artifactory/releases/com/companyXX/projectA/maven/maven-globalproperties/0.9.30/maven-globalproperties-0.9.30.pom (Artifactory Realm)
[error]             https://artifactory.qa.companyXX.com/artifactory/v3debt/com/companyXX/projectA/maven/maven-globalproperties/0.9.30/maven-globalproperties-0.9.30.pom (Artifactory Realm)
[error]             https://artifactory.qa.companyXX.com/artifactory/central-cache/com/companyXX/projectA/maven/maven-globalproperties/0.9.30/maven-globalproperties-0.9.30.pom (Artifactory Realm)
[error]             https://artifactory.qa.companyXX.com/artifactory/aggregator-nxrepository/com/companyXX/projectA/maven/maven-globalproperties/0.9.30/maven-globalproperties-0.9.30.pom (Artifactory Realm)
[error]             https://companyXXcentral.corp.companyXX.com/artifactory/central/com/companyXX/projectA/maven/maven-globalproperties/0.9.30/maven-globalproperties-0.9.30.pom (Artifactory Realm)
[error]             https://companyXXcentral.corp.companyXX.com/artifactory/snapshots/com/companyXX/projectA/maven/maven-globalproperties/0.9.30/maven-globalproperties-0.9.30.pom (Artifactory Realm)
[error]             https://companyXXcentral.corp.companyXX.com/artifactory/releases/com/companyXX/projectA/maven/maven-globalproperties/0.9.30/maven-globalproperties-0.9.30.pom (Artifactory Realm)
[error]             https://companyXXcentral.corp.companyXX.com/artifactory/thirdparty/com/companyXX/projectA/maven/maven-globalproperties/0.9.30/maven-globalproperties-0.9.30.pom (Artifactory Realm)
[error]             https://companyXXcentral.corp.companyXX.com/artifactory/aggregator-nxrepository/com/companyXX/projectA/maven/maven-globalproperties/0.9.30/maven-globalproperties-0.9.30.pom (Artifactory Realm)
[error]             http://companyXXcentral.corp.companyXX.com/artifactory/companyXX.sbe.3rdparty-nxrepository/com/companyXX/projectA/maven/maven-globalproperties/0.9.30/maven-globalproperties-0.9.30.pom (Artifactory Realm)
[error]             https://companyXXcentral.corp.companyXX.com/artifactory/companyXX.sbe.releases-nxrepository/com/companyXX/projectA/maven/maven-globalproperties/0.9.30/maven-globalproperties-0.9.30.pom (Artifactory Realm)
[error]     junit:junit::
[error]         not found:
[error]             /Users/userName/.ivy2/local/junit/junit/ivys/ivy.xml
[error]             https://repo1.maven.org/maven2/junit/junit//junit-.pom
[error]         unauthorized:
[error]             https://artifactory.qa.companyXX.com/artifactory/snapshots/junit/junit//junit-.pom (Artifactory Realm)
[error]             https://artifactory.qa.companyXX.com/artifactory/releases/junit/junit//junit-.pom (Artifactory Realm)
[error] Total time: 246 s (04:06), completed Jul 12, 2023, xx:xx:xx AM
[info] shutting down sbt server

Is the problem reproducible with the current sbt version, 1.9.2?

Is the problem reproducible with the current sbt version, 1.9.2?

I don't think this is any bug with sbt 1.5.0 version... my other project use sbt 1.5.0 they worked just fine... I didn't try with sbt 1.9.2

I set below vm parameter in my intellij sbt build tools, but is keeps going to ivy2... and keeps trying to download packages... (those packages already exists in my coursier folder)
-Dsbt.override.build.repos=true
-Dsbt.coursier.home=/Users/userId/Library/Caches/Coursier

I find one of my Realm credential is out of date.... I update the credential and the error disappear... but I still didn't get it... why it goes to .ivy2 and search for ivy.xml? after the build success, I go to ivy2/local folder and still didn't find any new packages are downloaded... so why does the message keeps talking about ivy2?

We use GitHub issue mostly to track bugs and tasks on sbt development, and specifically we don't want it to turn into a support forum. If you need help, please check this out - https://www.scala-sbt.org/support.html

/Users/userName/.ivy2/local/ is where publishLocal publishes into so it's checked by Coursier as well usually.


Cannot use field/index/invocation access on grouped expressions

Description:
#20234 Partially fixes the issue. However, still cannot use expressions within the group (i.e ("A" + x).length(), ((dataMap)["a"]).getName()) due to current grammar limitations.
Steps to reproduce:
# Fails because `("string " + x)` is not supported within group invocation.
 function testGroupedLangLibInvocationRef() returns boolean {
     string x = "value";
     return (("string " + x)).length() == 12;
 }

# Fails because `<PersonObj>(dataMap)["a"]` is not supported within group invocation.
 function testNestedGroupedInvocationRef() returns boolean {
     PersonObj p = new;
     map<PersonObj> dataMap = {"a": p};
     return p.getName() === (<PersonObj>(dataMap)["a"]).getName();
 }

# Fails because `isNaN()` invocation on (0.0/0.0) expression is not supported.
function testGroupedBuiltInInvocationRef() returns boolean {
    float f = 0.0/0.0;
    return f.isNaN() && (f).isNaN() && (0.0/0.0).isNaN();
}

Affected Versions:
1.0.5, 1.1.0
Related Issues:

https://github.com/ballerina-platform/ballerina-lang/issues/18298
https://github.com/ballerina-platform/ballerina-lang/issues/19020

Looks like this is fixed in the new parser. Hence we can close the issue.

@dulvinw Shall we add a test case.

Although this seems to be fixed in the parser, this still crashes in the compiler. Need to fix the compiler as well. See #24603 for examples. A user raised this issue in Slack as well.

Removed the 'parser' label since this is fixed in the parser.


black screen

in webview ?

/gifPlease

Hey @deepak1556, this issue might need further attention.
@divyateja598, you can help us out by closing this issue if the problem no longer exists, or adding more information.

This issue has been closed automatically because it needs more information and has not had recent activity. See also our issue reporting guidelines.
Happy Coding!


Add support for loading ONNX models.

Discussed in https://github.com/dotnet/TorchSharp/discussions/377
Add support for loading ONNX models for the purpose of transfer learning in TorchSharp.

https://github.com/dotnet/TorchSharp/discussions/526

Implement Torch.ONNX


Service bindings with invalid names return the same error as service bindings that already exist

Issue
Service bindings with an invalid name return same error code as bindings that already exist
Context
Trying to create a binding with a custom (invalid) name such as A binding name with spaces causes CC to return:
{
  "code": 90003,
  "description": "The binding name is invalid. Valid characters are alphanumeric, underscore, and dash.",
  "error_code": "CF-ServiceBindingAppServiceTaken"
}

but this is the same error code as when a binding already exists:
{
  "code": 90003,
  "description": "The app is already bound to the service. The binding name is invalid. App binding names must be unique. The app already has a binding with name 'a-valid-binding-name'.",
  "error_code": "CF-ServiceBindingAppServiceTaken"
}

The CF CLI then assumes that code 90003 corresponds to the second case where the app is already bound to this service see here which is a bit of a misleading error message.
Steps to Reproduce

Create a service - cf cups a-service -p '{"foo": "bar"}'
Create an app cf create-app an-app
Try to bind the app with a bad name - cf bind-service an-app a-service --binding-name "A binding name with spaces"

Expected result
The CLI tells me that this name is invalid
Current result
The CLI thinks that the error is due to the service binding already existing
Possible Fix
Use a different error code for the case of an invalid name vs. an already used name or use a different HTTP code such as 409 Conflict for the case where it already exists

Hmm, looks like a v2 issue.  Sadly CLI 7 still uses the v2 endpoint.  CLI 8 will use the v3 endpoint, which no longer has this issue.

Hi @andy-paine ,
Thanks for reporting this issue!
Unfortunately, it's unlikely we will tackle this issue anytime soon, as it is fixed in V3 and we have a backlog of higher priority issues for the foreseeable future.  However, we would be happy to review a PR for this if you (or anyone else) choose to submit one.
Thanks!


InputRules should ignore escaped $ symbols

I write many more LaTeX equations than dollar amounts, but I recognize that I am in the minority.  For accessibility, prosemirror-math should have a standard (but configurable) way of escaping $ characters.
At the moment, the default inline input rule uses a negative-lookbehind regex to avoid inserting math nodes, but this has a few limitations:

Negative lookbehinds are currently only supported in new-ish versions of Chrome and FireFox
Sometimes, the input rules will accidentally latch on to a $ symbol in a distant node and assume the user wants to create a math block.

Solutions to consider:

Modify ProseMirror's InputRule implementation to support escape sequences before a matched string
By default, prosemirror-math should assume all $'s are math-related, unless the user explicitly indicates otherwise.  For example, any of the following actions should create an escaped $

use a backslash \$ to escape math
or put a space after the dollar sign $  to escape math (automaticaly remove the space)

Related to #2 .

Lookbehind now supports in most browsers: https://caniuse.com/js-regexp-lookbehind (93%+ of all users).
I think, you can update readme section https://github.com/benrbray/prosemirror-math?tab=readme-ov-file#input-rules for use REGEX_INLINE_MATH_DOLLARS_ESCAPED or add link to this issue.


firefox: use gold linker to speedup build

Motivation for this change
Passing --enable-linker=gold speed-up final linking a bit. (not significant, in compare with gkrust crate building, but should save half minute or so).
Things done

[x] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Ensured that relevant documentation is up to date
[x] Fits CONTRIBUTING.md.

Is there any change in binary output size?

With BFD ld (both listings manually cleaned from non-elf)
[avn@bulldozer:pts/7]~/nixos/nixpkgs% ls -la /nix/store/dvm88pk05kglwz36hmf1jzm12v6m511v-firefox-unwrapped-80.0.1/lib/firefox/
total 78M
417K -r-xr-xr-x     2 root root 668K Jan  1  1970 firefox
417K -r-xr-xr-x     2 root root 635K Jan  1  1970 firefox-bin
 25K -r-xr-xr-x     2 root root  42K Jan  1  1970 liblgpllibs.so
985K -r-xr-xr-x     2 root root 1,8M Jan  1  1970 libmozavcodec.so
125K -r-xr-xr-x     2 root root 203K Jan  1  1970 libmozavutil.so
4,5K -r-xr-xr-x     2 root root  14K Jan  1  1970 libmozgtk.so
 93K -r-xr-xr-x     2 root root 147K Jan  1  1970 libmozsandbox.so
681K -r-xr-xr-x     2 root root 896K Jan  1  1970 libmozsqlite3.so
8,5K -r-xr-xr-x     2 root root  18K Jan  1  1970 libmozwayland.so
 62M -r-xr-xr-x     2 root root 106M Jan  1  1970 libxul.so
421K -r-xr-xr-x     2 root root 639K Jan  1  1970 pingsender
413K -r-xr-xr-x     2 root root 627K Jan  1  1970 plugin-container

With ld.gold:
[avn@bulldozer:pts/7]~/nixos/nixpkgs% ls -la /nix/store/h48wy8rk885lcjj4fp6z878711n6jxg6-firefox-unwrapped-80.0.1/lib/firefox/
total 78M
417K -r-xr-xr-x     2 root root 656K Jan  1  1970 firefox
413K -r-xr-xr-x     2 root root 627K Jan  1  1970 firefox-bin
 25K -r-xr-xr-x     2 root root  43K Jan  1  1970 liblgpllibs.so
989K -r-xr-xr-x     2 root root 1,8M Jan  1  1970 libmozavcodec.so
125K -r-xr-xr-x     2 root root 203K Jan  1  1970 libmozavutil.so
4,5K -r-xr-xr-x     2 root root 6,0K Jan  1  1970 libmozgtk.so
 93K -r-xr-xr-x     2 root root 151K Jan  1  1970 libmozsandbox.so
685K -r-xr-xr-x     2 root root 900K Jan  1  1970 libmozsqlite3.so
4,5K -r-xr-xr-x     2 root root  11K Jan  1  1970 libmozwayland.so
 62M -r-xr-xr-x     2 root root 107M Jan  1  1970 libxul.so
417K -r-xr-xr-x     2 root root 631K Jan  1  1970 pingsender
409K -r-xr-xr-x     2 root root 619K Jan  1  1970 plugin-container

I am not sure what should be preffered here -- build time/builder memory consumption or final executables size
(I will check one more time with exact with/without builds, but it take some time)

IMHO what matters most is runtime performance of firefox. Which is why I've been trying to get around to implementing what https://github.com/NixOS/nixpkgs/issues/76484#issuecomment-673231152 describes.
That would switch the linker to lld, because it builds with clang.

@ajs124 I am ok with --enable-linker=lld as it should have build/memory time similar to gold. But idk if LTO/PGO make local builds impossible  or not.

As a first step this should be fine. When we finally manage PGO/LTO we can still switch to lld.

There is --enable-linker=lld also possible.
How PGO/LTO would affect on build machine requirements btw?

There is --enable-linker=lld also possible.
How PGO/LTO would affect on build machine requirements btw?

Last time it at least doubled the required storage requirements. The build took easily 2x the time it already takes. Part of that is probably that you've to create profile first and then feed that back into a second build.

But idk if LTO/PGO make local builds impossible or not.

LTO does not make local builds impossible. Well, not that I have found. It builds within reasonable time comparable to non-LTO Firefox. As for PGO, it is inherently nondeterministic to my understanding because the profile created depends on the system it is built on. It might be possible for the PGO profiles to generated and then distributed so the determinism problem is in a way solved, but I have not looked into whether Firefox's build system supports that. That being said I have not given PGO a serious attempt.
As for LTO support please see https://github.com/NixOS/nixpkgs/issues/76484#issuecomment-703884398. It has a common.nix which supports it which depends on the linker being lld and compiler clang.

Since we've added LTO support (which unfortunately broke wayland support and is thus disabled by default) do we still want this as well? I am a bit more cautious with changing the linker etc..

@andir ping

We can try use lld as "isolated change of linker" and let look if something breaks. (but I need remember how to add lld to buildInputs first)

I would rather go to the full LLVM road after I've spent a sunday debugging aarch64 builds. Mozilla doesn't test builds with GCC anymore so it will always be a battle to support GCC. There are a enough distributions that will still use GCC so there will be support (and patches) for that but I am not convinced we want to fight that battle for a marginal benefit.


[DISCUSSION] Was reverting the Google Wallet icon intentional?

About this discussion
This is just something I noticed looking through the changes of @SuperDragonXD's recent commit General SVG cleanup + … (e5f97b77b6f057b688fd680a2425e69ecd4a1eea): there were previously two references to the Google Wallet app (com.google.android.apps.walletnfcrel), one with the old Google Pay logo and one with the new Google Wallet logo, and the latter was removed, leaving the out of date icon as the current linked icon. Was this intentional? If it is, that's fine, just thought I'd ask as I could see it being unintentional, especially as the Google Wallet SVG file is still there.
Thanks!

Thanks for the heads-up! Fixed.


W039 never triggered?

I'm currently going through JSHint error messages to determine which of them ever show up in our use of JSHint on Khan Academy.
I notice that W039 is only defined in the messages list, and never seems to be triggered from the parser.
We do still have a trigger for it in our old JSHint copy (https://github.com/Khan/live-editor/blob/master/external/jshint/jshint.js), but I'm thinking perhaps it went away in yours at some point?
Either that, or my git repo searching isn't yielding all results.
Just an FYI in case it's easy dead code to remove.

Same question regarding W105. Only in messages, not triggered from parser, and no evidence of a test for it.


Feat: We added the horizon weighing to the distribution losses, simil…

We suggest modifying the distribution loss class to include the weighting option for distribution losses (to be similar to point losses)

We pass the horizon weight vector when initializing the losses
We add a function to check and apply the weights according to the mask

 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.


Load two virtual NICs if using two different VLAN tags

This patch is similar to #422 but for SnabbVMX.
If VLAN is configured and VLAN tags are different, SnabbVMX uses two virtual NICs, one per type of traffic (IPv4 or IPv6), and skips initialization of the V4V6 Splitter connected to the NIC.
It's better to merge this PR once #419 has landed (it would be necessary to rework qprdc initialization).

LGTM


fix(repeat): preserve lifecycle when re-using views

@EisenbergEffect Can you please review if this looks like expected behavior. When the view gets re-used the only thing that updates is the execution context's "item", one improvement might be to only update that and manually call unbind from inside the repeater, oppose the create a new full execution context. Let me know what you think.
@stoffeastrom I have tested this with some basic scenarios but I know you sortable plugin is a little more edge case, if you get any chance to test it out please let me know. I've created a gist with the compiled version of repeat.js https://gist.github.com/martingust/44ebf1f795628a229741

I think this looks pretty good. Can you perform an experiment for me? Can you make sure this works correctly when the item template has a compose element in it and the compose element's view-model is data-bound so that it renders different view-model/views based on a property of the data?
<li repeat.for="widget of widgets">
  <compose view-model="${widget.type}"></compose>
</li>

Just want to make sure that still works correctly when re-using views.

I just copy pasted your gist @martingust without updating Aurelia ( will try that also ). However I still experience problems with $index property. It feels like it's wrongly updated. I will look into it further.

Updated to latest and first impression is that it works much better now. Even without adding you gist @martingust .
I will play around some more and see if I can find anything.

@EisenbergEffect Just tested and it seems to behave as expected.
@stoffeastrom Great. Let me know if you find any issues.
If nothing else this should be ready to be merged.


Cant change Camera2 Settings

When I right click the screen with camera 2 it says the settings are in game but I can't find them. Is it possibly a bug or is it somewhere else?

There is a Camera2 button in the "mods" section in the main menu

I definitely don't see it. I think it's a bug. here is a video. https://streamable.com/ytuoew. The mod definitely is downloaded because the fov is higher and it's smoother so idk what's happening.

Is there a dependency required for it to show?

Can you attach your latest log file from the game's logs folder

[INFO @ 14:05:03 | Camera2] Camera2 initialized.
[DEBUG @ 14:05:04 | Camera2] OnApplicationStart
[NOTICE @ 14:05:07 | Camera2] Game is ready, Initializing...
[DEBUG @ 14:09:14 | Camera2] OnApplicationQuit

from Beat Saber > Logs > Camera2 > _latest.log

I downloaded the latest version and nothing changed

Thats the camera2 specific log, I need to game one (Directly in the logs folder)

_latest.log

that is the game log

You seem to have somehow corrupted your Scenes.json config in the Camera2 folder - Delete that and it should work. I'll add better handling incase this happens.

thank you i will try that now.

It works now. I do remember trying to edit the file to change the settings because it didn't show up before so that's my fault.