Fix ArgumentError with embedded mode, sidekiq 7.0 instantiating launcher with unexpected signature

PR for reference #387
Feel free to close, haven't followed up and may already be fixed.

It seems people make it work with a workaround: https://github.com/sidekiq-cron/sidekiq-cron/issues/387#issuecomment-1352787715
Maybe this change will make it incompatible with previous Sidekiq versions?

The original sidekiq signature is config, embedded: false - defaulting it to embedded: true is probably not desirable and if running in embedded mode, it would be true anyway. Maybe to keep it backwards compatible, config, * would be better.

class OldLauncher
  def initialize(config)
    puts "old: #{config}"
  end
end

class NewLauncher
  def initialize(config, embedded: false)
    puts "new: #{config} embedded: #{embedded}"
  end
end

module CronPrepend
  def initialize(config, *)
    puts "cron prepend"
    super
  end
end

OldLauncher.prepend(CronPrepend)
NewLauncher.prepend(CronPrepend)

> OldLauncher.new(123)
cron prepend
old: 123
> NewLauncher.new(123)
cron prepend
new: 123 embedded: false
> NewLauncher.new(123, embedded: true)
cron prepend
new: 123 embedded: true


project_config.hpp not respected

Describe the bug
Changing log levels in project_config.hpp does nothing.
To Reproduce

Create a project and LogInfo() and LogDebug()
Swap between the following list

#define SJ2_LOG_LEVEL SJ2_LOG_LEVEL_NONESET
#define SJ2_LOG_LEVEL SJ2_LOG_LEVEL_DEBUG
#define SJ2_LOG_LEVEL SJ2_LOG_LEVEL_INFO

Notice that none of them change which logs get output

Expected behavior

#define SJ2_LOG_LEVEL SJ2_LOG_LEVEL_NONESET: should show no logs
#define SJ2_LOG_LEVEL SJ2_LOG_LEVEL_DEBUG: should show just debug logs
#define SJ2_LOG_LEVEL SJ2_LOG_LEVEL_INFO: should show debug and info logs

The constexpr if logic for logs is flipped Needs to be >= rather than <=

The default include directories are not correct and are undefined variables. Maybe we need to set something that breaks the makefile if undefined variables are used.

This seems to be a way to force make to quit if variables are used before they are created.
https://unix.stackexchange.com/questions/228331/avoid-running-the-script-if-a-variable-is-not-defined


如何选择重叠区域

你好，请问如何确定论文中随机选取的重叠区域刚好是目标所在的区域（伪标签的值）？如果选取的重叠区域不是目标所在，那对比损失还有意义吗？

I am a little confused about your question. I think you may misunderstand something.
The overlapping region is randomly selected. In particular, we simply select two random crops from a single image. If the IoU (intersection over union) between the two crops is not within [0.1, 1.0], we will resample two random crops until they satisfy the requirement. The overlapping region is thus randomly formed.
Actually, we don't care what content is in the overlapping region. Our goal is simply maintain a context-aware consistency over the overlapping region in a pixel-to-pixel manner with the proposed contrastive loss.

Thanks for your reply。


Images from other webpages that title

I don't know if it's jellyfin only, but if I play a video from jellyfin, the title appears just fine, but the image is just any random image from another opened webpage, the image is not connected to any media, just a random image....

What adapter/s are you using?

Rainmeter

What adapter/s are you using?

It's kinda hard to know if this is the extensions or the rainmeter plugins fault.
It would be much easier to talk on discord to debug this: keifufu#3431

Closing this as it was most likely caused by a poorly written Rainmeter skin.
Granted, the current version of this extension that is on the webstore doesn't have great support for jellyfin covers, but that has already been improved and will be in the next version.


Enable Anet scraping

Signed-off-by: Weilong Cui<EMAIL_ADDRESS>
What type of PR is this?
backport as requested in https://github.com/kubernetes/perf-tests/pull/1699#issuecomment-773079108

What this PR does / why we need it:
Which issue(s) this PR fixes:

Fixes #
Special notes for your reviewer:
Does this PR introduce a user-facing change?:

Additional documentation e.g., KEPs (Kubernetes Enhancement Proposals), usage docs, etc.:

/ok-to-test
/lgtm
/approve


Fix build error when specify VELOX_PACKAGE_URL in xxx.cmake and Arrow build

Refactor resolve custom url/file path logic when specify VELOX_PACKAGE_URL, sha256 checksum is optional.
Update CMake/resolve_dependency_modules/README.md with specify custom url/file path.
Fix: #4324

Hi @mbasmanova @assignUser @kgpai Could you help take a look?

Specifically, what is "offline build" and what is VELOX_XXX_URL? Where do you see an error and what is that error?

Hi @mbasmanova, sorry for unclearly description.

Would you update PR description to provide some more details about the problem and the fix?

Where do you see an error and what is that error?

I find a problem when use current dependency management, details and reproduce way is posted in issue #4324.

Specifically, what is "offline build" and what is VELOX_XXX_URL?

"offline build" means you can use local tar.gz dependency file to compile, similar to https://arrow.apache.org/docs/developers/cpp/building.html#offline-builds.
Sorry for use "VELOX_XXX_URL", it's actually VELOX_PACKAGE_URL in below https://github.com/facebookincubator/velox/blob/673c2d3731f9b09e00e67757f89657aecec06acc/CMake/resolve_dependency_modules/template.cmake#L16-L24

@Yohahaha Thank you for explaining.
@kgpai Would you help review this PR?

Hi @Yohahaha , Can you please merge from main to fix failing macos build ?

Can you please merge from main to fix failing macos build ?

Hi @kgpai, already merged!

I think it would make sense to refactor the whole URL/checksum setting logic into a function (or use set_with_default)

I use set_with_default refactor this logic, could you help review again? @assignUser

Also add xsimd URL/CHECKSUM logic.

Hi @assignUser @kgpai.
All comments are resolved, PR description is updated.


decide how to handle hidden exceptions

Currently, any exceptions that are not specifically marked as user-facing (by extending the UserFacingError class) are intentionally hidden from GraphQL clients. The assumption is that they might contain sensitive data (like IP addresses) and that GraphQL clients are not guaranteed to be trustworthy (e.g. any public user with a mobile app).
This is, of course, very bad for debugging -- e.g. it is impossible to know why exactly this field failed to resolve: https://github.com/mwildehahn/hack-graphql/blob/main/tests/ErrorTest.hack#L24
This should probably be addressed before people start using the framework, since having non-debuggable errors could be a terrible experience for client developers.
Possible options:

if the initial prototype is only meant to be used by trusted clients, we could simply stop hiding any exceptions for now
if we indeed require exceptions to be hidden, there should be some way for trusted client developers to see them

exceptions can be logged somewhere; when a client developer sees an error they look at recent logs
as an optional extra feature, the returned error in the GraphQL response should contain some identifier that the client developer can use to look up the exact error in the logs (in case there are multiple)

if the initial prototype is only meant to be used by trusted clients, we could simply stop hiding any exceptions for now

I think that's the initial intent. Might make sense to just bubble everything up for now, since it'd aid debugging? I think it'd be as simple as passing a UserFacingError instead of FieldResolverError here: https://github.com/mwildehahn/hack-graphql/blob/main/src/FieldDefinition.hack#L32

WDYT @mwildehahn ?

I think it's ok to stop hiding exceptions while we have this in a "pre-release". We generally try to be as conservative as possible with errors to avoid leaking data but agree we should optimize for debugging in this case

I was working on implementing something on top of this framework yesterday and the hardest bit was getting vague errors about what was going wrong which was usually me just miss typing a field name or not unpacking a value correctly.
I think until we get better request validation it will be useful just to bubble as much detail up.
Maybe we can provide an option to the resolver to not mask errors so we don't take a step back? I could see that being useful in the future.

The hidden errors are stored in the exception instance: https://github.com/mwildehahn/hack-graphql/blob/main/src/UserFacingError.hack#L47
So they are not lost until the very last moment in Resolver before we convert all exceptions to the format required by the GraphQL response. So that might be a good place to put some custom hook that could specify what to do with them (log them, add them to the response, throw them away like we do now...)

Decided to go with the custom hook approach (well, an option passed to the resolver, but similar idea).
Closing this out.


Reconcile ValidatingWebhookConfiguration

Description
Changes proposed in this pull request:

Reconcile ValidatingWebhookConfiguration
Related issue(s)

https://github.com/kyma-project/kyma/issues/16626

/test all

/retest


Show GPS settings only if supported by the device. Cut lan/lon strings.

Todo: Make a determination of support gps, orientation sensor as well as other similar devices in a separate class.

@elagin is this a WIP or can I merge?

Merge, please.

@elagin can you rebase please? This conflicts with #74.

Today I will try to do.


Feat/extended

Add WebSocket support for node adapter and the dev server
Additional changes:

honoOptions is deprecated in favor of app?: Hono<E>;
It offers the same option but makes this library more composable
New option for Node: onServe. It's a callback invoked after the server has started.

Example:
import { createNodeWebSocket } from "@hono/node-ws";
import { Hono } from "hono";
import { WSContext } from "hono/ws";
import { createHonoServer } from "react-router-hono-server/node";

const app = new Hono();
const { injectWebSocket, upgradeWebSocket } = createNodeWebSocket({ app });

// Store connected clients
const clients = new Set<WSContext>();

export default await createHonoServer({
  app,
  onServe(server) {
    injectWebSocket(server);
  },
  configure(app) {
    app.get(
      "/ws",
      upgradeWebSocket(() => ({
        // https://hono.dev/helpers/websocket
        onOpen(_, ws) {
          console.log("New connection ");
          clients.add(ws);
        },
        onMessage(event, ws) {
          console.log(`Message from client: ${event.data}`);
          // Broadcast to all clients except sender
          clients.forEach((client) => {
            if (client.readyState === 1) {
              client.send(`${event.data}`);
            }
          });
        },
        onClose(_, ws) {
          console.log("Connection closed");
          clients.delete(ws);
        },
      }))
    );
  },
});

fix #23


SIFT CLI not installing on Ubuntu 20.04.5

sudo sift install on ubuntu after following the previous steps of the installation gives me a ton of errors. I was installing using sift cli rather than sift vm because for some reason it doesnt work for me (the vm boots up but doesnt let me log in with the username and password, it temporarily logs in, and everything looks weird and then logs back out, this loops)

This was the error i am getting currently. There was another error before but it no longer shows

Hi @christinabrahamalex , the sift-cli is being deprecated in favor of Cast. Please install Cast and use the command:
sudo cast install teamdfir/sift-saltstack

While sift-cli is nearing end of life, it should still work, I'll take a look and see what's up, but I would recommend moving to cast nonetheless.

Looks like it might be the 'v' missing from the release.

Yup, that's what it is .. let me see why that's happening.

Each of the pre-releases since the last full release, and this release, are all missing the v when they were uploaded. Since they were all tested with cast, there wasn't an issue, but the sift-cli is looking for the v.

cast iterates the asset downloads, sift-cli is hard coded :(

@digitalsleuth maybe, I'll look into it this afternoon.

I'm also having this issue.  Does cast support installing on WSL (i.e. –mode=server)?

@aloibeth Yes cast does support the installation of server mode, and shouldn't have any issues within a WSL environment. Your command would simply be: sudo cast install --mode=server teamdfir/sift-saltstack

i've a silly question. how do you install the cast binary? it doesn't appear to be a well-known app. the instructions is cast install <owner/repo|alias> but it doesn't explain how cast should be installed

Hi @transcend3nt , since the cast binary is a debian package, you can download the one which matches your architecture (AMD/ARM etc).
Once you have it downloaded you can run either:
sudo apt-get install -y <full path to the file>
or
sudo dpkg -i <full path to the file>
Then you can run the cast command:
sudo cast install sift
In this context, sift is an alias for the SIFT repo teamdfir/sift-saltstack
Let us know how this works out for you!

@transcend3nt wrong issue maybe? with cast it manages saltstack for you, so did sift-cli, but with cast it uses a single binary so it doesn't actually install salt-stack on the system.
I'll work on adding some additional installation instructions.

Hi @transcend3nt , since the cast binary is a debian package, you can download the one which matches your architecture (AMD/ARM etc).
Once you have it downloaded you can run either: sudo apt-get install -y <full path to the file> or sudo dpkg -i <full path to the file>
Then you can run the cast command: sudo cast install sift
In this context, sift is an alias for the SIFT repo teamdfir/sift-saltstack
Let us know how this works out for you!

Thanks for the quick replies everyone. I'm not familiar with cast, salt and saltstack solutions and I'm trying to avoid having to invest too much time into those as I just want to get sift installed onto an ubuntu 22.04 ec2 instance on aws. Where can I find the binary to download and install manually using the package manager? Thanks a bunch

Hi @transcend3nt , since the cast binary is a debian package, you can download the one which matches your architecture (AMD/ARM etc).
Once you have it downloaded you can run either: sudo apt-get install -y <full path to the file> or sudo dpkg -i <full path to the file>
Then you can run the cast command: sudo cast install sift
In this context, sift is an alias for the SIFT repo teamdfir/sift-saltstack
Let us know how this works out for you!

Thanks both for the quick reply and your hard work, this works well. For readers out there like me who skim through documentation and might miss out on details, the deb file can be found in the 'Release' right-hand side section of cast. I used dpkg to install. It works magically on Ubuntu 22.04 amd x64 on AWS EC2.

Hi @christinabrahamalex , the sift-cli is being deprecated in favor of Cast. Please install Cast and use the command: sudo cast install teamdfir/sift-saltstack

Thanks alot you guys for the quick response and troubleshooting! I got it installed using cast shortly after posting. Works perfect

Hi @transcend3nt , since the cast binary is a debian package, you can download the one which matches your architecture (AMD/ARM etc).
Once you have it downloaded you can run either: sudo apt-get install -y <full path to the file> or sudo dpkg -i <full path to the file>
Then you can run the cast command: sudo cast install sift
In this context, sift is an alias for the SIFT repo teamdfir/sift-saltstack
Let us know how this works out for you!

And where exactly do I find the debian package for CAST?

Hi @forenzyx , you can find the Cast binary here.

Hi @forenzyx , you can find the Cast binary here.

Can you give me the EXACT syntax needed to install Cast on Ubuntu?  I am just not getting it.  Thanks.

Hi @digitalsleuth can you give me the EXACT syntax to install CAST on Ubuntu?  I am just not getting it.  Thanks

Hi @forenzyx , did you manage to get this working?

Hi @digitalsleuth I am installing SIFT with the help of CAST. When I start installation using command "sudo cast install teamdfir/sift-saltstack" after 70 mins of installation it gives the message that " Low Disk Space "Filesystem root" (Screenshot Attached).
And at the time of creating VM (Ubuntu 20.04) I had increased HDD space (Screenshot Attached).

Hi @digitalsleuth, I checked and it is showing Disk Capacity 64.4 GB. Also attached screenshot

Hi @digitalsleuth

Hi @Devops-sudarshan , you can use tools like parted or gparted to resize your partition to use all of the available free space, then try the install again. Unfortunately this isn't a SIFT or Cast issue, however once you resize your partition you should be good to go.

Hi @digitalsleuth Successfully installed SIFT with help of CAST. Thank You so much for your support...


New

Fixes #[issue number that will be closed through this PR] 🔐
Are you a part of GSSOC' 21 ❓

[x] Yes ✔
[ ] No ✖

Describe the changes you've made 🏆
A clear and concise description of what you have done to successfully close your assigned issue. Have you added any new files? Any changes that you think are relevant to be added. Feel free to let us know! 😊

[change 1]
[change 2]

Type of change 🖇
Please delete options that are not relevant.

[ ] Bug fixing (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Code style update (formatting, local variables)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] This change requires a documentation update

Checklist: 📋

[ ] My code follows the style guidelines of this project.
[ ] I have performed a self-review of my own code.
[ ] I have commented my code, particularly in hard-to-understand areas.
[ ] I have made corresponding changes to the documentation.
[ ] My changes generate no new warnings.
[ ] I have added tests that prove my fix is effective or that my feature works.
[ ] New and existing unit tests pass locally with my changes.
[ ] Any dependent changes have been merged and published in downstream modules.

Screenshots (if required) 📷
Add screenshots of the changes you have made.

Original
Updated

original screenshot
updated screenshot

Conflicts resolved plzz check.

This branch has merge conflicts. Kindly resolve them and then make a PR.
Also, link an appropriate issue to the PR.

How to link issue with appropriate PR please help


Further training on an image?

How can I train a classifier on more than one image?
Can I just reference the model that I initially made from running the training script on the first image on the next image?
Will it build on the model or just rewrite it ? Thanks!

The training script will go through all the annotated rectangles all the images in the QuPath project, not just one.
Training is done on all images, and there is no "further training" in that aspect. You should prepare all images first then run the training script. You should see in the log that it is going through all entries in your project


Fix PR title regex?

Description of changes
Summarize the changes made by this PR.

Improvements & Bug fixes

I think this fixes the PR title checker regex

Test plan
How are these changes tested?

[ ] Tests pass locally with pytest for python, yarn test for js

Documentation Changes
Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the docs repository?

Current dependencies on/for this PR:

#1766  👈
main

This stack of pull requests is managed by Graphite.


Link for PackageDeployer zip file is broken.

[Enter feedback here]
Link given to download sample data for PackageDeployer zip file is not working.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: e56ea0df-2e9a-989e-92a8-375ac6b00da4
Version Independent ID: de0efc1d-0813-029f-223b-9a7b4af55b6f
Content: Prerequisites for Connected Field Service for IoT Central
Content Source: ce/field-service/cfs-iot-central-setup.md
Service: dynamics-365-customerservice
GitHub Login: @FieldServiceDave
Microsoft Alias: daclar

Thanks for letting us know! We're currently working on refreshing / improving our CFS documentation, and will be publishing updates soon. In the meantime, we've removed the broken link.


SafeRepresentorAgent transitions are broken

It looks like transitions are trying to be dispatched to a string, which would imply the representor in a SafeRepresentorAgent and a RepresentorAgent is a string and not a representor.  Basically it looks like reframe_representor has a bug.  Repro steps:
bundle exec pry
require 'moya'
require 'farscape'
@pid = Moya.spawn_rails_process!
door = Farscape::Agent.new("http://localhost:3000")
drds = door.enter.drds
drds.safe.transitions #=> NoMethodError
drds.unsafe.transitions # => NoMethodError: undefined method `transitions' for #<String:0x007f86e79e2468>
from /Users/csavage/Desktop/farscape/lib/farscape/representor.rb:25:in `transitions'

https://github.com/mdsol/farscape/pull/30


Fix compatUtils ESLint errors

Also update package-locks

are there more changes needed in this package, either in general or for this error?  if not, is there a warning suppression that can be removed as well?

/azp run repo-policy-check

/azp run repo-policy-check

/azp where

/azp run repo-policy-check

/azp run Build - client packages


Delete license nr. 2,3,5,8,11,12,15

Those licenses are not needed any longer, since we do not have and do not intend to have content with that license in the future.
(I also saw that I have the possibility to delete licenses in the backend. So in case this is sufficient, I could also to it).

IMHO:

Re-check via database if the license is really safe to delete.
Add migration that removes those

IMHO:

Re-check via database if the license is really safe to delete.
Add migration that removes those

Will be done in https://github.com/serlo/api.serlo.org/issues/601...


Some non brushed elements get increased although they shouldn't

When brushing items quickly, some items will not be selected. However, their height is still increased. The highlight and the height change should be consistent.

We can fix this after the deadline though.

@mstreit  @NMO13 I think you mention Martin is going to work on this?

Fixed by removing fish-eye.


Use a linter to ban certain Python imports

@lunixbochs thinks that for security reasons we should lint for/ban certain Python imports. From slack:

I submit this list (and any imports under them, e.g. both http and http.server should be blocked, or from http import server etc):

aiohttp
asynchat
asyncio
asyncore
cffi
ctypes
ftplib
http
idlelib
mailbox
multiprocessing
nntplib
pip
poplib
requests
smtplib
socket
socketserver
ssl
telnetlib
threading
urllib.request
urllib3

I haven't done this in python before, but import-linter doesn't seem to be the worst

cc @wenkokke

Using import-linter isn't tenable in the current form of the community repository, because it relies on the repository to be a Python package, i.e., we'd have to add __init__.py files to each directory. There are options for namespace packages, but they'd require us to exhaustively list all files—or at least directories, I'm unsure, haven't gotten that to work—in the package, which is untenable and incredibly error prone.

There's also flake8-tidy-imports, which is also partially implemented by ruff - I think the rule we'd want is there: https://beta.ruff.rs/docs/settings/#flake8-tidy-imports-banned-api
I think it'd also be worth running bandit.


Sort portfolio card in reverse

Hello, I would like to know if it is possible to sort the portfolio card in reverse by date.

Allo, for that you can replace in portfolio.html (line 4) in the _includes folder:
{% for item in site.portfolio %}

by
{% assign sorted = (site.portfolio | sort: 'date') | reverse %}
{% for item in sorted %}

It should look like:

    {% assign sorted = (site.portfolio | sort: 'date') | reverse %}
    {% for item in sorted %}

    {% endfor %}

Let me know if you have an issue

I got it working. Thank you much.


chore(ci) assign unique names to uploaded artifacts

Since v4, the action upload-artifact no longer supports uploading artifacts with non-unique names.

@casimiro Caio, would you mind drafting a PR that takes both @hishamhm's work in #486 and the bits from this PR? Basically rebasing this PR atop #486. I think name: release-artifacts-${[ github.job }} is a good template for all these artifacts names (combining both of your ideas). This PR also has the unit/valgrind uploads fixed and some other version bumps. Let's combine it all and enable the release job temporarily in release.yml to test it.


Issue with JA client

Hi,
First of all, thanks for making this addon!
I'm playing on Retail, with JA client. It's the JA Playonline Viewer if that makes any difference but obviously I'm launching through Ashita v4 so have the language set there too.
All I've done so far is bind a few abilities/items/ws from my level 5 THF (I'm a new/very old returning player) to a few buttons.

Ability names all appear with ???? in the binding GUI (I'm taking a guess maybe this is due to missing ja font? Anyway to do fix that?).
If I try to edit this binding, specifically delete the text inside the Macro text box, the client crashes when I get to near deleting all the text. I think a clue to the problem here is, if you look in my screenshot, it's missing the second quote for the /ja "...". So some kind of encoding issue perhaps?
In the square overlay where you can see the icons in the grid, the names are all mangled.
[EDIT: This is working as long as you don't try to edit the mangled text in the IMGUI bindings UI] In the overlay, the ability icons are all ?. My guess is, there is no map for the japanese names to IDs? (Is there anywhere I can edit this?) This is probably a nice to have.

Incase it makes a difference, items show the correct icon in the overlay, but the names are mangled. They show as all ??? in the binding GUI. Text commands show fine

Ah sorry, one last thing I noticed when investigating this.
If I open my bindings.lua (so in this case THF.lua) as UTF-8 (default) I see this:

Re-opening the file as Shift JIS I correctly see the japanese as it should be:

As you've surmised, this is likely due to incompatibilities between encodings and missing fonts.  I am not responsible for the IMGUI implementation in Ashita, so I will need to reach out to ask about specifics.  It is likely that the display issues can be resolved, but I am less sure on support for japanese input in IMGUI, that would depend on the engine and is outside the scope of this addon.
I've noted the issue and will update as time allows.

Heya. I found out how to fix the Japanese text rendering issues in tRenderer.
**#include <locale.h>**

void AbilitySquare::CreatePath(Gdiplus::GraphicsPath** ppGraphicsPath, GdiplusFontObject_t Font, const char* text)
{
    SAFE_DELETE(*ppGraphicsPath);

    if ((text == nullptr) || (strlen(text) == 0))
        return;

    **setlocale(LC_ALL, "");**

    wchar_t textBuffer[1024];
    swprintf_s(textBuffer, 1024, L"%S", text);
    *ppGraphicsPath = new Gdiplus::GraphicsPath();
    (*ppGraphicsPath)->AddString(textBuffer, wcslen(textBuffer), Font.FontFamily, Font.FontStyle, Font.FontHeight, Font.Rect, Font.FontFormat);
}

In the end I only had to add setlocale(LC_ALL, "");

With that change it's displaying english and Japanese text correctly in the Ability Squares.

IMGUI is obviously still a separate issue like you said.

Also in my original report 4 is no longer a problem. My guess is trying to edit the bindings in IMGUI causes the config to break, but if I simply create the binding without editing any of the text fields, the correct icon shows.

This is using Noto Sans JP font configured in the Layout.

2.00 converts all resource calls from Shift-JIS to UTF-8, calls set_locale(LC_ALL) in the renderer, and converts text back from UTF-8 to shift-JIS prior when executing macros.  This should provide full japanese language compatibility, and has been tested with the next (unreleased) version of Ashita for compatibility with IMGUI as well.  I expect some existing macros that have been written in shift-JIS may need to be altered to continue to work correctly.  This can be used with the current version of ashita, it just won't correctly show in IMGUI until the update.
I'm closing this for now, but if any new issues arise after the ashita update goes live, please open a new issue.

I really appreciate this, thank you!
I'll hold off on trying the new version until 4.16 is out to the public. Looking forward to it :)


sockjs-client definitions

There is sockjs.d.ts in DefinitelyTyped repo, but it hasn't tests and now client part of sockjs library has 1.0.3 version, support modules (CommonJS, AMD) and called "sockjs-client" (in npm and bower). So I create module-based sockjs-client definition.
@vladev @brycekahle review please

sockjs-client/sockjs-client.d.ts
check list

[ ] is collect naming convention?

https://www.npmjs.com/package/sockjs-client
http://bower.io/search/?q=sockjs-client
others?

[ ] has a test file? (sockjs-client/sockjs-client-tests.ts or others)
[ ] pass the Travis-CI test?

@vvakame
There is sockjs-client-tests.ts file and Travis-CI tests passed.

thanks mate!


parameters array is addititive

Re targeted for VS2019 and having an issue that the function params are adding each time instead of going into their own array. For example I'm having
extern "c" function one (param 1.1, param 1.2)
then instead of
extern "c" function two (param 2.1, param 2.2)
I'm getting
extern "c" function two (param 1.1, param 1.2, param 2.1, param 2.2)
seems like a problem in intercepts.cpp referencing a global parameters instead of the function.paramaters, but I'm not quite following what it's supposed to be.

Moved the variable declarations into the loops and it works.


More Python 3 compatibility fixes.

With these changes it is possible to boot up CodeChecker server in a Python 3 environment.
Unfortunately, viewing or storing the results are still not functional, something is going on with Thrift.

Just to clear this up, while this was labelled as WIP, I do not plan to continue working on this PR.

No longer relevant.


As of macOS15 + Xcode 16 I get "Library not loaded: /System/Library/Frameworks/SwiftUICore.framework/SwiftUICore" from this package

Not sure if it's your fault or mine but I just noticed this was the package the reference comes from. Super stuck at the moment so any ideas would be great.

@itsthisjustin
This error usually occurs when a library or framework has not been added to "Frameworks, Libraries, and Embedded Content" inside the "General" tab in your project's target and to "Link Binary With Libraries" inside the "Build Phases" tab.
Has the SimpleToast library been added in both places?

To be clear, this issue is ONLY on xcode 16 and ONLY on macOS 14 and iOS 17 when build from xcode 16.

I can test this tomorrow on a macOS 14 device. However, it sounds more like an issue with Xcode, as it seems to be losing the reference to the library. Are you opening the same project file in different versions of Xcode? I’ve encountered various problems in the past by doing that.

Opening the project on Xcode 15 works fine. Opening it on Xcode 16 does not. Both on macOS14 and macOS15. Removing your library fixes the issue unfortunately (fortunately?)

I tried several combinations but, unfortunately, I cannot reproduce your issue. I still suspect that your Xcode might be causing the problem. Perhaps removing and re-adding the package could help. For me, any combination of macOS and Xcode works.

Downgrading to version 0.8.0 on swift package manager temporarily will resolve the problem

The changes between versions 0.8.0 and 0.9.0 mainly focus on the drag gesture. 🤔
@gferrara8596 @itsthisjustin do you use the library via SPM or CocoaPods?

Before yesterday with cocoapods but now with spm
Il giorno lun 23 set 2024 alle ore 22:34 Martin Albrecht <
@.***> ha scritto:

The changes between versions 0.8.0 and 0.9.0 mainly focus on the drag
gesture. 🤔
@gferrara8596 https://github.com/gferrara8596 @itsthisjustin
https://github.com/itsthisjustin do you use the library via SPM or
CocoaPods?
—
Reply to this email directly, view it on GitHub
https://github.com/sanzaru/SimpleToast/issues/40#issuecomment-2369326314,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ANXV7RIJSKUI6XPNQAPVQ23ZYB3NXAVCNFSM6AAAAABOO73FN2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGNRZGMZDMMZRGQ
.
You are receiving this because you were mentioned.Message ID:
@.***>


(FACT-3053) Change license from MIT to Apache 2.0

Puppet is licensed as Apache 2.0.
This PR updates the license of Facter to be on par with Puppet

Should also change https://github.com/puppetlabs/facter/blob/main/facter.gemspec#L15 and https://github.com/puppetlabs/facter/blob/main/agent/facter-ng.gemspec#L15

might be good to also add it to project_data: https://github.com/puppetlabs/facter/blob/main/ext/project_data.yaml


Adding Global Util class for exposing portions of the Custom Setting

Critical Changes
Changes

Adding the UTIL_CustomSettings_API class to expose portions of the Custom Setting Facade to other packages.

Issues Closed
New Metadata

UTIL_CustomSettings_API.cls

Deleted Metadata
Testing Notes

Call the following functions in UTIL_CustomSettings_API using the Developer console and ensure that they work correctly:

getSettings()
getOrgSettings()
getSettingsForTests(Hierarchy_Settings__c mySettings)

Hi @lparrott Looks good. Do you mind add the Github issue and link to the issue closed here?

@weizsforg Good to hear! I just created and attached the issue.

Things look good. Merging PR.


Added Mouse_OVER & MOUSE_OUT support to HMTL5

Added Mouse_OVER & MOUSE_OUT support to HMTL5 target by tracking the hit tested object.

Added, thank you! :smile:


Improve server.LoadConfig function

Cann't use the new created config in server.LoadConfig When arg v is nil
fix #1483
Signed-off-by: yanxuean<EMAIL_ADDRESS>

Codecov Report

Merging #1484 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master    #1484   +/-   ##
=======================================
  Coverage   40.82%   40.82%
=======================================
  Files          23       23
  Lines        2920     2920
=======================================
  Hits         1192     1192
  Misses       1451     1451
  Partials      277      277

Continue to review full report at Codecov.

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

LGTM


Fixed bug with doc deployment

Coverage remained the same at 91.718% when pulling 466dc80b0c89d56ff1678e77f7e7d5d27e540558 on fix-docs-deploy into 2c675ec5121c9409780e7677f0bab813da03e134 on master.


Templates do not include the major version prefix

To put people on the right path and avoid breaking changes, templates should reference a major version of the image.  e.g. base:0-bullseye not base:bullseye,
This was automated in vscode-dev-containers but is not here.

It was intentionally changed to use base:bullseye instead of base:0-bullseye with the assumption that we've never done a breaking change within a distro.
This is something recently discussed with @jkeech & the change was made to avoid complicating the templates.

This is one example. Python is the same right now as is Node, but dotnet, Go, C++, Anaconda, and others have 0- prefixes. I think we want to encourage people to not use any form of "latest" here. It also hints that version specific versions are available.  What is the criteria for when we would include the prefix and when we would not?

What is the criteria for when we would include the prefix and when we would not?

I don't think we have a formalized criteria yet 🤔
last month, this PR unpinned the major versions for base images so that each time a new major version is released, we don't have to update the Templates (eg. we needed to update with new base-ubuntu version). We discussed it was safe to do so for base images, as we never have/had breaking changes within a distro.
For other language images, like Python, Go, dotnet etc, I think we should have major versions (ie 0- prefix) as it is more likely to have breaking changes. I can scan and fix if this isn't happening right now and if that's what we agree upon.

Yeah that seems reasonable. 👍


Request parameters not working

Hi, thanks for providing the client!
I'm facing a problem using the request parameters page and itemsPerPage and thought you might have an idea why it's not working properly.
I'm using a simple $client->get() call with $path = "/rest/orders"; to fetch the latest orders. The result is a paginated response with 50 entries per page, just as described in the developer's guide. According to the plentymarkets forum, it should be possible to increase the number by specifying the itemsPerPage parameter. However, if I add the parameter to the $path variable like this:
$path = "/rest/orders?itemsPerPage=200";
the response doesn't change at all. Using the page parameter to get anything but the first page doesn't work for me either. I also tried to use a number <50 which also doesn't work. Any idea why this does not work? Am I missing something? Thanks for your help!

you shouldn't add the parameters to the path, instead put them in the $parameterArray as specified in the readme.

Please use $client->get($path, $parameterArray); with $parameterArray like so:
$parameterArray = [
    "itemsPerPage" => "20"
];


[KeyMove] Control_L+hjkl to Left/Down/Up/Right

Is there any way to use Control_L+hjkl to Left/Down/Up/Right to move cursor?
If it's not possible with Karabiner-Elements yet, do you know any alternatives to achieve the above?

See #16 :)

Thanks for the reply!
Now I know it's not supported yet because it's limited to swapping two keys for now.
I've just donated for this awesome app :)
Do you know any alternatives to achieve this?

@RyoIkarashi I'm eagerly awaiting the same functionality, it's hardcoded into the way I type and navigate now... I've found a temporary solution by using Keyboard Maestro (they have a trial, although its length seems to be unspecified) with the following macros set up:

Of note: Make sure that the hotkey is set for "is down" and not "is pressed" if you want key-repeat to function normally.
Actually, here's a gist of the xml. You can just download the raw.

Thanks for the quick reply @seangaffney and an awesome workaround!
Here is exactly what I want! 😄

Ha, yeah, I guess that's one of the benefits of actually remapping (what Karabiner does) vs. macros like Keyboard Maestro. I use vim for editing, so highlighting in this way isn't a big of a deal for me. 😄

Thanks for this idea @seangaffney ! I needed what @RyoIkarashi needed, so I just hashed it out further (though I use Diamond Keys instead of Vim keys). I've got my macros up in this gist and I'll try to keep it up to date with any bugs I come across in my uses. My keyboard muscle memory is ruined without this!!

@EvanLovely Nice!

My keyboard muscle memory is ruined without this!!

Haha, same.

Thanks for your great ideas @EvanLovely !
I also came up with the same solution and made a gist which may be the same with @EvanLovely 's one :)

Do you guys know a way to distinguish between the left and the right CMD keys in the trigger?

I'm also missing this functionality, but for know, I reimplemented the functionality temporally (I hope) in Hammerspoon
local function keyCode(key)
  return function() hs.eventtap.keyStroke({}, key) end
end

hs.hotkey.bind({"cmd", "alt"}, 'h', keyCode('left') ,  nil,   keyCode('left'))
hs.hotkey.bind({"cmd", "alt"}, 'j', keyCode('down') ,  nil,   keyCode('down') )
hs.hotkey.bind({"cmd", "alt"}, 'k', keyCode('up')   ,  nil,   keyCode('up') )
hs.hotkey.bind({"cmd", "alt"}, 'l', keyCode('right'),  nil,   keyCode('right') )

I also just donated for this feature. I've been using Karabiner for years to turn JKIL into arrow keys when semicolon is held down, and I find computers practically unusable when they don't have this setup.

I've hard-coded the arrows as fn+hjkl here: https://github.com/watsoncj/Karabiner-Elements/commit/5531032a309fe99e7e153cb725b9f44a19da69c0
Not quite the same, but you can probably tweak it to match your preferences.
cc: @greneholt @cicloid @ryolkarashi @seangaffney @mariuslucamarius @evanlovely @ebzlo

@cicloid @kkamdooong: Thanks for your suggestions about hammerspoon, I tried it, but key repeat is super slow (compared with just holding arrow keys), do you have the same problem?

@raulchen
release note on hammerspoon v0.9.49
Changed: hs.eventtap.keyStroke() and .keyStrokes() now wait 200ms between the keydown and keyup events, to improve reliability

One of Hammerspoon team member comment this issue https://github.com/Hammerspoon/hammerspoon/issues/1011#issuecomment-261114434
So I edited my code this way

@kkamdooong thanks, it works great

Thank you, @watsoncj! The solution you shared worked like a charm. Made your code changes and built manually.
Also tried Hammerspoon first like @kkamdooong and @raulchen but noticed that the key repeat would often suddenly halt after holding the key down for a couple seconds.

hard-coded the arrows as ctrl+hjkl here:
ctrl-hjkl-arrows

You can use ⌘英かな for it and for other simple multikey remaps.

I also made a quick branch implementing left_option+hjkl
opt-hjkl-arrows


missing binaries

In the releases are only a *.apk as binary.
But I want a system in QEmu, VMWare, VirtualBox or Android Studio which runs from Zircon over Garnet and Peridot until Topaz the complete system.
For example the Android Emulator in Android Studio bundled with the Fuchsia System, which existing as binary for MS-Windows.
Or other easy ways to try the complete system out.

This is coming soon, right now this is not necessarily possible with how
boot devices must be made.
On Mon, Jul 1, 2019, 6:28 AM theuserbl<EMAIL_ADDRESS>wrote:

In the releases are only a *.apk as binary.
But I want a system in QEmu, VMWare, VirtualBox or Android Studio which
runs from Zircon over Garnet and Peridot until Topaz the complete system.
For example the Android Emulator in Android Studio bundled with the
Fuchsia System, which existing as binary for MS-Windows.
Or other easy ways to try the complete system out.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/dahlia-os/pangolin-desktop/issues/16?email_source=notifications&email_token=AEOTEHB2WR3JCGFJHU2HC7LP5HL5HA5CNFSM4H4Q65PKYY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4G4TISJA,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AEOTEHCBOSILTXWJWNXEDJTP5HL5HANCNFSM4H4Q65PA
.

HTTP://GITHUB.COM/DAHLIA-OS/PRICKLE-EMULATOR

Prickle emulator is like a virtualbox for fuchsia...


ALT-click the icon in the tree for advanced settings. =)

Currently, there is no way to directly access a page's adv. settings from the tree. With this PR, now there is. SHIFT ALT-click the settings icon.

Coverage remained the same at 94.444% when pulling f1c9dc8dbcc745ebd2fac11694e4f58dd1452626 on mkoistinen:advanced_settings into d3be77af52283d3340d51fa46b5ffd8b737a4499 on divio:develop.

Coverage remained the same at 94.444% when pulling f1c9dc8dbcc745ebd2fac11694e4f58dd1452626 on mkoistinen:advanced_settings into d3be77af52283d3340d51fa46b5ffd8b737a4499 on divio:develop.

Coverage remained the same at 94.444% when pulling 36f41a33b140ab4fff7e7196140cad91e53dcb6e on mkoistinen:advanced_settings into d3be77af52283d3340d51fa46b5ffd8b737a4499 on divio:develop.

Coverage remained the same at 94.444% when pulling f1c9dc8dbcc745ebd2fac11694e4f58dd1452626 on mkoistinen:advanced_settings into d3be77af52283d3340d51fa46b5ffd8b737a4499 on divio:develop.

Coverage remained the same at 94.444% when pulling 36f41a33b140ab4fff7e7196140cad91e53dcb6e on mkoistinen:advanced_settings into d3be77af52283d3340d51fa46b5ffd8b737a4499 on divio:develop.

Coverage remained the same at 94.444% when pulling 36f41a33b140ab4fff7e7196140cad91e53dcb6e on mkoistinen:advanced_settings into d3be77af52283d3340d51fa46b5ffd8b737a4499 on divio:develop.

Coverage remained the same at 94.444% when pulling f1c9dc8dbcc745ebd2fac11694e4f58dd1452626 on mkoistinen:advanced_settings into d3be77af52283d3340d51fa46b5ffd8b737a4499 on divio:develop.

Coverage remained the same at 94.444% when pulling f1c9dc8dbcc745ebd2fac11694e4f58dd1452626 on mkoistinen:advanced_settings into d3be77af52283d3340d51fa46b5ffd8b737a4499 on divio:develop.

Coverage remained the same at 94.444% when pulling 36f41a33b140ab4fff7e7196140cad91e53dcb6e on mkoistinen:advanced_settings into d3be77af52283d3340d51fa46b5ffd8b737a4499 on divio:develop.

Coverage remained the same at 94.444% when pulling 36f41a33b140ab4fff7e7196140cad91e53dcb6e on mkoistinen:advanced_settings into d3be77af52283d3340d51fa46b5ffd8b737a4499 on divio:develop.


Export/Import tabs from file

Hi!
First, thanks for the app 🙏🏼 .
One feature I'd like to propose would be the ability to export and import the list of tabs and playlists from a file (i.e json). In this way, no account would be needed and we could back up and restore easily. In the current state if one switches phone or does a factory reset will lose everything.

Where are the tab files stored in the file structure? It would be great even to be able to make a backup of that folder..

Hey there, this is on the list of things I'd like to add, but since it's a side project for me it does usually take quite a while to add new features.  If you're interested in looking into things, I use the Kotlin Room database to store the data, so that might be a starting point.

Hi all, this feature was added in the latest release. Tap the TabsLite icon on the home screen and then click Export in the TabsLite menu. Thanks for requesting it!


create branch admin-app

Re-organise source #30.
Please review: https://github.com/gsmartsolutions/pet-timesheet/commit/a88a688d52fbc6e46a94342295fa3ddef4003b3f

Please check angular-cli.json , we don't need to use html in template dir. Then make a update on this PR.

why delete the .gitignore in src ? Explain to me tomorrow


"go install gorgonia.org/gorgonia/cmd/cudagen" - could not determine kind of name for C.CU_TARGET_COMPUTE_20

$ go install gorgonia.org/gorgonia/cmd/cudagen
# gorgonia.org/cu
../../golang/pkg/mod/gorgonia.org/cu@v0.9.4/jit.go:138:32: could not determine kind of name for C.CU_TARGET_COMPUTE_20
../../golang/pkg/mod/gorgonia.org/cu@v0.9.4/jit.go:139:32: could not determine kind of name for C.CU_TARGET_COMPUTE_21

cuda, cuda-tools 12.3.2-1
manjaro

And cuda 12.3.2
typedef struct CUDA_KERNEL_NODE_PARAMS_v2_st {
    CUfunction func;             /**< Kernel to launch */
    unsigned int gridDimX;       /**< Width of grid in blocks */
    unsigned int gridDimY;       /**< Height of grid in blocks */
    unsigned int gridDimZ;       /**< Depth of grid in blocks */
    unsigned int blockDimX;      /**< X dimension of each thread block */
    unsigned int blockDimY;      /**< Y dimension of each thread block */
    unsigned int blockDimZ;      /**< Z dimension of each thread block */
    unsigned int sharedMemBytes; /**< Dynamic shared-memory size per thread block in bytes */
    void **kernelParams;         /**< Array of pointers to kernel parameters */
    void **extra;                /**< Extra options */
    CUkernel kern;               /**< Kernel to launch, will only be referenced if func is NULL */
    CUcontext ctx;               /**< Context for the kernel task to run in. The value NULL will indicate the current context should be used by the api. This field is ignored if func is set. */
} CUDA_KERNEL_NODE_PARAMS_v2;

caused by this issue: https://github.com/gorgonia/cu/issues/66


pusher-fake specs not able get the triggers sent from a delayed_job

I have job running in background which triggers the pusher events to the home page of the application to show the status of the process.
When testing the process using rspec and pusher-fake, I see that the triggers are working for test which are directly coming from normal methods. But the triggers coming from job are not handled by the pusher-fake.
I exactly followed the way pusher-fake example's spes are written.
Let me know how this problem can be resolved.

I'm guessing the socket and web ports might be different for the job if it's in a separate process. By default it automatically assigns available ports, so you should try manually configuring them and ensuring they are set correctly for the job process as well.

Closing this out. Feel free to reopen if ensuring the ports are the same didn't help.

I have the same problem in development. When I'm trying to use it with Delayed jobs or Rails console, they all have different ports and they cannot communicate each other.

@jpalumickas Have you tried assigning specific ports via configuration instead of allowing the automatic assignment?

sure, but then I'm having an error about : port already is using

@jpalumickas You'll only want to run the fake once, similar to the Foreman case mentioned in the README. And you'll have to assign the custom port to Pusher manually.

Ah, I see now, thanks. But what about making a command to run a stand alone server then ?
pusher: bundle exec pusher-fake --port 12345

What do you think ?


Research: demonstrate if parallel SQL queries are worthwhile

I added parallel SQL query execution here:

https://github.com/simonw/datasette/issues/1723

My hunch is that this will take advantage of multiple cores, since Python's sqlite3 module releases the GIL once a query is passed to SQLite.
I'd really like to prove this is the case though. Just not sure how to do it!
Larger question: is this performance optimization actually improving performance at all? Under what circumstances is it worthwhile?

Wrote more about that here: https://simonwillison.net/2022/Apr/27/parallel-queries/
Compare https://latest-with-plugins.datasette.io/github/commits?_facet=repo&_facet=committer&_trace=1

With the same thing but with parallel execution disabled:
https://latest-with-plugins.datasette.io/github/commits?_facet=repo&_facet=committer&_trace=1&_noparallel=1

Those total page load time numbers are very similar. Is this parallel optimization worthwhile?
Maybe it's only worth it on larger databases? Or maybe larger databases perform worse with this?

I just remembered the --setting num_sql_threads option... which defaults to 3! https://github.com/simonw/datasette/blob/942411ef946e9a34a2094944d3423cddad27efd3/datasette/app.py#L109-L113
Would explain why the first trace never seems to show more than three SQL queries executing at once.

One weird thing: I noticed that in the parallel trace above the SQL query bars are wider. Mousover shows duration in ms, and I got 13ms for this query:
select message as value, count(*) as n from (

But in the ?_noparallel=1 version that some query took 2.97ms.
Given those numbers though I would expect the overall page time to be MUCH worse for the parallel version - but the page load times are instead very close to each other, with parallel often winning.
This is super-weird.

Relevant: here's the code that sets up a Datasette SQLite connection: https://github.com/simonw/datasette/blob/7a6654a253dee243518dc542ce4c06dbb0d0801d/datasette/database.py#L73-L96
It's using check_same_thread=False - here's the Python docs on that:

By default, check_same_thread is True and only the creating thread may use the connection. If set False, the returned connection may be shared across multiple threads. When using multiple threads with the same connection writing operations should be serialized by the user to avoid data corruption.

I think I need some much more in-depth tracing tricks for this.
https://www.maartenbreddels.com/perf/jupyter/python/tracing/gil/2021/01/14/Tracing-the-Python-GIL.html looks relevant - uses the perf tool on Linux.

Also useful: https://avi.im/blag/2021/fast-sqlite-inserts/ - from a tip on Twitter: https://twitter.com/ricardoanderegg/status/1519402047556235264

Something worth digging into: are these parallel queries running against the same SQLite connection or are they each rubbing against a separate SQLite connection?
Just realized I know the answer: they're running against separate SQLite connections, because that's how the time limit mechanism works: it installs a progress handler for each connection which terminates it after a set time.
This means that if SQLite benefits from multiple threads using the same connection (due to shared caches or similar) then Datasette will not be seeing those benefits.
It also means that if there's some mechanism within SQLite that penalizes you for having multiple parallel connections to a single file (just guessing here, maybe there's some kind of locking going on?) then Datasette will suffer those penalties.
I should try seeing what happens with WAL mode enabled.

You don't want to re-use an SQLite connection from multiple threads anyway: https://www.sqlite.org/threadsafe.html
Multiple connections can operate on the file in parallel, but a single connection can't:

Multi-thread. In this mode, SQLite can be safely used by multiple threads provided that no single database connection is used simultaneously in two or more threads.

(emphasis mine)

I should try seeing what happens with WAL mode enabled.

I've only skimmed above but it looks like you're doing mainly read-only queries?  WAL mode is about better interactions between writers & readers, primarily.

Yeah all of this is pretty much assuming read-only connections. Datasette has a separate mechanism for ensuring that writes are executed one at a time against a dedicated connection from an in-memory queue:

https://github.com/simonw/datasette/issues/682

WAL mode didn't seem to make a difference. I thought there was a chance it might help multiple read connections operate at the same time but it looks like it really does only matter for when writes are going on.

This looks VERY relevant: SQLite Shared-Cache Mode:

SQLite includes a special "shared-cache" mode (disabled by default) intended for use in embedded servers. If shared-cache mode is enabled and a thread establishes multiple connections to the same database, the connections share a single data and schema cache. This can significantly reduce the quantity of memory and IO required by the system.

Tried that and it didn't seem to make a difference either.
I really need a much deeper view of what's going on here.

Another avenue: https://twitter.com/weargoggles/status/1519426289920270337

SQLite has its own mutexes to provide thread safety, which as another poster noted are out of play in multi process setups. Perhaps downgrading from the “serializable” to “multi-threaded” safety would be okay for Datasette? https://sqlite.org/c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread

Doesn't look like there's an obvious way to access that from Python via the sqlite3 module though.

Really wild idea: what if I created three copies of the SQLite database file - as thee separate file names - and then balanced the parallel queries across all these? Any chance that could avoid any mysterious locking issues?

I wonder if it would be worth exploring multiprocessing here.

I should check my timing mechanism. Am I capturing the time taken just in SQLite or does it include time spent in Python crossing between async and threaded world and waiting for a thread pool worker to become available?
That could explain the longer query times.

Here's where read queries are instrumented: https://github.com/simonw/datasette/blob/7a6654a253dee243518dc542ce4c06dbb0d0801d/datasette/database.py#L241-L242
So the instrumentation is actually capturing quite a bit of Python activity before it gets to SQLite:
https://github.com/simonw/datasette/blob/7a6654a253dee243518dc542ce4c06dbb0d0801d/datasette/database.py#L179-L190
And then:
https://github.com/simonw/datasette/blob/7a6654a253dee243518dc542ce4c06dbb0d0801d/datasette/database.py#L204-L233

Though it would be interesting to also have the trace reveal how much time is spent in the functions that wrap that core SQL - the stuff that is being measured at the moment.
I have a hunch that this could help solve the over-arching performance mystery.

Tried this but I'm getting back an empty JSON array of traces at the bottom of the page most of the time (intermittently it works correctly):
diff --git a/datasette/database.py b/datasette/database.py
index ba594a8..d7f9172 100644
--- a/datasette/database.py
+++ b/datasette/database.py
@@ -7,7 +7,7 @@ import sys
 import threading
 import uuid

-from .tracer import trace
+from .tracer import trace, trace_child_tasks
 from .utils import (
     detect_fts,
     detect_primary_keys,
@@ -207,30 +207,31 @@ class Database:
                 time_limit_ms = custom_time_limit

             with sqlite_timelimit(conn, time_limit_ms):
-                try:
-                    cursor = conn.cursor()
-                    cursor.execute(sql, params if params is not None else {})
-                    max_returned_rows = self.ds.max_returned_rows
-                    if max_returned_rows == page_size:
-                        max_returned_rows += 1
-                    if max_returned_rows and truncate:
-                        rows = cursor.fetchmany(max_returned_rows + 1)
-                        truncated = len(rows) > max_returned_rows
-                        rows = rows[:max_returned_rows]
-                    else:
-                        rows = cursor.fetchall()
-                        truncated = False
-                except (sqlite3.OperationalError, sqlite3.DatabaseError) as e:
-                    if e.args == ("interrupted",):
-                        raise QueryInterrupted(e, sql, params)
-                    if log_sql_errors:
-                        sys.stderr.write(
-                            "ERROR: conn={}, sql = {}, params = {}: {}\n".format(
-                                conn, repr(sql), params, e
+                with trace("sql", database=self.name, sql=sql.strip(), params=params):
+                    try:
+                        cursor = conn.cursor()
+                        cursor.execute(sql, params if params is not None else {})
+                        max_returned_rows = self.ds.max_returned_rows
+                        if max_returned_rows == page_size:
+                            max_returned_rows += 1
+                        if max_returned_rows and truncate:
+                            rows = cursor.fetchmany(max_returned_rows + 1)
+                            truncated = len(rows) > max_returned_rows
+                            rows = rows[:max_returned_rows]
+                        else:
+                            rows = cursor.fetchall()
+                            truncated = False
+                    except (sqlite3.OperationalError, sqlite3.DatabaseError) as e:
+                        if e.args == ("interrupted",):
+                            raise QueryInterrupted(e, sql, params)
+                        if log_sql_errors:
+                            sys.stderr.write(
+                                "ERROR: conn={}, sql = {}, params = {}: {}\n".format(
+                                    conn, repr(sql), params, e
+                                )
                             )
-                        )
-                        sys.stderr.flush()
-                    raise
+                            sys.stderr.flush()
+                        raise

             if truncate:
                 return Results(rows, truncated, cursor.description)
@@ -238,9 +239,8 @@ class Database:
             else:
                 return Results(rows, False, cursor.description)

-        with trace("sql", database=self.name, sql=sql.strip(), params=params):
-            results = await self.execute_fn(sql_operation_in_thread)
-        return results
+        with trace_child_tasks():
+            return await self.execute_fn(sql_operation_in_thread)

     @property
     def size(self):

Asked on the SQLite forum about this here: https://sqlite.org/forum/forumpost/ffbfa9f38e

I could try py-spy top, which I previously used here:

https://github.com/simonw/datasette/issues/1673

Maybe this is the Python GIL after all?
I've been hoping that the GIL won't be an issue because the sqlite3 module releases the GIL for the duration of the execution of a SQL query - see https://github.com/python/cpython/blob/f348154c8f8a9c254503306c59d6779d4d09b3a9/Modules/_sqlite/cursor.c#L749-L759
So I've been hoping this means that SQLite code itself can run concurrently on multiple cores even when Python threads cannot.
But maybe I'm misunderstanding how that works?

I ran py-spy and then hammered refresh a bunch of times on the http://<IP_ADDRESS>:8856/github/commits?_facet=repo&_facet=committer&_trace=1&_noparallel= page - it generated this SVG profile for me:

Interactive version here: https://static.simonwillison.net/static/2022/datasette-parallel-profile.svg

Useful theory from Keith Medcalf https://sqlite.org/forum/forumpost/e363c69d3441172e

This is true, but the concurrency is limited to the execution which occurs with the GIL released (that is, in the native C sqlite3 library itself). Each row (for example) can be retrieved in parallel but "constructing the python return objects for each row" will be serialized (by the GIL).
That is to say that if your have two python threads each with their own connection, and each one is performing a select that returns 1,000,000 rows (lets say that is 25% of the candidates for each select) then the difference in execution time between executing two python threads in parallel vs a single serial thead will not be much different (if even detectable at all). In fact it is possible that the multiple-threaded version takes longer to run both queries to completion because of the increased contention over a shared resource (the GIL).

So maybe this is a GIL thing.
I should test with some expensive SQL queries (maybe big aggregations against large tables) and see if I can spot an improvement there.

I could experiment with the await asyncio.run_in_executir(processpool_exdcutir, fn) described in https://stackoverflow.com/a/29147750

The two most promising theories at the moment, from here and Twitter and the SQLite forum, are:

SQLite is I/O bound - it generally only goes as fast as it can load data from disk. Multiple connections all competing for the same file on disk are going to end up blocked at the file system layer. But maybe this means in-memory databases will perform better?
It's the GIL. The sqlite3 C code may release the GIL, but the bits that do things like assembling Row objects to return still happen in Python, and that Python can only run on a single core.

A couple of ways to research the in-memory theory:

Use a RAM disk on macOS (or Linux). https://stackoverflow.com/a/2033417/6083 has instructions - short version:
hdiutil attach -nomount ram://$((2 * 1024 * 100))
diskutil eraseVolume HFS+ RAMDisk name-returned-by-previous-command (was `/dev/disk2` when I tried it)
cd /Volumes/RAMDisk
cp ~/fixtures.db .

Copy Datasette databases into an in-memory database on startup. I built a new plugin to do that here: https://github.com/simonw/datasette-copy-to-memory

I need to do some more, better benchmarks using these different approaches. https://twitter.com/laurencerowe/status/1519780174560169987 also suggests:

Maybe try:

Copy the sqlite file to /dev/shm and rerun (all in ram.)
Create a CTE which calculates Fibonacci or similar so you can test something completely cpu bound (only return max value or something to avoid crossing between sqlite/Python.)

I like that second idea a lot - I could use the mandelbrot example from https://www.sqlite.org/lang_with.html#outlandish_recursive_query_examples

Here's a very useful (recent) article about how the GIL works and how to think about it: https://pythonspeed.com/articles/python-gil/ - via https://lobste.rs/s/9hj80j/when_python_can_t_thread_deep_dive_into_gil
From that article:

For example, let's consider an extension module written in C or Rust that lets you talk to a PostgreSQL database server.
Conceptually, handling a SQL query with this library will go through three steps:

Deserialize from Python to the internal library representation. Since this will be reading Python objects, it needs to hold the GIL.
Send the query to the database server, and wait for a response. This doesn't need the GIL.
Convert the response into Python objects. This needs the GIL again.

As you can see, how much parallelism you can get depends on how much time is spent in each step. If the bulk of time is spent in step 2, you'll get parallelism there. But if, for example, you run a SELECT and get a large number of rows back, the library will need to create many Python objects, and step 3 will have to hold GIL for a while.

That explains what I'm seeing here. I'm pretty convinced now that the reason I'm not getting a performance boost from parallel queries is that there's more time spent in Python code assembling the results than in SQLite C code executing the query.

It would be really fun to try running this with the in-development nogil Python from https://github.com/colesbury/nogil
There's a Docker container for it: https://hub.docker.com/r/nogil/python
It suggests you can run something like this:
docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp \
  -w /usr/src/myapp nogil/python python your-daemon-or-script.py

OK, I just got the most incredible result with that!
I started up a container running bash like this, from my datasette checkout. I'm mapping port 8005 on my laptop to port 8001 inside the container because laptop port 8001 was already doing something else:
docker run -it --rm --name my-running-script -p 8005:8001 -v "$PWD":/usr/src/myapp \
  -w /usr/src/myapp nogil/python bash

Then in bash I ran the following commands to install Datasette and its dependencies:
pip install -e '.[test]'
pip install datasette-pretty-traces # For debug tracing

Then I started Datasette against my github.db database (from github-to-sqlite.dogsheep.net/github.db) like this:
datasette github.db -h <IP_ADDRESS> --setting trace_debug 1

I hit the following two URLs to compare the parallel v.s. not parallel implementations:

http://<IP_ADDRESS>:8005/github/issues?_facet=milestone&_facet=repo&_trace=1&_size=10
http://<IP_ADDRESS>:8005/github/issues?_facet=milestone&_facet=repo&_trace=1&_size=10&_noparallel=1

And... the parallel one beat the non-parallel one decisively, on multiple page refreshes!
Not parallel: 77ms
Parallel: 47ms

So yeah, I'm very confident this is a problem with the GIL. And I am absolutely stunned that @colesbury's fork ran Datasette (which has some reasonably tricky threading and async stuff going on) out of the box!

Something to consider if I look into subprocesses for parallel query execution:
https://sqlite.org/howtocorrupt.html#_carrying_an_open_database_connection_across_a_fork_

Do not open an SQLite database connection, then fork(), then try to use that database connection in the child process. All kinds of locking problems will result and you can easily end up with a corrupt database. SQLite is not designed to support that kind of behavior. Any database connection that is used in a child process must be opened in the child process, not inherited from the parent.

from your analysis, it seems like the GIL is blocking on loading of the data from sqlite to python, (particularly in the fetchmany call)
this is probably a simplistic idea, but what if you had the python code in the execute method iterate over the cursor and yield out rows or small chunks of rows.
something like:
            with sqlite_timelimit(conn, time_limit_ms):
                try:
                    cursor = conn.cursor()
                    cursor.execute(sql, params if params is not None else {})
                    max_returned_rows = self.ds.max_returned_rows
                    if max_returned_rows == page_size:
                        max_returned_rows += 1
                    if max_returned_rows and truncate:
                        for i, row in enumerate(cursor):
                            yield row
                            if i == max_returned_rows - 1:
                                break
                    else:
                        for row in cursor:
                            yield row
                        truncated = False
                except (sqlite3.OperationalError, sqlite3.DatabaseError) as e:
                    if e.args == ("interrupted",):
                        raise QueryInterrupted(e, sql, params)
                    if log_sql_errors:
                        sys.stderr.write(
                            "ERROR: conn={}, sql = {}, params = {}: {}\n".format(
                                conn, repr(sql), params, e
                            )
                        )
                        sys.stderr.flush()

this kind of thing works well with a postgres server side cursor, but i'm not sure if it will hold for sqlite.


error: package android.support.annotation does not exist

I'm using a cloud build service and including cordova-plugin-googlemaps ver 2.7.1 and I'm getting several Androidx related errors.
I'm submitting a ...  (check one with "x")

[ ] question
[X ] any problem or bug report

OS:  (check one with "x")

[X] Android
[ ] iOS
[ ] Browser

cordova information:  (run $> cordova plugin list)
Cordova Packages:
    cli: 10.0.0
        common: 4.0.2
        create: 3.0.0
        lib: 10.0.0
            common: 4.0.2
            fetch: 3.0.0
            serve: 4.0.0

Project Installed Platforms:

    android: 9.0.0

Project Installed Plugins:

    @havesource/cordova-plugin-push: 2.0.0
    call-number1: 1.0.4
    com.peerio.cordova.plugin.carrier: 1.0.1
    cordova-open-native-settings: 1.5.2
    cordova-plugin-compat: 1.2.0
    cordova-plugin-device: 2.0.3
    cordova-plugin-email-composer: 0.9.2
    cordova-plugin-geolocation: 4.0.2
    cordova-plugin-googlemaps: 2.7.1
    cordova-plugin-inappbrowser: 4.0.0
    cordova-plugin-network-information: 2.0.2
    cordova-plugin-splashscreen: 6.0.0
    cordova-plugin-statusbar: 2.4.3
    cordova-plugin-vibration: 3.1.1
    cordova-plugin-whitelist: 1.3.4
    cordova-plugin-wkkeyboardfix: 1.1.0
    cordova-sqlite-storage: 5.0.0
    cordova.plugins.diagnostic: 5.0.2

Environment:
    OS: macOS Catalina 10.15.7 (19H512) (darwin 19.6.0) x64
    Node: v14.15.0
    npm: 6.14.8

Current behavior:
Build fails with the following errors:
symbol:   class EnvironmentCompat
  location: package android.support.v4.os
/platforms/android/app/src/main/java/plugin/google/maps/PluginLocationService.java:12: error: package android.support.annotation does not exist
import android.support.annotation.NonNull;
                                 ^
/platforms/android/app/src/main/java/plugin/google/maps/PluginLocationService.java:13: error: package android.support.v4.content does not exist
import android.support.v4.content.PermissionChecker;
                                 ^
/platforms/android/app/src/main/java/plugin/google/maps/PluginMap.java:19: error: package android.support.annotation does not exist
import android.support.annotation.NonNull;

Expected behavior:
app builds

I'm facing the same issue. Why is this plugin still using the old (and deprecated) android.support library? It should be migrated to AndroidX

I'm pretty sure the multiple_maps branch has AndroidX support.
https://github.com/mapsplugin/cordova-plugin-googlemaps/tree/multiple_maps

I'm facing the same issue too, any solution for this?

Hi @ppetree
Did you find a solution? I'm facing the same issue with Android.
My info project:
Cordova Packages:
cli: 10.0.0
    common: 4.0.2
    create: 3.0.0
    lib: 10.0.0
        common: 4.0.2
        fetch: 3.0.1
        serve: 4.0.0

Project Installed Platforms:

android: 10.0.1

I changed the libraries to AndroidX version
"import android.support.annotation.NonNull" --> "import androidx.annotation.NonNull"
and
"import android.support.v4.content.PermissionChecker" --> "import androidx.core.content.PermissionChecker"
and app builds pretty well, but the map is blank and no errors.
Should this plugin work with Cordova platform 10 ?
I installed in Cordova platform 9 and it's work pretty well.

Try this:
  <platform name="android">
    <preference name="android-minSdkVersion" value="22" />
    <preference name="android-targetSdkVersion" value="29" />
    <preference name="android-installLocation" value="auto" />
    <preference name="android-multiDexEnabled" value="true" />
    <preference name="AndroidXEnabled" value="true" />
    <preference name="JetifierEnabled" value="true" />
  </platform>
  <plugin name="cordova-plugin-androidx-adapter" spec="1.1.3" />
  <plugin name="@havesource/cordova-plugin-push" spec="1.0.0">
    <variable name="SENDER_ID" value="12345678901" />
    <variable name="FCM_VERSION" value="18.+" />
  </plugin>

Thank you for the reply @ppetree, but this change didn't work, no solution yet.

npm i jetifier --save-dev
npx jetify
npx cap sync
solve this error for me
but after that map could'nt load and i got new error:
unhandled Promise rejection: Java exception was raised during method invocation ; Zone: <root> ; Task: Promise.then ; Value: Error: Java exception was raised during method invocation
    at capacitorExec (google-map?lat=35.76880066023837&lng=51.43880367279053&_url=%2Fapp%2Ftabs%2Fplace%2Foffice-management:1790)
    at execProxy (google-map?lat=35.76880066023837&lng=51.43880367279053&_url=%2Fapp%2Ftabs%2Fplace%2Foffice-management:1924)
    at Map.<anonymous> (google-map?lat=35.76880066023837&lng=51.43880367279053&_url=%2Fapp%2Ftabs%2Fplace%2Foffice-management:16126)
    at google-map?lat=35.76880066023837&lng=51.43880367279053&_url=%2Fapp%2Ftabs%2Fplace%2Foffice-management:6377
    at Array.forEach (<anonymous>)
    at Map.trigger (google-map?lat=35.76880066023837&lng=51.43880367279053&_url=%2Fapp%2Ftabs%2Fplace%2Foffice-management:6369)
    at Map.set (google-map?lat=35.76880066023837&lng=51.43880367279053&_url=%2Fapp%2Ftabs%2Fplace%2Foffice-management:6335)
    at google-map?lat=35.76880066023837&lng=51.43880367279053&_url=%2Fapp%2Ftabs%2Fplace%2Foffice-management:15695
    at Array.filter (<anonymous>)
    at CordovaGoogleMaps.putHtmlElements (google-map?lat=35.76880066023837&lng=51.43880367279053&_url=%2Fapp%2Ftabs%2Fplace%2Foffice-management:15675) Error: Java exception was raised during method invocation
    at capacitorExec (http://<IP_ADDRESS>:8100/app/tabs/google-map?lat=35.76880066023837&lng=51.43880367279053&_url=%2Fapp%2Ftabs%2Fplace%2Foffice-management:1790:30)
    at execProxy (http://<IP_ADDRESS>:8100/app/tabs/google-map?lat=35.76880066023837&lng=51.43880367279053&_url=%2Fapp%2Ftabs%2Fplace%2Foffice-management:1924:21)
    at Map.<anonymous> (http://<IP_ADDRESS>:8100/app/tabs/google-map?lat=35.76880066023837&lng=51.43880367279053&_url=%2Fapp%2Ftabs%2Fplace%2Foffice-management:16126:7)
    at http://<IP_ADDRESS>:8100/app/tabs/google-map?lat=35.76880066023837&lng=51.43880367279053&_url=%2Fapp%2Ftabs%2Fplace%2Foffice-management:6377:25
    at Array.forEach (<anonymous>)
    at Map.trigger (http://<IP_ADDRESS>:8100/app/tabs/google-map?lat=35.76880066023837&lng=51.43880367279053&_url=%2Fapp%2Ftabs%2Fplace%2Foffice-management:6369:10)
    at Map.set (http://<IP_ADDRESS>:8100/app/tabs/google-map?lat=35.76880066023837&lng=51.43880367279053&_url=%2Fapp%2Ftabs%2Fplace%2Foffice-management:6335:12)
    at http://<IP_ADDRESS>:8100/app/tabs/google-map?lat=35.76880066023837&lng=51.43880367279053&_url=%2Fapp%2Ftabs%2Fplace%2Foffice-management:15695:11
    at Array.filter (<anonymous>)
    at CordovaGoogleMaps.putHtmlElements (http://<IP_ADDRESS>:8100/app/tabs/google-map?lat=35.76880066023837&lng=51.43880367279053&_url=%2Fapp%2Ftabs%2Fplace%2Foffice-management:15675:33)

so all cordova admob plugins not working

ionic cordova plugin add cordova-plugin-androidx-adapter
This work for me.


Querying simple references for existence

Hey,
I've already sent a mail about this but I figured this is the better way of doing it.
So this is a tiny change about how "simple" references are handled when queried for with exists or notEqual.
Thanks again for the good work. We are using the ODM in our project with success so far.
Nikolas

There is definitely a problem here, but I don't think this is more of a band-aid than a complete solution.
What if you were using $in with a simple reference field? The values might not get mapped at all. I think we need to at least employ the same ID preparation that is used for the identifier field, which conveniently follows the simple reference code.
However, even that seems to have a bug with over-eagerly transforming booleans. For instance, this would fail:
$qb = $this->dm->createQueryBuilder('Documents\User');
$qb->field('id')->exists(true);
$this->assertEquals(array('_id' => array('$exists' => true)), $qb->getQueryArray());

I'll take a look at how the actual references are prepared and compare that with what we do for simple references and identifiers. Using $exists on an identifier field doesn't make sense in practice, so it's easy to see how this bug was overlooked for so long until simple references came along :)

Hmm, I don't think this is related to simple references is it. This is a pre existing issue I think.

@jwage: It's not. See my test snippet above. Identifiers and simple references should really have the same pre-processing. In the current code, they don't. But even for identifiers, which have better pre-processing, there's room for improvement. I think we need to make the routine aware of certain Mongo commands so we can turn strings to MongoId's for stuff like $in, but avoid processing for $exists.
I've never noticed a problem before, but I'd be curious to know if there may be similar gaps for pre-processing on regular reference ID fields (e.g. user.id).

@jmikola I see, ya I process anything that starts with $ so we need to make a black or white list of commands to process.


Consistently name macros

Currently many macros have a G/g as prefix while others don't. We should do this consistently.
Any objections to drop the prefix on all macros?
CC @bilelmoussaoui @GuillaumeGomez

Can you show examples please?

Can you show examples please?

https://gtk-rs.org/gtk-rs-core/git/docs/glib_macros/index.html

I think we should do the following: any attribute/derive macro should start with g and the others shouldn't. The only thing I don't have an opinion on is either we should keep the capital letters or not...
So from the link you provided, only clone shouldn't be prepended.

IMO none of them should have a G at the front

For derive macros we currently have: 1 without a prefix, the rest with one. I think we should drop the prefix from the rest
For macros like clone/gclosure (in the PR), i think the g prefix should be dropped as well; most of the times you will just call glib::clone / glib::closure without having to have it in scope.
For attribute macros, we only have a gflags that has a g prefix; I don't think it makes sense there neither :-)

+1, those prefixes seem like a C artifact.

So that mean the derive will become Boxed or Enum. It's hard to make the name less informative at this point... As for the attributes, flags means literally nothing as well...

So that mean the derive will become Boxed or Enum. It's hard to make the name less informative at this point... As for the attributes, flags means literally nothing as well...

The derive will become glib::Enum, of course if you import use glib::Enum it it is not clear, but the same could be said about a bunch of structs if imported blindly.

So that mean the derive will become Boxed or Enum. It's hard to make the name less informative at this point... As for the attributes, flags means literally nothing as well...

It's a glib::Enum then, which is very closely connected to glib::EnumClass. Same for flags, etc.
glib::Variant would derive the things needed for a... glib::Variant.
Currently then prefix on the macros is odd also because there's no such prefix on the corresponding types.

But in glib it'll be crate::Enum.

Just like it's already crate::EnumClass, etc. But also these derive macros are not even used inside glib apart from re-exporting them, so that's not really a meaningful concern.

We seem to only use them in subclasses and they already use glib::, so I guess it's fine.

That only brings us one problem
269 | #[proc_macro_derive(Enum, attributes(enum))]
    |                                      ^^^^ expected identifier, found keyword

Suggestions for how to solve this? The #[enum] attribute needs a different name.

Maybe it should be member ?

Same as the flags one

Yeah that would even make more sense.

So, enum_member & flag_member

Then there's only the #[enum(type_name = "EnumTypeName")] (and similar for all the other macros). Should that be #[enum_name("EnumTypeName")] instead maybe?
Or maybe we make this #[type_name("Blabla")] and use the same for all the macros? Can really only derive one of those anyway so there's no risk of conflict.
OTOH other derive macros use their macro name also as attribute name and put all the details inside the parenthesis.
For boxed we also have #[boxed(nullable)], FWIW.

#[enum_name("EnumTypeName")]

sounds good to me :) especially that you probably won't have any other attributes to set for that one

Now that makes me happy. Names with meaning! :tada:

After doing the changes I have some doubts:

the flags macro is inconsistent with the rest... does anybody remember why this is not a derive?
given that anyway we are deviating from using the derive macro name for the attributes, I think it would be more consistent to use #[glib_name("MyType")] and #[glib_nullable] for all derive macros that support this attributes. The glib prefix would allow to consistently namespace the attributes.

A #[type_name("X")] could also be used by ObjectSubclass :-)

A #[type_name("X")] could also be used by ObjectSubclass :-)

No because there it's an associated type in a trait :)

the flags macro is inconsistent with the rest... does anybody remember why this is not a derive?

Because you can't generate the bitflags! macro invocation from a derive macro (or anything wrapping around the actual type definition). You can only produce additional items like trait impls.

2\. given that anyway we are deviating from using the derive macro name for the attributes, I think it would be more consistent to use `#[glib_name("MyType")]` and `#[glib_nullable]` for all derive macros that support this attributes. The `glib` prefix would allow to consistently namespace the attributes.

Why have the glib prefix?

Why have the glib prefix?

Because the attributes are not namespaces. I assume that the convention if using the same name for the attribute and the derive is to avoid conflicts with other macros. By using a glib namespace we should also avoid problems (unless two of these macros can be applied to the same element)

Because you can't generate the bitflags! macro invocation from a derive macro (or anything wrapping around the actual type definition). You can only produce additional items like trait impls.

The other possibility for consistency is to not use derive for any of them and instead have
#[glib::enum_type(Foo)]
#[glib::flags_type(Foo)]
#[glib::boxed_type(Foo)]
#[glib::shared_boxed_type(Foo)]
(we need the _type suffix or something like that because we cannot have a #[glib::enum(Foo)])

The other possibility for consistency is to not use derive for any of them

That doesn't seem like an improvement. It's bad enough that we can't use derive for flags, but fortunately flags are far less common than any of the others :)

That doesn't seem like an improvement. It's bad enough that we can't use derive for flags, but fortunately flags are far less common than any of the others :)

¯_(ツ)_/¯
I guess it depends on how much we care more about consistency... derive is more familiar for rust users, but then again our derive macro require extra attributes, which partly defeat that. Having those custom attributes would be shorter since it is just one attribute. In fact I was thinking we could maybe have a single macro #[glib::static_type(enum, "Foo")] etc...
Oh well, I do not have a strong opinion on this

Interesting idea. The difference is then mostly with tooling support: derive macros work fine, attribute macros and other proc macros are confusing tooling as they can't know if the input is supposed to be valid Rust and what the output is going to be.


Take a Screenshot of the Entire Page not working

What is your Test Scenario?

What is the current behavior?

What is the Expected behavior?

What is your web application and your TestCafe test code?

 Running tests in:
 - Chrome 79.0.3945 / Windows 10.0.0

 My fixture
 × Take a screenshot of a fieldset

   1) The "path" argument is expected to be a non-empty string, but it was object.

      Browser: Chrome 79.0.3945 / Windows 10.0.0

          5 |
          6 |test('Take a screenshot of a fieldset', async t => {
          7 |    await t
          8 |        .typeText('#developer-name', 'Peter Parker')
          9 |        .click('#submit-button')
       > 10 |        .takeScreenshot({

C:\ProcessDrive\TestCafe\Trails\Keyword_Driven\TestScript>testcafe chrome screenshot.js
Using locally installed version of TestCafe.
 Running tests in:
 - Chrome 79.0.3945 / Windows 10.0.0

 My fixture
 × Take a screenshot of a fieldset

   1) The "path" argument is expected to be a non-empty string, but it objected.

      Browser: Chrome 79.0.3945 / Windows 10.0.0

          5 |
          6 |test('Take a screenshot of a fieldset', async t => {
          7 |    await t
          8 |        .typeText('#developer-name', 'Peter Parker')
          9 |        .click('#submit-button')
       > 10 |        .takeScreenshot({
         11 |            path:     'my-fixture/thank-you-page.png',
         12 |            fullPage: true
         13 |        });
         14 |});

         at takeScreenshot (C:\ProcessDrive\TestCafe\Trails\Keyword_Driven\TestScript\screenshot.js:10:10)
         at test (C:\ProcessDrive\TestCafe\Trails\Keyword_Driven\TestScript\screenshot.js:6:1)
         at <anonymous> (C:\ProcessDrive\TestCafe\Trails\Keyword_Driven\node_modules\testcafe\src\api\wrap-test-function.js:17:28)
         at TestRun._executeTestFn (C:\ProcessDrive\TestCafe\Trails\Keyword_Driven\node_modules\testcafe\src\test-run\index.js:288:19)
         at TestRun.start (C:\ProcessDrive\TestCafe\Trails\Keyword_Driven\node_modules\testcafe\src\test-run\index.js:337:24)

 1/1 failed (3s)

Screenshots:

![image](https://user-images.githubusercontent.com/54391573/71817214-2a926700-30ab-11ea-80f1-3998a0df86eb.png)

Steps to Reproduce:

Go to my website ...
Execute this command...
See the error...

Your Environment details:

testcafe version:       1.4.3
node.js version:        v10.16.0
command-line arguments:
browser name and version: chrome
platform and version:     Windows
other:

These screenshot options appeared in version 1.6.
Upgrade to the latest version.


Update OpenUI5Downloads.json

Updated latest patches

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


Unable to pass in variable for limit in update queries

Version
1.16.0
What happened?
I want to allow my application to limit how many records get updated but SQLC does not expose it in the code. I don't have the option to use a subquery with a limit (the code generation works) due to my MySQL version.
Relevant log output
const test = `-- name: Test :exec
UPDATE authors
SET bio="test"
WHERE name IS NULL
LIMIT ?
`

func (q *Queries) Test(ctx context.Context) error {
	_, err := q.db.ExecContext(ctx, test)
	return err
}

Database schema
CREATE TABLE authors (
  id   INT PRIMARY KEY,
  name text      NOT NULL,
  bio  text
);

SQL queries
-- name: Test :exec
UPDATE authors
SET bio="hello"
WHERE name IS NULL
LIMIT ?;

Configuration
{
  "version": "1",
  "packages": [
    {
      "path": "db",
      "engine": "mysql",
      "schema": "query.sql",
      "queries": "query.sql"
    }
  ]
}

Playground URL
https://play.sqlc.dev/p/732de1ddc031aba2c5bfce20367a16435eedd43745324af4249b2b6803862430
What operating system are you using?
macOS
What database engines are you using?
MySQL
What type of code are you generating?
Go

As a workaround you can use sqlc.arg(limit) instead of ?.

Kyle added this to the milestone, and I'd like to have the next release, so I wrote a PR :P
@SnoozeThis https://github.com/kyleconroy/sqlc/pull/2365 -> close

I don't have privileges to execute this action. Please install the SnoozeThis GitHub app (https://github.com/apps/snoozethis).

@SnoozeThis #2365

(https://snoozeth.is/j3WmMD-oYu4) I will wait until https://github.com/kyleconroy/sqlc/issues/2365 is closed and then add a comment.

Resolved.

Thank you @kyleconroy


Mark "deployment" event as supported on Gitea and Forgejo

At least on Forgejo they are working, just executed one recently on the CB instance. I assume that it is also working on Gitea?

Ah hm - but isn't the "deploy" event aimed to be executed manually? How would this be triggered by the forge?
Anyhow, we should add more information to the table then, as it is not clear what the features are referring to then (regardless of the outcome of this one).

Gitea does not support deployments

Closing this PR as Gitea and Forgejo does not support triggering deployment events


Add copyright page and notes

Purpose
This PR is to add copyright pages and copyright notes.
This will fix https://github.com/wso2/docs-open-banking/issues/758.

Adding the copyright page and copyright notes after checking with the team.


[Explorer] Incomplete title

When viewing Node's details on the mobile viewport, the Interfaces Details is not complete.
See screenshot attached
In both environments.
Moved from: https://circles.threefold.me/project/test-tfgrid3/issue/45

Relates to: https://github.com/threefoldtech/tfchain_explorer/issues/100


Uncaught Error: Element type is invalid

In my project I used react-bootstrap-table, it worked fine. Now I try to use react-bootstrap-table-next instead,  this is my simple code:
....
<Panel.Body>
    <BootstrapTable
        ...
    />
</Panel.Body>
...

I have encountered this error:
Uncaught Error: Element type is invalid:
expected a string (for built-in components) or a class/function (for composite components) but got: undefined.
You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.

When I delete <BootstrapTable .../>, no error occurred.
I need helps.


[cherry pick] make internal storage depend on cluster configuration

Coverage remained the same at 34.801% when pulling 7f4cc819afedf7be3c6c53c26a1f94e4bc2649b3 on zhiyuhe/cherry_pick_fix_is into 8164ac79d188418fae129ea30e13a84f3287d23e on pai-1.2.y.


Add texture to GLTF

While it might not make sense for every GLTF (they can be a complex hierarchy of objects), it seems that it could be useful to be able to apply a texture to a GLTF.  I think we can add this to material-extras.
Some pointers here:
https://github.com/n5ro/aframe-extras/issues/167

Addressed by #343.
Set overrideSrc in material-extras to the desired texture URL:

Here is an example json where we apply  overrideSrc to a gltf:
{
  "object_id": "Pumpkin",
  "persist": true,
  "type": "object",
  "action": "update",
  "data": {
    "object_type": "gltf-model",
    "url": "/store/users/nuno/Pumpkin/Pumpkin.gltf",
    "position": {
      "x": 1,
      "y": 2,
      "z": -2
    },
    "rotation": {
      "x": 0,
      "y": 180,
      "z": 0
    },
    "scale": {
      "x": 0.6,
      "y": 0.6,
      "z": 0.6
    },
    "material-extras": {
      "overrideSrc": "/store/users/nuno/Pumpkin/Pumpkin1.png"
    },
    "shadow": {
      "cast": true,
      "receive": true
    }
  }
}

Texture seems to be flipped in the Y axis?

Texture seems to be flipped in the Y axis?

Fixed in d5f4a92


Detect orientation for all rotations

If a PDF is rotated 360 or 540 degrees, for example, the orientation should still be calculated correctly

@yob


Remove Fairvioo

Fairvioo is no longer alive :(

Website seems gone yeah, and not much other information to go on, I will remove them. Thanks for the update!

I assume you worked there or had some other connection to the company?

Yes, I was the CTO.

@celinelouvet What happened?

It was a new startup. We didn't succeed in raising funds, apparently due to a bad estimation of the market. We had to close everything recently :)


LoadJson not implemented

I am using version 0.9.14-beta of nuget pkg for aspnetcore, and trying to load saved json of model. For DecisionTreeModel, the LoadJson method is not implemented.
Any help?

Can anyone help on this please?
I am trying to save model & then load it.
Tried using the other way of serializing as in the "tests" code, that gives error as
Unable to cast object of type 'System.Collections.Generic.Dictionary`2[System.String,System.Object]' to type 'numl.Supervised.NaiveBayes.DecisionTreeModel'.

I got it working by saving in file only, instead of database.
"LoadJson" implementation would have been a great help to avoid all this coding.

Sorry about that!! Excellent point. I will work on it. Thanks so much for the feedback.

Thanks, and this is a great machine learning library, looking forward to see more in it :)

Also see 3414fb433ccf268c183abca78c0e06fa78c607fe for actual Json save and load code (along with supporting tests). This really needed to be fixed: thanks for the push! It should be up on nuget as build 0.9.15-beta.

Hey Seth, after upgrading to "0.9.15-beta", I do not see the method "LoadJson" on model, can you please help?

Hi Sujata!
It didn't make sense to put it on an instance of a model so I added it to the JsonReader class as a static method (see: https://github.com/sethjuarez/numl/blob/dev/Src/numl/Serialization/JsonReader.cs#L347-L352).
var dt = JsonReader.ReadJson<DecisionTreeModel>(json);

Kudos Seth, it's working as expected now,
thanks.


Doesn't work on windows

Reports this error message:
Exception raised: Process failed: spawn node_modules/.bin/jest ENOENT
On windows you'd have to spawn node_modules/.bin/jest.cmd

ah, cool 👍

I've shipped a new build which adds the ability to customise the Jest path, can you change jest.pathToJest to node_modules/.bin/jest.cmd and let me know if that fixes it?

Now i get this error:
[2J[H
No tests found related to files changed since last commit.
Press `a` to run all tests, or run Jest with `--watchAll`.

Error: ENOENT: no such file or directory, open 'c:\tmp\vscode-jest.json'
    at Object.fs.openSync (fs.js:557:18)
    at Object.fs.writeFileSync (fs.js:1222:33)
    at source.getTestPaths.then.then.then.runResults (c:\Users\onemen\yarn\node_modules\jest-cli\build\jest.js:212:14)

I use Hg to commit changes, not Git, how sould i configure the extension?.
I don't have 'c:\tmp' and vscode-jest.json, where should i have vscode-jest.json in windows, and what should be in it?

Cool, well that's part of the way then 🌮

This is just how Jest works, it watches for changes in hg/git and only runs those tests - if this is new for you, you might want to experiment with just using Jest for a bit to understand the principals 👍
I'd need a path for a temp directory on windows, wonder if the node API has something for this

const os = require('os');
os.tmpdir(),

Thanks, looking at it right now

Shipped a PR and a maybe working build, can you two take a look?

Now it appends ".bat" to the jest.pathToJest. The file is called jest.cmd,  not jest.bat though.
To test further I renamed the script and now jest gets run properly and errors are displayed inline so it seems to work fine now 👍
One thing I noticed: The option jsonOutputFile is extremely new so it might be worth mentioning in the docs that this requires a current version of jest (15.x was too old, 17.x works).

Hah, thanks!
Yeah, I can easily do the error message now actually.

Published 1.3.1 with the cmd fix


Time on Graphite graphs are off by 1 hour

Currently the current time in the X axis of graphs created in Graphite is delayed by one hour. This is due to the default value of  America/Chicago for Timezone parameter which is not being changed during the install.

Fixed as part of PR #109 .


Optimisation: Caching ringIndex usage and value updates

Gas Reduction : ~5000
Tests: Fully working without requiring changes
Notes:  This optimisation works by reducing the number of ringIndex storage updates.  This is done by caching changes rather than updating storage.  Additional savings are made by calling cached versions of ringIndex and ENTERED_MASK , which saves on ssload gas costs.
The ringIndex cached value is then passed to handleRing as an argument, again this saves on ssload gas costs. This is also done for the cached ENTERED_MASK value.

Good job , Harnick!

@kongliangzhong  @Hephyrius See issue #290.

@Hephyrius , @Brechtpd , So i think i have to revert this PR.


[2303] Add migration to mark manually withdrawn courses as withdrawn

Context
Before the "withdrawn" content status existed, we withdraw courses manually. This updates those withdrawn in that way to fix the content status
Checklist

[x] Make sure all information from the Trello card is in here
[x] Attach to Trello card
[x] Rebased master
[x] Cleaned commit history
[x] Tested by running locally

https://trello.com/c/LUrEv4Rk/2303-mark-manually-withdrawn-courses-enrichment-as-withdrawn

How many records does this affect?

On a recent copy of production it affects 308 courses, of which 15 are in the current recruitment cycle

@danielburnley little conflict on schema.rb to be fixed


Reuse tmlanguage for html syntax highlighting

In the website https://github.com/microsoft/cadl/pull/935 using 11ty syntax highlighting extension that use PrismJS we need to specify another syntax definition that is working for PrismJS.
This is easily going to stay out of dat4. See if we can somehow use the tmlanguage to highlight cadl code block, either:

Find a way to convert tmlanguage to PrismJS simplified syntax
Find a way to bypass PrismJS for the website and make our own tmlanguage -> html

@timotheeguerin is this issue still relevant or can we close it?

Yea it is, the way we have it today kinda works but this would be a good improvement