Native Android Crash on >20 devices when showing GIFs

I am getting reports in google play console of native crashes in my android apps that seem to be due to gifs.
Here is an example report after symbolicating them:
********** Crash dump: **********
#00 0x00000000002be9ee /data/app/com.area120.studybuddy.sagaflutter-pQuyyo8WmCdwMu92VQSh2A==/lib/arm/libflutter.so
bool SkToBool<unsigned int>(unsigned int const&)
/b/s/w/ir/k/src/out/android_release/../../third_party/skia/include/core/SkTypes.h:87:80
SkGIFLZWContext::hasRemainingRows()
/b/s/w/ir/k/src/out/android_release/../../third_party/skia/third_party/gif/SkGifImageReader.h:116:0
SkGIFFrameContext::decode(SkStreamBuffer*, SkGifCodec*, bool*)
/b/s/w/ir/k/src/out/android_release/../../third_party/skia/third_party/gif/SkGifImageReader.cpp:425:0
SkGifImageReader::decode(int, bool*)
/b/s/w/ir/k/src/out/android_release/../../third_party/skia/third_party/gif/SkGifImageReader.cpp:455:0
SkGifCodec::decodeFrame(bool, SkCodec::Options const&, int*)
/b/s/w/ir/k/src/out/android_release/../../third_party/skia/src/codec/SkGifCodec.cpp:372:0
#01 0x00000000001f8947 /data/app/com.area120.studybuddy.sagaflutter-pQuyyo8WmCdwMu92VQSh2A==/lib/arm/libflutter.so
SkCodec::getPixels(SkImageInfo const&, void*, unsigned int, SkCodec::Options const*)
/b/s/w/ir/k/src/out/android_release/../../third_party/skia/src/codec/SkCodec.cpp:372:33
#02 0x00000000001409c1 /data/app/com.area120.studybuddy.sagaflutter-pQuyyo8WmCdwMu92VQSh2A==/lib/arm/libflutter.so
flutter::MultiFrameCodec::GetNextFrameImage(fml::WeakPtr<GrContext>)
/b/s/w/ir/k/src/out/android_release/../../flutter/lib/ui/painting/codec.cc:538:36
flutter::MultiFrameCodec::GetNextFrameAndInvokeCallback(std::__1::unique_ptr<tonic::DartPersistentValue, std::__1::default_delete<tonic::DartPersistentValue> >, fml::RefPtr<fml::TaskRunner>, fml::WeakPtr<GrContext>, fml::RefPtr<flutter::SkiaUnrefQueue>, unsigned int)
/b/s/w/ir/k/src/out/android_release/../../flutter/lib/ui/painting/codec.cc:572:0
flutter::MultiFrameCodec::getNextFrame(_Dart_Handle*)::$_3::operator()()
/b/s/w/ir/k/src/out/android_release/../../flutter/lib/ui/painting/codec.cc:611:0
auto fml::internal::CopyableLambda<flutter::MultiFrameCodec::getNextFrame(_Dart_Handle*)::$_3>::operator()<>() const
/b/s/w/ir/k/src/out/android_release/../../flutter/fml/make_copyable.h:24:0
decltype(std::__1::forward<fml::internal::CopyableLambda<flutter::MultiFrameCodec::getNextFrame(_Dart_Handle*)::$_3>&>(fp)()) std::__1::__invoke<fml::internal::CopyableLambda<flutter::MultiFrameCodec::getNextFrame(_Dart_Handle*)::$_3>&>(fml::internal::CopyableLambda<flutter::MultiFrameCodec::getNextFrame(_Dart_Handle*)::$_3>&)
/b/s/w/ir/k/src/out/android_release/../../third_party/libcxx/include/type_traits:4350:0
void std::__1::__invoke_void_return_wrapper<void>::__call<fml::internal::CopyableLambda<flutter::MultiFrameCodec::getNextFrame(_Dart_Handle*)::$_3>&>(fml::internal::CopyableLambda<flutter::MultiFrameCodec::getNextFrame(_Dart_Handle*)::$_3>&)
/b/s/w/ir/k/src/out/android_release/../../third_party/libcxx/include/__functional_base:349:0
std::__1::__function::__func<fml::internal::CopyableLambda<flutter::MultiFrameCodec::getNextFrame(_Dart_Handle*)::$_3>, std::__1::allocator<fml::internal::CopyableLambda<flutter::MultiFrameCodec::getNextFrame(_Dart_Handle*)::$_3> >, void ()>::operator()()
/b/s/w/ir/k/src/out/android_release/../../third_party/libcxx/include/functional:1572:0
#03 0x0000000000137999 /data/app/com.area120.studybuddy.sagaflutter-pQuyyo8WmCdwMu92VQSh2A==/lib/arm/libflutter.so
fml::MessageLoopImpl::FlushTasks(fml::FlushType)
/b/s/w/ir/k/src/out/android_release/../../flutter/fml/message_loop_impl.cc:138:5
fml::MessageLoopImpl::RunExpiredTasksNow()
/b/s/w/ir/k/src/out/android_release/../../flutter/fml/message_loop_impl.cc:144:0
#04 0x000000000013a275 /data/app/com.area120.studybuddy.sagaflutter-pQuyyo8WmCdwMu92VQSh2A==/lib/arm/libflutter.so
fml::MessageLoopAndroid::OnEventFired()
/b/s/w/ir/k/src/out/android_release/../../flutter/fml/platform/android/message_loop_android.cc:92:5
fml::MessageLoopAndroid::MessageLoopAndroid()::$_0::operator()(int, int, void*) const
/b/s/w/ir/k/src/out/android_release/../../flutter/fml/platform/android/message_loop_android.cc:42:0
fml::MessageLoopAndroid::MessageLoopAndroid()::$_0::__invoke(int, int, void*)
/b/s/w/ir/k/src/out/android_release/../../flutter/fml/platform/android/message_loop_android.cc:40:0
#05 0x000000000000f239 /system/lib/libutils.so (android::Looper::pollInner(int)+632)
#06 0x000000000000ef43 /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+26)
#07 0x000000000000c697 /system/lib/libandroid.so (ALooper_pollOnce+50)
#08 0x000000000013a351 /data/app/com.area120.studybuddy.sagaflutter-pQuyyo8WmCdwMu92VQSh2A==/lib/arm/libflutter.so
fml::MessageLoopAndroid::Run()
/b/s/w/ir/k/src/out/android_release/../../flutter/fml/platform/android/message_loop_android.cc:68:18
#09 0x0000000000137863 /data/app/com.area120.studybuddy.sagaflutter-pQuyyo8WmCdwMu92VQSh2A==/lib/arm/libflutter.so
fml::MessageLoopImpl::DoRun()
/b/s/w/ir/k/src/out/android_release/../../flutter/fml/message_loop_impl.cc:84:3
fml::MessageLoop::Run()
/b/s/w/ir/k/src/out/android_release/../../flutter/fml/message_loop.cc:57:0
#10 0x00000000001392cf /data/app/com.area120.studybuddy.sagaflutter-pQuyyo8WmCdwMu92VQSh2A==/lib/arm/libflutter.so
fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0::operator()() const
/b/s/w/ir/k/src/out/android_release/../../flutter/fml/thread.cc:34:10
decltype(std::__1::forward<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fp)()) std::__1::__invoke<fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0&&)
/b/s/w/ir/k/src/out/android_release/../../third_party/libcxx/include/type_traits:4350:0
void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0>&, std::__1::__tuple_indices<>)
/b/s/w/ir/k/src/out/android_release/../../third_party/libcxx/include/thread:342:0
void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, fml::Thread::Thread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0> >(void*)
/b/s/w/ir/k/src/out/android_release/../../third_party/libcxx/include/thread:352:0
#11 0x0000000000064905 /system/lib/libc.so (__pthread_start(void*)+22)
#12 0x000000000001e841 /system/lib/libc.so (__start_thread+24)

I have 6 more distinct traces that seem to be similar that I am attaching.
Here is a device breakdown from google play console of devices and instance count:
HWRNE | 232 | 3.5%
mido | 231 | 3.5%
HWLDN-Q | 200 | 3.0%
CPH1729 | 159 | 2.4%
CPH1609 | 154 | 2.3%
HWBLN-H | 142 | 2.2%
HWANE | 139 | 2.1%
1601 | 119 | 1.8%
CPH1701 | 115 | 1.8%
CPH1723 | 114 | 1.7%
CPH1801 | 103 | 1.6%
on5xelte | 90 | 1.4%
hero2lte | 84 | 1.3%
j5xnlte | 80 | 1.2%
1714 | 75 | 1.1%
HWTRT-Q | 69 | 1.1%
j2y18lte | 65 | 1.0%
santoni | 58 | 0.9%
on7xelte | 57 | 0.9%
riva | 50 | 0.8%
Others | 4,227 | 64.4%

I cannot reproduce it locally on any device I have tried as GIFs seem to work fine on them.
It also happens across android 6, 7, and 8.
gifNativeErrors.zip

Adding critical label as the customer reports this is happening 1,500+ times in the past 7 days.

I landed a switch to a different implementation of the GIF decoder today:
https://github.com/flutter/engine/commit/f775f5e4d637e280d54d7de119c7fffb519ba24f
This decoder should be more reliable.

@danfranklin are things better for you on master?

@danfranklin reports this is still happening today. I've asked if they can provide a repro to help us track it down.

Sorry I didn't see this sooner. Yes this is still happening. The errors appear to be the same as above when I symbolicate them.
I don't have any way of getting a repro as it happens to a small percentage of users across a wide variety of devices. There also seems to be no specific android version that it is happening on.
Here is an example of the crash reports in the play console and the device and android distributions. The crash reports that are native seem to mostly be like the ones I linked in the post above.

The version we are looking at here was created on 7/17 and was cut at CL 258591015.
Any other ideas on things we can do to try and help debug this?

What's the locale distribution among the affected users?

If you're seeing the same kind of trace then you're still using the old GIF decoder, I think. @jason-simmons am I right in interpreting the stack above as being definitely the old decoder?

Yes - that stack trace is from before the migration to the Wuffs decoder

@danfranklin Based on the above our understanding is that you have not yet tried the new GIF decoder. Can you update us when you have a version where you're using the new decoder? Thanks!

@danfranklin The change that jason submitted landed internally on 07/25 5pm PST. Did you cut a release since then? If so, are you able to verify that the errors went away?

We are cutting a release today so I will check after a few days if the number of crashes goes down. Thanks for following up on this everyone!

I believe we are seeing less crashes of this type. we still have some that seem related but after discussiong with @Hixie it sounds like those are new stack traces.

@danfranklin said he would file new bugs for the new issues, so I'm going to close this.


How to pass options to an association?

I have this association:
  association :upcoming_invoice, blueprint: User::StripeInvoiceSerializer do |user|
    Stripe::Invoice.upcoming(customer: user.stripe_customer_id)
  end

I need to pass user.data as options to the target blueprint (how to override the original options?)

I figured out the solution:
  association :upcoming_invoice, blueprint: User::StripeInvoiceSerializer do |user, options|
    options[:user] = user
    Stripe::Invoice.upcoming(customer: user.stripe_customer_id)
  end


update SR2ML submodule ID

Pull Request Description
What issue does this change request address? (Use "#" before the issue to link it, i.e., #42.)
see #1114
What are the significant changes in functionality due to this change request?

For Change Control Board: Change Request Review
The following review must be completed by an authorized member of the Change Control Board.

[ ] 1. Review all computer code.
[ ] 2. If any changes occur to the input syntax, there must be an accompanying change to the user manual and xsd schema. If the input syntax change deprecates existing input files, a conversion script needs to be added (see Conversion Scripts).
[ ] 3. Make sure the Python code and commenting standards are respected (camelBack, etc.) - See on the wiki for details.
[ ] 4. Automated Tests should pass, including run_tests, pylint, manual building and xsd tests. If there are changes to Simulation.py or JobHandler.py the qsub tests must pass.
[ ] 5. If significant functionality is added, there must  be tests added to check this. Tests should cover all possible options.  Multiple short tests are preferred over one large test. If new development on the internal JobHandler parallel system is performed, a cluster test must be added setting, in  XML block, the node <internalParallel> to True.
[ ] 6. If the change modifies or adds a requirement or a requirement based test case, the Change Control Board's Chair or designee also needs to approve the change.  The requirements and the requirements test shall be in sync.
[ ] 7. The merge request must reference an issue.  If the issue is closed, the issue close checklist shall be done.
[ ] 8. If an analytic test is changed/added is the the analytic documentation updated/added?
[ ] 9. If any test used as a basis for documentation examples (currently found in raven/tests/framework/user_guide and raven/docs/workshop) have been changed, the associated documentation must be reviewed and assured the text matches the example.

Job Mingw Test on 717fb32 : invalidated by @wangcj05
fetch issue

PR is good to me.

@wangcj05 and @joshua-cogliati-inl : can we merge this PR?

Job Mingw Test on d796d7f : invalidated by @wangcj05
fetch issue

To me, this is good to be merged.

Merging


File not saved if parent folder does not exist

When saving a folder in a location where the parent folder does not exist, an unhandled exception occurs.
The parent folder(s) should be created.
This behaviour should possibly be configurable.

Fixed by 5fe4436d9f1ea8ae7ef7701610b2b1226e3e43ad


Translate All Documents into Korean

Wow! Thanks!

The new docs are now available at https://ochrons.github.io/scalajs-spa-tutorial/kr/


Defer to default ProxySelector (issue 123)

Rather than try to parse the pseudo-RegEx patterns supported by Java for http.nonProxyHosts, I've changed it to just defer to the Java default ProxySelector (with a little tweaking of the URL to honor the useHttpsProxy flag).

Any plans of merging this PR?
Seems safe and would prevent us from having to code our own workarounds for #123


Gtfs benchmarks

Add code to process GTFS data to create benchmark headways and traveltimes for bus routes.

#205 was no good, so reopened with a new approach.
This will address #116

#225 has been addressed by https://github.com/transitmatters/t-performance-dash/pull/208/commits/1b6c5c3a9bdef2f16ef6fcabf2388a76121f047a

could you bring this up to date with main?

oh the GitHub UI confused me, sorry! 6668602 was today, not "3 months ago" lol


Add SIMD accelerated map_boxes

This PR add a new elegant SIMD-accelerated version of map_boxes which runs between 3x and 5x faster than the standard version. It works completely automatically, you can use your regular function and simply pass :cpu arg to BoxMap (More details in fast_maps_using_SIMD.jl).
function map_boxes(g::SampledBoxMap{N,T,Val{:cpu}}, source::BoxSet) where {N,T}
    P, keys = source.partition, collect(source.set)
    image = fill( Set{eltype(keys)}(), nthreads() )
    test_points = g.domain_points(P.domain.center, P.domain.radius)
    n, simd = length(test_points), pick_vector_width(T)
    @threads for key in keys
        box = key_to_box(P, key)
        c, r = box.center, box.radius
        for i in 0:simd:n-simd
            points = tuple_vgather(view(test_points, i+1:i+simd), simd)
            points = @muladd points .* r .+ c
            points = g.map(points)
            keys = point_to_key(P, points)
            push!(image[threadid()], keys...)
        end
    end
    return BoxSet(P, union(image...))
end

I realized that I was looking to speed up the wrong part of map_boxes in my previous attempts. I've always been trying to parallelize the function itself, inevitably needing more allocations. However, what I really needed to do was parallelize the test points and point_to_key functions.
The work was worth it, since I was able to reuse much of my old code, just in new places. To run a benchmark, clone April-Hannah-Lena/GAIO.jl@55423eaf84b5646d8827ab26092524c9d771a068 and run
julia> cd("./benchmark")

julia> include("map_boxes_bench.jl")

Standard Version
G = BoxMap(F, P) = BoxMap with 48 sample points
W = unstable_set!(G, P[x]) = 18305-element BoxSet in 3 dimensions
  0.354856 seconds (9.71 M allocations: 474.702 MiB, 30.61% gc time)
  0.298456 seconds (9.70 M allocations: 474.534 MiB, 17.57% gc time)
  0.299194 seconds (9.70 M allocations: 474.802 MiB, 16.45% gc time)
  0.301404 seconds (9.70 M allocations: 474.284 MiB, 16.97% gc time)
  0.299297 seconds (9.71 M allocations: 474.727 MiB, 16.55% gc time)
  0.297946 seconds (9.70 M allocations: 474.649 MiB, 16.37% gc time)
  0.295239 seconds (9.70 M allocations: 474.701 MiB, 16.55% gc time)
  0.297496 seconds (9.69 M allocations: 474.218 MiB, 16.53% gc time)
  0.301596 seconds (9.70 M allocations: 474.644 MiB, 16.29% gc time)
  0.341864 seconds (9.70 M allocations: 474.764 MiB, 29.66% gc time)

cpu version
G = BoxMap(F, P, :cpu) = BoxMap with 48 sample points
W = unstable_set!(G, P[x]) = 19193-element BoxSet in 3 dimensions
  0.091189 seconds (4.38 M allocations: 212.037 MiB)
  0.145110 seconds (4.38 M allocations: 211.709 MiB, 36.48% gc time)
  0.090975 seconds (4.38 M allocations: 212.038 MiB)
  0.141194 seconds (4.38 M allocations: 211.950 MiB, 36.48% gc time)
  0.093089 seconds (4.38 M allocations: 211.976 MiB)
  0.137966 seconds (4.38 M allocations: 211.783 MiB, 33.45% gc time)
  0.096850 seconds (4.38 M allocations: 212.095 MiB)
  0.138624 seconds (4.38 M allocations: 211.709 MiB, 33.46% gc time)
  0.092992 seconds (4.38 M allocations: 211.900 MiB)
  0.137625 seconds (4.38 M allocations: 211.901 MiB, 33.99% gc time)

This PR also moves away from StaticArays in favor of tuples. I'm not fully sure if this is worth the speed benefit since we lose many of the automatic AbstractArray methods. All the examples and tests work (some examples need to manually import StaticArrays). I think this is something we could discuss later if you want.

Ok, very nice. I get
julia> G = BoxMap(F, P, no_of_points=400, :cpu)
julia> @benchmark G($B)
BenchmarkTools.Trial: 10000 samples with 1 evaluation.
 Range (min … max):   83.541 μs …  11.899 ms  ┊ GC (min … max): 0.00% … 98.71%
 Time  (median):     102.094 μs               ┊ GC (median):    0.00%
 Time  (mean ± σ):   113.379 μs ± 288.272 μs  ┊ GC (mean ± σ):  6.13% ±  2.42%

          █
  ▁▁▁▁▁▂▃▆█▇▇▄▂▂▂▂▂▂▂▂▂▃▄▄▅▆▅▄▃▃▃▃▂▂▂▂▂▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ▂
  83.5 μs          Histogram: frequency by time          150 μs <

 Memory estimate: 90.78 KiB, allocs estimate: 2427.

julia> G = BoxMap(F, P, no_of_points=400)
BoxMap with 400 sample points

julia> @benchmark G($B)
BenchmarkTools.Trial: 10000 samples with 1 evaluation.
 Range (min … max):  257.975 μs …  13.342 ms  ┊ GC (min … max): 0.00% … 97.51%
 Time  (median):     291.707 μs               ┊ GC (median):    0.00%
 Time  (mean ± σ):   314.617 μs ± 524.931 μs  ┊ GC (mean ± σ):  6.82% ±  4.01%

   ▃   █
  ███▅▇█▇▆▄▃▃▃▂▂▂▂▂▂▂▂▂▂▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▂▂▁▂▂▁▁▂ ▃
  258 μs           Histogram: frequency by time          673 μs <

 Memory estimate: 220.80 KiB, allocs estimate: 4422.

while with the current master branch, I get
julia> F = BoxMap(f, P, no_of_points=400)
BoxMap with 400 sample points

julia> @benchmark F($B)
BenchmarkTools.Trial:
  memory estimate:  1.97 KiB
  allocs estimate:  20
  --------------
  minimum time:     194.639 μs (0.00% GC)
  median time:      207.646 μs (0.00% GC)
  mean time:        214.279 μs (0.00% GC)
  maximum time:     953.428 μs (0.00% GC)
  --------------
  samples:          10000
  evals/sample:     1

So it actually is a nice improvement! We might still want to think about the larger number of allocations at some point.

Ok I rebased with the current master branch, so the only changes are to the :cpu BoxMap. The normal one is now untouched.
I also was able to squeeze out another 8% speed by moving the SIMD gather operation outside of the loop.
function map_boxes(g::SampledBoxMap{N,T,Val{:cpu}}, source::BoxSet) where {N,T}
    P, keys = source.partition, collect(source.set)
    image = [ Set{eltype(keys)}() for _ in  1:nthreads() ]
    points = tuple_vgather(
        g.domain_points(P.domain.center, P.domain.radius),
        pick_vector_width(T)
    )
    @threads for key in keys
        box = key_to_box(P, key)
        c, r = box.center, box.radius
        for p in points
            fp = g.map(@muladd p .* r .+ c)
            hits = point_to_key(P, fp)
            push!(image[threadid()], hits...)
        end
    end
    return BoxSet(P, union(image...))
end

I am getting quite mixed results, depending on the number of sample points:
the current master
julia> G = BoxMap(F, P, no_of_points=40)
julia> @time W = unstable_set!(G, P[x])
  0.066494 seconds (5.65 k allocations: 4.212 MiB)

vs. with the PR
julia> G = BoxMap(F, P, :cpu, no_of_points=40)
julia> @time W = unstable_set!(G, P[x])
  0.252924 seconds (3.76 M allocations: 147.461 MiB)

and
julia> G = BoxMap(F, P, no_of_points=4000)
julia> @time W = unstable_set!(G, P[x])
 23.375448 seconds (8.63 k allocations: 13.036 MiB)

vs. the PR
julia> G = BoxMap(F, P, :cpu, no_of_points=4000)
julia> @time W = unstable_set!(G, P[x])
 14.729254 seconds (617.75 M allocations: 22.918 GiB, 30.34% gc time)

and
julia> G = BoxMap(F, P, no_of_points=40000)
julia> @time W = unstable_set!(G, P[x])
248.886638 seconds (8.39 k allocations: 13.699 MiB)

vs. the PR
julia> G = BoxMap(F, P, :cpu, no_of_points=40000)
julia> @time W = unstable_set!(G, P[x])
284.639040 seconds (6.39 G allocations: 236.881 GiB, 39.71% gc time)

In fact, with 40000 points, the accelerated code is doing a huge number of allocations, while the number of allocations for the current code in the master is actually independent of the number of sample points. I guess we still need to work on the allocations issue ...

So I took out all changes inclusing cosmetic changes in order to track down these allocations, but for some reason I smiply can't recreate those results. In April-Hannah-Lena/GAIO.jl@9f27aa7f7d6c882674276c388c00b2df61c97804 I only added code for the :cpu version, did not change any existing code, and did a benchmark:
using GAIO

# the Lorenz system
const σ, ρ, β = 10.0, 28.0, 0.4
v((x,y,z)) = (σ*(y-x), ρ*x-y-x*z, x*y-β*z)
f(x) = rk4_flow_map(v, x)

center, radius = (0,0,25), (30,30,30)
x = (sqrt(β*(ρ-1)), sqrt(β*(ρ-1)), ρ-1)         # equilibrium
P = BoxPartition(Box(center, radius), (128,128,128))

for accel in (nothing, :cpu), p in (40, 400, 4000)
    println("accel: $accel  p: $p")
    F = BoxMap(f, P, accel; no_of_points=p)
    W = unstable_set!(F, P[x])
    @time W = unstable_set!(F, P[x])
end

I get the follownig results:
accel: nothing  p: 40
  0.196086 seconds (8.56 M allocations: 436.467 MiB)
accel: nothing  p: 400
  4.601838 seconds (135.84 M allocations: 6.703 GiB, 41.57% gc time)
accel: nothing  p: 4000
 52.546914 seconds (1.59 G allocations: 75.005 GiB, 44.91% gc time)
accel: cpu  p: 40
  0.051536 seconds (2.96 M allocations: 122.944 MiB)
accel: cpu  p: 400
  1.201683 seconds (53.17 M allocations: 2.083 GiB, 39.96% gc time)
accel: cpu  p: 4000
 15.361004 seconds (598.18 M allocations: 23.355 GiB, 48.56% gc time)

The allocations also only seem to come from mapping the boxes and point_to_key, so it's the operations that are repeated in linear proportion to the number of test points / number of keys. The number of allocations is always cut by a factor of 2-4, but are never constant.
 ────────────────────────────────────────────────────────────────────────────────────────────
                                                    Time                    Allocations
                                           ───────────────────────   ────────────────────────
             Tot / % measured:                  6.06s /  22.0%            803MiB /   4.0%

 Section                           ncalls     time    %tot     avg     alloc    %tot      avg
 ────────────────────────────────────────────────────────────────────────────────────────────
 BoxMap with 40000 sample points        1    1.06s   79.4%   1.06s   22.0MiB   68.9%  22.0MiB
   map                              40.0k    1.01s   75.7%  25.2μs   11.0MiB   34.4%     288B
     rk4_flow_map                   40.0k    979ms   73.3%  24.5μs      752B    0.0%    0.02B
       lorenz                       3.20M    109ms    8.2%  34.2ns     0.00B    0.0%    0.00B
   point_to_key                     40.0k   6.80ms    0.5%   170ns   6.71MiB   21.0%     176B
   push!                            40.0k   3.40ms    0.3%  85.0ns    625KiB    1.9%    16.0B
   key_to_box                           1    554ns    0.0%   554ns     0.00B    0.0%    0.00B
 BoxMap with 10000 sample points        1    275ms   20.6%   275ms   9.94MiB   31.1%  9.94MiB
   map                              10.0k    239ms   17.9%  23.9μs   2.14MiB    6.7%     224B
     rk4_flow_map                   10.0k    236ms   17.7%  23.6μs      752B    0.0%    0.08B
       lorenz                        800k   26.4ms    2.0%  33.0ns     0.00B    0.0%    0.00B
   point_to_key                     10.0k   22.6ms    1.7%  2.26μs   5.95MiB   18.6%     624B
   push!                            10.0k   3.66ms    0.3%   366ns   1.83MiB    5.7%     192B
   key_to_box                           1    789ns    0.0%   789ns     0.00B    0.0%    0.00B
 ────────────────────────────────────────────────────────────────────────────────────────────

Nevermind, after tearing my hair out I found the issue.  Awesome ...


Make StreamFormat trait public.

Cool crate,
I don't know if you had a convincing reason to make StreamFormat private, but I immediately had a use case where non of your provided formats would be ideal.
I would suggest making it public..

Hey,
No, there wasn't any particular reason except it was mostly used internally, but if someone wants to use it to make their own formats, I'm happy to open it.
https://github.com/abdolence/axum-streams-rs/commit/0f627f50dbada2c8fb16be0bb128ce33a76187ce


In the Calendar, i want to know how to display the exact date of the event not the day before it happens, hope you help me

Please only submit reproducible issues.
If you're not sure if it's a real bug or if it's just you, please open a topic on the forum: https://forum.magicmirror.builders/category/15/bug-hunt
Problems installing or configuring your MagicMirror? Check out: https://forum.magicmirror.builders/category/10/troubleshooting
When submitting a new issue, please supply the following information:
Platform: Place your platform here... give us your web browser/Electron version and your hardware (Raspberry Pi 2/3, Windows, Mac, Linux, System V UNIX).
Node Version: Make sure it's version 0.12.13 or later.
MagicMirror Version: Now that the versions have split, tell us if you are using the PHP version (v1) or the newer JavaScript version (v2).
Description: Provide a detailed description about the issue and include specific details to help us understand the problem. Adding screenshots will help describing the problem.
Steps to Reproduce: List the step by step process to reproduce the issue.
Expected Results: Describe what you expected to see.
Actual Results: Describe what you actually saw.
Configuration: What does the used config.js file look like? Don't forget to remove any sensitive information!
Additional Notes: Provide any other relevant notes not previously mentioned. This is optional.

What does your config look like? You may need to set timeFormat: 'absolute' and urgency: 0 in your config.

Please refer to http://forum.magicmirror.builders for support and troubleshooting.
I'm closing this issue for now. If you feel this issue should remain open, please let me know.


PATH issues are back

So while having a problem PATH related I created an issue in the omnisharp vscode repo about this. However right after doing a quick chsh /bin/bash and a restart of vscode my suspicions were right and now I'm coming back to you guys.
The issue in omnisharp vscode:
https://github.com/OmniSharp/omnisharp-vscode/issues/1259
Previous fix I'm pointing to:
https://github.com/Microsoft/vscode/issues/8434
Seems that somehow this fix regressed again. Or my shell does even more effort to break it...
I'm still using fish with powerline as my shell and it seems to break the env (and in turn PATH) parsing again.
I propose a change to the PATH resolution strategy for OSX:

Run path_helper for an initial view of an ok customizable PATH of an OSX installation. It gathers all paths from the file /etc/paths and paths in files in /etc/paths.d like the one for dotnet. It outputs a PATH string of these paths.
Do the hacky thing with reading out a login shell's env and parsing the PATH from it.
Use the hacky output if there is actually any. Every login shell runs path_helper but also includes all user customizations to PATH from say .bash_profile.
If the shell is so custom it breaks the hacky way of fishing out the PATH then just use the path_helper output.

This way the result will at least always be a working env (for say quite integrated things like spawning a dotnet process for doing a restore).
Because everyone should be able to expect that after installing a pkg like the dotnet cli vscode (and its extensions) can always find and work with it seamlessly.
dotnet --info output:
.NET Command Line Tools (1.0.0-rc4-004849)

Product Information:
Version: 1.0.0-rc4-004849
Commit SHA-1 hash: 7dcefb5076

Runtime Environment:
OS Name: Mac OS X
OS Version: 10.12
OS Platform: Darwin
RID: osx.10.12-x64
Base Path: /usr/local/share/dotnet/sdk/1.0.0-rc4-004849
VS Code version: 1.10.0-insider
C# Extension version: 1.7.0

@weinand @joaomoreno would I be correct in assuming that if VS Code fixes this issue, the extra environment settings will automatically propagate to the C# extension processes?

Did this really regress for you? Was it working before? In which version did it stop working?

@gregg-miskelly Yes as vscode is the host process from where you spawn new dotnet processes a shell like PATH will then allow it to actually find dotnet, each child process gets the env of the parent. That's why starting vscode from a terminal succeeds as a work-around.
@joaomoreno I picked up a new macbook a little while ago, copied over all my old dotfiles for fish etc and installed vscode. To my knowledge it didn't work since I got this new macbook.
A lot of extensions expect PATH to be filled like a shell so once this is fixed things will start working again. Whether such widespread expecatations are a good or bad thing is something I leave up to you.

OK, is PATH the only variable that is wrong, or are there other variables missing from Code's window?
You can figure this out by running F1, Developer Tools and then in the Console run process.env.

Everything in the env seems incorrect, no OMF keys, default path and missing all other customizations.
Tested with insiders latest and normal 1.10.1

Can you also try this in the dev tools console and compare with the previous output: process.lazyEnv.then(v => console.log(v))

@NinoFloris 1.9 works correctly?

@jrieken, exactly the same. @joaomoreno sadly no

Is $SHELL actually pointing to the right shell that you are using? We do this which is running node such that it dumps the env from the default shell. So, if the shell-variable points to the correct shell I would assume that node gets the correct variables inherited and that we then use the right variables too
const command = `'${process.execPath}' -p '"${mark}" + JSON.stringify(process.env) + "${mark}"'`;
		const child = cp.spawn(process.env.SHELL, ['-ilc', command], {
			detached: true,
			stdio: ['ignore', 'pipe', process.stderr],
			env
		});

If 1.9 doesn't work correctly, this is not a regression.
If you open the Developer Tools and run this in the console, what comes back?
(() => {
const electron = require('electron').remote.process.execPath;
const cp = require('child_process');
const mark = 'MARK123';
const env = Object.assign({}, process.env, {
    ELECTRON_RUN_AS_NODE: '1',
    ELECTRON_NO_ATTACH_CONSOLE: '1'
});
const command = `'${electron}' -p '"${mark}" + JSON.stringify(process.env) + "${mark}"'`;
const result = cp.spawnSync(process.env.SHELL, ['-ilc', command], {
    detached: true,
    stdio: ['ignore', 'pipe', process.stderr],
    env,
    encoding: 'utf8'
});
console.log(result.stdout);
})();

@jrieken yes, just did a which fish and compared it with an echo of SHELL identical paths
@joaomoreno it returns undefined

running the command directly
fish -ilc "'/Applications/Visual Studio Code.app/Contents/MacOS/Electron' -p '"MARK123" + JSON.stringify(process.env) + "MARK123"'"

Opens a new file in vscode with no contents

@NinoFloris It returns undefined, but should print something else in the console after 1 second or so. Nothing gets printed?
Running it standalone, you need the right env:
ELECTRON_RUN_AS_NODE=1 ELECTRON_NO_ATTACH_CONSOLE=1 fish -ilc "'/Applications/Visual Studio Code.app/Contents/MacOS/Electron' -p '"MARK123" + JSON.stringify(process.env) + "MARK123"'"

Nope from within vscode it returns nothing.
running
env ELECTRON_RUN_AS_NODE=1; env ELECTRON_NO_ATTACH_CONSOLE=1; fish -ilc "'/Applications/Visual Studio Code.app/Contents/MacOS/Electron' -p '"MARK123" + JSON.stringify(process.env) + "MARK123"'"

returns the right things!
Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.TBtCF6pWmO/Render
COLORFGBG=15;0
HOME=/Users/nfloris
ITERM_PROFILE=Default
ITERM_SESSION_ID=w3t0p0:BAF42606-4339-4892-A1C5-40759BC537AE
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
LC_CTYPE=UTF-8
LOGNAME=nfloris
OMF_CONFIG=/Users/nfloris/.config/omf
OMF_PATH=/Users/nfloris/.local/share/omf
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dotnet:~/.node/bin:~/.terraform:~/.composer/vendor/bin
PWD=/Users/nfloris
SHELL=/usr/local/bin/fish
SHLVL=1
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.TakpSw68bL/Listeners
TERM=xterm-256color
TERM_PROGRAM=iTerm.app
TERM_PROGRAM_VERSION=3.0.13
TERM_SESSION_ID=w3t0p0:BAF42606-4339-4892-A1C5-40759BC537AE
TMPDIR=/var/folders/8n/pxszz5w97ml_9t3my9y16jpr0000gp/T/
USER=nfloris
XPC_FLAGS=0x0
XPC_SERVICE_NAME=0
__CF_USER_TEXT_ENCODING=0x1F6:0x0:0x0
ELECTRON_RUN_AS_NODE=1
Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.TBtCF6pWmO/Render
COLORFGBG=15;0
HOME=/Users/nfloris
ITERM_PROFILE=Default
ITERM_SESSION_ID=w3t0p0:BAF42606-4339-4892-A1C5-40759BC537AE
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
LC_CTYPE=UTF-8
LOGNAME=nfloris
OMF_CONFIG=/Users/nfloris/.config/omf
OMF_PATH=/Users/nfloris/.local/share/omf
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dotnet:~/.node/bin:~/.terraform:~/.composer/vendor/bin
PWD=/Users/nfloris
SHELL=/usr/local/bin/fish
SHLVL=1
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.TakpSw68bL/Listeners
TERM=xterm-256color
TERM_PROGRAM=iTerm.app
TERM_PROGRAM_VERSION=3.0.13
TERM_SESSION_ID=w3t0p0:BAF42606-4339-4892-A1C5-40759BC537AE
TMPDIR=/var/folders/8n/pxszz5w97ml_9t3my9y16jpr0000gp/T/
USER=nfloris
XPC_FLAGS=0x0
XPC_SERVICE_NAME=0
__CF_USER_TEXT_ENCODING=0x1F6:0x0:0x0
ELECTRON_NO_ATTACH_CONSOLE=1

I can't be much help but I can confirm that using zsh I experience this issue with cargo run. json {     // See https://go.microsoft.com/fwlink/?LinkId=733558     // for the documentation about the tasks.json format     "version": "0.1.0",     "command": "cargo",     "isShellCommand": true,     "args": ["run"],     "showOutput": "always",     "isBuildCommand": true }, produces the errror Failed to launch external program cargo run. spawn cargo ENOENT

@NinoFloris
(() => {
const electron = require('electron').remote.process.execPath;
const cp = require('child_process');
const mark = 'MARK123';
const env = Object.assign({}, process.env, {
    ELECTRON_RUN_AS_NODE: '1',
    ELECTRON_NO_ATTACH_CONSOLE: '1'
});
const command = `'${electron}' -p '"${mark}" + JSON.stringify(process.env) + "${mark}"'`;
console.log(command);
console.log(process.env.SHELL);
const result = cp.spawnSync(process.env.SHELL, ['-ilc', command], {
    detached: true,
    stdio: ['ignore', 'pipe', process.stderr],
    env,
    encoding: 'utf8'
});
console.log(result);
console.log(result.stdout);
})();

Added a few more console.log calls... let me know what comes out.

I use the fish shell and have the exact same problem. The above snippet seems to return correct output:
'/Applications/Visual Studio Code.app/Contents/MacOS/Electron' -p '"MARK123" + JSON.stringify(process.env) + "MARK123"'
/usr/local/bin/fish
(The console.log(result); line doesn't paste well)
MARK123{"ANDROID_HOME":"/Users/john/Library/Android/sdk","Apple_PubSub_Socket_Render":"/private/tmp/com.apple.launchd.pwMyJ2Vo9p/Render","CLICOLOR":"1","COLORFGBG":"15;0","DISPLAY":"/private/tmp/com.apple.launchd.O7WsAbsJjt/org.macosforge.xquartz:0","ELECTRON_NO_ATTACH_CONSOLE":"1","ELECTRON_RUN_AS_NODE":"1","GOOGLE_API_KEY":"AIzaSyAQfxPJiounkhOjODEO5ZieffeBv6yft2Q","GOPATH":"/Users/john/go","HOME":"/Users/john","HOMEBREW_NO_ANALYTICS":"1","ITERM_PROFILE":"Default","ITERM_SESSION_ID":"w0t0p0:DFD238F3-D951-4C33-AFBC-6F8095A42E87","JAVA_HOME":"/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home","LC_ALL":"en_US.UTF-8","LC_CTYPE":"en_US.UTF-8","LOGNAME":"john","LSCOLORS":"GxFxCxDxBxegedabagaced","OMF_CONFIG":"/Users/john/.config/omf","OMF_PATH":"/Users/john/.local/share/omf","PATH":"/usr/local/sbin:/Users/john/bin:/Users/john/go/bin:/Users/john/.rvm/bin:/usr/local/sbin:/Users/john/bin:/Users/john/go/bin:/Users/john/.rvm/bin:/Users/john/.rvm/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/MacGPG2/bin:/Library/TeX/texbin","PWD":"/Users/john","SHELL":"/usr/local/bin/fish","SHLVL":"4","SSH_AGENT_PID":"16312","SSH_AUTH_SOCK":"/private/tmp/com.apple.launchd.HrWUzNnMvL/Listeners","TERM":"xterm-256color","TERM_PROGRAM":"iTerm.app","TERM_PROGRAM_VERSION":"3.0.13","TERM_SESSION_ID":"w0t0p0:DFD238F3-D951-4C33-AFBC-6F8095A42E87","TMPDIR":"/var/folders/lv/5rvd6xqx20d8h0pych18kz8r0000gn/T/","USER":"john","VSCODE_CLI":"1","VSCODE_IPC_HOOK":"/Users/john/Library/Application Support/Code/1.10.1-main.sock","VSCODE_NLS_CONFIG":"{\"locale\":\"en-gb\",\"availableLanguages\":{}}","VSCODE_NODE_CACHED_DATA_DIR_30754":"/Users/john/Library/Application Support/Code/CachedData","VSCODE_PID":"30754","VSCODE_SHARED_IPC_HOOK":"/Users/john/Library/Application Support/Code/1.10.1-shared.sock","XPC_FLAGS":"0x0","XPC_SERVICE_NAME":"0","__CF_USER_TEXT_ENCODING":"0x1F5:0x0:0x0"}MARK123

In particular, process.env.PATH is correctly populated. The only thing I can think of that could be a problem is that in fish, the $PATH parts are separated differently:
> echo $PATH
/usr/local/sbin /Users/john/bin /Users/john/go/bin /Users/john/.rvm/bin /usr/local/bin /usr/bin /bin /usr/sbin /sbin /opt/X11/bin /usr/local/MacGPG2/bin /Library/TeX/texbin

Ok took some time to diagnose the issue myself, fish goes belly up when -i (interactive) in -ilc is used while no stdin is connected.
So the fix is easy, change
    stdio: ['ignore', 'pipe', process.stderr],

to
    stdio: ['pipe', 'pipe', process.stderr],

That doesn't seem to work for me - but then, my problem seems to occur not when examining the shell environment (as I do have a correctly populated process.env.PATH), but only when launching executables such as sh.

Thanks for the fix @NinoFloris, will verify and push it.
@sietseringers I'm not entirely sure I understand your problem or whether it's an issue with Code itself. Can you create a separate issue and ping me in it?

On OSX, VSCode 1.10.2, $PATH variable has started being /usr/bin:/bin:/usr/sbin:/sbinand now heaps of stuff doesn't work (like dotnet). Is this fix going to resolve this for me? Invoking VScode from terminal fixes the issue.

you could try running the insiders build (it's nightly so the fix is in there)

Latest Insiders build still showing $PATH as /usr/bin:/bin:/usr/sbin:/sbin

@peabnuts123 could you try to run something via cmd+shift+p toggle developer tools and pasting it into the console?
(() => {
const electron = require('electron').remote.process.execPath;
const cp = require('child_process');
const mark = 'MARK123';
const env = Object.assign({}, process.env, {
    ELECTRON_RUN_AS_NODE: '1',
    ELECTRON_NO_ATTACH_CONSOLE: '1'
});
const command = `'${electron}' -p '"${mark}" + JSON.stringify(process.env) + "${mark}"'`;
console.log(command);
console.log(process.env.SHELL);
const result = cp.spawnSync(process.env.SHELL, ['-ilc', command], {
    detached: true,
    stdio: ['ignore', 'pipe', process.stderr],
    env,
    encoding: 'utf8'
});
console.log(result);
console.log(result.stdout);
})();

If you can post the output of this that would help everyone

Oh, weird. I accidentally fixed this issue between then and now. I went to run your script but my PATH was correct in both the insiders and regular builds of VSCode.
I have a check in my .bash_profile that invokes tmux if appropriate. Disabling this check fixed all the things, despite not passing -l as an argument to the terminal in vscode (which previously would fix things but meant tmux would run my interactive terminal, lol).
Here is my full .bash_profile:

export NVM_DIR="/Users/jeff/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm

#if command -v tmux>/dev/null; then
#  [[ ! $TERM =~ screen ]] && [ -z $TMUX ] && exec tmux
#fi

Commenting out the second section fixes everything.

Nice, good to hear!

Do you think this warrants a separate issue? My .bash_profile should not really be affecting vscode like that unless I pass something like -l to the integrated Terminal, right?

Well if you look at how vscode captures the shell's env it does this by starting a shell with -ilc
So yes it's very intended behavior that your .bash_profile (or any other login script for other shells) is being executed.
The idea behind it being that most people (like me) have developer related PATH entries in their login profiles and we'd like vscode to pick those up and let the integrated terminal feel just like our standalone one

Ah i see. That makes sense. It is a bit opaque, but logical... Though now I don't know what was messing with my PATH

@joaomoreno what's the reasoning behind fetching the environment from a login shell? Everything I've read on the subject suggests that this is not how the system was designed and we should instead be encouraging people to set up their environment in either their ~/.profile or ~/.bashrc. See https://github.com/Microsoft/vscode/issues/13701#issuecomment-287828555 and https://github.com/Microsoft/vscode/issues/20145#issuecomment-278172268

I don't think anything gets solved by putting stuff in ~/.bashrc. Double clicking an app still bypasses bash completely, thus the environment won't be there.
Don't know about ~/.profile.

~/.profile runs when you launch a login shell (eg. you log into the OS)
~/.bash_profile runs when you run bash as a login shell (eg. ssh to a terminal)
~/.bashrc runs when you run bash (unless you specify the file to source via CLI args)

Apparently I might be wrong about the ~/.profile thing on Mac http://unix.stackexchange.com/a/119675/115410

@joaomoreno after reading about this I've made the default run as a login shell on macOS https://github.com/Microsoft/vscode/commit/f574b11a2a10f4c227b55be151e49b43d7663958, I don't think it makes sense to run as a login shell on Linux though.

I wasn't aware of ~/.profile. We should then fix it.
On the other hand, this will break people since some tools, such as nvm, install themselves into .bashrc. They need to move that line to .profile. Not sure if it will be worth the hassle.

@joaomoreno from a purist perspective I want it changed... But yeah, probably not the best idea for that reason :sweat_smile:

Verified by doing the following on macOS:

Install homebrew

Install fish

Install dotnet core cli

Set fish to default shell

Quit Terminal.app

Launch Terminal.app to ensure fish starts and finds dotnet on path

Quit VS Code

Launch VS Code

Open dev tools

Run process.env in console to verify the dotnet CLI shows up:
/Users/daimms/.npm-packages/bin:/Users/daimms/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dotnet"

Let me know if that doesn't verify completely 😃

How have you done step 4. Set fish to default shell? See my above configuration:
if command -v tmux>/dev/null; then
  [[ ! $TERM =~ screen ]] && [ -z $TMUX ] && exec tmux
fi

in my .bash_profile

Well your default shell you would change with chsh [-s shellpath]

I see. I don't think that 100% validates it, as I am just running tmux from my normal shell (in my instance). Is this just verifying that adding the -l arg fixes things? I can re-test that later tonight if needed

@peabnuts123 yes I just used chsh, I don't have my Mac on my right now so I can't verify again. We'll likely release first. Have you verified it in Insiders?

Will attempt to verify today but my Macbook seems to have crapped out this morning ........................................ >_>

We're going to have to revert this fix, since it breaks many other people #23639
@NinoFloris Can you show me how your machine is configured? What's your fish version? What's its configuration & plugins? I want to reproduce your issue.

I will double check it later but latest fish version and plugins are not
relevant. Fish will just crash with an error over stderror about an
unconnected stdin if the stdin of the process is not connected like it was
On Fri, Apr 7, 2017, 16:56 João Moreno<EMAIL_ADDRESS>wrote:

We're going to have to revert this fix, since it breaks many other people
#23639 https://github.com/Microsoft/vscode/issues/23639
@NinoFloris https://github.com/NinoFloris Can you show me how your
machine is configured? What's your fish version? What's its configuration &
plugins? I want to reproduce your issue.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/Microsoft/vscode/issues/21655#issuecomment-292559493,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AEBfuQ0riKPIl_DK3NsHtBH_StlSmTjcks5rtk6ogaJpZM4MQQCr
.

FYI my Macbook did in fact die the other day and so I no longer have a copy of OSX to verify any of this on for another week or two. Maybe after then I will get serious and actually submits some PRs or something...

I had some issue and made a helper script. I put it in my path and then when I start a new project I only need to run it once. It install a fake node, npm, nvm, and .nvmrc. Then everything can be run the project root directory.

#!/bin/bash -e
NVM_EXEC=$HOME/.nvm/nvm-exec
NODE=$(which node)
NPM=$(which npm)
NODE_VERSION=$(${NODE} --version)
NPM_VERSION=$(${NPM} --version)
echo $NODE_VERSION >.nvmrc
readlink -f .vnmrc
if [ ! -d ".bin" ]; then
mkdir -p .bin
fi
cd .bin &&
echo "${NODE} $@" >node &&
chmod +x node &&
echo "${NPM} $@" >npm &&
chmod +x npm &&
echo "${NPM} $@" >npm &&
chmod +x npm &&
echo "${NVM_EXEC} $@" >nvm-exec &&
chmod +x nvm-exec
echo "node: ${NODE_VERSION}  npm: ${NPM_VERSION}"

Sample task:

{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "0.1.0",
"suppressTaskName": false,
"options": {
"cwd": "${workspaceRoot}/.bin/"
},
"command": "./node",
"isShellCommand": true,
"args": ["--version"],
"showOutput": "always"
}

In case it helps, I ran into this issue because I had weird stuff on the end of my PATH variable, an error message from a bad rvm install.
After upgrading to 1.12.1 VS Code would no longer find anything on my path, cleaning up my PATH resolved it. Maybe something changed recently in the way PATH is parsed. Running the script above in development tools would just silently fail.
I'm using zsh and nvm on macOS.

cc @jrieken

Having the same issue in 1.12.1, these issues did not exist in 1.12.0. Errors on phpcs, node, npm, flow... basically anything from any path.
While I use zsh and nvm, my paths are also set for bash because XCode needs them. I have verified that the paths are correctly set in both shells.
Opening code from the terminal does not exhibit the behaviour.

@kriscarle @victoriafrench Open the Developer Tools and run:
(() => {
const electron = require('electron').remote.process.execPath;
const cp = require('child_process');
const mark = 'MARK123';
const env = Object.assign({}, process.env, {
    ELECTRON_RUN_AS_NODE: '1',
    ELECTRON_NO_ATTACH_CONSOLE: '1'
});
const command = `'${electron}' -p '"${mark}" + JSON.stringify(process.env) + "${mark}"'`;
console.log(command);
console.log(process.env.SHELL);
const result = cp.spawnSync(process.env.SHELL, ['-ilc', command], {
    detached: true,
    stdio: ['ignore', 'pipe', process.stderr],
    env,
    encoding: 'utf8'
});
console.log(result);
console.log(result.stdout);
})();

What comes out?

@joaomoreno I seem to be having this path issue as well.
macOS: 10.12.4 (16E195)
fish: version 2.5.0
from fish:
➤ echo $PATH
/usr/local/Cellar/node/7.9.0/bin /usr/local/bin /usr/bin /bin /usr/sbin /sbin

from bash:
bash-3.2$ echo $PATH
/usr/local/Cellar/node/7.9.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

Here is the output from running that command in the developer tools.

And here is what happens when I start VSCode or reload the window.

tried to help format it a bit and removed my login name for security purposes.
'/Applications/Visual Studio Code.app/Contents/MacOS/Electron' -p '"MARK123" + JSON.stringify(process.env) + "MARK123"'

  MARK123 : {
    "TMPDIR" : "/var/folders/sm/40nrpg3n1kd9vz9d5gsjsdfm0000gn/T/",
    "__CF_USER_TEXT_ENCODING" : "0x1F5:0x0:0x0",
    "SHELL" : "/bin/zsh",
    "HOME" : "/Users/XXX",
    "Apple_PubSub_Socket_Render" : "/private/tmp/com.apple.launchd.pi584QisyD/Render",
    "SSH_AUTH_SOCK" : "/private/tmp/com.apple.launchd.oo7n6UzM8s/Listeners",

 "PATH" : "/Users/XXX/.nvm/versions/node/v6.10.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Users/XXX/.sdkman/candidates/gradle/current/bin:/Users/XXX/.rvm/bin:~/.npm:/usr/local/lib/node_modules:/usr/local/opt/android-sdk:/usr/local/opt/android-sdk/tools:/usr/local/opt/android-sdk/bin:/usr/local/opt/android-sdk/platform-tools:/usr/local/bin/mongo:/usr/local/bin:/Users/XXX/.rvm/bin:/usr/local/bin:~/.npm:/usr/local/lib/node_modules:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Users/XXX/.sdkman/candidates/gradle/current/bin:/Users/XXX/.rvm/bin:~/.npm:/usr/local/lib/node_modules:/usr/local/opt/android-sdk:/usr/local/opt/android-sdk/tools:/usr/local/opt/android-sdk/bin:/usr/local/opt/android-sdk/platform-tools:/usr/local/bin/mongo:/usr/local/bin:/usr/local/opt/android-sdk:/usr/local/opt/android-sdk/tools:/usr/local/opt/android-sdk/bin:/usr/local/opt/android-sdk/platform-tools:/usr/local/bin/mongo",

    "LOGNAME" : "XXX",
    "XPC_SERVICE_NAME" : "com.microsoft.VSCode.238892",
    "USER" : "XXX",
    "XPC_FLAGS" : "0x0",
    "GOOGLE_API_KEY" : "AIzaSyAQfxPJiounkhOjODEO5ZieffeBv6yft2Q",
    "LC_NUMERIC" : "C",
    "VSCODE_NODE_CACHED_DATA_DIR_32314" : "/Users/XXX/Library/Application Support/Code/CachedData/f6868fce3eeb16663840eb82123369dec6077a9b",
    "VSCODE_NLS_CONFIG" : {
       "locale" : "en-us",
       "availableLanguages": {}
    },
     "VSCODE_PID" : "32314",
     "VSCODE_IPC_HOOK" : "/Users/XXX/Library/Application Support/Code/1.12.1-main.sock",
     "ANDROID_HOME" : "/usr/local/opt/android-sdk",
     "ANDROID_PLATFORM" : "/usr/local/opt/android-sdk/tools:/usr/local/opt/android-sdk/bin:/usr/local/opt/android-sdk/platform-tools",
    "GRADLE_HOME" : "/Users/XXX/.sdkman/candidates/gradle/current",
    "JAVA_HOME" : "/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home",
    "LESS" : "-R",
    "LSCOLORS" : "Gxfxcxdxbxegedabagacad",
    "MANPATH" : "/Users/XXX/.nvm/versions/node/v6.10.3/share/man:/usr/share/man:/usr/local/share/man:/Library/Frameworks/Mono.framework/Versions/Current/share/man:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/share/man:/Applications/Xcode.app/Contents/Developer/usr/share/man:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/man",
     "MONGO_PATH" : "/usr/local/bin/mongo",
     "NVM_BIN" : "/Users/XXX/.nvm/versions/node/v6.10.3/bin",
     "NVM_CD_FLAGS" : "-q",
     "NVM_DIR" : "/Users/XXX/.nvm",
    "NVM_IOJS_ORG_MIRROR" : "https://iojs.org/dist",
    "NVM_NODEJS_ORG_MIRROR" : "https://nodejs.org/dist",
    "NVM_PATH" : "/Users/XXX/.nvm/versions/node/v6.10.3/lib/node",
    "OLDPWD" : "/",
    "PAGER" : "less",
    "PWD" : "/",
    "SDKMAN_CANDIDATES_DIR" : "/Users/XXX/.sdkman/candidates",
    "SDKMAN_CURRENT_API" : "https://api.sdkman.io/2",
    "SDKMAN_DIR" : "/Users/XXX/.sdkman",
    "SDKMAN_LEGACY_API" : "https://api.sdkman.io/1",
    "SDKMAN_PLATFORM" : "Darwin",
    "SDKMAN_VERSION" : "5.1.4+78",
    "SHLVL" : "0",
    "ZSH" : "/Users/XXX/.oh-my-zsh",
    "_" : "/Applications/Visual Studio Code.app/Contents/MacOS/Electron",
    "ELECTRON_RUN_AS_NODE" : "1",
    "ELECTRON_NO_ATTACH_CONSOLE" : "1",
    "LC_CTYPE" : ""
}

@joaomoreno Please pretty please I'm asking you, after yet another email of people that actually found the cause of their problems and then would actually write a reply (which is just a small percentage of people that have these issues)
Please at least implement /etc/paths.d fallback behaviour for osx. When PATH enumeration does not work it breaks almost every conceivable case of vscode language server integration behavior ranging from your core group of users (node and npm issues) to your companies own language servers for dotnet.
This really needs a little extra escalation

I've encountered the issue again after a few relaunches of VS Code, and I think I've tracked down why version 1.12.1 started causing this for some of us. At the top of the development console is an error renderer did not receive lazyEnv in time which was introduced in 1.12.1 by https://github.com/Microsoft/vscode/commit/f3ffc2ed9b0318f236201aa2c0447eec242f4738
This adds a 2000 ms timeout when retrieving the shell to fix a hang issue https://github.com/Microsoft/vscode/issues/24435. The problem for me is that with nvm, rvm, lots of Oh My Zsh plugins, etc. my shell can take more than 2 seconds to load... mildly annoying but not to the point that I've ever tried to fix it.
Maybe a quick solution is to increase the timeout a bit, out of "mildly annoying" range? :)

Seeing the same renderer did not receive lazyEnv in time warning. I don't have a lot of zsh plugins but I do initialize docker which takes a second or two.

renderer did not receive lazyEnv in time + 1
zsh + omzsh plugins + tmux + tmux plugins + nvm etc. taking around 5-8 seconds to load on my machine.

Excellent. Many thanks for the renderer did not receive lazyEnv in time finding, guys.
@kriscarle @victoriafrench @burakcan You three should stop commenting on this issue and move over to #26438. Your issue isn't the same as @NinoFloris.

@NinoFloris last I heard from you was:

I will double check it later but it was with the latest fish version, and plugins are not
relevant. Fish will just crash with an error on stderror about an
unconnected stdin if the stdin of the node process is not connected like it was

I was waiting for us to resume our findings. Let me look into that paths.d solution.

I've having the same issue with 1.12.2 and Fish 2.5.0.
With the code snippet above I get no output, i.e. result.stdout is an empty string.
However, it works when I remove the -i flag from the fish invocation, i.e. run fish -lc instead fish -ilc. In other words, result.stdout contains my environment variables when I change the code to run a non-interactive shell.  I do not know what's causing this behaviour, perhaps fish expects an attached TTY when running interactively.
It seems to me though that vscode should use a non-interactive shell in any case.  Interactive shells may load all sorts of additional plugins that could alter the shell's behaviour unpredictably; that's less likely to happen for a non-interactive shell.

I’m not a shell guru so, for anyone else using fish and having this problem, a workaround is to start VS Code from the shell: code . or code <your project dir>, which then inherits the correct PATH.
When running the test scripts, my output is similar to @sorahn’s above, with PATH being set to /usr/bin:/bin:/usr/sbin:/sbin. All of these paths are controlled by System Integrity Protection so I can’t fix the problem by, say, adding a link to node and npm in /usr/bin.

oh snap.  @natesilva that totally worked.  Great workaround!

@joaomoreno just checking in, any news on a paths.d fallback or a fish fix?

The latest release has fixed this for me. Thanks!

Fixed for me now... Thanks!

Only running via code . works for me unfortunately - I have no idea why this would be.

@cliffrowley this is because each process inherits the environment (PATH variables and all) from their parent process.
As your shell can parse its own config without any issues it has a full environment it can pas down to any process it starts, like when you do code ., then internally vscode still fails to parse your terminal's config however it already inherited a parsed one from your shell and so all works even though it failed to do its own parsing.
The real problem here is that normally OSX processes are started by launchd (if you run via Finder, dock etc). launchd however doesn't parse your terminal config (it just doesn't know of it) and so does not pass down any of the necessary env variables. So vscode normally has to rely on its own env parsing mechanism and for more exotic shell configurations it breaks as it's basically a hack. That's why we're all here :)

@NinoFloris thanks for the explanation - I was peripherally aware but without the specifics.  Is this only a Fish shell issue?

It mostly is, but zsh also had some troubles as did some more exotic bash profiles, although I think all but Fish's problems have been hacked around by now

@NinoFloris ah, brilliant - thanks for the pointers, I shall await a fix patiently and not worry about it affecting multi root support!

 I have Fish shell installed and set up as my default shell. And I can't reproduce the issue: I can easily get the environment I configured in ~/.config/fish/config.fish, on my machine. It will be easier if you simply get me the exact version number and let me know whatever customisations you have in Fish.
Nevertheless, I have created #29864 which additionally gets more info from path_helper. Let me know how it goes.

@joaomoreno, so happy to have run across this issue after tearing all my hair out trying to understand why my extensions had a path of /usr/bin:/bin:/usr/sbin:/sbin. I'm on OSX, fish 2.5.0., 1.14.0.
Getting the same behavior as @lunaryorn above — removing the -i or changing the spawn's stdio to ['pipe', 'pipe', process.stderr] results in returned output containing the correct PATH. If I dig into result.envPairs it's still PATH=/usr/bin:/bin:/usr/sbin:/sbin though, I don't grok what's going on there.
This is causing the vscode flow extension to blow up, claiming that node isn't in the PATH, because node isn't installed in any one of /usr/bin:/bin:/usr/sbin:/sbin.
I tried the insiders build you linked in your last comment here, but it doesn't seem to solve anything. Any pointers on how I can try running a build with the changes from #29864? Do I just need to figure out how to build VSCode? Are there any shortcuts there?
Thanks for all of your hard work on this — it's really appreciated! ✨ 🍰

@NinoFloris Let me know when you try this out.

Im having issues with Fish and my PATH as well.  It cannot find node nor shfmt when opening projects.  In order to suppress these warnings, I must launch VS Code from the CLI.

cc @NinoFloris

hope I can help here, Ive been dealing with this for months on the Insiders builds.  thanks!

for me, I feel this is related, since I've never been able to resolve this one without opening from CLI
https://github.com/Microsoft/vscode/issues/24961

this issue is no longer present for me in the latest insiders version!

Interesting. @NinoFloris you too?

I haven't had real issues for a while as tools are including more and more discovery logic to prevent these issues with relying on PATH :)

Alright man, I'll close this then. Sorry we didn't really address it.


Initialize questionset collections with one empty set

... to be discussed with the steering group and others.

Adding @jmfrenzel and @harenk to the conversation, so that we don't forget to discuss this (offline).

I am pretty convinced that this is not a good idea, but we should settle this for 2.3.0.


Why Zesty - Hybrid Solution Section Check Boxes

https://kfg6bckb-dev.webengine.zesty.io/why-zesty/
Can we change these icons to match the icons in the screenshot below?
Current

Change to:

both pictures are same

Sorry, see below:

Approved.


Export Objects

Tagline: Formalizing a reflective API to create export bindings for Reflective Module Records.
Details

Removing the confusing mutator in favor of re-usable Export Objects
Reflect.Module.Export.let()
Reflect.Module.Export.var()
Reflect.Module.Export.const()
Reflect.Module.Export.from()

Usage
import * as fs from "fs";

var Export = Reflect.Module.Export;

var y, TAU;

// reflective API takes Export objects to represent each export slot
var mod = new Reflect.Module({
  // initialized mutable (includes "uninitialized" var)
  x: Export.var(),
  y: (y = Export.var(42)),

  // uninitialized mutable (let, class)
  z: Export.let(),

  // initialized immutable (const)
  PI: Export.const(Math.PI),

  // uninitialized immutable (const)
  TAU: (TAU = Export.const()),

  // indirect binding from arbitrary object
  bar: Export.from(delegate, "bar"), // optimizable special case; helps interop with existing module systems

  // re-export (heavily optimizable since `fs` is known to be a module namespace object)
  readFile: Export.from(fs, "readFile")
});

console.log(mod.y); // 42
y.set(43);          // mutates the y slot
console.log(mod.y); // 43
TAU.get();          // throws TDZ error

Re-exporing all from Module
function exportAllFrom(ns) {
  let o = Object.create(null);
  Object.keys(ns).forEach(key => {
    o[key] = Reflect.Module.Export.from(ns, key);
  });
  return Reflect.Module(o);
} // this return a new namespace object for the new reflective module that was created from the namespace argument.

Node Compat-Mode
function exportAllFromCJS(cjs) {
  let o = Object.create(null);
  Object.keys(cjs).forEach(key => {
    o[key] = Reflect.Module.Export.let(cjs[key]);
  });
  return Reflect.Module(o);
} // this return a new namespace object for the new reflective module that was created from the cjs module argument.

Rendered HTML
https://rawgit.com/caridy/6430042924e0436918ea/raw/0f9e2224f1c29ac4449000f5350fdcb2ae439157/loader-pr129.html

/cc @dherman @wycats

I'm curious what happened to the descriptors? Why is the API all now exporting objects, no descriptors? It seems like it'd be handy to be handy to be able to getter/setters.

@rektide the descriptors we had before were not object property descriptors, they were export descriptors.
As for getter/setter, we have been drilling on the requirements, eventually we will provide that as a new feature, but that will require spec changes in 262 and discussions with implementers (which we have done some already), which will take longer.

We have decided to maintain the old API (export descriptors). Few thoughts:

it reflects better the construction of a source text module record
the extra machinery for the special "export module record" is a no-go
Export api has probably better ergonomics, but this is not intended for citizen developers, but low level (libraries and fw) code.
Export doesn't give us the edge we thought in terms of functionalities, everything could be replicated with the export descriptors in the same way you would get it done using declarative syntax.

note: there are few editorial things from this PR that we will cherry-pick

@dherman did I missed anything else here?


Question: Is this project being actively worked upon?

Hi.
I was thinking to contribute to this project by starting with some of the issues.
Wanted to know if the original maintainers are active so that the pull requests can be merged?

Yes, this project is active. Up until today though it would have been inconvenient for merging pull requests, as I've had a huge update waiting to be released, but it's out now!


Improving plot_rotor

There was an error that shaft elements were plotting with 2 times their respective radius.
I enlarged the plot window size and distributed the axis size so that the rotor is presented with the correct proportions in relation to its dimensions.
Also, adds the slenderness ratio parameter (equation: GAL**2 / E*I ) to each shaft element. It calculates the ratio using some global distance measures, rather than basing it upon individual element dimensions. The user is returned an warning message if it's lower than a certain value, which could affect the convergence analysis.

Following issue #114, for now, these commits should correct only the issue items 2, 3 and 4.

Codecov Report

Merging #117 into master will decrease coverage by 0.3%.
The diff coverage is 16%.

@@            Coverage Diff             @@
##           master     #117      +/-   ##
==========================================
- Coverage   61.32%   61.02%   -0.31%
==========================================
  Files           9        9
  Lines        1766     1778      +12
==========================================
+ Hits         1083     1085       +2
- Misses        683      693      +10

Impacted Files
Coverage Δ

ross/rotor_assembly.py
73.5% <0%> (-0.8%)
:arrow_down:

ross/shaft_element.py
89.05% <28.57%> (+0.16%)
:arrow_up:

ross/bearing_seal_element.py
67.2% <33.33%> (-0.37%)
:arrow_down:

ross/disk_element.py
70.73% <50%> (-0.88%)
:arrow_down:

Continue to review full report at Codecov.

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


Upload .tgz file for Linux releases.

Could we either make this a gz (no 'tar') or move the executable into a folder.
It's generally expected that a tar.gz extracts into a folder of the same name.

I think we need this as a tar-ball, because we want to preserve file permissions (u+x). I get the desire to not pollute the working directory with lots of stuff when you untar, but since this is a single file, it feels a bit odd to prefer unpacking that into a single directory with a single file within.


Fix: ResponseCompression option.

Signed-off-by: dblock<EMAIL_ADDRESS>Description
Noticed that I couldn't disable Accept: gzip despite being advertised. Option not being copied from the builder.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

@reta @VachaShah care to CR? thanks!


[Feature Request]input directory and out directory.

For batch processing of images, set an input directory and output directory

FileManager might be what you need: https://lama-cleaner-docs.vercel.app/features/file_manager


Pep it

Ran all of the Python through the autopep8 tool. I am not necessarily advocating that we enforce PEP8 in this code base right now, but using the tool has allowed me to easily look at warnings that show global variable usage, or even unintentional use of variables grabbed in from the global namespace. This will aid in tracking down issues, since those kind of warnings are pretty much the only ones left in the code.

Note that this is a very "light" touch with the autopep8 tool. The tool was invoked with zero --aggressive flags, so PEP8 violations like line length are still allowed. But it does increase readability significantly, in my view.

this PR passes the 'big' test, which is run like this:
py.test -s dynamic/tests/test_sstpi.py


Enquiry about Baseline result using resnet50

Dear @nixingyang
I would like to ask about the results that you proposed in your paper when using resnet50 as backbone, which are<EMAIL_ADDRESS>and<EMAIL_ADDRESS>in MSMT dataset. I looked back at the paper that you adapt the code "Adaptive L2 Regularization in Person Re-Identification" and their results for resnet50 was just 57.7% and 79.1% for mAP and R1 respectively. I could not figure out why do you have such a good improvement; therefore, I really look forward to hearing your opinions about it. Hopefully, I do not cause any convenience for you.
Thank you in advance!

Hi,
Thanks for your interest in our work.
In AdaptiveL2Regularization, we used the official TensorFlow/Keras backbones. Based on this table, the top-1 accuracy of ResNet50 is 74.928.
In FlipReID, we used the backbones provided in imgclsmob. Based on this table, the top-1 accuracy of ResNet-50 is 100-22.09==77.91.
As far as I can remember, the main reason for the performance boost is the change of the pre-trained backbones. I might have also made some minor modifications here or there.
All the best.
Xingyang

Thank you. I got it.


Expected root cause […] to almost satisfy the current partial solution

Is it reproducible with SwiftPM command-line tools: swift build, swift test, swift package etc?

[X] Confirmed reproduction steps with SwiftPM CLI.

Description
I got the following internal error while running swift package resolve:
error: InternalError(description: "Internal error. Please file a bug at https://github.com/apple/swift-package-manager/issues with this info. Expected root cause {json-logger[everything] 0.2.0, ¬generic-json[everything] 3.0.0..<4.0.0} to almost satisfy the current partial solution:
 * [Decision 0: puremonolith[everything] 1.0.0]
 * [Derivation: urlrequestoperation[everything] 2.0.0-alpha.15..<3.0.0 ← {puremonolith[everything] 1.0.0, ¬urlrequestoperation[everything] 2.0.0-alpha.15..<3.0.0}]
 * [Derivation: swift-log[everything] 1.5.1..<2.0.0 ← {puremonolith[everything] 1.0.0, ¬swift-log[everything] 1.5.1..<2.0.0}]
 * [Derivation: routing-kit[everything] 4.8.2..<5.0.0 ← {puremonolith[everything] 1.0.0, ¬routing-kit[everything] 4.8.2..<5.0.0}]
 * [Derivation: unwraporthrow[everything] 1.0.0..<2.0.0 ← {puremonolith[everything] 1.0.0, ¬unwraporthrow[everything] 1.0.0..<2.0.0}]
 * [Derivation: safeglobal[everything] 0.1.0..<1.0.0 ← {puremonolith[everything] 1.0.0, ¬safeglobal[everything] 0.1.0..<1.0.0}]
 * [Derivation: swift-email[everything] 0.2.3..<1.0.0 ← {puremonolith[everything] 1.0.0, ¬swift-email[everything] 0.2.3..<1.0.0}]
 * [Derivation: httpcoders[everything] 0.1.2..<1.0.0 ← {puremonolith[everything] 1.0.0, ¬httpcoders[everything] 0.1.2..<1.0.0}]
 * [Derivation: generic-json[everything] 3.0.0..<4.0.0 ← {puremonolith[everything] 1.0.0, ¬generic-json[everything] 3.0.0..<4.0.0}]
 * [Derivation: swift-log[everything] 1.5.3..<2.0.0 ← {puremonolith[everything] 1.0.0, ¬swift-log[everything] 1.5.3..<2.0.0}]
 * [Derivation: json-logger[everything] 0.2.0..<1.0.0 ← {puremonolith[everything] 1.0.0, ¬json-logger[everything] 0.2.0..<1.0.0}]
 * [Derivation: clt-logger[everything] 0.7.1..<1.0.0 ← {puremonolith[everything] 1.0.0, ¬clt-logger[everything] 0.7.1..<1.0.0}]
 * [Derivation: stripe-kit[everything] 23.1.0..<24.0.0 ← {puremonolith[everything] 1.0.0, ¬stripe-kit[everything] 23.1.0..<24.0.0}]
 * [Derivation: vapor[everything] 4.67.0..<5.0.0 ← {puremonolith[everything] 1.0.0, ¬vapor[everything] 4.67.0..<5.0.0}]
 * [Derivation: redis[everything] 4.10.0..<5.0.0 ← {puremonolith[everything] 1.0.0, ¬redis[everything] 4.10.0..<5.0.0}]
 * [Derivation: queues-redis-driver[everything] 1.0.3..<2.0.0 ← {puremonolith[everything] 1.0.0, ¬queues-redis-driver[everything] 1.0.3..<2.0.0}]
 * [Derivation: queues[everything] 1.11.1..<2.0.0 ← {puremonolith[everything] 1.0.0, ¬queues[everything] 1.11.1..<2.0.0}]
 * [Derivation: jwt[everything] 4.2.1..<5.0.0 ← {puremonolith[everything] 1.0.0, ¬jwt[everything] 4.2.1..<5.0.0}]
 * [Derivation: fluent-postgres-driver[everything] 2.4.0..<3.0.0 ← {puremonolith[everything] 1.0.0, ¬fluent-postgres-driver[everything] 2.4.0..<3.0.0}]
 * [Derivation: fluent[everything] 4.5.0..<5.0.0 ← {puremonolith[everything] 1.0.0, ¬fluent[everything] 4.5.0..<5.0.0}]
 * [Derivation: apns[everything] 4.0.0..<5.0.0 ← {puremonolith[everything] 1.0.0, ¬apns[everything] 4.0.0..<5.0.0}]
 * [Derivation: swift-prometheus[everything] 2.0.0..<3.0.0 ← {puremonolith[everything] 1.0.0, ¬swift-prometheus[everything] 2.0.0..<3.0.0}]
 * [Derivation: legibleerror[everything] 1.0.6..<2.0.0 ← {puremonolith[everything] 1.0.0, ¬legibleerror[everything] 1.0.6..<2.0.0}]
 * [Derivation: unwraporthrow[everything] 1.0.1-rc.1..<2.0.0 ← {puremonolith[everything] 1.0.0, ¬unwraporthrow[everything] 1.0.1-rc.1..<2.0.0}]
 * [Derivation: safeglobal[everything] 0.2.0..<1.0.0 ← {puremonolith[everything] 1.0.0, ¬safeglobal[everything] 0.2.0..<1.0.0}]
 * [Derivation: swift-xdg[everything] 1.0.0-beta.1.0.1..<2.0.0 ← {puremonolith[everything] 1.0.0, ¬swift-xdg[everything] 1.0.0-beta.1.0.1..<2.0.0}]
 * [Derivation: swift-task-queue[everything] 1.1.0..<2.0.0 ← {puremonolith[everything] 1.0.0, ¬swift-task-queue[everything] 1.1.0..<2.0.0}]
 * [Derivation: generic-json[everything] 3.1.0-beta..<4.0.0 ← {puremonolith[everything] 1.0.0, ¬generic-json[everything] 3.1.0-beta..<4.0.0}]
 * [Derivation: collectionconcurrencykit[everything] 0.3.0..<1.0.0 ← {puremonolith[everything] 1.0.0, ¬collectionconcurrencykit[everything] 0.3.0..<1.0.0}]
 * [Derivation: tomldecoder[everything] 0.2.2..<1.0.0 ← {puremonolith[everything] 1.0.0, ¬tomldecoder[everything] 0.2.2..<1.0.0}]
 * [Derivation: swift-metrics[everything] 2.2.0..<3.0.0 ← {puremonolith[everything] 1.0.0, ¬swift-metrics[everything] 2.2.0..<3.0.0}]
 * [Derivation: ¬json-logger[everything] 0.2.1..<1.0.0 ← {json-logger[everything] 0.2.1..<1.0.0}]
")

My Package.swift:
// swift-tools-version:5.8
import PackageDescription
import Foundation

/* To find a valid test for Xcode detection, we sneakily inserted the following code in the products definition, just before the return:
 *    for (key, val) in ProcessInfo.processInfo.environment {
 *       res.append(.executable(name: key, targets: [val]))
 *    }
 * This generated a bunch of errors about invalid targets for the executable products,
 *  w/ the name of the executable being the key of the environment value and the target name its value.
 * From this we devised a check which was likely to be true in Xcode and unlikely to be true anywhere else.
 *
 * When tested, the actual value of the environment key we chose was `com.apple.dt.Xcode`.
 * We did not test directly for this in the check as _maybe_ some versions of Xcode have a different bundle ID (I don’t think so but we never know…). */
let isXcode = ProcessInfo.processInfo.environment["__CFBundleIdentifier"]?.lowercased().contains("xcode") ?? false

/* If the Package.swift is resolved in Xcode we set a different name for the executable name.
 * We need to do this because Xcode is a little bit dumb and has some kind of weirdnesses or failures
 *  when the bundle has a different name than the executable name (including, but not limited to: the tests do not compile). */
let executableName = if isXcode {"PureMonolith"} else {"pure-monolith"}

let package = Package(
   name: "PureMonolith",
   platforms: [
      .macOS(.v13)
   ],
   products: {
      var res = [Product]()
      res.append(.executable(name: executableName, targets: ["PureMonolith"]))
      return res
   }(),
   dependencies: {
      var res = [Package.Dependency]()
      res.append(.package(url: "git@gitlab.com:togever/togever-api-model.git",            branch: "develop"))
      res.append(.package(url: "https://github.com/apple/swift-log.git",                  from: "1.4.4"))
      res.append(.package(url: "https://github.com/apple/swift-metrics.git",              from: "2.2.0"))
      res.append(.package(url: "https://github.com/dduan/TOMLDecoder.git",                from: "0.2.2"))
      res.append(.package(url: "https://github.com/Frizlab/CollectionConcurrencyKit.git", from: "0.3.0"))
      res.append(.package(url: "https://github.com/Frizlab/generic-json.git",             from: "3.1.0-beta"))
      res.append(.package(url: "https://github.com/Frizlab/swift-email.git",              from: "0.2.1"))
      res.append(.package(url: "https://github.com/Frizlab/swift-task-queue.git",         from: "1.1.0"))
      res.append(.package(url: "https://github.com/Frizlab/swift-xdg.git",                from: "1.0.0-beta.1.0.1"))
      res.append(.package(url: "https://github.com/Frizlab/SafeGlobal.git",               from: "0.2.0"))
      res.append(.package(url: "https://github.com/Frizlab/UnwrapOrThrow.git",            from: "1.0.1-rc.1"))
      res.append(.package(url: "https://github.com/mxcl/LegibleError.git",                from: "1.0.6"))
      res.append(.package(url: "https://github.com/swift-server/swift-prometheus.git",    from: "2.0.0"))
      res.append(.package(url: "https://github.com/vapor/apns.git",                       from: "4.0.0"))
      res.append(.package(url: "https://github.com/vapor/fluent.git",                     from: "4.5.0"))
      res.append(.package(url: "https://github.com/vapor/fluent-postgres-driver.git",     from: "2.4.0"))
      res.append(.package(url: "https://github.com/vapor/jwt.git",                        from: "4.2.1"))
      res.append(.package(url: "https://github.com/vapor/queues.git",                     from: "1.11.1"))
      res.append(.package(url: "https://github.com/vapor/queues-redis-driver.git",        from: "1.0.3"))
      res.append(.package(url: "https://github.com/vapor/redis.git",                      from: "4.10.0"))
      res.append(.package(url: "https://github.com/vapor/vapor.git",                      from: "4.67.0"))
      res.append(.package(url: "https://github.com/vapor-community/stripe-kit.git",       from: "23.1.0"))
      res.append(.package(url: "https://github.com/xcode-actions/clt-logger.git",         from: "0.7.1"))
      res.append(.package(url: "https://github.com/xcode-actions/json-logger.git",        from: "0.2.0"))
      res.append(.package(url: "https://github.com/xcode-actions/loki-logger.git",        branch: "main"))
      return res
   }(),
   targets: {
      var res = [Target]()
      res.append(.executableTarget(
         name: "PureMonolith",
         dependencies: {
            var res = [Target.Dependency]()
            res.append(.product(name: "CLTLogger",                package: "clt-logger"))
            res.append(.product(name: "CollectionConcurrencyKit", package: "CollectionConcurrencyKit"))
            res.append(.product(name: "Email",                    package: "swift-email"))
            res.append(.product(name: "Fluent",                   package: "fluent"))
            res.append(.product(name: "FluentPostgresDriver",     package: "fluent-postgres-driver"))
            res.append(.product(name: "JSONLogger",               package: "json-logger"))
            res.append(.product(name: "JWT",                      package: "jwt"))
            res.append(.product(name: "LegibleError",             package: "LegibleError"))
            res.append(.product(name: "Logging",                  package: "swift-log"))
            res.append(.product(name: "LokiLogger",               package: "loki-logger"))
            res.append(.product(name: "Metrics",                  package: "swift-metrics"))
            res.append(.product(name: "Prometheus",               package: "swift-prometheus"))
            res.append(.product(name: "PureModel",                package: "togever-api-model"))
            res.append(.product(name: "Queues",                   package: "queues"))
            res.append(.product(name: "QueuesRedisDriver",        package: "queues-redis-driver"))
            res.append(.product(name: "Redis",                    package: "redis"))
            res.append(.product(name: "SafeGlobal",               package: "SafeGlobal"))
            res.append(.product(name: "StripeKit",                package: "stripe-kit"))
            res.append(.product(name: "TaskQueue",                package: "swift-task-queue"))
            res.append(.product(name: "TOMLDecoder",              package: "TOMLDecoder"))
            res.append(.product(name: "UnwrapOrThrow",            package: "UnwrapOrThrow"))
            res.append(.product(name: "Vapor",                    package: "vapor"))
            res.append(.product(name: "VaporAPNS",                package: "apns"))
            res.append(.product(name: "XDG",                      package: "swift-xdg"))
            return res
         }(),
         swiftSettings: {
            var res = [SwiftSetting]()
            /* Enable better optimizations when building in Release configuration.
             * Despite the use of the `.unsafeFlags` construct required by SwiftPM, this flag is recommended for Release builds.
             * See <https://github.com/swift-server/guides/blob/main/docs/building.md#building-for-production> for details. */
            res.append(.unsafeFlags(["-cross-module-optimization"], .when(configuration: .release)))
            /* Check for concurrency issues. */
            res.append(.enableExperimentalFeature("StrictConcurrency"))
            return res
         }()
      ))
      res.append(.testTarget(name: "PureMonolithTests", dependencies: {
         var res = [Target.Dependency]()
         res.append(.target(name: "PureMonolith")) /* <- Tested target. */
         res.append(.product(name: "CLTLogger",  package: "clt-logger"))
         res.append(.product(name: "Logging",    package: "swift-log"))
         res.append(.product(name: "SafeGlobal", package: "SafeGlobal"))
         res.append(.product(name: "XCTVapor",   package: "vapor"))
         return res
      }(), swiftSettings: [.enableExperimentalFeature("StrictConcurrency")]))
      return res
   }()
)

Expected behavior
The graph should resolve.
Actual behavior
We get an internal error.
Steps to reproduce
Create a project with the given Package.swift and try to resolve it..
Swift Package Manager version/commit hash
Swift Package Manager - Swift 5.10.0-dev
Swift & OS version (output of swift --version ; uname -a)
swift-driver version: <IP_ADDRESS> Apple Swift version 5.10 (swiftlang-<IP_ADDRESS> clang-15<IP_ADDRESS>)
Target: arm64-apple-macosx14.0
Darwin Frizlabs-MacBook-Pro-Mojo.local 23.4.0 Darwin Kernel Version 23.4.0: Fri Mar 15 00:12:37 PDT 2024; root:xnu-10063.101.17~1/RELEASE_ARM64_T6031 arm64

Note: togever-api-model depends on generic-json “from: "3.0.0"”.

Closing as I cannot reproduce anymore


markers plugin: check for event after every add/remove

Short description of changes:
Fixing of issue, added listeners check after add
Breaking in the external API:
N/A
Breaking changes in the internal API:
N/A
Todos/Notes:
Not fully tested
Related Issues and other PRs:
#2560

Not fully tested

What is the plan for this PR @rstefek?

Not fully tested

What is the plan for this PR @rstefek?

I will prepare local development environment for the plugin and provide results.

Hello,
functionality tested on local environment.

Marker is draggable after adding later than in initialization
Events are called correctly just once even if more draggable markers are added (fix to original code was needed)

Hi,
added entry for version 6.4.0 (unreleased)

Coverage increased (+0.1%) to 81.308% when pulling 0a05ebc03d25dfc4141eb2727ed08dc8265e21d4 on rstefek:patch-1 into 714ac4421806cb807405834c6e5d887594d1e420 on katspaugh:master.


Remove the docker-multinode guide since it's not working anymore

ref: https://goo.gl/VxSaKx
cc @jbeda @brendandburns @bgrant0607 @justinsb @mikedanese

This change is

/lgtm

/lgtm

belated lgtm

Sorry, I should have waited for you before hitting the big green button. It was just so tempting.... 😄

No worries.  Don't sync on me if you want to get stuff done!


Documentation

What's an emailObject look like?

Yeah - one more for the todo list.
I think that the email object will end up being driver specific. Like if you're using the mandrill driver then you use the mandrill object, etc. I like that because there's no BS object mutation that has to happen, but kind of confusing that this works with multiple objects.
My thought is that the drivers should be split out into their own packages and passed in as options on the hapi plugin, also, so the documentation for the email object to use will be on those individual packages. Right now the only driver is the mandrill driver right in this package and the email object it expects is the mandrill object which looks like this:
var message = {
    "html": "
Example HTML content
",
    "text": "Example text content",
    "subject": "example subject",
    "from_email"<EMAIL_ADDRESS>    "from_name": "Example Name",
    "to": [{
            "email"<EMAIL_ADDRESS>            "name": "Recipient Name",
            "type": "to"
        }],
    "headers": {
        "Reply-To"<EMAIL_ADDRESS>    },
    "important": false,
    "track_opens": null,
    "track_clicks": null,
    "auto_text": null,
    "auto_html": null,
    "inline_css": null,
    "url_strip_qs": null,
    "preserve_recipients": null,
    "view_content_link": null,
    "bcc_address"<EMAIL_ADDRESS>    "tracking_domain": null,
    "signing_domain": null,
    "return_path_domain": null,
    "merge": true,
    "merge_language": "mailchimp",
    "global_merge_vars": [{
            "name": "merge1",
            "content": "merge1 content"
        }],
    "merge_vars": [{
            "rcpt"<EMAIL_ADDRESS>            "vars": [{
                    "name": "merge2",
                    "content": "merge2 content"
                }]
        }],
    "tags": [
        "password-resets"
    ],
    "subaccount": "customer-123",
    "google_analytics_domains": [
        "example.com"
    ],
    "google_analytics_campaign"<EMAIL_ADDRESS>    "metadata": {
        "website": "www.example.com"
    },
    "recipient_metadata": [{
            "rcpt"<EMAIL_ADDRESS>            "values": {
                "user_id": 123456
            }
        }],
    "attachments": [{
            "type": "text/plain",
            "name": "myfile.txt",
            "content": "ZXhhbXBsZSBmaWxl"
        }],
    "images": [{
            "type": "image/png",
            "name": "IMAGECID",
            "content": "ZXhhbXBsZSBmaWxl"
        }]
};


"Could not establish connection" modal opens in unrelated VSCode instance

Does this issue occur when all extensions are disabled?: Yes/No

VS Code Version: 1.86.1 (Universal)
OS Version: Darwin arm64 23.0.0, MacOS Sonoma 14.0 (23A344)

Steps to Reproduce:

Open one VSCode instance pointing to a local directory
Open another VSCode instance, using remote development
Force the connection to fail (in our case, this is after the computer goes to sleep, looses VPN connection, etc)
See the "Could not establish connection" modal open on top of the local VSCode window, instead of the remote one

Thanks for creating this issue! It looks like you may be using an old version of VS Code, the latest stable release is 1.87.2. Please try upgrading to the latest version and checking whether this issue remains.
Happy Coding!

Can you try to reproduce with our nightly insider builds? You can give our preview releases a try from: https://code.visualstudio.com/insiders/

Thanks! I tried again in 1.87.2 and I couldn't reproduce.


Added getContainerclient and getServiceClient

Resolves #17152

We didn't in .NET, which is why I didn't do it here, but we can ask if we should expand this to other packages and we want to keep parity there


move install script to the top

Related to issue #10489 that I just opened.
The installer script will be the most relevant for people visiting this page. It makes sense to make it more visible at the top of the page.
I almost missed it when I was reading the documentation because of its previous placement.

@lawndoc please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.
@microsoft-github-policy-service agree [company="{your company}"]

Options:

(default - no company specified) I have sole ownership of intellectual property rights to my Submissions and I am not making Submissions in the course of work for my employer.
(when company given) I am making Submissions in the course of work for my employer (or my employer has intellectual property rights in my Submissions by contract or applicable law). I have permission from my employer to make Submissions and enter into this Agreement on behalf of my employer. By signing below, the defined term “You” includes me and my employer.

Contributor License Agreement

@microsoft-github-policy-service agree [company="Vermeer Corporation"]

@microsoft-github-policy-service agree company="Vermeer Corporation"

@lawndoc Gentle reminder.

Learn Build status updates of commit 6ddd886:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

microsoft-365/security/defender-endpoint/linux-install-manually.md
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching the learn.microsoft.com contributor guidesPost your question in the Learn support channel

This scripted install (which is a different script from the onboarding script) is not preferred over other methods – it’s intended for those scenarios where deployment tooling is not available.

You can't move the script up on the page dedicated to a manual install? It's not like it would be moved above the preferred deployment tooling that you mentioned, it's just letting people skip a bunch of reading when they don't have deployment tooling and they have found themself on this page.

This is why Microsoft documentation sucks, I'm done trying to help


Final client changes for TreeEntry.Commit and ISnapshotTree.commits removal

Fixes #4691 - After the prerelease of server/routerlicious , common/lib/protocol-definitions, common/lib/container-definitions and common/lib/driver-definitions, we can finally incorporate the new prerelease numbers and remove the last references of TreeEntry.Commit and ISnapshotTree.commits

can you include the breaking.md entry now that the overall change has bubbled up into the client layer?

sure thing.

In reply to:<PHONE_NUMBER>


Testing

Pull request for testing,
I have added testing for the models and user controller

Hi @TechnoAndy
Great job in implementing the testing for the backend👍🏽
Your branch is complete! There is nothing else to say other than... it's time to merge it :shipit:
STATUS: APPROVED 🟢
Congratulations! 🎉

Optional suggestions

Every comment with the [OPTIONAL] prefix is not crucial enough to stop the approval of this PR. However, I strongly recommend you to take them into account as they can make your code better.
Cheers and Happy coding!👏👏👏
Feel free to leave any questions or comments in the PR thread if something is not 100% clear.
Please, remember to tag me @Alabi12  in your question so I can receive the notification.


[Bug] No error handling for zero-trend data ≤ peer average benchmark

Pipeline has no error handling when provided ONLY data with zero change at a performance level ≤ peer average. Data can be any level below peer avg, as long as no delta for two months this will occur.
Error output:

File "C:\Users...filepath....\main_w.py", line 193, in createprecisionfeedback
return selected_message1
UnboundLocalError: local variable 'selected_message1' referenced before assignment

Found: Local hosting, Windows platform
Reproduced: Windows, local, separate instances, multiple set performance values.
Notes:

Pretty certain that the issue is with logic in how we are selecting messages based on the data annotations, not with platform specific peculiarities :)
Even with Improving/Worsening being implemented this would still need a separate error handler, since we do not plan to implement "stayed worse".

{
  "@context": {
    "@vocab": "http://schema.org/",
    "slowmo": "http://example.com/slowmo#",
    "csvw": "http://www.w3.org/ns/csvw#",
    "dc": "http://purl.org/dc/terms/",
    "psdo": "http://purl.obolibrary.org/obo/",
    "slowmo:Measure": "http://example.com/slowmo#Measure",
    "slowmo:IsAboutPerformer": "http://example.com/slowmo#IsAboutPerformer",
    "slowmo:ColumnUse": "http://example.com/slowmo#ColumnUse",
    "slowmo:IsAboutTemplate": "http://example.com/slowmo#IsAboutTemplate",
    "slowmo:spek": "http://example.com/slowmo#spek",
    "slowmo:IsAboutCausalPathway": "http://example.com/slowmo#IsAboutCausalPathway",
    "slowmo:IsAboutOrganization": "http://example.com/slowmo#IsAboutOrganization",
    "slowmo:IsAboutMeasure": "http://example.com/slowmo#IsAboutMeasure",
    "slowmo:InputTable": "http://example.com/slowmo#InputTable",
    "slowmo:WithComparator": "http://example.com/slowmo#WithComparator",
    "has_part": "http://purl.obolibrary.org/obo/bfo#BFO_0000051",
    "has_disposition": "http://purl.obolibrary.org/obo/RO_0000091"
  },
"Performance_data":[
    ["staff_number","measure","month","passed_count","flagged_count","denominator","peer_average_comparator","peer_90th_percentile_benchmark","peer_75th_percentile_benchmark","MPOG_goal"],
    [1,"SUS04","2023-01-01",90,10,100,90,96,92,90],
    [1,"SUS04","2023-02-01",90,10,100,90,96,92,90],
    [1,"SUS04","2023-03-01",90,10,100,90,96,92,90],
    [1,"SUS04","2023-04-01",90,10,100,90,96,92,90],
    [1,"SUS04","2023-05-01",90,10,100,90,96,92,90],
    [1,"SUS04","2023-06-01",90,10,100,90,96,92,90],
    [1,"SUS04","2023-07-01",90,10,100,90,96,92,90],
    [1,"SUS04","2023-08-01",90,10,100,90,96,92,90],
    [1,"SUS04","2023-09-01",90,10,100,90,96,92,90],
    [1,"SUS04","2023-10-01",90,10,100,90,96,92,90],
    [1,"SUS04","2023-11-01",90,10,100,90,96,92,90],
    [1,"SUS04","2023-12-01",90,10,100,90,96,92,90]
  ],
"History":{
    "Month1":
      {
        "staff_number": 30,
        "selected_candidate": {
           "message_template": "https://repo.metadatacenter.org/template-instances/33412958-7985-43c2-ba21-0c35b2b4ead1",
            "has_disposition": ["positive gap content"],
            "has_moderator": ["positive trend"],
            "display": "line graph 12-month",
            "measure": "SUS-04",
            "acceptable_by": ["social gain", "social better"]
            } ,
        "performance_month": "2023-03",
        "message_generated_datetime": "2023-04-23 12:02:03",
        "pfkb_version": "1.0.1",
        "pfp_version": "1.2.2",
        "email_text_html": "
Congratulations on your high performance for SUS-04: Fresh Gas Flow, less than or equal to 2L/min. Your performance was 96%, above the Top 10% peer benchmark of 94%.

More details about how the measure SUS-04 is calculated  are available here. Details about your operative cases are available in your  clinical quality dashboard.
"
       }
},
"debug":"no",
"Preferences":{
    "Utilities": {
    "Motivating_information":
      {
        "social_better": -5.97766,
        "social_gain":	-2.92114,
        "social_stayed_better":	-12.76936,
        "social_worse":	-0.05277,
        "social_approach":	-0.24384,
        "social_loss":	2.72075,
        "improving":	-0.26266,
        "worsening":	1.06977,
        "social_stayed_worse":	9.97743
      },
    "Display_format":
      {
        "text-only": "0.0",
        "bar_chart": "37.0",
        "line_chart": "0.0"
      }
  }
}
}

Based on 7/19 meeting, should have covering message profiles to rectify this - just need to have more causal pathways (social worse, for instance) implemented in the pipeline's capabilities


standardize use of underscore in gorel term names

Moved from GO helpdesk.
http://jira.geneontology.org/browse/GO-681
Hi,
we noticed that the gorel file sometimes has underscores and sometimes spaces. Can we standardize? I prefer underscores as that is what we have been using so far.
Thanks
Val
===
coincident_with(...)", but the name of the term is "coincident with" (with a space). The extension code looks up using the ext. rel. term name not the ID.
For all the other relations the term name is the same as the ID, with underscore rather than spaces. eg.
id: has_direct_input
name: has_direct_input
Looking at the gorel file, it seems quite random. Some names have underscore and some have spaces.

Rama Balakrishnan (Inactive) added a comment - 03/Jan/15 9:39 PM
Val,
Thanks for bringing this up. I will alert the ontology editors about this issue.
Rama

@ValWood @cmungall  Please close if this is no longer relevant.  Thanks.

The relation names in ro.owl have been without underscores for some years now.  You are just seeing this now becuase of work to harmonise gorel with relations used in the GO (full version) and RO. The higher level RO relations are used outside of OWL, so any change would require wider debate.  I don't see any appetie for re-opening that.

The extension code looks up using the ext. rel. term name not the ID.

It should be switched to use the ID.  No-one editing the ontology is going to assume that labels need to be stable for tracking purposes.
See also:  geneontology/annotation_extensions#3
Duplicate with geneontology/annotation_extensions#51


Supporting cmake

Is the project open for supporting cmake in addition to bazel?

Sure, as long as not breaking bazel.

One challenge though is how to handle dependencies such as protobuf. Currently, the project rely on protobuf internals which is easily accessible when using bazel to handle dependencies.
One way of solving this would be to handle third party dependencies in similar fashion to how grpc does - git submodules.
What do you think about that? or do you see another way of solving it?

git submodule and bazel don't go together very well.  no,  not "git submodule"


.NET6 support

is.NET6 support planned ?

I created a fork from this https://github.com/zcsizmadia/ZCS.Utf8Json and I pushed  a v1.4.1 package to nuget.org. It supports net6.0, however the library itself is netstandartd2.x (which should work on al the SDKs).
https://www.nuget.org/packages/ZCS.Utf8Json/1.4.1


Documentation on training speed

Thanks for creating and maintaining this great library!
I was wondering if you have stats for the time taken to train the different models on one of the standard datasets documented somewhere. If not, these would be useful for reference and comparisons.

Thank you for your great suggestion :)
We will prepare additional docs for the training time on the next release.
If you wanna compare the training time of the models right now, you can check it through the log files (TensorBoard). See here.

We have finally decided not to add a documentation for training speed due to the reasons below:

The training speed varies depending on the environment where we run the code. As an example, we found the number of CPUs also changes the training time.
As we are running the code on our shared resources, the training time changes depending on the number of programs that are running on the cluster.

For these reasons, we could not fairly compare the performance. Moreover, the training speed could not be easily reproduced in a new environment, indicating this score is meaningless when a new user starts new work on a new environment.
Please let us know if you have any further issues.

Thanks for the update! I agree that it is not reproducible across environments, but what I was interested in was relative time taken by different methods.
It may not be too important, so its okay to not do it if such an experiment would be nontrivial to set up.