343 chunks or over 22 million blocks need to be loaded at the server  just to make the first chunk visible at the client?

The server schedules a chunk for light merging, in LocalChunkProvider when all chunks around it are loaded:
    private boolean makeChunkAvailable(final ReadyChunkInfo readyChunkInfo) {
        final Chunk chunk = nearCache.get(readyChunkInfo.getPos());
        if (chunk == null) {
            return false;
        }
        for (Vector3i pos : Region3i.createFromCenterExtents(readyChunkInfo.getPos(), 1)) {
            if (nearCache.get(pos) == null) {
                return false;
            }
        }
        lightMerger.beginMerge(chunk, readyChunkInfo);
        return true;
    }

So 3x3x3 = 27  chunks are needed before the sever starts light merging.
When the server has merged the light in LocalChunkProvider, it calls                     region.chunkReady(chunk):
    @Override
    public void completeUpdate() {
        ReadyChunkInfo readyChunkInfo = lightMerger.completeMerge();
        if (readyChunkInfo != null) {
            Chunk chunk = readyChunkInfo.getChunk();
            chunk.writeLock();
            try {
                chunk.markReady();
                updateAdjacentChunksReadyFieldOf(chunk);
                updateAdjacentChunksReadyFieldOfAdjChunks(chunk);

                if (!readyChunkInfo.isNewChunk()) {
                    PerformanceMonitor.startActivity("Generating Block Entities");
                    generateBlockEntities(chunk);
                    PerformanceMonitor.endActivity();
                }
                if (readyChunkInfo.getChunkStore() != null) {
                    readyChunkInfo.getChunkStore().restoreEntities();
                }

                if (!readyChunkInfo.isNewChunk()) {
                    PerformanceMonitor.startActivity("Sending OnAddedBlocks");
                    readyChunkInfo.getBlockPositionMapppings().forEachEntry(new TShortObjectProcedure<TIntList>() {
                        @Override
                        public boolean execute(short id, TIntList positions) {
                            if (positions.size() > 0) {
                                blockManager.getBlock(id).getEntity().send(new OnAddedBlocks(positions, registry));
                            }
                            return true;
                        }
                    });
                    PerformanceMonitor.endActivity();
                }

                PerformanceMonitor.startActivity("Sending OnActivateBlocks");
                readyChunkInfo.getBlockPositionMapppings().forEachEntry(new TShortObjectProcedure<TIntList>() {
                    @Override
                    public boolean execute(short id, TIntList positions) {
                        if (positions.size() > 0) {
                            blockManager.getBlock(id).getEntity().send(new OnActivatedBlocks(positions, registry));
                        }
                        return true;
                    }
                });
                PerformanceMonitor.endActivity();

                if (!readyChunkInfo.isNewChunk()) {
                    worldEntity.send(new OnChunkGenerated(readyChunkInfo.getPos()));
                }
                worldEntity.send(new OnChunkLoaded(readyChunkInfo.getPos()));
                for (ChunkRelevanceRegion region : regions.values()) {
                    region.chunkReady(chunk);
                }
            } finally {
                chunk.writeUnlock();
            }
        }
    }

That will trigger the chunk to be "relevant" for the remote in ChunkRelevanceRegion:
    public void chunkReady(Chunk chunk) {
        if (currentRegion.encompasses(chunk.getPosition()) && !relevantChunks.contains(chunk.getPosition())) {
            relevantChunks.add(chunk.getPosition());
            sendChunkRelevant(chunk);
        }
    }

Which marks the chunk as ready in NetClient:
    public void onChunkRelevant(Vector3i pos, Chunk chunk) {
        invalidatedChunks.remove(pos);
        readyChunks.put(pos, chunk);
    }

Which also sends the chunk then to the client:
    private void sendNewChunks(NetData.NetMessage.Builder message) {
        if (!readyChunks.isEmpty()) {
            chunkSendCounter += chunkSendRate * NET_TICK_RATE * networkSystem.getBandwidthPerClient();
            if (chunkSendCounter > 1.0f) {
                chunkSendCounter -= 1.0f;
                Vector3i center = new Vector3i();
                LocationComponent loc = getEntity().getComponent(ClientComponent.class).character.getComponent(LocationComponent.class);
                if (loc != null) {
                    center.set(ChunkMath.calcChunkPos(new Vector3i(loc.getWorldPosition(), 0.5f)));
                }
                Vector3i pos = null;
                int distance = Integer.MAX_VALUE;
                for (Vector3i chunkPos : readyChunks.keySet()) {
                    int chunkDistance = chunkPos.distanceSquared(center);
                    if (pos == null || chunkDistance < distance) {
                        pos = chunkPos;
                        distance = chunkDistance;
                    }
                }
                Chunk chunk = readyChunks.remove(pos);
                relevantChunks.add(pos);
                message.addChunkInfo(chunk.encode());
            }
        } else {
            chunkSendCounter = 1.0f;
        }
    }

The RemoteChunkProvider will asynchronously process the received chunks:
    public void receiveChunk(final Chunk chunk) {
        pipeline.doTask(new AbstractChunkTask(chunk.getPosition()) {
            @Override
            public String getName() {
                return "Internal Light Generation";
            }

            @Override
            public void run() {
                InternalLightProcessor.generateInternalLighting(chunk);
                chunk.deflate();
                onChunkIsReady(chunk);
            }
        });
    }

and when done the RemoteChunkProvider puts them into a ready set:
    public void onChunkIsReady(Chunk chunk) {
        try {
            readyChunks.put(chunk);
        } catch (InterruptedException e) {
            logger.warn("Failed to add chunk to ready queue", e);
        }
    }

From where it gets procssed by the RemoteChunkProvider in beginUpdate:
 public void beginUpdate() {
        if (listener != null) {
            List<Chunk> newReadyChunks = Lists.newArrayList();
            readyChunks.drainTo(newReadyChunks);
            if (!newReadyChunks.isEmpty()) {
                sortedReadyChunks.addAll(newReadyChunks);
                Collections.sort(sortedReadyChunks, new ReadyChunkRelevanceComparator());
                for (Chunk chunk : newReadyChunks) {
                    Chunk oldChunk = chunkCache.put(chunk.getPosition(), chunk);
                    if (oldChunk != null) {
                        oldChunk.dispose();
                        updateAdjacentChunksReadyFieldOfAdjChunks(chunk);
                    }
                }
            }
            if (!sortedReadyChunks.isEmpty()) {
                int loaded = 0;
                for (int i = sortedReadyChunks.size() - 1; i >= 0 && loaded < LOAD_PER_FRAME; i--) {
                    Chunk chunkInfo = sortedReadyChunks.get(i);
                    PerformanceMonitor.startActivity("Make Chunk Available");
                    if (makeChunkAvailable(chunkInfo)) {
                        sortedReadyChunks.remove(i);
                        loaded++;
                    }
                    PerformanceMonitor.endActivity();
                }
            }
        }
    }

A chunk gets only scheduled for light merging (on client side this time) by RemoteChunkProvider when all chunks around it are loaded:
    private boolean makeChunkAvailable(final Chunk chunk) {
        for (Vector3i pos : Region3i.createFromCenterExtents(chunk.getPosition(), 1)) {
            if (chunkCache.get(pos) == null) {
                return false;
            }
        }

        lightMerger.beginMerge(chunk, chunk);
        return true;
    }

So the client need 3x3x3 chunks to start light merging. The server needs to generate 5x5x5 chunks before it starts sending those 3x3x3 chunks to the client.
Chunks get marked as ready when the light merging is done in RemoteChunkProvider:
    public void completeUpdate() {
        Chunk chunk = lightMerger.completeMerge();
        if (chunk != null) {
            chunk.markReady();
            updateAdjacentChunksReadyFieldOf(chunk);
            updateAdjacentChunksReadyFieldOfAdjChunks(chunk);
            listener.onChunkReady(chunk.getPosition());
            worldEntity.send(new OnChunkLoaded(chunk.getPosition()));
        }
    }

And the method in RenderableWorldImpl allows only the rendering of a chunk when all adjacent chunks are ready:
    public boolean isChunkValidForRender(RenderableChunk chunk) {
        return chunk.isReady() && chunk.areAdjacentChunksReady();
    }

So the server needs to generate 7x7x7 chunks so that the client gets 5x5x5 chunks for light merging. This 5x5x5 chunks the client then uses to mark 3x3x3 chunks as ready. Which result in the rending of a single chunk!
So in total the server needs to generate 343 chunks before the remote client sees a single one.
A chunk has 65536 blocks, so we would have to generate over 22 million blocks on the server before the client sees anything from the world.

It is the same for the LocalChunkProvider too.

I updated the upper description, we need to load even more chunks at a server to transfer them to a client.

Ideally, the behavior we want is:

A chunk can be made ready for use as soon as it is generated
This includes sending to a remote client
A chunk can be rendered as soon as it is surrounded by other, loaded chunks. This is both so that its lighting can be adequately generated, and because rendering of a block requires the surrounding blocks (at the moment just to work out what parts need to be rendered, but ultimately the rendering of each block should depend on surrounding blocks to support things like fences connecting and potentially walking cube implementations).

Looking at the code at the moment though....
LightMerging current requires a chunk to be surrounded by chunks. This seems to be partially a performance thing (it is expensive doing light merging piece-meal) and partially a logic thing because doing ad hoc light merging can spill out of the immediate chunks in some situations. On the other hand, light merging could actually be put off until later. So we could change from:

Generate chunk
Wait until surrounded by generated chunks
Merge lighting
Mark ready
Ready Chunks can be rendered whenever surrounded by ready chunks

to

Generate chunk, mark block ready
When surrounded by generated chunks, merge lighting and mark lighting ready.
Lighting ready chunks can be rendered whenever surrounded by block ready chunks.

Any ready chunk should be sent to remote clients where relevant, and a remote client should follow the same logic on their end.
This achieves the ability to send any chunk once generated, and render chunks surrounded by 1 layer of chunks.
There is perhaps a little more we could do. We could actually render lighting ready chunks even if not surrounded by ready chunks, would just have to either not render the edge blocks or assume they are surrounded by air blocks - not perfect but would work. We could even render non-lighting ready chunks but this would probably look ugly.

@immortius I think "Lighting ready chunks can be rendered whenever surrounded by block ready chunks." wouldn't work in all cases. as Chunk rendering needs probably to know the light level of the surrounding blocks to calculate a gradient.
With  #1888  I created a pull request that makes at least clients receive all chunks and not just those for which the light calculation has been done.


[util/topgen] Use the standardized autogen banner

This commit uses the standardized autogen banner to update the topgen generated sources.

for the ip level gen scripts, do we want to wait for Philipp's ipgen
solution first?
Because that I think will help unify things.
On Tue, Sep 28, 2021 at 11:06 AM Srikrishna Iyer @.***>
wrote:

@.**** commented on this pull request.
In hw/ip/flash_ctrl/data/flash_ctrl.hjson.tpl
https://github.com/lowRISC/opentitan/pull/8402#discussion_r717839805:

@@ -1,6 +1,8 @@
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
+//
+## TODO: (uncomment) ${autogen_banner}

This is unfortunately generated by a different flash_ctrl_gen script
which does not yet understand what autogen_banner in the file is. I will
address that in a separate commit once the other PR #8368
https://github.com/lowRISC/opentitan/pull/8368 is merged.
—
You are receiving this because your review was requested.
Reply to this email directly, view it on GitHub
https://github.com/lowRISC/opentitan/pull/8402#discussion_r717839805,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAH2RSWYHBKL7OLFRHNS57LUEH72HANCNFSM5E5ZABIA
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.


Only add default toleration when it is empty

Checklist

[x] The title of this PR would make a good line in Acorn's Release Note's Changelog
[x] The title of this PR ends with a link to the main issue being address in parentheses, like: This is a title (#1216). Here's an example
[x] All relevant issues are referenced in the PR description. NOTE: don't use GitHub keywords that auto-close issues
[x] Commits follow contributing guidance
[ ] Automated tests added to cover the changes. If tests couldn't be added, an explanation is provided in the Verification and Testing section
[x] Changes to user-facing functionality, API, CLI, and upgrade impacts are clearly called out in PR description
[x] PR has at least two approvals before merging (or a reasonable exception, like it's just a docs change)

We only want to add default toleration to acorn app if no toleration is set. If toleration is set(from computeclass) we don't wa nt to add default toleration to cause unexpected behavior.

In hub, if compute class has specified the tolerations, it must include the toleration that worker nodes have right now.


[layer] Update the layer constructors

Update the constructors of layer to take arguments
Added layer_factor creator method
Updated model_loader and capi to use the factory creator
See also #199
Self evaluation:

Build test: [x]Passed [ ]Failed [ ]Skipped
Run test: [x]Passed [ ]Failed [ ]Skipped

Signed-off-by: Parichay Kapoor<EMAIL_ADDRESS>

:memo: TAOS-CI Version: 1.4.20191203. Thank you for submitting PR #636. Please a submit 1commit/1PR (one commit per one PR) policy to get comments quickly from reviewers. Your PR must pass all verificiation processes of cibot before starting a review process from reviewers. If you are new member to join this project, please read manuals in documentation folder and wiki page. In order to monitor a progress status of your PR in more detail, visit http://nnsuite.mooo.com/.

:octocat: cibot: @kparichay, One of the module of prebuild group is failed. If you want to get a hint to fix this issue, please go to https://github.com/nnstreamer/nntrainer/wiki/.

:octocat: cibot: @kparichay, A builder checker could not be completed because one of the checkers is not completed. In order to find out a reason, please go to http://nnsuite.mooo.com/nntrainer/ci/repo-workers/pr-checker/636-202010081757150.19612789154053-97b58a69b1689a6cb2c6410fc145536948c9b3ff/.

rebased.


Unable to add Nodes and Edges dynamically before runtime

Description:
When adding nodes to a StateGraph, the type inference only works correctly when using method chaining syntax. Adding nodes dynamically using separate stateGraph.addNode() calls breaks the type accumulation in the N type parameter.
Example of working code (with correct type inference):
const stateGraph = new StateGraph(StateAnnotation)
    .addNode("supervisor", supervisor)
    .addNode("retrievalAgent", retrievalAgent)

Example of code that breaks type inference:
const stateGraph = new StateGraph(StateAnnotation);
stateGraph.addNode("supervisor", supervisor);
stateGraph.addNode("retrievalAgent", retrievalAgent);

This makes it difficult to dynamically add nodes to the graph, as we're forced to use method chaining. This seems unintuitive and limits the flexibility of the StateGraph implementation.
Expected behavior:
Both approaches should maintain correct type inference, allowing for more flexible ways to add nodes to the graph, especially when dealing with dynamic configurations.
Would it be possible to adjust the type definitions to maintain type accumulation in the N type parameter regardless of whether method chaining is used?

After further investigation, I think I have found the root cause of this issue. It stems from how type casting is implemented in the addNode method:
return this as StateGraph<SD, S, U, N | K, I, O, C>;

This superficial type casting works for method chaining because each call receives a new cast, but fails for separate calls because the instance retains its original type. Interestingly, this is why addEdge works without chaining (it returns this without type casting) while addNode doesn't.
This suggests the issue requires a deeper solution and it is not possible to solve with an easy fix.
Any thoughts?

@jacoblee93 @bracesproul Having worked with LangGraph since its early days, we're now trying to make our well-functioning graphs more generic and reusable. The current method chaining requirement is becoming a real bottleneck for this.
We'd love to build our graphs from configuration, allowing us to:

Reuse successful graph patterns across different projects
Configure node/edge structure through external config
Create graph "templates" that can be customized
Create graphs based on user rights (include/exclude nodes depending on the user who is signed in)

Would you consider supporting an alternative to method chaining that would enable these patterns? Happy to share our experiences and specific use cases if helpful.

Yeah would love to hear more concretely what you're trying to do - I think best we could do is have a disableTyping param or some constructor which would not really be that different from just ts-ignore anyway

Thanks for the response! To clarify: this isn't just about typing. In Python LangGraph, we can use stateGraph.addNode without issues. What we're trying to achieve is building configurable graphs from configuration:
// We want to build the graph based on client configuration
const graph = new StateGraph(StateAnnotation);
clientConfig.enabledNodes.forEach(nodeName => {
  graph.addNode(nodeName, availableNodes[nodeName]);
  // Configure edges based on which nodes are enabled
});

The current method chaining requirement forces us to either:

Build separate static graphs for each possible configuration
Use complex workarounds that make the code much harder to maintain

Using @ts-ignore or disableTyping wouldn't solve this - it's not just about bypassing TypeScript errors, but about enabling proper graph construction from configuration before runtime.
We're curious about LangGraph's vision regarding configurable graphs. The Python implementation allows this flexibility - is this an intentional design choice? Having this ability in TypeScript would align well with LangGraph's goal of building flexible, production-ready AI applications. Would love to hear your thoughts on this.

I am pretty sure that in the early days of LangGraph this was possible. The first tutorials worked with graph.addNode. and after a while it went to chaining.
For a more practical application. We have a chatbot with prebuilt tools (as agents) and these are configurable. But we would like to make this even more configurable by toggling these tools in a portal. We are using a supervisor that we build dynamically adding these available subagents based on the config. But right now we have to load all agents as node and create all edges from these node to END with some dynamic conditional edges in between.
Hope this gives more insight in the practical solution.

I see - interesting.
It sounds like something like disableValidation parameter would unblock you?

Not exactly - disabling validation would still require us to work around the method chaining pattern. The core issue is that we want to build graphs programmatically from configuration, similar to how it works in Python LangGraph.
Method chaining forces a static, linear definition of the graph. What we're looking for is the ability to construct graphs more dynamically, where nodes and edges can be added based on configuration - without having to build separate graph definitions for each possible combination.
Is supporting this kind of configuration-based graph construction something that aligns with LangGraph's vision? Or is there perhaps a different pattern you'd recommend for achieving this?


feat(storage): add PublicAccessPrevention samples

Adds samples for 3 new region tags for PublicAccessPrevention
feature. See library PR at googleapis/google-cloud-go#3608

Public access prevention rollout has been delayed due to a bug surfaced during Googler preview. I will keep this PR updated as I learn new release timeline details.


x/mobile: NSError, is there a way to pass code?

Some function calls can return errors and for ios they are converted to NSError. I wonder if there is a way to send more information on the error than just string? Like error code? [NSError errorWithDomain:errDomain code:1 userInfo:details] is there a way to have different error code than 1?
Or any other way to add some additional info or the option I have is to use error text as "key" for matching errors between ios and gomobile library?

Please use golang-nuts@ for questions or feature requests in the future.
The only assumption we can make on Go's error type is it implements the error interface's Error which returns a string. We may consider supporting flexible error type bindings but currently, the only way I can think of is either to use the error text as the key for matching errors, or design your API to return a structured error information based on your application's need instead. For example, let it return a struct that returns a integer code and the error details etc in case of error, or nil in case of success.

You can't use structured error information e.g.  struct that returns a integer code and the error details etc in case of error, or nil in case of success because gomobile strictly forbids using anything else than error interface as second parameter.

gomobile: functions and methods must return either zero or one values, and optionally an error

What could easily work is to allow some kind of special error struct e.g. type GomobileError struct { Code int } the same way as for example we have https://golang.org/pkg/net/#DNSConfigError
However, making a generic like above doesn't work in this case IMO as android exceptions doesn't have error codes.
So maybe back to the root of the problem. Right now it's impossible to match errors between golang code and ios/android in some systematic way. In golang for example we can check if package exported error pointer is the same as returned error or by using type assertion. When it comes to matching errors between golang and ios/android we can only base on error message... which is at least ugly.

Why not change the API to combine a result value and whatever error details
you'd like to utilize into one struct?
On Tue, Mar 1, 2016 at 7:21 AM, Kamil Dziedzic<EMAIL_ADDRESS>wrote:

You can't use structured error information e.g. struct that returns a
integer code and the error details etc in case of error, or nil in case of
success because gomobile strictly forbids using anything else than error
interface as second parameter.
gomobile: functions and methods must return either zero or one values, and
optionally an error
What could easily work is to allow some kind of special error struct e.g. type
GomobileError struct { Code int } the same way as for example we have
https://golang.org/pkg/net/#DNSConfigError
However, making a generic like above doesn't work in this case IMO as
android exceptions doesn't have error codes.
So maybe back to the root of the problem. Right now it's impossible to
match errors between golang code and ios/android in some systematic way. In
golang for example we can check if package exported error pointer is the
same as returned error or by using type assertion. When it comes to
matching errors between golang and ios/android we can only base on error
message... which is at least ugly.
—
Reply to this email directly or view it on GitHub
https://github.com/golang/go/issues/14510#issuecomment-190695518.

--
__

Because it's even more nastier solution? gomobile implemented error interface as a second return value so it doesn't look a way to go.
But yes, that's the only option beside relaying purely on string.


Add name based invocation strategy

This pull request adds a name based invocation strategy (comparable to Slim 2). The strategy will use Reflection to inspect the parameter names of the callable and map the argument names of the route to the parameter names. The special parameter names request, req, response and res are mapped to the Request/Response objects.
It supports both (anonymous) functions and class methods. You can order the parameters any way you like and even use optional parameters. Due to the Reflection you probably wouldn't use this in a high performance application, but it will add a nice and concise way for simpler usages.
Example:
$app->get('/hello/{name}', function ($name, $response, $from = 'Josh') {
    $greeting = sprintf('%s said: "Hello, %s!"', $from, $name);
    return $response->write($greeting);
});

// Call /hello/Michel => Josh said: "Hello, Michel!"

Kinda like the idea of the flexible parameters, although Reflection may impact the performance a bit.
Also maybe a better name would be ParameterBased?

Why would I use this over https://github.com/slimphp/Slim/blob/3.x/Slim/Handlers/Strategies/RequestResponseArgs.php, which gives you similar setup to what we had in Slim 2 and less overheads?

I don't think that this needs to be in Slim itself, but instead offered as a separate package via composer.

Use cases:

Minimal callable signature and avoid unused parameters (for example if you don't need access to the request and/or response object or if they are already injected in another way, say a Controller constructor)
Custom parameter order (for example if you set the response as an optional last parameter to be able to call the callable in another context where the callable creates a new response itself)

Note: I don't propose to use this strategy by default, but in my opinion it is very convenient and it would also provide the same functionality right out of the box as the other micro frameworks.
Since you use Reflection only once per request, the performance hit won't be that serious. Interestingly, in my Apache Bench tests (-c 100 -n 5000) the Reflection strategy always had a slightly lower mean and median. Not sure why, though.


How to uninstall mod_pagespeed

Hello,
How to uninstall mod_pagespeed from cPanel ? I want completely uninstall mod_pagespeed.
Thanks

simply remove these files and re run the easyapache
/var/cpanel/easy/apache/custom_opt_mods/Cpanel/Easy/Speed.pm
/var/cpanel/easy/apache/custom_opt_mods/Cpanel/Easy/Speed.pm.tar.gz

@Prajithp How to uninstall mod_pagespeed from EasyApache4 ?


BUG : Cluster labels are switched when the analysis is rerun

In https://github.com/jakevdp/JupyterWorkflow/blob/master/UnsupervisedAnalysis.ipynb , correct me if i'm wrong but the cluster labels seem to be switched from the first time the analysis was run. The fact that the labels are switched can also be seen in the Analyzing outliers section of the notebook, where the results now show all weekdays instead of weekend like ride patters on weekdays.
Does the gmm assign the labels 0, 1 in the same way it did during the last run?

GMM has an internal parameter random_state that can be used to make the results reproducible. I didn't do this in the video, but you can set it to a particular value if you wish for the results to be the same every time it's run.


Collisions

follow at the state of the project?
the implementation of collisions will be really helpful!
:)

I've been wondering what the state of TMX is myself! Sent up a Pull Request that's needed, but haven't heard anything :cry:
Would like to get it working with raylib-tiled, which uses cute_tiled.h instead. This means there wouldn't be a dependency on libxml2 or zlib, but it seems to be a bit more tricky to get up and running.
Where have you been using Tiled in your project?

ahh i see
I had actually been trying out raylib recently
so been looking into libraries which made loading tilemaps easier
p.s. I think the raylib-tiled link is broken?

Ooops. Making 'er public.

thnx!


Support for CentOS/RHEL starter services

Hello!
First of all, great work!  I was able to get this running in under a day.  However, I had to make a minor change to the start/stop code that allows this application to control the CentOS/RHEL-based ISC DHCPD service.
On these distros, the service is in systemd as dhcpd.service instead of isc-dhcp-server.service as it is in Debian-based distros.
It's a pretty simple fix:
diff --git a/routes/dhcp_start_stop_restart.js b/routes/dhcp_start_stop_restart.js
index 77acbb9..90d5e67 100644
--- a/routes/dhcp_start_stop_restart.js
+++ b/routes/dhcp_start_stop_restart.js
@@ -49,15 +49,15 @@ router.post('/', authorize.auth, function(req, res, next) {

        switch (request.action) {
                case "stop":
-                       dhcp_exec = execSync('/usr/sbin/service isc-dhcp-server stop && /bin/sleep 1');
+                       dhcp_exec = execSync('/usr/sbin/service dhcpd stop && /bin/sleep 1');
                        res.send("<script type='text/javascript'>notification('DHCP Server Stopped');ignore_cache = 1;do_pjax_request
                        break;
                case "start":
-                       dhcp_exec = execSync('/usr/sbin/service isc-dhcp-server start');
+                       dhcp_exec = execSync('/usr/sbin/service dhcpd start');
                        res.send("<script type='text/javascript'>notification('DHCP Server Started');ignore_cache = 1;do_pjax_request
                        break;
                case "restart":
-                       dhcp_exec = execSync('/usr/sbin/service isc-dhcp-server restart && /bin/sleep 1');
+                       dhcp_exec = execSync('/usr/sbin/service dhcpd restart && /bin/sleep 1');
                        res.send("<script type='text/javascript'>notification('DHCP Server Restarted " + dhcp_exec + "');ignore_cache
                        break;
                default:

Since the service command redirects to systemctl (at least for now), everything's all fine and happy.
Additionally, I have created a systemd starter service for this Node app and an rsyslog conf snippet that picks up the node output and dumps it into its own log file so it's not in /var/log/messages or /var/log/syslog if you want one or both of those as well.  With the starter service, systemd can intelligently detect when the process needs to be started/stopped, and you can use it to make sure that this starts after dhcpd.  Note that due to the service naming difference between CentOS/RHEL and Debian, a minor modification would be needed to get it working on a Debian-based system.

@computergeek125 thank you for this again, I've made these modifications based on Redhat derivatives CentOS / Fedora / Redhat
https://github.com/Akkadius/glass-isc-dhcp/commit/3d30b00e9616f0baab3476be2789eb962954d9f8
Let me know if you have any questions, also curious to hear your feedback on using Glass, are you an operator?


Late OP braking triggered AEB warning, forcing me to disengage

Describe the bug
Yesterday I had my first instance of OP not braking in time for a lead car and triggering the AEB warning: I felt like I had to slam on the brakes to stop safely. I'm on stock 0.8.14 on a Comma 3 with a 2018 RAV4 Hybrid + SDSU.
Provide a route where the issue occurs
b4069565beef1091|2022-07-26--17-20-36--5
openpilot version
0.8.15
Additional info
No response

The lead car braked pretty hard (-5 m/s^2), but looks like the car was slow in responding to the ACC command. Probably a duplicate of https://github.com/commaai/openpilot/issues/2731.
@sshane any ideas why it didn't respond?

Interesting, thanks for the plot :) I was trying to get plotjuggler going, but I'm still on Ubuntu 18.04, so no dice. Note that my RAV4 should be on TSS-P, not TSS2, although I guess the Hybrid model is a bit weird in that regard?

While the car did respond late to the requests, I also see the planner was pretty delayed to request enough braking. For example, while the lead is at -2.3 m/s/s we're only requesting -0.8 m/s/s

Is there anything else I can do to help diagnose this? Or are you going to put this item on your list and work on it internally?

Adding 2 similar issues here https://github.com/commaai/openpilot/issues/20970 and https://github.com/commaai/openpilot/issues/25194


Add check to ensure sidecar is fully removed

[ ] Configuration Infrastructure
[ ] Docs
[ ] Installation
[ ] Networking
[ ] Performance and Scalability
[ ] Policies and Telemetry
[ ] Security
[ ] Test and Release
[ ] User Experience
[ ] Developer Infrastructure
Pull Request Attributes
Please check any characteristics that apply to this pull request.
[ ] Does not have any changes that may affect Istio users.

@howardjohn: The following test failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

integ-pilot-k8s-tests_istio
5ed1fde066224c81e50572342fa118d346368d97
link
/test integ-pilot-k8s-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

/retest
On Tue, Sep 15, 2020 at 8:00 PM Istio Automation<EMAIL_ADDRESS>wrote:

@howardjohn https://github.com/howardjohn: The following test failed,
say /retest to rerun all failed tests:
Test name Commit Details Rerun command
integ-pilot-k8s-tests_istio 5ed1fde
https://github.com/istio/istio/commit/5ed1fde066224c81e50572342fa118d346368d97
link
https://prow.istio.io/view/gs/istio-prow/pr-logs/pull/istio_istio/27325/integ-pilot-k8s-tests_istio/20176 /test
integ-pilot-k8s-tests_istio
Instructions for interacting with me using PR comments are available here
https://git.k8s.io/community/contributors/guide/pull-requests.md. If
you have questions or suggestions related to my behavior, please file an
issue against the kubernetes/test-infra
https://github.com/kubernetes/test-infra/issues/new?title=Prow issue:
repository. I understand the commands that are listed here
https://go.k8s.io/bot-commands.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/istio/istio/pull/27325#issuecomment-693140472, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AAEYGXIRDSC4UDP36UPOBGDSGAS4RANCNFSM4RNKPWGQ
.

@howardjohn: The following test failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

integ-pilot-k8s-tests_istio
5ed1fde066224c81e50572342fa118d346368d97
link
/test integ-pilot-k8s-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

/retest


Add support for kpod pod info

Add support for displaying information about a pod including resource usage.

@mrunalp I would like to pick up this issue.

@xlgao-zju Cool. Marked as assigned.

@xlgao-zju have you worked on this?  We are now following the docker CLI, not sure if this overlaps or would stay as a separate command.

@rhatdan No, actually. Feel free to close this or reassign this to someone else.

@mrunalp Lets close this and see if we need extra commands once we have completed the kpod suite.


Qr code scanner

Adding QR Code Scanner
Add Box Detail view
Boxes List view

Prepare Select Checkboxes
Make rows clickable (directs to respective Box Detail view)

Follow ups

Add tests
Add special logic for Non-Boxtribute-QR-Codes
Redirect to a new Create new Box view for Boxtribute QR-Codes which are not yet linked to a box
Improve (more boxtribute specific) regex

 Add QR Scanner View to new FE


Logout

How to logout and refresh token ?
tried  $token = JWTAuth::parseToken();         $token->invalidate();
it gives The token could not be parsed from the request .

I am able to solve it by calling JWTAuth::parseToken('token) .
This Repo is very useful . Thanks for such clean code.


Use Elixir 1.4 style application dependencies

Hello,
Thanks for creating xmlrpc!
Having to add both erlsom and xmlrpc as dependencies was a bit confusing.
Since elixir 1.4 the dependency on erlsom can be inferred by mix.
logger is also unused, so I removed it as an application dependency.

Thanks! Committed!


KN - :octocat: 0:30 sometimes after EDITing node's content and moving to its neighbour (son) afterwards, confuses CF, so that content and even later added TAGs are displayed on that neighbour. It all gets fixed after refresh

I heavily tested and everything is working perfectly!


DDOS-Protection prevent the correct status

The plugin reports the URLs are not working, although they are working.
My first guess would be the DDOS Guard Protection.
Is it possible to fix this?

Ya sorry the status checker isn't reliable at all and I'm not sure the best way to fix it.  I'll try to think of something.

#56 is a duplicate, but has more discussion so I'm closing this issue


Chore add dompurify

Description
Adds dompurify for sanitizing HTML output as recommended by marked
Type of change

[x] Bug fix (non-breaking change which fixes an issue)

Screenshots
How <img src=??? onerror="alert('XSS')" /> gets sanitized

Checklist:

[x] My code follows the style guidelines of this project
[x] I have performed a self-review of my own code
[x] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation

👍🏽
Looks good but just thinking out loud for a better approach: Shouldn't we introduce lib/marked (since it's server-side only) that exposes same functional interface to marked but we call DOMPurify on returned results? This way, it'll be impossible to forget to sanitize HTML output
import { marked as realMarked } from './Tokenizer.js';
import { JSDOM } from 'jsdom';
import DOMPurify from 'dompurify';

const window = new JSDOM('').window;
const purify = DOMPurify(window);

function marked(src, opt, callback) {
  return purify.sanitize(realMarked(src, opt, callback));
}

marked.parseInline = function(src, opt) {
 return purify.sanitize(realMarked.parseInline(src, opt));
}

export default marked;

The only change we make to the rest of the code is just changing marked import to lib/marked.

Yeah yeah. I think this is a better approach.


Fix for Jacobi preconditioner precision deteciton

This PR fixes a bug that in some cases causes the adaptive block-Jacobi preconditioner to wrongly detect the smallest eligible precision. It occurs if a block becomes singluar after trying to reduce the precision.
In that case, the inversion procedure (which is part of the condition number detection), will silently fail, resulting in a wrongly calculated inverse and condition number (meaning that the wrong precision will be selected).
The bug is fixed by propagating the information about the failure of the inversion to the precision detection method, which now correctly marks the precision as not eligible if the inversion failed.

Ignoring the typo in the title...

Ignoring the typo in the title...

Wouldn't it have been shorter to just fix it? :smile:


Update tuneup to 2.10.1

After making all changes to the cask:

[x] brew cask audit --download {{cask_file}} is error-free.
[x] brew cask style --fix {{cask_file}} left no offenses.
[x] The commit message includes the cask’s name and version.

@colindunn I am not sure what process you use to find appcast's - any chance you can have a look at this one?

Hey miccal@, I do it manually by viewing the network traffic etc. I can't find one looking through the site, nor can I find a versioned download link.

Thanks @colindunn.

I also notice that this has installer manual: but no uninstall. Considering also that this has malware, I'm inclined to remove this from Cask.
@vitorgalvao thoughts?

I also notice that this has installer manual: but no uninstall. Considering also that this has malware, I'm inclined to remove this from Cask.

@vitorgalvao thoughts?

Agreed!


Mouse Wheel?

It's possible to connect functionality on my mouse wheel^ from my keyboard?

Shifter itself does not provide mousewheel support. But there might be an IDE setting of plugin, or otherwise OS tools (i didn't try but you might have a look into AutoHotKey (windows) or betterTouchTool (Mac)) to connect custom shortcuts to the mousewheel.

it is possible to use the mouse wheel for invoking shifter - see: https://github.com/kstenschke/shifter-plugin/issues/36


'Hide' Alsalib errors when initializing speech_recognition

Hello, currently I initialize speech recognition using the following command:
with sr.Microphone() as source:
app(source)
Which causes a slew of Alsalib errors to show up. Although these don't effect the execution is there a way to "quiet" or completely ignore these error messages to clean up the output of the code?

Hi @postables,
This thread on StackOverflow has a bunch of information about making this work. One answer in particular implements a context manager that suppresses ALSA errors entirely.
However, I don't recommend using these - those messages mean there is something wrong with the ALSA configuration, even if they don't affect this particular functionality. I would recommend fixing those issues instead.


A Great Proposal That Can Solve Many Engineering Issues

In actual development, import is gradually replacing require. However, if you want to use dynamic loading with import, it forces the module to adopt asynchronous programming, resulting in a lot of async/await in the code.
What is the current progress of this proposal?

This proposal is currently at Stage 1 in the TC39 process. Current design questions include whether to provide restrictions on what can be synchronously imported to avoid Node.js / browser divergence, and whether to consider other types of functions or syntax. Once those questions are resolved, it will be taken back to committee for Stage 2 discussion.


usage of ifconfig is deprecated

In many linux distributions (archlinux, centos) is ifconfig marked as deprecated and therfore not installed by default. Instead there is the command ip (from the package iproute2) which replaces ifconfig.

Thank you very much for your feedback. We appreciate it.
Can we directly replace it or do we have to be aware of something?
Have you already tested it within your installer?

You can simply replace "ifconfig" with "ip address list". The regex for the IP adresses can be the same.
I already changed the streampipes file acordingly and tested it without a problem.
See the output of the git diff command below for the made modifications.
index e5c4abb..0cabd89 100755
--- a/osx_linux/streampipes
+++ b/osx_linux/streampipes
@@ -1,5 +1,5 @@
 #!/bin/bash
-if [ -z "$1" ] || [ "$#" -lt 1 ];
+if [ -z "$1" ] || [ "$#" -lt 1 ];
 then
 	echo "Use 'streampipes start' to start StreamPipes, 'streampipes stop' to stop it, and 'streampipes clean' to remove streampipes."
 	exit 1
@@ -27,11 +27,11 @@ then
 		curl https://raw.githubusercontent.com/streampipes/preview-docker/master/docker-compose.yml > ./tmpl-docker-compose.yml
 	fi

-	if command -v ifconfig;
+	if command -v ip;
 	then
 		# If Unix
 		#        ip=$(ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '<IP_ADDRESS>' | head -1)
-		rawip=$(ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '<IP_ADDRESS>')
+		rawip=$(ip address list | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '<IP_ADDRESS>')

 		rawip=`echo $rawip | sed 's/(%s)*\n/ /g'`
 		IFS=' ' declare -a 'allips=($rawip)'
@@ -44,8 +44,8 @@ then
 		select opt in "${allips[@]}"
 		do
 		if [ -z "${opt}" ];
-			then
-				echo "Wrong input select one of the options";
+			then
+				echo "Wrong input select one of the options";
 			else
 				ip="$opt"

Thank you for your code example.
I changed it and merged it into the develop branch. It will be added into master in our next release.
I had a problem on OSX. I had to install iproute2mac with brew. Do you know is there any other workaround on OSX to run the ip command?

I'm not used to OSX. Therefor I don't know if there is an workaround to run the ip command on OSX.
My approach would be to test if ip or ifconfig is available and then use whatever is available.


Markdown H1 (===) and H2 (---) should bold and/or otherwise highlight the text above it.

VSCode Version: 1.10.2
OS Version: Win7-64

Steps to Reproduce:

Select Markdown as Language Mode
Write a heading and then use H1 (===) or H2 (---) for the line below.

This looks like a duplicate of #9784. #11066 attempted to fix this issue, but this comment explains that properly highlighting both lines of the header does not appear possible with our current grammar engine
Closing this as a duplicate of #9784 with the understanding that a proper fix does not appear possible a this time


720p30 quality option is gone on VODs from the last 2 days?

Checked multiple large channels (xqc, Soda, Hasan) and the options seems to have disappeared for the last two days VODs. Is it a Twitch thing?

I don't find ANY VOD's from those streamers... so...
If the quality is not shown and the rest works well, it is definitely a Twitch thing, since the qualities are read from the Tiwtch API.

xqcow und sodapoppin wären die Kanalnamen.

Yup, 30fps isn't there anymore...


instructions (8-11)

@yossef-khaled
so far so good, now mark your instructions as checked in the README.md file.

ok


fix add missing audit log fields and duplicate audit log error

What problem does this PR solve?
Problem Summary:
Issue 1
There are some fields that is missing in audit log table.
This PR add them all:

shuffle_send_rows
shuffle_send_bytes
scan_bytes_from_local_storage
scan_bytes_from_remote_storage
is_nereids
compute_group

Notice that compute_group is previously name cloudClusterName in fe.audit.log,
which is incorrect, so I change it to the right name.
After this PR, all these fields will be saved in both audit log table and fe.audit.log
Issue 2
The AuditEventBuilder need to be reset at each run, the there will be duplicate audit log.
Issue 3
Add a new statement call flush_audit_log(). It will flush the audit log immediately to audit_log table.
This is useful in test case, so that we don't need to wait 1min to flush the audit log data.
Check List (For Committer)

Test

[x] Regression test
[ ] Unit Test
[ ] Manual test (add detailed scripts or steps below)
[ ] No need to test or manual test. Explain why:

[ ] This is a refactor/code format and no logic has been changed.
[ ] Previous test can cover this change.
[ ] No colde files have been changed.
[ ] Other reason

Behavior changed:

[ ] No.
[x] Yes. cloudClusterName in fe.audit.log change to computeGroup. And some fields are added to the audit log table.

Does this need documentation?

[ ] No.
[x] Yes. I will add this later

Release note

fix add missing audit log fields and duplicate audit log error

Check List (For Reviewer who merge this PR)

[ ] Confirm the release note
[ ] Confirm test cases
[ ] Confirm document
[ ] Add branch pick label

run buildall

run buildall

run buildall

run buildall

run buildall

run buildall

run buildall


Using FoundationTabs.activate throws "$apply already in progress"

My code calls:
FoundationTabs.activate('outputs-tab');

which causes an "$apply already in progress" error. This is due to the scope.$apply() call in zfTabIndividual, quoted below.
This seems to be similar to #250 which was resolved by checking if a digest is already in progress before calling $apply.
  function zfTabIndividual(foundationApi) {
    var directive = {
      restrict: 'EA',
      transclude: 'true',
      link: link
    };

    return directive;

    function link(scope, element, attrs, ctrl, transclude) {
      var tab = scope.$eval(attrs.tab);
      var id = tab.scope.id;

      tab.scope.transcludeFn(tab.scope, function(tabContent) {
        element.append(tabContent);
      });

      foundationApi.subscribe(tab.scope.id, function(msg) {
        foundationApi.publish(tab.parentContent, ['activate', tab.scope.id]);
        scope.$apply();
      });

    }
  }

I am running into the same issue.
It does open the tab though!


Fixed a logging statement

DEBUG [2018-03-21 14:56:31,242] com.hubspot.singularity.scheduler.SingularityDeployHealthHelper: Task task-1-1521644025943-1-<IP_ADDRESS>-DEFAULT has been running for 00:27.903, has not yet reached running threshold of 00:00.030

00:00.030 looks wrong. should've been 00:30.000 instead.

🚢  thanks for the fix! I'll merge it through our environments and get it in the next release


Default forgot password screen has text to ask for logging in

I get this when using the React  component:

I think it's quite weird to prompt for Already have an account? Sign in. Of course the user already has an account when trying to recover their password. wdyt?

This isn't a bug as you can turn this off if you wish by passing the showLinks props and setting it to false.

Also, when I use the library to display the "forgot password" link, I use:
<Auth
            magicLink={true}
            supabaseClient={(sessionStore as SupabaseSessionStore).supabase}
            view="sign_in"
            appearance={{ theme: ThemeSupa }}
            redirectTo={redirectTo}
            providers={["google", "github"]}
          />

However, afaik I can't detect when the user selects "Forgot password" after this. So there's no way for me to set showLinks={false} for only the forgot password page, right @silentworks ?


microk8s cleaner/clearer failure on vanilla LXD

I recently installed the microk8s snap on a vanilla LXD container. At the time I hadn't come across https://microk8s.io/docs/lxd and it took a little while before I noticed that some components hadn't started up properly and I found my way to that doc.
Having found the documentation, it's excellent, thank you - following the instructions there left me with a very happy microk8s instance. From a usability perspective however, I'd really appreciate it if microk8s were able to perform some kind of initial check and flag up the potential problem (and direct me to the appropriate doc)
As it stands, my rough debugging process looked like:

Realise my instance wasn't fully running
Run microk8s status and be told microk8s is not running. Use microk8s inspect for a deeper inspection.
Run microk8s inspect as instructed and see FAIL:  Service snap.microk8s.daemon-kubelet is not running, For more details look at: sudo journalctl -u snap.microk8s.daemon-kubelet
Run sudo journalctl -u snap.microk8s.daemon-kubelet and see server.go:274] failed to run Kubelet: failed to create kubelet: open /dev/kmsg: no such file or directory
Realise that I probably needed to look at my LXD setup and found https://microk8s.io/docs/lxd

The guidance microk8s gave me from steps 2 to 4 was incredibly nice - I'd just really appreciate an initial "looks like you're on LXD but you haven't done these things" check please!

Hi @doismellburning
Thank you for the suggestion. Here is how we could approach this.
In the suggest_fixes of the inspect script [1], we could cat the /proc/1/environ and if we see something like container=lxc we would know if we are on an lxc container. Then we could try to see if /dev/kmsg is available. If not show a message that possibly the profile is missing and point the user to the docs page.
[1] https://github.com/ubuntu/microk8s/blob/master/scripts/inspect.sh#L106

Based on #1425, is this issue completely finished?

There is no initial check as it was requested. The missing profile is detected if you call microk8s instpect.


Question about comparing most & bacon.js

Brian, why cujo? What makes it special over, say, bacon.js and others?
Thanks :-)

@aaronshaf I'll try to describe some of the motivations that led to most.js and some of the things we think are interesting about it.
I'll be up front by saying that I don't really think of most.js, bacon, rxjs, kefir, etc. as a competition that most.js needs to "win".  They are all useful tools in the reactive programming space.  All of them have likely learned from and borrowed ideas from each other.  The community will benefit from friendly competition and cooperation.
I'll be honest about my criticism of those libs here, but I have a ton of respect for them and their authors & contributors.  I'm sure they have criticisms of most.js they could share.
In terms of personal motivation wrt reactive programming, I think it's an important concept that provides a lot of advantages: it naturally handles asynchrony and provides a model for dealing with complex data and time flow while also removing (or at least lessening) the need to resort to shared mutable state.  It has many applications: interactive UIs and animation, client-server communication, IoT and sensor networks, etc.
In terms of motivation for most.js, I looked at existing implementations and felt there were several areas that could be improved upon. Here are a few of them:
Performance
Looking at the architecture and implementation of other libs, I felt it should be possible to get at least 1 to 2 orders of magnitude better performance.  Kefir had done some good work in this area, but I felt that there were still plenty of perf gains to be had.
The perf test results indicates that most.js is achieving its goal in this area.  My hope is that by publishing those numbers, and showing what is possible, other libs will improve as well.
I've only measured memory informally, so I don't want to comment on it in detail.  However, it is also favorable compared to other libs.
Modularity
Other libs seemed not to have truly modular architectures.  Bacon is implemented in a single file.  RxJS is only "modular" in the sense that it's files must be concatenated in the correct order. I feel Kefir is a bit more modular, but as far as I could tell, also did not embrace a real module system such as CommonJS.
Most.js it highly modular CommonJS (I wanted to go ES6, but felt it still required a bit too much tooling, and that generated code would likely impact performance goals).  It's internal Stream/Source/Sink architecture and APIs are simple, concise, and well defined (although not yet documented, which is an obvious problem!).  Combinators can be implemented entirely in terms of that API.  They don't need to use any private details.  This makes it easy to implement new combinators externally (ie in contrib repos, for example) while also guaranteeing they can still be high performance.
If you wanted to, you could write a file similar to the root most.js module, and make your own customized reactive streams library, without worrying about concatenation order, or internal details.  Standard tools such as browserify, webpack, and the like would be able to build it easily, with no additional tools required and without having to rely on manual concatenation ordering, etc.
Implementation simplicity
I felt the code in other libs was overly complex.  Aside from making combinators less "obviously correct", I also felt that their complexity was likely causing performance issues.  I felt a simpler implementation must be possible, and that it would lead to a more performant lib overall.
Promise integration
In my mind, promises and async reactive streams are naturally complimentary, but also should not be conflated.  The relationship between sync "sequence" and "value" is clear, and the async analogue needs to be, too.  By taking the notion of a sequence and a value and lifting them into the async world, it makes perfect sense to me, for example, that reducing an async sequence should produce a promise.  Hence, most.js uses promises when a single value is the natural sync analogue.

Thank you!

@aaronshaf You're welcome.  We're now looking at ways to integrate some of this information into the README, so I'm very glad you asked the question!

That README change is very nice, but I just found my way back to this old closed issue because the README doesn't mention any of the similar libraries. That made me first wonder if Most might be "yet another library implemented by someone who hadn't heard five similar libraries yet", but in fact it is a library implemented by someone who understands the direct competitors and had some specific differences in mind.  The latter is of course a strong positive signal that it is a library to take seriously. I think making that more clear on the README could make the project more appealing to first-time visitors.

@kylecordes Thanks for the suggestion.  Perhaps we could add an initial paragraph under Why most.js for Reactive Programming? mentioning other libs, and providing slightly more background and motivation.  Do you think that would help?

Yes, that would definitely help. The idea is to give a sense of why someone would consider Most, and perhaps in the process make it clear what sort of developer should consider it. (Although, that last bit is already well accommodated by the bold headline at the top with "monadic" in it. People who know what that means will be drawn to it, people who don't will be pushed away.)
Speaking of advantages, the readme discusses how this reactive implementation is performance centric; it would be great to include a sentence about its relative size to other implementations also. (Some of my work is over in the Angular 2 space, where there is generally excitement about RxJS, but less excitement about its code size, but this is only important in applications aimed at smaller hardware.)

Thanks for those suggestions @kylecordes.  I've opened https://github.com/cujojs/most/issues/228 to discuss adding a bit more to the README.  Please feel free to add more thoughts there!


Bot not acknowledging when wish is rolled.

Hello, after testing whether or not the bot works with a minimum of 10 kakera, and a minimum of 50 kakera, the bot works perfectly fine. However after changing the minimum kakera to 400, and someone above that being rolled (also on the "namelist" and my wishlist) the bot did not acknowledge or make any attempt to claim it.
Any idea what went wrong?

so there a claim window so if the bot has already successfully made a claim or a Claim not available message is shown then everything will be ignored
basically anytime you start the bot there is no claim window set but it the bot is running gets a claim window set then its gonna ignore things until you are able to claim again

I had a claim at that time, if that's what you mean

alright did it have wished by @FxDvRV  in the header ?

did you roll and get an instant snipe or was it someone else roll and he instant sniped it ?
because there is a function that checks if its already claimed then it knows that it has already lost the race and ignores the snipe

The thing is, I wasn't at my computer when it happened, which is the annoying part because I can't tell you any specifics. Also, isn't there a way to make it so the bot is always faster?

so this is the part of the way that snipe time is calculated
but basically mudae is kinda slow and dumb and if it is to fast then mudae doesnt know that u added a reaction and then there also snipe protection so it has to be slow enough to bypass the snipe protection but fast enough to snipe the character
there several factors I've tried to minimize alot of these factors but overal
there is program execution time >> Discord API interaction time >> Mudae Interaction time
I only control the 1st

there is a time.sleep at the end of that to kind of add a .5 global sleep mode to that in terms of instant snipe cases so it doesnt fall through

What's the snipe protection time? Does the roller get some sort of priority or something? And what time would you recommend I use?

well it depends on what togglesnipe you play on
on certain modes there a window where only the roller can get it or wisher can get it
most of that time management is taken out of your thoughts from using the $settings command so it takes all that optimization out of your mind

the only thing u can really change is the time.sleep(.5) just to take out that wait time but it also chances sniping to fast and causing mudae to say to fast

Oh, well currently the server is set to default with no restrictions, so that shouldn't be an issue. What speed should I use for this setting?

uh post the channeldata.txt and let me confirm that just in case

Sure
_ Server Settings _
(Server not premium)
· Prefix: $ ($prefix)
· Lang: en ($lang)
· Claim reset: every 180 min. ($setclaim)
· Exact minute of the reset: xx:23 ($setinterval)
· Reset shifted: by +0 min. ($shifthour)
· Rolls per hour: 10 ($setrolls)
· Time before the claim reaction expires: 30 sec. ($settimer)
· Spawn rarity multiplicator for already claimed characters: 2 ($setrare)
· Server game mode: 1 ($gamemode)
· This channel instance: 1 ($channelinstance)
· Slash commands: enabled ($toggleslash)
· Ranking: enabled ($toggleclaimrank/$togglelikerank)
· Ranks displayed during rolls: claims only ($togglerolls)
· Hentai series: enabled ($togglehentai)
· Disturbing imagery series: enabled ($toggledisturbing)
· Rolls sniping: 0 ($togglesnipe)
· Kakera sniping: 0 ($togglekakerasnipe)
· Limit of characters per harem: 8100 ($haremlimit)
· Custom reactions: no ($claimreact)
· Kakera trading: disabled ($togglekakeratrade)
· Kakera calculation: claims and likes ranks (and number of claimed characters) ($togglekakeraclaim/$togglekakeralike)
· Kakera value displayed during rolls: enabled ($togglekakerarolls)
· $kakeraloot wishprotect: enabled ($togglewishprotect)

alright so there only a .5 sleep from

you can either remove that line entirely and have it just deal with no sleep time and try to react super fast as  state with the comment
Anarchy FTW
or keep that sleep and change the value lower like .1 or .05 its all personal preference

Keeping the sleep time of 0.5, what would you say the lowest claim delay setting could be that will still allow for consistent claims (so not too fast that it won't register)

I haven't tested it in a live server so its up to how competitive your server is to be honest you can try with maybe .1 and go lower or higher from there but idk mudae sometimes doesn't respond me and a friend had a small laugh over the bot being to fast for mudae at one point hence for the time.sleep

Oh, 0.1 isn't too fast? I read somewhere on the main page that you should leave 1 second minimum or something. I'll try something like that for now though.

that was for the older discord.py version cause it was async and was even faster lol

Ah okay, i'll try it out then.

Closing for now, I think that problem was a one time thing

Okay it just happened again, someone with 537 kakera value (so above my minimum of 400) was ignored. They weren't on my wishlist or on the name list though. Can you tell me if these conditions are independent or not? So like, is it on the namelist AND 400 kakera minimum, or just anyone 400 minimum and anyone on the namelist?

was in during a claim window ? so it is programmed to ignore even if condition is true IF the bot has already claimed something successfully

Yup, I most definitely had a claim.

when was it the bot last did a successful snipe ? and when was this character rolled ?

The bot has successfully sniped 100% of the time in my test servers, with it following the rules I set. However in my main server it has failed to claim both times, however it successfully reacts to kakera 100% of the time on all servers.

and when was this character rolled ?

I'm not sure what you're asking here sorry

so does it print ? or doesnt print

print...? I'm so sorry I'm not understanding what you mean

does it print out "character found" or does it does it not print anything

Nothing is printed in the console, it does however properly notice when someone is rolled by printing the "someone else rolled" message

if it isnt printed then that means you are out of the claim window

What do you mean by out of the claim window?

so if nothing is printed then that means that it happened to be outside of the claim window so the bot thinks that is is unable to claim and wont attempt to "log" that something was found
I guess do a search on the server its been missing and do
(Username) from:Mudae

I 100% had a claim then, it reset just minutes prior to being rolled.

send me the screen and feel and let me see the time stamps

With a lowered minimum kakera, I've confirmed it works on the main server, something musth ave just happened those times.

the only reason i can see is if there was a claim window set inaccurately i will leave it running on my server and see if it claims after then claim window and all that

Okay thanks. How does it actually detect the claim window? It's not waiting 3 hours after I last claimed right? It actually knows when the reset is?

no it does calculation for the time window

so The only thing i can think of following my codes logic
is that something set your claim window improperly maybe your claim timer is set because of a kakera timer let me see the logic

can u show me if you got a kakera wait timer by any chance ? before the character rolled ?

I'll try find out if I had a kakera react available when the character was rolled then. (Assuming that's what you mean.)

Yep, can confirm I had enough kakera power to do a react at the time the character was rolled.

so there is nothing starting with ur username that has a timer ? that could possible set the window incorrectly ?

Yup, nobody in the server has anything remotely close to my username, and at that moment I had both claim and kakera timers up guaranteed.

which checks did it pass ? name and kakera right ?

Sorry, what do you mean by that?

so this character was in ur name list and kakera ?

Out of the two that the bot missed, one of them was in name list and above kakera minimum, the second one was only above the kakera minimum.

for the name one send me the picture of the character and its name in your name list and i guess the 2nd one also trying to see if there is something special about those that they failed

I might have figured it out. During both times, I had the error where it says failed to find $settings for channel xxxxx (the channel where they were rolled). But then on the next line it said "Reading from File for channel xxxxx" so I assumed it was fine, but maybe it wasn't working after all and that's why?

ah so if it fails to find any setting for a channel that channel is removed from the list of channels it monitors so yeah that means it not longer is looking at that channel
if you search $togglehentai from:Mudae do you not have settings instance ?

if something like this doesnt appear up then there is no setting then its get removed from the list as it doesnt have the variables to work off of.
The file reading was added later so for those servers without settings you could set up the special instance of your server based off setting for other servers via a simple copy paste with a rename

There's been several instances/$settings messages in that channel so it should be having no problem finding them. Someone said it might fail if there's a lot of activity in the channel but whenever I'm running the program that's not the case yet it still can't find the $settings like 40% of the time.

change the console line to True
and if you get that error again could you take screenshots of the logs that get printed so I can send to discum's dev

Okay sure, done. I'll let you know if it happens again?

yeah there gonna be alot of log jarrgon so it might be annoying but if u are able to get the $setting then I could help the Dev improve their Search function

Cool, also just making sure: discord doesn't have to be focused for the program to work right?

nope I'm really against any kind of automation that requires your whole desktop to be locked up all of this can be ran on a raspberry pi mini computer if you wanted.
you can game you can watch videos you could uninstall discord it will still work

Wait, you don't even need discord open? That's pretty damn cool.

nope not at all.
All of the function happens in the background only thing is that python stays running.
but a cool thing with python is that you could change it into a  .pyw and the thing can run in the background as a service so it doesnt even need a spot on your task bar

Haha that's awesome. Thanks for all the help then.

Okay, it just happened again. Kakera value above my minimum of 400, claim ready, kakera react ready too if that matters. Person was not on my wishlist or namelist, but they were above the minimum of 400. Bot made no attempt to claim or any logging. The same $settings error did not occur. Any ideas what went wrong?

Did you take a image for me ?
Sent from my iPhone

On Jun 4, 2021, at 9:02 AM, FxDvRV @.***> wrote:

Okay, it just happened again. Kakera value above my minimum of 400, claim ready, kakera react ready too if that matters. Person was not on my wishlist or namelist, but they were above the minimum of 400. Bot made no attempt to claim or any logging. The same $settings error did not occur. Any ideas what went wrong?
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

I don't know how this will help you, but yeah here's an image.

(Not wished by me, not claimed by me)

That still helps so I can see if it fitting the criteria I set uh do u have picture of the console ? Like the blue text that gets printed
Sent from my iPhone

On Jun 4, 2021, at 9:08 AM, FxDvRV @.***> wrote:

I don't know how this will help you, but yeah here's an image.
(Not wished by me, not claimed by me)
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

Just a whole bunch of this.

and those are 4 different unique channel id right ? no double entries

and for that channel that stuff is missed can you post that channels .txt so i can verify

Yup, that's right.

and for that channel that stuff is missed can you post that channels .txt so i can verify

Do you mean this?
_ Server Settings _
(Server not premium)
· Prefix: $ ($prefix)
· Lang: en ($lang)
· Claim reset: every 180 min. ($setclaim)
· Exact minute of the reset: xx:11 ($setinterval)
· Reset shifted: by +0 min. ($shifthour)
· Rolls per hour: 10 ($setrolls)
· Time before the claim reaction expires: 30 sec. ($settimer)
· Spawn rarity multiplicator for already claimed characters: 2 ($setrare)
· Server game mode: 1 ($gamemode)
· This channel instance: 1 ($channelinstance)
· Slash commands: enabled ($toggleslash)
· Ranking: enabled ($toggleclaimrank/$togglelikerank)
· Ranks displayed during rolls: disabled ($togglerolls)
· Hentai series: enabled ($togglehentai)
· Disturbing imagery series: enabled ($toggledisturbing)
· Rolls sniping: 0 ($togglesnipe)
· Kakera sniping: 0 ($togglekakerasnipe)
· Limit of characters per harem: 8100 ($haremlimit)
· Reacts: disabled ($togglereact)
· Custom reactions: no ($claimreact)
· Kakera trading: disabled ($togglekakeratrade)
· Kakera calculation: claims and likes ranks (and number of claimed characters) ($togglekakeraclaim/$togglekakeralike)
· Kakera value displayed during rolls: disabled ($togglekakerarolls)
· $kakeraloot wishprotect: enabled ($togglewishprotect)

are each server the same ? cause they should be named by the channel id but yes
if this is the correct one matching the channel that is

are each server the same ? cause they should be named by the channel id but yes
if this is the correct one matching the channel that is

Only one server matters, the rest are just testing ones with only myself in them. That's the channel.txt of the one where the bot isn't claiming correctly all the time.

does this section of the code look like your code ?

type print(f"{waifu_wall.get(channelid,0)} is the Waifu wall for {channelid}")
print(f"{next_claim(channelid)[0]} is the Next_Claim for {channelid}")

right when me cursor is
if you dont want to deal with all the crazy stuff just run it on the one live server for now to see the value of that
basically as long as the waifu wall is not equal to the nextclaim then the claim wall is not set
so it should constantly print the waifu wall / next_claim
ex: 155500 waifu wall
155500 next_claim
(will ignore everything)
ex: 155500 waifu_wall
155501 next_claim
(will be in claim mode)

Is this right?

no line it up with the IF

Okay, I limited channels to the main server and ran it. Nothing different is happening in the console though.

Nevermind, it looks like this.

okay that is correct so now at any point if the waifu wall changes then that means something has set the waifu wall hopefully its an actually claim if not we can locate what is causing the waifu wall to be set incorrectly

Alright, what do I do now?

yeah but also if someone claims it then it wont add the reaction
the problem here tho is that its not even logging the character being detected so that has to something with the claim window
so basically what you do now is
you see the waifu wall # and the next claim #  if those 2 are equal like right now its 0 waifu wall and 150261 next_claim it means that it is monitoring and it will be in claim mode
now if those number ever become EQUAL it is in ignore mode until the next claim cycle

Okay, I understand. Currently they're still not equal and thus it's in claim mode. If this happens again I'll be sure to check whether or not this is still the case.

To be clear if you do it a VALID claim the waifu wall will change they will be EQUAL until the next claim cycle
if you ever get a FALSE claim basically those 2 values becoming equal when they are not suppose to be
I need you to take a screenshot of the Logs and then go to discord and take a picture where you think the Error happen that set the FALSE window
We then can examine it together and see what went wrong

What logs do you want a screenshot of?

These are still the same, unless there are some other logs.
What exactly do you want a picture of in discord? One of the missed claims or?

so basically the screenshot your logs like that and something like this

so like oh hey i think that the last line set a claim window

Uh well, these are what the logs look like, at the very end I claimed someone, and then rolled again. This seems about right no?

Is this what you're asking for?

okay now the bot is going to be in ignore mode until the next claim cycle

so keep the bot running the next thing that pops up if those values remain the same then it will ignore then when the values become different then it will be back to claim mode

Yeah, the values are still the same every time a roll happens.
Also, something weird with my most recent pic of the logs, it says "Someone else rolled"  twice but that never happened, it was me for all of them.

hmm interesting i dont think that will be an issue Yet that is but we will see just keep it running basically what will happen is that
waifu wall will stay the same but next_claim will change and when that happens then ur back into claim mode not sure when your next claim is up tho

Sure, that's fine. Also, this error happened out of nowhere.

did a message get "edited" on that channel without an embed ?

I looked at all the messages in that time, I can't really find any that seem out of the ordinary

nothing that starts with your user name of has a timer ?

Nope, also just then it claimed someone perfectly, someone whose conditions were similar to the other ones that it missed, so i think it's all good now.


Create project with bare react-native have expo commands

Describe the bug
When creating a new project and using the manual configuration, did it with bare (not expo) react-native, in the package.json the commands for start, ios and android included expo run and not react-native
Expected
    "start": "react-native start",
    "ios": "react-native run-ios",
    "android": "react-native run-android --active-arch-only",

Got
    "start": "npx expo start",
    "android": "npx expo run:android",
    "ios": "npx expo run:ios",

Ignite version
9.6.3
Additional info
Full terminal logs when creating app
✅ Do you want to use Expo? · Bare
✅ Do you want to initialize a git repository? (Y/n) · Yes
✅ Remove demo code? We recommend leaving it in if it's your first time using Ignite (y/N) · No
✅ Which package manager do you want to use? · yarn
✅ Do you want to install dependencies? (Y/n) · Yes
✅ ❗EXPERIMENTAL❗Would you like to enable the New Architecture? (y/N) · No

                                               .;;,.    .clll.
                                              .clll,    ,llll.           ...
                                               .,;,.    ;lllc'.,.   .';cllllc,
     .',,.                           ...      .'',,. .:lllllllll. .;lllc:;clll,
    .llll,                    .,...;cllll:.   ,llll, .llllllc,,'  clll:'.,cllc.
    ,llll'       ......;::.  'llcclllllllll'  ,llll,   .llll.    ,lllllllll:'
    ,llll.    .;clllllclll.  'llllc,..,llll,  :llll.   'llll.    ,lllc,''..
    ;llll.   :llllc:cllllc.  ,llll.   .llll, .lllll.   ,lllc...  ,lll:...';:.
   .llllc.  ;lll;.   :lll,   ;lll;    'llll, .llllc.   ,llllcll' .:lllllllll,
   .llll,  'lll:    .clll,   :lll,    ,llll. 'llll,    'lllllcc'   ';::::;'.
   .llll,  ,lll:    .llll'  .llll,    ;llll. ,llll,     .....             .',..
   ,llll.  'llll:,,:cllll.  .lllc.    .''..  ... ....',;         ..',,:::;'..
   ,llll.   'clllllllllll.     .....        ..,::cllllc.   .',:clllc;,'.
   :llll.     ',;,'.;lllc...,;:clll;  ..',:cllllllllll:,;clllllc;,'.
   llll:        ...'cllllllllllllll::cllllllc;,',cllllllllc;'..
   llll,   ..,clllllllll::,,.,lllllllc:,'...    :lllllc,..
   c:;,.  .cllllc:;:llll.    ,ll:;,..          ;ll:,..
          :lll,.  .clll,     ..               .,..
          :lll:,,cllll,
          .cllllllllc'
           .'cllll:.

    █ Creating test using Ignite 9.6.3
    █ Powered by  ∞ Infinite Red  (https://infinite.red)
    █ Package Manager: yarn
    █ Bundle identifier: com.test
    █ Path: /Users/groot/Documents/react_native/test
    ────────────────────────────────────────────────────

    🖨  3D-printing a new React Native app
    🎨 Getting those last few details perfect
    🧶 Installing yarn dependencies (wow these are heavy)
       Configuring app.json
    🛠  Generating native template via Expo Prebuild
    🛠  Removing fancy demo markup
    🗄  Backing everything up in source control

    ────────────────────────────────────────────────────

    Ignited test in 161.04s  🚀

    For next time: here are the Ignite options you picked!
      npx ignite-cli new test \
        --bundle=com.test \
        --git \
        --install-deps \
        --packager=yarn \
        --target-path=/Users/groot/Documents/react_native/test \
        --remove-demo=false \
        --workflow=manual \
        --no-timeout=false

    ────────────────────────────────────────────────────

    Need additional help?

    Join our Slack community at http://community.infinite.red.

    ────────────────────────────────────────────────────

    Now get cooking! 🍽
      cd /Users/groot/Documents/react_native/test
      yarn ios
    Or Android via
      yarn android

yarn run v1.22.21
$ npx expo start
Starting project at /Users/groot/Documents/react_native/test
Starting Metro Bundler
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
█ ▄▄▄▄▄ █ ▀▀▄ ▀▀▄ ███▄▄▀███ ███ ▄▄▄▄▄ █
█ █   █ ███ ▄▄█ ▄▄ ▄█▀   ▄ ▀▄ █ █   █ █
█ █▄▄▄█ █ ▄▄ █▄▄ █▀ █ ▄▀█▀▄ █▀█ █▄▄▄█ █
█▄▄▄▄▄▄▄█ █ ▀ █ ▀ █▄█▄█▄█ █ ▀ █▄▄▄▄▄▄▄█
█▄ ▄█▀▄▄▀   ██  ███  ██▀▀█▀█▀ ▄ ▄▄█▀▄ █
█▀ █▀▀ ▄▄█▄ ▄█▀█▄█▄▄  ▄▄▄ ██▄ ▀▀▄▀▀▄█ █
█ ▄██ ▀▄ ▀ ▄▄ ▄█▄ ▀▄▀▄█▄▀ █▀▀ ▄ ██ ██▀█
██   ▄▄▄▄ █▄▀ ▄ ▀ ██ ▄▄▀ ▄▄█▄▀▀▀ ▄▀█▀ █
██▄▄  █▄▀█▄ ██  █▄█  ██  ▀▀▄  █ ▀█▄▀▄▀█
█▄██▀  ▄██▄▀▄█▀█▄█▄ ▄██ ▄▀▄▀  ▀▄ ▀ ▄▄▄█
██▄ █ █▄▄ █▀▄ ▄█ ██ ▀█▄█ ▀██ ▀▀  █▀█  █
███ ▄▀▀▄▄██ ▀ ▄ ▄▄▄▀▄█▄  ▀█ ▄▀▄█▀▄ ▄█▄█
██▄ ▄█▄▄███ ██  ▀█▀  ██▄▀█▀█  ▀  █ ▀ ▀█
█▄▄▄ █ ▄█ ▀█▄█▀█▄▄▄▄  ▄▀ ▀▄█▄ ▄▄█  ▄▀▄█
█▄▄▄▄▄█▄█ ▀▄▄ ▄█ ██▄▄ █ ▀▄▀█▄ ▄▄▄ █▀█ █
█ ▄▄▄▄▄ █▀▄ ▀ ▄ ▄▄▄▀ ▄█▄▄ ▄ ▀ █▄█ ▀▄█ █
█ █   █ ██ ███  ▀██  █▄█ ▀██ ▄ ▄▄ ▄█ ▄█
█ █▄▄▄█ █  ▀▄█▀█▄██ ▄▀██  ▄▀█▀ ▀█▄▀██▄█
█▄▄▄▄▄▄▄█▄▄█▄▄▄█▄▄▄█▄▄█▄█▄██▄▄████▄██▄█

› Metro waiting on exp+test://expo-development-client/?url=http%3A%2F%2F<IP_ADDRESS>%3A8081
› Scan the QR code above to open the project in a development build. Learn more

› Web is waiting on http://localhost:8081

› Using development build
› Press s │ switch to Expo Go

› Press a │ open Android
› Press i │ open iOS simulator
› Press w │ open web

› Press j │ open debugger
› Press r │ reload app
› Press m │ toggle menu
› Press o │ open project code in your editor

› Press ? │ show all commands

Logs for your project will appear below. Press Ctrl+C to exit.
› Stopped server

When trying to run then having this error

Hi @trynx - bare in this case means you'll manage the native code yourself. You'll still have Expo dependencies, though.
We should make this more clear, however.
If you're looking for a version of Ignite that has absolutely no Expo dependencies, you can clone this (although not inline with the latest version of Ignite): https://github.com/frankcalise/ignite-vanilla-template

Hi @frankcalise :)
Sorry for the confusion, in this context when I said "bare", I'm meaning of launching it with react-native, but it's fine on using expo libs.
I'm right now using an older version that I created around a year ago, and wanted to move all my logic to a newer version of ignite because iOS stopped compiling on the old version... so while testing the new ignite version found out about this...
Eventually, will using expo as a launcher affect the end product? Of bundling the code with Android Studio and xcode, and not using Expo as the production launcher?

@trynx Ah ok understood, thanks for clearing that up. I haven't tried using the RN CLI much in an Expo project. You might look to undo a few steps from here: https://docs.expo.dev/bare/installing-expo-modules/#optional-use-expo-cli-for-bundling
Adopting the Expo CLI has it's benefits though, listed here: https://docs.expo.dev/bare/using-expo-cli/#why-expo-cli-instead-of-npx-react-native

Ohh thanks @frankcalise
Last question that concerns me about choosing Expo, if going through the Expo CLI route, it also means to use all it's tools, harder (or impossible) to change some native code as needed for some third party libs, and deploying to the stores is through the EAS being, and being vendor lock to it?
Or maybe I'm missing something since the new versions of Expo?

@trynx You do not have to worry about third party libs with Expo, you are free to choose any lib you find along the way. That's that great part about it.
You can also build locally via the EAS command line, you don't have to use their service in the cloud. Read [these docs] for more info: https://docs.expo.dev/build-reference/local-builds/
You can also build with Android Studio/Xcode like normal as well.
Here's a post similar to yours you can reference: https://forums.expo.dev/t/using-expo-managed-workflow-without-eas/69893

Going to close this as I believe we have covered your questions! If you have any further questions, feel free to open them up on the Discussions board here or come join our Community Slack
Also Expo has a Discord where you can get tons of answers as well!


Document that alias is available for tests now

https://github.com/dbt-labs/dbt-core/issues/4097 will help people learn how to alias their tests, probably by directing them to the documentation for alias.
Right now, that page doesn't say that tests are aliasable at all. It should!
Example code in this comment

Thanks for raising this, Joel 🙇🏻♀

Just came up again: https://getdbt.slack.com/archives/C01UM2N7814/p1642764358053000

I don't know who did this, but it's done! https://docs.getdbt.com/reference/resource-properties/tests#define-a-custom-name-for-one-test


Connection URL error message shows wrong snippet when using url in PrismaClient constructor

This is the error message I got:
yarn run v1.22.4
$ NODE_ENV=production node --max_old_space_size=8192 -r ts-node/register bench.ts
warn prisma.connect() is deprecated, please use prisma.$connect() instead
PrismaClientInitializationError: error: Error validating datasource `db`: The URL for datasource `db` must start with the protocol `mysql://`.
  -->  schema.prisma:8
   |
 7 |   provider = "mysql"
 8 |   url      = "mysql://root:root@localhost:3306/benchmark"
   |

Validation Error Count: 1
    at LineStream.<anonymous> (/home/runner/work/prisma-client-js-benchmarks/prisma-client-js-benchmarks/node_modules/@prisma/engine-core/dist/NodeEngine.js:488:1)
    at LineStream.emit (events.js:315:20)
    at addChunk (_stream_readable.js:295:12)
    at readableAddChunk (_stream_readable.js:271:9)
    at LineStream.Readable.push (_stream_readable.js:212:10)
    at LineStream.push (_stream_transform.js:152:32)
    at LineStream._pushBuffer (/home/runner/work/prisma-client-js-benchmarks/prisma-client-js-benchmarks/node_modules/@prisma/engine-core/dist/byline.js:106:1)
    at LineStream._transform (/home/runner/work/prisma-client-js-benchmarks/prisma-client-js-benchmarks/node_modules/@prisma/engine-core/dist/byline.js:98:1)
    at LineStream.Transform._read (_stream_transform.js:191:10)
    at LineStream.Transform._write (_stream_transform.js:179:12)

Clearly that does not make sense, as the url definitely does start with mysql://.
Turns out I was overloading that manually:
const DATABASE_STRING_WITHOUT_SCHEMA = `postgres://${ USER }:${ PASSWORD }@${ HOST }:${ PORT }/${ DATABASE }`
const DATABASE_STRING = `${ DATABASE_STRING_WITHOUT_SCHEMA }?schema=${ SCHEMA }`

const prisma = new PrismaClient({
  datasources: {
    db: {
      url: DATABASE_STRING
    },
  },
  errorFormat: 'minimal'
})

I can confirm this in 2.5.0-dev.62.
Marking it as a candidate as the error message is very misleading and can cause frustration.

This is still reproducible in 2.22

This happens in the query engine. The client constructor gets a database url but the created error message references the url in the schema. (Should not show contents of schema file but reference the constructor params.)


Web- Console error displayed when creating a Private Room

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action Performed:

Go to https://staging.new.expensify.com
Log in with expensifail account
Click on New Room
Put a Name for New Room
Select any Workspace
Select Private

Expected Result:
No console error displayed when creating a Private Room
Actual Result:
Console error displayed when creating a Private Room
Workaround:
Unknown
Platform:

Where is this issue occurring?

Web

Version Number:  1.1.22-0
Reproducible in staging?: Yes
Reproducible in production?: No
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation
https://user-images.githubusercontent.com/93399543/146618446-7c5f6939-1d69-4ae7-8f28-986f7d217303.mp4
Expensify/Expensify Issue URL:
Issue reported by:
Slack conversation:
View all open jobs on GitHub

Triggered auto assignment to @bondydaa (Engineering), see https://stackoverflow.com/c/expensify/questions/4319 for more details.

Does the private room get created? or does that also fail?
I can't tell if the console error is just a side effect or preventing the new room from being created?

@bondydaa The private room have never been created. The console error appears when creating a room irrespective of "Visibility" options.
https://user-images.githubusercontent.com/93399543/146798811-7d529424-68a3-408a-956c-7004a21c934e.mp4

👍 okay, please make sure you state that in the issue/title then. That's much more concerning than just a JS console errror 😅
I updated this and will bump to a daily.

This is behind a beta still I think @TomatoToaster maybe will know if this is expected or not.

Uh oh! This issue is overdue by 2 days. Don't forget to update your issues!

Missed this for a while sorry! This feature is behind beta and incomplete. The room is created, but it doesn't show up properly in LHN or in Search at the moment. That is being resolved in another issue.

Thanks for taking a look @TomatoToaster 🙇


Cannot install on jupyter/scipy-notebook:python-3.9.7

here in the following my docker file:
FROM jupyter/scipy-notebook:python-3.9.7
USER root
RUN apt-get update
RUN apt-get install curl -y
RUN apt-get install -y gnupg2
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN exit
RUN apt-get update
RUN ACCEPT_EULA=Y apt-get install -y msodbcsql17
RUN apt-get install -y --no-install-recommends
unixodbc-dev
unixodbc
libpq-dev
RUN pip install pyodbc
USER jovyan
RUN pip install nb_black
RUN pip install xmltodict
RUN pip install pyarrow
CMD ["jupyter", "lab", "--ip", "<IP_ADDRESS>"]
in the following the error at building time:
=> ERROR [11/14] RUN pip install pyodbc                                                                                3.9s

[11/14] RUN pip install pyodbc:
#14 0.685 WARNING: The directory '/home/jovyan/.cache/pip' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you should use sudo's -H flag.
#14 1.014 Collecting pyodbc
#14 1.234   Downloading pyodbc-4.0.32.tar.gz (280 kB)
#14 1.406   Preparing metadata (setup.py): started
#14 1.739   Preparing metadata (setup.py): finished with status 'done'
#14 1.742 Building wheels for collected packages: pyodbc
#14 1.743   Building wheel for pyodbc (setup.py): started
#14 2.062   Building wheel for pyodbc (setup.py): finished with status 'error'
#14 2.062   ERROR: Command errored out with exit status 1:
#14 2.062    command: /opt/conda/bin/python3.9 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-7ou4m3d0/pyodbc_f7360841345e48a999efd9c66e8ace43/setup.py'"'"'; file='"'"'/tmp/pip-install-7ou4m3d0/pyodbc_f7360841345e48a999efd9c66e8ace43/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(file) if os.path.exists(file) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-mf85wgw8
#14 2.062        cwd: /tmp/pip-install-7ou4m3d0/pyodbc_f7360841345e48a999efd9c66e8ace43/
#14 2.062   Complete output (9 lines):
#14 2.062   running bdist_wheel
#14 2.062   running build
#14 2.062   running build_ext
#14 2.062   building 'pyodbc' extension
#14 2.062   creating build
#14 2.062   creating build/temp.linux-x86_64-3.9
#14 2.062   creating build/temp.linux-x86_64-3.9/src
#14 2.062   gcc -pthread -B /opt/conda/compiler_compat -Wno-unused-result -Wsign-compare -DNDEBUG -fwrapv -O2 -Wall -fPIC -O2 -isystem /opt/conda/include -fPIC -O2 -isystem /opt/conda/include -fPIC -DPYODBC_VERSION=4.0.32 -I/opt/conda/include/python3.9 -c src/buffer.cpp -o build/temp.linux-x86_64-3.9/src/buffer.o -Wno-write-strings
#14 2.062   error: command 'gcc' failed: No such file or directory
#14 2.062   ----------------------------------------
#14 2.062   ERROR: Failed building wheel for pyodbc
#14 2.063   Running setup.py clean for pyodbc
#14 2.316 Failed to build pyodbc
#14 3.202 Installing collected packages: pyodbc
#14 3.204     Running setup.py install for pyodbc: started
#14 3.511     Running setup.py install for pyodbc: finished with status 'error'
#14 3.511     ERROR: Command errored out with exit status 1:
#14 3.511      command: /opt/conda/bin/python3.9 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-7ou4m3d0/pyodbc_f7360841345e48a999efd9c66e8ace43/setup.py'"'"'; file='"'"'/tmp/pip-install-7ou4m3d0/pyodbc_f7360841345e48a999efd9c66e8ace43/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(file) if os.path.exists(file) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /tmp/pip-record-ixlo6h8v/install-record.txt --single-version-externally-managed --compile --install-headers /opt/conda/include/python3.9/pyodbc
#14 3.511          cwd: /tmp/pip-install-7ou4m3d0/pyodbc_f7360841345e48a999efd9c66e8ace43/
#14 3.511     Complete output (11 lines):
#14 3.511     running install
#14 3.511     /opt/conda/lib/python3.9/site-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
#14 3.511       warnings.warn(
#14 3.511     running build
#14 3.511     running build_ext
#14 3.511     building 'pyodbc' extension
#14 3.511     creating build
#14 3.511     creating build/temp.linux-x86_64-3.9
#14 3.511     creating build/temp.linux-x86_64-3.9/src
#14 3.511     gcc -pthread -B /opt/conda/compiler_compat -Wno-unused-result -Wsign-compare -DNDEBUG -fwrapv -O2 -Wall -fPIC -O2 -isystem /opt/conda/include -fPIC -O2 -isystem /opt/conda/include -fPIC -DPYODBC_VERSION=4.0.32 -I/opt/conda/include/python3.9 -c src/buffer.cpp -o build/temp.linux-x86_64-3.9/src/buffer.o -Wno-write-strings
#14 3.511     error: command 'gcc' failed: No such file or directory
#14 3.511     ----------------------------------------
#14 3.512 ERROR: Command errored out with exit status 1: /opt/conda/bin/python3.9 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-7ou4m3d0/pyodbc_f7360841345e48a999efd9c66e8ace43/setup.py'"'"'; file='"'"'/tmp/pip-install-7ou4m3d0/pyodbc_f7360841345e48a999efd9c66e8ace43/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(file) if os.path.exists(file) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /tmp/pip-record-ixlo6h8v/install-record.txt --single-version-externally-managed --compile --install-headers /opt/conda/include/python3.9/pyodbc Check the logs for full command output.

executor failed running [/bin/bash -o pipefail -c pip install pyodbc]: exit code: 1
the installation of pyodbc worked using jupyter/scipy-notebook:python-3.9.4 instead. The installation seems to have stopped working as of jupyter/scipy-notebook:python-3.9.5. I tried having a look at the differences in the layers between the two images, and apart the conda version, they seem to be the same except for the declaration of ARG miniforge_installer=Mambaforge-4.10.1-4-Linux-x86_64.sh

error: command 'gcc' failed: No such file or directory

Try installing gcc first...?

error: command 'gcc' failed: No such file or directory

Try installing gcc first...?

Already done and the error message stays the same...?

What do you get if you run gcc --version ?

I solved it updating the gcc library to 9.3.0, probably there was some corrupted dependency or similar


Support hiding any of the three lines

Thus it's easier to see the trend of new cases and deaths.

Note: Legends are not controlled by these switches. But I don't think it's high priority to support that.

hey, how does it look on mobile? can you shrink the text, make them less verbose, but find a way to fit into one line? eg. Log Scale -> Log, Last 2 weeks --> 2 Weeks. New cases -> New.

Please test on the "mobile view" with chrome. Make sure it fits into iphone XS. why? because that's what I use. :)

@xunhuang Good point! And do you know how to force two Grids (the toggle switch and the text) to be on the same row? The screenshot below doesn't look very good. I spent some time but did not find an answer.

Update: made labels shorter.


Fix for the case when an isochrone has no tiles.

This might happen when one of the limits is too small. Tiny fix.

The isochrones API is going to be redesigned, this should have been accepted anyway because it fixes the current version.
Sorry for now responding sooner, thanks for your efforts!


Keywords - Use the Unique Keywords system

Ok, do I have to un-hardcode my keywords? Fine.

Current situation: adding unique keywords made all this mod keywords break.
Will have to follow the keyword trail to find out why that's not working... but not today.

To make the unique keyword system works I probably have to make all my keywords prefixes equal, my bad.

Well, summing it up.
Or a) the problem is in the format of the .json, or b)I don't have the smallest clue of what is going on and why is going on.
All that I know is, the moment the MODID enters in scene, all my mod keywords break.

How can I go after what's going on? That does not needs a patch?


Trim  for PNGs in WebGL Renderer

When using a trimmed PNG as a texture and giving it the trim:
{
          x:padding_left
          y:padding_top,
          width:original_texture_width,
          height:original_texture_height
}

Everything works beautifully in the CanvasRenderer, but in WebGL the last pixel on the right and bottom get stretched to the size of the original texture:

Solved in http://www.html5gamedevs.com/topic/21048-trim-and-crop-in-webgl-and-compressed-textures/ , need to setup "frame" first and "trim" second.

I really wouldn't call this solved, imho its still a hack that makes the Sprites bounds wrong (to the size of the cropped area, instead of the cropped are + trim), manually setting the texture.width/texture.height won't solve this either, since our Sprite.getBounds method uses the texture._frame.width. not the texture.width

There's a big problem with getBounds() : it is used for filters and filters dont need trimmed area. It needs to be separated into two methods, one for interaction and one for filters.

@ivanpopelyshev Has this been fixed in v4? I feel like it was...

It was fixed.