Creating a user wiki

There are some times when people have useful information about a binder deployment / jupyterhub setup / hacky solution etc. Oftentimes this doesn't fit within our "official" documentation, but it'd be great if there were a place that people could put common patterns/hacks/lessons-learned/etc that would be more community-driven and have a lower bar to contribution than a PR.
I was thinking we could use GitHub wikis for this, though I still haven't found a great process for people to naturally discover and/or contribute to them. Has anybody on the @jupyterhub/binder-team or @jupyterhub/jupyterhubteam found use in these? Maybe it's worth trying out for a project to see if it catches on.
cc @yuvipanda who I think is interested in this in general as well

We capture user contributed recipes in the jupyter/docker-stacks GitHub wiki.
https://github.com/jupyter/docker-stacks/wiki/Docker-recipes
I think only one or two users have ever edited it directly. Most of the content appeared by way of:

A user opening an issue to ask a question
Another user answering that question
One of the maintainers moving the question+answer pair to the wiki page

I'm not a huge fan of wikis (GitHub or others) [sorry @yuvipanda], but we do have an existing wiki for both JupyterHub and Zero to JupyterHub. We don't publicize it well, and I'm not sure whether or not we should. It's typically for content that doesn't fit in our docs.

yeah I agree this is tricky to get right. As an example of the kind of information I'm thinking of, say we have a fair number of users with bespoke OpenStack jupyterhub deployments. They want to tell the world "how to deploy jupyterhub on k8s on openstack".
This is too much of a "forking paths" problem to "officially" support, but it's very useful information for others who want to give it a go. I'm trying to think of the right way to give those people an opportunity to share their experience in a slightly less-structured fashion than something like a sphinx website.

This is too much of a "forking paths" problem to "officially" support, but it's very useful information for others who want to give it a go. I'm trying to think of the right way to give those people an opportunity to share their experience in a slightly less-structured fashion than something like a sphinx website.

We have the same problem in docker-stacks (@jupyter/docker-stacks#517). My (our?) current thinking (which is totally ready to change based on feedback) is to (1) create a section in the ReadTheDocs site that invites people to contribute links to their own docker-stack projects via  PRs, (2) provide a set of criteria about what constitutes a community-contributed and maintained docker-stack, and (3) create a docker-stacks cookiecutter repo to give people who want to build and maintain their own a leg up based on practices we've evolved over time.
Ref: https://github.com/parente/docker-stacks/blob/2d37b5c75a6d9edb8ccad98bd796fbc2641c5db4/docs/using.md#community-stacks from the PR where I started the RTD site which has been mouldering, unfortunately.

If we wanted to do the wiki thing, I would set it up as a community-wiki under jupyterhub, disable all issues on it. Similar to: https://github.com/willingc/community-test
As an fyi, there is a link in the z2jh wiki that describes a basic openstack approach. Feel free to reference it from the docs or readme.

Perhaps add a community deployment notes section to the existing z2jh wiki as there is for JupyterHub https://github.com/jupyterhub/jupyterhub/wiki/Community-Deployment-Notes

I am -1 on a wiki. For the few projects that do use them, when I arrive as a user I look at the docs, and the wiki, the date on the wiki page, and usually leave confused about what "the truth" is. I usually leave confused because something didn't work and I don't know if it is me, the wiki, the docs, or just the weather.
So especially for openstack (and other none google cloud k8s) I would try and encourage people to contribute to the mybinder deployment docs or z2jh, because we do say somewhere "it might only work on GCE right now, but we don't do that on purpose, it should work elsewhere as well". All of which makes me think we should try and integrate contributed docs from outside the project into the official docs. I think marking the section that we don't use day to day for mybinder.org ops as "No one in the team uses these day to day, so take them with a grain of salt. If you do use these day to day please let us know so we can remove this warning."
This is also somewhat in our selfish interest as it means others help us maintain the flexibility of walking away from GCE instead of being defacto locked in because we don't know if we could run somewhere else. This point actually means we should make a big effort to encourage diversity in our team wrt deploying binder outside of GCE.
I'd be -2 on a team member moving stuff from an issue to a wiki.

I'm going to quote from https://github.com/jupyterhub/zero-to-jupyterhub-k8s/pull/575#issuecomment-373515329, where I try to describe the problem. Specifically,

What are the levels of 'support' that we (as the JupyterHub team) want to provide for various things in z2jh?

Question 2 is really the core of this issue, I think. As JupyterHub maintainers, we have limited time and resources to support people who might run into problems. We want to make sure we only provide info we can support in some form. This limits what we can have here, but also allows us time and space to build things, support the community best we can, and keep the guide up to date and tested whenever we make releases without burning the community out. However, the negative consequence of this is that we do not have a space for 'these things worked for people in specific circumstances, and you can try them too!'. This would have the clear expectation that it's not 'supported' in the same way the core z2jh guide is, and relies on much wider community of practice to keep up to date than us. A recent example of this is running z2jh on OpenStack. Lots of people are trying to do this and it'd be great to have a space for them to collaborate - but most of the info is related to running k8s on OpenStack, and z2jh itself is not a good place for it. Any OpenStack info we have in the guide is going to be incomplete and out of date very soon, since none of us are OpenStack experts. I think the situation is similar for postgres.

This community space can also be a space to try out different approaches to doing something before moving it into z2jh itself.

We currently don't have any guidelines of these 'levels of support' and what not, so writing this out is a very good idea.

My preference would be for us to start another repo that acts as a wiki, with very liberal editing rights (pretty much anyone can write anything there) and a specific scope (to be discussed). This will allow space for advanced (and specific) use cases to be documented and organically adopted, without increasing the support burden on us.

A very specifically scoped wiki with lots of constraints and a specific scope  that has 0 overlap with the contents of z2jh is my preference (to avoid the 'what is the source of truth?' problem). But the ultimate problem really is one of 'what do we support?' and 'what happens to the content that is useful but we can not support?'. I think we should reframe the issue around that question and try to think of solutions, than start from the possible solution of a wiki. We should also probably do this specific to z2jh, since I think z2jh and binder are very different projects in this respect - Binder's users are end users, while z2jh's (esp. those who are contributing docs) are a different kind of user.

I'd prefer to keep where to find documentation as simple as possible FWIW

My hope would be to persuade people who maintain binderhub deployments that aren't mybinder.org to join the team. This way the expertise of the team grows and we can (maybe) support more things.
Wikipages/separate community repo in the context of GitHub based projects always feel a bit like second class citizens. The things we can give people in return for contributing is feeling part of the team, prestige, learning new things and having fun while doing it. To me it feels like a (perceived to be) free-for-all wiki removes most of those things, which will reduce the attractiveness to potential contributors.
How about creating a section in the Binderhub documentation called "Gallery" or "Examples"? Each demonstrating one "hacky" thing to do. Keep them short to decrease the barrier to entry. Explicitly mark that section of the docs as "might not work" (or something more positive). So instead of a complete walk through we'd have "to achieve X do Y" or "did you know you can do X?" style snippets.
Right now it doesn't feel like we have a community of people trying to add to the docs that we are turning away with "sorry but this ain't the place for that". I'd solve this problem first and then once we have too many of these contributions figure out what a better place is for them (and hopefully someone from this group of contributors has a smart idea).
IMHO the answer to "What do we support?" is "more contributors". Even maintaining what we have currently would become easier if there were more contributors, and if we succeed at gaining more active(=contributing) users we can support more things.
(sorry for the wall of text)

I agree with you on all points for Binder, @betatim :) I don't think Binder
is at that stage where this is a problem. My comments were purely about
z2jh, and I think we should move the conversation there.
I've filed https://github.com/jupyterhub/zero-to-jupyterhub-k8s/issues/593
with much more narrow problem statement - which I believe is much easier to
discuss! IMO we should close this issue or retitle it to be more specific.
I appreciate everyone who has chimed in, and I think there are several
issues that can be spun off from here!
On Tue, Mar 20, 2018 at 12:26 AM, Tim Head<EMAIL_ADDRESS>wrote:

My hope would be to persuade people who maintain binderhub deployments
that aren't mybinder.org to join the team. This way the expertise of the
team grows and we can (maybe) support more things.
Wikipages/separate community repo in the context of GitHub based projects
always feel a bit like second class citizens. The things we can give people
in return for contributing is feeling part of the team, prestige, learning
new things and having fun while doing it. To me it feels like a (perceived
to be) free-for-all wiki removes most of those things, which will reduce
the attractiveness to potential contributors.
How about creating a section in the Binderhub
http://binderhub.readthedocs.io/en/latest/ documentation called
"Gallery" or "Examples"? Each demonstrating one "hacky" thing to do. Keep
them short to decrease the barrier to entry. Explicitly mark that section
of the docs as "might not work" (or something more positive). So instead of
a complete walk through we'd have "to achieve X do Y" or "did you know you
can do X?" style snippets.
Right now it doesn't feel like we have a community of people trying to add
to the docs that we are turning away with "sorry but this ain't the place
for that". I'd solve this problem first and then once we have too many of
these contributions figure out what a better place is for them (and
hopefully someone from this group of contributors has a smart idea).
IMHO the answer to "What do we support?" is "more contributors". Even
maintaining what we have currently would become easier if there were more
contributors, and if we succeed at gaining more active(=contributing) users
we can support more things.
(sorry for the wall of text)
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/jupyterhub/binder/issues/83#issuecomment-374500414,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAB23ugJyRz8nBCVcsTWs5erUuh-70Ftks5tgK8ggaJpZM4SvRyA
.

--
Yuvi Panda T
http://yuvi.in/blog

perfect - OK let's close this and iterate over there, as I think it's much more actionable...just wanted to get the ball rolling with this issue :-)


Sequence Editor Hotfix

What's New?

Disallow use of nothing node in locals declaration.

Coverage remained the same at 80.426% when pulling 1a0c973bcd1dadb33c7e595e9b57434c493da94e on RickCarlino:sequence_hotfix into 986ee29daddd872cd46122435066096ea1027880 on FarmBot:staging.


Template compiler get panicked at specific content

Reproduce:
</>

Also,
</xxx>... prevents further parsing. This is an end tag parsing bug.


Upgrade debug version of eslint-module-utils

Coverage remained the same at 95.059% when pulling d7245a8cc23cbfbd414875a3f12cd4fd66ef1b7e on popomore:upgrade-debug into b79e08307f40b299811b333cdd5a8d9833e1a5e4 on benmosher:master.

Appveyor failed, but not caused by this PR, it seems coveralls do some wrong things.

cc @benmosher

Ping @benmosher

@benmosher When will release next version?

not sure, have to investigate #863 first 😩

@benmosher bad news, hope this issue could be resolved soon.


[NBS Docs] Update integrate search into plugins docs

Hey, I just made a Pull Request!
Closes: https://github.com/backstage/backstage/issues/26239
Update the "Integrate search into plugins" tutorial to use the New Backend System.
:heavy_check_mark: Checklist

[ ] A changeset describing the change and affected packages. (more info)
[ ] Added or updated documentation
[ ] Tests for new functionality and regression tests for bug fixes
[ ] Screenshots attached (for UI changes)
[x] All your commits have a Signed-off-by line in the message. (more info)

Thanks for the suggestions @awanlin, could you please take a look again 🙏🏻 ?


DisableValidator()

Spent most of the afternoon looking for an answer for this one.  According to the documentation
app.UseSwaggerUi(c =>
{
c.EnabledValidator();
c.BooleanValues(new object[] { 0, 1 });
c.DocExpansion("full");
c.InjectOnCompleteJavaScript("/swagger-ui/on-complete.js");
c.InjectOnFailureJavaScript("/swagger-ui/on-failure.js");
c.SupportedSubmitMethods(new[] { "get", "post", "put", "patch" });
c.ShowRequestHeaders();
c.ShowJsonEditor();
});
should be how you can call DisableValidator() or enable validator, but currently that function UseSwaggerUi only takes two strings, so I am getting a compilation error here.
I did ask some folks smarter than me to take a look at it, and they couldn't help.
The reason I care is that our site isn't public and I want to turn off the Validator to get rid of the error on the swagger page.
I did verify I have v6.0.0-beta902 installed.
Any info, even it's not ready yet would be great.  I have a hard head, but this wall is thick.

It's not immediately clear from the docs (will get something added ASAP) but the ASP.NET Core version of Swashbuckle now has its own dedicated package - Swashbuckle.AspNetCore. So, the docs aren't compatible with the old Swashbuckle 6 package you're using. You'll need to replace it with the new Core specific package

Thanks for the quick answer.  Got this working.


Cant find /etc/g14-perf-control.toml

I have an Ubuntu 22.04 install. I don't feel my fans blowing at all but the output for ./g14-perf-control info is Fan profile: normal, Turbo: true
I tried sudo ./g14-perf-control set Turbo and got Error: Failed to read configfile `/etc/g14-perf-control.toml`
looks like i don't even have a /etc/g14-perf-control.toml file.
I have a Ryzen 9 6900HS model of the G14 2022 series. Any idea whats the problem?

hi. you need to create the config file. an example file can be found here https://github.com/m0ppers/g14-perf-control/blob/main/example_config.toml
g14-perf-control info only reads the current state from the kernel settings so that works without the config file. but setting stuff depends on the file.
the tool can't read the current fan curves  unfortunately. if nothing was set then you probably are using defaults that were set during poweron (whatever ASUS assumed to be sane defaults)

additional note: I have the 2020 model. I can't guarantee that ASUS changed something. it SEEMS that it still works the same way as the info command returned something sensible.

I used the same contents in the example_config.toml for the /etc/g14-perf-control.toml file. Still doesn't seem to work. The binary I built returns
Error: Couldn't change profile

Caused by:
    Invalid Board. Are you using a G14?

I downloaded the binary from your v0.1.1 realease, that returns the same thing too.

yeah that is probably related to the 2022 version. what does the following command show
cat /sys/class/dmi/id/board_name

maybe I can push an update and make it 2022 compatible :partying_face:

GA402RK

as a side note, I find it really odd that my fans are always at 0RPM i.e I don't hear any sound.
I checked this with sensors | grep -i fan which returns
fan1:           0 RPM  (min =    0 RPM, max = 3300 RPM)
cpu_fan:        0 RPM

My temps are always peaking just with chrome running lol.

hmm the underlying library I am using seems also unmaintained :D I have created a patch. can you try this one here:
https://github.com/m0ppers/g14-perf-control/releases/tag/v0.1.2
As I said. I have no idea if this really works on a 2022 model. this is just a wild guess.
Make sure you have the acpi call module installed. this should work: https://packages.ubuntu.com/jammy/acpi-call-dkms

Downloaded the apt package acpi-call-dkms and your new release file.
Still getting this message though,
Error: Couldn't change profile

Caused by:
    0: failed to write to file No such file or directory (os error 2)
    1: No such file or directory (os error 2)

does /proc/acpi/call exist? if not then you need to additionally do a modprobe acpi_call. if it does exist then it is probably some serious change that asus made. I am afraid I can only redirect you to the asus linux tools for setting fan control etc : https://asus-linux.org/

I get modprobe: FATAL: Module acpi_call not found in directory /lib/modules/5.15.0-57-generic.
Also - my apologies for late reply.


Update User Guide, Landing Page (Index.html)

Update the v1.3 user guide to match the current version of the product. Reason: testers will need to refer to the UG during the practical exam dry run.
Remove mentions of any features not implemented yet, if any. As you are not allowed to change features during iteration v1.4, there is no point in keeping those in the UG.
For those features already implemented, ensure their descriptions match the exact behavior of the product e.g. replace mockups with actual screenshots
Landing page (docs/index.md): Update to look like a real product (rather than a project for learning SE) if you haven't done so already. In particular, update the Ui.png to match the current product ( tips).

Please update the User Guide to include the new commands and features that you have implemented. Also, update the index.html if it is necessary.

Will wait for all User Guide elements to be in before updating landing page and subsequently closing issue


Supervisor not recreating containers after containers prune

Home Assistant release with the issue:
homeassistant/armhf-hassio-supervisor      164
omeassistant/raspberrypi3-homeassistant   0.92.1
Docker version 18.09.0, build 4d60db4
Operating environment (HassOS/Generic):
root@raspberrypi:/mnt/bigstore/hass # uname -a
Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux

Supervisor logs:
19-05-20 21:00:43 INFO (MainThread) [__main__] Initialize Hass.io setup
19-05-20 21:00:43 INFO (MainThread) [__main__] Setup HassIO
19-05-20 21:00:43 INFO (SyncWorker_0) [hassio.docker.supervisor] Attach to Supervisor homeassistant/armhf-hassio-supervisor with version 164
19-05-20 21:00:43 INFO (SyncWorker_0) [hassio.docker.supervisor] Connect Supervisor to Hass.io Network
19-05-20 21:00:45 INFO (MainThread) [hassio.utils.gdbus] Introspect org.freedesktop.systemd1 on /org/freedesktop/systemd1
19-05-20 21:00:45 INFO (MainThread) [hassio.utils.gdbus] Connect to dbus: org.freedesktop.systemd1 - /org/freedesktop/systemd1
19-05-20 21:00:45 INFO (MainThread) [hassio.utils.gdbus] Introspect org.freedesktop.hostname1 on /org/freedesktop/hostname1
19-05-20 21:00:45 INFO (MainThread) [hassio.utils.gdbus] Connect to dbus: org.freedesktop.hostname1 - /org/freedesktop/hostname1
19-05-20 21:00:45 INFO (MainThread) [hassio.utils.gdbus] Introspect de.pengutronix.rauc on /
19-05-20 21:00:45 ERROR (MainThread) [hassio.utils.gdbus] DBus return error: b'Error: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name de.pengutronix.rauc was not provided by any .service files\n'
19-05-20 21:00:45 WARNING (MainThread) [hassio.dbus.rauc] Can't connect to rauc
19-05-20 21:00:45 INFO (MainThread) [hassio.host.info] Update local host information
19-05-20 21:00:45 INFO (MainThread) [hassio.utils.gdbus] Call org.freedesktop.DBus.Properties.GetAll on /org/freedesktop/hostname1
19-05-20 21:00:45 INFO (MainThread) [hassio.host.services] Update service information
19-05-20 21:00:45 INFO (MainThread) [hassio.utils.gdbus] Call org.freedesktop.systemd1.Manager.ListUnits on /org/freedesktop/systemd1
19-05-20 21:00:45 INFO (MainThread) [hassio.host.apparmor] Load AppArmor Profiles: {'hassio-supervisor', 'core_dnsmasq'}
19-05-20 21:00:45 INFO (MainThread) [hassio.host.services] Reload local service hassio-apparmor.service
19-05-20 21:00:45 INFO (MainThread) [hassio.utils.gdbus] Call org.freedesktop.systemd1.Manager.ReloadOrRestartUnit on /org/freedesktop/systemd1
19-05-20 21:00:46 INFO (SyncWorker_2) [hassio.docker.interface] Attach to homeassistant/raspberrypi3-homeassistant with version 0.92.1
19-05-20 21:00:46 INFO (MainThread) [hassio.store.git] Load add-on /data/addons/git/a0d7b954 repository
19-05-20 21:00:46 INFO (MainThread) [hassio.store.git] Load add-on /data/addons/core repository
19-05-20 21:00:46 INFO (MainThread) [hassio.store] Load add-ons from store: 59 all - 59 new - 0 remove
19-05-20 21:00:46 INFO (MainThread) [hassio.addons] Found 6 installed add-ons
19-05-20 21:00:46 INFO (SyncWorker_1) [hassio.docker.interface] Attach to hassioaddons/grafana-armv7 with version v2.1.1
19-05-20 21:00:46 INFO (SyncWorker_3) [hassio.docker.interface] Attach to hassioaddons/portainer-armv7 with version v0.6.1
19-05-20 21:00:46 INFO (SyncWorker_2) [hassio.docker.interface] Attach to homeassistant/armv7-addon-configurator with version 3.3
19-05-20 21:00:46 INFO (SyncWorker_5) [hassio.docker.interface] Attach to hassioaddons/node-red-armv7 with version v3.1.1
19-05-20 21:00:46 INFO (SyncWorker_6) [hassio.docker.interface] Attach to homeassistant/armv7-addon-dnsmasq with version 1.2
19-05-20 21:00:46 INFO (SyncWorker_7) [hassio.docker.interface] Attach to hassioaddons/influxdb-armv7 with version v3.0.5
19-05-20 21:00:47 INFO (MainThread) [hassio.updater] Fetch update data from https://s3.amazonaws.com/hassio-version/stable.json
19-05-20 21:00:47 INFO (MainThread) [hassio.snapshots] Found 0 snapshot files
19-05-20 21:00:47 INFO (MainThread) [hassio.discovery] Load 0 messages
19-05-20 21:00:47 INFO (MainThread) [hassio.ingress] Load 0 ingress session
19-05-20 21:00:47 INFO (MainThread) [__main__] Run Hass.io
19-05-20 21:00:47 INFO (MainThread) [hassio.misc.dns] Start DNS port forwarding for host add-ons
19-05-20 21:00:47 INFO (MainThread) [hassio.api] Start API on <IP_ADDRESS>
19-05-20 21:00:47 INFO (MainThread) [hassio.addons] Phase 'initialize' start 0 add-ons
19-05-20 21:00:47 INFO (MainThread) [hassio.core] Hass.io reboot detected
19-05-20 21:00:47 INFO (MainThread) [hassio.tasks] All core tasks are scheduled
19-05-20 21:00:47 INFO (MainThread) [hassio.core] Hass.io is up and running

Description of problem:
I had to prune my containers (disk space):

stopped hassio-service
docker containers prune
started hassio-services
now I've been waiting for a good half an hour but no other container was created other than hassio_supervisor.
I tried running the https://github.com/home-assistant/hassio-installer script again but nothing changed: still a lonely container.
Surprisingly enough the logs say the supervisor is attaching to my addons,
ie [hassio.docker.interface] Attach to homeassistant/armv7-addon-configurator with version 3.3
but this is my current docker ps -a

# docker ps -a
CONTAINER ID        IMAGE                                       COMMAND                  CREATED             STATUS                        PORTS                    NAMES
3e678c51a781        homeassistant/armhf-hassio-supervisor       "python3 -m hassio"      12 minutes ago      Up 12 minutes                                          hassio_supervisor
9df6d4a851e7        matrixanger/rpi-ikev2                       "/bin/sh -c /usr/bin…"   7 weeks ago         Exited (137) 6 weeks ago                               ikev2
2f9f25a808b8        dnsupdater                                  "/usr/local/bin/npm …"   3 months ago        Exited (0) 3 minutes ago                               updater

so I'm not sure who's that guy talking to 🤔

Well, we don't support manual interaction with docker on our containers.
Rerun the installer should fix your problem.

Rerun the installer should fix your problem.

I tried running the https://github.com/home-assistant/hassio-installer script again but nothing changed: still a lonely container.

I guessed for some reason only the installer is able to create the home-assistant container, so running the installer is among the things I tried but it didn't help :/
Last time this happened I had to hard reset my docker environment (more or less rm -fr /var/lib/docker/*) in order for the installer to actually fully work. his was months ago, and since I noticed a number of updates since then, I thought (what in my eyes looks like a problem) might have been resolved.

Well, we don't support manual interaction with docker on our containers.

🤔from my (the user) perspective: the pi is mine, the docker daemon is mine, hass.io crated containers are among my containers (not alone) and I shall be allowed to do what I need (and docker allows) to do with my containers. As a user, if differently warned, I should be able to do what's usual and standard, and deleting containers is both pretty usual and standard.
I understand that laying out the recovery logic might be tedious, out of scope or differently prioritized on the roadmap, but perhaps for the time being it might be the case to loudly warn the user of this (non-trivial) requirement.
I'm not a python ninja by any mean (I use it when I have, at work, but I prefer other languages) but if you roughly point me in the right direction where in the source tree home-assistant's container and other dependencies are attached I'm keen perhaps to send a PR on this when I find some time.

I have encountered the same problem. I have been able to recreate after a full delete, but this is quite time consuming.
I also agree with everything @unlucio said.


Fix typo on kernel commit URL

Just fixing a simple typo I found while reading the new open coded iterators page.

Thank you!


Sound track-[WIP]

I haven't been able to find the code examples.  If you can let me know where they are I can add (or I can recreate).
Notes:

I added an additional  link to Jason Segal's therewasaguy/p5-music-viz repo - lots of useful stuff there but can delete.
I couldn't find the repo with sound file used in 5-adding sound effects. ( I added a link to https://opengameart.org as an alternative.)

@kfahn22 is this what you're looking for?
https://github.com/CodingTrain/website-archive/tree/main/Tutorials/P5JS/p5.js_sound

The sound file for "Just Like a Rainbow" is 7MB so I don't think I can or should upload it to the code example sketches, correct?  I am providing a link to the repo where it can be found, but I am wondering whether I should add a smaller sound file?  For example, I am using this one in a sound visualization I created (it is 542KB).  https://opengameart.org/content/sea-star

I just checked and the file size limit is 5MB.  I will just include this.dot.

@kfahn22 I'm fine with using any sound file as long as the license allows it! I'll go ahead and merge and if you want to DM me I can dig up the original track or we can pick whatever you prefer!


Fix Windows 10 Overlay Next/Prev. Media Key Duplication Issue

This code change will address the double-skipping bug with the Windows 10 media overlay enabled that is mentioned in several issues.
When the Windows 10 media overlay integration is used, Windows will call the event handler function registered for the media overlay's next/previous buttons whenever any physical hardware next/prev buttons are pressed. I added code to check if overlay integration is turned on. If overlay is turned on, the program will not register a keypress handler using electron's KeyRegisterFn to prevent electron from calling the program's next/prev function in addition to Windows firing it's call to the next/prev function when a media key is pressed. We want only Windows to handle the keypress event with the overlay turned on. If both handle the event, the result is the double-skip bug.
This change resolves the following issues:
Closes #2364
Closes #3293
Closes #3598
This issue deals with the double-skipping bug, but also describes an issue with the play/pause functionality, which is similar to this problem, though it is being caused in a different part of the program. Update: The play/pause issue seems to have been fixed when I pulled in some more recent code from master.

This would indeed fix the double skipping problem on initial startup, but what about if the user unchecks the Windows 10 media button in settings? It would leave them without keyboard shortcuts, right?

@jostrander If the user unchecks the Windows 10 media buttons in settings, the program will register shortcuts using Electron's key press handler instead of using the overlay to handle them. The if statement on line 15 that wraps the electron key press event handler registration checks to see if the program settings are configured to use the Win10 media keys and if the program is running on Windows 10 specifically. If the Win10 media service is disabled or the user is not on Windows 10, they will still have keyboard shortcuts without the Win10 media keys since it will then make Electron handle the media keys. I ran a test on this myself and verified this. You could also test this if you'd like with the AppVeyor build for this PR to confirm that it is working as intended.

I'm not using windows at the moment, but I believe you have to restart GPMDP after selecting the media service, correct? If that's the case then the code makes sense.
I was concerned that an 'on-the-fly' change in settings wouldn't be registered because I saw no event listener for that change being modified. However I believe now that the setting is changed, saved, then applied on restart.

Yes, that is correct. The current behavior for GPMDP's media key settings is that it requires a restart. Since that is the current behavior, I kept it that way. The settings change is applied on restart, as indicated by the settings UI.

I've noticed that the play/pause button has some general issues dispatching events, though that seems to be from a different cause that I plan to investigate a bit myself in another pull request. I originally designed this fix in an older version of GPMDP and it worked perfectly, but after I pulled in the newer code I noticed the play/pause issue. I'm thinking of opening another pull request for that after I have a chance to investigate that issue as well. The skip next/forward seems to be consistent though. Wouldn't inconsistencies with the media service sending events or not be a separate issue? I'm thinking this pull request is to just fix part of the issue since it seems like a bit more of a larger problem.On Dec 27, 2019 7:36 PM, Samuel Attard<EMAIL_ADDRESS>wrote:@MarshallOfSound requested changes on this pull request.
I've experimented with this before and on some machines (one of mine in particular) the media service does not always emit events when some applications are in focus (games in particular).  I'd want to test this extensively again before landing
—You are receiving this because you authored the thread.Reply to this email directly, view it on GitHub, or unsubscribe.

Is this just waiting for the play/pause issue to be fixed as well? Really excited to get a fix for the double skip bug!

@MarshallOfSound I've just updated the code base of my PR to be inline with the 4.7.1 release. After testing once I merged in the updates, The play/pause issue no longer occurs. Track movement and media keys work perfectly, as does the system media transport controls integration when they are fully enabled.
However, I noticed that when I disable the "Show Media Information in System Overlay" option, or disable the system media transport controls option entirely, media keys don't work at all. It sounds like the alternate/original method used to respond to media keys is not re-enabling with the changes I made. This issue sounds a lot like #3598, though I may have been able to make everything behave more consistently. I suspect the issue here is due to the change in the settings menu from when I originally made this fix, so I probably need to adjust how this fix works with the settings options.
Also, when this is resolved, it will also close #2687 since the system media transport controls can facilitate this.
One final note, When I last built this project on my dev machine, I was receiving warnings that the current implementation we are using for integrated system media transport controls (The MediaControl class) is deprecated in favor of using the SystemMediaTransportControls class and that the MediaControl class is not guaranteed to work on versions of Windows beyond 8.1. This may contribute to the reason why it works in many cases, yet doesn't in a fair amount of cases as well. Best option is probably to get this working as a toggle-able option for now and then update the implementation to use SystemMediaTransportControls in a separate pull request.

@MarshallOfSound, I've just updated my patch to work with the current settings menu configuration. I also noticed that Windows does see a media playback command and a media key press as different events. I noted this when I configured my laptop trackpad (uses the precision drivers and can configure gestures through the Windows settings) to use a three finger side swipe for media playback control options next track and previous track. When I enabled system media transport controls, this worked as expected. However, without them, they did not function. The keybindings as implemented when system media transport controls are off is to look for a specific keyboard keypress of a next or previous key. The default behavior of Windows's media keys when a program is not binding to them is to essentially trigger a media playback command. I noticed the same thing with Windows Media Player when trying to use my trackpad configuration, which was coded before System Media Transport Controls was built as an API for Windows.
I'm thinking that this may be why the system media transport controls may not always work in certain games. They may register hooks to the keypress events, which then prevents that keypress from being forwarded to Windows to generate a system media transport controls event. I could especially see this being the case where the media playback keys are implemented as alternate functions of the Function/F keys on some machines/keyboards, depending on how they implement this behavior and how some games deal with it. I'm planning to test my patch with something like Auto-Hotkey to see how it behaves. It seems like some games likely interfere with anything using the new system media controls, so making this option controllable is still our best option.
I think my main goal for this PR is to get an implementation that is in line with the current "Windows 10" way of doing things so that we're able to handle media playback controls in a way that plays best with the OS without the annoying double-skipping bug that we were experiencing before this small tweak in how media keys are handled with the System Media Controls Setting turned on.

Another thought as well, @MarshallOfSound, in the settings menu, the "Show Track information in Windows 10 Volume Overlay" settings seems to be redundant since the "Enable the Windows 10 System Media Service" setting essentially has the same effect. The only difference I see is the latter option states that it will only show playback info on the lock screen. However, Windows does not provide a way to do this without also displaying track info in the volume overlay. Should this setting option be removed or is it's intended purpose to do something else? I noted that disabling track info in the volume overlay has the same effect as disabling the Windows System Media Service entirely.

@MarshallOfSound does the issue with the Windows System Media Transport Controls also occur with programs such as Spotify? I know that Spotify uses a similar integration as the one we have with the Windows System Media Transport Controls, so if the same issue occurs with Spotify and those games you are having issues with GPMDP and the media transport controls, I think we could conclude that the issue is those games instead of our implementation. I also made a few tweaks to the way this fix interfaces with the settings since I found a few unexpected behaviors before I made that change. Perhaps this might help with some of the issues we are experiencing?

@MarshallOfSound I do note that you stated in the first issue that I tagged in the original PR that the thought of making the overlay optional, which has been done, would allow us to work around poorly designed programs that interfere with the Windows System Media Transport Controls. I know that Spotify also makes that integration optional as well, so I think we're on the right track concerning having this optional. However, I've noticed from my use of newer hardware that many of the newer hardware's media control features actually dispatch media control actions through the system media transport controls instead of emulating a hardware keypress.
To provide an example, newer windows PCs that support precision trackpads allow for advancing through tracks using gestures on the trackpad. The only way I can get that to work on my surface book 2 (which uses precision trackpad drivers) with GPMDP is to enable the media transport controls. My logitech mouse behaves similarly when I configure it's macros using Logitech's options software. I'm thinking that we should get this fix pushed through as it will appear that media transport controls are entirely broken on newer hardware that dispatches media transport controls through the system media transport controls if it is not fixed. Getting this fix applied should be the most reliable way to have clean media key integration in circumstances for the vast majority of Windows 10 users while the option of switching it off and using global listeners will take care of the other instances where a game may interfere with the functionality. Seeing how Microsoft is pushing for the system media transport controls as the new standard, I think it would be good to incorporate this so that GPMDP plays nice with newer hardware. It seems like we've found a fix that will still have the flexibility to work with all situations by making this a toggle-able option.
I would really like to see this incorporated into the program as I feel like this program has been amazing for my music listening needs and I know a lot of others feel the same way and have experienced the same or similar issues as myself. I know you're also wanting to get a final fix for this issue as well. I too have also seen a few occasional cases where I've had to switch the setting off and on for the system media transport controls, but I get best results that work about 99% of the time for me by using the media transport controls with this fix. I actually get more reliable results on my surface book 2 and even my desktop with the overlay enabled than with it disabled, but the option to switch it off has served as a reliable fix for those cases where I have to work around other programs.
If there are any other cases you would like me to test, I'd be happy to take a look at them. Please let me know what else I can do to get this moved along.


View rest of resource data

http://webglsamples.org/dynamic-cubemap/dynamic-cubemap.html
WebGL sample with render and frame buffers

Looks great! Especially awesome for a first time react user :+1:


multi-select dashboard variable for metric is not correctly handled in mapping rules

Hi Arnaud,
I have a variable defined in the dashboard for selecting one or more datasources, and use this in metric queries for voltage, current and power. I use the variable name in the metric alias.

When I select one datasource, the mapping rule for e.g. CT7 or CT4 works fine, but when I multi-select a number of CTs (e.g. CT4 and CT7), the mapping rule for CT4 and CT7 are no longer working.

Here is the defined metric query.

Here is the defined mapping rule for CT7.

I inspected the data and the result metric looks quite different now multiple datasources are selected, they are contained within {} and separated by comma's, see the screenshot below where the metric looks like {CT4,CT7}:Isum when both CT4 and CT7 are selected. I think that is what the flowcharting mapping rules try to match and they fail because only CT4:Isum and CT7:Isum are defined.

Would it be possible to recognize the {} construct for multiple selection variables in metric names and support the mapping rules also for elements of the multiple selection? I noticed that the graph panel shows the multiple-select {CT4,CT7} for some reason as one value which appears to match with the first item (CT4) in the multiple-select.

Kind regards,
Dennis

Hi Arnaud, all,
On second thought, this ticket may be more appropriate for grafana itself, if they could somehow expand metric queries with an multi-select variable in the alias to separate metric names instead of a { Item1, Item2, ... } construct. I tried all different variable formatting options, but this did not help to create separate metric names, it only gives different variations of the combined one (e.g. ["Item1", "Item2"] when ${SelectedCT:json} is used).
Btw. I would like to use the $SelectedCT for the metric alias, since the influxdb tag names in the datasource itself cannot be distinguished. Else, I have to create specific metric queries for individual datasource.
Kind regards,
Dennis


par_for_each deadlocks on macOS if called concurrently by more systems than there are threads in the ComputeThreadPool

Bevy version
0.8.0
Relevant system information
Rust version: cargo 1.62.1 (a748cf5a3 2022-06-08)
macOS version: 12.5.1
Processor: Apple M1 Max
What you did
I derived this test case by reducing the hang originally reported in https://github.com/TeamAtomECS/AtomECSDemos/issues/1.
The below code creates 1 entity with 5 empty components. Each of these components is queried by a minimal system that only calls par_for_each on its query with an empty closure.
I added an additional simple tick system that prints the number of frames that have already elapsed in order to easily see the deadlock.
In order to reproduce the deadlock it is necessary that each system has a separate component. Multiple systems querying the same component do not produce a deadlock.
So both the number of components and the number of systems calling par_for_each must be larger than the number of threads in the ComputeTaskPool. (Edit: On my system the ComputeTaskPool has 4 threads.)
The number of frames that elapse before hanging range between zero and a few hundred. More components and tasks make the deadlock more likely.
use bevy::prelude::*;

struct FrameNumber(u64);

const BATCH_SIZE: usize = 1024;

fn main() {
    let mut app = App::new();

    app.add_system(comp1_system);
    app.add_system(comp2_system);
    app.add_system(comp3_system);
    app.add_system(comp4_system);
    app.add_system(comp5_system);

    app.add_plugins(MinimalPlugins);
    app.add_startup_system(create_entity);
    app.insert_resource(FrameNumber(0));
    app.add_system(log_tick);
    app.run();
}

fn log_tick(mut _commands: Commands, mut frame_number: ResMut<FrameNumber>) {
    dbg!(frame_number.0);
    frame_number.0 += 1;
}

fn create_entity(mut commands: Commands) {
    let compute_task_pool = bevy::tasks::ComputeTaskPool::get();
    dbg!(compute_task_pool.thread_num());

    // Add entity
    let mut entity = commands.spawn();
    entity.insert(Comp1 {});
    entity.insert(Comp2 {});
    entity.insert(Comp3 {});
    entity.insert(Comp4 {});
    entity.insert(Comp5 {});
}

macro_rules! par_for_each_system {
    ($comp:ident, $sys:ident) => {
        #[derive(Component)]
        struct $comp {}
        fn $sys(query: Query<&$comp>) {
            query.par_for_each(BATCH_SIZE, |_| {})
        }
    };
}

par_for_each_system!(Comp1, comp1_system);
par_for_each_system!(Comp2, comp2_system);
par_for_each_system!(Comp3, comp3_system);
par_for_each_system!(Comp4, comp4_system);
par_for_each_system!(Comp5, comp5_system);

What went wrong
The program prints a few frames and then deadlocks.
I would expect bevy to count up and print the frame number indefinitely.
Additional information
I also tested this on Ubuntu 20.04 and there it does not deadlock even when the number of systems exceeds the number threads in the ComputeTaskPool.

The update to bevy 0.9.1 fixes at least this example on my system with Rust 1.67.1 and macOS 13.2.
Is that enough to close this issue?
The updated code:
use bevy::prelude::*;

#[derive(Resource)]
struct FrameNumber(u64);

const BATCH_SIZE: usize = 1024;

fn main() {
    let mut app = App::new();

    app.add_system(comp1_system);
    app.add_system(comp2_system);
    app.add_system(comp3_system);
    app.add_system(comp4_system);
    app.add_system(comp5_system);

    app.add_plugins(MinimalPlugins);
    app.add_startup_system(create_entity);
    app.insert_resource(FrameNumber(0));
    app.add_system(log_tick);
    app.run();
}

fn log_tick(mut _commands: Commands, mut frame_number: ResMut<FrameNumber>) {
    dbg!(frame_number.0);
    frame_number.0 += 1;
}

fn create_entity(mut commands: Commands) {
    let compute_task_pool = bevy::tasks::ComputeTaskPool::get();
    dbg!(compute_task_pool.thread_num());

    // Add entity
    let mut entity = commands.spawn_empty();
    entity.insert(Comp1 {});
    entity.insert(Comp2 {});
    entity.insert(Comp3 {});
    entity.insert(Comp4 {});
    entity.insert(Comp5 {});
}

macro_rules! par_for_each_system {
    ($comp:ident, $sys:ident) => {
        #[derive(Component)]
        struct $comp {}
        fn $sys(query: Query<&$comp>) {
            query.par_for_each(BATCH_SIZE, |_| {})
        }
    };
}

par_for_each_system!(Comp1, comp1_system);
par_for_each_system!(Comp2, comp2_system);
par_for_each_system!(Comp3, comp3_system);
par_for_each_system!(Comp4, comp4_system);
par_for_each_system!(Comp5, comp5_system);

The update to bevy 0.9.1 fixes at least this example on my system with Rust 1.67.1 and macOS 13.2. Is that enough to close this issue?

Does this exceed the number of logical cores on your machine? If it does, it probably can be considered fixed.

The 5 components from above never exceeded the number of logical cores (10) on my machine but only the number of threads in the compute task pool (4) which did not change between versions. Just to be safe I tested it just now with 15 components and this also does not deadlock.

If that's the case, I'll close the PR. This likely got fixed as a part of the stageless work.


[Addition] Add a link to Making Content Usable for People with Cognitive and Learning Disabilities

Add a link to Making Content Usable for People with Cognitive and Learning Disabilities.
Would like to see if the GC can translate it for the W3C.

Adding rough French translation done by DeepL:
Making Content Usable for People with Cognitive and Learning Disabilities fr.docx

Add the English Word document:
Making Content Usable for People with Cognitive and Learning Disabilities.docx


Piper/log trinity to file

What was wrong?
STUB
How was it fixed?
Cute Animal Picture

Please still review, will cleanup post merge.


Issue with Delete Company

Set up a container, create a new or copy of Cronus company then delete it.
It is removed from the list of companies in NAV, but the SQL tables are never deleted.
It's probably something to do with the lazy delete being done by some scheduled task that is not running in the container.
Anyone know what the task is and how to start it?

Are you using Windows Auth or NavUserPassword auth?
Reason for asking is, that I know that the task scheduler in NAV doesn't work in Docker when running Windows Auth. We have somebody looking into this.

It's using NavUserPassword auth.

Just tried this using the microsoft/bcsandbox:de container with both Windows and NavUserPassword auth. - works fine.
Need more info.

Hi Freddy,
It's using microsoft/dynamics-nav:2018-gb container. It had CU4 in the image when I deployed it.

I should add it was deployed via the ARM templates (aka.ms/getnav)

Yeah, the more info the less time is wasted:-)
I can repro this with NAV 2018 - but not with bcsandbox.
I will ask around

This should be fixed in Cu6 - which was created on docker a few days ago.
Haven't tested myself yet.

Hi Freddy, thanks. I'll spin a new one up and test it.

Confirmed working ok in NAV 2018 CU6 GB container.

I created a new VM via the ARM templates (aka.ms/getnav) for 2018 CU GB, copied Cronus company to a new one, deleted it, looked in SSMS and the copy company tables are still there.
I'm not sure how long the 'lazy' delete is supposed to take, but I'll look again in the morning.

The company delete via the NAV client still has the tables in the database this morning,

Ok, will have to go back to the team.

I think I know what is wrong here.
The TaskScheduler is disabled by default in NAV 2018 containers and earlier.
You can add this as additionalparameter to new-navcontainer
--env CustomNavSettings=EnableTaskScheduler=true
Which should do the trick.
I will an option to start the task scheduler in the arm templates (aka.ms/getnav)

Just tried this with a NAV 2018 container and it solves the problem.


JAMES-4044 LDAP attribute matchers

Little squash needed :)

Still seeing bunch of fixup commits, didn't get squashed


Output size of ImageEditor.cropImage become smaller

Bug
Output size of ImageEditor.cropImage become smaller

Environment info

React native info output:
 // paste it here

Library version: 2.1.0
Steps To Reproduce

my code:
    const cropData = {
      offset: { x, y },
      size: { width, height },
      displaySize:{width,height},
      resizeMode: "cover"
    };
    RNFS.stat(this.props.imageUri).then((value)=>{
      console.warn("this.props.imageUri",value) // size is 2302015
    })
    console.warn("imageUri",this.props.imageUri,this.state.rotation);
    RNImageRotate.rotateImage(
      this.props.imageUri,
      this.state.rotation,
      rotatedUri => {
        ImageEditor.cropImage(
          this.props.imageUri,
          cropData,
          croppedUri => {
           RNFS.stat(croppedUri).then((value)=>{
                 console.warn("croppedUri",value) // size is 818649
            })
            this.props.onDone(croppedUri);
          },
          err => {
            console.log("cropping error");
            console.log(err);
          }
        );

      },
      err => {
        alert(err);
        console.log(err);
      }
    );

Describe what you expected to happen:
when the width and height is origin of the image, output size is 2302015
Reproducible sample code

Same here in iOS, did you find solution?

try displaySize: {width * 4 ,height * 4}
It worked for me

I have tried various combination, one thing stood out to me is the cropped image quality is always degraded compared to the input ( which you can see clearly with your eyes)

3.1.0 releases include a new feature: number prop that lets you adjust the size of the picture. That should solve your issue


redisson用阿里云集群版redis的问题

阿里云集群版redis限制了使用EVAL命令。
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.redisson.client.RedisException: ERR bad lua script for redis cluster, all the keys that the script uses should be passed using the KEYS array, and KEYS should not be in expression. channel

Please contact your Redis vendor to solve the issue.

Okay, thank you


Data not getting saved in Neo4j graph db

Hi first of all very nice approach to deduce the machine response. I was trying your https://explosion.ai/blog/chatbot-node-js-spacy tutorial but i can't see any data getting saved in Graph Db i am using Slack as the chat client. I am getting something like below on the terminal but no data seems get saved in Neo4j,
[Wed Apr 12 2017 19:06:50 GMT+0000 (UTC)] DEBUG hash string exists for global-client
[Wed Apr 12 2017 19:06:50 GMT+0000 (UTC)] DEBUG hasher.handle invoking cb for global-client
[Wed Apr 12 2017 19:06:50 GMT+0000 (UTC)] DEBUG hash string exists for global-client
[Wed Apr 12 2017 19:06:50 GMT+0000 (UTC)] DEBUG hash string exists for global-client
[Wed Apr 12 2017 19:06:50 GMT+0000 (UTC)] DEBUG hash string exists for global-client
[Wed Apr 12 2017 19:06:50 GMT+0000 (UTC)] DEBUG hash string exists for global-client
[Wed Apr 12 2017 19:06:50 GMT+0000 (UTC)] ERROR
[Wed Apr 12 2017 19:06:50 GMT+0000 (UTC)] INFO Knowledge saved to brain
[Wed Apr 12 2017 19:08:19 GMT+0000 (UTC)] DEBUG [In log]: alice hello_py py
[Wed Apr 12 2017 19:08:19 GMT+0000 (UTC)] DEBUG Started global js socketIO client for SLACK at 6466
[Wed Apr 12 2017 19:08:19 GMT+0000 (UTC)] DEBUG Added a callback to hasher for global-client
[Wed Apr 12 2017 19:08:19 GMT+0000 (UTC)] INFO global-client-js 7l4lt02SGuYEtjo7AAAC joined, -5 remains
[Wed Apr 12 2017 19:08:19 GMT+0000 (UTC)] INFO All 4 IO clients have joined
[Wed Apr 12 2017 19:08:19 GMT+0000 (UTC)] DEBUG IO on pass, msg: {
"hash": "global-client-js_d71ff935b97c97237e8618234aac84b7",
"from": "global-client-js",
"input": "hello_py py",
"to": "nlp.cgkb-py",
"intent": "parse"
} fn: undefined
[Wed Apr 12 2017 19:08:19 GMT+0000 (UTC)] DEBUG IO on pass, msg: {
"to": "global-client-js",
"from": "cgkb-py",
"hash": "global-client-js_d71ff935b97c97237e8618234aac84b7",
"output": null
} fn: undefined
[Wed Apr 12 2017 19:08:19 GMT+0000 (UTC)] DEBUG Added a callback to hasher for global-client
[Wed Apr 12 2017 19:08:19 GMT+0000 (UTC)] DEBUG IO on pass, msg: {
"hash": "global-client-js_c9d8d43bf56a7f451e47587bdc08bd43",
"from": "global-client-js",
"input": "hello_py py",
"to": "convo_classifier.py",
"intent": "classify"
} fn: undefined
[Wed Apr 12 2017 19:08:19 GMT+0000 (UTC)] DEBUG hash string exists for global-client
[Wed Apr 12 2017 19:08:19 GMT+0000 (UTC)] DEBUG hasher.handle invoking cb for global-client
[Wed Apr 12 2017 19:08:19 GMT+0000 (UTC)] DEBUG hash string exists for global-client
[Wed Apr 12 2017 19:08:19 GMT+0000 (UTC)] DEBUG hash string exists for global-client
[Wed Apr 12 2017 19:08:19 GMT+0000 (UTC)] DEBUG hash string exists for global-client
[Wed Apr 12 2017 19:08:19 GMT+0000 (UTC)] DEBUG hash string exists for global-client
[Wed Apr 12 2017 19:08:19 GMT+0000 (UTC)] DEBUG hash string exists for global-client
[Wed Apr 12 2017 19:08:19 GMT+0000 (UTC)] INFO Knowledge saved to brain
Below is my config json and my Neo4j is working on 7474 with Neo4j/0000 credentials
 "PORTS": {     "NEO4J": 7476,     "SOCKETIO": 6466,     "SLACK": 8345,     "TELEGRAM": 8443,     "FB": 8545   },
can you please guide me through.

[Wed Apr 12 2017 19:08:19 GMT+0000 (UTC)] INFO Knowledge saved to brain

It says it does about data being saved  in the log.
P.S. : sorry for replying in the necro thread


NuGet-Packages should contain only one version

when using the Aml.Engine.1.4.1 package you run into problems when trying to build mixed .net framwork and .net standard projects (i.e. .net framework application referencing .net standard project)
If both projects reference the Aml.Engine NuGet package it causes a compiler error:

The reason seems to be that multiple different aml engine versions are contained in the same package:
aml.engine.dll:
net4.6:              Version <IP_ADDRESS>
net4.7:              Version <IP_ADDRESS>
netcoreapp2.2:  Version <IP_ADDRESS>
netcoreapp3.1:  Version <IP_ADDRESS>
netstandard2.0: Version <IP_ADDRESS>
AML.Engine.Services.dll:
net4.6:              Version <IP_ADDRESS>
net4.7:              Version <IP_ADDRESS>
netcoreapp2.2:  Version <IP_ADDRESS>
netcoreapp3.1:  Version <IP_ADDRESS>
netstandard2.0: Version <IP_ADDRESS>
I have not tested if they really differ in any way but the version number.

I have commited version 1.7.3. Please check if this is o.k.


Identifiers starting with an underscore are read as two identifiers

> \_b_ a -> a
<function> : a -> b -> c -> c

So _a_ is read as _ a_. Noticed this when trying to do the idiomatic thing of saying "here is a variable we are ignoring but still give it a name".

For some context, it is not possible to have variables in Elm that start with an underscore. This is freaky nonetheless, so thanks for the report! I'll try to circle back to this before 0.17 comes out.

Centralizing into #1374, follow along there

This is fixed by the new parser. The new error message looks like this:

This seems to still/again be happening in 0.18. Not critical but caused some confusion.
---- elm-repl 0.18.0 -----------------------------------------------------------
 :help for help, :exit to exit, more at <https://github.com/elm-lang/elm-repl>
--------------------------------------------------------------------------------
> \_a -> a
<function> : a -> b -> b
>

The new parser described above is to be part of 0.19 due to some breaking changes :)


Toggle to ignore refraction roughness

Would be interesting to have a way to ignore refraction roughness upon intersection of two dielectrics, allowing to make it easier to emulate condensation on objects, when using particles for the macroscopic features while using roughness for the microscopic ones. Right now it attempting it that way results in a frozen object instead of one with water condensation, because the roughness still persists behind the droplet.
The alternative would be using a displacement map for the macroscopic drops, like that you can also use it for controlling the refraction roughness, but using displacement instead of particles blows up the memory usage.
Thanks for considering.

Hi Mario,
Your observation is astute, I'm not sure jfnd handles this case well right now, although it does attempt to handle it. Here's the current formula I'm using for refractive roughness between two media: https://github.com/Psyop/jf-nested-dielectric/blob/master/source/jf_nested_dielectric.h#L294. The difference between the IORs is used to multiply the average roughness between the two media.
I'm not sure this formula is the right one. I think perhaps some scaling of the prioritized medias roughness might make more sense, and scaling linearly be the difference in IORs may not make sense either.
Let me think a title about this.

Thanks for considering. Meanwhile I've changed the way I've done droplets. I'm back to using displacement instead of particles. Allows for more irregularity. The displacement map also acts as map for roughness, so it all works out fine.


Add NetMode, UtsMode and IPCMode Namespaces support

lots of unhappy tests atm.

Yup, I have to make shm work properly.  Taking all day to get close.

@TomSweeneyRedHat @baude @mheon @umohnani8 Tests finally pass, Please review this.  I can break this up into a series of PRs if that is easier.

@rhatdan, Travis isn't happy due to some unwanted whitespace.

@mheon Now storing the list of mounts in the DB.  So code less hacky and it seems to work, PTAL.

@rhatdan There's a DB schema version in sql_state.go since my DB versioning patch hit. Can you increment that from 1 to 2, to indicate a change has been made in database arrangement?

Otherwise, LGTM. I don't know if Mounts should be in Config or State yet, but for now I think we're fine.

Well mounts should not change after the container has been created.

@bot retest please

@mheon updated the schema version.

bot, retest this please

LGTM
@rh-atomic-bot r+

@rh-atomic-bot retry


remove pdf proof from process batch

Since we are checking the public key when disputing signature

Yay!
Also removed the idle struct.


FR: empty line around lists

Describe the Solution You'd Like
Linter has already the following "emtpy line around"-formatings implemented:

Blockquotes
Code fences
Math Blocks
Tables

I see that this are all some lind of blocks, but still I think it makes a lot of sense to also add Lists.
By Lists I mean both, ordered and unordered.
original text
1. step 1
2. step 2

expected outcome:
original text

1. step 1
2. step 2

Additional Context
If you write markdown in obsidian and do not leava a empty line between a line of text and the list, the reading-view will add that line autmatically. So to make markdown editor and reader closer, I personally always add a line before the list. And thats where linter would come into play :)
Thanks for reading and considering!

Alternative: Right now I use this other plugin that supports it already: https://github.com/alexgavrusev/obsidian-format-with-prettier

I second this.
This can partially be achieved by enabling Paragraph blank lines, but for some reason there is no blank between the end of the list and a paragraph following the list. For example:
Paragraph before list.

- List item 1
- List item 2
Paragraph after list.

I'm not sure if this is a bug in the Paragraph blank lines functionality, or whether a list needs a similar option to have a blank link added after it.

so is there a chance this can be implemented? :)

I noticed with my sample markdown:
Paragraph before list.

- List item 1
- List item 2
Paragraph after list.

that Obsidian indents "Paragraph after list." to line up with the list items when in Reading mode. I'm not sure if this is expected behaviour, as I cannot see it documented anywhere. Indenting "Paragraph after list." with a Tab or two spaces also does the same thing.
Introducing blank lines at the end of a list may break this if anyone is using it as a feature. I'd be happy to add a blank line, unless the paragraph immediately after the list is indented with spaces or tabs.

Hey @berot3 , @zedtools . Thanks for reaching out and providing information around this. This feature is something that can be added to the Linter, but right now there are a couple of scenarios that would need to be looked into more/be ironed out to make sure there is a clear understanding of how to address this issue. Admittedly, that is something I, or another dev will have to do for some of these things. But here are a couple of them.
What is the expected way to handle nested lists? Are they considered to be a part of the same list or would the blank lines apply to them as well?
I assume they are to be treated as the same list, but I know that they are treated a little differently by the parser so they would have to be handled in a special way.
What is the expectation around a list of checkboxes right after a regular list (this might be more of an AST/parser question)? Do we consider those two lists to be one or are they separate?
What is the expectation when dealing with nested blockquotes where the blockquotes are side by side (this is an edge case I would like to understand what the expected behavior of is)?
For example, what is expected if we have the following content:
> Content here
> > - List item 1
> > - List item 2
>
> > - Another list item 1
More content here...

Would those two nested blockquotes get joined in this scenario? Or is the expectation that they would stay separate? Right now, I believe the logic is setup to join these two blockquotes since I believe that different blockqoutes at the same level should be separated with something more than an empty line/blockquote.
Thanks for the help on better understanding some of these things!

It is already looking like there may be some difficulties from a technical standpoint since the AST parser considers the following to be a single list after a paragraph (see ast parser results here):
Paragraph before list.
- List item 1
- List item 2
Paragraph after list.
more test here

So that will make things tricky because the same kind of thing is true for other text as well. So in order for this to work, the parser will have to consider all list items that end in two spaces, ., or \ and a new line a continuation of a list item and anything that does not follow those conventions as a break in the contents of the list item. This could break things, but this is the best I can think up at this time.

Currently there is a very basic implementation of this that does need to have the ability to determine if a list item is truly a continuation of the table or if something else is going on. So that will need to be dealt with, but hopefully it will not be too bad. But that is all I have time for today.


scigraph_client relationshipType escaping causes double escape?

relationshipType appears to be being escaped correctly when it is an iri now. Not at all sure what changed but it means we are now double escaping things.
@CheerfulTeapot I think this is probably why has_proper_part was not working as expected?

Fixed by 46dbc86bf6ed8c72bbec1785f4c4ca24d154b963


StackNavigationHandler can pop last view controller from stack

Codecov Report

Merging #9 (19a1a2b) into main (e38f508) will increase coverage by 0.19%.
The diff coverage is 100.00%.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
@@            Coverage Diff             @@
##             main       #9      +/-   ##
==========================================
+ Coverage   88.91%   89.10%   +0.19%
==========================================
  Files          13       13
  Lines         397      404       +7
==========================================
+ Hits          353      360       +7
  Misses         44       44

Impacted Files
Coverage Δ

...ation/StackNavigation/StackNavigationHandler.swift
86.20% <100.00%> (+1.20%)
:arrow_up:

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Fix typo in date command

date +F => 'F'
Thanks for the guide and happy to see it is still developing!

Nice catch - thank you!


What is being done to keep my password safe?

I'm not quite comfortable imputing my password into third party applications. Is there a reason why login doesn't redirect the user to an official Facebook authorization page like other web logins?

Facebook itself is doing "something" to keep your password safe. This app is only a wrapper around the web version (a web view). If this app was a Messenger client (which Facebook usually -if not always- restricts, unlike Twitter) it would have an auth page, redirection, et al.
In short, you submit your password to Facebook servers.

This article should get you started https://www.facebook.com/help/213481848684090


using oobabooga text generation webui instead of ollama

Hi
thanks for your awesome efforts on this!
As you might know, oobabooga text generation webui also offers openAI like api through one of its extensions, and being able to utilize that using twinny, would be a game changer.
anybody had any success doing so?

I haven't tried it but it seems pretty straight forward changing the ports and the api endpoint. The twinny settings page has notes in the description for configuring llama.cpp. I bet that will work for you if your text-gen-ui has the api enabled

I think it would require some work to edit the payload which is sent to the oobabooga API so I don't think just updating the API settings will work.

I must be confusing the llama.cpp model backend with what is exposed through the api. I'm looking forward to trying it out myself.

Hey, it appears that LM Studio and oobabooga and many other APIs support similar data structures to OpenAI API I am in the middle of implementing support for LM Studio so hopefully using this preset will also work for oobabooga api too.  I did not test it because I did not install oobabooga api yet.
https://github.com/rjmacarthy/twinny/pull/98

Haven't tried the above code from #98 merge request, but still running this version of Twinny in VSCode 1.86.0:

I injected some simple logging to oobabooga:
$ git diff
diff --git a/modules/text_generation.py b/modules/text_generation.py
index 1917a0c1..d05c988a 100644
--- a/modules/text_generation.py
+++ b/modules/text_generation.py
@@ -443,5 +443,7 @@ def generate_reply_custom(question, original_question, seed, state, stopping_str
         t1 = time.time()
         original_tokens = len(encode(original_question)[0])
         new_tokens = len(encode(original_question + reply)[0]) - original_tokens
+        print(f'Question: {question}')
+        print(f'Reply: {reply}')
         print(f'Output generated in {(t1-t0):.2f} seconds ({new_tokens/(t1-t0):.2f} tokens/s, {new_tokens} tokens, context {original_tokens}, seed {seed})')
         return

... and now I can see ooba is perfectly accepting completion requests and responding back, when Twinny is configured like this:
Api Url: ip or hostname
Fim Api Port: 5000
Chat Fim Path: /v1/completions
....but for some reason Twinny doesn't paste the model' response back to editor.
I have a wild guess it just takes the wrong piece from JSON, while still thinking it's ollama-like.
Would be great to have any kind of debugging console for Twinny to troubleshoot that.

Please could you update to the latest version and try again?

Nah, still the same, unfortunately.
In oobabooga logs (with my extra piece) I see this:
Llama.generate: prefix-match hit

llama_print_timings:        load time =     169.27 ms
llama_print_timings:      sample time =       0.11 ms /    16 runs   (    0.01 ms per token, 149532.71 tokens per second)
llama_print_timings: prompt eval time =       0.00 ms /     1 tokens (    0.00 ms per token,      inf tokens per second)
llama_print_timings:        eval time =     436.53 ms /    16 runs   (   27.28 ms per token,    36.65 tokens per second)
llama_print_timings:       total time =     452.12 ms /    17 tokens
Question: <｜fim▁begin｜>

# Language: Python (python)
# File uri: untitled:Untitled-2 (python)
import pyspark

# add two numbers
<｜fim▁hole｜><｜fim▁end｜>
Reply: num1 = 1.5
num2 = 6.3

Output generated in 0.76 seconds (23.81 tokens/s, 18 tokens, context 81, seed 55953560)

But Twinny doesn't show this suggestion.
I also enabled the logging setting:
"twinny.enableLogging": true

but nothing is getting printed to "Output" or to "Debug console".

I made a curl request manually just to be sure:
curl -XPOST http://oobaboogahost:5000/v1/completions  \
-H "Authorization: Bearer mypassword" \
-H "Content-Type: application/json"   -d '{
    "prompt": "<｜fim▁begin｜> def main(<｜fim▁hole｜> <｜fim▁end｜>",
    "max_tokens": 5,
    "temperature": 0.5,
    "top_p": 0.9,
    "seed": 10
  }'

And it replied with this JSON:
{
    "id": "conv-1707516141850207744",
    "object": "text_completion",
    "created":<PHONE_NUMBER>,
    "model": "deepseek-coder-33b-base.Q4_K_M.gguf",
    "choices": [
        {
            "index": 0,
            "finish_reason": "length",
            "text": "):\n    print(",
            "logprobs": {
                "top_logprobs": [
                    {}
                ]
            }
        }
    ],
    "usage": {
        "prompt_tokens": 28,
        "completion_tokens": 6,
        "total_tokens": 34
    }
}

I guess Twinny should be taking the reply from choices[0]["text"]

It should if you use LM studio as your API provider.
https://github.com/rjmacarthy/twinny/blob/d69c03098dcdebf7893cc92d0fa021625b1334f4/src/requests.ts#L76

It might be the case there's something wrong with ooba. Will test the latest version out with Jan.AI and llama.cpp tomorrow and report you back. They both should provide the same OpenAI compatible API REST endpoints

It could be something in the code that I am doing incorrectly. I will check it next week by installing ooba API. Maybe the streaming data is different but the API request is the same.
Many thanks,

Would be great.
Today I checked Twinny against Jan.AI installed locally. Jan.AI is truly opensource inference desktop app, supporting Linux, Max and Windows. A drop-in replacement of proprietary LM Studio. As I said before, Jan.AI is having the built-in OpenAI-compatible API, but running on a slightly different endpoint (/v1/chat/completions) compared to llama.cpp built-in webserver or LM Studio.  So first, I've made a simple curl call to ensure Jan works fine and able to respond:
curl -XPOST http://localhost:1337/v1/chat/completions  -H "Content-Type: application/json"   -d '{
    "prompt": "<｜fim▁begin｜> def main(<｜fim▁hole｜> <｜fim▁end｜>",
    "max_tokens": 50,
    "temperature": 0.1,
    "top_p": 0.9,
    "seed": 10,
    "model":"deepseek-coder-1.3b"
  }'

And it did respond me with this JSON:
{
    "choices": [
      {
        "finish_reason": null,
        "index": 0,
        "message": {
          "content": "\nThe code you provided is a simple Python script that uses the `requests` library to send HTTP requests. However, it doesn't seem like there are any errors in your code or logic here as you haven\u2019t provided the specifics of",
          "role": "assistant"
        }
      }
    ],
    "created":<PHONE_NUMBER>,
    "id": "qC6duduhv0pq80xhnoTv",
    "model": "_",
    "object": "chat.completion",
    "system_fingerprint": "_",
    "usage": {
      "completion_tokens": 50,
      "prompt_tokens": 4,
      "total_tokens": 54
    }
  }

Then I tried to configure Twinny to use it:

"llama.cpp" or "lmstudio" as an API provider
port was 1337 (as I used in curl) for both chat and fim (fill-in-the-middle)
API path was set to "/v1/chat/completions" for both - this is what I have seen working for manual curl requests
... but none of that worked. I can see in Jan.AI logs, it is responding with 404, as if wrong API path was requested or something was missing in JSON request, but unfortunately currently Jan logs are not very verbose to see further details. I've raised feature request for that - https://github.com/janhq/jan/issues/1989

Would be great if Twinny could have some debug on it's own side to see what it is sending out and what kind of responses it gets back from server backends. There's a debug checkbox in settings, but it looks like it doesn't do much at this point.

If you enable twinny debug settings and open dev tools for vscode you should see some information on latest version of twinny.

Thanks a lot! It helped. The single bit is missing, when we talk about Jan.AI OpenAI implementation is "model" thing. The requests that are being sent by Twinny right now looks like this:
{
  "prompt": "<｜fim▁begin｜>\none and one is <｜fim▁hole｜><｜fim▁end｜>",
  "stream": true,
  "max_tokens": -1,
  "temperature": 0.2
}

whereas Jan.AI expects to see one more field - "model". E.g. they should look like this:
{
  "prompt": "<｜fim▁begin｜>\none and one is <｜fim▁hole｜><｜fim▁end｜>",
  "stream": true,
  "max_tokens": -1,
  "temperature": 0.2,
  "model":"deepseek-coder-1.3b"
}

I just added model to the request in version 3.5.14 let me know if it helps.
Many thanks,

I can see the improvement! It did help - Jan is no longer responding back with 404, but Twinny still doesn't show the autocompletion.
I think there might be an issue with "stream": true in JSON.
There's a noticable difference if I mage curl calls with strem set to true or false.
Here's with stream set to true (this is what Twinny does right now):
$ curl -XPOST http://localhost:1337/v1/chat/completions  -H "Content-Type: application/json"   -d '{
  "model": "deepseek-coder-1.3b",
  "prompt": "<｜fim▁begin｜>\none and one is <｜fim▁hole｜><｜fim▁end｜>",
  "stream": true,
  "max_tokens": -1,
  "temperature": 0.2
}'
data: {"choices":[{"delta":{"content":"\n"},"finish_reason":null,"index":0}],"created":1707600176,"id":"TaGsr7QQGfBBCWz8TDSj","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":"The"},"finish_reason":null,"index":0}],"created":1707600176,"id":"Knz6vYJ3M15CjbstrUGu","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" code"},"finish_reason":null,"index":0}],"created":1707600176,"id":"p9gu6aVOkmnxGXvBPagT","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" sn"},"finish_reason":null,"index":0}],"created":1707600176,"id":"0pm5Ickntj7ngYMXmvUR","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":"ip"},"finish_reason":null,"index":0}],"created":1707600176,"id":"F3GbL4J6MGK6ttMSBLAh","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":"pet"},"finish_reason":null,"index":0}],"created":1707600176,"id":"I6b0N3Wdgh3aTUB6BJFi","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" you"},"finish_reason":null,"index":0}],"created":1707600176,"id":"1NQtPlYh0ANkJMstrhdV","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" provided"},"finish_reason":null,"index":0}],"created":1707600177,"id":"29Xb3dDoDkjKxYFckwqn","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" is"},"finish_reason":null,"index":0}],"created":1707600177,"id":"RbdsN2jGBMv3Cq5CYiqI","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" a"},"finish_reason":null,"index":0}],"created":1707600177,"id":"HZB5hBnpyKD05rAb7umU","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" Python"},"finish_reason":null,"index":0}],"created":1707600177,"id":"ug8dQwckOeoIuWHCPRIb","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" script"},"finish_reason":null,"index":0}],"created":1707600177,"id":"DUlxE3j4wDmIUCPUN0Ft","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" that"},"finish_reason":null,"index":0}],"created":1707600177,"id":"y0obmk2hmA3IXg3IFgah","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" uses"},"finish_reason":null,"index":0}],"created":1707600177,"id":"GvnBY5AUkJrceTGUs2a6","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" the"},"finish_reason":null,"index":0}],"created":1707600177,"id":"uXKPcSBaYg0NIj76LTKi","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" Py"},"finish_reason":null,"index":0}],"created":1707600177,"id":"ex7PIVIUMMQFEVzDgPag","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":"Tor"},"finish_reason":null,"index":0}],"created":1707600178,"id":"kRIo3bZw1ZxW7gxjvsdH","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":"ch"},"finish_reason":null,"index":0}],"created":1707600178,"id":"5e0DkLvRRVYaGWIcsyIr","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" library"},"finish_reason":null,"index":0}],"created":1707600178,"id":"U3cnJ5oNbbCi5gheXb2C","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" to"},"finish_reason":null,"index":0}],"created":1707600178,"id":"fXtmxS0RjCyTpNoQ5gCP","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" train"},"finish_reason":null,"index":0}],"created":1707600178,"id":"X9wxKT9gayQ23Gf8AAE0","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" an"},"finish_reason":null,"index":0}],"created":1707600178,"id":"QsvDQbBoCEuSUfkDJDqb","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" L"},"finish_reason":null,"index":0}],"created":1707600178,"id":"9glvKFgG0qQzzMV8nTTO","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":"STM"},"finish_reason":null,"index":0}],"created":1707600178,"id":"1sMetoLUjgEQCy4UbDh5","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" model"},"finish_reason":null,"index":0}],"created":1707600178,"id":"6nMJ0aAZFXq3hMgCY0FR","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" on"},"finish_reason":null,"index":0}],"created":1707600179,"id":"8tpuXWnGiq7T4Zs6j2bA","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" some"},"finish_reason":null,"index":0}],"created":1707600179,"id":"ppnfP8b4JcmA8QQbmd4d","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" data"},"finish_reason":null,"index":0}],"created":1707600179,"id":"YecpQOcA4dNXXxVxK5tl","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":"."},"finish_reason":null,"index":0}],"created":1707600179,"id":"PNEDwb9hp6wEAEXFJ3yr","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" The"},"finish_reason":null,"index":0}],"created":1707600179,"id":"Rdpo8BZrqGNdVDhkZtvS","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" training"},"finish_reason":null,"index":0}],"created":1707600179,"id":"J18Pjr98BLC1xbnmpSzK","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" process"},"finish_reason":null,"index":0}],"created":1707600179,"id":"u3V1CehDX2ABfsCxGXQM","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" involves"},"finish_reason":null,"index":0}],"created":1707600179,"id":"IxrzNqLwEbMayXaCfx6a","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" feeding"},"finish_reason":null,"index":0}],"created":1707600179,"id":"wrAvWPtxLSYWFsMicFis","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" in"},"finish_reason":null,"index":0}],"created":1707600180,"id":"EE60y1ssws6YyycfBW9r","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" bat"},"finish_reason":null,"index":0}],"created":1707600180,"id":"ip5aGJhNcECiccV4m0uI","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":"ches"},"finish_reason":null,"index":0}],"created":1707600180,"id":"VXtnrszzNs4vxs0ZVKuQ","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" of"},"finish_reason":null,"index":0}],"created":1707600180,"id":"z9PgWPioLcjGLUof6uq9","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" input"},"finish_reason":null,"index":0}],"created":1707600180,"id":"gJQD18oWz1j4EYFUbC95","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" and"},"finish_reason":null,"index":0}],"created":1707600180,"id":"SHAt0nNTDDQMLK080BHr","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" output"},"finish_reason":null,"index":0}],"created":1707600180,"id":"w68JD92WTJqMiJEimTj6","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" pairs"},"finish_reason":null,"index":0}],"created":1707600180,"id":"FhslqlpepWy7TwXuQs4U","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":","},"finish_reason":null,"index":0}],"created":1707600180,"id":"Gn6reJYtSr3PoiOJ4woW","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" updating"},"finish_reason":null,"index":0}],"created":1707600181,"id":"7bm8Z0U5hxlUes8u35Hg","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" weights"},"finish_reason":null,"index":0}],"created":1707600181,"id":"CsO3VabxzyNgbahOfg9a","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" based"},"finish_reason":null,"index":0}],"created":1707600181,"id":"mTwVyXTPAXv2TJtArfI0","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" on"},"finish_reason":null,"index":0}],"created":1707600181,"id":"WBhICOjBMDFWUs4OsL4z","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" the"},"finish_reason":null,"index":0}],"created":1707600181,"id":"UvlBCWWfN9Y2s0JGXEFt","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" grad"},"finish_reason":null,"index":0}],"created":1707600181,"id":"jgu1F6orrGC7RBlu1t7a","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":"ients"},"finish_reason":null,"index":0}],"created":1707600181,"id":"kKHfOyfje4EoGn0lHFAe","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" computed"},"finish_reason":null,"index":0}],"created":1707600181,"id":"hvhIbol96USTYaQNQxj8","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" during"},"finish_reason":null,"index":0}],"created":1707600181,"id":"xpsVS1Bvw0gZnD0v5td4","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" back"},"finish_reason":null,"index":0}],"created":1707600181,"id":"FKXbnPCowgOZG3VZvoEA","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":"prop"},"finish_reason":null,"index":0}],"created":1707600182,"id":"64geYARLcAkJA36pmhF3","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":"ag"},"finish_reason":null,"index":0}],"created":1707600182,"id":"bREvx2FdTtlOVNQw23Qq","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":"ation"},"finish_reason":null,"index":0}],"created":1707600182,"id":"v97z8kToth1CwjFvf4v0","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" ("},"finish_reason":null,"index":0}],"created":1707600182,"id":"3NNqhoSiI3aP5luGRYG2","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":"which"},"finish_reason":null,"index":0}],"created":1707600182,"id":"OwQMhcxdgYMFpYrlICmR","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" is"},"finish_reason":null,"index":0}],"created":1707600182,"id":"keBTwC8TccPe30j79K9D","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" what"},"finish_reason":null,"index":0}],"created":1707600182,"id":"i4E5py9kUd8ET4JLL9vE","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" happens"},"finish_reason":null,"index":0}],"created":1707600182,"id":"fDgeLqmaPXtUPJ26jhnZ","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" when"},"finish_reason":null,"index":0}],"created":1707600182,"id":"weB52Maspc8w925kLV98","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" you"},"finish_reason":null,"index":0}],"created":1707600182,"id":"Ov8vHI1UMS1wSuvLBcN0","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" run"},"finish_reason":null,"index":0}],"created":1707600183,"id":"EGBPFOHcBzsdswxcETMz","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" your"},"finish_reason":null,"index":0}],"created":1707600183,"id":"sGm9eq0gV5HziY2WnqGf","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" training"},"finish_reason":null,"index":0}],"created":1707600183,"id":"zJt7z9jXFGlrIdny252S","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" loop"},"finish_reason":null,"index":0}],"created":1707600183,"id":"2GY1ik5jYW0Coa5NJ2Jv","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":"),"},"finish_reason":null,"index":0}],"created":1707600183,"id":"cJ3GnHDk1nQsvp5vHT5H","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" then"},"finish_reason":null,"index":0}],"created":1707600183,"id":"hs8ZnH6iS0fOINTnv2kP","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" repeating"},"finish_reason":null,"index":0}],"created":1707600183,"id":"JUpHNKFvPdhprk61NK5O","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" this"},"finish_reason":null,"index":0}],"created":1707600183,"id":"T2FXCI8IGTWFyRiBHzU0","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" process"},"finish_reason":null,"index":0}],"created":1707600184,"id":"X0378w1ojDwZa0lg2Loh","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" for"},"finish_reason":null,"index":0}],"created":1707600184,"id":"EBF8tmycmkYf2MD7LQSP","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" a"},"finish_reason":null,"index":0}],"created":1707600184,"id":"wBPicy1IQWjz9ebe2KkN","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" number"},"finish_reason":null,"index":0}],"created":1707600184,"id":"7xDQhTSgtgl6tQVe9eIH","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" of"},"finish_reason":null,"index":0}],"created":1707600184,"id":"TcwJdDPj1BqaHzMar7eK","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":" epoch"},"finish_reason":null,"index":0}],"created":1707600184,"id":"59HhZMM4hpIhAAzVPAnZ","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":"s"},"finish_reason":null,"index":0}],"created":1707600185,"id":"6nZOmFfZs2SzyKM0ln28","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":"."},"finish_reason":null,"index":0}],"created":1707600185,"id":"UVOG6PaEoJeCt3Ah1q0D","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":"\n"},"finish_reason":null,"index":0}],"created":1707600185,"id":"LmzaHJ4eYOMmIy8V3kYk","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":""},"finish_reason":null,"index":0}],"created":1707600185,"id":"Vx04HeYGKDpSPx7Y9gPH","model":"_","object":"chat.completion.chunk"}

data: {"choices":[{"delta":{"content":""},"finish_reason":"stop","index":0}],"created":1707600185,"id":"SBMl01ID9I0gWqZ2cSVr","model":"_","object":"chat.completion.chunk"}

data: [DONE]

And here's with stream set to false:
$ curl -XPOST http://localhost:1337/v1/chat/completions  -H "Content-Type: application/json"   -d '{
  "model": "deepseek-coder-1.3b",
  "prompt": "<｜fim▁begin｜>\none and one is <｜fim▁hole｜><｜fim▁end｜>",
  "stream": false,
  "max_tokens": -1,
  "temperature": 0.2
}'
{"choices":[{"finish_reason":null,"index":0,"message":{"content":"\nThe code you provided is a simple Python script that uses the `requests` library to send HTTP requests. However, it's missing some crucial parts such as headers and URL parameters which are necessary for making a request successful in the context of this script:\n```python \nimport requests   # Importing Requests library to send HTTP Request.   \nurl = \"http://example.com\"     // URL of the website you want to access   # Replace with your target url \nresponse=requests.get(url)    // Sending a GET request and storing the response in 'Response'   # Replace with your target url \nprint (response.text )        // Printing out text of webpage content from the server response   \n```   # Replace with your target url \nPlease note that this script is a simple example and doesn't handle any potential errors or exceptions. You should add error handling code to make your scripts more robust, for instance by catching specific types of exception that might be raised when making requests and dealing with responses.\n","role":"assistant"}}],"created":1707600269,"id":"iIHO1uIerkh5SOlWt9ce","model":"_","object":"chat.completion","system_fingerprint":"_","usage":{"completion_tokens":224,"prompt_tokens":4,"total_tokens":228}}

Does Twinny actually support streamed response and knows how to interpret it?
Here's the screenshot from developer console:

I think, if you change that stream from true to false it should do the job.

Hey, please try a base model e.g https://huggingface.co/deepseek-ai/deepseek-coder-1.3b-base it should work.

I can confirm that code autocompletion in version 3.5.14 is working with oobabooga as a backend now!
That is awesome, thanks a lot.
Here are the plugin settings I used, just in case if others will be interested:
Api Hostname            : ip_address_of_your_oobabooga_installation
Api provider            : lmstudio
Chat Api Path           : /v1/chat/completions
Chat Api Port           : 5000
Fim Api Port            : 5000
Fim Api Path            : /v1/completions
Chat Model Name         : for oobabooga it does not matter, as model is loaded on oobabooga side
Fim Model Name          : for oobabooga it does not matter, as model is loaded on oobabooga side
Fim Template Format     : deepseek  (just because I use deepseek-coder-xx-base model in Ooba)
Disable Auto Suggest    : true  (this is my personal preference. Do not like to overload server with extra requests,
                          I prefer manual autocompletion triggered by  Alt + \)
Use File Context        : false
Enable Completion Cache : false
Num Predict Chat        : 512
Num Predict Fim         : -1
Disable Server Checks   : true  (disabled it in order to prevent plugin asking me all the time to install ollama)
Api Bearer Token        : mysecuredpassword  (if you have set an api password in oobabooga
                          with --api --api-key mysecuredpassword)

The only thing I noticed is that chat on the left-hand side doesn't work - most probably chat templates should be tuned for deepseek base model. In Oobabooga, chats the very same model work fine. But that's an easy part, I think one should able to play with it and fix this by himself, based on the chosen model.
Will check the same for Jan.AI as a backend bit later again.

So the fix for chat was easy one, if anyone is using the deepseek models, just change the contents of system.hbs to this value:
The following is a conversation with an AI Large Language Model. The AI has been trained to answer questions, provide recommendations, and help with decision making. The AI follows user requests. The AI thinks outside the box.

Awesome, thanks!

Oobabooga API is now supported 🍾


storage: prevent tag overwrites controlled via configuration

Signed-off-by: Laurentiu Niculae<EMAIL_ADDRESS>What type of PR is this?

Which issue does this PR fix:
Issue #283
What does this PR do / Why do we need it:
If an issue # is not available please add repro steps and logs from IPAMD/CNI showing the issue:
Testing done on this change:

Automation added to e2e:

Will this break upgrades or downgrades. Has updating a running cluster been tested?:
Does this change require updates to the CNI daemonset config files to work?:

Does this PR introduce any user-facing change?:

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Also consider adding this flag to the "access control" config section which allows for per-repo settings.

@laurentiuNiculae pls sign this PR


More details on sharing an ApnsClient

Added information from https://github.com/relayrides/pushy/issues/520 into the README

@mohamedhafez Thanks for taking this on! Sorry to take so long to get to it. I think we can drop the "coming soon" part, though. Would you mind giving https://github.com/relayrides/pushy/wiki/Best-practices a read and letting me know if it (a) makes sense and (b) provides the information you're looking for?
Thanks!

Awesome! yeah I bet that'll be super helpful to a lot of people. Easy to understand, and answers all the questions I had in depth. Feel free to edit my changes any way you think is best, or even replace them entirely with something short like "see wiki article for performance considerations". Thanks!


Missing given instance under very strange conditions

A very strange minimization:

The given for Check needs to have 3 using blocks. The last can be just a dummy, but the first two must use the type argument T.
Must have cross-module compilation

Compiler version
v3.3.0
Also latest v3.4.0-nightly
Minimized code
Candidate.scala
trait Id[V <: Int] {type Out <: Int}
given [V <: Int]: Id[V] with {type Out = Int}

trait Candidate[R] {type Out <: Int}
given [R <: Int, I <: Id[R]](using id: I): Candidate[R] with {type Out = id.Out}

Candidate.test.scala
trait Check[T <: Int]
given [T <: Int](using Id[T])(using Id[T])(using DummyImplicit): Check[T] = ???

def foo(using c: Candidate[Int])(using Check[c.Out]): Unit = {}

val x = foo

Output
[error] No given instance of type Check[?1.Out] was found for parameter x$2 of method foo.
[error] I found:
[error]
[error]     given_Check_T[Int](given_Id_V[Int])(given_Id_V[Int])
[error]
[error] But given instance given_Check_T does not match type Check[?1.Out]
[error]
[error] where:    ?1 is an unknown value of type given_Candidate_R[Int, I]
[error] .
[error] val x = foo
[error]            ^

Expectation
No error.

This bug was fixed somewhere between 3.4.0 and 3.4.1. Now compiles on 3.4.1


Fix duplicated customers in customer search

I want to merge this change because fixing duplicated customers in customer search

Impact

[ ] New migrations
[ ] New/Updated API fields or mutations
[ ] Deprecated API fields or mutations
[ ] Removed API types, fields, or mutations
[ ] Documentation needs to be updated

Pull Request Checklist

[ ] Privileged queries and mutations are guarded by proper permission checks
[ ] Database queries are optimized and the number of queries is constant
[ ] Database migration files are up to date
[ ] The changes are tested
[ ] GraphQL schema and type definitions are up to date
[ ] Changes are mentioned in the changelog

Task linked: SALEOR-3651 Search by name duplicate cusotmers, in cusotmers query


Language

Please add other languages especially Bengali language, I have request to add Bengali language.

This app only supports languages supported by DeepL other than Bengali. You need to request the developer of the official DeepL and not this unofficial app.


Populate cursorAfter in datastore v1beta2

Fixes #548

Added commit to address comments

@mziccard In 663e54b I added a little bit more to the documentation for QueryResults.  Do you think there's anything else that should be mentioned to make it clearer?

Looks good. @mziccard I am merging it but please comment and we should open a separate PR for any further doc changes.