Reference citations

Authors should be able to cite references from the article reference list in their main text, section titles, appendices, asset titles and legends and the Data availability section.
User Stories
Author

As an Author, I want to be able to cite a reference in the text of my article so that I can indicate the relevance of a reference from my references list.
As an author, I want to be able to delete a reference citation so that I can correct mistakes.
As an author, when using name/year citation, I want to be able to add both standard citations (“We are doing an experiment based on previous work (Smith et al., 2009)”) and conversational citations (“We are doing an experiment based on the work of Smith et al. (2009)”) so that I can use the style most appropriate to my text.
As an author, when using number citation, I want the reference list order to update when I add a new citation so that the list continues to match the order of first citations in the text.

Production staff

As production staff, I want to be able to set the citation style for an article to either number citation or name/year citation so that I can apply house style.

But what if . . . ?

The only citation of a reference is removed from the text? eLife wants to be able to alert authors/staff when an edit like this takes place, since when it is not desirable to have references without citations in the text.
The author is adding a range of citations? In numbered citations, this is represented as for example "2–10". In name/year, it might be "Smtih et al., 2009; Smith and Jones, 1999; Markus et al., 1978". How should these link? Should there be any rules about chronological order of citations? How to we account for a mix of ranges and individual citations e.g. "1, 4, 5–9"?

Considerations

Broadly, there are two major citation styles that need to be supported: name/year (Smith et al., 2009) and number (usually denoted with a superscript numeral).
When using name/year reference style, references with the same bibliographic details need to be distinguished. For example, it is possible to have two or more references whose citation would be Smith et al., 2009. In these instances, a letter will need to be appended to the year in order to distinguish them (Smith et al., 2009a, Smith et al., 2009b). At present in eLife, this letter is added directly to the value of <year> in the structured reference.
There are a variety of ways in which name/year citation style can be written and linked in the text. For example, eLife uses two variations depending on context: (Smith et al., 2009) and Smith et al. (2009); eLife links the entire text of the citation, other journals may only link the year etc.
Common variations and extensions of name/year citation include citations that mention the page number (Ley 2004, 157) and use of the term 'ibid' to reference the same article as a preceding citation (ibid.,  112-114). In PKP's XML, each of these text strings are included in the xref (e.g. <xref rid="ID6bf9805" ref-type="bibr" id="ID4baecd8c">ibid., 39</xref>) but there may be other ways of handling these cases.
Sequential ranges of references in number citation can be represented as e.g. "1-5"
Érudit do not link in-text citations to the reference list - they just include them as plain text, so they won't need the linking functionality described in this ticket.

XML requirements
Captured as an xref element, with the @ref-type="bibr" and an @rid whose value is the same as the ref/@id it refers to.
<xref ref-type="bibr" rid="bib22">Ding and Gold, 2010</xref>

Sequential citations should be tagged in the following way (including all reference ids, space separated):
<xref ref-type="bibr" rid="bib22 bib23 bib24">22-24</xref>

Taken from: https://github.com/elifesciences/TextureRequirements/issues/34

This feature needs work to meet some user stories


Fasta compiler in checked mode triggers an assertion in transformations/erasure.dart

Running fasta compiler in checked mode throws an exception quoted below.
Running same script against same input in unchecked mode completes fine.
╭─aam@host ~/projects/dart/sdk  ‹master›
╰─➤  ~/projects/dart/sdk/xcodebuild/ReleaseX64/dart --checked ~/projects/dart/sdk/xcodebuild/ReleaseX64/dart-sdk/lib/front_end/tool/_fasta/compile.dart --packages=/Users/aam/projects/flutter/test_root/flutter/flutter/examples/flutter_gallery/.packages --platform=/Users/aam/projects/flutter/test_root/flutter/engine/src/out/android_debug_unopt/flutter_patched_sdk/platform.dill /Users/aam/projects/flutter/test_root/flutter/flutter/examples/flutter_gallery/lib/main.dart --target=flutter_fasta

...

file:///Users/aam/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/typed/stream_subscription.dart:36:13: Warning: Declared type variables of 'TypeSafeStreamSubscription::asFuture' doesn't match those on overridden method 'StreamSubscription::asFuture'.
  Future<E> asFuture<E>([E futureValue]) => _subscription.asFuture(futureValue);
            ^
Unhandled exception:
'package:kernel/transformations/erasure.dart': Failed assertion: line 75 pos 14: 'node.enclosingClass.typeParameters.length ==
          node.function.typeParameters.length': is not true.
#0      _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:35)
#1      _AssertionError._throwNew (dart:core-patch/errors_patch.dart:31)
#2      Erasure.visitProcedure (package:kernel/transformations/erasure.dart:75:14)
#3      Procedure.accept (package:kernel/ast.dart:1182:32)
#4      transformList (package:kernel/ast.dart:4471:27)
#5      Class.transformChildren (package:kernel/ast.dart:790:5)
#6      Erasure.visitClass (package:kernel/transformations/erasure.dart:66:10)
#7      Class.accept (package:kernel/ast.dart:730:30)
#8      transformList (package:kernel/ast.dart:4471:27)
#9      Library.transformChildren (package:kernel/ast.dart:366:5)
#10     Transformer.defaultTreeNode (package:kernel/visitor.dart:331:10)
#11     TreeVisitor.visitLibrary (package:kernel/visitor.dart:222:35)
#12     Library.accept (package:kernel/ast.dart:353:30)
#13     transformLibraries (package:kernel/transformations/erasure.dart:18:13)
#14     FlutterFastaTarget.performModularTransformationsOnLibraries (package:kernel/target/flutter_fasta.dart:33:7)
#15     KernelTarget.runBuildTransformations (package:front_end/src/fasta/kernel/kernel_target.dart:678:19)
#16     KernelTarget.buildProgram (package:front_end/src/fasta/kernel/kernel_target.dart:286:7)
<asynchronous suspension>
#17     CompileTask.compile (package:front_end/src/fasta/fasta.dart:164:38)
<asynchronous suspension>
#18     compile.<anonymous closure> (package:front_end/src/fasta/fasta.dart:101:25)
<asynchronous suspension>
#19     CompilerContext.withGlobalOptions.<anonymous closure> (package:front_end/src/fasta/compiler_context.dart:45:33)
#20     _rootRun (dart:async/zone.dart:1120)
#21     _CustomZone.run (dart:async/zone.dart:1001)
#22     runZoned (dart:async/zone.dart:1467)
#23     CompilerContext.withGlobalOptions (package:front_end/src/fasta/compiler_context.dart:45:12)
#24     CompilerCommandLine.withGlobalOptions (package:front_end/src/fasta/compiler_command_line.dart:120:28)
#25     compile (package:front_end/src/fasta/fasta.dart:94:38)
<asynchronous suspension>
#26     compileEntryPoint (package:front_end/src/fasta/fasta.dart:53:11)
<asynchronous suspension>
#27     main (file:///Users/aam/projects/dart/sdk/xcodebuild/ReleaseX64/dart-sdk/lib/front_end/tool/_fasta/compile.dart:7:33)
#28     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:263)
#29     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:151)

The source of the parameter mismatch error above seems to be
  factory TickerProviderStateMixin._() => null;

at
https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/widgets/ticker_provider.dart#L159

Thank you. I recommend that you avoid running Fasta in checked as it isn't being tested in checked mode yet.

Ah, good to know, thanks!

But if you do and find any problems like this, please report them :-)

I stumbled on this because by default IntelliJ Dart plugin runs the app in checked mode. So in order to run Fasta from IntelliJ I have to make sure to uncheck 'Checked mode' checkbox.

I see. I normally run all my experiments in checked mode as well.


[proposal] kubeone apply

What this PR does / why we need it:
A proposal to the kubeone up command which can decide what to do with cluster, init/reconcile/upgrade.
NONE

Deleted this branch instead of KubeOne Cluster API proposal. :roll_eyes: Everything is restored now.
/reopen

I'm going to write another proposal


Add a method to request additional permissions.

Can you fix the brace on line 109 and the indentation to 4 spaces instead of tabs?
Other than that it looks ok to me

This needs to use 4 spaces instead of tabs.
Method should be an overload of getAuthInvite

Still missing indentation with spaces and new line braces.
Missing @param doc for JDA (Which I don't understand why it needs to be a parameter here btw)

It is a parameter to better respect the original overload. Not sure it is needed but it isn't -exactly- wrong.
It could lead to an interesting situation however where someone could provide a JDA object and a Guild object which aren't related.

Needs @param tag if you want to keep the JDA param.

@DV8FromTheWorld Seeing as we only need the ID from the guild, not the guild itself, I'll avoid that interesting situation by changing the Guild parameter to just a String for the ID. It'll also allow for invites for guilds the bot isn't already in. Making the edits right now.

Also, clarifying, I'm gonna change it a bit to be more general use rather than specifically for adding perms.

You're doing String#getId() now. Did you even run this through a compiler?

No, had like 5 minutes to work on it yesterday and didn't think.

Personally.. I think this would have been better if it was a Guild parameter instead of a JDA and String parameter. You can retrieve a known connected JDA instance from Guild and also retrieve the Guild's id. I see no real reason to do it this way.

I was thinking it could be used to get an invite for a guild it's not already in. Get the ID from some sort of oauth webapp. As for the JDA param, I was trying to keep it consistent with the other methods.


"Invalid time format" Error thrown

We have a service which has been running fine for a while now. The entire server is repeatedly going down today because the vertica driver is throwing an Error. Stack trace is below.
I took a look at the source, and this file is riddled with thrown Errors. Shouldn't these all be caught in query.js and returned to the callback? Taking down the entire app because an unexpected data format was received seems a bit drastic.
The value in the buffer which caused this was in the format "10:34:01.16".  Apparently the time values are not limited to second precision. I patched our code for now to handle this by just discarding the fractional part, but I think this needs a more thoughtful approach.
node_modules/vertica/lib/types.js:108
    throw new Error('Invalid time format!');
          ^
Error: Invalid time format!
    at Function.VerticaTime.fromStringBuffer (node_modules/vertica/lib/types.js:108:11)
    at Field.stringDecoders.time [as decoder] (node_modules/vertica/lib/types.js:259:24)
    at Query.onDataRow (node_modules/vertica/lib/query.js:85:51)
    at Connection.emit (events.js:95:17)
    at Connection._onData (node_modules/vertica/lib/connection.js:350:14)
    at Socket.emit (events.js:95:17)
    at Socket.<anonymous> (_stream_readable.js:764:14)
    at Socket.emit (events.js:92:17)
    at emitReadable_ (_stream_readable.js:426:10)
    at emitReadable (_stream_readable.js:422:5)

In this case, I don't think this should be returned by the callback because this looks like a bug to me. We should be able to parse any timestamp that Vertica sends back.
Any chance you can figure out what vertica is sending that makes it fail?

See above. The string was "10:34:01.16".  The vertica docs say TIME has microsecond resolution, but I don't know how that works out at the protocol level.

This can be fixed by fixing the regular expression that parses Time values (https://github.com/wvanbergen/node-vertica/blob/master/src/types.coffee#L74) and Timestamp values (https://github.com/wvanbergen/node-vertica/blob/master/src/types.coffee#L92)
I don't have time for this ATM, feel feel free to open a PR to fix this and I will merge.

That's how I hotpatched it as a stop-gap measure. Right now I'm just discarding the sub-second data, but it seems like it should be preserved. Do you have any idea if VerticaTime will work correctly with a non-integer seconds value? I haven't gotten that far into the code yet.

The VerticaTime type is only used for two things:

To return to the user if the resultset includes a time column. This can be fixed by either making the seconds field a float instead of an integer, or add a separate microseconds field. I have no strong preference
A user can send a VerticaTime value to quote to properly include a time value in a SQL query: https://github.com/wvanbergen/node-vertica/blob/master/src/types.coffee#L70. You may want to make sure this gets a fix as well.

Just add some tests to show it's working as expected and I will merge :+1:


Adds missing PagerDuty client error handling

This adds missing PagerDuty client build error handling in the cluster context command, which was allowing a nil pointer to a *client when improperly setting tokens.
This will also disable PagerDuty context gathering if the client has not properly been created.
Signed-off-by: Chris Collins<EMAIL_ADDRESS>

/lgtm


Upgrade to flow-bin 0.82

Coverage remained the same at 41.811% when pulling c056e393d668f09d131b5ed6b55fabc176d313d7 on bjornreppen:flow into c54d63e6dcbb96379b535ad9e185149b77cefffb on Artsdatabanken:master.


Is it possible to invert the colors with rpicam-apps?

I am trying to built a digital magnifier for people with low vision.  A common function for the commercial magnifiers is to invert the colors.  As i'm understanding more about the Raspberry Pi camera concepts, it appears that this ability used to exist in the legacy application raspicam but was inexplicably removed in rpicam-apps.  (Source: https://www.raspberrypi.com/documentation/computers/camera_software.html#differences-between-rpicam-and-raspicam)
Is there another way I could achieve this with rpicam-apps?  I'm using the DRM/KMS preview rendering so I don't have any x11 overhead to slow things down, but I'll entertain using x11 if I can still achieve fast boot times.  I appreciate any direction and suggestions at all.

The effects in the legacy camera stack were internally referred to as the legacy effects framework, and were all post-processing of the images.
The libcamera docs cover post-processing, which includes a negate option - https://www.raspberrypi.com/documentation/computers/camera_software.html#built-in-stages
The other potential option is to use a gamma map to invert the image. Pi0-3 support an output gamma map in the DRM driver (Pi4 has a hardware issue in that block, and I can't recall for Pi5).
I can't recall if the ISP can implement an inverted gamma map when producing the images.

Hi!  I just tested this and is worked like a charm!  That page alro made me interested in the Sobel filter, but I'll explore that when I have more time.  Thanks so much @6by9!


REL: 0.2.0

Require jedi>=0.10.0
Add missing runtime deps

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe) and found it was in an excellent condition.


Work around docutils v0.21.2 deprecation issue

A deprecation warning in docutils surfaces through sphinx-autodoc-typehints. A workaround was submitted to sphinx-autodoc-typehints but that workaround/fix is not yet in a release version.  Gotta start somewhere.

 Closing this PR. I think this change needs to happen in awx_plugins.interfaces ???


Feature request: Selecting user_key

Hi!
Is it possible to make $config->user more open? It would be nice if we could input customers keys from a database instead of hardcode config.

I'm open to ideas. This module needs a refresh pass, coming soon. I will probably be reworking the whole credentials layer along with that.


[graphics] sky renderer "ground" color wrong

The sky renderer should draw the endless black void.  It looks like all colors here are 2x brighter than they should be.
Finalboss:

PCSX2:

For levels that should have black, we get gray.

works, and matches PCSX2 pretty nicely!  (except for the corrupted cloud texture)


Cannot build on CERN CentOS7

ErrorReport.sh
-bash-4.2$ ./bin/ErrorReport.sh
HOSTNAME     = lxplus755.cern.ch
SYSTEM       = Linux
OS           = CentOS Linux
VER          = 7
GRSISYS      = /eos/experiment/s1626/GRSISort
ROOTSYS      = /eos/experiment/s1626/root_v6-16-00
ROOT Version = 6.16/00

Computer and Path to File that failed:
GRSISort Branch = master
commit 488d8e5c660dc373323496163b9e8ec784f34e77
Merge: 8b20590 c953e65
Author: Vinzenz Bildstein<EMAIL_ADDRESS>Date:   Tue Aug 27 22:15:24 2019 -0400
Merge pull request #1117 from VinzenzBildstein/master

Various small improvements and bug fixes

Describe the bug
The Makefile seems to execute in the wrong order. It tries to build bin/WriteCalToRoot before it has created any of the libraries that it depends on...
To Reproduce
-bash-4.2$ git clone https://github.com/GRIFFINCollaboration/GRSISort.git
-bash-4.2$ cd GRSISort
-bash-4.2$ make
Building  grsirc                                                      [OK]
Compiling GVersion.h                                                  [OK]
Compiling WriteCalToRoot.o                                            [OK]
Compiling bin/WriteCalToRoot                  [ERROR]
.build/util/WriteCalToRoot.o: In function `main':
/eos/experiment/s1626/GRSISort/util/WriteCalToRoot.cxx:18: undefined reference to `TChannel::ReadCalFile(char const*)'
/eos/experiment/s1626/GRSISort/util/WriteCalToRoot.cxx:55: undefined reference to `TChannel::DeleteAllChannels()'
/eos/experiment/s1626/GRSISort/util/WriteCalToRoot.cxx:57: undefined reference to `TChannel::ReadCalFromCurrentFile(char const*)'
/eos/experiment/s1626/GRSISort/util/WriteCalToRoot.cxx:59: undefined reference to `TChannel::ReadCalFile(char const*)'
/eos/experiment/s1626/GRSISort/util/WriteCalToRoot.cxx:60: undefined reference to `TChannel::WriteToRoot(TFile*)'
collect2: error: ld returned 1 exit status
make: *** [bin/WriteCalToRoot] Error 1

Expected behavior
A completed build
Additional context
A side note and maybe a tip: In makefile add CPP = $(shell root-config --cxx) instead of hard-coding compiler. Also remove -std=c++11 flag because it should be provided by root-config. This can be tested for separately to see if the compiler and ROOT are compliant, but clang++ uses a different format for this flag, for example, so hard-coding it causes problems on a Mac.

Update: I removed -links 2 from LIBRARY_DIRS   := $(shell $(FIND) libraries/* -type d links 2 2> /dev/null | grep -v SourceData | grep -v SRIMData) and things started moving forward:
-bash-4.2$ make
Building  grsirc                                                      [OK]
Compiling .build/libraries/GROOT/GCube.o      [ERROR]
In file included from libraries/GROOT/GCube.cxx:1:0:
/eos/experiment/s1626/GRSISort/include/GCube.h:35:10: error: ‘Int_t GCube::FindFirstBinAbove(Double_t, Int_t, Int_t, Int_t) const’ marked override, but does not override
    Int_t FindFirstBinAbove(Double_t threshold = 0, Int_t axis = 1, Int_t firstBin=1, Int_t lastBin=-1) const override;
          ^
/eos/experiment/s1626/GRSISort/include/GCube.h:36:10: error: ‘Int_t GCube::FindLastBinAbove(Double_t, Int_t, Int_t, Int_t) const’ marked override, but does not override
    Int_t FindLastBinAbove(Double_t threshold = 0, Int_t axis = 1, Int_t firstBin=1, Int_t lastBin=-1) const override;
          ^
make: *** [.build/libraries/GROOT/GCube.o] Error 1

Update 2: Removing override from the functions FindFirstBinAbove and FindLastBinAbove moved things along even further... But that shouldn't be the fix because it does override TH1::FindFirstBinAbove, so probably just avoiding the error?
On macOS with clang++ version 7.0.1, this raises some warnings:
In file included from .build/libraries/GROOT/GROOTDict.cxx:57:
/apps/GRSISort/include/GHSym.h:32:10: warning: 'GHSym::FindFirstBinAbove' hides overloaded virtual function [-Woverloaded-virtual]
   Int_t FindFirstBinAbove(Double_t threshold = 0, Int_t axis = 1, Int_t firstBin=1, Int_t lastBin=-1) const;
         ^
/opt/local/libexec/root6/include/root/TH1.h:223:21: note: hidden overloaded virtual function 'TH1::FindFirstBinAbove' declared here: different number of parameters (2 vs 4)
   virtual Int_t    FindFirstBinAbove(Double_t threshold=0, Int_t axis=1) const;
                    ^
In file included from .build/libraries/GROOT/GROOTDict.cxx:57:
/apps/GRSISort/include/GHSym.h:33:10: warning: 'GHSym::FindLastBinAbove' hides overloaded virtual function [-Woverloaded-virtual]
   Int_t FindLastBinAbove(Double_t threshold = 0, Int_t axis = 1, Int_t firstBin=1, Int_t lastBin=-1) const;
         ^
/opt/local/libexec/root6/include/root/TH1.h:224:21: note: hidden overloaded virtual function 'TH1::FindLastBinAbove' declared here: different number of parameters (2 vs 4)
   virtual Int_t    FindLastBinAbove (Double_t threshold=0, Int_t axis=1) const;
                    ^
In file included from .build/libraries/GROOT/GROOTDict.cxx:58:
/apps/GRSISort/include/GCube.h:35:10: warning: 'GCube::FindFirstBinAbove' hides overloaded virtual function [-Woverloaded-virtual]
   Int_t FindFirstBinAbove(Double_t threshold = 0, Int_t axis = 1, Int_t firstBin=1, Int_t lastBin=-1) const;
         ^
/opt/local/libexec/root6/include/root/TH1.h:223:21: note: hidden overloaded virtual function 'TH1::FindFirstBinAbove' declared here: different number of parameters (2 vs 4)
   virtual Int_t    FindFirstBinAbove(Double_t threshold=0, Int_t axis=1) const;
                    ^
In file included from .build/libraries/GROOT/GROOTDict.cxx:58:
/apps/GRSISort/include/GCube.h:36:10: warning: 'GCube::FindLastBinAbove' hides overloaded virtual function [-Woverloaded-virtual]
   Int_t FindLastBinAbove(Double_t threshold = 0, Int_t axis = 1, Int_t firstBin=1, Int_t lastBin=-1) const;
         ^
/opt/local/libexec/root6/include/root/TH1.h:224:21: note: hidden overloaded virtual function 'TH1::FindLastBinAbove' declared here: different number of parameters (2 vs 4)
   virtual Int_t    FindLastBinAbove (Double_t threshold=0, Int_t axis=1) const;
                    ^
4 warnings generated.

This original compilation looks like it might be missing the assignment of the library path. Did you source thisgrsi.sh?

This original compilation looks like it might be missing the assignment of the library path. Did you source thisgrsi.sh?

Yes, I sourced thisgrsi.sh. I tested some logic of the Makefile and it was returning an empty list for the LIBRARY_DIRS when -links 2 was specified in the find command.

This is an issue with the changes made between root versions. Root version 6.18 changed the signature of the FirstBinAbove and FirstBinBelow functions. The fix I put in to make it work with this root version broke older versions. I already changed this to check the root version, but haven't pushed those changes yet.

PR #1119 should fix this.

Hi Vinzenz. It still fails for me with the "-links 2" flag in the -find command on line 47 of the makefile...

Oh, sorry. I thought the issue with the FirstBinAbove and similar functions was what caused this.

Okay, so I just checked this on my CentOS 7 machine. I got the newest version of the code and compiled it against root 6.18.04 using gcc 4.9.3 (not the default installed 4.8.5).
This worked without any problems.
The -links 2 flag in the find command tells find to only go two levels deeper than the directory provided. So it lists all sub-directories and sub-sub-directories of libraries/ (except for SourceData and SRIMData). Removing that flag would just include more directories (though in the current code there aren't any directories nested further down).
Did you do a make clean after you updated the code?
Also, the makefile uses different flags when run on a darwin OS, so the different flags between gcc and clang should be taken care of (though it might be more elegant to use root-config for these things).

Did you have a chance to look at this @lpgaff?

Hello, sorry for the delay. I think that if this is the intention, then you should use -maxdepth n instead of -links n. See here for the respective output of the man page of find and gfind.
find:
     -links n
             True if the file has n links.
     -maxdepth n
             Always true; descend at most n directory levels below the command line arguments.
             If any -maxdepth primary is specified, it applies to the entire expression even
             if it would not normally be evaluated.  ``-maxdepth 0'' limits the whole search
             to the command line arguments.

gfind:
       -links n
              File has n hard links.
       -maxdepth levels
              Descend at most levels (a non-negative integer) levels of directories below  the
              starting-points.   -maxdepth  0  means  only  apply the tests and actions to the
              starting-points themselves.

For me, links n always returns false and thus doesn't populate the list of libraries to build.

Oh, sorry. I thought the issue with the FirstBinAbove and similar functions was what caused this.

Sorry for combining two problems into a single Github issue and causing confusion.

Interesting. I never noticed any problem with this on MacOS. And your CentOS 7 machine should be using find anyway, right? Or is this an issue compiling on your mac?

Interesting. I never noticed any problem with this on MacOS. And your CentOS 7 machine should be using find anyway, right? Or is this an issue compiling on your mac?
But you're right, this should probably be changed to use maxdepths.

I see it on both CentOS 7 and MacOS. I'm sure how it doesn't fail for everybody else, because -links n should always return false for those files...

And what happens if you change the -links to -maxdepth? It works for me here, but it also worked before ...

That works. That’s what I am currently using in my Makefile. Initially I just removed it, but after you explained the logic, I found the maxdepth option. I forgot to update this thread though, sorry.

Okay, so everything works for you with the -links changed to -maxdepth? In that case I will push the changes to the makefile and close this issue.

Yes that’s true. It’s fine to close the issue. Would be good to check with somebody else that it still works before pushing...


[WIP] [QUARKS-215] Job control gets unregistered from ControlService after job gets closed

WIP waiting for feedback on Add ControlService.getControId

Client code needs the control Id for example to unregister controls of closed jobs.  Retrieving the id from the control's implementation works for JSON controls, by forcing a cast from the control's MBean interface to its implementation class. It does not work for JMX controls where beans are, I believe, dynamic proxies to the implementation.  So the considered options were:

ControlService.getControlId() - get the control id given its name, type, and interface.  Use the id to unregister the control.
JobMXBean.getControlId() - didn't seem the right choice as the control Id is unrelated to the bean, beanc may not be necessarily registered with a ControlService, etc.

@ddebrunner , @dlaboss - any thoughts?

The Travis CI build failed with error: '[junit] Testcase: keyedTimeBatchWindowTest(quarks.test.window.WindowTest):	Caused an ERROR' but tests passed fine locally.


ModuleNotFoundError: No module named 'construct'

Received the following error:
Traceback (most recent call last):
File "/Users/userdir/Downloads/OneDrive-main/odl.py", line 51, in
from construct import *
ModuleNotFoundError: No module named 'construct'
Any thoughts?

Nevermind :) Used the wrong pip.


Onboarding of the Service Binding Specification

In a recent call with @jberkhahn and @jhvhs we have agreed to explore the donation of the Service Binding Specification to the Service Catalog SIG.
We have an issue on the spec side to track changes needed there, and this cross issue will track changes needed on the SIG side to onboard the spec.
CC @nebhale @scothis

I'm curious, how does this align with the following :)

Service Catalog is a Kubernetes extension project that implements the Open Service Broker API (OSBAPI). It enables application developers to provision cloud services from within Kubernetes and integrates configuration and discovery of those services into Kubernetes resources

ya - the thought is that someone could adopt the Service Binding aspect from the SIG without needing to use or adopt OSBAPI.  There's some integration effort to make them work together nicely if both present, but each should be able to stand on their own.
@jberkhahn and @jhvhs - would like to hear your thoughts on this approach.

I am not sure if being associated with the Service Catalog SIG is actually for the benefit of the Service Binding Specification. Service Binding can be used in many other ways, for instance Operators and Operator Lifecycle Manager, helm charts etc. I am concerned if this association limits the perception of the specification for no good reason.

Many sigs have many subprojects that are rather loosely related - if anything Service Catalog is unusual in how focused it is. I don't see a problem to existing as a subproject of Service Catalog, especially if you want to be part of the Kubernetes community.

Sounds like you are saying just be part of a SIG no matter what the optics are .

hey everyone - thanks for the comments so far, good discussion.
My 2 cents is that from the spec's perspective one of the main challenges we have is finding a suitable umbrella home - something that solves the "API domain / group" problem but most importantly a place where we can reach the larger k8s community and increase awareness / adoption.
With that frame of mind, and being that the spec is focused solely on k8s, we started to look into the SIGs as matching our needs.  There are probably other "homes" we could look into, but this felt like the more neutral place that was closer to the community we want to target.

per the discussion at the 2/22 meeting today, here's the process for contributing existing repositories to the sig:

A SIG chair has to open a "Repository creation/migration" issue at kubernetes/org. They'll have to fill out who should have access to the repo and stuff like that, but it should be pretty straightforward
The donated repos have to satisfy these requirements from kubernetes/community
The kuberetes/org folks will go back and forth with the owners of the repo to make sure everything looks good and for the actual handoff

You can look at this issue and this issue to see the times we've done it before.

Please take a look at the proposed changes to the SIG charter. The purpose of the changes is to widen the scope to include projects that would not necessarily be OSBAPI specific, and might be specifications rather than implementations, but would still serve the same purpose.
Link: https://docs.google.com/document/d/1ElbThBA2sT2Q6PxoPcCX2k_grG9VHUSDeanrP7r9now/edit?usp=sharing

/remove-lifecycle stale
/frozen

/remove-lifecycle stale


Photos Controller in Album with new fields

Hi there,
I have extended your plugin by adding some custom fields to photo model. This works and I can successfully added my details to the fields  however, these fields are not visible when I try to edit the photo from photo list present in the album.
can you guys help me how can I extend the view of the added fields in Albums too.
Thanks

Hi
Photo list and edit form are available in the album controller via Relation manager, you can check out controllers/albums/config_relation.yaml. So I guess it is up to Relation manager controller to pick up your additional fields. I'm not sure whether it can do it or not.

Hi Graker,
Thanks for your prompt response.
Let me check on to this and get back with you.

Hi Graker,
I solved it by using Event::listen('backend.form.extendFieldsBefore', function($widget) {}
I wanted to ask, when accessing [albumList.latestPhoto.thumb] this gives me a cropped photo on the frontend, how can I get the exact dimensions of the images.

latestPhoto is a relation on each album returning a Photo model of either most recent picture or the one specifically selected as "front" in album settings. So with it being a Photo model, you can access the image through latestPhoto.image as $photo->image is a usual October image file model. So you can get full path to the image using latestPhoto.image.path.


Multi-dataframe computations

Very slowly adding functionality for join, concat, merge and friends.
I haven't yet tried to tackle the pandas interface directly.  For now just implementing joins and concats in various situations.  This is going surprisingly smoothly.
This makes heavy use of repartition https://github.com/ContinuumIO/dask/pull/354
Example
In [1]: import pandas as pd

In [2]: import dask.dataframe as dd

In [3]: A = pd.DataFrame({'x': [1, 2, 3, 4, 5, 6], 'z': [10, 20, 30, 40, 50, 60]}, index=[1, 2, 3, 4, 6, 7])

In [4]: B = pd.DataFrame({'y': list('abcdef'), 'z': [10, 20, 40, 50, 60, 80]}, index=[1, 2, 4, 5, 6, 8])

In [5]: a = dd.repartition(A, [1, 4, 7])

In [6]: b = dd.repartition(B, [1, 2, 5, 8])

In [7]: from dask.dataframe.multi import join_indexed_dataframes, hash_join

In [8]: c = join_indexed_dataframes(a, b, 'left', lsuffix='l', rsuffix='r')

In [9]: d = hash_join(a, 'z', b, 'z')

In [12]: c.compute()
Out[12]:
   x  zl    y  zr
1  1  10    a  10
2  2  20    b  20
3  3  30  NaN NaN
4  4  40    c  40
6  5  50    e  60
7  6  60  NaN NaN

In [13]: d.compute()
Out[13]:
   x   z  y
0  6  60  e
0  4  40  c
1  1  10  a
0  5  50  d
1  2  20  b

Indexed Join

Hash Join

@shoyer @cpcloud if you find some time this week this could use review.  This is not an easy topic.  I've added a bit of module-level documentation and I hope that the images in the header comment help.  If you can grok this then I think you'll be happy; it's been pretty fun so far.

I've added a top-level merge function that tries to dispatch accordingly.  This is incomplete but I'd like to merge it relatively soon.  This is both because there are some lower hanging fruit that I'd like to play with and because I could spend a while here possibly going in the wrong direction.


echidna: 2.0.3 -> 2.0.4

Description of changes
We managed to move echidna deps forward so the patch is no longer needed. I also cleaned up the dependencies a bit.
Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[x] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
22.11 Release Notes (or backporting 22.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[ ] Fits CONTRIBUTING.md.

@arcz I don't have any problem with merging this as-is, but it is possible echidna will just break again after we merge in https://github.com/NixOS/nixpkgs/pull/202022.
Would you rather rebase this on haskell-updates?  If not, I can go ahead and just merge this in.

@cdepillabout I'm aware this will happen, I still think we can merge as is as I'll be doing another update soon once hevm releases

Sounds good


Refactoring without filewatching

Ok as discussed in #6 and #1, FileWatching actually makes  our life more difficult than it needs to by having a lot of async stuff everywhere (it turns out that these coroutines thing are actually quite hard to handle well apparently...)
Here's a suggestion for a (pretty big) refactoring of the code using simply a dictionary of watched files (f_watcher) which contains the time to last modification (like in JuDoc). The only @async is now the listener loop and that's it.
This works very well, is very fast and solves the issues #6, #1 and simplifies #5 . The code is also considerably simpler (I think).  But of course given the amount of change, I'd like you to check that you're happy with it before merging (*).
Additional goodies is that events are only triggered when the file is actually modified (and not for instance when you just select the file which is the case with FileWatching)
The changes do not not affect #2 (number of web sockets grows which we would still have to address separately. I have an idea of what we could do there which I'll outline there for suggestions (and I might need help).
(*) given that I've also modified the structure of the folder, depending on how happy you are to navigate GitHub's stuff you may want to pull this branch and look at it locally 🙂

I'll have a closer look at it ASAP. I like simple solutions, and this really simplifies a lot. What I don't like is entangling stuff too much. We should adhere to the principle of "separation of concerns". The file watcher should be independent from the server, and only tell the server that this or that file has changed (e.g. via a callback as it is done now).
Of course, doing the watching in the main loop also catching Ctrl-C is a very convenient solution. But what if, in the future, there comes along a perfect package for file watching that we'd like to use? I'll  probably quickly try to separate the simple file-watching loop from the other stuff, I'll see soon enough if this leads anywhere...

Ok so what I'm reading in your comment is primarily that the file-watcher should be separated.
Would it be an acceptable intermediate step if we wrapped the file-watching logic in a function? and then this answers your secondary question, we would just replace it by something else if something else comes up later on.
function watcher!(f_watcher, ws_tracker)
    while true
        # go over the files currently being watched
        for (f_path, time) ∈ f_watcher
            # check if the file still exists, if it doesn't remove from f_watcher
            isfile(f_path) || (delete!(f_watcher, f_path); continue)
            # retrieve the time of last modification
            cur_mtime = mtime(f_path)
            # check how it compares to the previously recorded time, if smaller --> update
            if f_watcher[f_path] < cur_mtime
                # update time of last modif
                f_watcher[f_path] = cur_mtime
                # trigger browser upgrade as appropriate
                if splitext(f_path)[2] == ".html"
                    ping_viewers!(ws_tracker[f_path])
                else
                    # e.g. css file may be needed by pages watched by any viewer so ping all
                    foreach(ping_viewers!, values(ws_tracker))
                end
            end
        end
        # yield (to the HTTP listener)
        sleep(0.1)
        end
    end
end

and then in the serve function:
try
    watcher!(f_watcher, ws_tracker)
catch err
    if isa(err, InterruptException)
        # stop_watching!(f_watcher)
        empty!(f_watcher)
        empty!(ws_tracker)
        println("\n✓ LiveServer shut down.")
    else
        throw(err)
    end
end

Codecov Report

:exclamation: No coverage uploaded for pull request base (master@84c8f7c). Click here to learn what that means.
The diff coverage is 0%.

@@          Coverage Diff          @@
##             master   #7   +/-   ##
=====================================
  Coverage          ?   0%
=====================================
  Files             ?    1
  Lines             ?   75
  Branches          ?    0
=====================================
  Hits              ?    0
  Misses            ?   75
  Partials          ?    0

Impacted Files
Coverage Δ

src/LiveServer.jl
0% <0%> (ø)

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 84c8f7c...3daef2b. Read the comment docs.

Ok so  there were several problems that were nagging me. The websocket growth is now fixed thanks to your proposal to close after messaging (I've brought your code here and adapted it a bit).
The final thing that was super annoying to fix is to forcibly close the listener; basically just closing the server is not enough. The problem is then that the async thread keeps living until you kill julia. But that means that if you were  to do
serve()
CTRL+C
serve()

in the second case the initial listener was still used and  still being tied to the previous dictionaries (which are empty and stay that way). Therefore the updates didn't work.
Anyway long story short, HTTP.listen doesn't close properly  (I'll open an issue on HTTP.jl about this) and after trying multiple unsatisfactory  options, I resorted to the
if server.status != 4
    return 0
end

which does kill the async thread. This fixes the issue above (i.e. if you restart the server  later on, the update mechanism works).
Anyway so with the PR as it stands.

the number of websockets doesn't grow anymore (as per your fix)
killing the server actually kills all tasks
restarting the server in the same julia session  "just works"

I quickly draw an overview of what's in LiveServer and how the components relate to each other -- see LiveServer_coroutines.pdf. The communication between the three coroutines / tasks can be implemented in different ways. We'd probably have to go through
https://docs.julialang.org/en/v1/manual/parallel-computing/index.html
and then decide which way is best suited for our problem. I never did concurrent / parallel stuff in Julia, so I'll have to work myself into it. I like that stuff though, it's really interesting, so I'll happily do that ;-)
Of course, even when communicating via Channels or similar, we'd still have to pass (callback) functions to the two coroutines.

Nice yeah I agree with this.

I'd suggest to have a single task for the file watching, along the lines you proposed (checking every ~ 100ms for changes by checking mtime). And another one, namely HTTP.listen -- for which we've to find out how to properly kill it...

So I already tried that but the issue is that

if it's a synchronous task, then it's identical to what is currently being done
if it's asynchronous (and then you need to add a function stop() which would kill it), then there seem to have weird inconsistencies with print statements etc.

What I had before (which I think is what you're suggesting):
function serve(...; block=true/false)
  # the same stuff
  if block
      @sync watcher!(...)
   else
      @async watcher!(...)
   end
end

function stop(...)
  close(server)
  Base.throwto(watchertask, ...)
end

I can re-try this if you think it's worthwile but I'm not convinced about the usecase. If a user wants to be able to use Julia while the LiveServer is active, I think it would be better to completely isolate by doing the LiveServer thing in a separate processor and not use threads which will have to yield to whatever it is that the user may want to do.
Note that Python's simpleHTTPserver and browser-sync are both blocking?

I have a working example for a simple file watcher (using mtime) with two async tasks and two corresponding channels for communication. The tasks are automatically and "recursively" stopped (i.e. their while-loops broken) when the channels are closed. Works fine; will integrate this in a branch to bring everything together.

Ok, please have a look and test branch simpleFW. It's a whole new "philosophy" concerning file watching:

The watcher is an argument to serve() (but defaults to SimpleWatcher()).
The watcher has a start() method, which launches two tasks; one (T1) listening on a Channel (C1) to receive files to be watched, the other (T2) writing files that changed to another Channel (C2).
A "listener task" (LT) is instantiated that listens to C2 and triggers the page reloads via websockets.
C1 is passed to the file-serving callback to add all served files to the watcher.
Tearing down all tasks is via the channels: closing C1 makes T1 return and is observed by T2, which then also returns. C2 is bound to T2 and thus is closed, which is detected by LT, which then returns.

I also added my version of a "safe shut-down". Closing the server and all websockets, then waiting until everything is actually in a :closed or status == 6 state before printing the final "LiveServer shut down." message.
The entire thing works like a charm!
I only have one strange behaviour: when doing serve() and request a file with a browser, then Ctrl-C and serve() again. When visiting the page again with the browser, an InvalidStateException("Channel is closed.", :closed) is thrown (once for each file requested...?). The strange this is that I could verify that these errors are caused by instances of the file_server! request handler from the previous run! That is, the server, live update etc. works as it should, it's just annoying that there are errors when everything works fine. Probably these calls get stuck in the middle during the tear-down process? Some help tracking this down would be very welcome. Otherwise, I feel like this solution has none of the issues of earlier versions and has a quite flexible and extendable structure.

Ok nice
I like:

WatchedFile type
Watcher as an argument

I'm not sure but potentially ok (potentially unnecessary complexity)

Channels

A couple of issues:

when clicking the "download link", hitting cancel then trying to modify the index.html, updates are not triggered anymore. If you reload the page manually, then modify updates are triggered again
the server is still not properly closed: it seems to be a bit of a hit and miss (it did work for me the first time) but the second time, I see the 404 message. The 404 is good but it means that the listener is still active. What we should (always) see is the "Unable to connect" message.

I think we should take a decision in terms of the implementation though. I will port the ideas of the modular file watcher over, and try an idea to keep track of all websockets and close them, update this branch one last time and then maybe we decide which way we want this to go so that we don't let branches diverge too much? (I'm happy for you to take that last decision as it's your package and most of the thinking comes from you! very happy to try to help fix things around your design later on).

Aren't the WS connections all correctly closed in branch simpleFW? I thought they are; I think once they're updated from a normal HTTP request, they're separate from the server/listener, and I do close them explicitly, cf. https://github.com/asprionj/LiveServer.jl/blob/202c5631976c901706091f3b7f0ddfb7ae4f9ad6/src/server.jl#L234-L238.

Concerning Channels: I thought this is the "official" way to communicate with tasks. Also, closing of a channel can be detected by tasks and they can return then. Or, the other way 'round, channels can be bound to tasks, so when a tasks closes, the channel also closes automatically. If you know / come up with a simpler solution, you're very welcome ;-)

I think I'm going to close this PR for now as the discussion has drifted a bit, maybe merge your SimpleFW and we can move from there? I think to sumarise the points:

I don't think we need to communicate between tasks
HTTP.jl has a bug as per #10 where there are @async tasks that stay alive even after the server is shut down, this must be fixed otherwise we will always be at risk of weird errors if restarting the server etc
We need tests

On the other hand

The design for a standalone filewatcher is great and I think can be really convenient
I think your idea of having a task for the filewatcher makes sense, but it can only work flawlessly if we can properly shut everything down (incl. HTTP)

I'll work on my fork separately as I think the design is simpler but it has flaws that I need to fix first, I just want to make it work and make sure I understand everything that's going on. Maybe we won't merge it but that's fine as long as I gain a better understanding of what goes on under the hood :-)
Probably best to keep the discussion going on in separate issues as it may help us to track the solutions down better?

Agreed, this discussion has almost no relation to the original PR anymore... ;-)


Autoformat stops working

VSCode Version: 1.2.1
OS Version: Windows 10

Steps to Reproduce:
I am not yet quite sure how to reproduce this issue but every now and again - when working for several hours - some of my JS and JSX files no longer format correctly or at all when I hit the shortcut alt+shift+F.

@T1KK3S can you please enable TS tracing using the following setting: "typescript.tsserver.trace": "messages" and open the Output view and switch to the TypeScript channel (JS, JSX is powered by TypeScript). When formatting stops can you please attach the output. This will help tracking this down.

@dbaeumer I receive following response:

Sending request: projectInfo (4050). Response expected: yes. Current queue length: 0
Response received: projectInfo (4050). Request took 1 ms. Success: false . Message: Error processing request. Cannot read property 'projectFilename' of undefined
Sending request: format (4051). Response expected: yes. Current queue length: 0
Response received: format (4051). Request took 1 ms. Success: false . Message: Error processing request. No Project.

I'm experiencing the same issue. After some time of usage (might be hours, might be minutes) reformat stops working and I have to run the Reload Window command to bring it back.

@T1KK3S thanks for the additional info.
Moving to the TS team since this is an issue in the tsserver.

This issue was moved to Microsoft/TypeScript#9598


Milk-V Jupiter

Basic information

Board URL (official): https://milkv.io/jupiter
Board purchased from: (Provided by Milk-V)
Board purchase date: July 17, 2024
Board specs (as tested): M1 @ 1.8GHz, 16GB RAM
Board price (as tested): $115 (pre-order pricing)

Linux/system information
# output of `screenfetch`
root@milkv-jupiter:~# screenfetch
                          ./+o+-       root@milkv-jupiter
                  yyyyy- -yyyyyy+      OS: Ubuntu 23.10 mantic
               ://+//////-yyyyyyo      Kernel: riscv64 Linux 6.1.15
           .++ .:/++++++/-.+sss/`      Uptime: 11m
         .:++o:  /++++++++/:--:/-      Packages: 1667
        o:+o+:++.`..```.-/oo+++++/     Shell: bash 5.2.15
       .:+o:+o/.          `+sssoo+/    Disk: 4.1G / 6.1G (71%)
  .++/+:+oo+o:`             /sssooo.   CPU: Spacemit X60 @ 8x 1.8GHz
 /+++//+:`oo+o               /::--:.   GPU:
 \+/+o+++`o++o               ++////.   RAM: 847MiB / 15771MiB
  .++.o+++oo+:`             /dddhhh.
       .+.o+oo:.          `oddhhhh+
        \+.++o+o``-````.:ohdhhhhh+
         `:o+++ `ohhhhhhhhyo++os:
           .o:`.syhhhhhhh/.oo++o`
               /osyyyyyyo++ooo+++/
                   ````` +oo+++o\:
                          `oo++.

# output of `uname -a`
Linux milkv-jupiter 6.1.15 #1.0.8 SMP PREEMPT Tue Jul 16 07:18:48 UTC 2024 riscv64 riscv64 riscv64 GNU/Linux

Benchmark results
CPU

Geekbench 6: (78 single / 356 multi - https://browser.geekbench.com/v6/cpu/6979805)
5.656 Gflops at 0.53 Gflops/W (geerlingguy/top500-benchmark HPL result)

Power

Idle power draw (at wall): 3.5 W
Maximum simulated power draw (stress-ng --matrix 0): 8 W
During Geekbench multicore benchmark: 10 W
During top500 HPL benchmark: 10.6 W

(Note: Tests were performed using a 12V 8A power adapter. When I switched to a 27W Aergon PWR GaN adapter, idle draw was measured at 10W, and stress-ng --matrix 0 at 10W)
Disk
MakerDisk A1 128GB microSD

Benchmark
Result

iozone 4K random read
11.28 MB/s

iozone 4K random write
3.75 MB/s

iozone 1M random read
74.95 MB/s

iozone 1M random write
49.97 MB/s

iozone 1M sequential read
75.47 MB/s

iozone 1M sequential write
50.40 MB/s

Kioxia XG8 2TB NVMe SSD

Benchmark
Result

iozone 4K random read
43.42 MB/s

iozone 4K random write
80.55 MB/s

iozone 1M random read
314.43 MB/s

iozone 1M random write
345.83 MB/s

iozone 1M sequential read
315.34 MB/s

iozone 1M sequential write
346.40 MB/s

32GB SanDisk eMMC Module V1.2

Benchmark
Result

iozone 4K random read
18.72 MB/s

iozone 4K random write
29.24 MB/s

iozone 1M random read
194.06 MB/s

iozone 1M random write
195.67 MB/s

iozone 1M sequential read
208.09 MB/s

iozone 1M sequential write
193.82 MB/s

wget https://raw.githubusercontent.com/geerlingguy/pi-cluster/master/benchmarks/disk-benchmark.sh
chmod +x disk-benchmark.sh
sudo MOUNT_PATH=/ TEST_SIZE=1g ./disk-benchmark.sh

Run benchmark on any attached storage device (e.g. eMMC, microSD, NVMe, SATA) and add results under an additional heading.
Also consider running PiBenchmarks.com script.
Network
iperf3 results:
Built-in 1 Gbps LAN

iperf3 -c $SERVER_IP: 939 Mbps
iperf3 -c $SERVER_IP --reverse: 885 Mbps
iperf3 -c $SERVER_IP --bidir: 942 Mbps up, 136 Mbps down

Built-in WiFi 6
So far, I have been unable to bring up this interface.  Not all devices may be able to run glmark2-es2, so in that case, make a note and move on!
TODO: See this issue for discussion about a full suite of standardized GPU benchmarks.
Memory
tinymembench results:

Click to expand memory benchmark result
tinymembench v0.4.10 (simple benchmark for memory throughput and latency)

==========================================================================
== Memory bandwidth tests                                               ==
==                                                                      ==
== Note 1: 1MB = 1000000 bytes                                          ==
== Note 2: Results for 'copy' tests show how many bytes can be          ==
==         copied per second (adding together read and writen           ==
==         bytes would have provided twice higher numbers)              ==
== Note 3: 2-pass copy means that we are using a small temporary buffer ==
==         to first fetch data into it, and only then write it to the   ==
==         destination (source -> L1 cache, L1 cache -> destination)    ==
== Note 4: If sample standard deviation exceeds 0.1%, it is shown in    ==
==         brackets                                                     ==
==========================================================================

 C copy backwards                                     :   3073.1 MB/s (0.6%)
 C copy backwards (32 byte blocks)                    :    662.7 MB/s
 C copy backwards (64 byte blocks)                    :   3079.1 MB/s (0.6%)
 C copy                                               :   3081.3 MB/s (0.5%)
 C copy prefetched (32 bytes step)                    :   3087.2 MB/s (0.6%)
 C copy prefetched (64 bytes step)                    :   3087.5 MB/s (0.7%)
 C 2-pass copy                                        :   2953.6 MB/s
 C 2-pass copy prefetched (32 bytes step)             :   2947.5 MB/s (0.5%)
 C 2-pass copy prefetched (64 bytes step)             :   2948.0 MB/s (0.4%)
 C fill                                               :   7570.4 MB/s (0.3%)
 C fill (shuffle within 16 byte blocks)               :   7574.7 MB/s (0.4%)
 C fill (shuffle within 32 byte blocks)               :    675.4 MB/s (0.2%)
 C fill (shuffle within 64 byte blocks)               :    675.3 MB/s (0.2%)
 ---
 standard memcpy                                      :   2886.5 MB/s (0.8%)
 standard memset                                      :   7577.1 MB/s (0.5%)

==========================================================================
== Memory latency test                                                  ==
==                                                                      ==
== Average time is measured for random memory accesses in the buffers   ==
== of different sizes. The larger is the buffer, the more significant   ==
== are relative contributions of TLB, L1/L2 cache misses and SDRAM      ==
== accesses. For extremely large buffer sizes we are expecting to see   ==
== page table walk with several requests to SDRAM for almost every      ==
== memory access (though 64MiB is not nearly large enough to experience ==
== this effect to its fullest).                                         ==
==                                                                      ==
== Note 1: All the numbers are representing extra time, which needs to  ==
==         be added to L1 cache latency. The cycle timings for L1 cache ==
==         latency can be usually found in the processor documentation. ==
== Note 2: Dual random read means that we are simultaneously performing ==
==         two independent memory accesses at a time. In the case if    ==
==         the memory subsystem can't handle multiple outstanding       ==
==         requests, dual random read has the same timings as two       ==
==         single reads performed one after another.                    ==
==========================================================================

block size : single random read / dual random read
      1024 :    0.1 ns          /     0.1 ns
      2048 :    0.1 ns          /     0.1 ns
      4096 :    0.1 ns          /     0.1 ns
      8192 :    0.1 ns          /     0.1 ns
     16384 :    0.1 ns          /     0.1 ns
     32768 :    0.2 ns          /     0.2 ns
     65536 :    9.3 ns          /    14.3 ns
    131072 :   15.9 ns          /    21.2 ns
    262144 :   19.3 ns          /    23.8 ns
    524288 :   38.4 ns          /    52.5 ns
   1048576 :  119.4 ns          /   175.0 ns
   2097152 :  169.3 ns          /   221.4 ns
   4194304 :  198.2 ns          /   241.2 ns
   8388608 :  223.5 ns          /   268.5 ns
  16777216 :  238.2 ns          /   288.6 ns
  33554432 :  248.7 ns          /   306.2 ns
  67108864 :  281.1 ns          /   361.7 ns

sbc-bench results
Run sbc-bench and paste a link to the results here: https://github.com/ThomasKaiser/sbc-bench/issues/96 / https://0x0.st/X904.bin
Phoronix Test Suite
Results from pi-general-benchmark.sh:

pts/encode-mp3: N/A (wouldn't install)
pts/x264 4K: N/A (wouldn't install)
pts/x264 1080p: N/A (wouldn't install)
pts/phpbench: 89706
pts/build-linux-kernel (defconfig): 3345.196 sec

After speaking with Milk-V about some of their RISC-V boards, they wanted to send over a Jupiter for me to test. I plan on running it through my usual tests, and also seeing how the board behaves as a regular ol' PC ITX board, testing front panel connectors, USB 3.0 and other IO. It also comes with a heatsink/fan (a pretty small one, mind you), and an IO shield. I haven't unboxed it fully but will hopefully do that tomorrow or Monday!

First test round will be with https://github.com/milkv-jupiter/jupiter-ubuntu-build/releases - Ubuntu 23.04 desktop release 1.0.8. I will flash it to a microSD card first.

Apparently there's some amount of standardization in the world... got this from Milk-V:

I can boot and log in via serial console; it also has an Ethernet connection, at 1 Gbps, and I can access it via UART or SSH, but so far I don't have an HDMI output working. xrandr gives me 'Couldn't open display'. I will try another HDMI monitor and see if that works. For some reason a lot of RISC-V boards don't seem to like my HP EliteDisplay E231.

The docs for the Jupiter describe using gparted to expand the SD partition, but I elected to use the RVSpace guide Extend Partition on SD Card or eMMC.

I was originally wondering if the fan or fan connector was dead, but no—just the heatsink seems to be good enough for 99% of the time—the fan will only spin up deep into a multicore test, and briefly at that. It's noticeable but not annoying.

I'm able to get the HDMI output to feed into OBS through my CamLink 4K, so it's probably an incompatibility with that HP monitor:

I just noticed there's a newer release of the 23.10 desktop: https://github.com/milkv-jupiter/jupiter-ubuntu-build/releases/tag/v1.0.9
(As well as Bianbu). Fedora also has a RISC-V task force building images for the Jupiter—see the downloadable images here: https://mirror.iscas.ac.cn/fedora-riscv/dl/Milk-V/Jupiter/images/latest/

Notes on Bianbu OS minimal install:

It truly is minimal, doesn't include utilities like nmcli, openssh-server, lsusb, or lspci (have to apt install network-manager rfkill openssh-server usbutils pciutils etc.
The premade image on GitHub is set to Chinese locale by default, so run sudo dpkg-reconfigure locales and select your language.

As with the Ubuntu image, I'm not seeing the WiFi device, just the two Ethernet ports and a sit0 interface (something to do with IPv6 I think):
root@milkv-jupiter:~# nmcli d
DEVICE  TYPE      STATE      CONNECTION
end0    ethernet  unmanaged  --
end1    ethernet  unmanaged  --
sit0    iptunnel  unmanaged  --
lo      loopback  unmanaged  --

I'm also re-running Geekbench 6 under the Bianbu minimal install to see if there's any difference between it and the Ubuntu release.

I've also asked on the Community forum about the SATAPWR1 and 2 headers, which look like 4-pin ATX fan connectors, but I'm scared to plug in a fan to one of them in case the pinout is incorrect :)
It would be nice to provide a couple fan headers so I can run a case fan off the ITX board, but I'm not sure if those are wired up to any PWM controls.

Fedora 40 with Gnome runs stable, if slow. No GPU drivers present in that build, it seems—everything goes to the CPU and runs a bit slowish. YouTube can kinda play back at 240p, whereas on Bianbu and Ubuntu I can hit 720p passably.

I don't seem to be getting any GPU acceleration under Ubuntu or Bianbu, at least not by default... it seems like they should both be able to render a lot better using the built-in GPU (see Banana Pi BPI-F3 here).

Kioxia XG8 over PCIe:
0001:01:00.0 Non-Volatile memory controller: KIOXIA Corporation NVMe SSD Controller XG8 (rev 01) (prog-if 02 [NVM Express])
	Subsystem: KIOXIA Corporation Device 0001
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin A routed to IRQ 56
	Region 0: Memory at 90200000 (64-bit, non-prefetchable) [size=16K]
	Capabilities: [80] Power Management version 3
		Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
		Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [90] MSI: Enable- Count=1/32 Maskable+ 64bit+
		Address:<PHONE_NUMBER>000000  Data: 0000
		Masking: 00000000  Pending: 00000000
	Capabilities: [b0] MSI-X: Enable+ Count=65 Masked-
		Vector table: BAR=0 offset=00002000
		PBA: BAR=0 offset=00003000
	Capabilities: [c0] Express (v2) Endpoint, MSI 00
		DevCap:	MaxPayload 256 bytes, PhantFunc 0, Latency L0s unlimited, L1 unlimited
			ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset+ SlotPowerLimit 0W
		DevCtl:	CorrErr+ NonFatalErr+ FatalErr+ UnsupReq+
			RlxdOrd- ExtTag+ PhantFunc- AuxPwr- NoSnoop- FLReset-
			MaxPayload 128 bytes, MaxReadReq 512 bytes
		DevSta:	CorrErr- NonFatalErr- FatalErr- UnsupReq- AuxPwr- TransPend-
		LnkCap:	Port #0, Speed 16GT/s, Width x4, ASPM L1, Exit Latency L1 <32us
			ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp+
		LnkCtl:	ASPM Disabled; RCB 64 bytes, Disabled- CommClk+
			ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
		LnkSta:	Speed 5GT/s (downgraded), Width x1 (downgraded)
			TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
		DevCap2: Completion Timeout: Range ABCD, TimeoutDis+ NROPrPrP- LTR+
			 10BitTagComp+ 10BitTagReq- OBFF Not Supported, ExtFmt+ EETLPPrefix-
			 EmergencyPowerReduction Not Supported, EmergencyPowerReductionInit-
			 FRS- TPHComp- ExtTPHComp-
			 AtomicOpsCap: 32bit- 64bit- 128bitCAS-
		DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- LTR+ 10BitTagReq- OBFF Disabled,
			 AtomicOpsCtl: ReqEn-
		LnkCap2: Supported Link Speeds: 2.5-16GT/s, Crosslink- Retimer+ 2Retimers+ DRS-
		LnkCtl2: Target Link Speed: 16GT/s, EnterCompliance- SpeedDis-
			 Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
			 Compliance Preset/De-emphasis: -6dB de-emphasis, 0dB preshoot
		LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete- EqualizationPhase1-
			 EqualizationPhase2- EqualizationPhase3- LinkEqualizationRequest-
			 Retimer- 2Retimers- CrosslinkRes: unsupported
	Capabilities: [100 v2] Advanced Error Reporting
		UESta:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UEMsk:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UESvrt:	DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
		CESta:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr-
		CEMsk:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+
		AERCap:	First Error Pointer: 00, ECRCGenCap+ ECRCGenEn- ECRCChkCap+ ECRCChkEn-
			MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-
		HeaderLog: 00000000 00000000 00000000 00000000
	Capabilities: [150 v1] Virtual Channel
		Caps:	LPEVC=0 RefClk=100ns PATEntryBits=1
		Arb:	Fixed- WRR32- WRR64- WRR128-
		Ctrl:	ArbSelect=Fixed
		Status:	InProgress-
		VC0:	Caps:	PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
			Arb:	Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
			Ctrl:	Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
			Status:	NegoPending- InProgress-
	Capabilities: [260 v1] Latency Tolerance Reporting
		Max snoop latency: 0ns
		Max no snoop latency: 0ns
	Capabilities: [300 v1] Secondary PCI Express
		LnkCtl3: LnkEquIntrruptEn- PerformEqu-
		LaneErrStat: 0
	Capabilities: [360 v1] Data Link Feature <?>
	Capabilities: [380 v1] Physical Layer 16.0 GT/s <?>
	Capabilities: [400 v1] L1 PM Substates
		L1SubCap: PCI-PM_L1.2+ PCI-PM_L1.1+ ASPM_L1.2+ ASPM_L1.1- L1_PM_Substates+
			  PortCommonModeRestoreTime=60us PortTPowerOnTime=150us
		L1SubCtl1: PCI-PM_L1.2- PCI-PM_L1.1- ASPM_L1.2- ASPM_L1.1-
			   T_CommonMode=0us LTR1.2_Threshold=0ns
		L1SubCtl2: T_PwrOn=10us
	Capabilities: [470 v1] Lane Margining at the Receiver <?>
	Kernel driver in use: nvme

Testing my 32GB eMMC module that I used before with Rock 5 B:
root@milkv-jupiter:~# dmesg | grep mmc2
[    4.279458] mmc2: new HS400 Enhanced strobe MMC card at address 0001
[    4.286636] mmcblk2: mmc2:0001 DA4032 29.1 GiB
[    4.295504] mmcblk2boot0: mmc2:0001 DA4032 4.00 MiB
[    4.301771] mmcblk2boot1: mmc2:0001 DA4032 4.00 MiB
[    4.307801] mmcblk2rpmb: mmc2:0001 DA4032 16.0 MiB, chardev (242:0)
[    4.314220] mmc2: SDHCI controller on d4281000.sdh [d4281000.sdh] using ADMA

Adding the results for that and NVMe up in the OP.

I also tested Docker on this board, since that's something called out in the Jupiter's documentation. Installing was easy (install docker.io and that's it!). The hello-world image runs successfully, and there are a few hundred risc-v supporting images on Docker Hub already. I was able to run Debian and Alpine easy enough, though httpd (Apache) doesn't have a riscv64 build yet.
For many images, like Redis, they say riscv64 is in the supported architectures, but that's not on the main image. You have to instead use riscv64/redis, and there's no latest tag on that repo, so you have to dig around and find a tag you like, for example:
root@milkv-jupiter:~# docker run --name some-redis -d redis
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
docker: no matching manifest for linux/riscv64 in the manifest list entries.
See 'docker run --help'.
root@milkv-jupiter:~# docker run --name some-redis -d riscv64/redis
Unable to find image 'riscv64/redis:latest' locally
docker: Error response from daemon: manifest for riscv64/redis:latest not found: manifest unknown: manifest unknown.
   5 seconds ago   Up 3 seconds   6379/tcp   some-redis

It feels like the armv7/arm64 situation 5-8 years ago currently; if you do a lot with containers, expect to have to build your own on top of the primitives for a while, yet. And some software compiles, some doesn't (without some tweaking), so it's not for the 'driveby sysadmin' yet, you have to actually know the basics to be productive.

Testing an old AMD R5 230 2GB GPU, I plugged it into the board while powered off, and was surprised to see the fan spin up—thus I opened PCIe slot powered even when Jupiter is powered off.
The system boots with the card installed, and dmesg shows:

Then there's lspci:
TODO

I am going to try this k1-gpu branch to see if I can get the AMD GPU to work in Bianbu Linux. That's a fork of Bianbu Linux 6.1, and the patch seems to perform a few of the write-combining hacks that we had to do for radeon/amdgpu for Arm as well.

For GPU testing, the command provided by SpaceMIT is as follows:
sudo apt install glmark2-es2-wayland
glmark2-es2-wayland --run-forever

I was originally wondering if the fan or fan connector was dead, but no—just the heatsink seems to be good enough for 99% of the time—the fan will only spin up deep into a multicore test, and briefly at that.

Our default logic is to turn on the fan when the core temperature reaches above 60 degrees. We will update to PWM speed regulation in later versions.

For GPU testing, the command provided by SpaceMIT is as follows:
sudo apt install glmark2-es2-wayland
glmark2-es2-wayland --run-forever

You can also watch the gpu status:
sudo watch cat /sys/kernel/debug/pvr/status

@carbonfix - Thanks! I was able to get a much more reasonable score of 459 with that!

Memory performance (especially latency) is not that great (well, bad). Are the Milk-V guys aware of this and might provide 'better' DRAM initialization code?

@ThomasKaiser - They are watching this thread, would be good to hear their thoughts—not sure if this is the first board they're using the Spacemit SoC with, but I wonder if it's an issue with Spacemit's controller or with something more under their control.

Just why? By looking at https://browser.geekbench.com/v6/cpu/compare/6979805?baseline=5769184 it's 100% obvious that Geekbench on RISC-V is not capable to generate any meaningful numbers that would represent anything 'real-world performance'. It's just nonsense.

Because people will ask regardless, and I like having the data, regardless of the fitness of Geekbench 6 as a universal benchmarking tool :)
The reason I run a few dozen other tests too is because:

Having one simple benchmark is fun for giggles, but having an array of more real-world examples like real code compilation, glmark, memory test, MP3/MP4 transcoding, etc. is better.
Different tests show differences in architecture differently :D

To that point, I still can't run a few common benchmarks (like PTS tests) because they aren't set up for RISC-V. Whether that reflects real-world performance ('0' vs some metric that is above '0') is immaterial—instead, it reflects reality: if you buy one of these boards today, the performance might as well be 0 if you can't compile or run software the same as you can on x86 and Arm currently. At least, if you're not willing to roll up your sleeves and patch makefiles, compile newer versions than are available in repositories, build your own containers, etc.

I have a new board today, and here are a few notes:
First, idle power draw as tested with a USB-C power adapter is slightly higher from the wall (maybe slightly less efficient supply), measuring 5W idle, 10W under stress-ng all cores:

Second, WiFi works (yay!), so now I can run my network performance tests with WiFi instead of wired.

YouTube video: The PC industry is changing: RISC-V goes mainstream.

Try this benchmark on your systems.
https://github.com/PlummersSoftwareLLC/Primes/tree/drag-race/PrimeCPP/solution_2
Just tried it on my Risc-v VisionFive 2
It scores better than the PI 4 in this test. See Below

Computing primes to 10000000 on 4 threads for 5 seconds.
Passes: 64, Threads: 4, Time: 5.07541, Average: 0.0793033, Limit: 10000000, Counts: 664579/664579, Valid : Pass
davepl_par;64;5.07541;4;algorithm=base,faithful=yes,bits=1

It will be interesting to see the results
I got the idea to run it on my system after watching https://www.youtube.com/watch?v=7lYX0Eo4cbE&t=1s

Kioxia XG8 over PCIe:
0001:01:00.0 Non-Volatile memory controller: KIOXIA Corporation NVMe SSD Controller XG8 (rev 01) (prog-if 02 [NVM Express])
	Subsystem: KIOXIA Corporation Device 0001

		LnkCap:	Port #0, Speed 16GT/s, Width x4, ASPM L1, Exit Latency L1 <32us
			ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp+
		LnkCtl:	ASPM Disabled; RCB 64 bytes, Disabled- CommClk+
			ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
		**LnkSta:	Speed 5GT/s (downgraded), Width x1 (downgraded)**
			TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-

	Kernel driver in use: nvme

Hi  @geerlingguy , thanks a lot for the detailed work on this board. I am yet to receive my board which is on the way.
The spec says PCIe Gen2x2 (2 lanes), but lspci shows link status as "Width x1" as shown above. Did you get a chance to analyze this? This is the reason you get only 346MB/s max on NVMe SSD (benchmark test)? With 2 lanes, we should get around 800MB/s performance.

Hi @geerlingguy!
I know this is a little bit off-topic, but I've been building a site for hosting CI/CD runners powered by RISC-V architecture. I was in the need of it and noticed there wasn't one out there that was easy to setup.
Here's the site:
https://www.riscvrunners.com/
For now it only supports Gitlab Runners, but I plan to add support for other platforms too!
If you want to try it without paying, check out this Gitlab Project: https://gitlab.com/riscvrunners/runner-test
That project is open to the public, so you can push code and run CI pipelines to see if it works as you expect.

Ubuntu 23.10 desktop

Dumb question: can this be upgraded in place to a later Ubuntu release?

There is no reason for it not to be able to be upgraded to a newer version. The spacemit k1 is already being used with ubuntu 24.04 on other boards (DC ROMA PAD II for example)


refactor(controller): rename manifest field of runtime to image

Description
rename manifest field of runtime to image to make the semantic clear

Modules

[ ] UI
[x] Controller
[ ] Agent
[ ] Client
[ ] Python-SDK
[ ] Others

Checklist

[ ] run code format and lint check
[ ] add unit test
[ ] add necessary doc

add @tianweidut


[WebRTC] [session ] closed: deadline exceeded while waiting connection

Which version are you using?
v1.4.1
Which operating system are you using?

[ ] Linux amd64 standard
[ ] Linux amd64 Docker
[ ] Linux arm64 standard
[ ] Linux arm64 Docker
[ ] Linux arm7 standard
[ ] Linux arm7 Docker
[ ] Linux arm6 standard
[ ] Linux arm6 Docker
[X ] Windows amd64 standard
[ ] Windows amd64 Docker (WSL backend)
[ ] macOS amd64 standard
[ ] macOS amd64 Docker
[ ] Other (please describe)

Describe the issue
hello,
i'm using the windows 1.4.1 version win 11 64bits
i'm streaming from my cellular phone (not using wifi, cellular datas), using streamlabs app.
i'm using the rtmp://ip-of-pc/direct/ and password key is macle
i have forwared the 8889 port to my pc running mediamtx
on the pc running mediamtx, i can read the stream without issue
vlc : rtmp://localhost/direct/macle
chrome or firefox : http://localhost:8889/direct/macle/
on another PC (not on lan, a friend of mine) :
vlc works and can read the stream :  rtmp://my-internet-ip/direct/macle
but on chrome or firefox, the http doesn't work http://my-internet-ip:8889/direct/macle/
i can see the player ,i click on play nut nothing happens
the log says [WebRTC] [session ] closed: deadline exceeded while waiting connection
could someone help me , because i have welll forwared the 8889 port to my pc running mediamtx and my friend can't open my stream from his chrome ...
thanks so much.
Describe how to replicate the issue
start the server and suing it as rtmp server
Did you attach the server logs?
no
Did you attach a network dump?
no

Same for me

The README clearly explains how to setup the server in order to access WebRTC streams from outside LAN:
https://github.com/bluenviron/mediamtx#connectivity-issues

i managed it to work


Session expiration logic is buggy

Rewrite expiration logic so that it actually works right.

Reopening this. Need to change the logic that detects access token is expired.

Changed logic so that the local time is used to detect when the token is expired, rather than relying only on server time. Basically, I just use the TTL of the token and add that to the system's local time.


dsub fails to fetch music listings

Hi!
great project, I love the idea.
i'm trying to figure out why the dSub android client is giving me the following error message:
Error

A problem occurred communicating with the server. Please check the server address and verify that you can connect using a regular browser on your device.

A regular browser gives me the following when connecting to the port:
<subsonic-response status="failed" version="1.14.0"><error code="10" message="Required parameter is missing."/></subsonic-response>

The test connection button works in the settings, so I think i'm able to connect to the server. but it looks like some bits are missing somewhere. I tried running the server with -v but nothing seems wrong there:
curie:Music$ sudo docker run --volume ~/Music/:/srv:ro  --publish 4040:4040 -it --rm  mdlayher/mpdsub  -mpd.addr marcos:6600 -user foo -pass bar -mpd.music.dir /srv -v
2017/11/11 19:15:23 connected to MPD: tcp://marcos:6600
2017/11/11 19:15:23 starting HTTP server: :4040
2017/11/11 19:15:33 <IP_ADDRESS>:50830 -> POST /rest/getAlbumList.view?u=...&p=enc:...&v=1.2.0&c=DSub&type=random&size=20&offset=0

Any idea how to diagnose this further?

i can also reproduce with the "Subsonic" android app, the error there is:
Error

Didn't understand the reply. Please check the server address.

Again, the "test connection" button works there too.

Not really sure, sorry.  I built this as a one off and don't use it anymore, and don't plan on continuing development.  If you figure it out though, PRs welcome.
For what it's worth, I just use Plex for music now too.


1.8

@rultor release tag is 1.8

@rultor release tag is 1.8

@portlek OK, I will release it now. Please check the progress here

@rultor release tag is 1.8

@portlek Done! FYI, the full log is here (took me 9min)


data.temperature must be valid exactly by one definition (0 matches found)

We deployed the sample bot using one click, "Deploy to Azure," and it was terrific for the last few days. We added new data sources, and the preview works fine, but once deployed to the resource, we now get the error.
data.temperature must be valid exactly by one definition (0 matches found) but the /conversation request returns a 200.
Assuming there are constant updates to this preview, what recently changed to make this happen?
We deployed the GPT-4 model and blob storage as a data source.

Hi @LV-Amit this issue should be fixed by #37, please try to pull in that change and try again.

As the issue should be fixed, closing this thread. @LV-Amit please feel free to reopen if you update your app code and still get this issue.

Thanks for the fix, @sarah-widder. Assuming that the one-click deploy pulls from the latest main when redeployed, it does not seem to have fixed the issue. I can still get results in the chat playground but not in the deployed app. This error only happens when assigning a data source, If I remove the source, it's back to normal.

Thanks, @sarah-widder - I had to manually sync the branch from the deployment center and redeploy. I can confirm that #37 has fixed the issue.


Problem when running tests from Test Explorer

For info I'm running VS2015 Full
Lets say I create a very simple test
import unittest

class Test_test1(unittest.TestCase):
    def test_A(self):
        self.fail("Not implemented")

if __name__ == '__main__':
    unittest.main()

If I try to run this via the Test Explorer window, it seems to get stuck on running the first test.
In that it never exits with ether success or failure (I have to manually Cancel it)
If I click the Green Start Button under visual studio to run it as a normal bit of code
then there's no problem
F
======================================================================
FAIL: test_A (__main__.Test_test1)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\SourceControl\GitRepos\GBD.Build.BlackJack\blackjack\test\cmake\storage\test1.py", line 5, in test_A
    self.fail("Not implemented")
AssertionError: Not implemented

----------------------------------------------------------------------
Ran 1 test in 0.004s

FAILED (failures=1)

Are you on Windows 7? If so, you're probably hitting #668

I do have windows 7 and I did notice that one
It might be related, but for me its only when running the tests from within the test explorer window that there's a problem (test never ends).
If I run the test via usual debugging of the script, it seems to work fine and the immediate out window shows the expected output and everything looks okay
..
----------------------------------------------------------------------
Ran 2 tests in 12.045s

OK

so testing does work, just not in the test explorer window

for info I tried to run this from the cmd line and it seems to work fine
this suggests a problem in the gui handling code for test explorer somewhere
D:\SourceControl\GitRepos\GBD.Build.BlackJack\blackjack\test\cmake\storage>C:\Python34\python.exe "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Python Visual Studio\2.2\visualstudio_py_testlauncher.py" -m test1 -t Test_test1.test_A

======================================================================
FAIL: test_A (test1.Test_test1)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\SourceControl\GitRepos\GBD.Build.BlackJack\blackjack\test\cmake\storage\test1.py", line 5, in test_A
    self.fail("Not implemented")
AssertionError: Not implemented

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (failures=1)

Yep, that's the same issue.


PAT-298 base configuration

This is the manual script that installs the tech stack as detailed in this page:
https://ca-mmisds.atlassian.net/wiki/spaces/DEV/pages/27525121/MDE+Software+Stack
There are two ways to test this:
Starting with

A new MacBook
Create VM with MacOS 10.4 and com
Then complete the initial Apple OS/User configuration and run the script from a Terminal session.

Additional diagnostic information is reported by the script at this point but the installs should run as expected. The whole process takes an 45-60 minutes to complete.

@gubbin  I turned on Branch protection, can you approve this again?


cfn template "emr-cluster.cfn.yml" and related resource should be modified.

deployment region - ap-northeast-2
1. In the template, Service Role for EMR does not have KMS policy. Thus SecurityConfiguration makes below problem.
The EMR Service Role must have the kms:GenerateDataKey* and kms:ReEncrypt* permission for the KMS key configuration when you enabled EBS encryption by default. You can retrieve that KMS key's ID by using the ec2:GetEbsDefaultKmsKeyId API.
KMS policy should be added to the Service Role.
Identified as my member account setting problem

Fail to bootstrap "us-east-1.elasticmapreduce/bootstrap-actions/run-if" on non us-east-1 region.
EMRFS could not download bootstrap file on other region. Thus it makes below problem.

Master instance failed attempting to download bootstrap action 1 file from S3
run-if script should be copied to the same region bucket and cfn template should be modified.
3. Additionally, cross account role also should have KMS policy.
Identified as my member account setting problem

Hey are you still facing any issues I see that 1 & 3 seem to be account setting issues. Is 2 still applicable?

Could you please make EMR cluster on the other region except us-east-1?

Thanks for confirming issue 2 is still present -- we will keep this issue up to date with our progress

@inhwan-aws Thanks for bringing this up. We have identified the potential root cause for this bug. The bootstrap action script path and IAM policy resource reference the us-east-1 region in the emr templates (built-in, service-catalog and external), which would need the following changes:
From
s3://us-east-1.elasticmapreduce/bootstrap-actions/run-if
to
!Sub s3://${AWS::Region}.elasticmapreduce/bootstrap-actions/run-if

From
'arn:aws:s3:::us-east-1.elasticmapreduce/bootstrap-actions/run-if'
to
!Sub 'arn:aws:s3:::${AWS::Region}.elasticmapreduce/bootstrap-actions/run-if'

We will be making and testing these changes soon. Stay tuned.

Thank you, Sanket!

@SanketD92
In the process of combining the two accounts, the existing account (@inhwan-aws) was deleted,
so please understand that previous posts and comments appear as ghost :)
I tried what you suggest but a bucket "elasticmapreduce" must be unique globally, so it doesn't exist in other regions.
Thus, this solution is not work for me. (my region is ap-northeast-2)
From
s3://us-east-1.elasticmapreduce/bootstrap-actions/run-if
to
!Sub s3://${AWS::Region}.elasticmapreduce/bootstrap-actions/run-if

From
'arn:aws:s3:::us-east-1.elasticmapreduce/bootstrap-actions/run-if'
to
!Sub 'arn:aws:s3:::${AWS::Region}.elasticmapreduce/bootstrap-actions/run-if'

Thanks and regards,
Inhwan

Hi @virgo81net
The patch that was recommended here worked for me and has been merged now. Did you import the latest updated Service Catalog product for EMR that would have reflected the latest template?
Thanks

Fixed in PR https://github.com/awslabs/service-workbench-on-aws/pull/394


Fixes a couple of typos

Changed "existance" to "existence".  And added space between "application," and "typically".

[x] I have read freeCodeCamp's contribution guidelines.
[x] My pull request has a descriptive title (not a vague title like Update index.md)
[x] My pull request targets the master branch of freeCodeCamp.
[x] None of my changes are plagiarized from another source without proper attribution.
[x] My article does not contain shortened URLs or affiliate links.

If your pull request closes a GitHub issue, replace the XXXXX below with the issue number.
Closes #XXXXX

Thank you for your contribution.


Error in webtemplate from Template and in example Composition from Template

Configuration information

EHRbase version:
openEHR_SDK version:
Archie version:
PostgreSQL version:
Java Runtime version:
Operating System version:
"archie": "2.0.1", "ehrbase_version": "0.21.0", "openehr_sdk": "1.19.0"
"Java": "Oracle Corporation /usr/local/openjdk-11", "JavaVM": "OpenJDK 64-Bit Server VM Oracle Corporation 11.0.15+10", "OS": "Linux amd64 5.11.0-37-generic", "activeProfiles": ["docker"]

Steps to reproduce
Load the following template:
template.zip
Get an example Composition with that template or get the webtemplate form of the template

Actual result
failure 400 {"error":"Bad Request","message":"cannot construct RMObject because of unknown constraint name NOT_SET full constraint CComplexObject: NOT_SET[null]"}

Expected result (Acceptance Criteria)
expected result is an example composition/webtemplate.
(The template has been created with the Template Designer https://tools.openehr.org/designer/ that can export it also in webtemplate form without errors)

Definition of Done

[ ] The defect is checked by an unit or an integration test (Robot)
[ ] Merge Request approved
[ ] Unit tests passed
[ ] Build without errors
[ ] Release notes prepared
[ ] No additional runtime warnings

Update: The "NOT_SET" is in the OPT for a rm_object_type. The OPT is the results of an export from the Archetype Designer(https://tools.openehr.org/designer/).  If I change it to CLUSTER then everything works. So, the question now is if :NOT_SET" is a valid value still unsupported by EHRBase or an artifact of the designer when the user doesn't set the rm type.


Implemented most properties of the Widget class

Implemented almost all of the properties in the Widget class, tried to give them better names than their native names
Created the Fixed class which is an absolute position layout
Created the CheckButton class
Updated Button and Toggle button with more initializers and properties
Removed the WindowType enum defined in the Window class because it was already created in the Enums folder
Moved Widget classes into a folder named Widgets
Created an extension file for each class extension and moved them into a folder named Extensions

I'm closing this one and making several PR's so its easier to see the changes.


List of symbols

Hey, thanks for your effort in this repository.
Is there anyway to get a complete list of pairs available in spot and futures markets?

check in docs for spot an futures api: https://mexcdevelop.github.io/apidocs/spot_v3_en/#introduction


General Issue: use newer version of styler

Background Information
The renv.lock specifies styler 1.8.0. I accidently ran styler::style_pkg() with styler 1.9.1 (latest version as of 06Mar2023) and had some files identified as needing changing; these were all due to styler wanting to remove blank lines. The files identified are:

Note: until this change to the styler version is implemented, more files may be added to this list.
Definition of Done
Latest version of styler is specified in renv.lock and styler::style_pkg() shows all files as unchanged.

Going to close as we are using new version of styler


Change to testify.Require instead of testify.Assert where needed

Don't need to change it but I assume you're checking for a nil error return. The testify libraries have a specific NoError function.
Also, can be changed later if you want to, I generally recommend use of testify/require rather than testify/assert. Exactly the same set of functions, you can s/assert/require/. The difference is assert functions will continue the test even if the assert fails. That can often result in a nil pointer issue that causes a panic and big stack trace, making the test output harder to read. The require methods will hard fail and the rest of the specific test won't run (other tests will still get run).
Originally posted by @endophage in https://github.com/smithoss/gonymizer/pull/5

@junkert I tried only to replace testify/require from testify/assert simply...

I tired this too on a test recently and it looks like the way we are calling tests (calling them directly in main_test.go) will require a little work to exit on error.

@u5surf do you want to put up a PR and I'll merge this in?


PCIe Bus Error when running vector_copy sample

I followed the README to install ROCm driver. However, when I try to run vector_copy sample, the program hangs, and I see report about a PCIe error on dmesg.
Configuration:

Intel Core i7 6700K on GIGABYTE GA-Z170-HD3 (rev. 1.0) motherboard with Intel Z170 chipset.
AMD Radeon Fury Nano GPU in the PCIe x16 slot
Ubuntu 16.04 on AMD64 architecture
uname -r: 4.4.0-kfd-compute-rocm-rel-1.2-31

Kernel log (dmesg) messages after running the vector_copy sample:
[  942.180230] pcieport 0000:00:1c.4: AER: Uncorrected (Fatal) error received: id=00e4
[  942.180239] pcieport 0000:00:1c.4: PCIe Bus Error: severity=Uncorrected (Fatal), type=Transaction Layer, id=00e4(Receiver ID)
[  942.180327] pcieport 0000:00:1c.4:   device [8086:a114] error status/mask=00040000/00000000
[  942.180392] pcieport 0000:00:1c.4:    [18] Malformed TLP          (First)
[  942.180444] pcieport 0000:00:1c.4:   TLP Header: 6c000002 06000000 0000000f b76e6008
[  942.180511] pcieport 0000:00:1c.4: broadcast error_detected message
[  942.180513] amdgpu 0000:06:00.0: device has no AER-aware driver
[  942.180514] snd_hda_intel 0000:06:00.1: device has no AER-aware driver
[  943.188998] pcieport 0000:00:1c.4: Root Port link has been reset
[  943.189001] pcieport 0000:00:1c.4: AER: Device recovery failed

/opt/rocm/rocm-smi -a output:
===================   ROCm System Management Interface   ===================
============================================================================
GPU[0] 		: GPU ID: 0x7300
============================================================================
============================================================================
GPU[0] 		: Temperature: 511.0c
============================================================================
============================================================================
GPU[0] 		: Unable to determine current clocks. Check dmesg or GPU temperature
============================================================================
GPU[0] 		: Fan Level: 255 (100.0)%
============================================================================
============================================================================
GPU[0] 		: Current PowerPlay Level: auto
============================================================================
============================================================================
GPU[0] 		: Current OverDrive value: 0%
============================================================================
============================================================================
GPU[0] 		: Supported GPU clock frequencies on GPU0
GPU[0] 		: 0: 300Mhz
GPU[0] 		: 1: 508Mhz
GPU[0] 		: 2: 717Mhz
GPU[0] 		: 3: 874Mhz
GPU[0] 		: 4: 911Mhz
GPU[0] 		: 5: 944Mhz
GPU[0] 		: 6: 974Mhz
GPU[0] 		: 7: 1000Mhz
GPU[0] 		:
GPU[0] 		: Supported GPU Memory clock frequencies on GPU0
GPU[0] 		: 0: 500Mhz
GPU[0] 		:
============================================================================
===================          End of ROCm SMI Log         ===================

Perhaps you aren't using the first motherboard slot? Looks like the second may be wired through the chipset.
How were you able to install ROCm on Ubuntu 16.04?

We found the issue,  it is system bios is not properly configuring the CPU correctly and enabling PCIe Platform Atomics.  Gigabyte has to fix the SBIOS.
greg
On Sep 27, 2016, at 2:15 AM, almson <notifications<EMAIL_ADDRESS>wrote:
Perhaps you aren't using the first motherboard slot? Looks like the second may be wired through the chipset.
How were you able to install ROCm on Ubuntu 16.04?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHubhttps://github.com/RadeonOpenCompute/ROCm/issues/32#issuecomment-249785063, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AD8DuVCH7V-tmzC_NeYAzK89ggZQF_d6ks5quMKjgaJpZM4KF854.

@gstoner Would you report it to Gigabyte?

@gstoner @almson is right! The card was installed into the second PCIe slot (PCIe x16 slot running at x4 speed according to MB docs). After I switched it into the first slot, it seems to work fine.
However, a more user-friendly diagnostic message would certainly help!

@gstoner Will atomics work through the CPU->DMI->Chipset->PCIe path that's used for the 2nd slot of that motherboard?

PCIe Atomics only work with PCIe Gen 3
Here is what Atomic Operations do
Atomic Operations – Goal: Support SMP-type operations across a PCIe network to allow for things like offloading tasks between CPU cores and accelerators like a GPU. The spec says this enables advanced synchronization mechanisms that are particularly useful with multiple producers or consumers that need to be synchronized in a non-blocking fashion. Three new atomic non-posted requests were added, plus the corresponding completion (the address must be naturally aligned with the operand size or the TLP is malformed):

Fetch and Add – uses one operand as the “add” value. Reads the target location, adds the operand, and then writes the result back to the original location.

Unconditional Swap – uses one operand as the “swap” value. Reads the target location and then writes the swap value to it.

Compare and Swap – uses 2 operands: first data is compare value, second is swap value. Reads the target location, checks it against the compare value and, if equal, writes the swap value to the target location.

AtomicOpCompletion–newcompletiontogivetheresultsofanatomicrequestand indicate that the atomicity of the transaction has been maintained.

Since AtomicOps are not locked they don’t have the performance downsides of the PCI locked protocol. Compared to locked cycles, they provide “lower latency, higher scalability, advanced synchronization algorithms, and dramatically lower impact on other PCIe traffic.” The lock mechanism can still be used across a bridge to PCIe to achieve the desired operation.
AtomicOps can go from device to device, device to host, or host to device. Each completer indicates whether it supports this capability and guarantees atomic access if it does. The ability to route AtomicOps is also indicated in the registers for a given port.
On Sep 28, 2016, at 8:32 AM, almson <notifications<EMAIL_ADDRESS>wrote:
@gstonerhttps://github.com/gstoner Will atomics work through the CPU->DMI->Chipset->PCIe path that's used for the 2nd slot of that motherboard?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/RadeonOpenCompute/ROCm/issues/32#issuecomment-250167350, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AD8DuRTnGaigmHK63iPMFj-UDHhw3RGnks5qumx3gaJpZM4KF854.

Thank you for the background information. Can you tell us what hardware scenarios are or aren't supported? Here is an illustration of the Z170 chipset (first image in the article). As you can see, some PCIe slots may be connected through the Z170 PCH. It seems that atomics do not work in this case. Is this a hardware or a BIOS limitation? Do you plan to create a utility to analyze which slots are compatible, or a database of hardware that can be consulted prior to purchase? Do PCIe switches (such as those in the ASUS X99E-WS) always work?

To be clear, Z170 advertises PCIe 3.0.

The issue was it was in the wrong slot,   He had the device in x16 slot that was x4 which could be not comping off the main CPU.   Which could be Gen2 slot or BIOS is not configured correctly.   The CPU support PCIe Gen3 with Atomics
greg
On Sep 29, 2016, at 6:42 AM, almson <notifications<EMAIL_ADDRESS>wrote:
To be clear, Z170 advertises PCIe 3.0.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/RadeonOpenCompute/ROCm/issues/32#issuecomment-250443161, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AD8DuaccDnOoU8qjQa3MEynsn-4FEKn8ks5qu6QpgaJpZM4KF854.