Only send subscribed messages

@cburgdorf Here's a prototype of a different approach to #34. This PR also only sends messages which the remote endpoint is listening for, it doesn't require any interface changes or cognitive overhead for the user, and as a bonus it dynamically changes the set of messages being listened for.
It switches on the type of the event so it doesn't support only subscribing to peer NewTransaction messages, for instance, but that could be added:

filter_predicate parameters could be added to subscribe() and stream() and the callables sent to the remote ConnectionFilters.
the PeerPoolMessageEvent events could be broken up into multiple types, that would give us the best performance.

The code needs to be cleaned up a lot, so this is still a WIP, but what do you think about this approach?

A quick update on this. The benchmarking test failed with an exception, and I've also seen it fail a different way when running locally. Here's a gist with both failures: https://gist.github.com/lithp/35f66be963b6cf68c1e3fedaa18b814d
The code runs just fine during normal execution, but multiprocessing's atexit handlers cause exceptions when trying to tear everything down.
A solution might be:

Put a try-catch block somewhere and swallow exceptions which we know can only be caused by the program quitting
The problem happens because we have long-lived condition.wait() calls which are still active when the process exits. A different architecture where endpoints directly told their remotes that their subscriptions had updated wouldn't have this problem. It would be a little more complicated though.

I'm looking at exactly why the failures occur during shutdown, hopefully there's a way to get it to shutdown cleanly without resorting to either of the above solutions.

Today I tried going with a different approach: it might be easier to reason about Endpoints if they always communicate with each other directly. Instead of using a thread to long-poll Endpoints connect to the Endpoints which have connected to them and synchronously send messages to tell each other about changes to the message they're subscribed to. I'm still in the process of getting it working.

Okay, I think this is ready for review again. I fixed all the atexit exceptions and squashed history and added a test that messages which are filtered out really aren't being sent.
I found it pretty hard to get this working, and I think a big piece is that multiprocessing doesn't play nicely with asyncio. A bigger change might be to change how we're using multiprocessing or replace it with something like zeromq which has an asyncio binding, I think that would make this code a lot easier to work with.
If you don't mind, I think filter_predicate can be added as part of a different PR, this one seems to be working! And that's a further performance optimization that can be added in the future.

Well... it looks like perf_benchmark now deadlocks. I'll look into it tomorrow :(

or we could implement something with asyncio.Streams

This seems like a good hack-day project for while we're here together in June.  I suspect a minimal implementation should be pretty straight forward to do.

Okay, all the benchmarking now works every time. I know you've already approved it twice but this was a big enough change to perf_benchmark.py that I don't want to just merge without giving you a chance to review it one last time.
Feel free to merge it yourself if you want to build off this! And if I don't hear back I'll merge it sometime next week.

Awesome! Looks good! The only thing I want to double check is if it work in Trinity or if any adjustments would be needed. I don't think so but I think it's worth checking. I'm on mobile now but can check it later today or tomorrow.

Ok, it looks like it doesn't work as a drop-in replacement in Trinity. It breaks the system where the endpoints connect to each other. There might be some changes in Trinity needed to adjust to this PR but I haven't looked into it yet.

Ah, that's frustrating, and also a little embarrassing; I should have checked myself. What did it break in trinity?

What did it break in trinity?

The endpoints aren't subscribing each other which then causes things like the discovery not answering the peer pool etc. I guess what happens is that the endpoints send EndpointConnected to main before the main process has subscribed.

It looks like Ctrl-c also got uglier:
    INFO  04-09 19:16:49               trinity  DB process (pid=19580) terminated
Exception in thread Thread-39:
Traceback (most recent call last):
  File "/home/brian/.local/share/virtualenvs/trinity-mNs_Su9C/lib/python3.7/site-packages/lahja/endpoint.py", line 126, in _run
    self.condition.wait()
  File "/home/brian/.pyenv/versions/3.7.0/lib/python3.7/multiprocessing/managers.py", line 1038, in wait
    return self._callmethod('wait', (timeout,))
  File "/home/brian/.pyenv/versions/3.7.0/lib/python3.7/multiprocessing/managers.py", line 796, in _callmethod
    kind, result = conn.recv()
  File "/home/brian/.pyenv/versions/3.7.0/lib/python3.7/multiprocessing/connection.py", line 250, in recv
    buf = self._recv_bytes()
  File "/home/brian/.pyenv/versions/3.7.0/lib/python3.7/multiprocessing/connection.py", line 407, in _recv_bytes
    buf = self._recv(4)
  File "/home/brian/.pyenv/versions/3.7.0/lib/python3.7/multiprocessing/connection.py", line 383, in _recv
    raise EOFError
EOFError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/brian/.pyenv/versions/3.7.0/lib/python3.7/threading.py", line 917, in _bootstrap_inner
    self.run()
  File "/home/brian/.pyenv/versions/3.7.0/lib/python3.7/threading.py", line 865, in run
    self._target(*self._args, **self._kwargs)
  File "/home/brian/.local/share/virtualenvs/trinity-mNs_Su9C/lib/python3.7/site-packages/lahja/endpoint.py", line 126, in _run
    self.condition.wait()
  File "/home/brian/.pyenv/versions/3.7.0/lib/python3.7/multiprocessing/managers.py", line 1032, in __exit__
    return self._callmethod('release')
  File "/home/brian/.pyenv/versions/3.7.0/lib/python3.7/multiprocessing/managers.py", line 795, in _callmethod
    conn.send((self._id, methodname, args, kwds))
  File "/home/brian/.pyenv/versions/3.7.0/lib/python3.7/multiprocessing/connection.py", line 206, in send
    self._send_bytes(_ForkingPickler.dumps(obj))
  File "/home/brian/.pyenv/versions/3.7.0/lib/python3.7/multiprocessing/connection.py", line 404, in _send_bytes
    self._send(header + buf)
  File "/home/brian/.pyenv/versions/3.7.0/lib/python3.7/multiprocessing/connection.py", line 368, in _send
    n = write(self._handle, buf)
BrokenPipeError: [Errno 32] Broken pipe

I think I should admit failure here, I thought this approach would be simpler and the user interface it exposes it certainly easier to use, but it was obvious how filter_predicate worked and with that approach we wouldn't have had to worry about these kinds of race conditions or messy exits.
in this PR the sending endpoints wait for any updates by long-polling into each of the endpoints they connect to. Because of how multiprocessing works this required a thread, and because Python doesn't support interrupting threads there's no easy way I can think of to make shutdowns definitely cleaner. Also because of the long-polling there's no easy way to block until other threads have updated their subscriptions, so we get race-conditions.
I think an easy fix to the race conditions is to add a flag which lets you say "I know the other side will want this message" so it skips the filter. That would only be a stop-gap until this is replaced with a better architecture. I'm currently looking into why this fails on Trinity, hopefully that or a similar fix is enough.
I also have a branch which gets rid of the threads and communicates via endpoints connecting back to the endpoints which connect to them, then sending messages the usual way. I think I'll take a look at getting that working too.

I think I should admit failure here, I thought this approach would be simpler and the user interface it exposes it certainly easier to use, but it was obvious how filter_predicate worked and with that approach we wouldn't have had to worry about these kinds of race conditions or messy exits.

The fiter_predicate solution is certainly simpler implementation wise it has worked well for me so far but it is in fact very appealing not having to worry about manually setting up filters for efficiency!

I think an easy fix to the race conditions is to add a flag which lets you say "I know the other side will want this message" so it skips the filter.

So, you mean the sender would use something like a force flag in the BroadcastConfig to bypass the filter? This would then only be used for certain event types where the initial event is important such as EndpointConnected and maybe ShutdownRequested.

I also have a branch which gets rid of the threads and communicates via endpoints connecting back to the endpoints which connect to them, then sending messages the usual way. I think I'll take a look at getting that working too.

Nice! But I guess, the main problem remains that we have no certainty at the time of sending an event whether we do already know about the receivers possible subscription or not. I guess what we would need for that is that  connect_to_endpoints  would not only wait until we have established the connection to the remote endpoint but also send an initial info about its possible subscriptions to our events.
If you feel that the complexity passes a certain threshold and takes away too much of your time that you rather spend on the sync effort, we can also fall back to the filter_predicate solution and push the transparent solution down the road. That said, no pressure from me as I'm on vacation until 24th anyway. I just wanted to throw this in as an option, so you know you shouldn't feel obligated to finish the solution if the effort gets too high after all.

So, you mean the sender would use something like a force flag in the BroadcastConfig to bypass the filter? This would then only be used for certain event types where the initial event is important such as EndpointConnected and maybe ShutdownRequested.

Yeah, exactly!

Nice! But I guess, the main problem remains that we have no certainty at the time of sending an event whether we do already know about the receivers possible subscription or not. I guess what we would need for that is that connect_to_endpoints would not only wait until we have established the connection to the remote endpoint but also send an initial info about its possible subscriptions to our events.

Yep, the idea is to make that part synchronous. connect_to_endpoints shouldn't return until you can safely send messages.

If you feel that the complexity passes a certain threshold and takes away too much of your time that you rather spend on the sync effort, we can also fall back to the filter_predicate solution and push the transparent solution down the road. That said, no pressure from me as I'm on vacation until 24th anyway. I just wanted to throw this in as an option, so you know you shouldn't feel obligated to finish the solution if the effort gets too high after all.

Thanks for the offer! And enjoy your vacation :) I want to give this another try but I'll keep that in mind and switch back to state sync if this takes much longer.
Today I spent more time looking into why this fails with Trinity. I'm still not sure what's happening but I've discovered some things:

_connect_receiving_queue is a coroutine, but handle_new_endpoints calls connect_to_endpoints_blocking, which blocks the main thread which it tries to connect.
_connect_receiving_queue is also in a precarious spot. It doesn't catch any exceptions, so any exception which a handler raises causes it to stop processing messages. Even worse, nothing is printed! I think that's because the coro is passed into gather(), asyncio plans on returning the exception along with the gather() call.
For some reason, when main tries to connect to bjson-rpc-api it receives [Errno 111] Connection refused.
When main tries to connect to discovery, it receives [Errno 104] Connection reset by peer

That last exception prevents networking from being told about the discovery service (the AvailableEndpointsUpdated message is never sent) and therefore it's requests to the discovery service are dropped.

For some reason, when main tries to connect to bjson-rpc-api it receives [Errno 111] Connection refused.

After spending some quality time with strace, it appears that this happens because the plugin segfaults soon after it starts listening. Here's the output from a core dump:
Program terminated with signal SIGSEGV, Segmentation fault.
#0  __new_sem_wait_fast (definitive_result=1, sem=<optimized out>) at sem_waitcommon.c:135
135	sem_waitcommon.c: No such file or directory.
[Current thread is 1 (Thread 0x7f82a88a9080 (LWP 4921))]
(gdb) bt
#0  __new_sem_wait_fast (definitive_result=1, sem=<optimized out>) at sem_waitcommon.c:135
#1  __new_sem_trywait (sem=0x7fe8718de000) at sem_wait.c:82
#2  0x00007f82a603b183 in semlock_acquire (self=0x7f82a3777d18, args=<optimized out>, kwds=<optimized out>)
    at /home/brian/.pyenv/sources/3.7.0/Python-3.7.0/Modules/_multiprocessing/semaphore.c:309
#3  0x000000000043beca in _PyMethodDef_RawFastCallKeywords (method=0x7f82a623c560 <semlock_methods+64>, self=self@entry=0x7f82a3777d18, args=args@entry=0x7f829c2f99e8,
    nargs=nargs@entry=0, kwnames=kwnames@entry=0x0) at Objects/call.c:690
#4  0x00000000005bc349 in _PyMethodDescr_FastCallKeywords (descrobj=0x7f82a6447048, args=args@entry=0x7f829c2f99e0, nargs=nargs@entry=1, kwnames=kwnames@entry=0x0)
    at Objects/descrobject.c:288
#5  0x000000000042acb9 in call_function (kwnames=0x0, oparg=1, pp_stack=<synthetic pointer>) at Python/ceval.c:4563
(gdb) py-bt
Traceback (most recent call first):
  File "/home/brian/.pyenv/versions/3.7.0/lib/python3.7/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
  File "/home/brian/.pyenv/versions/3.7.0/lib/python3.7/multiprocessing/synchronize.py", line 231, in __enter__
    return self._lock.__enter__()
  File "/home/brian/ef/lahja/lahja/endpoint.py", line 261, in _notify_subscriptions_changed
    with self._subscriptions_changed:
  File "/home/brian/ef/lahja/lahja/endpoint.py", line 571, in subscribe
    self._notify_subscriptions_changed()
  File "/home/brian/ef/trinity/trinity/endpoint.py", line 54, in auto_connect_new_announced_endpoints
    self.subscribe(AvailableEndpointsUpdated, self.connect_to_other_endpoints)
  File "/home/brian/ef/trinity/trinity/extensibility/plugin.py", line 318, in _prepare_start
    self.event_bus.auto_connect_new_announced_endpoints()
  File "/home/brian/.pyenv/versions/3.7.0/lib/python3.7/multiprocessing/process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
  File "/home/brian/.pyenv/versions/3.7.0/lib/python3.7/multiprocessing/process.py", line 297, in _bootstrap
    self.run()
  File "/home/brian/.pyenv/versions/3.7.0/lib/python3.7/multiprocessing/spawn.py", line 118, in _main
    return self._bootstrap()
  File "/home/brian/.pyenv/versions/3.7.0/lib/python3.7/multiprocessing/spawn.py", line 105, in spawn_main
    exitcode = _main(fd)
  File "<string>", line 1, in <module>

The same segfault happens to PeerDiscoveryPlugin, which would explain why main can't connect back to it.

After spending more time with strace I've figured out why the plugins are segfaulting. They segfault while calling: self._notify_subscriptions_changed(), which uses a semaphore internally. The problem is that this semaphore was created in the main process and the memory it was mapped to does not exist in the child processes.
The process is failing on a dereference:
(gdb) disas
Dump of assembler code for function __new_sem_trywait:
=> 0x00007f0922dea840 <+0>:	mov    (%rdi),%rax
   0x00007f0922dea843 <+3>:	test   %eax,%eax
   0x00007f0922dea845 <+5>:	je     0x7f0922dea858 <__new_sem_trywait+24>
   0x00007f0922dea847 <+7>:	lea    -0x1(%rax),%rdx
...
(gdb) info registers
...
rdi            0x7fe8718da000<PHONE_NUMBER>47168

That address is not a part of any of the memory segments, however it does show up in the main process' strace:
lstat("/dev/shm/DsUT5s", 0x7ffcf6436c80) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/dev/shm/DsUT5s", O_RDWR|O_CREAT|O_EXCL, 0600) = 22
write(22, "\1\0\0\0\0\0\0\0\200\0\0\0\350\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 32) = 32
mmap(NULL, 32, PROT_READ|PROT_WRITE, MAP_SHARED, 22, 0) = 0x7fe8718da000
link("/dev/shm/DsUT5s", "/dev/shm/sem.mp-8zv2nf9_") = 0
fstat(22, {st_mode=S_IFREG|0600, st_size=32, ...}) = 0
unlink("/dev/shm/DsUT5s")               = 0
close(22)                               = 0
unlink("/dev/shm/sem.mp-8zv2nf9_")      = 0

The child process is created by these lines:
https://github.com/ethereum/trinity/blob/413882806fe5031e790fa0be11ef1e037ed06886/trinity/extensibility/plugin.py#L284-L294
Under the covers, Process.start() is using a clone() followed by an execve() which wipes away everything and starts afresh. I can't find the code which restores state and makes self work, but the child process spends a lot of time reading data the parent gave it and memmapping, so it seems like multiprocessing somehow (pickles and?) sends all the state to the child process. It does not, however, send the semaphores over, so the child crashes when it tries to notify.
This would be fixed by not creating an event bus for the Plugin until the new process has already been started.

Yeah, that does the trick. I've opened a PR against trinity which changes it to not send Endpoints over process boundaries. Now everything appears to be working!

Closing in favor of #42. #42 is based on asyncio which should cause fewer headaches in the long run.


GRPCRoute status set incorrectly with missing listener

Is there an existing issue for this?

[X] I have searched the existing issues

Current Behavior
The status field says that the route was accepted, but Programmed stays as Unknown
{
  "parents": [
    {
      "conditions": [
        {
          "lastTransitionTime": "2024-01-08T19:22:59Z",
          "message": "",
          "observedGeneration": 1,
          "reason": "Accepted",
          "status": "True",
          "type": "Accepted"
        },
        {
          "lastTransitionTime": "2024-01-08T19:22:59Z",
          "message": "",
          "observedGeneration": 1,
          "reason": "Unknown",
          "status": "Unknown",
          "type": "Programmed"
        }
      ],
      "controllerName": "konghq.com/kic-gateway-controller",
      "parentRef": {
        "group": "gateway.networking.k8s.io",
        "kind": "Gateway",
        "name": "kong",
        "namespace": "default"
      }
    }
  ]
}

Expected Behavior
status should contain useful information. Something like:
{
  "parents": [
    {
      "conditions": [
        {
          "lastTransitionTime": "2024-01-08T19:22:59Z",
          "message": "",
          "observedGeneration": 1,
          "reason": "Missing listener for port 443",
          "status": "False",
          "type": "Accepted"
        }
      ],
      "controllerName": "konghq.com/kic-gateway-controller",
      "parentRef": {
        "group": "gateway.networking.k8s.io",
        "kind": "Gateway",
        "name": "kong",
        "namespace": "default"
      }
    }
  ]
}

Steps To Reproduce
Create a Gateway and GatewayClass:
echo "
---
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: kong
  annotations:
    konghq.com/gatewayclass-unmanaged: 'true'

spec:
  controllerName: konghq.com/kic-gateway-controller
---
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: kong
spec:
  gatewayClassName: kong
  listeners:
  - name: proxy
    port: 80
    protocol: HTTP
" | kubectl apply -f -

Install Kong
helm install kong kong/ingress -n kong --create-namespace

Enable GatewayAlpha
kubectl set env -n kong deployment/kong-controller CONTROLLER_FEATURE_GATES="GatewayAlpha=true" -c ingress-controller

Deploy GRPCBin
echo "---
apiVersion: v1
kind: Service
metadata:
 name: grpcbin
 labels:
   app: grpcbin
spec:
 ports:
 - name: plaintext
   port: 9000
   targetPort: 9000
 - name: tls
   port: 9001
   targetPort: 9001
 selector:
   app: grpcbin
---
apiVersion: apps/v1
kind: Deployment
metadata:
 name: grpcbin
spec:
 replicas: 1
 selector:
   matchLabels:
     app: grpcbin
 template:
   metadata:
     labels:
       app: grpcbin
   spec:
     containers:
     - image: kong/grpcbin
       name: grpcbin
       ports:
       - containerPort: 9000
       - containerPort: 9001
" | kubectl apply -f -

Create a GRPCRoute
echo 'apiVersion: gateway.networking.k8s.io/v1alpha2
kind: GRPCRoute
metadata:
 name: grpcbin
spec:
 parentRefs:
 - name: kong
 hostnames:
 - "example.com"
 rules:
 - backendRefs:
   - name: grpcbin
     port: 9001
' | kubectl apply -f -

Look at the status:
kubectl get grpcroutes.gateway.networking.k8s.io grpcbin -o jsonpath='{.status}'

Kong Ingress Controller version
No response
Kubernetes version
No response
Anything else?
No response

Tested this today for @programmer04
        {
          "lastTransitionTime": "2024-04-29T11:17:31Z",
          "message": "",
          "observedGeneration": 1,
          "reason": "ConfiguredInGateway",
          "status": "True",
          "type": "Programmed"
        }

It looks as though this works now as we support HTTP only GRPCRoutes (we didn't when I raised the issue).


Screenshare indicator isn't accuate

Select which package(s) are affected
@livekit/components-react
Describe the bug
What is expected
If a user starts sharing his screen and then ends his screen sharing, the screenshare indicator should update with the proper state.
Currently happening
Once a user starts a screenshare, even if he ends his screenshare, the indicator never changes
Reproduction
Have 2 participants in a room and test the screensharing feature.
Logs
No response
System Info
JS-SDK

Severity
annoyance
Additional Information
No response

Hey @p-delorme, thank you for your report. I'm afraid I don't fully understand your problem.
What do you mean by screen share indicator? Can you share some code on how you use it?
Could you elaborate a bit to help me understand?

Sorry, I asked @p-delorme to open this issue, but forgot to give more context:
The issue is around the <TrackMutedIndicator source="screen_share" /> not updating correctly once the screen share has stopped via the browser UI.

turns out this was likely a regression caused by a bug in client-sdk-js. @p-delorme can you check if the issue is indeed fixed for you, too with<EMAIL_ADDRESS>?

will close this, @p-delorme feel free to notify if this isn't fixed for you


SqlServer IsClustered forced on identity

For SQL Server on EF Core 3.0:
builder.HasKey(x => new { x.Provider, x.ProviderId });
builder.HasIndex(x => x.Id).IsUnique().IsClustered(false);
builder.Property(x => x.Id).IsRequired().UseIdentityColumn();

will result in failure aplying migration to SQL server as both the composite primary key and the unique identity will be created as clustered.
Using .HasAnnotation() to set SqlServer:IsClusted to false does not help.
Even though it is a good default to cluster by a identity column it should be possible to change behavier with IsClustered(false) as that will allow an identity column which is not the primary key.
Further technical details
EF Core version: 3.0.0-rc2
Database provider: (e.g. Microsoft.EntityFrameworkCore.SqlServer)
Target framework: (e.g. .NET Core 3.0)

Will take this.

@smint80 I haven't been able to reproduce this. Please see the attempted repro below, which has a non-key identity-generated column with a unique index - the logs clearly show a unique index being created but without being clustered, and so no error is triggered. This works both in 3.0.0 (released) and 3.0.0-rc1.
class Program
{
    static void Main(string[] args)
    {
        using var ctx = new BlogContext();
        ctx.Database.EnsureDeleted();
        ctx.Database.EnsureCreated();
    }
}

public class BlogContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    static ILoggerFactory ContextLoggerFactory
        => LoggerFactory.Create(b => b.AddConsole().AddFilter("", LogLevel.Debug));

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        => optionsBuilder
            .UseSqlServer(@"Server=localhost;Database=test;User=SA;Password=Abcd5678;Connect Timeout=60;ConnectRetryCount=0")
            .EnableSensitiveDataLogging()
            .UseLoggerFactory(ContextLoggerFactory);

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>(blog =>
        {
            blog.HasKey(x => new { x.Id1, x.Id2 });
            blog.HasIndex(x => x.UniqueIdentityWithIndex).IsUnique(); //.IsClustered(false);
            blog.Property(x => x.UniqueIdentityWithIndex).IsRequired().UseIdentityColumn();
        });
    }
}

public class Blog
{
    public string Id1 { get; set; }
    public string Id2 { get; set; }
    public int UniqueIdentityWithIndex { get; set; }
}

EF Team Triage: Closing this issue as the requested additional details have not been provided and we have been unable to reproduce it.
BTW this is a canned response and may have info or details that do not directly apply to this particular issue. While we'd like to spend the time to uniquely address every incoming issue, we get a lot traffic on the EF projects and that is not practical. To ensure we maximize the time we have to work on fixing bugs, implementing new features, etc. we use canned responses for common triage decisions.


Missing licence

Hi Luke,
I've just forked your repository and then noticed that no licence is specified. Since you wrote a  tutorial about it, I assume that others are allowed to use the code, but it would be better if you would specify a licence.
Could you also add a note about the licence please?

Hi there, this was an oversight on my part. I've added the license now.


Chat page

One volunteer should be in charge of the Chat page, which is the RocketChat interface.

This is implemented by https://github.com/Mini-Conf/Mini-Conf/pull/52


How to config webpack 2 for React & Sass & Typescript ?

How to config webpack 2 for React & Sass & Typescript ?

Can you re-open the question at Stack Overflow please? I wrote an entire free book about the topic so that might be worth studying for specific ideas as well.

pardon ?

The current version of the book is 1.9.5.

I want to learn the version webpack 2 !

@xgqfrms-GitHub The book is for webpack 2. It's the version of the book.


the readme's example template only details how to add plugins, not projects or presets

Yes good point. Will need to fix this.


LoggedIn to WHAT?

Just a simple question: logged to WHAT? I have absolutely NO Idea, what this means.

This is intended for usage in apps that require signing in before sharing. Unless you are sign in, you cannot share the data to your contacts in the app, for instance. It is disabled by default, so if you don't need it, you don't have to worry about it.

thanks for the reply, but it says always I'm not logged in. Always, i does not matter what i do.
Normally, when adding
  // Set logged in status   cordova.openwith.setLoggedIn(true);
the login shouldn't be asked. But it does. Always. Wouldn't it be nice, if such a special feature would ONLY be available if i explicitly enable it?

Hey, im sorry for being that explicit in my comment. Had a rough day where nothing worked. Made a fork and make my needed changes there. Thanks for the work!

@bendspoons thank you for the report. I removed the isLoggedIn functionality completely from the version 2 of the plugin as it seems to be a very specific case. Feel free to use this branch https://github.com/EternallLight/cordova-plugin-openwith-ios/tree/release/v2.0.0 before it is merged into master.


Add filename_space_subst config option

Proposed change
Created a new PR since I deleted my fork and Github wouldn't let me reopen the old PR with a new fork.
Based on previous feedback, this PR adds a new configuration option, filename_space_subst, that replaces spaces in the filename when the title is used within the filename generation. This is done to avoid spaces in filenames, which often need to be escaped on unix-like systems. If set to nil, no substitution will be made. The option defaults to nil to avoid any changes for existing users.

Type of change

[ ] Bugfix (non-breaking change which fixes an issue)
[x] New feature (thank you!)
[ ] Code quality improvements to existing code or addition of tests
[ ] Documentation update

Additional information

This PR fixes or closes issue: N/A
This PR is related to issue: N/A

Checklist

[x] I am running the latest version of the plugin.
[x] The code change is tested and works locally.
[x] There is no commented out code in this PR.
[x] The code has been formatted using Stylua (a .stylua.toml file is provided)
[x] The code has been checked with luacheck (a .luacheckrc file is provided)
[x] The README.md has been updated according to this change.
[x] The doc/telekasten.txt helpfile has been updated according to this change.

FYI, I discovered a small bug in my previous template refactor which I fixed in the latest commit https://github.com/renerocksai/telekasten.nvim/pull/198/commits/d45990956190423b8e343165d520777a0c1c0f08 of this PR

Awesome! Thank you very much. Sorry for the delay


Development version of VSCode crashes (Received signal 11 SEGV_MAPERR<PHONE_NUMBER>01)

VSCode Version: 1.42.0-insider
OS Version: Ubuntu 20.04

Steps to Reproduce:

Clone the VSCode repository
Run yarn
Run ./scripts/code.sh
Try to open a file or try to open a folder or try to save a file with the development version
The development version of VSCode crashes

This is the log:
yarn run v1.17.3
$ node build/lib/electron
Done in 0.34s.
[22:46:26] Syncronizing built-in extensions...
[22:46:26] You can manage built-in extensions with the --builtin flag
[22:46:26] [marketplace]<EMAIL_ADDRESS>✔
[22:46:26] [marketplace]<EMAIL_ADDRESS>✔
[22:46:26] [marketplace]<EMAIL_ADDRESS>✔
[31295:0121/224626.441642:ERROR:sandbox_linux.cc(369)] InitializeSandbox() called with multiple threads in process gpu-process.
[31295:0121/224626.673056:ERROR:buffer_manager.cc(488)] [.DisplayCompositor]GL ERROR :GL_INVALID_OPERATION : glBufferData: <- error from previous GL command
(node:31322) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information
(node:31322) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information
(node:31322) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information
(node:31322) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information
(node:31322) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information
(node:31322) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information
[31228:0121/224628.098455:INFO:CONSOLE(223)] "%c[Extension Host] %cdebugger listening on port 5870 color: blue color:", source: file:///tmp/vscode/out/vs/workbench/services/extensions/electron-browser/extensionHost.js (223)
[31228:0121/224628.318469:INFO:CONSOLE(132)] "%c[Extension Host] %cdebugger inspector at chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=<IP_ADDRESS>:5870/1f68e858-67fb-42a7-a8ba-73f6588750db color: blue color:", source: file:///tmp/vscode/out/vs/workbench/services/extensions/electron-browser/extensionHost.js (132)
[31228:0121/224629.021384:INFO:CONSOLE(159)] "[Embedded Page] WebSocket connection to 'ws://localhost:3000/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED", source: file:///tmp/vscode/out/vs/workbench/contrib/webview/electron-browser/webviewElement.js (159)
[31295:0121/224629.692524:ERROR:buffer_manager.cc(488)] [.DisplayCompositor]GL ERROR :GL_INVALID_OPERATION : glBufferData: <- error from previous GL command
(node:31402) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information
(node:31402) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information
Received signal 11 SEGV_MAPERR<PHONE_NUMBER>01
#0 0x55b74bb3b3d9 (/tmp/vscode/.build/electron/code-oss+0x35d13d8)
  r8:<PHONE_NUMBER>000004  r9:<PHONE_NUMBER>000010 r10:<PHONE_NUMBER>000001 r11: 000021f0aa5bf91f
 r12:<PHONE_NUMBER>000000 r13:<PHONE_NUMBER>000001 r14: 000021f0ab2fedb0 r15:<PHONE_NUMBER>000010
  di:<PHONE_NUMBER>000001  si: 000021f0aa5bf920  bp:<PHONE_NUMBER>000000  bx:<PHONE_NUMBER>000000
  dx:<PHONE_NUMBER>000040  ax:<PHONE_NUMBER>000001  cx:<PHONE_NUMBER>000040  sp: 00007ffe73f01c58
  ip: 00007fa51b164bd1 efl:<PHONE_NUMBER>010246 cgf: 002b000000000033 erf:<PHONE_NUMBER>000006
 trp:<PHONE_NUMBER>00000e msk:<PHONE_NUMBER>000000 cr2:<PHONE_NUMBER>000001
[end of stack trace]
Calling _exit(1). Core file will not be generated.

Does this issue occur when all extensions are disabled?: Yes
This issue must have been introduced in the past month because I don't have this issue with version 043da28ddaddfda383bc5e4cce7ee972ce482b91 which is from the 17.12.2019

Is this still an issue with latest master ?

Nope, looks like it's working again. Thanks. :)


how to use redis in sikulixIDE 1.1.2 script

thanks your great work, this tool is excellent
i have see the FAQ : https://answers.launchpad.net/sikuli/+faqs
and i see here https://answers.launchpad.net/sikuli/+faq/2208
i have a script and i want to read data from redis,
i just download redis.tar.gz and unzip it, and copy it to ../sikulix../lib/redis
when i run script, import redis have no problem, but when i use it like:
import redis
r = redis.StrictRedis("localhost", 6379, 0)
and it raise exceptions,
can you tell me how to use third party python package in sikulixIDE scripts ? thanks

see:
http://sikulix-2014.readthedocs.io/en/latest/scenarios.html#using-python
be sure your redis module can be used with Jython.

thanks, i will check it


[FLINK-3743] upgrading breeze from 0.11.2 to 0.12

I believe a side effect of upgrading breeze is it may also fix FLINK-3741

Looks good, merging this...


exception: 'GenericForeignKey' object has no attribute 'primary_key'

I have encountered an error:
Extension error:
Handler <function improve_docstring at 0x7ff688d2c7b8> for event 'autodoc-process-docstring' threw an exception (exception: 'GenericForeignKey' object has no attribute 'primary_key')

Model:
from django.contrib.contenttypes.fields import GenericForeignKey

class MyModel(models.Model):
    user = ForeignKey(User, ...)
    object = GenericForeignKey('content_type', 'object_pk')
    ...

It appears to originate in the highest-level else block of get_field_verbose_name (permalink)
if isinstance(field, models.fields.reverse_related.ForeignObjectRel):
    # do stuff
else:
        # This means the field is either a normal field or a forward related field
        # If the field is a primary key, include a notice
        primary_key = "Primary key: " if field.primary_key else ""

        field_verbose_name = force_str(field.verbose_name)
        # Make the first letter upper case while leave the rest unchanged
        # (str.capitalize() would make the rest lower case, e.g. ID => Id)
        verbose_name = (
            primary_key + field_verbose_name[:1].upper() + field_verbose_name[1:]
        )
        help_text = force_str(field.help_text)

I suppose an extra type check or exception handler is needed.

Thanks for the report, I wasn't aware that there are field types which don't inherit from the Field class.
Will provide a fix as soon as possible.

I released the new version 1.0.2, can you verify that this solution works for you?

I released the new version 1.0.2, can you verify that this solution works for you?

It seems to work! Thanks for your speedy fix. I'll let you know if I encounter further problems.


Hierarchical names

Reimplementation of the whole internal Pallet loading API to facilitate more advanced naming and filesystem path management. Recursively load file system hierarchical child pallets. Public API as far as current known usage should be intact, except for PalletJack#pallets that needed to be removed to keep private data structure changes private.
The old identity query API Pallet#kind and Pallet#name will return the topmost (still the #kind) and bottom-most (the #leaf_name) path components for a pallet within the warehouse. This means that a warehouse user can use filesystem hierarchy for grouping of related objects without breaking anything. For true hierarchical use, related tools have to be updated to make use of the new identity API Pallet#full_name, Pallet#leaf_name, and Pallet#parent_name.
Bump version to '0.2.0'.
This closes #23.

dump_pallet should be updated as well, to accept full path names. Currently, to get the DNS resolver data out of the warehouse, you need to run:
dump_pallet -w ~/src/palletjack/examples/warehouse/ -t service example-com

which doesn't scale. dump_pallet should have some way of accepting a fully qualified name, e.g.dns-resolver/example-com.

Rebased, because dump_pallet conflicted.


Kitsu: Clear credentials is safe

Changelog Description
Do not remove not existing keyring items.
Testing notes:

Enable kitsu and setup url
Make sure you don't have existing kitsu login in keyring (credentials manager on windows)
Start tray and open kitsu login dialog
Uncheck Remember checkbox
Login
It should not crash

Resolves https://github.com/ynput/OpenPype/issues/6115

@iLLiCiTiT is this OP only?

@iLLiCiTiT is this OP only?

Yes, ayon addon already have the fix implemented.


fix: optimized cjs deps checking in windows

Fix https://github.com/vitejs/vite/issues/1630
Use path.posix for relative path because cjsEntries from rollup chunks are all POSIX path

#1631

#1631


456 cannot record final round

Resolves #456

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.008%) to 94.992%

Totals

Change from base Build<PHONE_NUMBER>:
0.008%

Covered Lines:
6471

Relevant Lines:
6579

💛  - Coveralls


Extending a typed package with another typed package

Let say we have a defA.d.ts file written for DefinitelyTyped that defines a class Aclass with some methods and properties:
declare module A{
  export class Aclass{
    methodA(): void;
    propertyA: number;
  }
}
declare module 'A'{
  export = A;
}

The file defB.d.ts, also written for DefinitelyTyped, extends the type definition for the class Aclass defined in the file defA.d.ts with some other methods and properties:
/// <reference path="defA.d.ts" />
declare module A{
  export class Aclass{
    methodB(): string;
    propertyB: any;
  }
}

How can this be achieved in typings?
I've tried converting this example in this gist, but I can't extend the same class
An real example of this is chai and chai-http

@CaselIT
Think i did it!: https://github.com/Think7/TypingsExtensions
The chai-http def extends a class in the chai def called Request.
(RequestEx extends Request)
This works to extend both interfaces and classes.
TSC, TSLint, and Webstorm are all happy.
Autocomplete / intellisense pick up everything without issue.

@blakeembrey
Not sure if this is helpful, but here is what we've worked out: https://github.com/Think7/TypingsExtensions
While the solution solves the problem in terms of satisfying the compiler and working, i think for it to be implemented would mean modifying the typings system itself to accommodate this scenario.

Extending is certainly possible, augmentation isn't yet solved (declaratively, without using ambient). I think this is the same issue as https://github.com/typings/typings/issues/53.

Indeed it is. I'm closing this


Update CI to run the test for Gateway.

Gateway Unit Testing.

Add the detailed documentation to the readme for unit test under gateway.
Update Circle Ci Config to execute the gateway unit test.
Generate Code coverage report for gateway on every PR.

We already have GitHub workflow to execute the unit test with code coverage reporting.
https://github.com/bobanetwork/boba/actions/workflows/ts-packages.yml


How to get from NormalizedRect a rotation in (X,Y,Z)?

Hello everyone,
I want to convert NormalizedRect given by the Objectron in something like 3D rotation values.
I got these values
{ "xCenter": 0.326659143, "yCenter": 0.7140226, "height": 0.2670138, "width": 0.0828191638, "rotation": 0.02296813 }
But I don't know how to convert them into 3D rotation values.
This template is for miscellaneous issues not covered by the other issue categories
For questions on how to work with MediaPipe, or support for problems that are not verified bugs in MediaPipe, please go to StackOverflow and Slack communities.
If you are reporting a vulnerability, please use the dedicated reporting process.

HI @burungiu,
Could you please elaborate your query with more details. Thank you!

Hello, I try to place a sneaker over the boundboxes in mediapipe/objectron. I don't know how to positionate it based on coordinates which algorithm returns.


Issue with deploying the README initial example

I was following the example where you showed how to create a container with a model made with tf.keras: https://github.com/aws/sagemaker-containers#creating-a-container-using-sagemaker-containers
I followed the instruction and everything worked until the end of instruction where you suggested looking at tensorflow_bring_your_own example for deploying this model. To extend the example to deployment, I replaced the docker build line with the following statement:
%%sh

# The name of our algorithm
algorithm_name=simple-example

account=$(aws sts get-caller-identity --query Account --output text)

# Get the region defined in the current configuration (default to us-west-2 if none defined)
region=$(aws configure get region)
region=${region:-us-west-2}

fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest"

# If the repository doesn't exist in ECR, create it.

aws ecr describe-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1

if [ $? -ne 0 ]
then
    aws ecr create-repository --repository-name "${algorithm_name}" > /dev/null
fi

# Get the login command from ECR and execute it directly
$(aws ecr get-login --region ${region} --no-include-email)

# Build the docker image locally with the image name and then push it to ECR
# with the full name.

docker build  -t ${algorithm_name} .
docker tag ${algorithm_name} ${fullname}

docker push ${fullname}

After this, instead of doing a local training, I directly went to training the model with an ECR instance and deployment.
from sagemaker import get_execution_role

role = get_execution_role()
print(role)

import boto3

client = boto3.client('sts')
account = client.get_caller_identity()['Account']

my_session = boto3.session.Session()
region = my_session.region_name

algorithm_name = 'simple-example'

ecr_image = '{}.dkr.ecr.{}.amazonaws.com/{}:latest'.format(account, region, algorithm_name)

print(ecr_image)

from sagemaker.estimator import Estimator

instance_type = 'ml.m4.xlarge'

estimator = Estimator(role=role,
                      train_instance_count=1,
                      train_instance_type=instance_type,
                      image_name=ecr_image)

estimator.fit()
predictor = estimator.deploy(1, instance_type)

Now, all of the above was adapted from the tensorflow_bring_your_own example that you referenced, and training was successfully completed with the message
2019-07-02 00:12:52,818 sagemaker-containers INFO     Reporting training SUCCESS

2019-07-02 00:13:03 Uploading - Uploading generated training model
2019-07-02 00:13:03 Completed - Training job completed

The problem that I am having is that the trained model data is never getting saved to the bucket. This prevents me from deploying the model. Of course, I followed the tensorflow_bring_your_own example, and the notebook they provided worked perfectly and saved the model in the bucket for deployment. The weird thing is that if I train your example locally, the model gets saved in the bucket, but it doesn't get saved in the format of ../output/model.tar.gz, but it creates a directory for the result of the local training and adds a output.tar.gz and model.tar.gz to it instead. I don't have sufficient privilege in this sagemaker account to change the path of the output file, and estimator.deploy() only accepts the ../output/model.tar.gz format. All of this is done in Jupyter notebook. Would appreciate any help you can provide.

Hello @TianrenWang,
Apologies for the late response.
If I understand this correctly, the problem you are having is that when training in SageMaker your model artifacts aren't being saved to a S3 bucket. Is your training script saving the model artifacts in /opt/ml/model directory in the container?
SageMaker will compress all files in /opt/ml/model directory, as explained here: https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-inference-code.html#your-algorithms-inference-code-load-artifacts.
I'm not too sure I understand this statement:

but it creates a directory for the result of the local training and adds a output.tar.gz and model.tar.gz to it instead

Is the name the concern or is it that multiple tar.gz are being created?
If it is the name, that is determined by the output_path parameter:
https://github.com/aws/sagemaker-python-sdk/blob/master/src/sagemaker/estimator.py#L778
If multiple tar.gz are being created, that doesn't seem right.
Please let me know if there is anything I can clarify.

Thank you for your response. I actually have no idea how to check whether /opt/ml/model directory as I am a beginner in this docker technology.

I'm not too sure I understand this statement:

but it creates a directory for the result of the local training and adds a output.tar.gz and model.tar.gz to it instead

Is the name the concern or is it that multiple tar.gz are being created?

So what is happening is that the local training job as described in your tutorial is creating a folder in the S3 bucket with name /, and in this directory, output.tar.gz and model.tar.gz are created, which should not be happening, as the correct format should be /output/model.tar.gz.

But this is only a description of a weird behavior that might be a hint towards why the directory of training artifact is not being created when trained using AWS instance.

Since you created your own container using the SageMaker containers tutorial whatever training code you write you need to point whatever artifacts that you want to deploy and move it or be saved to /opt/ml/model within the container.
Perhaps share your training script or whatever code is getting executed when the container runs?

So what is happening is that the local training job as described in your tutorial is creating a folder in the S3 bucket with name /, and in this directory, output.tar.gz and model.tar.gz are created, which should not be happening, as the correct format should be training-job-name/output/model.tar.gz.

Gotcha. That is happening due to this code: https://github.com/aws/sagemaker-python-sdk/blob/master/src/sagemaker/local/image.py#L247.
When you decompress those tars are there artifacts inside that you recognize?
Local mode supports compressing the /opt/ml/model and /opt/ml/output folders into model.tar.gz and output.tar.gz respectively.
Can you see if anything is displayed for the Output section in your SageMaker training job?
AWS Console -> Amazon SageMaker -> Training Jobs -> Click one of the jobs -> Scroll down to "Output". There should be a link to a S3 object.

When you decompress those tars are there artifacts inside that you recognize?

The model.tar.gz is empty. output.tar.gz has a success.txt that is empty and a subdirectory "data" that is also empty.

Can you see if anything is displayed for the Output section in your SageMaker training job?

There is a link to the output that is trained with AWS instance, but there are no objects in that directory, so something didn't go right here.

Perhaps share your training script or whatever code is getting executed when the container runs?

The code that I used for this issue was adapted from this tutorial: https://docs.aws.amazon.com/sagemaker/latest/dg/build-container-to-train-script-get-started.html.
This is the Dockerfile:
FROM tensorflow/tensorflow:1.13.0-py3

RUN pip install sagemaker-containers

# Copies the training code inside the container
COPY train.py /opt/ml/code/train.py

# Defines train.py as script entrypoint
ENV SAGEMAKER_PROGRAM train.py

And the rest of the code that were run on Jupyter notebook is all included in the original post.
This is the train.py (no change from the tutorial):
import tensorflow as tf

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
		loss='sparse_categorical_crossentropy',
		metrics=['accuracy'])

model.fit(x_train, y_train, epochs=1)

model.evaluate(x_test, y_test)

@TianrenWang,
Gotcha. Thanks for providing all of this info! I think the code isn't calling any save function.
I'm not too well versed in keras, however I was able to find some links. I think fit and evaluate don't end up persisting any model artifacts, so we need provide a save function.
https://www.tensorflow.org/api_docs/python/tf/keras/Sequential#save
https://machinelearningmastery.com/save-load-keras-deep-learning-models/
Make sure you save the output to /opt/ml/model.
I think either a warning or code snippet should be added, telling the reader to make sure they save something.
Let me know if there is anything I can clarify.

Hi @TianrenWang, were you able to resolve your question? If so, I'll close this issue.

Hi @TianrenWang, were you able to resolve your question? If so, I'll close this issue.

This issue was never resolved, but I am no longer using AWS Sagemaker.

I'm seeing similar behavior with 'local' training vs cloud training. The output directory for model.tar.gz is inconsistent in S3. The only thing changed is the instance type.
Local:
estimator = Estimator(
    role=role,
    train_instance_count=1,
    train_instance_type='local',
    image_name=image_name,
    output_path='s3://my_bucket/models/',
    hyperparameters=hyperparameters)

estimator.fit(dataset_path)

Results in:
my_bucket/job_name/model.tar.gz
my_bucket/job_name/output.tar.gz
Cloud:
estimator = Estimator(
    role=role,
    train_instance_count=1,
    train_instance_type=''ml.c5.xlarge'',
    image_name=image_name,
    output_path='s3://my_bucket/models/',
    hyperparameters=hyperparameters)

estimator.fit(dataset_path)

Results in:
my_bucket/job_name/output/model.tar.gz
I haven't had a chance to really dig into this yet.

I am facing the same problem. The model files get created and saved on docker image (tested manually) but an empty file gets uploaded to S3.


Rules for storing geometries for features with nested sub-features

In CityGML 2.0, the geometry of a feature like Building can be stored with the feature itself but also spread across various sub-features on different hierarchy levels. Moreover, sometimes the parent's geometry should redundantly contain the child's geometry, and sometimes not. For example, the SIG3D modelling guide for buildings recommends that dormers should be modelled as individual BuildingInstallation sub-features with their own geometry and that this geometry should also be part of the geometry of the parent building (see here). Balconies should also be modelled as BuildingInstallations, but in contrast to dormers their geometry should be excluded from the building geometry (see here).
Due to this, collecting the geometry of a feature can become be a tedious task. I would therefore like to start a discussion whether we should introduce more rules in CityGML 3.0 to make consuming the data more easy.
Here are my first thoughts:

Every "space feature" (i.e. a feature derived from AbstractSpace) shall contain its geometry inline. It shall never use an XLink to reference a geometry from one of its (transitive) sub-features.
The geometry of a space sub-feature shall not be redundantly contained in the geometry of its (transitive) parent space feature (thus, the "balcony example" from above would be the correct one).
A space sub-feature shall not use XLinks to reference geometries from its (transitive) parent feature.

The only exception from this rule is when the sub-feature and its direct parent feature share a common boundary where they touch. Then the sub-feature may reference this boundary geometry from its direct parent to make the shared boundary explicit (the orientation must be reversed in this reference).
Note: Another option would be to drop this "XLink topology" from CityGML 3.0. Then rule 3 would have no exception.

A "boundary feature" (i.e. a feature derived from AbstractThematicSurface) is meant to be used to semantically classify one or more surfaces (or curves) in the geometry of its direct parent space feature (e.g. as wall or roof surfaces). Consequently, it shall not contain its geometry inline, but shall only reference the geometries of its direct parent space feature using XLinks (thus, a gml:ReferenceType should be used in the GML encoding).

The only exception from this rule are AbstractFillingSurfaces. They are meant to fill a "hole" inside a surface of the parent space feature and to classify this filling, for instance, as door or window. Since there is no geometry that they could reference, they shall provide the filling geometry inline.

I know that especially rule 4 is exactly the opposite way as it is done in CityGML 2.0. But I think the above proposal is much more consistent and easier. A viewer, for example, would just have to iterate over every "space feature" and draw its geometry without having to fear that it misses geometries or that geometries are redundantly drawn (leading to a flickering effect). Also enabling or disabling a sub-feature in the viewer becomes much easier (because of rule 2). Other tools like geometry validators would also benefit for similar reasons.

Note: the issue has been moved here from the CityGML 3.0 Conceputal Model repository because it addresses the encoding of the CityGML 3 Conceptual Model rather than the Conceptual Model itself.

In our web meeting on 28 January 2021 we discussed that it would be useful to store geometries with spaces only and reference the geometries from the space boundaries. To understand better whether this feasible in practice, Volker and Claus will provide suitable test data sets until the next meeting on 11 February 2021 and we will then continue the discussion.

In our web meeting on 28 January 2021 we discussed that it would be useful to store geometries with spaces only and reference the geometries from the space boundaries. To understand better whether this feasible in practice, Volker and Claus will provide suitable test data sets until the next meeting on 11 February 2021 and we will then continue the discussion.

The results from our web meeting on 11 February 2021:
Storing geometries
Storing geometries with the individual spaces only would be favourable, but is not realisable easily as backwards compatibility with existing CityGML 2 data sets needs to be ensured.
Taking the example of buildings with building installations like dormers, current software is creating city models in such a way that the solid geometry of the Building feature references the boudaries of the Building feature and of the BuildingInstallation features.
One possibility would be to separate the geometries such that the solid geometry of the Building feature only references the boudaries of the Building feature and the multi-surface geometry of the BuildingInstallation references the boudaries of the BuildingInstallation feature. This however would mean that the Building is not a solid any more, but has a whole that whould need to be covered by a ClosureSurface.
Introducing a strict rule that geometries can only be stored with their corresponding spaces would lead to problems for conversion tools that convert CityGML 2 to 3 files.
Thus, we can only propose such a rule for new city models created directly compliant to CityGML 3 that contains the following recommendations:

Every space has it's own geometry (solid and/or multi surface). If the space has boundary surfaces, the actual geometries (i.e. polygon definitions) are stored with the boundary surfaces. If the space does not have boundary surfaces, then the actual geometry (i.e. polygon definitions) is stored with geometry of the space.
The link direction is from the space geometry to the space boundaries.

Advantages:
-> Spaces can be visualised independently (e.g. only BuildingInstallation features without the Building features).
-> Data sets from IFC can easily be mapped to this new rule, since each object contains its own geometry in IFC.
As workaround for existing city models we propose:

The geometry remains with the main space (e.g. Building), but it should be duplicated for the sub-spaces (e.g. BuildingInstallation). This allows for easier conversion of CityGML 2 to 3 and also independent visualisation of the spaces will become possible in this way.

We also discussed, whether it would be possible and useful to change the order of the <boundary> element and the geometry elements, such as <lod2MultiSurface> and <lod2Solid>, so that the geometry elements come first. The order would then be the same as in CityGML 2 and it might be easier to parse the files when the geometries come first.
-> This should be possible, it only requires changing the numbering within the tagged value sequenceNumber of the individual attributes and relations.
XLinks between shared geometries
When two buildings share a wall in CityGML 2, the polygon is stored with the WallSurface of one Building and is referenced from the WallSurface of the other Building using XLinks at the geometry level ("geometry link").
Such XLinks between the geometries of different top-level features are problematic. Thus, these kinds of XLinks should be avoided.
We propose the following:

The polygon is copied to the WallSurface of the second Building, i.e. the wall is represented redundantly in both buildings.
The WallSurface features of both buildings are linked using a semantic relationship which has been introduced newly to CityGML 3 as CityObjectRelation. Within this semantic relationship it can be expressed that the wall surfaces are the "same". This is an XLink at the feature level ("feature link"). "Geometry links" won't be allowed any more.
The coordinates of the copied polygon are reorganised with the surface normal in positive direction.

Advantages:
-> For visualisation it would be enough to render only one of the two surfaces (if the viewer is capabable of doing so).
-> The features can be rendered independently without having to take care of geometry links that might not easily be resolvable.
-> Maintenance becomes easier. For instance, when one of the features changes and also the geometry of that feature changes, or when the feature does not exist any more, it's difficult to maintain/update XLinks between the feature geometries.
Next steps
-> Claus will put the discussed examples on github.
-> Volker will look for examples in LOD3.
-> Thomas will look for examples regarding feature links between roads and bridges.

I added some examples to the xlinks-discussion branch: https://github.com/opengeospatial/CityGML-3.0Encodings/tree/xlinks-discussion/CityGML/Examples/Building/XLink_examples

At the web meeting on 25 February 2021 we discussed the examples from Claus, see above, as well as examples on links between roads and bridges, roads and buildings, and between roads sharing an intersection that are available in the Transportation examples folder: https://github.com/opengeospatial/CityGML-3.0Encodings/tree/master/CityGML/Examples/Transportation/Basic examples
As next step TUM will prepare a first draft of rules for when to use CityObjectRelation and when to use XLinks to relate objects that are shared by different features. This draft will be discussed in the next meeting on 11 March 2021.

At the web meeting on 11 March 2021 we discussed a first draft of the rules. We will have a further round of internal refinement of the rules, before we provide them for public comment.
Further todos:
-> Claus and Tatjana will go through issues and check which of them can already be closed and which of them should be discussed next
-> Tatjana will go through UML model and provide a proposal for which associations should be set to 'inline' or to 'byReference' encoding

I've discussed this at length with our development team and the main concern raised was that however we decide to implement support for XLinks, we should only allow geometry XLinks to point to other geometries, not to features. Our understanding is that this is implicit in the GML spec, but it would be worth underlining this for the context of CityGML 3.
This does not preclude the use of Xlinks for links to other features outside of the geometry, such as discussed in feature to feature references as discussed above in Tatjana's comment from Feb 12. We also do not imply that we prefer the use of Xlinks to spread around geometry definitions, since in general it is most often easiest to resolve a geometry inline rather than via reference. That said, if we do need to use geometry Xlinks - they should be to other geometries and not to other features.
This comment also relates to issue#6 raised earlier by Claus on 'Restrict Xlinks for GML encoding'


Web performance

Related to #99. Notes from the front-end team meeting held on 02/05
How do we get there?

There’s a number of grunt/gulp tasks to measure performance while in Development.
There’s gulp tasks for setting performance budgets. Can we talk about those in the standards?
Is everyone aware of the throttling capability in DevTools? Sometimes I load pages using a 56k modem to see the difference.
Discussing performance budgets in the front-end standards

Recommended steps

Discuss and determine performance budget guidelines/standards
Add them to the front-end standards
Implement gulp/grunt tasks as part of cf generator

How do we measure success?

New Relic has performance stats and we can see what our performance looks like in Production
Should a performance budget be part of the SAG review?

Needs for MVP (discussed in meeting 3/4):

Best practices
Performance budget


Worksheet Connections

What
This PR implements a new custom element called <ws-connection> that specifies relationships between Worksheets. Additionally, it uses the leader-line library to draw graphical connections between Worksheets using dynamic SVGs.
Implementation
Proper use of a <ws-connection> element is simple: specify both a source= and destination= value representing the id of the respective Worksheet elements, and a connection will be drawn between them. This visual representation of the connection will update as the Worksheet objects are moved around the workspace.
Part of the advantage of this design is that we can use normal DOM queries to figure out the connections between different Worksheets.
WSPort
Some work went into the idea of "ports" which would allow users to dynamically great connections between Worksheets by dragging the mouse from the port of one sheet to the port of a target sheet. It became unclear whether or not this would even be useful to users, or what creating connections in this way would even achieve compared to other methods we have planned in the near future. I have left that code in this PR for posterity, in case we ever come back to it. I suggest that after some reasonable amount of time, if we have note revisited this concept, we remove it from the repository.

Cool; a few questions:
is the leader line supposed to stick in ws-port-basic.html. i keep dropping it over the port and nothing happens, ie it disappears after a second or so?
was there supposed to be a way to do this with worksheets (not just in the example)? I recall you added a port-icon, but don't see it in the UI. (The diff on Worksheet.js got messed up somehow in this PR so it's hard to see what was changed).
do we want to reconcile this with the current linker? right now in theory we have two concurrent ways to "link" elements

is the leader line supposed to stick in ws-port-basic.html. i keep dropping it over the port and nothing happens, ie it disappears after a second or so?

This works for me. Are you dropping on the other port (and not the container for the other port)?

was there supposed to be a way to do this with worksheets (not just in the example)? I recall you added a port-icon, but don't see it in the UI. (The diff on Worksheet.js got messed up somehow in this PR so it's hard to see what was changed).

I removed this because we determined that we would not have users connect worksheets this way. We can always bring it back later if we want.

do we want to reconcile this with the current linker? right now in theory we have two concurrent ways to "link" elements

Let's do this in a subsequent pairing session, if you're up for it.

is the leader line supposed to stick in ws-port-basic.html. i keep dropping it over the port and nothing happens, ie it disappears after a second or so?

This works for me. Are you dropping on the other port (and not the container for the other port)?

this is what i am doing

and nothing happens, ie the arrow just disappears
(also i've tried dropping everywhere) i am on FF

This is what I'm seeing in FF:
https://user-images.githubusercontent.com/1640299/184405804-04ec4eb8-93ba-49fb-91f8-f3bd7dc29cf8.mov

yeah well something is wrong i can't get that to happen - no errors nothing

https://user-images.githubusercontent.com/1154326/184627245-d69b091f-9165-413a-819c-9046741f09a2.mov

merging with open issue #26 related to above


Remove version: igoogolx.itun2socks version 1.6.4

This version is older than what has been set in max-versions-to-keep by the publisher.
Microsoft Reviewers: Open in CodeFlow

URL: https://github.com/igoogolx/itun2socks/releases/download/v1.6.4/itun2socks_1.6.4_windows_amd64.zip
OK
(Automated message - build 913)


Bubble Sort ( Sorting Algo.)

Bubble sort is a sorting algorithm that swaps adjacent elements if they are in the incorrect order. The sorting algorithm will iterate through a list of elements until no more swaps occur, meaning that all the elements are in the correct order.
IMPORTANT: Please do not create a Pull Request without an issue.
All Submissions:

[ ] I have read the CONTRIBUTING document.
[ ] My code is written in Python3 and is ending with .py
[ ] Have you checked to ensure there aren't other open Pull Requests for the same update/change?
[ ] I have checked that my submission does pass the test on LeetCode.com
[ ] Does your filename follow the naming Conventions?
[ ] Have you linked your PR to an Issue?

Closing issues
Put closes #XXXX in your comment to auto-close the issue that your PR fixes (if such).

PR does not follow Contribution Guidelines - closed as spam


Fix rendering when responsive option set to true

Description:
Error TypeError: Cannot read property 'length' of null is displayed in the console when user has set responsive: true, the audio is not loaded and the screen is resized.
Browser version(s):
Google Chrome v71
Code needed to reproduce the issue:
WaveSurfer.create({
    container: '#waveform',
    responsive: true,
});

https://codepen.io/michalszorad/pen/WLbPbQ
Use behaviour needed to reproduce the issue:
Resize the window and see errors in the console.
Possible solution:
In the method drawBuffer (https://github.com/MichalSzorad/wavesurfer.js/blob/master/src/wavesurfer.js#L1055) skip rendering when buffer is not set.
drawBuffer() {
  if (!this.backend.buffer) {
    return;
  }
  // ...
}

This could fix the problem of #1507


[FedPeg] Improve matured blocks sync manager

This PR improves the code around the matured blocks sync manager to always return a result class from the API call. This is so that an error message can be shown on the console if anything went wrong getting the mature block deposits.
Don't merge as I am testing this 👍

Since IActionResult on its own provides a mechanism by which an error or a result can be returned I am not convinced that we need to restrict the user to this new pattern.
Maybe a utility class to encapsulate IActionResult on the caller side would suffice?

Since IActionResult on its own provides a mechanism by which an error or a result can be returned I am not convinced that we need to restrict the user to this new pattern.
Maybe a utility class to encapsulate IActionResult on the caller side would suffice?

Closing as I will redo this one in smaller PRs


Upgrade CLI to use MlsGroup

Ref #642

Currently includes #670 in the patch so the whole thing builds. But, as usual, once it lands, I'll rebase to remove that stuff.

Thank you for the review! I updated the PR with the changes.

Can you merge main into this branch and resolve the conflicts? It looks like codecov has issues with existing PRs from forks, hopefully that won't be the case in future PRs anymore.

I rebased and updated invite to use the new merge_pending_commit, see the latest commit for the new changes.

Re: force push: makes sense, and I will keep that in mind going forward. :)


APT whitelist request for sagemath-upstream-binary

This replaces travis-ci/travis-ci#4311.
The original text by @isuruf follows

sagemath-upstream-binary package from ppa:aims/sagemath
This package is needed for sympy and symengine

Ran tests, but could not found source package. Either the source package for sagemath-upstream-binary does not exist, or the package needs an APT source. If you wisht to add an APT source, please follow the directions on https://github.com/travis-ci/apt-source-whitelist#source-approval-process. Build results: https://travis-ci.org/travis-ci/apt-whitelist-checker/builds/72545627.


Sphinx must be version >=1.4 for sphinx.ext.githubpages

Description
requirements file has just "sphinx" but sphinx.ext.githubpages is supported only from 1.4.
To Reproduce
run with older version and get an error
Expected behavior
requirement should be sphinx>=1.4
Environment:

OS: Ubuntu 16.04.4
Python version:  3.5

Additional context

Resolved with #128.


"mev_simBundle" rpc method for enhanced transaction simulation

Describe the feature
mev_simBundle is a rpc endpoint spec used for simulating a bundle in the virtual environment.
First introduced by the flashbot, it is widely recognized as THE BEST way to simulate a bundle (possibly multiple tx)
Currently eth_callBundle works well for similar purpose but mev_simBundle is better in that,
it returns transaction logs of the simulated transaction.
Having transaction logs is critical in multiple occasions such as,

Pre-validating transaction before sending real transaction (for protection, test)
Test / debugging contract
Searchers checking whether specific pending transaction yields specific action (e.g. token transfer, swap)

Currently, within "mev.rs" struct for the mev_simBundle is already defined fully,
while its implementation is missing in the "bundle.rs".
Additional context
Flashbots document

not opposed to this because I see this being useful and only does simulation
I think the reference impl is
https://github.com/flashbots/builder/blob/df9c765067d57ab4b2d0ad39dbb156cbe4965778/internal/ethapi/sbundle_api.go#L205
https://github.com/flashbots/builder/blob/df9c765067d57ab4b2d0ad39dbb156cbe4965778/core/sbundle_sim.go#L58
TODO

add new mev namespace
port simBundle function

hello, can i work on this issue?

yes please,
for ref ptal at the call_bundle impl:
https://github.com/paradigmxyz/reth/blob/df9cb81ea61a1393b1caf5da50e43d633920f7da/crates/rpc/rpc/src/eth/bundle.rs#L51-L51

@mattsse
thank you sir

Any progress on this? It would be nice to have the tx logs in the callbundle result. This used to be possible in a patched version of mev-geth as well.

@mattsse if there have been no updates on this, I would like to pick this up. Could you please assign this to me?

Working on the impl, will share a draft soon!

@mattsse We need to implement Bundle inside BundleItem in https://github.com/alloy-rs/alloy/blob/8d99c28da17232a26afe7af0251fde2cd00a89fe/crates/rpc-types-mev/src/mev_calls.rs#L83. I can implement and raise a PR over there

just checking in @SkandaBhat
types should now be all unblocked, are you on this or should I open this for others?

working on this, should have a draft soon @mattsse

feel free to open a draft pr early

Will create a draft today @mattsse


Adding Verizon SKU to CA documentation

Adding Azure CDN from Verizon endpoints to documentation to remain consistent with BYOC documentation for HTTPS activation.  Confirmed with PG Ravindra Kumar Patel before PR.  BYOC Doc: https://docs.microsoft.com/en-us/azure/cdn/cdn-custom-ssl?tabs=option-2-enable-https-with-your-own-certificate

@sbdoroff : Thanks for your contribution! The author(s) have been notified to review your proposed change.

Closing because information needs update


How to start?

Hi.
I read gettingstarted.md , but I don't know where to start. I tried to input texts on CMD console window in windows10, but git order does not work.

Hi, I suggest you come on Slack for little faster support. Otherwise, it may take some time before someone replies here.

Hi @leegod did you manage?
If you think we need to modify our getting started then please suggest how form your experience (or submit a PR).

@dangershony No not yet. Thx for reply. I still need help. And from 3 days ago, I left 7~10 messages to Stratis site's contact, but no replies so far. Why?
I have many questions.
These are part of it.

Hi.So I have interest in Stratis because it uses C#. 1. So How to make business model using blockchain tech?Maybe I should make own mobile app? or?2. Then where blockchain data that my app and its users generates stored?Phone can't store it, then this means I should also make window application like bitcoin core?Thanks.
Hi.So I have interest in Stratis because it uses C#. 1. So How to make business model using blockchain tech?Maybe I should make own mobile app? or?2. Then where blockchain data that my app and its users generates stored?Phone can't store it, then this means I should also make window application like bitcoin core?Thanks.
Hi.So I have interest in Stratis because it uses C#. 1. So How to make business model using blockchain tech?Maybe I should make own mobile app? or?2. Then where blockchain data that my app and its users generates stored?Phone can't store it, then this means I should also make window application like bitcoin core?Thanks.

Hi.So I have interest in Stratis because it uses C#. 1. So How to make business model using blockchain tech?Maybe I should make own mobile app? or?2. Then where blockchain data that my app and its users generates stored?Phone can't store it, then this means I should also make window application like bitcoin core?Thanks.
Hi.So I have interest in Stratis because it uses C#. 1. So How to make business model using blockchain tech?Maybe I should make own mobile app? or?2. Then where blockchain data that my app and its users generates stored?Phone can't store it, then this means I should also make window application like bitcoin core?Thanks.

Hi.So I have interest in Stratis because it uses C#. 1. So How to make business model using blockchain tech?Maybe I should make own mobile app? or?2. Then where blockchain data that my app and its users generates stored?Phone can't store it, then this means I should also make window application like bitcoin core?Thanks.

Hi you can come to our slack for more answers (not the site).
To answer your questions.

you need to think of a problem that requires trust and can be replaced with blockchain.
Blockchain can probably not run on mobile, its too heavy.

@dangershony  Slack need to be invited. But I don't know how to contact their admin, stratis site's contact doesn't reply to my request or questions. Can you help me to get invited?

Its auto invite https://stratis-invite.herokuapp.com/
Seems offline right now, if you don't manage to get an invite ask me again.

@dangershony I ask get me invited plz.

It is online again now.

@Aprogiena  it says failed, User disabled. Can't you do manually?

I was told to ask you if you can try with another email address and report the result back.

Or if you can get me your username I will enable the account.

@dev0tion My username is 'creatoree' maybe I remember.

@leegod I can't find a user with that name.

@dev0tion then maybe 'leegod' or I don't remember..

@leegod also unknown. I suggest you try with another e-mail address.

Ok, I see you got in :)!
@dangershony you can close the issue (I have no permission to).


fix needed for missing country flags in Comments

Could you please fix the missing country flags in Comments please.

No, It cannot be fixed, see #1877 to find out why..


Updates placement-operator to use latest keystone and lib-common

external package got moved to the api sub module
the generated CRDs which are required by envtest are now also in the api submodule and can be installed from getting the api module version from go.mod
KeystoneService got split into KeystoneService and KeystoneEndpoint to be able to manage those two resources in separate controllers

/lgtm Thanks!


Theme Development: Font Manager Failure

Current Machine Details:

Platform MacOS Catalina
Node version:
- v13.6.0  (failed)
- v8.13.0 (works)
- v10.0.0 (works)
- v11.1.0 (works, but install took 5x as long as previous versions & with lots of deprecation warnings)

Steps to Reproduce Error:

I attempted to create a theme, so I forked the altair terminus theme
After running npm i I got the following node-gyp error:

Stack Trace for Error on Node 13.6.0

terminus-altair => master $ npm i

><EMAIL_ADDRESS>install /Users/cliffordfajardo/Desktop/terminus-altair/node_modules/font-manager
> node-gyp rebuild

  CXX(target) Release/obj.target/fontmanager/src/FontManager.o
In file included from ../src/FontManager.cc:5:
In file included from ../../nan/nan.h:221:
In file included from ../../nan/nan_converters.h:67:
../../nan/nan_converters_43_inl.h:22:1: error: no viable conversion from 'Local<v8::Context>' to 'v8::Isolate *'
X(Boolean)
^~~~~~~~~~
../../nan/nan_converters_43_inl.h:18:23: note: expanded from macro 'X'
      val->To ## TYPE(isolate->GetCurrentContext())                            \
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:2762:37: note: passing argument to parameter 'isolate' here
  Local<Boolean> ToBoolean(Isolate* isolate) const;
                                    ^
In file included from ../src/FontManager.cc:5:
In file included from ../../nan/nan.h:221:
In file included from ../../nan/nan_converters.h:67:
../../nan/nan_converters_43_inl.h:40:1: error: no viable conversion from 'Local<v8::Context>' to 'v8::Isolate *'
X(bool, Boolean)
^~~~~~~~~~~~~~~~
../../nan/nan_converters_43_inl.h:37:29: note: expanded from macro 'X'
  return val->NAME ## Value(isolate->GetCurrentContext());                     \
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:2771:30: note: passing argument to parameter 'isolate' here
  bool BooleanValue(Isolate* isolate) const;
                             ^
In file included from ../src/FontManager.cc:5:
In file included from ../../nan/nan.h:222:
In file included from ../../nan/nan_new.h:189:
../../nan/nan_implementation_12_inl.h:103:42: error: no viable conversion from 'v8::Isolate *' to 'Local<v8::Context>'
  return scope.Escape(v8::Function::New( isolate
                                         ^~~~~~~
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:189:7: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from
      'v8::Isolate *' to 'const v8::Local<v8::Context> &' for 1st argument
class Local {
      ^
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:189:7: note: candidate constructor (the implicit move constructor) not viable: no known conversion from
      'v8::Isolate *' to 'v8::Local<v8::Context> &&' for 1st argument
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:193:13: note: candidate template ignored: could not match 'Local<type-parameter-0-0>' against 'v8::Isolate *'
  V8_INLINE Local(Local<S> that)
            ^
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:4313:22: note: passing argument to parameter 'context' here
      Local<Context> context, FunctionCallback callback,
                     ^
In file included from ../src/FontManager.cc:5:
In file included from ../../nan/nan.h:222:
In file included from ../../nan/nan_new.h:189:
../../nan/nan_implementation_12_inl.h:337:37: error: too few arguments to function call, expected 2, have 1
  return v8::StringObject::New(value).As<v8::StringObject>();
         ~~~~~~~~~~~~~~~~~~~~~      ^
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:5688:3: note: 'New' declared here
  static Local<Value> New(Isolate* isolate, Local<String> value);
  ^
In file included from ../src/FontManager.cc:5:
In file included from ../../nan/nan.h:222:
In file included from ../../nan/nan_new.h:189:
../../nan/nan_implementation_12_inl.h:337:58: error: expected '(' for function-style cast or type construction
  return v8::StringObject::New(value).As<v8::StringObject>();
                                         ~~~~~~~~~~~~~~~~^
../../nan/nan_implementation_12_inl.h:337:60: error: expected expression
  return v8::StringObject::New(value).As<v8::StringObject>();
                                                           ^
In file included from ../src/FontManager.cc:5:
../../nan/nan.h:1063:53: error: too few arguments to function call, single argument 'context' was not specified
      v8::Local<v8::String> string = from->ToString();
                                     ~~~~~~~~~~~~~~ ^
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:2750:3: note: 'ToString' declared here
  V8_WARN_UNUSED_RESULT MaybeLocal<String> ToString(
  ^
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8config.h:419:31: note: expanded from macro 'V8_WARN_UNUSED_RESULT'
#define V8_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
                              ^
In file included from ../src/FontManager.cc:5:
../../nan/nan.h:1073:37: error: cannot initialize a parameter of type 'v8::Isolate *' with an lvalue of type 'char *'
        length_ = string->WriteUtf8(str_, static_cast<int>(len), 0, flags);
                                    ^~~~
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:2947:26: note: passing argument to parameter 'isolate' here
  int WriteUtf8(Isolate* isolate, char* buffer, int length = -1,
                         ^
In file included from ../src/FontManager.cc:5:
../../nan/nan.h:1847:28: error: no matching member function for call to 'Set'
    New(persistentHandle)->Set(New(key).ToLocalChecked(), value);
    ~~~~~~~~~~~~~~~~~~~~~~~^~~
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:3547:37: note: candidate function not viable: requires 3 arguments, but 2 were provided
  V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
                                    ^
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:3550:37: note: candidate function not viable: requires 3 arguments, but 2 were provided
  V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
                                    ^
In file included from ../src/FontManager.cc:5:
../../nan/nan.h:1853:28: error: no matching member function for call to 'Set'
    New(persistentHandle)->Set(key, value);
    ~~~~~~~~~~~~~~~~~~~~~~~^~~
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:3547:37: note: candidate function not viable: requires 3 arguments, but 2 were provided
  V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
                                    ^
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:3550:37: note: candidate function not viable: requires 3 arguments, but 2 were provided
  V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
                                    ^
In file included from ../src/FontManager.cc:5:
../../nan/nan.h:1859:28: error: no matching member function for call to 'Set'
    New(persistentHandle)->Set(index, value);
    ~~~~~~~~~~~~~~~~~~~~~~~^~~
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:3547:37: note: candidate function not viable: requires 3 arguments, but 2 were provided
  V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
                                    ^
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:3550:37: note: candidate function not viable: requires 3 arguments, but 2 were provided
  V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
                                    ^
In file included from ../src/FontManager.cc:5:
../../nan/nan.h:1865:32: error: no matching member function for call to 'Get'
        New(persistentHandle)->Get(New(key).ToLocalChecked()));
        ~~~~~~~~~~~~~~~~~~~~~~~^~~
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:3594:43: note: candidate function not viable: requires 2 arguments, but 1 was provided
  V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
                                          ^
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:3597:43: note: candidate function not viable: requires 2 arguments, but 1 was provided
  V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
                                          ^
In file included from ../src/FontManager.cc:5:
../../nan/nan.h:1871:48: error: no matching member function for call to 'Get'
    return scope.Escape(New(persistentHandle)->Get(key));
                        ~~~~~~~~~~~~~~~~~~~~~~~^~~
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:3594:43: note: candidate function not viable: requires 2 arguments, but 1 was provided
  V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
                                          ^
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:3597:43: note: candidate function not viable: requires 2 arguments, but 1 was provided
  V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
                                          ^
In file included from ../src/FontManager.cc:5:
../../nan/nan.h:1876:48: error: no matching member function for call to 'Get'
    return scope.Escape(New(persistentHandle)->Get(index));
                        ~~~~~~~~~~~~~~~~~~~~~~~^~~
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:3594:43: note: candidate function not viable: requires 2 arguments, but 1 was provided
  V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
                                          ^
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:3597:43: note: candidate function not viable: requires 2 arguments, but 1 was provided
  V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
                                          ^
In file included from ../src/FontManager.cc:5:
In file included from ../../nan/nan.h:2690:
../../nan/nan_object_wrap.h:24:25: error: no member named 'IsNearDeath' in 'Nan::Persistent<v8::Object, v8::NonCopyablePersistentTraits<v8::Object> >'
    assert(persistent().IsNearDeath());
           ~~~~~~~~~~~~ ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/assert.h:93:25: note: expanded from macro 'assert'
    (__builtin_expect(!(e), 0) ? __assert_rtn(__func__, __FILE__, __LINE__, #e) : (void)0)
                        ^
In file included from ../src/FontManager.cc:5:
In file included from ../../nan/nan.h:2690:
../../nan/nan_object_wrap.h:67:18: error: no member named 'MarkIndependent' in 'Nan::Persistent<v8::Object, v8::NonCopyablePersistentTraits<v8::Object> >'
    persistent().MarkIndependent();
    ~~~~~~~~~~~~ ^
../../nan/nan_object_wrap.h:124:26: error: no member named 'IsNearDeath' in 'Nan::Persistent<v8::Object, v8::NonCopyablePersistentTraits<v8::Object> >'
    assert(wrap->handle_.IsNearDeath());
           ~~~~~~~~~~~~~ ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/assert.h:93:25: note: expanded from macro 'assert'
    (__builtin_expect(!(e), 0) ? __assert_rtn(__func__, __FILE__, __LINE__, #e) : (void)0)
                        ^
In file included from ../src/FontManager.cc:6:
../src/FontDescriptor.h:115:10: error: no matching member function for call to 'Set'
    res->Set(Nan::New<String>("path").ToLocalChecked(), Nan::New<String>(path).ToLocalChecked());
    ~~~~~^~~
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:3547:37: note: candidate function not viable: requires 3 arguments, but 2 were provided
  V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
                                    ^
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:3550:37: note: candidate function not viable: requires 3 arguments, but 2 were provided
  V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
                                    ^
In file included from ../src/FontManager.cc:6:
../src/FontDescriptor.h:116:10: error: no matching member function for call to 'Set'
    res->Set(Nan::New<String>("postscriptName").ToLocalChecked(), Nan::New<String>(postscriptName).ToLocalChecked());
    ~~~~~^~~
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:3547:37: note: candidate function not viable: requires 3 arguments, but 2 were provided
  V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
                                    ^
/Users/cliffordfajardo/Library/Caches/node-gyp/13.6.0/include/node/v8.h:3550:37: note: candidate function not viable: requires 3 arguments, but 2 were provided
  V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
                                    ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make: *** [Release/obj.target/fontmanager/src/FontManager.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/Users/cliffordfajardo/.my-npm-globals/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack     at ChildProcess.emit (events.js:321:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
gyp ERR! System Darwin 19.3.0
gyp ERR! command "/usr/local/Cellar/node/13.6.0/bin/node" "/Users/cliffordfajardo/.my-npm-globals/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /Users/cliffordfajardo/Desktop/terminus-altair/node_modules/font-manager
gyp ERR! node -v v13.6.0
gyp ERR! node-gyp -v v5.0.7
gyp ERR! not ok
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>- 3 but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>|| ^6.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>|| ^6.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>|| ^6.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>|| ^4.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none is installed. You must install peer dependencies yourself.

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR<EMAIL_ADDRESS>install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR!      /Users/cliffordfajardo/.npm/_logs/2020-03-15T05_58_26_327Z-debug.log

altair is a third party theme, but I went ahead and updated deps in my own fork - please try basing your theme on it: https://github.com/Eugeny/terminus-altair
I've also send a PR to terminus-altair's author.


serialport-list  结果异常，怎么解决

系统版本
root@localhost:~# cat /etc/issue
Ubuntu 16.04.6 LTS \n \l
遇到的问题
root@localhost:~# serialport-list -f json
{"errno":-2,"code":"ENOENT","syscall":"spawn udevadm","path":"udevadm","spawnargs":["info","-e"]}

I'm having the same issue, how can I install that on Android/linux?

I tried to solve it, but it was an Android/linux permission problem.
For someone who is in the same situation, I haven't tested it, but my solution would be to root the phone.


⚠ Quirk Club Argentina (API endpoint) has degraded performance

In 8b704aa, Quirk Club Argentina (API endpoint) (https://us-central1-quirkclub-dev.cloudfunctions.net/api/check/api) experienced degraded performance:

HTTP code: 200
Response time: 9580 ms

Resolved: Quirk Club Argentina (API endpoint) performance has improved in c57523c.


Package/test tarballs in a temporary location

Right now a Bomb struct is used to attempt to ensure that broken tarballs
don't escape, but this unfortunately doesn't work for when Cargo is terminated
via other means such as ctrl-c or abnormal termination. Instead the tarball is
constructed in a temporary location and then only moved to the final location
once all checks pass.
Closes #2173
cc #2177

r? @wycats
(rust_highfive has picked a reviewer for you, use r? to override)

r? @brson

@bors r+

:pushpin: Commit e8afad4 has been approved by brson

:hourglass: Testing commit e8afad4 with merge 2a07807...

:sunny: Test successful - cargo-linux-32, cargo-linux-64, cargo-mac-32, cargo-mac-64, cargo-win-gnu-32, cargo-win-gnu-64, cargo-win-msvc-32, cargo-win-msvc-64

:+1:


makefile bricked on linux??

Hi,
I'd like to report a bug that I've got no idea how to solve.
I am using two OSes: Manjaro and Kubuntu 22.10
About a week ago I was using Kubuntu to upload using the WCH-Link E.
Then I spent a week tryping to wrap my head around SPI, now "sudo make" builds an .elf but doesn't upload. I'm using the latest "unified makefile".
With blink I get elf and bin but no upload.
On manjaro I can remember make always calling minichlink to upload.
On Kubuntu everything just worked, no issues, and I haven't run updates since.
Strange thing is: when I manually call minichlink with the right bin, it gets flashed like it used to.
But sudo make just successfully builds, no errors, no "programmer-not-found".
Seems like it just doesn't call minchlink and in some examples doesn't generate a .bin file, just the elf.
Maybe it's fine for yall on Windows?
After restoring blink to the "old" style of makefile
https://github.com/cnlohr/ch32v003fun/commit/d71a0500c2145f920a345081392367e387298030
that one just works again!
I even did a fresh wipe and clone from master an hour ago!

The make targets were changed recently so that the default with no target specified now just builds the binary. When you want to program you must now use the "flash" target. In other words:
make flash
in order to program.

ah that works, thank you @emeb!

Perhaps we should switch that back to default.

https://github.com/cnlohr/ch32v003fun/pull/56


[20.03] pythonPackages.pywinrm: missing dependency

Fixes failing build: https://hydra.nixos.org/build/115537923
CC @NixOS/nixos-release-managers @nh2
ZHF: #80379
(cherry picked from commit 36a1d1023ac9f6f731cc1a6389870a567d206e05)

@GrahamcOfBorg build python2Packages.pywinrm python37Packages.pywinrm
(Package marked as disabled for python 3.8)