Support for native Windows 11 features?

We've built our Android app with Jetpack Compose, and are considering Multiplatform for extending to Windows. With the release of Windows 11, there's now the opportunity to create more modern apps:
https://blogs.windows.com/windowsdeveloper/2021/10/04/developing-for-windows-11/
Specifically, this includes new materials like Acrylic and Mica that are more macOS-like. We're wondering: will Compose Multiplatform will be able to take advantage of these new features for Windows 11 app development, especially considering its use of skia for rendering?

Relevant discussion happening for electron+flutter https://github.com/electron/electron/issues/29937

I think its not gonna support anymore lol

I have found this neat lib, hope fits your expectations: https://github.com/MayakaApps/ComposeWindowStyler

Some libraries, like the one that was linked in the previous comment, have to misuse (e.g. access via introspection) some parts of the API that are not normally accessible.
Furthermore, the same library seems to not to work anymore on more recent versions of Compose Desktop, probably due to changes of the internal API.
Given frameworks like Flutter and Electron now indeed support transparency of the window background in order to allow users (either via third-party libraries or first-party framework features) to access the Windows API and enable Mica effects on Windows 11 or even Acrylic on previous ones, Compose Desktop not allowing it would be an unnecessary limitation.
If the Compose Desktop team does not intend to support this functionality on Windows, which is alas incredibly important for the visual identity in Windows 11 and mining a more native look on the system, I think at least we could try and make the needed APIs open or accessible in some way for those functionalities to be implemented finally by 3rd party libraries in safe ways.
As a conversation starter, following is a summary of what the ComposeWindowStyler library does and the workarounds to allow for alpha on Windows. All credits go to its owners and contributors.
It accesses the SkiaLayer which is in a private field in the ComposeWindowDelegate class, which is accessible via a protected field in ComposeWindow:
https://github.com/MayakaApps/ComposeWindowStyler/blob/4090e1ccf26457928a2d8d9080dd69799be05bb5/window-styler/src/jvmMain/kotlin/com/mayakapps/compose/windowstyler/TransparencyUtils.kt
The library also "hacks" the JFrame pane in the window to allow for transparency:
https://github.com/MayakaApps/ComposeWindowStyler/blob/4090e1ccf26457928a2d8d9080dd69799be05bb5/window-styler/src/jvmMain/kotlin/com/mayakapps/compose/windowstyler/HackedContentPane.kt
As a further context explanation, the library then uses JNA to access and call native functions in the libraries in Windows, which is fine as their headers are published from Microsoft itself.
As clever, those introspected accesses and wrapped JPane classes are still hacks which simply could (and should) be avoided in production apps, and IMHO would be perfectly feasible with a minimum effort from the team.
I believe if somebody expert in Swing in the Compose Desktop team or even some contributor could find or suggest a way of making the Skia layer safely accessible, and/or to enable the transparency without going through complicated routes, then this would be solved.
Just to conclude, I still believe the team should indeed give this a weight, as the transparent windows are the lynchpin of Windows 11 look and feel, and I will repeat myself, would be an unnecessary limitation for developers to have if there's nothing physical blocking these functionalities to be used (and the fact that there are indeed libraries that make that in a way or another working, suggest it is not a system/framework limitation).
Sorry for the long comment, hope to help. I would be happy to contribute to this functionality if can help.

Yesterday I have found a way to retrieve the SkiaLayer without using introspection, via scanning the components recursively from the ComposeWindow:
private fun <T : JComponent> findComponent(
    container: Container,
    klass: Class<T>,
): T? {
    val componentSequence = container.components.asSequence()
    return componentSequence.firstOrNull { klass.isInstance(it) }?.let { klass.cast(it) }
        ?: componentSequence.filterIsInstance<Container>()
            .mapNotNull { findComponent(it, klass) }
            .firstOrNull()
}

private inline fun <reified T : JComponent> Container.findComponent() = findComponent(this, T::class.java)
fun Container.findSkiaLayer() = findComponent<SkiaLayer>()

If anybody from the compose team would check if this is the best way or there is any other more efficient way to do so, let me know.
In the meantime, I might do a PR on the third party styler library so that it might start working again (I have just tested the code on my machine, it gets the SkiaLayer and it's able to perform the thing). It still obviously needs a hacked JPanel to render the transparent layer, but yeah it works.
This is still considered a hack, just not poking hidden fields. Everything I said in my previous post still stands, and it would be nice to get any kind of official support for at least part of this.

Thank you for your interest in ComposeWindowStyler library. For personal reasons, the library was abandoned for a while. Yet, I'm willing to improve it again when I get free time to do so after 6 weeks or so.
In addition to @alexfacciorusso's awesome method, the library still suffers on Windows 11 latest versions due to several issues. The first major issue is my own mistake due to an operator typo in setSystemBackdrop function. More issues need to be inspected carefully on different versions of Windows 10 and 11 as Microsoft seems to change how its backdrop APIs work.
For anyone looking for a fully-customizable layout with no hacks (or at least a recommended one if you'd like to say so), porting this beautiful project kalibetre/CustomDecoratedJFrame to Compose would be a great solution. I already had plans to do so in ComposeWindowStyler when I have free time. It would allow us to use undecorated and transparent window as allowed by Compose Multiplatform and then use a custom title bar that resembles the actual one. In addition to this, it would allow to fix the opaque box behind title issue on Windows 10, and allow for fully customizable titlebar. A method like this is described in Microsoft's Title bar customizations guide.

Please also see the solution in this comment:

https://github.com/JetBrains/compose-multiplatform/issues/3388#issuecomment-1672732504

Please also see the solution in this comment:

Missing animations when minimizing/maximizing/restoring undecorated window #3388 (comment)

I really appreciate your contribution. If no one builds a solution until I have free time, I'll study this valuable solution as well and try to implement the next version of the library in the best way possible.

@MSDarwish2000 in reality, I was working on that already too, and I might already have something semi-working 🤣.
I might make a PR also about that feature in your library when I would have something more polished, if you don't mind?
Currently, my prototype is implemented in your library and the only thing that seems not being working yet is I can't press the system decoration buttons (close, maximise, minimise) and resizing, but it's a matter of telling the system something I'm not telling it already as the implementation is not done yet.
For context, this video has an app made with Jetpack Compose and has Mica background (using MayakaApps/ComposeWindowStyler with my changes) and transparency, still keeping the system decoration (e.g. shadow, system buttons etc.), and using the Compose WindowDraggableArea for dragging.
https://github.com/JetBrains/compose-multiplatform/assets/4479527/c657e625-94ac-45c6-9491-515bc3dbe415
I'd prefer not polluting this thread as not directly related to compose-multiplatform, I'll create another issue or PR in your repository where I'll document my status about that feature, but I feel might have some use to post here some of what is possible to do with some hours of tinkering, and it would be amazing seeing included in an official implementation in Compose Desktop.

@alexfacciorusso Amazing. Your sample looks nice.
Of course, I don't mind your contributions. Feel free to open an issue their to update us about your progress.

Is there any further progress on this side? I would like to know if there are plans to support mica natively in compose-multiplatform.

Please check the following ticket on YouTrack for follow-ups to this issue. GitHub issues will be closed in the coming weeks.


Shared psake tasks distributed in PowerShell modules

I think it would be beneficial to support loading/executing psake tasks from modules. These task modules could then be distributed on the PSGallery and the like. Individual projects could reference the appropriate task from a common psake task module. I envision this module would include common tasks like:

Analyze - Run PSScriptAnalyzer
Test - Run Pester tests
Publish - Publish module to PSGallery

This would encourage community-maintained psake tasks, reduce redundant code in projects, and help standardize PowerShell module layout as the psake tasks will expect a certain structure. If needed, there could be seperate tasks that tailer to various "flavors" of module layout.
Expected Behavior
psake should be able to execute tasks contained in PowerShell modules with a simple syntax like:
task default -depends Test

task Analyze -FromModule PowerShellBuild.Common

task Test -FromModule PowerShellBuild.Common

task Publish -FromModule MyBuildModule -Version 1.0.0

Current Behavior
psake itself can be nested inside psake tasks but there is no support for easily sharing common build tasks.

I'm a little confused about what the goal is here.
PowerShell can inherently can call Functions and Cmdlets from modules ... what's different about "tasks"?
Don't you think that the goal of "community maintained psake tasks" would be better served by shipping those function in PSake ?

Or as a separate module with typical PowerShell projects build and test oriented commands.
Then:

psake can use it
Invoke-Build can use it
people who prefer their own build scripts (many) can use it

I think ideally build tasks should not implement tools, they are for assembling tools.

I would prefer to keep the set of PowerShell build functions/tasks out of psake proper. I use psake for more than just PowerShell and want a mechanism to publish/version those tasks so my projects can reference and install them with the minimum amount of boilerplate like I mentioned here. I imagine this shared task module would have a greater update frequency and like @nightroman said, it should be consumable by Invoke-Build and others as well.
I created a PowerShellBuild.Common yesterday with the goal of creating common build functions (build/analyze/test/publish, etc). There is a psakeFile.ps1 at the root of this module that will call these common functions. The shared task mechanism in this branch of psake has the feature to load this module and execute the tasks contained in psakeFile.ps1. Invoke-Build could have a similar file in the module and we would all be using the same common functions underneath.
My intent was to take much of the logic in the Plaster psake file here and put it in normal PowerShell functions, then create slim psake tasks in psakeFile.ps1.
Hope that makes sense.

David had set up the github.com/powershell/PlasterBuild repo for such a thing but honestly after the previous summit I kind of lost energy on it.  It seemed like nobody wanted to use anybody else's stuff.  :-)  Anyway, we could resurrect the effort there (or not).  I'd be happy to add some more contributors (assuming I have perms to do so).
My original goal is similar to what you state @devblackops.  I'd like a module of reusable functions both by psake and InvokeBuild. Then I'd like both a psake recipe script and an InvokeBuild recipe script.  The idea is that you'd dot source the recipe script and for the most part, you just tweak the build with properties and tasks that hook into various places in the build process.  This would be similar to how the C# team provides that CSharp.targets file that is built on MSBuild.  For the most part when you customize a C# project, you're tweaking MSBuild properties but if you want to customize deeper, you can hook various Targets.

BTW, the PowerShellGet team doesn't really want us publishing the output of every build to the PSGallery.  :-)  The publish task might be better left as a "manual" step unless you're publishing to your own repo.

I think we're thinking along the same lines @rkeithhill. One change I made in the shared-module-tasks branch is Properties are stored in a stack instead of an array. This is so a common task module could define its behavior via Properties but the calling psake script would have an opportunity to declare their own version of those properties and change the behavior.

BTW two benefits of doing this work in the PlasterBuild repo is that A) it won't appear too aligned with psake and B) we'd have a better chance of shipping with the PowerShell extension for VSCode.  I'd want to have a Plaster template def for at least script modules where you'd pick your build system psake or InvokeBuild and it would put in the appropriate recipe/script file.

I don't have a problem with that. I created the other one because I wasn't aware of something already out there 😄

OK I sent a request to @joeyaiello to get you added as a contributor to the repo.

Here is some conceptual sample with imported tasks, see EXAMPLE 2:
https://github.com/nightroman/Invoke-Build/tree/master/Tasks/Import
Some users engaged this technique and provided positive feedback.
It's for Invoke-Build but the idea should work for psake, too. And it's about
"recipes" as @rkeithhill calls them. The point of interest is that it is not
based on conventional names of recipe scripts. Instead, a module explicitly
exports aliases for such recipes. A consumer calls the aliases in order to
import provided module recipe scripts.

@rkeithhill @nightroman  I'm finally getting back to this idea.
I wanted to finish my thought process in the psake/PowerShellBuild.Common repo without messing with PlasterBuild but I did borrow much of the common build code and extracted it into normal functions. What is left in psakeFile.ps1 is just calling the functions. I imagine IB could do the same and we'd have a IB.tasks.ps1  file or something similar alongside psakeFile.ps1.
Let me know your thoughts.

Invoke-Build already offers some mechanism of exported module tasks:
https://github.com/nightroman/Invoke-Build/tree/master/Tasks/Import
So changes in the IB core are not needed for this, as such. Maybe some syntax
sugar would be useful. But I am not sure yet, I would like to see more cases
and know what users want and think.
Unless I miss something, it is about discovery of an extra build file provided
by a module and importing it. In Invoke-Build simple dot-sourcing of this file
does the trick. This is not ideal, e.g. task names must be unique but it works.
New psake mechanism does not solve the issue with conflicting task names. E.g.
if the main script has Init and the script provided by a module has it too
then the build fails "Assert: Task init has already been defined." So this
mechanism does not add much to the usual import of extra build scripts.
Thus, why not just import scripts as usual? Like IB already shows, a module
may offer an alias for the dedicated script. Or it may be a function, etc.
The consumer script imports the exported script and uses its tasks. Simple.
P.S. I am sorry for kind of "not encouraging" the development.

Yes, directly dot sourcing task files or dot sourcing via aliases that point to the task files currently works in both IB and psake, although I'm not positive it covers ALL scenarios (dependencies on tasks in other modules, overriding values in psake Properties function, etc). I have to do more testing on that.
The intent of all this to provide a first class mechanism within the build tool to consume tasks distributed in other modules which I don't think simple dot sourcing can fully address. You mentioned duplicate tasks, that is something that I'd like to handle (it is not currently), and there may be other issues with that I haven't uncovered yet.
If IB would prefer to use the alias method,  then that could be supported in psake/PowerShellBuild.Common. Thin task wrappers to the underlying functions in the module like the psakeFIle implements would just have to be implemented.
And ultimately PowerShellBuild.Common should probably be hosted in the PowerShell GitHub org, or get rolled back into PlasterBuild, or some other community module not directly associated with psake or IB but that both build tools can utilize.

Is there a simple way that I can ask psake (for consistency) to ensure ALL classes are loaded into memory BEFORE pester runs in the test build section?

@PeterMTaylor Are you referring to PowerShell classes and you have them in separate files from the psm1? psake doesn't offer that functionally natively, you'll have to code that up yourself in your build process. AFAIK there isn't a 100% effective and foolproof way to do this. Simply appending the contents of PowerShell class files to the psm1 during the build process won't always work because with classes, the order matters if the classes have any dependencies on each other. Some people name the class files 00_class1.ps1, 10_class2.ps1, etc. to force the build order but that is brittle.
My compile task in PoshBot skirts around this with a rather inelegant solution of manually defining the order.

Thanks for the options...I’ll post back how I go with these variations.


Missing Conversation Data Context

Hello,
It might be wrong usage of conversation data on my side, but when i save session with
conversation.data.foo=5 i expect it to be saved for the life span of the session via a dialog flow context no matter what.
However, i noticed a strange case where conversation data is not contained inside the response object,
which happens whenever the final conversation data is strictly equal to the initial one (which it is in most cases).
I'm setting up the initial state of the conversation app by passing an init function to the dialogflow functions, like here:
const app = dialogflow({
    debug: true,
    init: () => {
        return {
            data: {
                state: State.LAUNCH,
                foo: 5
            }
        }
    }
}

I currently have to use syntax like conversation.data = {...conversation.data} to fix this issue.
I looked into the source of the library and found this snippet, which might be related:
if (convDataOut !== convDataIn) {
      // Previously was setting every webhook call
      // But now will only set if different so lifespan does not get reset
      this.contexts.set(CONV_DATA_CONTEXT, CONV_DATA_CONTEXT_LIFESPAN, {
        data: convDataOut,
      })
    }

(conv.ts, line 371)
I would be happy about any feedback, as I'm greatly confused about this behaviour right
now.
Affected version: 2.4.1
Best wishes,
tkruener

This should have been fixed by #295 so closing this issue.


Expand Chapel settings that work with this feature

At the moment, building Chapel with the included third-party packages (qthreads, re2, gmp, etc.) will not produce a library that can be used with pyChapel.  This means that the build settings are limited to CHPL_TASKS=fifo, CHPL_GMP=none (or system, I believe), CHPL_REGEXP=none, and CHPL_MEM=cstdlib.  There may be other limitations that neither Simon nor I have encountered yet.
Since the default value of CHPL_TASKS is qthreads, this is unfortunate.  However, our fifo tasking layer still shows good performance (and an improvement when compared to similar but "pure" Python programs), so I don't believe this issue is critical to the success of pyChapel.  It would be nice to clean up, though.

In reviewing the libraries document for our upcoming Chapel release, a script was brought to my attention that may be useful in accomplishing this.  $CHPL_HOME/util/config/compileline --libraries will give the -L and -l options necessary for all linking when using Chapel from a C file.


feature-complete Rust-like traits

I wanted to add feature-complete Rust-like traits into C++. Rust allows typeclass combinations, typeclasses with template paramets e.t.c.
Inspired by TartanLlama/typeclasses approach i created https://github.com/blockspacer/CXXCTP (see examples folder https://github.com/blockspacer/CXXCTP/blob/master/examples/simple/src/main_app.cpp#L53 )

i added to typeclasses generator typeclass combinations (when some typeclasses may be not set) -  optional typeclasses
i removed optional methods because of optional typeclasses. Maybe i'm wrong and need to add optional methods again (methods like has_*), can be done with $optional-like attribute without removing optional typeclasses.
std::ref support
typeclass merging (when all typeclasses must be set) - just copy-n-paste code from all typeclasses, nothing is optional
out-of-source methods (so method may be defined in separate lib)
Abstraction without overhead (traits without type erasure): ability to call foo(SomeType), not only SomeClass<SomeType>.foo(). Note that in RUST we can call SomeType.foo() because of UFCS, but under hood it is foo(SomeType). Provided by out-of-source methods.
typeclass with template parameters.

If you are interested in adding Rust-like traits into C++ - maybe some ideas will be useful.
Now typeclass instance accepts impl as first template argument, and all other template arguments may be used to combine typeclasses.

TartanLlama/typeclasses uses modified compiler, so it allows to write printer, not typeclass_for<printer>. CXXCTP outputs C++17/20 code, so it can use only typeclass_for<printer>.

UPD: moved to
https://github.com/blockspacer/flex_typeclass_plugin


[EN] Feedback for: /web/tools/chrome-devtools/?hl=en

Hi,
I noticed recently my chrome debugger updated. Thats fine but now functionality that I used to rely on heavily for Debugging no longer works!
As we all know, in the debugger, you cannot reference outside scope unless its been used within the scope. For example
function () {
    var bool = true;

     function () {
        console.log('hello world');
    }
}

In the past if I put a breakpoint at the console.log statement, and type into console:
bool
I will get undefined. Because bool is declared in the outside scope.
BEFORE CHROME UPDATE
Before the chome update, I often would use _conditional breakpoints which referenced outside scope to break inside the function. So Before update, if i added a conditional breakpoint at the console.log line with the following
bool === true

it would have broke, and bool would now be defined within the scope, and everything went smoothly.
Seems like declaring a conditional breakpoint "brought in" the vars from outer scope.
This is EXTREMELY useful for my development, where i often want to break only when certain conditions are met, without having to write if statements in my code.
AFTER CHROME UPDATE
Now my breakpoint isnt getting hit. Why? I know the condition is evaluating to true. Furthermore, no errors in the console are generated from my conditional breakpoint. Now if i update my function:
function () {
    var bool = true;

     function () {
        bool;
        console.log('hello world');
    }
}

My conditional breakpoint gets met.
This defeats the purpose of my conditional breakpoint in the first place - I do not want to have to change my code just to break on a condition.
Please revert the change in the chrome debugger which broke this useful functionality.
Thanks

This issue tracker only covers DevTools documentation, not product bugs. Please re-file your issue at https://crbug.com/new. Thanks!


[Feature Request] collapsed inline menu

Existing Component
是
Component Name
NavMenu
Description
l thik collapsed inline menu is necessary .  Also we can hack by overwrite css , but it is dirty and defective . like this

we can overwrite css but like sub-menu expands event we can’t stop , so it will has some bug .
I  sincerely wish the official to do this , like ant

Added in #5941


Add cops: force alphabetical order of fields and arguments

We should keep this issue open, #25 added only an OrderedFields cop, but we should have an OrderedArguments cop too

Good point, updated the issue


Version conflict  in guava with Clouder Hadoop

I found another version conflict between Druid and Cloudera Hadoop once I tried to batch ingest some data and enabled a cardinality aggregator. It turns out this time Guava was the offender which is stuck in Hadoop at 11.x while Druid uses Guava 16.x.
Since I had a similar issue with the Jackson libraries, I thought about shading and relocating the relevant dependencies (maybe a better solution would be if Hadoop itself shaded its dependencies, but that is out of scope for me). So the idea would be to relocate com.google.guava.* to io.druid-project.guava.* and something similar with the jackson libraries. But things do not seem so simple, as I have hoped for.
Did anyone investigate in this approach so far? Are are there any opinions if this would be a good way to solve the dependency conflicts? I am asking, maybe I will have some time to work out something, but I'd like to hear the experts before spending too much time on that issue.

@kupferk shading stuff for Druid would be worth a discussion but should be brought up in its own topic :)

@drcrallen thanks for your mental support, I'll open a ticket, so we can discuss the required steps. I'll try my best at implementing this task then.


get working online

check the nodered-showcase.ripple.foundation box and troubleshoot

@tony-shannon http://nodered-showcase.ripple.foundation is working, so can we consider this task as Done?


Drag and drop layers to reorder

I have found a way to implement this easily without a package if we are moving one layer at a time. If we are moving multiple layers, I'm not sure if there's an easy way to do it. I'll have to do some more research.
Do you think we should use a package for this like react-dnd or implement it ourselves?

@Mxchaeltrxn Yeah, drag-and-drop is always a pain. I've used react-beautiful-dnd in the past:
https://github.com/atlassian/react-beautiful-dnd
It's got multi-drag support out of the box:
https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/patterns/multi-drag.md
I think we need multi-drag because otherwise it's going to be ugly handling the case where a user has multiple layers selected.


Fix operator mistake

Thanks, Clang!
--- stderr: iceoryx_utils
In file included from /opt/ros/master/src/eclipse/iceoryx/iceoryx_utils/source/posix_wrapper/timer.cpp:15:
/opt/ros/master/src/eclipse/iceoryx/iceoryx_utils/include/iceoryx_utils/posix_wrapper/timer.hpp:87:59: warning: result of '2 ^ 24' is 26; did you mean '1 << 24' (16777216)? [-Wxor-used-as-pow]
        static constexpr uint32_t MAX_DESCRIPTOR_VALUE{(2 ^ 24) - 1};
                                                        ~~^~~~
                                                        1 << 24
/opt/ros/master/src/eclipse/iceoryx/iceoryx_utils/include/iceoryx_utils/posix_wrapper/timer.hpp:87:59: note: replace expression with '0x2 ^ 24' or use 'xor' instead of '^' to silence this warning
1 warning generated.

Please check that XOR was not, in fact, intended. I don't understand this code yet.

I'm feeling quite stupid right now :D
you are right, it must be (1 << 24) -1
Since there is no possibility to know if the timer callback is still running when it is deactivated from somewhere else in the code, this is an indicator if the timer is still valid before locking the mutex and executing the actual callback. When the mutex is locked, it is save to execute the callback, since the call to deactivate the callback will block until the mutex is unlocked.
If we were allowed to use the heap, this would be much easier to implement.


Mongo can handle larger databases now

Made changes to mongodb backend logic so that it no longer creates multiple queries to backend. Now mongodb backend constructs one filter from the request and queries data from mongodb just once. Previously multiple queries were made and filtering was done based on document IDs returned from those queries, this was bad practice since mongodb would have to go trough all documents multiple times filtering them using a huge list of IDs returned from previous queries. Using just one filter allows mongodb to handle the single query internally without having to match document IDs to a sometimes very large array of IDs.

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

This pull request doesn't contain a test, since triggering the bug mentioned in Issue #173
requires generating and writing huge amounts of documents to mongodb, that would make
testing much slower and require alot of resources. If this test is seen as a necessary addition
I can write one.

Here is a sample of an alternative approach I came up with which uses windowing (this is for finding max versions):
[
    {
        "$setWindowFields": {
            "partitionBy": "$id",
            "output": {
                "_max_version": {
                    "$max": "$_manifest.version"
                }
            }
        }
    },
    {
        "$match": {
            "$expr": {
                "$eq": [
                    "$_manifest.version",
                    "$_max_version"
                ]
            }
        }
    },
    {
        "$unset": [
            "_max_version"
        ]
    }
]

I don't know how it would compare in terms of efficiency.  Perhaps it is more efficient since it doesn't require sorting all of the documents first?

I've been facing this exact same problem recently as I've had to account for a worst case configuration in Sentinel of having a connector set to pull all indicators once a minute, I've tested your change and the difference is light night and day. I'm able to pull ~11k indicators in 1.3 seconds now. Many thanks for this @Halk0

@chisholm thats nice, I made some changes based your approach!
I also noticed that in the first commit loop that was on lines 95-115 was completely
unnecessary, since lines below that (116-117) did the exact same thing, but it was much
more simple, and doesn't require loops


Initialize variable failure when importing graph_def

In r0.12, I'm trying to write a graph_def at local and import it in another server. But when I session.run(a) after session.run(global_variables_initializer()), it raises a FailedPreconditionError: Attempting to use uninitialized value a .
Write graph
import tensorflow as tf

a = tf.Variable(1, name='a', dtype=tf.int32)
b = tf.Variable(2, name='b', dtype=tf.int32)
c = a + b
d = tf.Variable(c, name='d', dtype=tf.int32)
sess = tf.Session()
tf.train.write_graph(sess.graph, /tmp/PJT', 'test.pb', as_text=False)

Import graph
import tensorflow as tf
from tensorflow.core.framework import graph_pb2

graph_pb = '/home/mind/PJT/test.pb'
graph_def = graph_pb2.GraphDef()

with open(graph_pb, 'rb') as f:
    graph_def.ParseFromString(f.read())

tf.import_graph_def(graph_def, name='')
sess = tf.Session()
a = sess.graph.get_tensor_by_name('a:0')
sess.run(tf.global_variables_initializer())
sess.run(a)

Error log
FailedPreconditionErrorTraceback (most recent call last)
<ipython-input-43-574ff7291e3a> in <module>()
      2 a = sess.graph.get_tensor_by_name('a:0')
      3 sess.run(tf.global_variables_initializer())
----> 4 sess.run(a)

/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/tensorflow/python/client/session.pyc in run(self, fetches, feed_dict, options, run_metadata)
    764     try:
    765       result = self._run(None, fetches, feed_dict, options_ptr,
--> 766                          run_metadata_ptr)
    767       if run_metadata:
    768         proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/tensorflow/python/client/session.pyc in _run(self, handle, fetches, feed_dict, options, run_metadata)
    962     if final_fetches or final_targets:
    963       results = self._do_run(handle, final_targets, final_fetches,
--> 964                              feed_dict_string, options, run_metadata)
    965     else:
    966       results = []

/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/tensorflow/python/client/session.pyc in _do_run(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)
   1012     if handle is None:
   1013       return self._do_call(_run_fn, self._session, feed_dict, fetch_list,
-> 1014                            target_list, options, run_metadata)
   1015     else:
   1016       return self._do_call(_prun_fn, self._session, handle, feed_dict,

/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/tensorflow/python/client/session.pyc in _do_call(self, fn, *args)
   1032         except KeyError:
   1033           pass
-> 1034       raise type(e)(node_def, op, message)
   1035
   1036   def _extend_graph(self):

FailedPreconditionError: Attempting to use uninitialized value a
	 [[Node: _send_a_0 = _Send[T=DT_INT32, client_terminated=true, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/cpu:0", send_device_incarnation=784291433964173963, tensor_name="a:0", _device="/job:localhost/replica:0/task:0/cpu:0"](a)]]

@mrry Could you have a look?

Maybe this will work:
add init op(like tf.global_variables_initializer) to the original graph, and in the second graph import the original one and get this init op with graph.get_operation_by_name and run the op with sess.run(init)

@zakizhou Thanks for your advice. I tried it, and got some interesting and unreasonable results.
Write graph
import tensorflow as tf
a = tf.Variable(1, name='a', dtype=tf.int32)
b = tf.Variable(2, name='b', dtype=tf.int32)
init_op = tf.global_variables_initializer()
sess = tf.Session()
tf.train.write_graph(sess.graph, '/tmp/PJT', 'test.pb', as_text=False)

Import graph
import tensorflow as tf
from tensorflow.core.framework import graph_pb2

graph_pb = '/tmp/PJT/test.pb'
graph_def = graph_pb2.GraphDef()
with open(graph_pb, 'rb') as f:
    graph_def.ParseFromString(f.read())
tf.import_graph_def(graph_def, name='')
sess = tf.Session()
a = sess.graph.get_tensor_by_name('a:0')
d = sess.graph.as_graph_element('d:0')
init_op = sess.graph.get_operation_by_name('init')

sess.run(init_op)
sess.run(a)

At first time I run the import graph snippet, it raise same error as below:
FailedPreconditionError: Attempting to use uninitialized value b
	 [[Node: b/read = Identity[T=DT_INT32, _class=["loc:@b"], _device="/job:localhost/replica:0/task:0/cpu:0"](b)]]
	 [[Node: b/Assign/_12 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/gpu:0", send_device="/job:localhost/replica:0/task:0/cpu:0", send_device_incarnation=1, tensor_name="edge_14_b/Assign", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"]()]]

Caused by op u'b/read', defined at:
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/ipykernel/__main__.py", line 3, in <module>
    app.launch_new_instance()
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/traitlets/config/application.py", line 658, in launch_instance
    app.start()
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/ipykernel/kernelapp.py", line 474, in start
    ioloop.IOLoop.instance().start()
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/zmq/eventloop/ioloop.py", line 177, in start
    super(ZMQIOLoop, self).start()
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/tornado/ioloop.py", line 887, in start
    handler_func(fd_obj, events)
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/tornado/stack_context.py", line 275, in null_wrapper
    return fn(*args, **kwargs)
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/zmq/eventloop/zmqstream.py", line 440, in _handle_events
    self._handle_recv()
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/zmq/eventloop/zmqstream.py", line 472, in _handle_recv
    self._run_callback(callback, msg)
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/zmq/eventloop/zmqstream.py", line 414, in _run_callback
    callback(*args, **kwargs)
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/tornado/stack_context.py", line 275, in null_wrapper
    return fn(*args, **kwargs)
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/ipykernel/kernelbase.py", line 276, in dispatcher
    return self.dispatch_shell(stream, msg)
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/ipykernel/kernelbase.py", line 228, in dispatch_shell
    handler(stream, idents, msg)
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/ipykernel/kernelbase.py", line 390, in execute_request
    user_expressions, allow_stdin)
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/ipykernel/ipkernel.py", line 196, in do_execute
    res = shell.run_cell(code, store_history=store_history, silent=silent)
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/ipykernel/zmqshell.py", line 501, in run_cell
    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/IPython/core/interactiveshell.py", line 2717, in run_cell
    interactivity=interactivity, compiler=compiler, result=result)
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/IPython/core/interactiveshell.py", line 2827, in run_ast_nodes
    if self.run_code(code, result):
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/IPython/core/interactiveshell.py", line 2881, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-3-e62bd92e6511>", line 1, in <module>
    tf.import_graph_def(graph_def, name='')
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/tensorflow/python/framework/importer.py", line 285, in import_graph_def
    op_def=op_def)
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2240, in create_op
    original_op=self._default_original_op, op_def=op_def)
  File "/home/mind/anaconda2/envs/tf_0.12/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1128, in __init__
    self._traceback = _extract_stack()

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value b
	 [[Node: b/read = Identity[T=DT_INT32, _class=["loc:@b"], _device="/job:localhost/replica:0/task:0/cpu:0"](b)]]
	 [[Node: b/Assign/_12 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/gpu:0", send_device="/job:localhost/replica:0/task:0/cpu:0", send_device_incarnation=1, tensor_name="edge_14_b/Assign", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"]()]]

The most unreasonable thing is when I separately run sess.run(init_op) again, everything goes well. I don't know why it works, and I think you can reproduce it.

@DjangoPeng Personally I seldom use low level functions like tf.import_graph_def, instead I use tf.train.import_meta_graph(which internelly calls import_graph_def), especially after v0.12, this funtion supports much more things than before like changing the inputs of the original graph and will do all the dirty work for you including import graph def and restore variables from checkpoints.

@zakizhou I had a try of tf.train.import_meta_graph, and I always restore fail. Could you show me a use case? I attached my test snippet below:
Save model
import tensorflow as tf
a = tf.Variable(1, name='a', dtype=tf.int32)
b = tf.Variable(2, name='b', dtype=tf.int32)
c = a + b
init_op = tf.global_variables_initializer()
saver = tf.train.Saver(tf.trainable_variables())
sess = tf.Session()
sess.run(init_op)  #  I have to run it twice times to avoid the same error above.
sess.run(d)
saver.save(sess, '/tmp/PJT/model-0')

Then I get the model file as below:
model-0.meta
model-0.index
model-0.data-00000-of-00001

Restore model
import tensorflow as tf
with tf.Session() as sess:
    new_saver = tf.train.import_meta_graph('/home/mind/PJT/model-0.meta')
    new_saver.restore(sess, 'model-0.data-00000-of-00001') # It raise NotFoundError

Error log:
NotFoundError: Unsuccessful TensorSliceReader constructor: Failed to find any matching files for model-0.data-00000-of-00001
...

change new_saver.restore(sess, 'model-0.data-00000-of-00001') to new_saver.restore(sess, 'model-0') and have a try

It raises the same NotFoundError.

try this:
gd = sess.graph.as_graph_def()
for node in gd.node:
    if node.op == 'RefSwitch':
        node.op = 'Switch'
        for index in range(len(node.input)):
            if 'moving_' in node.input[index]:
                node.input[index] = node.input[index] + '/read'
    elif node.op == 'AssignSub':
        node.op = 'Sub'
        if 'use_locking' in node.attr: del node.attr['use_locking']
    elif node.op == 'AssignAdd':
        node.op = 'Add'
        if 'use_locking' in node.attr: del node.attr['use_locking']

constant_graph = graph_util.convert_variables_to_constants(sess, gd, ['output_res'])
with tf.gfile.FastGFile('./pb_model/model.pb', mode='wb') as f:
    f.write(constant_graph.SerializeToString())

ref: https://github.com/davidsandberg/facenet/issues/161


Enable event feature on default(#45)

A quick fix for #45

I would like a PR that adds some cfgs to make sure the test passes without event feature, but not enabling event by default. Sorry to close this, but I choose to make event disabled by default.


Scripts to addon

The following should exit during startup:
echo "foo" > syntaxerr.py
mitmdump -s syntaxerr.py

Looking at it with a clearer mind: Scripts now have configure instead of start. However their own arguments are not really part of options. This is really confusing for everyone who just uses scripts.


Uncaught (in promise) TypeError: Cannot read property 'consume' of undefined when trying to debug a web part using MSGraphClient in the hosted workbench

Category

[ ] Question
[ ] Typo
[x] Bug
[ ] Additional article idea

Expected or Desired Behavior
Be able to debug web part using MSGraphClient in the hosted workbench while serving from the local web server.
Observed Behavior
After adding the web part to the page, you get the following error in the console:

Steps to Reproduce
scaffold new project using generator v1.5.0 with a React web part
to the render method add:
const client: MSGraphClient = this.context.serviceScope.consume(MSGraphClient.serviceKey);
client
.api('/groups')
.get((error, response: any, rawResponse?: any) => {
alert(response);
});
run gulp serve --nobrowser
in the hosted workbench, add the web part to the canvas
in the console you get the aforementioned error

Also, I tried the code in the link: https://docs.microsoft.com/en-us/sharepoint/dev/spfx/use-msgraph
And it gave an error:

A fix is being made and is getting rolled out within next few days. Please do confirm is the issue is resolved or not within next 7 days. Thx.

Issue still exists. Thanks for the fix!

The issue still indeed exists, but should not be there within next few days.

This issue should be fixed now. Please reopen the issue if you're still seeing problems

1.5.1 still not working
"dependencies": {
	"@microsoft/sp-core-library": "1.5.1",
	"@microsoft/sp-lodash-subset": "1.5.1",
	"@microsoft/sp-office-ui-fabric-core": "1.5.1",
	"@microsoft/sp-webpart-base": "1.5.1",
	"@types/es6-promise": "0.0.33",
	"@types/react": "15.6.6",
	"@types/react-dom": "15.5.6",
	"@types/webpack-env": "1.13.1",
	"bootstrap": "^4.1.1",
	"classnames": "^2.2.6",
	"jquery": "^3.3.1",
	"react": "15.6.2",
	"react-dom": "15.6.2"
},
"devDependencies": {
	"@microsoft/sp-build-web": "1.5.1",
	"@microsoft/sp-module-interfaces": "1.5.1",
	"@microsoft/sp-webpart-workbench": "1.5.1",
	"gulp": "~3.9.1",
	"@types/chai": "3.4.34",
	"@types/mocha": "2.2.38",
	"ajv": "~5.2.2"
}

@peterremote1980 Can you share your code?

@lahuey Please reopen the issue as I still the error.

@cythomli  I cannot repro this issue. Could you share your code? My email is<EMAIL_ADDRESS>


SendMessage Method

Have you implemented the sendMessage method from the original js wrapper? Im not seeing it in the docs

It was removed. It is not supported in this lib (and not really in nodejs) as it requires generation of msToken, which we do not (publicly) provide anymore.


add action fossa

What type of PR is this?
kind/workflow
What this PR does / why we need it:
Which issue(s) this PR fixes:

Fixes #
Special notes for your reviewer:

Codecov Report

Merging #703 (46e7a04) into main (e2ffa5f) will increase coverage by 0.43%.
The diff coverage is n/a.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.
@@            Coverage Diff             @@
##             main     #703      +/-   ##
==========================================
+ Coverage   13.60%   14.03%   +0.43%
==========================================
  Files          66       72       +6
  Lines        7492     7923     +431
==========================================
+ Hits         1019     1112      +93
- Misses       6391     6726     +335
- Partials       82       85       +3

see 44 files with indirect coverage changes


added new asset and tweak a few copy

New commit: change nav bar styling + button so it's more brand-aligned.

@nugenthomas can you use the preview link to review the changes? the logo comes out too small

LGTM


[Bug] markdown 代码块里含 $数字时 的错误转义

Bug Description
当GPT回复的代码块中含有 $数字 时，比如 $0，$1 ， ChatGPT-Next-Web 会在其前面加上 \ ，如 \$0 ，\$1。
Steps to Reproduce
可以用这条提示语来检查它返回的结果：
写一个shell脚本，接受一个目录为参数，检查这个目录下是否有空目录，并打印结果，请使用中文回答。
或者看这条 ShareGPT的结果：https://sharegpt.com/c/qEjWO15
Expected Behavior
$数字 正确的转义，不需要添加 \
Screenshots

Deployment Method

[ ] Docker
[X] Vercel
[ ] Server

Desktop OS
MacOS
Desktop Browser
Chrome
Desktop Browser Version
124.0.6367.62
Smartphone Device
No response
Smartphone OS
No response
Smartphone Browser
No response
Smartphone Browser Version
No response
Additional Logs
No response

Unless the maintainers come up with a solution, I recommend you use my workaround I made in this fork: https://github.com/Algorithm5838/NextChat/tree/dollar-sign
You can try it here: https://nextchat-git-dollar-sign-algorithm5838s-projects.vercel.app/

Unless the maintainers come up with a solution, I recommend you use my workaround I made in this fork: https://github.com/Algorithm5838/NextChat/tree/dollar-sign
You can try it here: https://nextchat-git-dollar-sign-algorithm5838s-projects.vercel.app/

Thank you , I have tried this one in vercel , but it seems still not fixed ...🥶

I see. I've discovered the reason why this happens. It occurs when the first set of triple backticks (```) is immediately followed by a word, such as 'bash' in this case. If you remove the 'bash' part, it should render correctly. I'll work on fixing this issue later.

This bug is complicated by the fact that the ReactMarkdown component, which was used in our project, does not support Latex syntax well. We've gone through several rounds of optimization with contributors in the community to solve this issue. However, unfortunately, the current solution does not cover all scenarios.We will continue to optimize as soon as possible to finally solve this problem

This bug is complicated by the fact that the ReactMarkdown component, which was used in our project, does not support Latex syntax well. We've gone through several rounds of optimization with contributors in the community to solve this issue. However, unfortunately, the current solution does not cover all scenarios.We will continue to optimize as soon as possible to finally solve this problem

It seems there are issues not only with supporting Latex syntax but also with bash support, as this problem occurred in BASH.
Moreover, this component has other problems; for any URL, regardless of the language, it always returns <http://example.com>, which actually does not need the < > around it.
for example in this demo: https://shareg.pt/ze7RikV
Perhaps it might be worth considering switching to a different Markdown component library.


import not working.

Hi
I was trying to export my config and then import it, however export works fine and I can see the content in the file  karabiner-import.sh but import didn't seem to do anything.
Steps are below.
/Applications/Karabiner.app/Contents/Library/bin/karabiner export > ./karabiner-import.sh
then to import I have cleared all first as per document instructions
/Applications/Karabiner.app/Contents/Library/bin/karabiner \      be_careful_to_use__clear_all_values_by_name \      YOUR_PROFILE_NAME
then
sh karabiner-import.sh
However when I start karabiner I don't see anything in there ?
I am using mac os El Capitan 11.11.6

Karabiner must be running when you execute karabiner-import.sh.

@tekezo it was running

Could you show me the contents of karabiner-import.sh?

cli=/Applications/Karabiner.app/Contents/Library/bin/karabiner

$cli set private.help2fn 1
/bin/echo -n .
$cli set private.insert_fn_fkey_to_music_controls 1
/bin/echo -n .
$cli set private.insert_fn_fkey_to_volume_adjust 1
/bin/echo -n .
/bin/echo

Thank you!
You have to copy the private.xml to another machine.
(The export command does not support private.xml file itself.)

so you saying I have to place private.xml in karabiner directory then run the import ?

I have to place private.xml in karabiner directory

Yes. Place the private.xml and then reload XML, you can use your settings.

so what is the point of export import feature ?

? @tekezo


{CI} Workaround for error installing pyyaml==5.4, cython_sources

Related command

Description

Testing Guide

History Notes

[Component Name 1] BREAKING CHANGE: az command a: Make some customer-facing breaking change
[Component Name 2] az command b: Add some customer-facing feature

This checklist is used to make sure that common guidelines for a pull request are followed.

[ ] The PR title and description has followed the guideline in Submitting Pull Requests.

[ ] I adhere to the Command Guidelines.

[ ] I adhere to the Error Handling Guidelines.

CI


(Still not an issue)Better CPU and add GPU?

Can you make the cpu better (like pentium 3 or 4) and add a graphic card (like voodoo banshee or geforce 256) so we can play games and run more OSes?

GPU is not planned, but a PR will be accepted. wrt CPUs see https://github.com/copy/v86/issues/358

what is a PR? I didn't know

what is a PR? I didn't know


Fix alphatest transparency so it no-longer requires a diffuse/albedo texture if an opacityTexture is present

The problem is that it is a breaking change...
We would need a new parameter to trigger the new code path, so I will let @deltakosh  / @sebavan answer about this.
If we add a new code path, I would be in favor of simply testing this._transparencyMode === Material.MATERIAL_ALPHATEST || this._transparencyMode === Material.MATERIAL_ALPHATESTANDBLEND which is the easiest and more straightforward way to do it. We could call that path the strict transparency mode enforcement path, where we only use the value of transparencyMode to enable alpha testing / alpha blending. I think that could simplify a lot dealing with transparency, as the different combinations we have today can make it difficult to achieve the desired result (see https://doc.babylonjs.com/resources/transparency_and_how_meshes_are_rendered).

I couldn't think of any situations where you would have an opacity texture and set alphatest mode and not expect the opacity texture to be used, especially as cutout works without any diffuse texture at all. What are the kind of situations this would break?

Unless it's because of the default "this._transparencyMode == null || " clause people may have opacity textures assigned without setting an alpha mode and this changes the behavior in those cases? I'm happy to expand the if statement so if transparencyMode is null it only checks the diffuse/albedo texture if that would fix it?


[CNCF Check List] Update Ownership of Copyrights

https://openelb.github.io/
We need to change © 2021 KubeSphere All Rights Reserved .
Ref https://hub.fastgit.org/cncf/foundation/blob/master/website-guidelines.md
FYI   https://nocalhost.dev/

/cc @FeynmanZhou @Patrick-LuoYu

Thanks @liangyuanpeng, now @liangyuanpeng and I are working on it.


Adding all-contributors support

Aim :- Making contribution fun by recognizing, motivating and retaining(most important :)) contributors for their contribution towards this library
How to maintain this :-

Install all-contributor bot (https://allcontributors.org/docs/en/bot/installation) for this repo
Mentioning in PR is the easiest way of updating https://allcontributors.org/docs/en/bot/usage
Remind and invite contributors(on PR) to add themselves to the list, even if they just did something small.

@tannerlinsley wanted to verify, have you enabled

Install all-contributor bot (https://allcontributors.org/docs/en/bot/installation) for this repo

because this seems to not work https://github.com/tannerlinsley/react-query/issues/368


Created uggppallet

Created uggppallet to compress and analyze the uggp database.

Did you forget to save the file? This looks like the template?

Yep.  Seeing the error on the cmd line now.

🐑-it


Profile the rust library.

The Rust library is ~100x slower than the C++ version. Lets run a profiler to find out why.

Good news, after a suggestion at the last meetup to use BufferedStream the numbers are much better:
[golov@localhost rs]$ time ./target/release/calculator
ping()
0
100
...
1700
1800
1900
1 + 1 = 2
PASS
real    0m0.107s
user    0m0.016s
sys     0m0.016s
Compared with C++:
[golov@localhost cpp]$ time ./TutorialClient
ping()
0
100
...
1700
1800
1900
real    0m0.122s
user    0m0.024s
sys     0m0.032s
The values are representative for several (>5) runs. Typical real times for Rust are ~15% lower than for C++.
The code is on the quick-benchmark branch:  https://github.com/maximg/thrift/commit/9cde36a13aa5ed494a9923f6eeb6ca77b7cb1fdc, I will clean up and integrate it later today.

Awesome news! Tell me if you need some help cleaning or rebasing it.

Could you review the way I've added it to the transport? Feel free to adapt
it if you think it should be a separate file.
https://github.com/maximg/thrift/commit/351dbe93609bc3784997c0be6484250a065e24a2
On Sun, Feb 1, 2015 at 5:56 PM, Simon Génier<EMAIL_ADDRESS>wrote:

Awesome news! Tell me if you need some help cleaning or rebasing it.
—
Reply to this email directly or view it on GitHub
https://github.com/maximg/thrift/issues/9#issuecomment-72372611.

Looks good! Nice to see that kind of improvement for such a small change.
I don't think it's worth creating a new module only for that, so I'd keep it in that file. Also, should we remove the Transport implementation for TcpStream so users don't make the same mistake as us and experience degraded performances?

That's probably a good idea, we could add a comment that if for some reason
there is a need to use raw tcp transport it can be done, but that it is not
provided by default.
On Sun, Feb 1, 2015 at 7:34 PM, Simon Génier<EMAIL_ADDRESS>wrote:

Looks good! Nice to see that kind of improvement for such a small change.
I don't think it's worth creating a new module only for that, so I'd keep
it in that file. Also, should we remove the Transport implementation for
TcpStream so users don't make the same mistake as us and experience
degraded performances?
—
Reply to this email directly or view it on GitHub
https://github.com/maximg/thrift/issues/9#issuecomment-72377092.

Should we close this issue for now and reopen if anything else comes up?

I think it is good to have it as a reminder before we go to main. Do you think we could use it to do performance measurements on the mutlithreaded server?

A simple benchmark is available in tutorial/rs/src/benchmark.rs and tutorial/cpp/CppBenchmark.cpp


Certain Unicode character cause an unusual progress bar error

Python version:  3.5.2 on Ubuntu
Bandcamp-dl version: bandcamp-dl 0.0.8-12
Bancamp-dl options:  None
url:

https://glassspresents.bandcamp.com/track/-
https://evpmusic2.bandcamp.com/track/-

options:  None
Describe the issue:
Normally the progress bar stays confined to a single line.  Certain characters trigger a weird behaviour where it prints out the progress line-by-line.  Perhaps the output needs sanitising?
(1/1) [                                                  ] :: Downloading: 03 - ノヮノ
(1/1) [                                                  ] :: Downloading: 03 - ノヮノ
(1/1) [=                                                 ] :: Downloading: 03 - ノヮノ
(1/1) [=                                                 ] :: Downloading: 03 - ノヮノ
(1/1) [==                                                ] :: Downloading: 03 - ノヮノ
(1/1) [==                                                ] :: Downloading: 03 - ノヮノ
(1/1) [===                                               ] :: Downloading: 03 - ノヮノ
(1/1) [===                                               ] :: Downloading: 03 - ノヮノ
(1/1) [====                                              ] :: Downloading: 03 - ノヮノ
(1/1) [====                                              ] :: Downloading: 03 - ノヮノ
(1/1) [=====                                             ] :: Downloading: 03 - ノヮノ
(1/1) [=====                                             ] :: Downloading: 03 - ノヮノ
(1/1) [======                                            ] :: Downloading: 03 - ノヮノ
(1/1) [======                                            ] :: Downloading: 03 - ノヮノ
(1/1) [=======                                           ] :: Downloading: 03 - ノヮノ
(1/1) [=======                                           ] :: Downloading: 03 - ノヮノ
(1/1) [========                                          ] :: Downloading: 03 - ノヮノ
(1/1) [========                                          ] :: Downloading: 03 - ノヮノ
(1/1) [=========                                         ] :: Downloading: 03 - ノヮノ
(1/1) [=========                                         ] :: Downloading: 03 - ノヮノ
(1/1) [==========                                        ] :: Downloading: 03 - ノヮノ
(1/1) [==========                                        ] :: Downloading: 03 - ノヮノ
(1/1) [===========                                       ] :: Downloading: 03 - ノヮノ
(1/1) [===========                                       ] :: Downloading: 03 - ノヮノ
(1/1) [============                                      ] :: Downloading: 03 - ノヮノ
(1/1) [============                                      ] :: Downloading: 03 - ノヮノ
(1/1) [=============                                     ] :: Downloading: 03 - ノヮノ
(1/1) [=============                                     ] :: Downloading: 03 - ノヮノ
(1/1) [==============                                    ] :: Downloading: 03 - ノヮノ
(1/1) [==============                                    ] :: Downloading: 03 - ノヮノ
(1/1) [===============                                   ] :: Downloading: 03 - ノヮノ
(1/1) [===============                                   ] :: Downloading: 03 - ノヮノ
(1/1) [================                                  ] :: Downloading: 03 - ノヮノ
(1/1) [================                                  ] :: Downloading: 03 - ノヮノ
(1/1) [=================                                 ] :: Downloading: 03 - ノヮノ
(1/1) [=================                                 ] :: Downloading: 03 - ノヮノ
(1/1) [==================                                ] :: Downloading: 03 - ノヮノ
(1/1) [==================                                ] :: Downloading: 03 - ノヮノ
(1/1) [===================                               ] :: Downloading: 03 - ノヮノ
(1/1) [===================                               ] :: Downloading: 03 - ノヮノ
(1/1) [====================                              ] :: Downloading: 03 - ノヮノ
(1/1) [====================                              ] :: Downloading: 03 - ノヮノ
(1/1) [=====================                             ] :: Downloading: 03 - ノヮノ
(1/1) [=====================                             ] :: Downloading: 03 - ノヮノ
(1/1) [======================                            ] :: Downloading: 03 - ノヮノ
(1/1) [======================                            ] :: Downloading: 03 - ノヮノ
(1/1) [=======================                           ] :: Downloading: 03 - ノヮノ
(1/1) [=======================                           ] :: Downloading: 03 - ノヮノ
(1/1) [========================                          ] :: Downloading: 03 - ノヮノ
(1/1) [========================                          ] :: Downloading: 03 - ノヮノ
(1/1) [=========================                         ] :: Downloading: 03 - ノヮノ
(1/1) [=========================                         ] :: Downloading: 03 - ノヮノ
(1/1) [==========================                        ] :: Downloading: 03 - ノヮノ
(1/1) [==========================                        ] :: Downloading: 03 - ノヮノ
(1/1) [===========================                       ] :: Downloading: 03 - ノヮノ
(1/1) [===========================                       ] :: Downloading: 03 - ノヮノ
(1/1) [============================                      ] :: Downloading: 03 - ノヮノ
(1/1) [============================                      ] :: Downloading: 03 - ノヮノ
(1/1) [=============================                     ] :: Downloading: 03 - ノヮノ
(1/1) [=============================                     ] :: Downloading: 03 - ノヮノ
(1/1) [==============================                    ] :: Downloading: 03 - ノヮノ
(1/1) [==============================                    ] :: Downloading: 03 - ノヮノ
(1/1) [===============================                   ] :: Downloading: 03 - ノヮノ
(1/1) [===============================                   ] :: Downloading: 03 - ノヮノ
(1/1) [================================                  ] :: Downloading: 03 - ノヮノ
(1/1) [================================                  ] :: Downloading: 03 - ノヮノ
(1/1) [=================================                 ] :: Downloading: 03 - ノヮノ
(1/1) [=================================                 ] :: Downloading: 03 - ノヮノ
(1/1) [==================================                ] :: Downloading: 03 - ノヮノ
(1/1) [==================================                ] :: Downloading: 03 - ノヮノ
(1/1) [===================================               ] :: Downloading: 03 - ノヮノ
(1/1) [===================================               ] :: Downloading: 03 - ノヮノ
(1/1) [====================================              ] :: Downloading: 03 - ノヮノ
(1/1) [====================================              ] :: Downloading: 03 - ノヮノ
(1/1) [=====================================             ] :: Downloading: 03 - ノヮノ
(1/1) [=====================================             ] :: Downloading: 03 - ノヮノ
(1/1) [======================================            ] :: Downloading: 03 - ノヮノ
(1/1) [======================================            ] :: Downloading: 03 - ノヮノ
(1/1) [=======================================           ] :: Downloading: 03 - ノヮノ
(1/1) [=======================================           ] :: Downloading: 03 - ノヮノ
(1/1) [========================================          ] :: Downloading: 03 - ノヮノ
(1/1) [========================================          ] :: Downloading: 03 - ノヮノ
(1/1) [=========================================         ] :: Downloading: 03 - ノヮノ
(1/1) [=========================================         ] :: Downloading: 03 - ノヮノ
(1/1) [==========================================        ] :: Downloading: 03 - ノヮノ
(1/1) [==========================================        ] :: Downloading: 03 - ノヮノ
(1/1) [===========================================       ] :: Downloading: 03 - ノヮノ
(1/1) [===========================================       ] :: Downloading: 03 - ノヮノ
(1/1) [============================================      ] :: Downloading: 03 - ノヮノ
(1/1) [============================================      ] :: Downloading: 03 - ノヮノ
(1/1) [=============================================     ] :: Downloading: 03 - ノヮノ
(1/1) [=============================================     ] :: Downloading: 03 - ノヮノ
(1/1) [==============================================    ] :: Downloading: 03 - ノヮノ
(1/1) [==============================================    ] :: Downloading: 03 - ノヮノ
(1/1) [===============================================   ] :: Downloading: 03 - ノヮノ
(1/1) [===============================================   ] :: Downloading: 03 - ノヮノ
(1/1) [================================================  ] :: Downloading: 03 - ノヮノ
(1/1) [================================================  ] :: Downloading: 03 - ノヮノ
(1/1) [================================================= ] :: Downloading: 03 - ノヮノ
(1/1) [================================================= ] :: Downloading: 03 - ノヮノ
(1/1) [==================================================] :: Downloading: 03 - ノヮノ
(1/1) [==================================================] :: Encoding: 03 - ノヮノ
(1/1) [==================================================] :: Finished: 03 - ノヮノ

Hm.. somewhere along the line the title is getting mangled, I can tell it gets the correct title because track_meta shows: 'title': '(ﾉ◕ヮ◕)ﾉ-･ﾟ✧', and it displays correctly in terminal (So its not a unicode rendering issue either)

Tracing it all the way back it seems like slugify is breaking it.

Switching to the newer and actively developed python-slugify seems to fix it, though it gives up even trying to use the original title at all and just romanizes any japanese for example. Looks like I need to add a check to see if a filename is valid for Windows/Linux and if so not bother to slugify it.
Its been so long I actually can't remember why I slugify things.. it was in the original codebase..

Note to self: Check out pathvalidate


syntax(sh): Improve the recognition of bracket expressions

Define a general non-contained shBracketExpr group,
and replace with it the contained bracket variant of
shOperator, adjusting the patterns for the competing
conditional commands [ and [[.
Accommodate some unbalanced brackets (e.g. [!][!]).
Make the leading ! (or ^) stand out in NON-matching
bracket expressions.
Support literal newlines in parametric patterns (along
with pathname globbings and case patterns).
Also match bracket expressions in:

parametric patterns (e.g. ${1#[ab]_});
pathname globbings (e.g. [ab]*.txt);
arguments for the [[, echo, and print commands.

Recognise collating symbols (e.g. [.a.]) and equivalence
classes (e.g. [=a=]).
Recognise end patterns for a pattern substitution form of
parameter expansion and match bracket expressions in such
patterns (e.g. ${1/%[.!]/;}).

Resolves #15799.
References:
https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/V1_chap09.html#tag_09_03_05
https://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#tag_19_14
https://git.savannah.gnu.org/gitweb/?p=bash.git;a=blob_plain;f=doc/bash.html;hb=37b7e91d64ad10b1a1815d12128c9475636df670
http://www.mirbsd.org/htman/i386/man1/mksh.htm

thanks!


dsm.c debugging output

Line 699 of dsm.c should be "values[i]" not "values[0]" for DSM_DEBUG.
https://github.com/PX4/Firmware/blob/42093a5ee1822b002783cf8d413e37677642d0e3/src/lib/rc/dsm.c

Thanks! Would you mind sending a Github Pull request?

Fixed in 72eafe7e72.


feat: support for conversion webhooks

Overview
Use hooks as conversion webhooks.
What this PR does / why we need it
See #41.
This PR adds a new binding kubernetesCustomResourceConversion.

Special notes for your reviewer
Does this PR introduce a user-facing change?

Ready: reviewed and tested many times internally.


Service Outage

We're aware that some services are displaying a white page on loading at the moment.
We currently are in the process of arranging this to be corrected.
Thank You for your understanding. - MPM

We've corrected a security issue that forced these two services to go offline.
The security issue only affected installation files to our Wordpress installation.
NO STORED DATA WAS AFFECTED, If you wish to contact us please do.
Thank You for your understanding. - MPM


Remove the unnecessary buf duplicate call

What changes are proposed in this pull request?
Remove the unnecessary buf duplicate call
Why are the changes needed?
we already call duplicated on the caller side.  https://github.com/Alluxio/alluxio/blob/70b6e77438ad22b876890e635a43d1520e83498b/core/server/worker/src/main/java/alluxio/worker/block/UnderFileSystemBlockReader.java#L193
Does this PR introduce any user facing changes?
Please list the user-facing changes introduced by your change, including
no

alluxio-bot, merge this please.


Add Gemini Flash Support for classification

Search before asking

[X] I have searched the Autodistill issues and found no similar feature requests.

Description
Adding base model Gemini Flash for classificaiton
Use case
classification
Additional
No response
Are you willing to submit a PR?

[X] Yes I'd like to help by submitting a PR!

Thank you for creating this Issue! Let us know when you have made the project!

@capjamesg I saw there is a project https://github.com/autodistill/autodistill-gemini already with gemini Should I update the documentation to reflect his or what should be done here

Hello @lab176344! It would be great if you updated the existing one and added a flag where users can choose what model they want to use. We will also need docs in the README that explains how to choose a model, and what models are available.

ok cool thank you will raise a PR in both soon


aur-sync: Provide a summary of build failures instead of failing early

When performing multiple builds in an aur-sync pass, the current behavior is that the first failing build aborts the process. As a user,

it is not immediately obvious which package failed, because the name of the package being build is only mentioned at the start of the build process, which could have been however many lines ago,
it is annoying to have to exclude the failing package from the initial command to continue with the rest of the package list before you run the command again to proceed with the remaining packages,
it is easier to leave successfully built packages in the command than to dig them up from the log and remove them,
if the failing package is a dependency of a package originally specified to aur-sync, it is a pain to figure out which of the specified packages pulled in the failed package and would thus need to be excluded to get at least the remaining packages to build.

As a general idea, it would be much nicer if

aur-sync didn't terminate on the first build failure and would instead continue with any builds that don't depend on failed builds,
there was a build summary at the end of an aur-sync call that mentions all packages that failed to be built and maybe also those that have been build successfully.

Disadvantages of the proposal:

It wouldn't be immediately obvious why a certain package failed to be built because it could have happened anywhere during the process, but there would be log files of the individual builds.

The difficulty with this (and #592) is that dependencie queues are in a flat format (aur build -a). To address this in full generality, aur-depends and aur-graph would need to return an actual dependency graph (tree).

It's a shame there's no reusable AUR dependency solver which has this already. aurman was the only thing that came close, but it had breaking bugs which were never addressed. Maybe some of the pacman wrappers do, but adapting their code which

invents new rules for corner-cases to make pacman -U work
has to be ripped out from a large monolithic project
is possibly written in languages problematic on low-powered systems (e.g. Go, Rust, C++ or Haskell)

is going to take significantly more effort than starting from 0.
@Foxboron mentioned something about a new graph library in Python, maybe that one could be investigated.

The sadness here is make can already do all of this, and it might be worth investigating (gnu make in particular has --trace which projects use to produce dot graphs), but I suspect that it might just about not be good enough due to its requirements on rule naming, i.e. not allowing spaces.  On the other hand, it appears ninja handles escaping spaces with \ .  Hmm.

Proof of concept:
#!/bin/bash
set -e
tmp=$(mktemp -d)
rm -rf '"$tmp"' EXIT

# TODO: take aur-build flags as argument
cat << 'EOF'
aurbuild_opts = -srn -d custom
rule aurbuild
  command = aur build ${aurbuild_opts}
EOF

# input from aur-{table,repo} --depends
sort -k1b,1 >"$tmp"/deptable

# map of pkgname to pkgbase
declare -A pkgmap
while read -r pkgname pkgbase; do
    pkgmap[$pkgname]=$pkgbase
done < <(awk '{print $1, $3}' "$tmp"/deptable)

# input is assumed to be ordered by pkgname
current_package=
while read -r pkgname depends pkgbase pkgver; do
    if [[ $pkgname != "$current_package" ]]; then
        printf '\n'
    fi
    if [[ $pkgname != "$current_package" ]] || [[ ! $current_package ]]; then
        printf 'build %s: aurbuild %s/PKGBUILD | ' "$pkgname" "$pkgname"
    fi
    current_package=$pkgname

    # don't add dependency to self
    if [[ $pkgname != "$depends" ]]; then
        depends_base=${pkgmap[$depends]}

        # only add pkgbase dependency if available (i.e. AUR-only)
        if [[ $depends_base ]]; then
            printf '%s ' "$depends_base"
        fi
    fi
done <"$tmp"/deptable
echo

# vim: set et sw=4 sts=4 ft=sh:

Sample input:
weston-git weston-git weston-git 1.0
weston-git wayland-git weston-git 1.0
weston-git wayland-protocols-git weston-git 1.0
wayland-protocols-git wayland-protocols-git wayland-protocols-git 1.0
wayland-protocols-git wayland-git wayland-protocols-git 1.0
wayland-git wayland-git wayland-git 1.0

Output:
aurbuild_opts = -srn -d custom
rule aurbuild
  command = aur build ${aurbuild_opts}

build wayland-git: aurbuild wayland-git/PKGBUILD |
build wayland-protocols-git: aurbuild wayland-protocols-git/PKGBUILD | wayland-git
build weston-git: aurbuild weston-git/PKGBUILD | wayland-git wayland-protocols-git

If my understanding is correct, any packages with modified PKGBUILDs (and their reverse dependencies) would be also rebuilt this way.

Something to keep in mind is that ninja will perform parallel builds by default, which aur-build does not support. makepkg has some logic to spin on pacman.lock to allow parallel invocations, but aur-build lacks this for its own pacman invocations.

Another problem is that ninja and sudo prompts don't play nice. If a build command in ninja runs sudo, and a prompt ensues, there's no way to

abort ninja apart from SIGKILL ;
enter the password in the first place;
even when the password could be entered, it is shown on the console.

If #907 is implemented, sudo ninja to circumvent this. However, ninja swallows all output from aur-build regardless of verbosity switches. That fact alone makes the idea of using build.ninja as an aur build runner useless. (I guess it's a "modern" thing to hide all output from the user.)
ninja -t graph can be used to generate a graph, either way.

ninja has a concept called pools which allow you to control the level of parallelism.  I'd probably suggest using ninja -j 1 regardless, for that reason.  The build targets might also benefit from being package tarballs, I'm not sure how ninja responds to directories.

Nice! The console pool works as intended.

One thing to keep in mind with ninja is that they really want you to generate the build file, and so do not support environment variable overrides and such like.  Fwiw, ninja -f /dev/stdin works.

The new snippet I added in https://github.com/AladW/aurutils/issues/908#issuecomment-1046031158 could be used in two ways:

Resolve ordering every time (i.e. all build targets are run, as with aur build -a <queue>)

ninja -t clean
ninja

Only build targets with changed PKGBUILD:

ninja

You could add the pool = console directive to the rule block and avoid the repeatition there.

https://github.com/AladW/aurutils/pull/934

Your use of timestamps might be better overall because it separates that detail with the more central requirement, which is rebuilding packages if the PKGBUILD changes regardless of output. It really depends on how tightly coupled you want the "real" output artefacts to inputs.

Tightly coupling input and output doesn't seem a priority to me. The connection from PKGBUILD to built package (and the checking for existing artifacts) is already covered by aur-build anyway. If you mean changing the dependencies so it only depends on single aspect, such as pkgver, then that could be a nice optional feature, but wouldn't be default.

I don't know if .SRCINFO should be included because a new .SRCINFO surely must depend or be synchronised with the PKGBUILD.

Fair enough. It could to the PKGBUILD, with optionally the user specifying a different file to be monitored.

Handles dependency cycles nicely as well:
ninja: error: dependency cycle: plasma-workspace-git.stamp -> kde-cli-tools-git.stamp -> plasma-workspace-git.stamp

I did wonder if this would entirely supplant aur-graph as an internal detail lol

Well, aur-graph is a possible input for build.ninja files (taking graph edges from .SRCINFO), as are aur-depends and aur-repo (latter to rebuild an entire repo in the correct order).
Having an aur script named after an implementation detail is indeed rather questionable, however, and the naming as a whole is ambiguous. Specifically, the question arises why graph specifically handles .SRCINFO files, but no other inputs.
Maybe aur-graph should be rethought as a more general utility manipulating dependency graphs instead, e.g, for pipelines like aur depends --table | aur graph -.

A straightforward option was to turn aur-ninja into an aur-sync implementation detail. aur-sync already has the full aur-build command-line available and needs to call ninja for the build already. By placing it in a helper script, build.ninja files can still be generated outside of aur-sync.
I may revisit the aur-graph topic at a later time, but the above seems like a reasonable choice for now.

A minor annoyance: ninja -t targets shows partial results on a dependency cycle...

Beautiful

I've managed to build ros-noetic-desktop with the new changes (with random errors littered all over that dependency tree, it is a nice demonstration of ninja) so this should be ready for testing.
Another observation regarding .stamp files (as ninja outputs) is that they are not written until after the build completes. So if the user interrupts somewhere in the middle of the dependency chain, they would start from 0. I guess this is where having the actual packages as outputs would be useful.

So, to go back to the original report:

As a general idea, it would be much nicer if

aur-sync didn't terminate on the first build failure and would instead continue with any builds that don't depend on failed builds,
there was a build summary at the end of an aur-sync call that mentions all packages that failed to be built and maybe also those that have been build successfully.

is covered if you set AUR_SYNC_USE_NINJA=1 and use --keep-going=0. I'm not sure how to achieve 2. with ninja, though: it prints failed commands, but only as they occur.

Parsing ninja's output might not be too terrible as you can specify a pretty rigid format with NINJA_STATUS, but I wonder if the existing output is good enough for this.  It might be worth experimenting with but it may not be as necessary now that keep_going is available.  I.e. failed packages can be detected via other means, such as leaving behind logs.

After playing around with it, .stamp files in conjunction with ninja -t targets all works reasonably well:
summarize_build() {
    local success=(*.stamp) target

    if [[ -f ${success[0]} ]]; then
        printf "%s\t${BOLD}${GREEN}[OK]${ALL_OFF}\n"<EMAIL_ADDRESS>
        while read -r target; do
            printf "%s\t${BOLD}${RED}[FAIL]${ALL_OFF}\n" "${target%%.stamp}"
        done < <(
            ninja -t targets all | cut -d: -f1 | grep -Fxvf <(printf '%s\n' "${success[@]}") -
        )
    else
        while read -r target; do
            printf "%s\t${BOLD}${RED}[FAIL]${ALL_OFF}\n" "${target%%.stamp}"
        done < <(ninja -t targets all | cut -d: -f1)
    fi | column -t
}

Output:
ros-noetic-actionlib-tutorials             [OK]
ros-noetic-bond-core                       [OK]
ros-noetic-bondpy                          [OK]
ros-noetic-common-tutorials                [OK]
ros-noetic-cv-bridge                       [OK]
ros-noetic-diagnostic-aggregator           [OK]
ros-noetic-diagnostic-analysis             [OK]
ros-noetic-diagnostic-common-diagnostics   [OK]
ros-noetic-diagnostic-updater              [OK]
ros-noetic-dynamic-reconfigure             [OK]
ros-noetic-eigen-conversions               [OK]
ros-noetic-filters                         [OK]
ros-noetic-gl-dependency                   [OK]
ros-noetic-image-transport                 [OK]
ros-noetic-interactive-markers             [OK]
ros-noetic-interactive-marker-tutorials    [OK]
ros-noetic-joint-state-publisher           [OK]
ros-noetic-kdl-conversions                 [OK]
ros-noetic-laser-geometry                  [OK]
ros-noetic-map-msgs                        [OK]
ros-noetic-media-export                    [OK]
ros-noetic-nodelet-core                    [OK]
ros-noetic-nodelet-topic-tools             [OK]
ros-noetic-nodelet-tutorial-math           [OK]
ros-noetic-pluginlib-tutorials             [OK]
ros-noetic-turtle-actionlib                [OK]
ros-noetic-turtlesim                       [OK]
ros-noetic-common-msgs                     [FAIL]
ros-noetic-control-msgs                    [FAIL]
ros-noetic-desktop                         [FAIL]
ros-noetic-diagnostics                     [FAIL]
ros-noetic-executive-smach                 [FAIL]
ros-noetic-geometry                        [FAIL]
ros-noetic-geometry-tutorials              [FAIL]
ros-noetic-kdl-parser-py                   [FAIL]
ros-noetic-kdl-parser                      [FAIL]
ros-noetic-librviz-tutorial                [FAIL]
ros-noetic-qt-gui-cpp                      [FAIL]
ros-noetic-qwt-dependency                  [FAIL]
ros-noetic-resource-retriever              [FAIL]
ros-noetic-robot                           [FAIL]
ros-noetic-robot-state-publisher           [FAIL]
ros-noetic-ros-base                        [FAIL]
ros-noetic-ros-comm                        [FAIL]
ros-noetic-ros-core                        [FAIL]
ros-noetic-roscpp-core                     [FAIL]
ros-noetic-roscpp-tutorials                [FAIL]
ros-noetic-roslint                         [FAIL]
ros-noetic-roslisp                         [FAIL]
ros-noetic-rospy-tutorials                 [FAIL]
ros-noetic-ros                             [FAIL]
ros-noetic-ros-tutorials                   [FAIL]
ros-noetic-rqt-action                      [FAIL]
ros-noetic-rqt-bag-plugins                 [FAIL]
ros-noetic-rqt-common-plugins              [FAIL]
ros-noetic-rqt-console                     [FAIL]
ros-noetic-rqt-dep                         [FAIL]
ros-noetic-rqt-graph                       [FAIL]
ros-noetic-rqt-gui-cpp                     [FAIL]
ros-noetic-rqt-image-view                  [FAIL]
ros-noetic-rqt-launch                      [FAIL]
ros-noetic-rqt-moveit                      [FAIL]
ros-noetic-rqt-msg                         [FAIL]
ros-noetic-rqt-nav-view                    [FAIL]
ros-noetic-rqt-plot                        [FAIL]
ros-noetic-rqt-pose-view                   [FAIL]
ros-noetic-rqt-publisher                   [FAIL]
ros-noetic-rqt-py-console                  [FAIL]
ros-noetic-rqt-reconfigure                 [FAIL]
ros-noetic-rqt-robot-dashboard             [FAIL]
ros-noetic-rqt-robot-monitor               [FAIL]
ros-noetic-rqt-robot-plugins               [FAIL]
ros-noetic-rqt-robot-steering              [FAIL]
ros-noetic-rqt-runtime-monitor             [FAIL]
ros-noetic-rqt-rviz                        [FAIL]
ros-noetic-rqt-service-caller              [FAIL]
ros-noetic-rqt-shell                       [FAIL]
ros-noetic-rqt-srv                         [FAIL]
ros-noetic-rqt-tf-tree                     [FAIL]
ros-noetic-rqt-topic                       [FAIL]
ros-noetic-rqt-top                         [FAIL]
ros-noetic-rqt-web                         [FAIL]
ros-noetic-rviz-plugin-tutorials           [FAIL]
ros-noetic-rviz-python-tutorial            [FAIL]
ros-noetic-rviz                            [FAIL]
ros-noetic-self-test                       [FAIL]
ros-noetic-shape-msgs                      [FAIL]
ros-noetic-smach-msgs                      [FAIL]
ros-noetic-smach                           [FAIL]
ros-noetic-smach-ros                       [FAIL]
ros-noetic-stereo-msgs                     [FAIL]
ros-noetic-tf2-eigen                       [FAIL]
ros-noetic-tf2-kdl                         [FAIL]
ros-noetic-tf-conversions                  [FAIL]
ros-noetic-trajectory-msgs                 [FAIL]
ros-noetic-turtle-tf2                      [FAIL]
ros-noetic-turtle-tf                       [FAIL]
ros-noetic-urdfdom-py                      [FAIL]
ros-noetic-urdf                            [FAIL]
ros-noetic-urdf-tutorial                   [FAIL]
ros-noetic-visualization-marker-tutorials  [FAIL]
ros-noetic-visualization-tutorials         [FAIL]
ros-noetic-viz                             [FAIL]
ros-noetic-webkit-dependency               [FAIL]
ros-noetic-xacro                           [FAIL]

This is conceptually similar to aur-build --results, however with ninja there's a single target per aur build command, and the --results file is overwritten every time.

It's a difficult call because it's one of those situations where it's the information you might have liked to know after the fact, when it is too late.  Perhaps only display this if there was an error?

Indeed, this is what is I went with in the end. The common case is (presumably) a successful run, and no verbosity should be added then.
@FichteFoll @bartoszek (#350) @jendrikw (#388) call for testing

Another thing one might do is print the summary as a tree, to address the "why did the build fail". That involves parsing ninja -t graph. However that's not something I'm going to implement myself. Ideally ninja already would provide something like this, similar to its diagnostic on dependency cycles.

After some consideration, it might be useful to print the targets in the same order they failed (and succeeded), e.g.
ros-build-tools-py3                         [OK]
boost1.69                                   [OK]
ogre-1.9                                    [OK]
opencv3-opt                                 [OK]
ros-melodic-catkin                          [OK]
ros-melodic-angles                          [OK]
ros-melodic-cmake-modules                   [OK]
ros-melodic-cpp-common                      [OK]
ros-melodic-class-loader                    [OK]
ros-melodic-genmsg                          [OK]
ros-melodic-gl-dependency                   [OK]
ros-melodic-gencpp                          [OK]
ros-melodic-geneus                          [OK]
ros-melodic-genlisp                         [OK]
ros-melodic-gennodejs                       [OK]
ros-melodic-genpy                           [OK]
ros-melodic-media-export                    [OK]
ros-melodic-message-generation              [OK]
ros-melodic-orocos-kdl                      [OK]
ros-melodic-qwt-dependency                  [OK]
ros-melodic-python-orocos-kdl               [FAIL]
ros-melodic-rosbag-migration-rule           [OK]
ros-melodic-rosbash                         [OK]
ros-melodic-rosboost-cfg                    [OK]
ros-melodic-rosclean                        [OK]
ros-melodic-roscreate                       [OK]
ros-melodic-ros-environment                 [OK]
ros-melodic-rosgraph                        [OK]
ros-melodic-roslang                         [OK]
ros-melodic-roslint                         [OK]
ros-melodic-roslz4                          [FAIL]
ros-melodic-rosmake                         [OK]
ros-melodic-rosmaster                       [OK]
ros-melodic-rospack                         [OK]
ros-melodic-rosparam                        [OK]
ros-melodic-roslib                          [OK]
ros-melodic-rostime                         [OK]
ros-melodic-rosunit                         [OK]
ros-melodic-roscpp-traits                   [OK]
ros-melodic-smach                           [OK]
ros-melodic-roscpp-serialization            [OK]
ros-melodic-smclib                          [OK]
ros-melodic-message-runtime                 [OK]
ros-melodic-roscpp-core                     [OK]
ros-melodic-rosbuild                        [OK]
ros-melodic-std-msgs                        [OK]
ros-melodic-mk                              [OK]
ros-melodic-actionlib-msgs                  [OK]
ros-melodic-bond                            [OK]
ros-melodic-diagnostic-msgs                 [OK]
ros-melodic-geometry-msgs                   [OK]
ros-melodic-python-qt-binding               [OK]
ros-melodic-eigen-conversions               [OK]
ros-melodic-kdl-conversions                 [OK]
ros-melodic-nav-msgs                        [OK]
ros-melodic-qt-dotgraph                     [OK]
ros-melodic-qt-gui                          [OK]
ros-melodic-qt-gui-py-common                [OK]
ros-melodic-ros                             [OK]
ros-melodic-rosconsole                      [OK]
ros-melodic-rosgraph-msgs                   [OK]
ros-melodic-pluginlib                       [OK]
ros-melodic-resource-retriever              [FAIL]
ros-melodic-qt-gui-cpp                      [FAIL]
ros-melodic-rosconsole-bridge               [OK]
ros-melodic-rqt-gui                         [OK]
ros-melodic-sensor-msgs                     [OK]
ros-melodic-shape-msgs                      [OK]
ros-melodic-cv-bridge                       [FAIL]
ros-melodic-map-msgs                        [OK]
ros-melodic-smach-msgs                      [OK]
ros-melodic-std-srvs                        [OK]
ros-melodic-stereo-msgs                     [OK]
ros-melodic-roslisp                         [OK]
ros-melodic-tf2-msgs                        [OK]
ros-melodic-trajectory-msgs                 [OK]
ros-melodic-tf2                             [OK]
ros-melodic-control-msgs                    [OK]
ros-melodic-urdfdom-py                      [OK]
ros-melodic-urdf-parser-plugin              [OK]
ros-melodic-visualization-msgs              [OK]
ros-melodic-webkit-dependency               [OK]
ros-melodic-common-msgs                     [OK]
ros-melodic-xmlrpcpp                        [OK]
ros-melodic-roscpp                          [OK]
ros-melodic-bondcpp                         [OK]
ros-melodic-pluginlib-tutorials             [OK]
ros-melodic-roscpp-tutorials                [OK]
ros-melodic-rosout                          [OK]
ros-melodic-rospy                           [OK]
ros-melodic-roslaunch                       [OK]
ros-melodic-bondpy                          [OK]
ros-melodic-nodelet                         [OK]
ros-melodic-bond-core                       [OK]
ros-melodic-nodelet-tutorial-math           [OK]
ros-melodic-rostest                         [OK]
ros-melodic-rqt-gui-cpp                     [FAIL]
ros-melodic-diagnostic-aggregator           [OK]
ros-melodic-diagnostic-updater              [OK]
ros-melodic-filters                         [OK]
ros-melodic-rospy-tutorials                 [OK]
ros-melodic-joint-state-publisher           [OK]
ros-melodic-message-filters                 [OK]
ros-melodic-rosbag-storage                  [FAIL]
ros-melodic-image-transport                 [OK]
ros-melodic-rqt-gui-py                      [OK]
ros-melodic-rqt-image-view                  [FAIL]
ros-melodic-rqt-py-console                  [OK]
ros-melodic-rqt-runtime-monitor             [OK]
ros-melodic-rqt-shell                       [OK]
ros-melodic-rqt-top                         [OK]
ros-melodic-rqt-web                         [OK]
ros-melodic-self-test                       [OK]
ros-melodic-tf2-py                          [FAIL]
ros-melodic-topic-tools                     [OK]
ros-melodic-turtlesim                       [OK]
ros-melodic-rosbag                          [FAIL]
ros-melodic-ros-tutorials                   [OK]
ros-melodic-diagnostic-analysis             [FAIL]
ros-melodic-rosmsg                          [FAIL]
ros-melodic-rostopic                        [FAIL]
ros-melodic-rosservice                      [FAIL]
ros-melodic-actionlib                       [FAIL]
ros-melodic-dynamic-reconfigure             [FAIL]
ros-melodic-actionlib-tutorials             [FAIL]
ros-melodic-nodelet-topic-tools             [FAIL]
ros-melodic-rosnode                         [FAIL]
ros-melodic-nodelet-core                    [FAIL]
ros-melodic-roswtf                          [FAIL]
ros-melodic-rqt-bag                         [FAIL]
ros-melodic-ros-comm                        [FAIL]
ros-melodic-rqt-graph                       [FAIL]
ros-melodic-ros-core                        [FAIL]
ros-melodic-rqt-dep                         [FAIL]
ros-melodic-ros-base                        [FAIL]
ros-melodic-rqt-logger-level                [FAIL]
ros-melodic-rqt-py-common                   [FAIL]
ros-melodic-rqt-robot-steering              [FAIL]
ros-melodic-rqt-console                     [FAIL]
ros-melodic-rqt-plot                        [FAIL]
ros-melodic-rqt-launch                      [FAIL]
ros-melodic-rqt-bag-plugins                 [FAIL]
ros-melodic-rqt-msg                         [FAIL]
ros-melodic-rqt-publisher                   [FAIL]
ros-melodic-rqt-action                      [FAIL]
ros-melodic-rqt-reconfigure                 [FAIL]
ros-melodic-rqt-robot-monitor               [FAIL]
ros-melodic-rqt-service-caller              [FAIL]
ros-melodic-rqt-srv                         [FAIL]
ros-melodic-rqt-topic                       [FAIL]
ros-melodic-smach-ros                       [FAIL]
ros-melodic-rqt-common-plugins              [FAIL]
ros-melodic-executive-smach                 [FAIL]
ros-melodic-rqt-moveit                      [FAIL]
ros-melodic-tf2-ros                         [FAIL]
ros-melodic-turtle-actionlib                [FAIL]
ros-melodic-rqt-tf-tree                     [FAIL]
ros-melodic-common-tutorials                [FAIL]
ros-melodic-tf                              [FAIL]
ros-melodic-tf2-geometry-msgs               [FAIL]
ros-melodic-diagnostic-common-diagnostics   [FAIL]
ros-melodic-interactive-markers             [FAIL]
ros-melodic-diagnostics                     [FAIL]
ros-melodic-interactive-marker-tutorials    [FAIL]
ros-melodic-laser-geometry                  [FAIL]
ros-melodic-rqt-nav-view                    [FAIL]
ros-melodic-rqt-pose-view                   [FAIL]
ros-melodic-rqt-robot-dashboard             [FAIL]
ros-melodic-tf2-kdl                         [FAIL]
ros-melodic-tf-conversions                  [FAIL]
ros-melodic-turtle-tf                       [FAIL]
ros-melodic-geometry                        [FAIL]
ros-melodic-turtle-tf2                      [FAIL]
ros-melodic-urdf                            [FAIL]
ros-melodic-geometry-tutorials              [FAIL]
ros-melodic-kdl-parser                      [FAIL]
ros-melodic-kdl-parser-py                   [FAIL]
ros-melodic-robot-state-publisher           [FAIL]
ros-melodic-rviz                            [FAIL]
ros-melodic-visualization-marker-tutorials  [OK]
ros-melodic-librviz-tutorial                [FAIL]
ros-melodic-rqt-rviz                        [FAIL]
ros-melodic-rviz-plugin-tutorials           [FAIL]
ros-melodic-rqt-robot-plugins               [FAIL]
ros-melodic-rviz-python-tutorial            [FAIL]
ros-melodic-viz                             [FAIL]
ros-melodic-visualization-tutorials         [FAIL]
ros-melodic-xacro                           [OK]
ros-melodic-robot                           [FAIL]
ros-melodic-urdf-tutorial                   [FAIL]
ros-melodic-desktop                         [FAIL]

prototype
        NINJA_STATUS='[%f/%t] ' ninja -nC /var/empty -f "$PWD"/build.ninja | \
            #<EMAIL_ADDRESS>valid characters for pkgname
            # alternative: [^\s]+ from rule `env -C ... > pkgbase.stamp`
            pcregrep -o1 -o3 '(\[\d+/\d+\] )(.+?)([\w@\.\-\+]+)(\.stamp)' | while read -r status pkg
        do
            if [[ -f $pkg.stamp ]]; then
                printf "%s\t${BOLD}${GREEN}[OK]${ALL_OFF}\n" "$pkg"
            else
                printf "%s\t${BOLD}${RED}[FAIL]${ALL_OFF}\n" "$pkg"
            fi
        done | column -t

Merged #934

Just tried it out. Very cool, thank you!

Although I almost missed that the counter in the final report is off-by-one.
[0/2]  masterpassword-cli  [FAIL]
[1/2]  mkv-extractor-qt    [FAIL]

Please file a separate issue for that and I'll take a look.


How can we get the RPC time

Hello, how can we get the rpc time when we run a service?

If you mean the time spent in the Thrift stack, you could integrate thrift with Opentracing framework.
Here is one example of Thrift-Java with Opentracing. https://github.com/opentracing-contrib/java-thrift

ok,Thank you!