ActiveRecord::StatementInvalid: PG::CharacterNotInRepertoire: ERROR:  invalid byte sequence for encoding "UTF8": 0x85
: SELECT  "articles".* FROM "articles" WHERE "articles"."slug" = $1  ORDER BY "articles"."id" ASC LIMIT 1

View details in Rollbar: https://rollbar.com/trystant/BOW/items/324/

PG::CharacterNotInRepertoire: ERROR:  invalid byte sequence for encoding "UTF8": 0x85

  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/connection_adapters/postgresql_adapter.rb", line 602, in exec_prepared
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/connection_adapters/postgresql_adapter.rb", line 602, in block in exec_cache
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/connection_adapters/abstract_adapter.rb", line 472, in block in log
  File "/app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.6.rc1/lib/active_support/notifications/instrumenter.rb", line 20, in instrument
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/connection_adapters/abstract_adapter.rb", line 466, in log
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/connection_adapters/postgresql_adapter.rb", line 601, in exec_cache
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/connection_adapters/postgresql_adapter.rb", line 585, in execute_and_clear
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/connection_adapters/postgresql/database_statements.rb", line 160, in exec_query
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/connection_adapters/abstract/database_statements.rb", line 356, in select
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/connection_adapters/abstract/database_statements.rb", line 32, in select_all
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/connection_adapters/abstract/query_cache.rb", line 68, in block in select_all
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/connection_adapters/abstract/query_cache.rb", line 83, in cache_sql
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/connection_adapters/abstract/query_cache.rb", line 68, in select_all
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/querying.rb", line 39, in find_by_sql
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/relation.rb", line 639, in exec_queries
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/relation.rb", line 515, in load
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/relation.rb", line 243, in to_a
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/relation/finder_methods.rb", line 500, in find_nth_with_limit
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/relation/finder_methods.rb", line 484, in find_nth
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/relation/finder_methods.rb", line 127, in first
  File "/app/vendor/bundle/ruby/2.2.0/gems/friendly_id-5.1.0/lib/friendly_id/finder_methods.rb", line 57, in first_by_friendly_id
  File "/app/vendor/bundle/ruby/2.2.0/gems/friendly_id-5.1.0/lib/friendly_id/finder_methods.rb", line 21, in find
  File "/app/app/controllers/articles_controller.rb", line 95, in find_article
  File "/app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.6.rc1/lib/active_support/callbacks.rb", line 432, in block in make_lambda
  File "/app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.6.rc1/lib/active_support/callbacks.rb", line 145, in call
  File "/app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.6.rc1/lib/active_support/callbacks.rb", line 145, in block in halting_and_conditional
  File "/app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.6.rc1/lib/active_support/callbacks.rb", line 504, in call
  File "/app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.6.rc1/lib/active_support/callbacks.rb", line 504, in block in call
  File "/app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.6.rc1/lib/active_support/callbacks.rb", line 504, in each
  File "/app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.6.rc1/lib/active_support/callbacks.rb", line 504, in call
  File "/app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.6.rc1/lib/active_support/callbacks.rb", line 92, in __run_callbacks__
  File "/app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.6.rc1/lib/active_support/callbacks.rb", line 778, in _run_process_action_callbacks
  File "/app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.6.rc1/lib/active_support/callbacks.rb", line 81, in run_callbacks
  File "/app/vendor/bundle/ruby/2.2.0/gems/actionpack-4.2.6.rc1/lib/abstract_controller/callbacks.rb", line 19, in process_action
  File "/app/vendor/bundle/ruby/2.2.0/gems/actionpack-4.2.6.rc1/lib/action_controller/metal/rescue.rb", line 29, in process_action
  File "/app/vendor/bundle/ruby/2.2.0/gems/actionpack-4.2.6.rc1/lib/action_controller/metal/instrumentation.rb", line 32, in block in process_action
  File "/app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.6.rc1/lib/active_support/notifications.rb", line 164, in block in instrument
  File "/app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.6.rc1/lib/active_support/notifications/instrumenter.rb", line 20, in instrument
  File "/app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.6.rc1/lib/active_support/notifications.rb", line 164, in instrument
  File "/app/vendor/bundle/ruby/2.2.0/gems/actionpack-4.2.6.rc1/lib/action_controller/metal/instrumentation.rb", line 30, in process_action
  File "/app/vendor/bundle/ruby/2.2.0/gems/actionpack-4.2.6.rc1/lib/action_controller/metal/params_wrapper.rb", line 250, in process_action
  File "/app/vendor/bundle/ruby/2.2.0/gems/searchkick-0.8.7/lib/searchkick/logging.rb", line 107, in process_action
  File "/app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6.rc1/lib/active_record/railties/controller_runtime.rb", line 18, in process_action
  File "/app/vendor/bundle/ruby/2.2.0/gems/actionpack-4.2.6.rc1/lib/abstract_controller/base.rb", line 137, in process
  File "/app/vendor/bundle/ruby/2.2.0/gems/actionview-4.2.6.rc1/lib/action_view/rendering.rb", line 30, in process
  File "/app/vendor/bundle/ruby/2.2.0/gems/actionpack-4.2.6.rc1/lib/action_controller/metal.rb", line 196, in dispatch
  File "/app/vendor/bundle/ruby/2.2.0/gems/actionpack-4.2.6.rc1/lib/action_controller/metal/rack_delegation.rb", line 13, in dispatch
  File "/app/vendor/bundle/ruby/2.2.0/gems/actionpack-4.2.6.rc1/lib/action_controller/metal.rb", line 237, in block in action
  File "/app/vendor/bundle/ruby/2.2.0/gems/actionpack-4.2.6.rc1/lib/action_dispatch/routing/route_set.rb", line 74, in call
  File "/app/vendor/bundle/ruby/2.2.0/gems/actionpack-4.2.6.rc1/lib/action_dispatch/routing/route_set.rb", line 74, in dispatch
  File "/app/vendor/bundle/ruby/2.2.0/gems/actionpack

This can be closed as well.


Add docs for multi-dc support

@ssk2 or @joel-hamill can I get some feedback on this new document?

I've created an internal JIRA (DOCS-118) for @mattpennathe3rd and @joel-hamill.

Updates incorporated

Thanks for the review @ssk2 and @joel-hamill.
Updates in place. I'll squash before merging them.

@BenWhitehead @joel-hamill Made my own pass through this and made a number of changes. Please let me know how this looks and if my method of proposing/committing these changes was improper.

@mattpennathe3rd perfectly acceptable method of reviewing :)

@mattpennathe3rd Thanks for the feedback.  I've made only a couple modifications to your proposal specifically to make sure that when we're talking about Cassandra on Mesos we use the full name so that people don't think it's about cassandra itself.

going to rebase then merge.  Thanks @ssk2 @joel-hamill @mattpennathe3rd


Unpin ViewComponent now that the bug introduced in 2.51.0 has been fixed

Why was this change made? 🤔
No need to pin the dependency at patch-level now that the bug is fixed.
How was this change tested? 🤨
CI

Closes #2198


feat: add Order and Size methods to the graph

closes #74

@hmdsefi I hope I have not missed anything this PR.

it is available in v0.4.2


Training on Custom Dataset

How to you train a model on a custom dataset which only consists of images (and no labels)?

For training on custom datasets - please see this response to a similar question.
As we use the labels only for evaluations - you can create mock (fake) random labels and ignore the evaluation results. For faster training, you could also disable the evaluation functions.


cri: support io by streaming API

currently, CRI plugin only support container io by named pipes. but in some scenario named pipes may not work for some kind of sandboxes, for example, for VM based sandboxes, It is not easy to hotplug the named pipe into the vm. So for those kind of runtimes, they have to transfer io in some other way.
But if containerd support io streams by the streaming api, the shim process or the sandbox can serve the Streaming API of containerd, and containerd can create streams for the container stdios.
needs rebase after #9736

@abel-von please rebase thanks

@abel-von please rebase thanks

done


Multi svg in one png

Hello,
Is there any way to handle many svg and get them into one PNG image.
Thanks.

There may be a couple ways to go about this. You might be able to refer to other SVGs on a page using the SVG  tag. I'm not sure, though, if this library will capture them properly. Alternatively, you could write several images to a canvas at different positions, then use this library's download function to download the data URI of the combined image.


Remove some unneeded unspace

(I hate unspace)

Thanks a lot!

mmm... it may not have been a good idea to merge this so quickly :) . I'm checking that I didn't break anything now...

Sorry, I jumped the gun :)
It does seem this line now breaks the build. I think it's the same issue as when a hyper op is used with a method chain on multiple line you get errors too...

Hm... I reverted that part, but it's still failing. no idea why


docs: Fix naming consistency issues in README

The text mostly seemed to hard-wrap around 80ish columns, so I tried to maintain that. As such, GitHub's prose diff feature may come in handy.
There were a few things that slowed my comprehension when finding this project:

Numerous instances of nerves_wpa_supplicant in the README were actually referring to the wpa_supplicant daemon. Seems like a search-and-replace oversight. These made an important distinction harder to understand.

"WPA supplicant" is a pretty esoteric phrase. In this change I've tried to state what the package does foremost, in terms of value to the user. Involvement of the supplicant is the secondary how.
On first reading I wanted a definition of this term near the start. The link to the wpa_supplicant homepage was given much later, and the opening text of that page is acronym overload that still doesn't define the general term. Wikipedia is concisely helpful in this case, I think.

There were a couple of small naming changes missed in the code samples. Minor, but distracting and fixable.

While we're at it, I noticed an ASCII table in the module docs that renders as a mess on HexDocs. I'm not sure if the Markdown parser supports any of the table extension syntaxes, but at the least making it preformatted should make it readable.

Huge thanks on taking the time to submit this back! It looks good and I like it based on a brief skim. Let me review more thoroughly and I'll merge.

Copy/paste and a rush to commit were certainly not friends to me. Thank you for fixing!

p.s. I updated the docs on hex.pm as well.

Huge thanks on taking the time to submit this back!

Happy to help, I'm having fun with the projects so far!


Update terminology for defs

Defining a single Arg is an arg_def. In the context of what the operation wants it's a sig_def.
Could drop the def and go with arg and signature?

Done in #55


Create Network Policies/Ingress Examples for OSM

https://release-v0-11.docs.openservicemesh.io/docs/demos/ingress_contour/
kubectl annotate service httpbin -n httpbin projectcontour.io/upstream-protocol.tls='14001' --overwrite

Need method to patch OSM Contour configuration to use Azure internal load balancer
Inject into Service annotation:

service.beta.kubernetes.io/azure-load-balancer-internal: "true"

Closed for HTTP


What is the "weight" attribute in the pb.txt input file?

As stated in the title, I am not sure what is the weight attribute. I believe it is only mentioned in the ariane test case. Is it the edge weight between groups or is it something else?

As a quick follow-up, this has been addressed in the new documentation:
https://github.com/google-research/circuit_training/blob/main/docs/NETLIST_FORMAT.md
Thanks a lot for the info!


creating grafana dashboard fails

Hi!
first of all: great tool!
Unfortunately it stops when it comes to creating the grafana dashboard:
[...]
Dashboard title [Munin Dashboard]:
Number of graphs per row [2]:
Show min/max/current in legend [y]/n:
Progress: [###########                                       ] 22%✗ Error: invalid literal for int() with base 10: '58982.4'

I'm not that into python to figure out what's wrong but maybe you can help me with that?
Cheers
Fiete
Small update:
After running that again, the error changed to:
Progress: [######                                            ] 12%✗ Error: threshold2

Hi,
I have the same issue.


[Discussion] Mechanism for piping/chaining operation results.

The execution of one operation sometimes require the result from another operation. For example,  an operation that uploads apns token to a server requires the acquisition of the token by another operation. An operation that saves objects to core data may require the result from a networking operation followed by a parsing operation. The common pattern seen in these scenarios is that data is created by an operation/operations, and goes through a pipe of processing operations in order. Now, thankfully, this framework already provides an elegant way to express the ordering of operations. I think it's worth investigating how operations can pipe their successful results in a generic and compositable fashion.

This is a really interesting idea - I like it, formalized dependency injection.
Personally, I have been using a GroupOperation with a single child to start the first operation, and then add the 2nd after taking the results from the first. This approach has the advantage that it's easier to re-use & compose, but I does also add a bit more cognitive load (and another queue). See ReverseGeocodeUserLocationOperation for an example of this.
The nice idea with this approach is that it could reduce quite a bit of boiler plate from these common situations which perhaps don't warrant re-use. The danger would be that it's probably easier to create un-ruly FRP style chains of work (which I think can become hard to maintain).
So, here is how I'd envision this working from the framework consumer point of view...
let download = DownloadResource()
let use = UseResource()
use. injectResultFromDependency(download) { (operation, dependency, errors) in
    operation.resource = dependency.resource
}
queue.addOperations(download, use)

This would work by conforming UseResource to a protocol, and then providing injectResultFromDependency  in a default extension.
We can go further for the really common case of a single result being piped by making DownloadResource conform to a generic protocol, so that the setter block in the injectResultFromDependency is done automatically.
protocol InjectedOperationType { }

extension InjectedOperationType {
    func injectResultFromDependency<T: NSOperation>(dependency: T, setterBlock: (operation: Self, dependency: T, errors: [ErrorType]) -> Void) {
        // etc
    }
}

protocol ResultOperationType {
    typealias Result
    var result: Result? { get }
}

protocol AutomaticInjectedOperationType: InjectedOperationType {
    typealias Requirement
    var requirement: Requirement? { get set }
}

extension AutomaticInjectedOperationType {
    func injectResultFromDependency<T: NSOperation where T: ResultOperationType, T.Result == Requirement>(dependency: T) throws {
        // etc
    }
}

To actually make this work, the framework would just call addDependency and add an OperationObserver.
For error handling, we can return the errors the dependency finished with to the setter block. For the default / automatic setter - this would have to be interpreted as throwing an error I think.
For cancellation - standard behavior would kick in I think?
Obviously would have to come up with consistent names among "pipe", "chain" "inject"?
Anyone got any other thoughts? /cc @difujia
I've got time today - can put together a PR for further discussion.

That looks very interesting. So far I've been trying to minimize any dependencies, and when unavoidable, have created various *Token protocols and conforming classes (classes because references are the only way this works) so that I can share a token between all of the operations, with each operation added their values when they complete. A more formalized paradigm would be nice. This looks pretty good but I'd have to try it out to see how well it works for me.

@jshier :+1: will put together a feature branch for this.
I think, in general dependency injection is a good thing that should be encouraged, There is a bit of a barrier to doing this correctly with GroupOperation so this is a nice formalized way for the framework to provide a lightweight methodology for injecting results into operations. So, it's worthy of adding I think.

Made a start on an implementation for this, can we move discussion of this over to #137. Thanks!

Implemented & merged.


Observable emitted from RxBleConnection.setupNotification()/RxBleConnection.setupIndication() does not terminate

Summary
Currently when the user will unsubscribe from .setupNotification()/.setupIndication() the notification/indication is teardown but the (possibly) emitted Observable<byte[]> does not complete.
Similarly when the RxBleConnection terminates the emitted Observable<byte[]> does not throw an error.
Library version
1.3.1
Steps to reproduce actual result
1. Connect to a device
2. Setup notification (or indication)
3. Wait for it being setup
4. Get emitted Observable<byte[]>
5. Un-subscribe from the .setup*()
6. Observe that emitted Observable<byte[]> has not completed
Minimum code snippet reproducing the issue
rxBleDevice.establishConnection(false)
                .flatMap(connection -> connection.setupNotification(characteristicUuid)
                        .takeUntil(Observable.timer(15, TimeUnit.SECONDS))
                        .flatMap(observable -> observable)
                        .doOnCompleted(() -> Log.d("SHOULD", "COMPLETE"))
                )
                .subscribe();

Actual result
SHOULD COMPLETE is not logged after 15 seconds from the notification setup.
Expected result
SHOULD COMPLETE should be logged after 15 seconds from the notification setup.

Haven't thought this through, but will this fix require any changes to ConnectionSharingAdapter?

@RobLewis No.


update 3box.io/careers

how's this coming @dazuck ?

Aiming to do over the weekend. Last minute trip to SF made this fall. Might
make more sense to plan it for next sprint instead at this point.
On Thu, Oct 31, 2019 at 11:08 AM Kenzo Nakamura<EMAIL_ADDRESS>wrote:

how's this coming @dazuck https://github.com/dazuck ?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/3box/3box-dapp/issues/498?email_source=notifications&email_token=ACDUWMCVNUNNXE5KX6ROVVLQRMNLJA5CNFSM4JDS2QG2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOECYXOCY#issuecomment-548501259,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ACDUWMCAXFTWVGRXSEISV3TQRMNLJANCNFSM4JDS2QGQ
.

--
Co-founder, 3Box http://3box.io

Only adding the protocol eng position for now.
Still need to revamp the About 3Box section which requires new styling and isn't as immediately pressing as the new JD

[ ] update About 3Box section


InvokeAsync getting cancelled after roughly 100 seconds

await nodeServices.InvokeAsync<string> is getting canclled after 100 seconds. getting System.Threading.Tasks.TaskCanceledException: 'A task was canceled.'
StackTrace
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Net.Http.HttpClient.d__58.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.NodeServices.HostingModels.HttpNodeInstance.d__71.MoveNext() --- End of stack trace from previous location where exception was thrown ---    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)    at Microsoft.AspNetCore.NodeServices.HostingModels.OutOfProcessNodeInstance.<InvokeExportAsync>d__131.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.NodeServices.NodeServicesImpl.d__101.MoveNext() --- End of stack trace from previous location where exception was thrown ---    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)    at System.Runtime.CompilerServices.TaskAwaiter1.GetResult()
at AIRWAYS.Renderer.Processor.Utility.NodeUtility.d__0.MoveNext() in

This is running on a background this which is queued with HostingEnvironment.QueueBackgroundWorkItem(x=>method());

Invoked node service however continues to run in the background even after this exception

Update: options.useSocketHosting() works for me...but that's package hasn't made it out of beta. Are there any plans to release that. It would be awesome if you can publish it


RFC: Change behavior of how vertex shader layers are modifying positions

It's great that Lamina layers can also provide vertex shaders that modify the vertex positions, but unless I've severely misunderstood something (and please tell me if I did), the way that vertex shaders are currently set up makes it kinda iffy to have multiple vertex-shading layers stacked in sequence.
As far as I understand, from the perspective of a layer's vertex shader, the following happens:

A position variable is provided, containing the original vertex position from the geometry buffer.
The vertex shader is expected to implement a void main that returns a new, modified position.
If you have multiple Lamina layers that do this, each new layer will start with position being set to the original vertex position, essentially overwriting what the layers before already did to mutate it.

This makes it very hard to implement stacks of animation shaders (where one, for example, would animate the vertices based on velocity applied over time, and another apply a rotation) without completely bypassing this setup and writing all changes into a shared global variable, only to then have the final layer write into the actual position.
I don't know if this has implications (beyond potentially breaking existing code), so consider this an RFC: I propose that the system is changed to expect layer vertex shaders to mutate an existing position variable, eg.:
// wobble position vertexShader
void main() {
  position.x += sin(u_time);
}

// wobble scale vertexShader
void main() {
  position *= 2.0 + cos(u_time);
}

// etc.

Blend modes and ratios do not make sense here, so plain old mutation like this should be fine, but I'd be happy to hear what kind of stuff this will break.

It is a good idea but goes againt the idea that each layer is an isolated function. It wouldn't break much in the core lib but would in if users defined custom layers. I like to keep breaking changes to minor releases.
I will add this to 1.2.0. Been really procrastinating it for some reason, mostly because i cant get my brain into coding mode on weekends after insanely busy weeks. But it will come out soon

No need to immediately schedule this for addition -- especially if you're worried about this going against the library's design principles. Maybe we can iterate on the idea and find something better? Maybe there is a way to set up a "vertex modification layer" system similar to the fragment shading layers, where every vertex shader is passed the current position as its input and is then returning the modified position.


ES/Redis broker - follow-up customer communications

In support of the deprecation of the legacy Elasticsearch and Redis broker deprecation, we should send a follow-up communication to customers who are still using the legacy brokers and encourage them to migrate to the new brokers.
AC

[x] Identify customers still using legacy brokers
[x] Decide if we want to offer support to customers who are migrating
[x] Draft communication
[ ] Send communication

@ChrisMcGowan draft communication - ready for your review.

Communications will be sent to customers on 12/7/2020.

Communications tracker

Writing a communication response for when people email in asking for instructions on migrating. Will post here when it is drafted and ready for review.

Whew! Took a while to craft a good response, but finally got it sorted with a little help from the team! woot! Feel free to check it out! I added it to the doc with the initial communication on it. (Link is above and here)


v0.3.4 On build: Cannot read properties of undefined (reading 'undefined')

this concerns v0.3.4 because my nx is stuck at 13.5.1 (cant upgrade, higher ups say)
this is caused when nx's calculateProjectDependencies gets a projGraph.nodes[undefined]. now i know this isnt nx-firebases' problem, i can hack the library in node_modules, but of course i cant do that when we're talking ci/cd. so my question is from which specific file do i lookup the entries read by createProjectGraphAsync()? i mean, i've looked into package, tsconfig, angular, nx, and even the project.json but i cant seem to find a pattern. help appreciated. thank you!

Hi @capancheta I seem to remember get this issue in older versions of Nx.
In case it's helpful, I've had to patch Nx myself ( a mod to Nx rollup plugin) for CI environments and did this by using the postinstall npm script hook in package.json.
This way, everytime we run npm install or npm ci the patch is applied to node_modules.
something like:
  "scripts": {
    "ng": "nx",
    "postinstall": "node ./decorate-angular-cli.js && ngcc --properties es2020 browser module main && node ./tools/patch-rollup/index.cjs",
    "nx": "nx",
   ...

and then in ./tools/patch-rollup/index.cjs:
// see https://github.com/nrwl/nx/issues/10395
const fs = require('fs')

function patchNxPlugin() {
  const target =<EMAIL_ADDRESS>  const data = fs.readFileSync(target, 'utf-8')

  const patchMatch = 'const hasEsmFormat'
  const patchReplace = `return;${patchMatch}`
  if (!data.includes(patchReplace)) {
    const output = data.replace(patchMatch, patchReplace)
    fs.writeFileSync(target, output, 'utf-8')
    console.log(`PATCHED @nx/rollup updatePackageJson`)
  } else {
    console.log(`ALREADY PATCHED @nx/rollup updatePackageJson`)
  }
}

patchNxPlugin()

obviously tweak the patch logic as you need.

Another way of patching is described here: https://dev.to/zhnedyalkow/the-easiest-way-to-patch-your-npm-package-4ece

Lastly, would recommend Nx 16 upgrade if you can convince your higher ups, its the least buggy release they've had in a while.

Thank you @simondotm, this reminds me of when i monkeypatched a component in a django application because the concerned pypi package didnt play nice. Very helpul!
And thanks for the tip on the nx version. as soon as our recent golive is deemed stable, i'm raising this.


change workflow to use new dev env

What changes did you make? (Give an overview)
Is there anything you'd like reviewers to focus on?
How to test

This changes for new Dev env.
Workflow will change tag of image to new tag from pushed image   in argocd application yaml file


Differences between these contract files?

Is there some documentation that explains the difference between these contract files? Is there a master file that contains all the enhancements?

i think it's full_commission
not sure, but it has reveal+whitelist+commission, and more lines than any other


Use make_zero and Ref inside gradient

On Enzyme v0.11.20:
julia> using Enzyme, SparseArrays, StaticArrays

julia> gradient(Reverse, prod, [3.0 4.0])  # ok!
1×2 Matrix{Float64}:
 4.0  3.0

julia> gradient(Reverse, prod, @SArray [3.0 4.0])
1×2 SMatrix{1, 2, Float64, 2} with indices SOneTo(1)×SOneTo(2):
 0.0  0.0

julia> gradient(Reverse, sum, sparse([5.0 0.0 6.0]))
1×3 SparseMatrixCSC{Float64, Int64} with 0 stored entries:
  ⋅    ⋅    ⋅

julia> gradient(Reverse, abs2, 5.0)
0.0

With this PR:
julia> gradient(Reverse, prod, @SArray [3.0 4.0])
1×2 SMatrix{1, 2, Float64, 2} with indices SOneTo(1)×SOneTo(2):
 4.0  3.0

julia> gradient(Reverse, sum, sparse([5.0 0.0 6.0]))
1×3 SparseMatrixCSC{Float64, Int64} with 2 stored entries:
 1.0   ⋅   1.0

julia> gradient(Reverse, abs2, 5.0)
10.0

and also:
julia> xy = (x = [1.0, 2.0], y = [3.0, 4.0]);

julia> gradient(Reverse, z -> sum(z.x .* z.y), xy)
(x = [3.0, 4.0], y = [1.0, 2.0])

julia> xp1 = (x = [1.0, 2.0], p = 3);

julia> gradient(Reverse, z -> sum(z.x .^ z.p), xp1)
(x = [3.0, 12.0], p = 3)

julia> xp2 = (x = [1.0, 2.0], p = 3.0);

julia> gradient(Reverse, z -> sum(z.x .^ z.p), xp2)
ERROR: AssertionError: @NamedTuple{x::Vector{Float64}, p::Float64} has mixed internal activity types. See https://enzyme.mit.edu/julia/dev/#Mixed-Activity for more information

Edit: latest version changes the last example to:
julia> gradient(Reverse, z -> sum(z.x .^ z.p), xp2)
(x = [3.0, 12.0], p = 5.545177444479562)

julia> Zygote.gradient(z -> sum(z.x .^ z.p), xp2)[1]
(x = [3.0, 12.0], p = 5.545177444479562)

Not sure the test is in the right place.
Should probably add the sparse and SVector cases as tests too, will try to figure out where.

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 93.43%. Comparing base (778deec) to head (584dcc1).

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@             Coverage Diff             @@
##             main    #1356       +/-   ##
===========================================
+ Coverage   75.39%   93.43%   +18.04%
===========================================
  Files          35        7       -28
  Lines       10683      259    -10424
===========================================
- Hits         8054      242     -7812
+ Misses       2629       17     -2612

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

Can I allow myself a gentle bump for this PR, perhaps followed by a new release? It would be useful for the DifferentiationInterface.jl test suite with non-array objects

Re tagging a release, I have a draft of what I suggest here: https://github.com/EnzymeAD/Enzyme.jl/issues/1334#issuecomment-2016573247
Since at present gradient(Reverse, f, x) is an error for complicated structs, perhaps any changes to what types it returns should be considered before tagging.


[T3A2][T09-A2]My Duy Hoang Long

@myduyhoanglong Accepting this PR without a review because another of your PRs for this tutorial was reviewed in detail.


Reduce string Allocations on the happy path

Currently on the happy path all messages in the AssertionResult are generated and passed directly in the method. Especially for more complex messages like the string difference can be quite expensive and should only be calculated, when the assertion fails.
This pull request changes the FailWith overload to accept a Func<string> instead of directly a string and only lazy evaluates it, when needed.

Out of curiousity how much does a new Func<> allocate?

Out of curiousity how much does a new Func<> allocate?

24b per instance, IIRC

Out of curiousity how much does a new Func<> allocate?

24b per instance, IIRC

Would that make this not really worthwhile then?

Out of curiousity how much does a new Func<> allocate?

24b per instance, IIRC

Where do you get this number? As far as I am aware, a Func is a delegate and would only allocate, if it needs to capture variables from an outside scope.

Out of curiousity how much does a new Func<> allocate?

24b per instance, IIRC

Where do you get this number? As far as I am aware, a Func is a delegate and would only allocate, if it needs to capture variables from an outside scope.

24b is the minimum size of any CLR instance on the heap, and Func<> is a CLR instance. It may be a special instance of a delegate, but it is an instance nonetheless. The minimum 24b includes: pointer to the type information; pointer to the method table; and minimum of 8b of data.
In further consideration, I think a Func<> is actually 32b, since it must contain space for the this pointer that the method is based on, as well as the method pointer itself. This is true whether the delegate points to a static method or an instance method, since the consumer of the Func<> (or any delegate) cannot know a-priori whether the delegate refers to an instance or not.
You referenced closures. In the case of a closure, there will actually be two allocations; one for the delegate itself and one for the closure class. These are separate allocations, and the delegate will contain the closure class as the this reference in it's data.
Now all of this may be elided automatically in T1 JIT, based on information available, but this is not a guarantee, and should not be relied upon (except in circumstances such as hot-paths where the effort may be justified to prove that a particular arrangement will consistently be JIT'd in a certain way).

Quickly reading the PR, I would recommend instead using interpolated strings. You can review ISLE for examples of how to set up interpolated string handlers that will not allocate on one path, but will on another path.
You can set up the method to receive an interpolated string, decide on the happy path to ignore the handler, and no allocations will be done.
However, I would question whether this effort is actually necessary. Assertions are generally only used in unit tests, and not used in deployed applications, where allocation concerns are necessary. It is generally of no concern (at least to me) how much a unit test allocates.

Yeah I think keeping the code simpler outweighs any allocation benefits. If the garbage collector needs to kick in it just means your tests might take a few seconds longer which I don't think is a massive deal

The motivation stems mainly from expectation message like the following:
$"found message {Format(actualValue.Message).TruncateWithEllipsis(100)} which {new StringDifference(actualValue.Message, expectedValue)}");

Creating this string is not trivial and doing this for every (successful) test in every test run, will slow down large test suites. I think it is important to consider test execution speed...

I created a benchmark to compare TUnit, fluentassertions and my own project for the simple assertion, that "foo" is equal to "foo":
	private readonly string _stringExpectation = "foo";
	private readonly string _stringSubject = "foo";

	[Benchmark]
	public AndConstraint<StringAssertions> String_FluentAssertions()
		=> _stringSubject.Should().Be(_stringExpectation);

	[Benchmark]
	public async Task<string?> String_TestablyExpectations()
		=> await Expect.That(_stringSubject).Should().Be(_stringExpectation);

	[Benchmark]
	public async Task<string?> String_TUnit()
		=> await Assert.That(_stringSubject).IsEqualTo(_stringExpectation);

Here is the result:

Method
Mean
Error
StdDev
Gen0
Allocated

String_FluentAssertions
389.6 ns
2.07 ns
1.94 ns
0.0215
1832 B

String_TestablyExpectations
435.3 ns
0.86 ns
0.76 ns
0.0134
1144 B

String_TUnit
1,418.9 ns
8.89 ns
7.88 ns
0.0381
3248 B

I think a lot of it stems from the allocation of the string difference in the happy path...

@vbreuss Can we see the benchmark with your change also?

I could only run it locally:
This branch:

Method
Mean
Error
StdDev
Gen0
Gen1
Allocated

String_FluentAssertions
337.9 ns
33.48 ns
98.71 ns
0.2189
-
1.79 KB

String_TestablyExpectations
382.9 ns
15.81 ns
46.61 ns
0.1364
-
1.12 KB

String_TUnit
507.9 ns
9.48 ns
9.74 ns
0.2975
0.0010
2.44 KB

Current main branch:

Method
Mean
Error
StdDev
Gen0
Allocated

String_FluentAssertions
343.5 ns
12.03 ns
33.14 ns
0.2189
1.79 KB

String_TestablyExpectations
294.7 ns
5.95 ns
12.28 ns
0.1364
1.12 KB

String_TUnit
1,035.3 ns
15.10 ns
12.61 ns
0.3891
3.19 KB

Halving the time is pretty decent actually. Do you wanna rebase this?

I will reiterate:

Quickly reading the PR, I would recommend instead using interpolated strings. You can review ISLE for examples of how to set up interpolated string handlers that will not allocate on one path, but will on another path.

I'd much prefer to see this (with even fewer allocations) than the Func<> version

I will reiterate:

Quickly reading the PR, I would recommend instead using interpolated strings. You can review ISLE for examples of how to set up interpolated string handlers that will not allocate on one path, but will on another path.

I'd much prefer to see this (with even fewer allocations) than the Func<> version

Sorry I missed that. I'll have a read through it. I take it it's providing constants and arguments like ILogger? Which then will do a string.format or whatever when needed?

it's based on this: https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/tutorials/interpolated-string-handler
Basically, you have a chance to not call all of the .AppendXxx() and .ToString() unless you actually need to.

I am not sure, how this would work in this case. The example you provided is about logging, where I provide existing variables and want to avoid creating a formatted string.
Here, we don't even want the variables to be created. In my example above:
$"found message {Format(actualValue.Message).TruncateWithEllipsis(100)} which {new StringDifference(actualValue.Message, expectedValue)}");

I would not want to create a StringDifference class or call Format(actualValue.Message).TruncateWithEllipsis(100), as both are "expensive" operations. As far as I understood the example in the link you provided, using an interpolated string handler would only avoid creating the combined string with the provided variables...

it's based on this: https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/tutorials/interpolated-string-handler
Basically, you have a chance to not call all of the .AppendXxx() and .ToString() unless you actually need to.

I am not sure, how this would work in this case. The example you provided is about logging, where I provide existing variables and want to avoid creating a formatted string. Here, we don't even want the variables to be created. In my example above:
$"found message {Format(actualValue.Message).TruncateWithEllipsis(100)} which {new StringDifference(actualValue.Message, expectedValue)}");

I would not want to create a StringDifference class or call Format(actualValue.Message).TruncateWithEllipsis(100), as both are "expensive" operations. As far as I understood the example in the link you provided, using an interpolated string handler would only avoid creating the combined string with the provided variables...

From the doc I linked:

You can make one final update to the handler's constructor that improves efficiency. The handler can add a final out bool parameter. Setting that parameter to false indicates that the handler shouldn't be called at all to process the interpolated string expression:

From there, you can see the following changes to the compiled IL.
var logger = new NullLogger<int>();

logger.LogInformation($"Test{GetStringValue()}");

string GetStringValue()
{
	Thread.Sleep(1_000);
	return "Test";
}

turns into:
  NullLogger<int> logger = new NullLogger<int> ();
   ILogger logger2 = logger;
   ILogger logger3 = logger2;
   bool isEnabled;
   InformationLogInterpolatedStringHandler handler = new InformationLogInterpolatedStringHandler (4, 1, logger2, out isEnabled);
   if (isEnabled)
   {
        handler.AppendLiteral ("Test");
        handler.AppendFormatted (<Main>g__GetStringValue|4_0 (), 0, null, "GetStringValue()");
   }
   Isle.Extensions.Logging.LoggerExtensions.LogInformation (logger3, ref handler);

In the case of TUnit, you would similarly return an out isEnabled that determines whether to build the string. Basically the assertion comes first, and returns whether passed or failed via the out, which is used to determine whether to attempt to build the string, which is done in a separate method entirely.

I would not want to create a StringDifference class or call Format(actualValue.Message).TruncateWithEllipsis(100), as both are "expensive" operations.

Looking at the MS article, you add an Append<T> to your interpolation handler. I guess the solution to avoid allocating would be to make your types structs so they're not allocating. Make sure the constructors only set fields and don't do any of the expensive work. And then the expensive work can be done in the .ToString().
Then since that never gets called in a happy path, nothing is allocated?
@viceroypenguin you seem more clued up on this than me, but is that sensible?

Ah I see! So it all compiles down to be inside an if statement which won't be entered on happy paths. This is clever stuff, thanks for explaining.
Yeah this definitely sounds like the right approach if we want to speed up our assertions and reduce allocations.
@vbreuss sound like something you wanna take on? If not happy to give it a go myself.

Quote reply

@thomhurst : I am really intrigued by this and would like to give it a go next weekend, please leave this with me.
I created #1186 for this.
Could we still close this PR, as it is quite an improvement?
Then I could more easily create a benchmark to compare this version with the version with interpolated string handlers, to verify, if and by how much this would speedup the process.


Support custom venv locations for uv sync

uv pip install supports the VIRTUAL_ENV environment variable, allowing package installation into venvs not located in the same directory as the project. uv sync would also benefit from being able to install packages into external venvs (perhaps as a flag?)
Since uv sync also creates venvs if they don't exist, it should do so in the custom location.

Related https://github.com/astral-sh/rye/issues/1211

Related astral-sh/rye#1211

÷1 and thanks for linking the related rye enhancement

@charliermarsh I don't think this should be in scope for the first round of stabilizations.

Here's use case I have where it would be useful. I was trying to migrate https://github.com/fastapi/full-stack-fastapi-template/ to uv.
I mount the local development directory inside the Docker container as a volume: https://github.com/fastapi/full-stack-fastapi-template/blob/master/docker-compose.override.yml#L58
This allows fast iteration on the code, as it only takes a reload of the server instead of a re-build of the Docker image to try a change.
If I have a local .venv directory, it will end up mounted as well. But inside the container, the file links are not resolved.
I tried using UV_SYSTEM_PYTHON and VIRTUAL_ENV to move it to some root directory (so that it wouldn't be mounted), but uv would still try to use the venv in .venv. And if I remove it from inside the container, the in-container uv would create a new venv in .venv that would also show up in the local (mounted directory).

Somewhat related, I would like to be able to use Python directly, not only through uv run. For example, in that project, I currently use a base Docker image that comes with its own entrypoint and command. But those wouldn't be able to run the programs without activating the uv venv in some way (or using the system Python).

Makes a ton of sense, thanks @tiangolo. I think this is pretty high-priority now that the release is out.

Somewhat related, I would like to be able to use Python directly, not only through uv run.

Here, you're referring to the installed Python, like outside of the virtualenv, is that right? (Since you can always source .venv/bin/activate without going through uv run.)

Makes a ton of sense, thanks @tiangolo. I think this is pretty high-priority now that the release is out.

:rocket: :tada:

Here, you're referring to the installed Python, like outside of the virtualenv, is that right? (Since you can always source .venv/bin/activate without going through uv run.)

Yep, this part was a misunderstanding and mistake from my side. :sweat_smile:
I was misinterpreting the docs. And then I was trying something that wouldn't work.
But this worked:
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.10
# Install uv
COPY --from=ghcr.io/astral-sh/uv:0.3.0 /uv /bin/uv

WORKDIR /app/

ENV VIRTUAL_ENV=/app/.venv
# Place executables in the environment at the front of the path
ENV PATH="/app/.venv/bin:$PATH"

# Maybe copy lock file in case it doesn't exist in the repo
COPY ./pyproject.toml ./uv.lock* /app/

RUN uv sync

RUN . $VIRTUAL_ENV/bin/activate

Note: it seems the build steps with RUN are run through sh, not bash, so the source command is not available, only the . syntax (. .venv/bin/activate).

full Dockerfile
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.10
# Install uv
COPY --from=ghcr.io/astral-sh/uv:0.3.0 /uv /bin/uv

WORKDIR /app/

ENV VIRTUAL_ENV=/app/.venv
# Place executables in the environment at the front of the path
ENV PATH="/app/.venv/bin:$PATH"

# Maybe copy lock file in case it doesn't exist in the repo
COPY ./pyproject.toml ./uv.lock* /app/

# Allow installing dev dependencies to run tests
ARG INSTALL_DEV=false

RUN bash -c "if [ $INSTALL_DEV == 'true' ] ; then uv sync ; else uv sync --no-dev ; fi"

RUN . $VIRTUAL_ENV/bin/activate

ENV PYTHONPATH=/app

COPY ./scripts/ /app/

COPY ./alembic.ini /app/

COPY ./prestart.sh /app/

COPY ./tests-start.sh /app/

COPY ./app /app/app

To add to this. Being able to configure the .venv location will also help out when using docker bind mounts during the build phase. https://docs.docker.com/build/building/best-practices/#add-or-copy. Currently this is impossible in uv since the bind mount is read only and uv will try and write to the mount and error out due to attempting to write to the mount.
eg
FROM python:3.12

COPY --from=ghcr.io/astral-sh/uv:0.3.0 /uv /usr/local/bin/uv

# Assuming a python project in the directory `project_name` with a `pyproject.toml` file
ENV UV_SYSTEM_PYTHON=true VIRTUAL_ENV=/opt/.venv
RUN --mount=type=bind,source=project_name,target=/project_name \
  uv sync

Which will result in the following error
error: failed to create directory `/project_name/.venv`
Caused by: Read-only file system (os error 30)

@tiangolo just a heads up that providing a python shim is tracked in https://github.com/astral-sh/uv/issues/6265
Note we also do cover some of this in our Docker integration guide but clearly there's room for improvement in the Docker integration story.

Thanks @zanieb! I think what I needed would be covered in some way by activating the environment. I would like to be able to UV_SYSTEM_PYTHON=true, but at least putting the virtual environment in another location would work.

I personally actually don't like shims, I can't use which python with shims, that's the main reason I ended up not using other tools that used/needed shims. :sweat_smile:

About Docker, yep! Actually great docs! That's what I was basing my work on. Maybe the detail of RUN . $VIRTUAL_ENV/bin/activate could be added, don't know. :thinking:
But anyway, great job on the docs already. :clap:

Related, re sync in dockerfile: https://github.com/astral-sh/uv/issues/4028#issuecomment-2288187425

Makes a ton of sense, thanks @tiangolo. I think this is pretty high-priority now that the release is out.

🚀 🎉

Here, you're referring to the installed Python, like outside of the virtualenv, is that right? (Since you can always source .venv/bin/activate without going through uv run.)

Yep, this part was a misunderstanding and mistake from my side. 😅
I was misinterpreting the docs. And then I was trying something that wouldn't work.
But this worked:
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.10
# Install uv
COPY --from=ghcr.io/astral-sh/uv:0.3.0 /uv /bin/uv

WORKDIR /app/

ENV VIRTUAL_ENV=/app/.venv
# Place executables in the environment at the front of the path
ENV PATH="/app/.venv/bin:$PATH"

# Maybe copy lock file in case it doesn't exist in the repo
COPY ./pyproject.toml ./uv.lock* /app/

RUN uv sync

RUN . $VIRTUAL_ENV/bin/activate

Note: it seems the build steps with RUN are run through sh, not bash, so the source command is not available, only the . syntax (. .venv/bin/activate).
full Dockerfile

@tiangolo am actually having a similar issue except we install to the system python in the Dockerfile -  so I have maade a similar request to allow disabling force install into virtual env..  Here is link
However doing RUN . $VIRTUAL_ENV/bin/activate doesn't seem to help in my case
Happy it is working for you!
Also love the project team!

@adiberk — yeah that won't work. See our documentation for a recommendation on how to activate the environment properly.

I figured it out
If I do everything inside a different workdir like /opt/
And activate the env from there as well as set the python path to there, it works exactly as it should.
I assume my issue is that the virtual env is getting messed up by the way we mount our volume as well as copy our folders in the Dockerfile (one or the other)

Does adding the .venv to your project's .dockerignore fix that too?

Here is my solution for docker file
ENV UV_NO_CACHE=1
ENV UV_SYSTEM_PYTHON=true
ENV UV_PYTHON=/usr/local/bin/python
RUN uv pip compile pyproject.toml -o requirements.txt && uv pip sync --system requirements.txt

Does adding the .venv to your project's .dockerignore fix that too?

It didn’t in my case.

Similar to https://github.com/astral-sh/uv/issues/1495#issuecomment-1950442191 , you can symlink to solve this.
uv venv /app/.venv
ln -sf /app/.venv .venv
uv sync

Just to chime in with our use case: currently, we use pip-tools in our container images, where we have VIRTUAL_ENV=/opt/venv and PATH=/opt/venv/bin:$PATH. We have an intricate multi-stage Dockerfile that populates /opt/venv in an early build stage using pip-sync on a compiled requirement file, and it's COPY'd wholesale to the actual runtime stage with no build stage dependencies present. Would be nice to run uv sync instead of pip-sync in the build stage to achieve the same, migrate from a compiled requirement file to uv.lock, and change nothing else about how our system currently works.

Does adding the .venv to your project's .dockerignore fix that too?

It didn’t in my case.

Can you elaborate here? It still mounted .venv into the container?

I can retest using your suggestion, however I recall in my original tests (before these comments) I had actually done that (with dockerignore) and it didn’t help. Post these comments, I simply tested by removing the .venv folder from my local and tested the docker setup suggested and still had issues.
The only thing that worked for me was running uv sync with my lockfile in a different workdir. And then setting env in my path.

Another use-case for having a custom venv location outside of the project directory is CNBs (Cloud Native Buildpacks).
With CNBs, the layer/caching model is different to Dockerfile, so standard Dockerfile best practices don't apply. For example, with CNBs:

buildpacks aren't run as root
layers are created as directories under /layers/<buildpack_name>/<layer_name> which are separate to each other, and also separate to the app source code
layers can be marked with various properties that control whether they are cached or made available in the final run-image or not

These properties allow for several benefits such as base image "rebase", finer grained cache re-use/invalidation, smaller run-images (via excluding build time only deps), the ability to support multiple languages/ecosystems (Docker multi-stage builds get messy fast when trying to build a multi-language app, since it's hard to re-use official Docker images etc).
However, they do mean that the various components have to be installed into separate directory trees (rather than relying on an overlay filesystem to keep files contributed by different layers separate).
For example when using pip a possible layout would be:

/layers/<buildpack_name>/python:

A layer containing the custom relocated Python installation (compiled in advanced and downloaded from S3)

/layers/<buildpack_name>/pip:

A layer containing pip, as a user site-packages install (using PYTHONUSERBASE to set the location)
This layer can then be marked as launch=false to exclude it from the run image

/layers/<buildpack_name>/venv:

A layer containing the application dependencies in a PEP-405 compliant venv
PIP_PYTHON points at this layer, so pip install will install into it rather than the global Python installation

/workspace (the location of which is end-user customisable, and often changed to eg /app)

The layer containing the app source code

Each layer can then have its own cache invalidation logic. Any layers that are unchanged don't have to be rebuilt or even pushed to the remote. More at:
https://buildpacks.io/docs/for-buildpack-authors/concepts/
https://github.com/buildpacks/spec/blob/main/buildpack.md
Use of a venv for the app dependencies is needed due to:

A system install not allowing keeping the dependencies separate for cache invalidation
--user installs being problematic for relocated Python (xref https://github.com/astral-sh/uv/issues/2077#issuecomment-2312410060)
PYTHONPATH tricks being problematic due to stdlib shadowing (paths on PYTHONPATH take precedence over the stdlib, which can cause hard to debug issues from eg outdated backport packages in the app's transitive dependency tree)

As such, when we add support for uv in the future, we'll need a way to force the venv to be created outside the project directory and in its own layer.
I'm mostly indifferent as to whether we have to create the venv ourselves or whether uv does that for us (so long as we can control the exact path uv creates; a generated venv path name derived from the project like Poetry does would be more hassle). If manually created, I also don't mind too much how we'd tell uv to use that venv - for pip we'll soon be using PIP_PYTHON (since pip doesn't check VIRTUAL_ENV), and for the upcoming Poetry support we instead set VIRTUAL_ENV.

@zanieb The guide is pretty thorough and helpful! I was actually able to get it working using a watch config which I guess is fine though it seems inconsistent sometimes and may not work as well as gunicorns hot reload setup!
I will say that I did try using the new setup without watch config and trying to mount .:/app but the app failed due to loosing my env it seems.
Regardless - really appreciate your help in this!

@edmorley thank you for your thorough response. I take that feedback pretty seriously and it makes me think we'll need to expose some way to allow custom virtual environment locations. The difficulty will be in encouraging users that would be better suited not customizing the location on the happy path.
@adiberk I'm glad it helped! What's inconsistent about the watch setup? What happened with the mount? Feel free to open a targeted issue if something from the documentation didn't work out and we can chat over there.

For those who care about fast multi-stage builds, I've written down my own workflow here: https://hynek.me/articles/docker-uv/
tl;dr the lack of this feature in my context is awkward but easy to work around.

I came back just to say: thanks for writing this guide! https://docs.astral.sh/uv/guides/integration/docker/#configuring-watch-with-docker-compose :tada:
I didn't know about Docker Compose's watch, that solves my problems even better than what I had (bind mounts). I learned something, thanks! :nerd_face: :rocket:

Great to hear! Thank you!

@zanieb I am 85% sure this is not a uv issue, but I figure why not double check.
I had to continue with my setup where I used an alternative working directory for creating the virtual env and then setting the virtual evn in the PATH in my docker file. However once I added a new system user that isn't root, I started hitting an issue.
EX: RUN useradd --create-home appuser... USER appuser
Now when running my app
bash: /virtualenv/.venv/bin/uvicorn: /virtualenv/.venv/bin/python: bad interpreter: Permission denied
Even after setting the right permissions for this user to access the virtual env folder etc.
# Prepare install
RUN mkdir -p /virtualenv && chown lev:lev /virtualenv
WORKDIR /virtualenv

This works absolutely fine though if I am using root user. Do you know if this is a UV thing or is this simply something I have to work on with my team?


The value of "alias" is not alias address

Sisimai::Data object has "alias" accessor but the value of the accessor is the original recipient address ( is not alias).

Fixed at Sisimai 4.13.0


cross build with linuxkit

Now that we are using linuxkit with cross-building support, we need to enable it:

add -arch ${ARCH} argument to linuxkit build so that it can build for a target architecture
stop adding -${ARCH} to the container images that are official images from linuxkit/<image>, since those are multi-arch, and we now can just use them directly. This is necessary anyways, since only the multi-arch indexes are signed.

I have done some initial testing, but CI is what counts here.

I am ignoring yetus on this. It is complaining about precisely what I want to do. I do want to expand the variable.

I am ignoring yetus on this. It is complaining about precisely what I want to do. I do want to expand the variable.

It would be nice if we could do the same for all of the custom-built packages, but docker doesn't let you install indexes (actually, not even manifests; only on push), so there is a disconnect. If we could, say, docker build lfedge/somepkg:abcd and have that build locally and generate an index with support for multiple archs (even if only the current arch is actually in there), and then pull from it, then we could clean it all up.
Unfortunately, docker doesn't support it.
We might be able to do it with docker buildx. buildx already is included in every docker desktop release since 19.03. If we are comfortable with requiring 19.03 or higher, which was released in 2019-07 (18 months ago) for all eve builds, we can simplify a lot of these even further. Thoughts @rvs @eriknordmark ?

It would be nice if we could do the same for all of the custom-built packages, but docker doesn't let you install indexes (actually, not even manifests; only on push), so there is a disconnect. If we could, say, docker build lfedge/somepkg:abcd and have that build locally and generate an index with support for multiple archs (even if only the current arch is actually in there), and then pull from it, then we could clean it all up.
Unfortunately, docker doesn't support it.
We might be able to do it with docker buildx. buildx already is included in every docker desktop release since 19.03. If we are comfortable with requiring 19.03 or higher, which was released in 2019-07 (18 months ago) for all eve builds, we can simplify a lot of these even further. Thoughts @rvs @eriknordmark ?

Hey @deitch -- can you please follow up with a proposal to eve-tsc@ around what it would require (and how much work it'll be!) to move to buildx! In general -- requiring 19.03 is totally fine -- it is the cost of migration that I'm worried about.

Hey @deitch -- can you please follow up with a proposal to eve-tsc@ around what it would require (and how much work it'll be!) to move to buildx! In general -- requiring 19.03 is totally fine -- it is the cost of migration that I'm worried about.

The more I think about it, the more I think this should be upstreamed. I am starting a discussion, and then will circle it back here.

The more I think about it, the more I think this should be upstreamed. I am starting a discussion, and then will circle it back here.


[kohttp][test] Split tests into unit and integration groups #165

Task in progress.

 Here is an overview of what got changed by this pull request:

Issues
======
- Added 10

See the complete overview on Codacy

 Here is an overview of what got changed by this pull request:

Issues
======
- Added 6

See the complete overview on Codacy


Unable to reproduce results on ObjDGCNN

Hi, thanks for your great work! I am trying to reproduce the performance of Object DGCNN. However, the final results of voxel-based one is 5 points below the reported one. Here is the log:
2021-12-06 10:15:40,069 - mmdet - INFO - Epoch(val) [20][753] ...pts_bbox_NuScenes/NDS: 0.6263, pts_bbox_NuScenes/mAP: 0.5352

I notice that there is a shape mismatch between the pretrained backbone(provided in your google-drive) and the initialized one in object DGCNN:
size mismatch for pts_backbone.blocks.0.0.weight: copying a param with shape torch.Size([64, 64, 3, 3]) from checkpoint, the shape in current model is torch.Size([128, 256, 3, 3]).
size mismatch for pts_backbone.blocks.0.1.weight: copying a param with shape torch.Size([64]) from checkpoint, the shape in current model is torch.Size([128]).
size mismatch for pts_backbone.blocks.0.1.bias: copying a param with shape torch.Size([64]) from checkpoint, the shape in current model is torch.Size([128]).
size mismatch for pts_backbone.blocks.0.1.running_mean: copying a param with shape torch.Size([64]) from checkpoint, the shape in current model is torch.Size([128]).
size mismatch for pts_backbone.blocks.0.1.running_var: copying a param with shape torch.Size([64]) from checkpoint, the shape in current model is torch.Size([128]).
size mismatch for pts_backbone.blocks.0.3.weight: copying a param with shape torch.Size([64, 64, 3, 3]) from checkpoint, the shape in current model is torch.Size([128, 128, 3, 3]).
size mismatch for pts_backbone.blocks.0.4.weight: copying a param with shape torch.Size([64]) from checkpoint, the shape in current model is torch.Size([128]).
size mismatch for pts_backbone.blocks.0.4.bias: copying a param with shape torch.Size([64]) from checkpoint, the shape in current model is torch.Size([128]).
size mismatch for pts_backbone.blocks.0.4.running_mean: copying a param with shape torch.Size([64]) from checkpoint, the shape in current model is torch.Size([128]).
size mismatch for pts_backbone.blocks.0.4.running_var: copying a param with shape torch.Size([64]) from checkpoint, the shape in current model is torch.Size([128]).
size mismatch for pts_backbone.blocks.0.6.weight: copying a param with shape torch.Size([64, 64, 3, 3]) from checkpoint, the shape in current model is torch.Size([128, 128, 3, 3]).
size mismatch for pts_backbone.blocks.0.7.weight: copying a param with shape torch.Size([64]) from checkpoint, the shape in current model is torch.Size([128]).
size mismatch for pts_backbone.blocks.0.7.bias: copying a param with shape torch.Size([64]) from checkpoint, the shape in current model is torch.Size([128]).
size mismatch for pts_backbone.blocks.0.7.running_mean: copying a param with shape torch.Size([64]) from checkpoint, the shape in current model is torch.Size([128]).
size mismatch for pts_backbone.blocks.0.7.running_var: copying a param with shape torch.Size([64]) from checkpoint, the shape in current model is torch.Size([128]).
size mismatch for pts_backbone.blocks.0.9.weight: copying a param with shape torch.Size([64, 64, 3, 3]) from checkpoint, the shape in current model is torch.Size([128, 128, 3, 3]).
size mismatch for pts_backbone.blocks.0.10.weight: copying a param with shape torch.Size([64]) from checkpoint, the shape in current model is torch.Size([128]).
size mismatch for pts_backbone.blocks.0.10.bias: copying a param with shape torch.Size([64]) from checkpoint, the shape in current model is torch.Size([128]).
size mismatch for pts_backbone.blocks.0.10.running_mean: copying a param with shape torch.Size([64]) from checkpoint, the shape in current model is torch.Size([128]).
size mismatch for pts_backbone.blocks.0.10.running_var: copying a param with shape torch.Size([64]) from checkpoint, the shape in current model is torch.Size([128]).
size mismatch for pts_backbone.blocks.1.0.weight: copying a param with shape torch.Size([128, 64, 3, 3]) from checkpoint, the shape in current model is torch.Size([256, 128, 3, 3]).
size mismatch for pts_backbone.blocks.1.1.weight: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.1.bias: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.1.running_mean: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.1.running_var: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.3.weight: copying a param with shape torch.Size([128, 128, 3, 3]) from checkpoint, the shape in current model is torch.Size([256, 256, 3, 3]).
size mismatch for pts_backbone.blocks.1.4.weight: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.4.bias: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.4.running_mean: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.4.running_var: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.6.weight: copying a param with shape torch.Size([128, 128, 3, 3]) from checkpoint, the shape in current model is torch.Size([256, 256, 3, 3]).
size mismatch for pts_backbone.blocks.1.7.weight: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.7.bias: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.7.running_mean: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.7.running_var: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.9.weight: copying a param with shape torch.Size([128, 128, 3, 3]) from checkpoint, the shape in current model is torch.Size([256, 256, 3, 3]).
size mismatch for pts_backbone.blocks.1.10.weight: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.10.bias: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.10.running_mean: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.10.running_var: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.12.weight: copying a param with shape torch.Size([128, 128, 3, 3]) from checkpoint, the shape in current model is torch.Size([256, 256, 3, 3]).
size mismatch for pts_backbone.blocks.1.13.weight: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.13.bias: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.13.running_mean: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.13.running_var: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.15.weight: copying a param with shape torch.Size([128, 128, 3, 3]) from checkpoint, the shape in current model is torch.Size([256, 256, 3, 3]).
size mismatch for pts_backbone.blocks.1.16.weight: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.16.bias: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.16.running_mean: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).
size mismatch for pts_backbone.blocks.1.16.running_var: copying a param with shape torch.Size([128]) from checkpoint, the shape in current model is torch.Size([256]).

Is this normal?

By the way, how do you pre-train the voxel.pth provided in your google-drive?

Thanks for pointing it out! I believe that's due to the wrong checkpoint in the google driver. I have updated the voxel checkpoint.
We took the checkpoint from a centerpoint backbone network.


Update row.name to row.title

It seems that row.name is no longer a valid property.
Listing row properties, I saw title available.
Worked like a charm as soon as made this change!

@ch-rles before this, has your ability to add tasks fail? I'm still using what I have off of master and I have no issues with adding a task. The row.name property is still working on my end.
I'm curious if you have a 'title' attribute on your tasks database?

Yes, I wasn't able to add tasks. It threw me an error like it was considering row.name as unknown so unable to write and then abort.
I don't have any title attribute in my task database.
Really strange, I don't know where this difference comes from...

Hmm interesting.
What commit are you using for the project? I suspect What is master?
The other component is how your task database is setup column wise. Can you share that as well (just columns)?

I used this blog post for my setup: https://www.tinavanschelt.com/stash/a-custom-notion-alfred-workflow/
And this is my template for my tasks:

If I had to guess, the name field (which is the title of the task) was renamed to something different in your table?
At least from what I've seen:

A new table will have a default property called 'name' that represents the title of the row.
In notion-py, you can use the property name or title to change the row's title.

It does seem like title works, but I haven't really understood the underlying implementation in notion-py of how that happens (or maybe it is handled on Notion's backend?).
From this repository's purpose, it is meant to work with the defined template (which has 'name' being used). For that reason, I want to keep using name as it directly maps to the table's 'name' attribute.
@ch-rles if you want to check the property name for your table, and see if you can change it to 'Name'. Let me know if that makes it work.

Oh I guess you found it!
On my database, the name of a card is task. (I never use the Default view, so I couldn't find the label of the title property...)

Do you want to close my PR, then?

Awesome! Glad we figured out the issue. I'll close this PR now.
If this is a recurring issue, maybe it would be worth swapping to title for all use cases when modifying the name.
👋 Have a good one!


Mobile Verifier

Concepts/Low-Fidelity for mobile app wallet as verifier

Crawl / Walk / Run
Proof Request Templates
Proof Request Wizard

Please connect with the Traction team. They might have some insights on this

In the Mobile Verifier meetings we've talked about:

designing a "Presentation Request Template" that a mobile user can,
discover from a trusted repository,
customize the template by providing parameters for their needs, and
add the configured presentation request to their list of verifications

Later, when they go to do a verification, they can select from their list of verifications, triggering a real-time verification request.
Here are some thoughts on the requirements for the "Presentation Request Template" (PRT) system.

The trusted repository might initially be built into the wallet, or accessed from a trusted place.
While the list is small, "discovery" may be limited to browsing a list, but eventually searching across PRTs will be needed.

Searching should include the ability to use the multilingual data from the PRT -- at least name and description

PRTs must be curated.
PRTs are technical components and (initially at least) are intended to be created by developer-types.

In other words, at least initially an interface for non-technical users is not needed.

PRTs may have multilingual tags that enable searching within the repository.
PRTs must have a name and description that is user-friendly and multilingual.

I suspect that OCA can be used to handle the multilingual elements of these requirements.

During discovery, the user should be able to view a user-friendly view of the PRT in the language of their choice to see the schema(s),issuer(s) and set(s) of requested attributes in the PRT.
The PRT format must allow PRT creators to define parameters for the mobile user to complete after selecting a PRT to be added to their own PR List.
The PRT must indicate where verification runtime values based on time are to be inserted into the Presentation Request sent to the holder.

Example: A predicate for "expiry" that verifies the credential is not expired (no entry needed by the mobile user)
Example: A predicate based on birthdate to confirm that the holder is older than a given age, entered by the mobile user.

Great start, something else to consider.
PRT's should/could be directly linked to any governance documents/structures that they facilitate, not just a user-friendly description.

Discussed some with @cvarjao and @knguyenBC .  Some feedback:

Need to have clear terminology about:

the things in a repository (or somewhere) — what I call “PR Templates”
the things that a user has imported and customized in their verifier — perhaps “PRs” or “Proofs”
an instance of the use of a “Proofs” with a specific holder — perhaps “verifications"

We need to separate the technology for this — e.g. a PR Template format, PR Template repository, search, import, customization — from the governance of who might operate the repository, curation of the repository, who is allowed to contribute templates, how to link the templates back to the submitter.
That last bit could go to the technology. For example, the PR Template format might have to include the DID of the submitter and a signature verifiable using their DID — e.g. the PR Template might itself be a verifiable credential — a signed piece of data.  🤯

A couple of other thoughts on this:

We should work towards an Aries RFC for this to standardize the structure and make it reusable across the community.  We have lots of groups building UIs for building Presentation Requests, and I would theorize that enabling verifiers to consume pre-constructed PRTs such as this would be more useful.
In defining a versioned standard we should build it with the assumption that there will be more than just AnonCreds Presentation Requests defined.  While we don’t have to support others, (notably the DIF Presentation Exchange protocol) immediately, we should be able to define the standard that allows it to be supported in the future.  Not sure if there are other such request protocols — DIF PE is the most mature that I know of.

updated this ticket to include the MVP flow and wireframes as discussed with @swcurran and @cvarjao.

things to consider: Connection is Connectionless


Cluster for demo application

cluster credentials for three profiles:

embedded-postgres - single node with testcontainers
embedded-cluster - two node cluster with testcontainers
external-cluster - two node cluster with externalized configuration

To test this code you have to publish 0.9.2-SNAPSHOT of pg-index-health-testing from https://github.com/mfvanek/pg-index-health/tree/feature/externalize_params
Looking forward to your participation
https://github.com/mfvanek/pg-index-health-spring-boot-demo/issues/11

I change profile names and class names according to it. Starter guide added to readme.md

Problem is that now we have to run tests for each profile (probably excluding external-cluster-postgres).
We can do it with gradle.
Another problem with tests for external-cluster-postgres against external cluster. We have to exclude it's configuration from coverage or somehow run tests with that profile.

Please update PR and resolve conflicts with master branch. I've migrated to Kotlin DSL


Values in cds-hook Suggestion response

First, I want to say Thank You for this awesome framework and service for CQL and cds-hooks, it will be a huge benefit for me to learn CQL and develop/test cds-hook services using PlanDefinition!
I installed the server and am testing examples from cds-quality-summit.  Comparing with cds-hooks spec, the Suggestion response appears to contain two errors:

the "type" value should be lower case, "create" instead of "CREATE"

As copied below from a response, the actions "resource" value is serialized into a string. This should be a Resource object, not a string??
"suggestions": [
  {
    "actions": [
      {
        "type": "CREATE",
        "resource": "{\n  \"resourceType\": \"ProcedureRequest\",\n  \"status\": \"draft\",\n  \"intent\": \"order\",\n  \"code\": {\n    \"coding\": [\n      {\n        \"system\": \"http://www.ama-assn.org/go/cpt\",\n        \"code\": \"82272\",\n        \"display\": \"Fecal Occult Blood Test\"\n      }\n    ]\n  },\n  \"subject\": {\n    \"reference\": \"Patient/Patient-276\"\n  }\n}"
      }
    ]

Thanks!
Dave Carlson

Hi Dave,
Thanks for the kind words. You're absolutely right about these issues. Not sure how I got it so mixed up =). Fix coming.

Hi Chris,
Thanks for your quick reply.  I have additional thoughts about generalizing the support for cds-hook services.  I'll get a dev environment set up soon and try to submit a PR.  Getting ready for a trip to Amsterdam to attend FHIR DevDays next week.  Will you be there?  I intend to chat with Bryn about this server and integrating with the HSPC sandbox
Dave

That's great Dave! Unfortunately, I won't be attending FHIR DevDays. I look forward to collaborating with you and am excited about integrating with the sandbox.
Thanks Dave!

Thanks Chris, I tested your update and it's now working.  However, I am not
getting results as expected when invoking the cds-hooks service.  Where is
the best channel to ask these kinds of questions for cqf-ruler?
I am invoking col-decision-support via cds-hooks using the example
request.json provided in the repo.  I get 4 cards in return.  The first
condition for patient qualification is that age must be between 51 and 75.
I updated Patient-276 resource on the server with birthdate as 1970 instead
of 1960, which should disqualify the patient from all other actions in this
CDS service.  But I still get the same 4 cards and recommendations in
response.  I should get no cards, correct?  Not sure how to debug this.
As I work through this CDS development process, my understanding is that
the 'col-plandefinition-logic.cql' is converted to ELM, serialized to
base-64 and included in the Library.content element. So in
'col-library.json' for this example.  Correct?  Could it be that this
content is not correct or current?  What tooling or workflow can you
recommend for updating these artifacts?
Thanks!
Dave Carlson
<EMAIL_ADDRESS>Thank you,
Dave Carlson, MBA, Ph.D.
email<EMAIL_ADDRESS>Clinical Cloud Solutions LLC, healthcare on HL7 FHIR
http://www.ClinicalCloud.solutions
On Mon, Nov 6, 2017 at 11:22 AM, c-schuler<EMAIL_ADDRESS>wrote:

That's great Dave! Unfortunately, I won't be attending FHIR DevDays. I
look forward to collaborating with you and am excited about integrating
with the sandbox.
Thanks Dave!
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/DBCG/cqf-ruler/issues/11#issuecomment-342239150, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AB8_N7R1QVZbvvwud5vDU8QVJTcbMBhUks5sz05ugaJpZM4QSK6Z
.

Hey Dave,
Ah, yes I see what's happening. The data provider is set to http://measure.eval.kanvix.com/cqf-ruler/baseDstu3 here. Change that to point to your local instance. I should come up with a strategy to set that dynamically...
Do you have a fhir chat account? If not, create an account and join the CQL stream. You can ask questions there or you may also message me directly at<EMAIL_ADDRESS>You're correct about the CDS development process. The workflow consists of using the cql-to-elm translator to get the ELM, then encode as base64, then author the library resource and attach content. We are working on tooling to automate this process, but it isn't publicly available yet.
Hope that helps!
Thanks,
Chris


Fixes #361 Add QihooSo support

Fixes #361
Checklist

[x] I have read the Contribution & Best practices Guide and my PR follows them.
[x] My branch is up-to-date with the Upstream master branch.
[x] I have added necessary documentation (if appropriate)

Changes proposed in this pull request:

Added Qihoo support

@vaibhavsingh97 @gabru-md @mariobehling
Providing heroku deployment at https://serene-retreat-56189.herokuapp.com/
Please review. Thanks!!

@niranjan94 Please review !!

@bhaveshAn can you please resolve the conflicts. Otherwise LGTM

@bhaveshAn Please resolve conflicts

Currently we need to focus on performance and have low priority for more search engines. Therefore closing it.


Fix formatting issue in resource.cadl

Not sure how this slipped through the cracks!  It's blocking uptake of the submodule in `cadl-azure.

My mistake, this was some confusion caused by the submodule update due to a point-in-time change in this repo.


How can I run static methods?

I try to run static methods, but it's not accessible.
There is some way to run these methods?
console.log() - example of not static methods

console.log() - example of static methods

Could you please provide some example code to demonstrate this issue?
How did you import the class to call members on? Are the static members public?
You maybe want to take a look at the tests as those do contain some examples:
https://github.com/MarkusJx/node-java-bridge/blob/d50effbc063d923ad40f03ddaf8e44e8ba73c796/test/StringTest.ts#L8
and
https://github.com/MarkusJx/node-java-bridge/blob/d50effbc063d923ad40f03ddaf8e44e8ba73c796/test/StringTest.ts#L77

package main;

public class Teste {

	public String helloWorld() {
		return "Hello world :)";
	}

	public static String imStaticMethod() {
		return "imStaticMethod";
	}
}

Teste.jar
I use this code in electron app (preload.js)
const java = require("@markusjx/java");
const { resolve } = require("path");

java.ensureJVM();

function teste() {
    try {
        java.classpath.append(resolve("assets", "jar/Teste.jar"));

        const TestClass = java.importClass("main.Teste");

        const test = new TestClass();

        // OK
        console.log(test.helloWorldSync());
        // NOT OK, only show helloWorld method
        console.log(test);
    } catch (error) {
        console.log(error);
    }
}

contextBridge.exposeInMainWorld("myAPI", {
    teste,
});

Yes, what you see is by design, as Java (and many other languages) discourages you to call static methods on class instances. Instead, try calling your static method on the imported class directly:
// ...
function teste() {
    try {
        java.classpath.append(resolve("assets", "jar/Teste.jar"));

        const TestClass = java.importClass("main.Teste");

        const test = new TestClass();

        // OK
        console.log(test.helloWorldSync());
        // Try this (should work):
		console.log(TestClass.imStaticMethodSync());

		// Print the class instance members:
		console.log(test); // Should print a java_instance_proxy
		// Print the static class members:
		console.log(TestClass); // Should print a java_class_proxy
    } catch (error) {
        console.log(error);
    }
}
// ...

Thanks, it works fine :)
(Maybe you should add this detail to the readme)

Yeah, I probably should. Although, thinking about this, JavaScript prohibits you in the first place to call static class members on class instances so this should be not a problem. But I'll add an example to the readme.
So I'll close this, if you have any further questions, feel free to re-open or create a new issue.
Happy Holidays! :)


CVE-2019-9658: Gradle depends upon Checkstyle Version vulnerable to MITM based XXE

Gradle's checksyle plugin currently ships with a default dependenciy upon Checkstyle version 8.17.
https://github.com/gradle/gradle/blob/ae6478d485a613b6b4c1f9761882a956adb9156c/subprojects/code-quality/src/main/groovy/org/gradle/api/plugins/quality/CheckstylePlugin.java#L39
Checkstyle versions below below 8.18 are vulnerable to XXE of the remotely loaded DTD file being MITMed.
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-9658
https://nvd.nist.gov/vuln/detail/CVE-2019-9658

From https://github.com/checkstyle/checkstyle/issues/6474, it looks like only <8.11 are definitely affected by default?  IIUC, if you have custom configuration, you might be affected with 8.11-8.17.

From 8.11 version checkstyle do not rely on remove DTDs if you use standard config, with standard DTDs.

As of this writing,
Gradle 5.2.1 ships with Checkstyle 8.12
Gradle 5.3 RCs are using Checkstyle 8.17

Looking back at my notes on this research and the comments, yes, you are correct.
The reason I originally found this vulnerability requiring me to responsibility disclose it to the checkstyle team was that I found my build would fail due to checkstyle if I ran it in offline mode with the internet disconnected.
I originally setup checkstyle sometime in the Gradle 4.x series.

Fixed in 1be126f18c07d5b1ff80dc46351ce293e83de93a

Hi, our team still uses Gradle 5.6.3 which seems that we cannot get this fix. Is it possible to also apply the fix to 5.6.3 ?

@hstonec Simply upgrade the version of CheckStyle that your build relies upon.
https://docs.gradle.org/current/dsl/org.gradle.api.plugins.quality.CheckstyleExtension.html#org.gradle.api.plugins.quality.CheckstyleExtension:toolVersion
checkstyle {
  toolVersion = ...
}


Translate Universal Style Guide

As you can see here, Universal Style Guide is added to reactjs/reactjs.org-translation.
I will translate this guide and add to this repo. The filename may be UNIVERSAL-STYLE-GUIDE.md

Closed by #17


picom-next: unstable-2022-12-23 -> unstable-2023-01-29

Description of changes

Fixes https://github.com/NixOS/nixpkgs/issues/221473.
Some bugfixes, and the drop of libXinerama: https://github.com/yshui/picom/commit/986b3c1cb3b4771eb35de04e7f8b284ce781d208
Things done

Built on platform(s)

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

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

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

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

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Tested! Works fine on my end.


Getting 400 Bad Request error on console in checkout page when added with Bundle Product.

Terms

[X] Before you openning this issue, i have checked if the issue has already been reported.

Bagisto Version(s) affected
Master
Issue Description
Getting 400 Bad Request error on console in checkout page when added with Bundle Product.
Preconditions

Atleast 1 Bundle Product must be created.

Steps to reproduce

Go to Shop -> Add Bundle Product to Cart -> Continue to checkout.
Check Console -> We can see 400 Bad Request Error in checkout.

Expected Result
There should be no error in  the checkout page.
Actual Result
Please check th e video for reference.
Video*
https://github.com/user-attachments/assets/24d79bf0-dbc2-4f0e-8a0f-7d0c81ea4ff0
Screenshots
No response
Additional context
No response

Hello, @ashishkumar-webkul sir
Checked with fresh installation this issue is not appearing , may be this is appearing due to to PayPal SDK account, please re-install and check or provide proper steps in detail so that we can replicate the issue.


UX section += reference to, You Are Not the User

[ ] Very start of the section should link to a page mentioning, "You Are Not the User"" (a generally useful principal for developers to remember).
[ ] And link/reference to "Rule #23: You are not a typical end user" from Martin Z's Rules of ML Engineering doc http://martin.zinkevich.org/rules_of_ml/rules_of_ml.pdf

BTW:

[ ] I should also just make sure that generally-useful PDF is linked somewhere appropriate. Can't remember right now. Should be linked near the "high interest card of machine learning tech debt" link that is already present.

Hello, I would like to contribute to this issue.