Could not extract app solid

Hi,
I have my own instance of nextcloud and I am trying to install the solid plugin via nextcloud.
It throws the following error  "Could not extract app solid: Out-of-path file extraction {/tmp/oc_tmp_yc3XAx-folder/solid/vendor/bin/generate-defuse-key --> ../defuse/php-encryption/bin/generate-defuse-key}"
Test case:
-Open nextcloud
-Go to Apps

Look for Solid and click download and enable.

Looking forward to hearing from you.
Thanks,
Angel

Thank you for trying out Solid-Nextcloud and for bringing this to our attention!
We'll try to reproduce this issue so we can come up with a fix. Could you tell me which version of Nextcloud you are running?

Hi
I am running Nextcloud 21.0.0.

At the core of the problem lies the more strict checks (in Nextcloud codee) regarding symlinks in our code, specifically:
solid/vendor/bin/generate-defuse-key --> ../defuse/php-encryption/bin/generate-defuse-key
This seems to be related to changes in Nextcloud (see https://github.com/nextcloud/server/issues/24995 and https://github.com/nextcloud/news/issues/1086#issuecomment-771914810) apparently there is a fix in the upstream code (see https://github.com/pear/Archive_Tar/issues/35 and https://github.com/nextcloud/server/pull/25335) but that does not seem to have landed in NC21 (yet).
Other libraries do seem to have workarounds (see https://github.com/nextcloud/news/issues/1086), so we might be able to resolve this without having to wait for updates to Nextcloud.
The offending file is part of a package that our code does not use directly, so it might suffice to simply remove the symlink from the packaged code...

@ylebre Do you have any thoughts that run in oposing directions?

Hi,
Thanks for the answer but I could not find any generate-defuse-key file in my server.
I tried again and have managed to install the plug in Solid 0.0.2 in nextcloud.
I ran the following:

git clone https://github.com/pdsinterop/solid-nextcloud /tmp/solid
cd /tmp/solid/
mv solid /var/www/nextcloud/apps/solid

But when I try clicking on the icon in my dashboard I get the following error.

I enabled the logs in nextcloud. What the logs threw is below. Is there anything you want me to try or any specific logs you want me to generate?
{"reqId":"rcoSAFkQYZLHqGgO5kqu","level":3,"time":"2021-04-07T13:51:15+00:00","remoteAddr":"<IP_ADDRESS>","user":"ch1ch0gz","app":"index","method":"GET","url":"/apps/solid/","message":{"Exception":"OCP\AppFramework\QueryException","Message":"Could not resolve config! Class config does not exist","Code":0,"Trace":[{"file":"/var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php","line":126,"function":"resolve","class":"OC\AppFramework\Utility\SimpleContainer","type":"->","args":["config"]},{"file":"/var/www/nextcloud/lib/private/ServerContainer.php","line":162,"function":"query","class":"OC\AppFramework\Utility\SimpleContainer","type":"->","args":["config",true]},{"file":"/var/www/nextcloud/lib/private/AppFramework/DependencyInjection/DIContainer.php","line":434,"function":"query","class":"OC\ServerContainer","type":"->","args":["config",true]},{"file":"/var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php","line":96,"function":"query","class":"OC\AppFramework\DependencyInjection\DIContainer","type":"->","args":["config"]},{"function":"OC\AppFramework\Utility\{closure}","class":"OC\AppFramework\Utility\SimpleContainer","type":"->","args":["*** sensitive parameters replaced "]},{"file":"/var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php","line":101,"function":"array_map","args":[{"class":"Closure"},[{"name":"AppName","class":"ReflectionParameter"},{"name":"request","class":"ReflectionParameter"}," sensitive parameter replaced ***",{"name":"userManager","class":"ReflectionParameter"},{"name":"contactsManager","class":"ReflectionParameter"},"And 2 more entries, set log level to debug to see all entries"]]},{"file":"/var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php","line":109,"function":"buildClass","class":"OC\AppFramework\Utility\SimpleContainer","type":"->","args":[{"name":"OCA\Solid\Controller\AppController","class":"ReflectionClass"}]},{"file":"/var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php","line":126,"function":"resolve","class":"OC\AppFramework\Utility\SimpleContainer","type":"->","args":["OCA\Solid\Controller\AppController"]},{"file":"/var/www/nextcloud/lib/private/AppFramework/DependencyInjection/DIContainer.php","line":459,"function":"query","class":"OC\AppFramework\Utility\SimpleContainer","type":"->","args":["OCA\Solid\Controller\AppController"]},{"file":"/var/www/nextcloud/lib/private/AppFramework/DependencyInjection/DIContainer.php","line":431,"function":"queryNoFallback","class":"OC\AppFramework\DependencyInjection\DIContainer","type":"->","args":["OCA\Solid\Controller\AppController"]},{"file":"/var/www/nextcloud/lib/private/AppFramework/App.php","line":144,"function":"query","class":"OC\AppFramework\DependencyInjection\DIContainer","type":"->","args":["OCA\Solid\Controller\AppController"]},{"file":"/var/www/nextcloud/lib/private/Route/Router.php","line":302,"function":"main","class":"OC\AppFramework\App","type":"::","args":["OCA\Solid\Controller\AppController","appLauncher",{"class":"OC\AppFramework\DependencyInjection\DIContainer"},{"_route":"solid.app.appLauncher"}]},{"file":"/var/www/nextcloud/lib/base.php","line":993,"function":"match","class":"OC\Route\Router","type":"->","args":["/apps/solid/"]},{"file":"/var/www/nextcloud/index.php","line":37,"function":"handleRequest","class":"OC","type":"::","args":[]}],"File":"/var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php","Line":115,"CustomMessage":"--"},"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.192 Safari/537.36","version":"<IP_ADDRESS>"}

I'm able to reproduce the issue, so we can investigate further to see what is going wrong. So far I know that this broke in the update from Nextcloud 20 to 21, and the issue is somewhere in the dependancy injection for the ServerConfig in the constructor of our controllers.

Hi @ylebre ,
How is it going? Do you have an update on this?
Thanks!

Yes, just merged https://github.com/pdsinterop/solid-nextcloud/pull/45 which should fix the issue with Nextcloud 21. If you have time to confirm, that would be much appreciated!

Worked!

Thanks very much, we will continue testing it as we are interested in the combo (solid-nextcloud).

I pull the trigger to soon, sorry...
When clicking on Profile

It sends me to a blank page and I get the below error on the server
{"reqId":"l7cQiJ0NXf7POduGep3j","level":3,"time":"2021-04-20T18:25:08+00:00","remoteAddr":"<IP_ADDRESS>","user":"jorge","app":"PHP","method":"GET","url":"/apps/solid/@jorge/","message":{"Exception":"Error","Message":"require_once(/var/www/nextcloud/apps/solid/lib/Controller/../../vendor/autoload.php): failed to open stream: No such file or directory at /var/www/nextcloud/apps/solid/lib/Controller/PageController.php#24","Code":0,"Trace":[{"file":"/var/www/nextcloud/apps/solid/lib/Controller/PageController.php","line":24,"function":"onError","class":"OC\Log\ErrorHandler","type":"::","args":[2,"require_once(/var/www/nextcloud/apps/solid/lib/Controller/../../vendor/autoload.php): failed to open stream: No such file or directory","/var/www/nextcloud/apps/solid/lib/Controller/PageController.php",24,{"AppName":"solid","request":{"class":"OC\AppFramework\Http\Request"},"config":{"class":"OC\AllConfig"},"userManager":{"class":"OC\User\Manager"},"urlGenerator":{"class":"OC\URLGenerator"},"0":"And 1 more entries, set log level to debug to see all entries"}]},{"file":"/var/www/nextcloud/apps/solid/lib/Controller/PageController.php","line":24,"function":"require_once"},{"function":"__construct","class":"OCA\Solid\Controller\PageController","type":"->","args":["solid",{"class":"OC\AppFramework\Http\Request"},{"class":"OC\AllConfig"},{"class":"OC\User\Manager"},{"class":"OC\URLGenerator"},"jorge"]},{"file":"/var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php","line":101,"function":"newInstanceArgs","class":"ReflectionClass","type":"->","args":[["solid",{"class":"OC\AppFramework\Http\Request"},{"class":"OC\AllConfig"},{"class":"OC\User\Manager"},{"class":"OC\URLGenerator"},"And 1 more entries, set log level to debug to see all entries"]]},{"file":"/var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php","line":109,"function":"buildClass","class":"OC\AppFramework\Utility\SimpleContainer","type":"->","args":[{"name":"OCA\Solid\Controller\PageController","class":"ReflectionClass"}]},{"file":"/var/www/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php","line":126,"function":"resolve","class":"OC\AppFramework\Utility\SimpleContainer","type":"->","args":["OCA\Solid\Controller\PageController"]},{"file":"/var/www/nextcloud/lib/private/AppFramework/DependencyInjection/DIContainer.php","line":459,"function":"query","class":"OC\AppFramework\Utility\SimpleContainer","type":"->","args":["OCA\Solid\Controller\PageController"]},{"file":"/var/www/nextcloud/lib/private/AppFramework/DependencyInjection/DIContainer.php","line":431,"function":"queryNoFallback","class":"OC\AppFramework\DependencyInjection\DIContainer","type":"->","args":["OCA\Solid\Controller\PageController"]},{"file":"/var/www/nextcloud/lib/private/AppFramework/App.php","line":144,"function":"query","class":"OC\AppFramework\DependencyInjection\DIContainer","type":"->","args":["OCA\Solid\Controller\PageController"]},{"file":"/var/www/nextcloud/lib/private/Route/Router.php","line":302,"function":"main","class":"OC\AppFramework\App","type":"::","args":["OCA\Solid\Controller\PageController","profile",{"class":"OC\AppFramework\DependencyInjection\DIContainer"},{"userId":"jorge","_route":"solid.page.profile"}]},{"file":"/var/www/nextcloud/lib/base.php","line":993,"function":"match","class":"OC\Route\Router","type":"->","args":["/apps/solid/@jorge/"]},{"file":"/var/www/nextcloud/index.php","line":37,"function":"handleRequest","class":"OC","type":"::","args":[]}],"File":"/var/www/nextcloud/lib/private/Log/ErrorHandler.php","Line":92,"CustomMessage":"--"},"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:87.0) Gecko/20100101 Firefox/87.0","version":"<IP_ADDRESS>"}
{"reqId":"l7cQiJ0NXf7POduGep3j","level":3,"time":"2021-04-20T18:25:08+00:00","remoteAddr":"<IP_ADDRESS>","user":"jorge","app":"PHP","method":"GET","url":"/apps/solid/@jorge/","message":"require_once(): Failed opening required '/var/www/nextcloud/apps/solid/lib/Controller/../../vendor/autoload.php' (include_path='/var/www/nextcloud/apps/mail/vendor/pear-pear.horde.org/Horde_Crypt_Blowfish:/var/www/nextcloud/apps/mail/vendor/pear-pear.horde.org/Horde_Date:/var/www/nextcloud/apps/mail/vendor/pear-pear.horde.org/Horde_Exception:/var/www/nextcloud/apps/mail/vendor/pear-pear.horde.org/Horde_Idna:/var/www/nextcloud/apps/mail/vendor/pear-pear.horde.org/Horde_Imap_Client:/var/www/nextcloud/apps/mail/vendor/pear-pear.horde.org/Horde_ListHeaders:/var/www/nextcloud/apps/mail/vendor/pear-pear.horde.org/Horde_Mail:/var/www/nextcloud/apps/mail/vendor/pear-pear.horde.org/Horde_ManageSieve:/var/www/nextcloud/apps/mail/vendor/pear-pear.horde.org/Horde_Mime:/var/www/nextcloud/apps/mail/vendor/pear-pear.horde.org/Horde_Nls:/var/www/nextcloud/apps/mail/vendor/pear-pear.horde.org/Horde_Secret:/var/www/nextcloud/apps/mail/vendor/pear-pear.horde.org/Horde_Smtp:/var/www/nextcloud/apps/mail/vendor/pear-pear.horde.org at /var/www/nextcloud/apps/solid/lib/Controller/PageController.php#24","userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:87.0) Gecko/20100101 Firefox/87.0","version":"<IP_ADDRESS>"}

Well there is progress at least :) I'll see if I can reproduce this one in the weekend. Just to check, does your setup use symlinks by any chance, that might prevent it finding the autoloader. @Potherca any suggestions what the cause might be?

Not sure what you mean with symlinks. We do not have ../vendor/autoload.php
Can we generate it or link it automatically from another autoload.php?

Ah, if the autoload is missing completely you should be able to generate it with composer install. Here is the snippet from the Dockerfile that does that part:
# Run composer:
WORKDIR /usr/src/nextcloud/apps/solid
RUN ls
RUN php /install/composer.phar require lcobucci/jwt:3.3.3
RUN php /install/composer.phar update
RUN php /install/composer.phar install --no-dev --prefer-dist

That worked. I has created a https://cloud.pr8.io/apps/solid/@ch1ch0gz/profile/card#me which I can access to.
Unfortunately I am not able to log on in any app .
For instance I tried to log in on the Focus app but I got an error. I do not seem to have an actual pod just the WebID.

Good to hear you have it working this far!
The apps listed are mostly broken. The boring explanation is that they are using an older token version that we don't support (we started the project after the spec was changed). We considered adding support for the legacy tokens, but decided against that because they were phased out for a valid reason, so we opted to go with the new spec knowing that older apps would not work.
We are waiting for new or updated apps that support the new dpop tokens to add to the launcher. Any tips or suggestions on those are appreciated!

Hi,
Thanks for your fast response.
I think the problem is that the CSS has not initialized. A webId has been created and the profile/card#me too, but not the actual pod or at least I cannot see it anywhere.

We were testing it against our own app (pr8.io). We are not aware of any dpop tokens? We have not used them in our development.
We were hoping this plug would create a pod in nextcloud that we could use to connect to apps based on solid as well as utilize all existing capabilities of nextcloud.
Is there anything else I can provide you or test to try make this work?
Cheers!

Ah - the storage pod will be inside Nextcloud as part of the 'normal' filesystem in there. It should create a 'solid' directory where everything will live. The storage itself would be reachable from the web under https://your.nextcloud/apps/solid/@{user}/storage/
if I visit pr8.io i'm getting a dashboard with stats of some kind - maybe you can provide some more details about the app itself so we can try to get it to store something in our own nextcloud instance?

Please use https://pr8.io/
We thought that too but nothing under /var/www/nextcloud/apps/solid

When I go to https://cloud.pr8.io/apps/solid/@ch1ch0gz/storage/ I get

/var/log/nextcloud.log gives the below. Is there any information or test we can perform that could help to resolve this issue?
Happy as well to do a quick Zoom session so you could have a look at our set up.
{"reqId":"pXX3RnqVanr0pUZe5Tvw","level":3,"time":"2021-04-23T17:50:30+00:00","remoteAddr":"<IP_ADDRESS>","user":"ch1ch0gz","app":"index","method":"GET","url":"/apps/solid/@ch1ch0gz/storage/undefined/img/notifications.svg","message":{"Exception":"Exception","Message":"explode() expects parameter 2 to be string, null given","Code":0,"Trace":[{"file":"/var/www/nextcloud/lib/private/AppFramework/App.php","line":157,"function":"dispatch","class":"OC\AppFramework\Http\Dispatcher","type":"->","args":[{"config":{"userManager":{"class":"OC\User\Manager"},"urlGenerator":{"class":"OC\URLGenerator"},"class":"OCA\Solid\ServerConfig"},"rootFolder":{"class":"OC\Files\Node\LazyRoot"},"rawRequest":{"class":"Laminas\Diactoros\ServerRequest"},"response":{"class":"Laminas\Diactoros\Response"},"userFolder":{"class":"OC\Files\Node\Folder"},"solidFolder":{"class":"OC\Files\Node\Folder"},"filesystem":{"class":"League\Flysystem\Filesystem"},"resourceServer":{"basePath":"/apps/solid/@ch1ch0gz/storage","class":"Pdsinterop\Solid\Resources\Server"},"WAC":{"class":"Pdsinterop\Solid\Auth\WAC"},"DPop":{"class":"Pdsinterop\Solid\Auth\Utils\DPop"},"class":"OCA\Solid\Controller\StorageController"},"handleGet"]},{"file":"/var/www/nextcloud/lib/private/Route/Router.php","line":302,"function":"main","class":"OC\AppFramework\App","type":"::","args":["OCA\Solid\Controller\StorageController","handleGet",{"class":"OC\AppFramework\DependencyInjection\DIContainer"},{"userId":"ch1ch0gz","path":"/undefined/img/notifications.svg","_route":"solid.storage.handleGet"}]},{"file":"/var/www/nextcloud/lib/base.php","line":993,"function":"match","class":"OC\Route\Router","type":"->","args":["/apps/solid/@ch1ch0gz/storage/undefined/img/notifications.svg"]},{"file":"/var/www/nextcloud/index.php","line":37,"function":"handleRequest","class":"OC","type":"::","args":[]}],"File":"/var/www/nextcloud/lib/private/AppFramework/Http/Dispatcher.php","Line":159,"Previous":{"Exception":"TypeError","Message":"explode() expects parameter 2 to be string, null given","Code":0,"Trace":[{"file":"/var/www/nextcloud/apps/solid/vendor/pdsinterop/solid-auth/src/Utils/DPop.php","line":14,"function":"explode","args":[" ",null]},{"file":"/var/www/nextcloud/apps/solid/lib/Controller/StorageController.php","line":294,"function":"getWebId","class":"Pdsinterop\Solid\Auth\Utils\DPop","type":"->","args":[{"class":"Laminas\Diactoros\ServerRequest"}]},{"file":"/var/www/nextcloud/apps/solid/lib/Controller/StorageController.php","line":322,"function":"handleRequest","class":"OCA\Solid\Controller\StorageController","type":"->","args":["ch1ch0gz","/undefined/img/notifications.svg"]},{"file":"/var/www/nextcloud/lib/private/AppFramework/Http/Dispatcher.php","line":218,"function":"handleGet","class":"OCA\Solid\Controller\StorageController","type":"->","args":["ch1ch0gz","/undefined/img/notifications.svg"]},{"file":"/var/www/nextcloud/lib/private/AppFramework/Http/Dispatcher.php","line":127,"function":"executeController","class":"OC\AppFramework\Http\Dispatcher","type":"->","args":[{"config":{"userManager":{"class":"OC\User\Manager"},"urlGenerator":{"class":"OC\URLGenerator"},"class":"OCA\Solid\ServerConfig"},"rootFolder":{"class":"OC\Files\Node\LazyRoot"},"rawRequest":{"class":"Laminas\Diactoros\ServerRequest"},"response":{"class":"Laminas\Diactoros\Response"},"userFolder":{"class":"OC\Files\Node\Folder"},"solidFolder":{"class":"OC\Files\Node\Folder"},"filesystem":{"class":"League\Flysystem\Filesystem"},"resourceServer":{"basePath":"/apps/solid/@ch1ch0gz/storage","class":"Pdsinterop\Solid\Resources\Server"},"WAC":{"class":"Pdsinterop\Solid\Auth\WAC"},"DPop":{"class":"Pdsinterop\Solid\Auth\Utils\DPop"},"class":"OCA\Solid\Controller\StorageController"},"handleGet"]},{"file":"/var/www/nextcloud/lib/private/AppFramework/App.php","line":157,"function":"dispatch","class":"OC\AppFramework\Http\Dispatcher","type":"->","args":[{"config":{"userManager":{"class":"OC\User\Manager"},"urlGenerator":{"class":"OC\URLGenerator"},"class":"OCA\Solid\ServerConfig"},"rootFolder":{"class":"OC\Files\Node\LazyRoot"},"rawRequest":{"class":"Laminas\Diactoros\ServerRequest"},"response":{"class":"Laminas\Diactoros\Response"},"userFolder":{"class":"OC\Files\Node\Folder"},"solidFolder":{"class":"OC\Files\Node\Folder"},"filesystem":{"class":"League\Flysystem\Filesystem"},"resourceServer":{"basePath":"/apps/solid/@ch1ch0gz/storage","class":"Pdsinterop\Solid\Resources\Server"},"WAC":{"class":"Pdsinterop\Solid\Auth\WAC"},"DPop":{"class":"Pdsinterop\Solid\Auth\Utils\DPop"},"class":"OCA\Solid\Controller\StorageController"},"handleGet"]},{"file":"/var/www/nextcloud/lib/private/Route/Router.php","line":302,"function":"main","class":"OC\AppFramework\App","type":"::","args":["OCA\Solid\Controller\StorageController","handleGet",{"class":"OC\AppFramework\DependencyInjection\DIContainer"},{"userId":"ch1ch0gz","path":"/undefined/img/notifications.svg","_route":"solid.storage.handleGet"}]},{"file":"/var/www/nextcloud/lib/base.php","line":993,"function":"match","class":"OC\Route\Router","type":"->","args":["/apps/solid/@ch1ch0gz/storage/undefined/img/notifications.svg"]},{"file":"/var/www/nextcloud/index.php","line":37,"function":"handleRequest","class":"OC","type":"::","args":[]}],"File":"/var/www/nextcloud/apps/solid/vendor/pdsinterop/solid-auth/src/Utils/DPop.php","Line":14},"CustomMessage":"--"},"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36","version":"<IP_ADDRESS>"}

I think a shared screen session somewhere would be helpful to push things along a bit further. It would also be helpful to give you some answers on a couple of questions. My schedule is a bit swamped at the moment, but perhaps we can find a moment somewhere on a monday or wednesday somewhere in the couple of next weeks?
I installed a 'fresh' nextcloud (version 21) locally using the main branch from git, but I'm not currently able to reproduce the behaviour you are seeing. I could log with it to https://pr8.io, though after that things stop working. I saw in the http logs that the app is using the Bearer token (instead of dpop) which Solid-Nextcloud does not support at this time.

Perfect. Just sent you this morning a mail to<EMAIL_ADDRESS>

Thanks for your help @ylebre ! We already changed the tokens and did some adjustments to stick to the latest spec. I also think a shared screen session could be great. As @ch1ch0gz pointed, it seems that we are just not starting the solid server within out nextcloud instance.

Ok - after the screen session I'm pretty sure that this is the cause of the issue:
https://github.com/pdsinterop/php-solid-auth/issues/17
We'll try to run it the server using nginx to see if that reproduces the problem!

Hi @ylebre,
We have managed to log in in our app with nginx using the webid created by your plugin in nexcloud. Unfortunately PUTs, PATCHs and GET resources fail on our end. We will be opening a separate issue for this.
In order to make it work with NGINX:
-We have added the below to nextcloud.conf
location = /.well-known/openid-configuration {
add_header Access-Control-Allow-Origin "*";
return 302 $scheme://$host:$server_port/apps/solid/openid;
}
-We also have added with brute force the following to site.conf
#add_header Access-Control-Allow-Origin https://pr8.io;
add_header Access-Control-Allow-Origin $http_origin;
#add_header Access-Control-Allow-Origin http://localhost:3000;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Headers "*, allow, authorization, content-type, dpop, slug, link, accept, map";
add_header Access-Control-Allow-Methods "GET, PUT, POST, OPTIONS, DELETE, PATCH";
add_header Accept-Patch "application/sparql-update";
add_header Access-Control-Expose-Headers "Authorization, User, Location, Link, Vary, Last-Modified, ETag, Accept-Patch, Accept-Post, Updates-Via, Allow, WAC-Allow, Content-Length, WWW-Authenticate, MS-Author-Via";
proxy_pass_request_headers on;
proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
proxy_no_cache $http_pragma $http_authorization;
proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;
proxy_cache_bypass $http_pragma $http_authorization;
proxy_set_header HTTP_AUTHORIZATION $http_authorization
Cheers!

I am closing this issue, as the original problem has been resolved. For updates on NGINX please follow https://github.com/pdsinterop/php-solid-auth/issues/17
Once https://github.com/pdsinterop/solid-nextcloud/issues/107 has been resolved, the installation should be more smooth than it is now (so you might want to wait for v0.7.1 to be released).


Newrelic dashboard storybook

This adds a storybook for newrelic-dashboard plugin
The layout for this plugin is wrecked, so let's add storybooks first so we can improve it later.

:heavy_check_mark: Checklist

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

cc @mufaddal7

Took the liberty of rebasing this to see if the build is happier


Fixed DuplicateSchema error with multiple async getSchema calls

The getSchema() in ECSchemaRPCLocater internally calls the Schema.fromJSON().
When reading the schema, a call is made to context.addSchema() so as to be able to locate schemaItems within the context.
However, there is no check when calling addSchema() to see if the schema has already been loaded.
Hence, if multiple async calls are made to getSchema(), every getSchema() call after the first will throw a DuplicateSchema error as it tried to load the schema again.
I've added a check to see if the schema has already been cached.
addSchema() is only called if the schema is not present in the context.

/azp run

Wouldn't it be more robust and more efficient to ensure that, if another request for the same schema comes into getSchema while you awaiting the result of a previous request, the second (and subsequent) requests await the same result rather than duplicating and then discarding the work being done on behalf of the first request?

Wouldn't it be more robust and more efficient to ensure that, if another request for the same schema comes into getSchema while you awaiting the result of a previous request, the second (and subsequent) requests await the same result rather than duplicating and then discarding the work being done on behalf of the first request?

@pmconne makes a good point.  if the schema is already in the context do we need to proceed and do all the work we do AFTER we add the schema to the context?  One concern with this is that it is possible that there could be a partially loaded schema already in the cache.  By running through the schema and forcing everything to load we ensure that the schema is fully loaded when the method returns.  If we are getting into this partial load case I suspect that there is a bug but it's worth making sure @AkshayN5 considers this as he is working on async schema loading
Over all I think the right thing to do here is to include all work to load the schema in the check for the schema already existing in the cache.  If it already exists in the cache all the work should be skipped.

I had a look at the PR #1542 and this issue has been resolved in it.
The partially loaded schema check has also been catered to.
I had a call with Akshay and will be adding this test scenario to his branch.
Abandoning this PR.


Default filters break references loading

Describe the bug
@Filter({ name: 'old', cond: { age: { $gt: 80 } }, default: true })
@Entity()
class Author {
  @PrimaryKey()
  id!: number;

  @Property()
  name: string;

  @Property()
  age: number;

  [...]
}

If you have a reference to an Author who is not "old" .load() it will return just its id instead of a loaded entity.
Default filters should be applied to Collections but it makes no sense to apply them to References IMO.
Reproduction
There won't be any reproduction because I've already created a failing test and the relative fix.
Since this is a prerequisite for my upcoming PR which is going to improve the Reference and Collection dataloaders this fix will be part of that PR.
What driver are you using?
@mikro-orm/sqlite
MikroORM version
git master
Node.js version
20
Operating system
Arch Linux
Validations

[X] Read the Contributing Guidelines.
[X] Read the docs.
[X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
[X] Check that this is a concrete bug. For Q&A open a GitHub Discussion or join our Slack.
[X] The provided reproduction is a minimal reproducible example of the bug.

There is no way to load a reference if default filters prevent it from loading because, contrary to collections,

This behavior is still quite confusing in my opinion and there should be an option to disable default filters on References/Collections.

Indeed, both InitOptions and LoadReferenceOptions should have the filters option. Users need to be able to control filters, default filters can be disabled, non-default filters enabled, and users can also pass arguments to parametric filters.

there is no where parameter in the Reference.load method where you can disable them.

We should probably have populateWhere option in both of those methods too, as well as the recently added populateOrderBy, since they both have populate option.

If a default filter prevents a reference from being loaded it currently returns the same uninitialized Reference (ref.isInitialized() === false), so there is absolutely no way to tell if a Reference returns no fields other than its id because of default filters or because it has not been loaded yet. Collections are marked as initialized even when default filters prevent them from returning values, the same should be true for references: they should return undefined. Since a reference can now return undefined the typings should be updated to return T | undefined (instead of just T) every time you load Reference with any kind of filter attached to it.

This is a good point, I agree we should return null (or undefined when forceUndefined option is enabled) if the entity cannot be loaded due to the enabled filters.

Since loading a reference (or a collection) might return different values depending on which filter has been used to load them they (loaded References/Collections) should carry a property listing all the filters that has been used to load them.

I am not sure about that, how would you use this information? We could store it quite easily (in WrappedEntity), I don't mind, but I am not sure how it would be usable. Entities can mutate, that's the whole point of the ORM, e.g. you can load entity with default filters enabled and then reload some of its properties with them disabled.

Last but not least, make sure that Collection.loadItems returns immutable arrays, otherwise loading the same collection twice with different filters will retroactively change whatever results you would have previously got.

Same as the last point, I don't think this is something to change, it always worked this way.

I am starting to think we should join the relation automatically and ensure the FK is not present when the filters disallow it. That's the only way to properly ensure things without the need for Reference wrapper (or adjusting its interface).

@darkbasic wdyt about the above? unless you are strongly opposed, I'll give that a shot today, it's pretty much the last thing I want to finalize before another RC (and technically before the stable release too, I might just ship things tomorrow if there won't be any roadblocks in this one.
We are probably also missing the filters option in the Collection.load and Reference.load, but that feels like a super small fix, I think it should just work once we add the option.

I am starting to think we should join the relation automatically and ensure the FK is not present when the filters disallow it. That's the only way to properly ensure things without the need for Reference wrapper (or adjusting its interface).

@B4nan that makes sense and would kind of remove (more on that later) the need for the reference instance to be always present instead of it being null when the underlying FK is null. One downside that I see is that you are always going to make an additional join even when you are not interested in the value of such property. Also, while that would solve the issue for default filters, that won't fix it for custom filters that you might want to apply manually to the reference via load() options.
While I think that this is nice to have, it should probably be configurable if not even opt-in and in v7 we should still aim to change how references work to align them with collections. I'm also a bit skeptical of how this eagerly-join-and-remove-the-FK would interact with a user that later wants to apply a different filter to the reference, unless the FW won't be some kind of wrapper instead of null.

One downside that I see is that you are always going to make an additional join even when you are not interested in the value of such property.

Well, you have a filter that affects the FK, without the join you don't get the true value respecting the filters. Keep in mind you can always disable the filter locally (and in the end, you've opted into that by having a default filter in the first place). You can also use partial loading if you are not interested in the value at all (which reminds me I should also finally add excludes option to v6 to allow partial loading of everything except a few columns).

Also, while that would solve the issue for default filters, that won't fix it for custom filters that you might want to apply manually to the reference via load() options.

That feels like even minor issue imo, I don't want to make 99% cases less ergononic because of that (aka I'd keep the Ref.load() return a value instead of allowing null all the time). But we could maybe have an overload which will add the null to the return type only when there is where or filters in the load() options, that sounds reasonable. Let's see if it won't break the Loaded type :D

While I think that this is nice to have, it should probably be configurable if not even opt-in and

As I said above, I prefer correctness here, that's why I want to have it enabled by default, but will be happy to make this configurable for others who might not like it.

in v7 we should still aim to change how references work to align them with collections

I am still not sure about that, if we have the join, the problem is technically solved. I still like the way it works now more than having the ref instance there all the time, but open to discussion. We could run a poll in the discussions over time and see what others think, and maybe even consider having both ways (but that would complicate the types I guess, and could be a chore to maintain).

which reminds me I should also finally add excludes option to v6

Good, an exclude option should be enough to prevent unnecessary joins.

That feels like even minor issue imo, I don't want to make 99% cases less ergononic because of that (aka I'd keep the Ref.load() return a value instead of allowing null all the time). But we could maybe have an overload which will add the null to the return type only when there is where or filters in the load() options, that sounds reasonable (ideally this would also remove the null in case of filters: false)

I don't think this issue would be solved by overloading the load() option. Let's say you have a default filter on Book.author which shows only authors that are still alive. If you run const book = em.findOne(Book, {name: "Divine Comedy"}]) you end up with a very old book written by the long since dead Dante Alighieri and since it eagerly joined book.author will be null. At this point point how are you supposed to load the reference with different filters? book.author is null and null.load([...]) won't do the trick...

I am still not sure about that, if we have the join, the problem is technically solved

See the previous point.

I don't think this issue would be solved by overloading the load() option. Let's say you have a default filter on Book.author which shows only authors that are still alive. If you run const book = em.findOne(Book, {name: "Divine Comedy"}]) you end up with a very old book written by the long since dead Dante Alighieri and since it eagerly joined book.author will be null.

Sounds like the internal join here should be inner join so the book wouldn't be selected, that kinda makes sense to me. Probably based on the nullability, e.g. for nullable columns we'd make left join, for not null it would be inner join.

At this point point how are you supposed to load the reference with different filters? book.author is null and null.load([...]) won't do the trick...

You would disable filters when loading the Book if that's what you are after.
Also, I don't think it would be any better if we had the Ref type present all the time as with Collection, it still represents the FK even without loading, this would need to be hidden under the load method, effectively making this feature useless, turning everything into async or preloaded. It would be kinda the same as making the property lazy: true (so not selected unless populated). We would still need the join I think.

Probably based on the nullability, e.g. for nullable columns we'd make left join, for not null it would be inner join

Sounds good to me.

Btw I've started with the exclude option and it's a major chore to support this on the type level once again :D

Yeah I would have bet on that: the most time consuming part are always the typings :]

Looking at this again, and I actually think the problem you highlighted with Ref.load() and filters is valid for BaseEntity.init() (or wrap().init()) as well, and even if we forget about filters - those methods can be executed after the target entity was removed and should return null in those cases (just like em.refresh is already doing).
I feel like we could have something like ensure: true (or maybe fail: true) in the options which would make it behave like findOneOrFail, so throw in case of the entity is not found. Now the question is whether this should be the default or not, but the null in the return type could work based on that easily.
Here is the exclude option #5024 btw.


Add permissions to deploy javax-servlet.

Allow permissions for teilo to deploy a dummy version of the servlet-api.

Description
Allow teilo to deploy a dummy version of the serlvet-api.  The servlet-api since version 3 has been published under a different artifactId.  This means it is possible to get 2 different versions of the API in the classpath of plugins causing build time issues.
Ref: https://github.com/jenkinsci/jenkins/pull/3033/files#diff-600376dffeb79835ede4a0b285078036R241

Submitter checklist for changing permissions

Always

[ ] Add link to plugin/component Git repository in description above

Not applicable - there is no repo for this.  Just a simple POM
For a newly hosted plugin only

[ ] Add link to resolved HOSTING issue in description above

For a new permissions file only

[x] Make sure the file is created in permissions/ directory
[x] artifactId (pom.xml) is used for name (permissions YAML file).
[x] groupId / artifactId (pom.xml) are correctly represented in path (permissions YAML file)
[x] Check that the file is named plugin-${artifactId}.yml for plugins

When adding new uploaders (this includes newly created permissions files)

[ ] Make sure to @mention an existing maintainer to confirm the permissions request, if applicable
[ ] Use the Jenkins community (LDAP) account name in the YAML file, not the GitHub account name
[ ] All newly added users have logged in to Artifactory at least once

Wouldn't checkUpperBounds have something to say about this? IIUC the idea is for plugins to depend on "fake 2.5" so they effectively only get 3.x?

Pinging the other reviewers, @oleg-nenashev @batmat @orrc for FYI.
Unless someone objects I'll merge by Monday.

@daniel-beck well we can either exclude this from upper bounds (if I deploy version 0), or I can deploy it with version 999-empty...
@stephenc was the original proposer of this way handling things.

Should we also add an enforcer rule to ban it in plugin-pom?

@batmat

Should we also add an enforcer rule to ban it in plugin-pom?

Given the plugin pom targets lots of versions of Jenkins we can not do this

I think the rest of this discussion should be had on related core PRs etc.


Create simulator

create a simulation class to create a parameterized dataframe for testing

n_cells: number of cells
n_guides: number of guieds
m_depth: mean depth per cell
v_depth: var depth per cell
p_guides: guide probabilities (will be scaled up)
moi: multiplicity of infection (should be modeled as a Poisson distribution to determine number of true positive sgRNAs per cell)

going to track with https://github.com/noamteyssier/muxsim


Oscillations on actuators with full thrust and roll ~ 45 degree

HW: pixhawk (fmu-v2) + quadcopter x6
FW: px4 stable in EKF2 mode
I've found that on full thrust there are actuators oscillations with roll ~45 degree.
To ensure that is not related to frame vibration i've disconnect all engines and made a test again.
So it is easy to reproduce:

disconnect engines from fmu
arm throttle (manual mode without gps available)
set max throttle
Slowly roll copter ~45 degree left and see actuators oscillations (from min to max)

http://logs.uaventure.com/view/FbSe3zE7oB3WVCMqqbNF2e

Thanks for your report, I see your point there in the log!
I suppose your drone flies normaly with hover thrust here. First I thought you may have vibrations or other effects like steeper motor input to thrust curve with higher throttle that leeds to control loop oscillations.
But your log seems to reveal some weird mixer limiting bug on full throttle... We need to track this down.
What do you think @Stifael ?

@MaEtUgR Yes, i'm not flying with 45deg roll, but i'm doing a test "in hands" before flying. I've upgraded my copter with ESC that have active braking feature (opposite to ordinary esc which reduce rpm via removing power and air braking) and found that engines became "clicks" when I do aggressive stick movements on full throttle. I've repeat a test without control actions and found that there are a frame orientation where there are continuous oscillations in engine control signal. My first guess was a frame resonance with engines. I've disconnect all motors but engine control oscillations  continued.

@svpcom ok, got it. Looking at the log I can see the sudden motor output dropouts with always full throttle. Currently I think it is a corner case in the multicopter mixer: https://github.com/PX4/Firmware/blob/master/src/modules/systemlib/mixer/mixer_multirotor.cpp#L215
In principle like it's implemented now it should not drop the throttle no matter what rotation input you give. But when you tilt the vehicle like in your hand held test, the attitude and rate controllers go to full rotation torque output to counteract and I bet the mixer runs into some full throttle full rotation combination of limits that is not handeled correctly.

@MaEtUgR Any news?

I've inspected this. What is happening is that the system (correctly) detects an actuator saturation and engages a recovery mixing strategy to maximize torque along the roll and pitch axes to recover the attitude. You can consider this a safety envelope that should never be reached by the top-level controller and kicks in here as the controller is making demands that are not feasible in an under-actuated system.
We could try to make the transition between normal operation and failsafe less discontinuous, but that would come at the price of either starting to interfere with the attitude controller sooner (which would deteriorate performance) or to react slower when we enter the under-actuated limit zone, which could make the system flip more easily.
That said, it will take some thought and time to do this with very likely very limited returns. If you try to do acrobatic flying the best we can do is probably to disable the mixer protection as an option. But for the normal use cases that's not what you want.

Ok, i got it. My main idea was that in case of engine dynamic braking discontinuous switch between min thrust and max thrust caused engine overheat. Can mixer saturation happens when flying on high wind condition (or braking from max horizontal speed) or it is hard to achieve in real flights ?

@svpcom if you hit the limits and in which cases heavily depends on your entire setup including vehicle size, actuation and also controller tuning. But while developing I would always expect to hit the limit because it will happen especially when you tune for high performance.
@LorenzMeier I don't see why such discontinuities would make sense if the input to the mixer is pretty smooth. The mixer should apart from the values where you hit the limit continue to distribute actuation in a different combination and not generate any steps because of limit switching with smooth input.

I suspect it is an error that was found here.

@svpcom I tried to reproduce the problem on current stable and master without success. I used a pixracer and defualt parameters (which you also had in your log for the attitude controller). I managed to get it into the limits but with a rather smooth input I could not get any extreme discontinuities like you had.
I could not find out what version you used from the log because the commit hash af8fbbffd58 is not in the main history so you probably used some custom branch that forked somewhere.
There were some fixes related to the mixer for example: https://github.com/YUNEEC/Firmware/commit/084e714f6287f0893ec838c411259b54ae735ff7
But again you have to check on which version you were.
Can you please try to reproduce this exact issue on the current master? If the error is still in there I would love to find it.

@MaEtUgR  My version is a current stable branch with small fixes related to mavlink stream (https://github.com/svpcom/Firmware/tree/eval_stable). I'll retest this issue with current master today.

Ok, thanks 👍

@svpcom Ah maybe I found it. On the current stable when I rotated in roll like you did there is a spike and when I go back again there is one in the opposite direction. Is this the same? Did you intentionally switch back and forth between the two states for your log to get these numerous steps?

@MaEtUgR In my case these were continuous oscillations (from min to max) when i hold a copter with roll ~45deg left. My setup was pixhawk v2.4.6 (EKF2 mode) + SF11/c lidar.

@MaEtUgR Got oscillations with latest master too:
http://review.px4.io/plot_app?log=1c12f28d-7e82-4747-8196-c66e77ff2db0
log got with motors enabled

@MaEtUgR any ideas?

I think I even found this issue on a different platform that I'm currently using... sorry but I didn't find the time to get to the root cause yet 😞 It's on my list and we have to fix the mixer which I'm still blaming right now.

Hi, i'm new to the community but i think i can help. It may be a controller problem, maybe wind-up. Does the problem occur if the roll rate integral term is null (MC_ROLLRATE_I=0)? I can't see in your log the controller output (the output from the controller that goes to the mixer). I believe the problem is before the mixer.

@diegoeck
The controller output is actuator_controls per axis [-1, 1]. ATTC.Roll, ATTC.Pitch, ATTC.Yaw
http://logs.uaventure.com/view/FbSe3zE7oB3WVCMqqbNF2e

Here's the same plot with the integrators (x10 for visualization). MACS = multicopter attitude control status

Well, then it seems it is something related to the mixer. When the output ATTC.Roll crosses the value 0.5 the mixer seems to be summing something. Definetly it something related with the saturation, but i can't exatly find the problem. It is also strange that MACS.RRint seems to be constant while the problem occurs.

@MaEtUgR cdd7c57dedbe5f298f04eee2cb74d5e4a81e37ba doesn't help

I just saw this in flight a few days back. I can't match up the logs, but I was flying master as of that day. I was flying really aggressively in stabilize mode. It would oscillate heavily when I commanded completely opposite responses when rolling pitching to ~45 degrees in the other direction.
Will send logs when I find them.

@mhkabir  my logs: http://review.px4.io/plot_app?log=ba03e0b6-9146-4e42-aac7-50d2ba333b2a
Was tested without props in hands in ALT_CTL mode

@MaEtUgR  @mhkabir It seems something bad happens with mixer if pitch control is near 0.5 (see at 34:20 - 34:40). May be float precision lost somewhere in mixer code when substracting 0.5 ?

@MaEtUgR any updates?

No, I'm sorry I did not find the time 😞 I know it's important.

We revised the controller and I'm closing this as stale. Please re-open if it persists on master.


Exposing specific  HTTP headers per user function API design

Context Ctx object contains a bunch of VCL_HTTP values - most of which users do not need most of the time.  Instead, we should create an individual VCL_HTTP on demand:
pub fn user_func(req: &mut RequestHeaders) {...}

This means the user needs just the request headers, and will be able to modify it as needed. We can also support readonly headers with a non-mutable reference &RequestHeaders.
Implementation
Since our macro generator does not actually have type information (it gets resolved by the compiler after macro expansion), we can only rely on name matching.  I propose we add these type aliases:
pub type RequestHeaders<'a> = HttpHeaders<'a>;
pub type RequestTopHeaders<'a> = HttpHeaders<'a>;
pub type ResponseHeaders<'a> = HttpHeaders<'a>;
pub type BackendRequestHeaders<'a> = HttpHeaders<'a>;
pub type BackendResponseHeaders<'a> = HttpHeaders<'a>;

This way macro generator will know which instance to create from the raw context, doing it just in time.

most of which users do not need most of the time.

that's quite the assessment, I feel like it's not as informed as it could be. We have plenty of vmods that will need/benefit from header access, such as cookie, headers, jwt, uri, urlplus, etc.
the main problem to solve here is that it you give access to a header struct, you can't have access to the workspace, as it's the backing store for it

I meant you don't need many of these things at the same time, i.e. most of the time you don't need all 5.
Workspace is a fair concern, thx.   Do multiple header section get backed by the same workspace, or is there a separate workspace per header?

fair angle, usually you need at most two, and half of the time, you only have access to one.
Client side share the same workspace, backend side shares another one, and the req_top part can be either the same workspace as the current request, or a completely different one


Depreciating PyGChem and redirecting users to xbpch

@darothen do you think that I can safely add a redirection note to xbpch in PyGChem's readme file?
The goal of PyGChem was to provide the minimal set of features needed to connect GEOS-Chem to the Python Scientific Stack. However,

PyGChem is not being maintained anymore, while xbpch is.
PyGChem provides the necessary tools to read the bpch format into iris cubes, while xbpch works with xarray. I think both are useful, but given that xarray will eventually implement conversion of xarray.DataArray objects to iris.cube.Cube objects, we probably don't need both features.
for GEOS-Chem's netcdf outputs, xarray can be used directly...
Besides reading files, the goal with PyGChem was also to provide a Python interface to HEMCO. But that feature has never been fully working and it perhaps makes more sense if such feature is maintained by the GC support-team.

@benbovy I think so... are there any iris users in the GEOS-Chem community? It might be worth checking with Tomás Sherwen and collaborators to see how they're using PyGChem though, and if there's sufficient demand, we may want to expedite completing the xarray->iris bridge.
I do want to note that xbpch is essentially feature-complete and so development will be sporadic. The only critical feature that it doesn't have is writing from xarray->bpch, but it doesn't seem as if this is really heavily requested at this point.

It might be worth checking with Tomás Sherwen and collaborators to see how they're using PyGChem though.

Good point. cc @tsherwen
To be clear, I don't plan to remove the PyGChem repository anytime soon, I'm just worrying that new users should use tools that are more actively maintained and that have a better defined scope (like xbpch is/has IMO).

Gotcha!
In terms of new users, the GEOS-Chem Support Team is pushing for a new set of Python-based tools (GCPy) to replace GAMAP. We had a meeting earlier this summer about what that would look like, and I think I was mostly successful in convincing the group that for most applications, users can lean directly on the scientific Python stack. So what's needed is really just (a) some thin wrappers to emulate old GAMAP functionality with this stack, and (b) extensive documentation. I built a sketch of what some of the latter might look like.
GCPy is aiming for release alongside v11-02/GCHP later this year.


An option that allows to enter only letters

It would be super useful to have an option called either stringOnly, alphabeticOnly or lettersOnly that will work similar to numericOnly, allowing to enter only letters. For example, for the name, surname, cardholder name, etc.
I'm pretty sure there is already another way to do it so could you, please, point me to it?

+1

+1


Foxit editor pro crack 2<IP_ADDRESS>84 version

Foxit editor pro crack 2<IP_ADDRESS>84 version

Foxit's all-in-one PDF editor platform is built to support users across industries and teams of any size in solving all their digital document needs. Automate repetitive manual tasks, spotlight document issues, and simplify complex PDF workflows.
Download latest version


Remove cli feature requirement

Re-organize this repository (and crate) such that people don't have to enable the "cli" feature to install the wascap binary.

I see no feature flags here


Markdown Characters Should Be Skipped When Reading Aloud

Type: Bug
Title: Markdown Characters Should Be Skipped When Reading Aloud
Description:
When reading back Markdown content, the reader currently vocalizes Markdown syntax characters such as asterisks (*) used for bold or italic text. This behavior detracts from the meaning and readability of the content. The reader should skip over Markdown characters and only vocalize the actual text content.
Steps to Reproduce:

Create a Markdown file with the following content:**Bold Text**
*Italic Text*

Use the text-to-speech feature to read the content aloud.

Expected Behavior:
The reader should vocalize:

"Bold Text"
"Italic Text"

Actual Behavior:
The reader vocalizes:

"Asterisk asterisk Bold Text asterisk asterisk"
"Asterisk Italic Text asterisk"

Environment:

Application: Github Copilot Chat
Version: [Version Number]
Operating System: Windows 11

Additional Information:
Skipping Markdown characters will improve the clarity and comprehension of the read-aloud content.

Coming from a nones screen reader user I am a non keyboard or mouse user when hearing back an article and every time it hits a word that is to be bolded it says asterix asterix then the word then asterix asterix when you're trying to understand what's being said this is very off putting.
I'm not sure how this is handled in a website for screen readers, but I would suggest that the asterix asterix be removed and the word be said in a different tone or pitch to indicate that it is bolded. This would make it easier to understand what is being said and not be so off putting when hearing it.

I still believe this is a bug by the way 👍🏻


psi4: 1.7 -> 1.8

Here is another, quite interesting Psi4 update: https://github.com/psi4/psi4/releases/tag/v1.8
Among other things, we get TD-DFT for GGA :partying_face:
However, no Psi4 release without a complete overhaul of how to handle libint ... While it now changed to standard basis function ordering, they maintain a fork with support for Boost and CMake, which is not available in upstream libint :smiling_face_with_tear: Consequently, I am now falling back to the option again to build Psi4's libint version together with Psi4, which, of course, takes forever.

now falling back to the option again to build Psi4's libint version together with Psi4, which, of course, takes forever.

It was actually pretty quick (pysisiphys actually took much longer).


Update Db2 example to Lagom 1.4.1

Update to latest stable Hibernate (5.2.15)
Update Scala to 2.12
Update Slick profile configuration
Remove Slick Extensions dependency (now part of core Slick)
Update Maven Compiler Plugin to 3.7.0
Add recommended default configuration to application.conf

Resolves #18

Some testing notes:

I had to uninstall and reinstall Db2 Developer Community Edition before I could get it to run again.
You have to quit Docker for Mac using the whale icon menu before running the installer.
There are other troubleshooting tips in their get started guide.


Intergrated powershell terminal first line not showing

Issue Type: Bug
System info
VS Code version: Code 1.40.1 (8795a9889db74563ddd43eb0a897a2384129a619, 2019-11-13T16:49:35.976Z)
OS version: Windows_NT x64 10.0.17763
Extensions disabled
Issue
When I launch the integrated terminal (not to be confused with the intergrated console we get when we install the powershell extension.) the first line (Prompt) is not being shown and the cursor starts in the middle of the terminal a little scrolled down (not right at the top like it should be). Only when I press enter does the prompt come up and then it looks normal.
Screenshot

I did another screen capture so you can see the text doesn't either start at the top of the console rather
is scrolled down.

This is a bug in Windows 10 1809, unfortunately we have no way to work around the issue so you will need to wait until you get the next version of Windows 10 (1903).
/duplicate https://github.com/Microsoft/vscode/issues/57803


Added self to CODEOWNERS + Minor update to README

Added self to CODEOWNERS
Minor update to README
Tooling version updates

Codecov Report

Merging #228 (e964da0) into main (2ffbfdf) will not change coverage.
The diff coverage is n/a.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #228   +/-   ##
=======================================
  Coverage   93.92%   93.92%
=======================================
  Files          42       42
  Lines        3591     3591
  Branches      402      402
=======================================
  Hits         3373     3373
  Misses        218      218

Components
Coverage Δ

protocol
94.90% <ø> (ø)

http-client
95.27% <ø> (ø)

http-server
90.87% <ø> (ø)


⚠ Bofrost.at has degraded performance

In ac49f10, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 1914 ms

Resolved: Bofrost.at performance has improved in 2c8746d after 15 minutes.


Add group parameter feature

Codecov Report

Merging #26 (2ce8b84) into main (4a49d3b) will increase coverage by 0.35%.
The diff coverage is 97.26%.

@@            Coverage Diff             @@
##             main      #26      +/-   ##
==========================================
+ Coverage   92.76%   93.12%   +0.35%
==========================================
  Files          11       11
  Lines         705      771      +66
==========================================
+ Hits          654      718      +64
- Misses         51       53       +2

Impacted Files
Coverage Δ

aiohttp_pydantic/oas/view.py
94.54% <ø> (ø)

aiohttp_pydantic/injectors.py
95.91% <97.10%> (+0.68%)
:arrow_up:

aiohttp_pydantic/utils.py
100.00% <100.00%> (ø)

aiohttp_pydantic/view.py
94.44% <100.00%> (+0.07%)
:arrow_up:

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 4a49d3b...2ce8b84. Read the comment docs.


Protocol VJOY

Hi,
I have a new set of GPS devices from the VJOY company (http://www.vjoycar.com/gps-tracker-battery/asset-gps-tracker.html).
They gave me the specifications of their protocol which looks pretty similar to the TK103.
Here below an extract of what seems to be useful. I can send the whole document.
I'm not an expert java developer, but I think I can develop the decoder from the TK103 one. I'd be glad to help you. Shall I do that so you could just validate and integrate it? Or do you prefer to work another way?
Xavier

Please send me the whole document (email address is in GitHub profile).

I think TK103 protocol should work for this device. Try port 5002.

I have seen some differences with TK103, mainly :

the "registration" is using command ZC01 instead of BP00
the answer to the device should be "ok"

I will try TK103 anyway this week and let you know about the results.
Thanks
2015-02-24 22:59 GMT+01:00 Anton Tananaev<EMAIL_ADDRESS>
I think TK103 protocol should work for this device. Try port 5002.
—
Reply to this email directly or view it on GitHub
https://github.com/tananaev/traccar/issues/1097#issuecomment-75855777.

Messages from the log file that you sent me are binary and do not match protocol documentation you gave me earlier.

???
I did not send you any log. The tracker is in use so I could not test it for the moment. I only gave you the protocol documentation.
I'll let you know the result of the test with the TK103 protocol as soon as the tracker is back so I can test it.

Sorry, someone else send me logs through email and mentioned this post.

No problem ;-)
Le 28 févr. 2015 21:01, "Anton Tananaev"<EMAIL_ADDRESS>a écrit
:

Sorry, someone else send me logs through email and mentioned this post.
—
Reply to this email directly or view it on GitHub
https://github.com/tananaev/traccar/issues/1097#issuecomment-76543128.

Hi!
Can you please send me this spec too. I have vjoy watch tracker and would like to recieve data by my own server.
My email is in profile. Thanks!

Documentation is sent.
I didn't have the opportunity to test the protocol as the tracker is
already in use. I'll work on it as soon as it's back.
2015-05-21 13:05 GMT+02:00 orezzz<EMAIL_ADDRESS>
Hi!
Can you please send me this spec too. I have vjoy watch tracker and would
like to recieve data by my own server.
My email is in profile. Thanks!
—
Reply to this email directly or view it on GitHub
https://github.com/tananaev/traccar/issues/1097#issuecomment-104229975.

Thank you very much!

I have at least be able to do some tests with my VJOY.
Protocol TK103 is working, even if it cannot manage all the available informations in all types of messages (as the battery level for example).
So I close this issue, thanks for your advice :)

Hi Guys, I have the T8800 GPS from Vjoycar vendor (http://www.vjoycar.com/gps-tracker-battery/GPS-Tracker-Battery.html) with the same issue of how show the battery status. I work with the version 2.11 of the traccar server.
Do you know if with the last version this issue is fixed? and if showing the battery status from GPS devices connected.
Kindly Regards.

@aponcel, please provide HEX message samples from your device for me to check if it includes battery info.

Hi Anton,
Thanks for the fast answer, here's a line for the battery status:

2015-10-29 00:03:31 DEBUG: [5002 <- <IP_ADDRESS>] - HEX:<PHONE_NUMBER>36383031303135393738352c5a4332302c3239313031352c3033303431332c332c3336322c36353533352c32353529
With the tool HEX to DEC (https://www.traccar.org/hex-decoder/) this is the result:

(864768010159785,ZC20,291015,030413,3,362,65535,255)
The protocol (http://www.vjoycar.com/Up/day_150610/Revised Protocol 150306.pdf) of vjoycar vendor saying:

1.11 Battery Level(ZC20)
(013632651491, ZC20,040613,040137,6,42,112,0)
"("            stands for packet start
"013632651491" stands for tracker ID
" ZC20"        stands for battery level command
"040613"       stands for data, 04/June/2013
"040137"       stands for time, 04:01:37, UTC time
"6"            stands for battery level, range is 0-6, 255 refers to invalid rate
"421"          stands for battery voltage, eg 4.21V, 65535 refers to invalid rate
"112"          stands for battery input voltage, eg11.2V, 65535 refers to invalid rate
"0"            stands for not installed(0) or installed(1), 255 refers to invalid rate
")"            stands for packet end
In the sample of the protocol, the status battery value is 6, for the real case is 3 but this value i can't get it in the traccar v2.11.

Do you know if is possible show this battery value in GPS device in the map or in a tooltip?

Kindly Regards
Kindly Regards

I have added support for messages with battery info. Here is a new build:
https://www.dropbox.com/s/myt68q5u7fiz49r/tracker-server-jar-with-dependencies.jar?dl=0

Hi Anton,
Thanks so much for this fix!!!, I tell you later if it works fine.

Kindly Regards

Hi Anton, I tried deploy the jar file in the server for this I made a backup of the file /opt/traccar/tracker-server.jar and replaced that file with your file tracker-server-jar-with-dependencies.jar.
cp tracker-server-jar-with-dependencies.jar /opt/traccar/tracker-server.jar
The next step is start the server:
sudo /opt/traccar/bin/traccar start
But the web interface is not started, this is the registry for the log cat /opt/traccar/logs/wrapper.log.20151102

STATUS | wrapper  | 2015/11/02 16:00:13 | --> Wrapper Started as Daemon
STATUS | wrapper  | 2015/11/02 16:00:13 | Java Service Wrapper Community Edition 64-bit 3.5.25
STATUS | wrapper  | 2015/11/02 16:00:13 |   Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
STATUS | wrapper  | 2015/11/02 16:00:13 |     http://wrapper.tanukisoftware.com
STATUS | wrapper  | 2015/11/02 16:00:13 |
STATUS | wrapper  | 2015/11/02 16:00:13 | Launching a JVM...
INFO   | jvm 1    | 2015/11/02 16:00:13 | WrapperManager: Initializing...
INFO   | jvm 1    | 2015/11/02 16:00:14 | [MLog-Init-Reporter] INFO com.mchange.v2.log.MLog - MLog clients using slf4j logging.
INFO   | jvm 1    | 2015/11/02 16:00:14 | [WrapperSimpleAppMain] INFO com.mchange.v2.c3p0.C3P0Registry - Initializing c3p0-<IP_ADDRESS> [built 16-June-2015 00:06:36 -0700; debug? true; trace: 10]
INFO   | jvm 1    | 2015/11/02 16:00:14 | [WrapperSimpleAppMain] INFO com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource - Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, dataSourceName -> z8kfsx9c1jxfrofb9rq0s|a5061b, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, forceUseNamedDriverClass -> false, identityToken -> z8kfsx9c1jxfrofb9rq0s|a5061b, idleConnectionTestPeriod -> 600, initialPoolSize -> 3, jdbcUrl -> jdbc:mysql://<IP_ADDRESS>:3306/traccar?allowMultiQueries=true&autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8&sessionVariables=sql_mode=ANSI_QUOTES, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 15, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, numHelperThreads -> 3, preferredTestQuery -> null, privilegeSpawnedThreads -> false, properties -> {user=, password=}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> true, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ]
Here's other log:

root@traccarfix:/opt/traccar# cat /opt/traccar/logs/tracker-server.log
2015-11-02 15:29:41  INFO: Starting server...
2015-11-02 15:29:41  INFO: Operating System name: Linux version: 3.16.0-30-generic architecture: amd64
2015-11-02 15:29:41  INFO: Java Runtime name: OpenJDK 64-Bit Server VM vendor: Oracle Corporation version: 24.85-b03
2015-11-02 15:29:41  INFO: Memory Limit heap: 481mb non-heap: 214mb
2015-11-02 15:29:41  INFO: Version: 2.11-SNAPSHOT
2015-11-02 15:33:35  INFO: Shutting down server...
2015-11-02 15:37:40  INFO: Starting server...
2015-11-02 15:37:40  INFO: Operating System name: Linux version: 3.16.0-30-generic architecture: amd64
2015-11-02 15:37:40  INFO: Java Runtime name: OpenJDK 64-Bit Server VM vendor: Oracle Corporation version: 24.85-b03
2015-11-02 15:37:40  INFO: Memory Limit heap: 481mb non-heap: 214mb
2015-11-02 15:37:40  INFO: Version: 2.11-SNAPSHOT
2015-11-02 15:38:18  INFO: Shutting down server...
2015-11-02 15:38:40  INFO: Starting server...
2015-11-02 15:38:40  INFO: Operating System name: Linux version: 3.16.0-30-generic architecture: amd64
2015-11-02 15:38:40  INFO: Java Runtime name: OpenJDK 64-Bit Server VM vendor: Oracle Corporation version: 24.85-b03
2015-11-02 15:38:40  INFO: Memory Limit heap: 481mb non-heap: 214mb
2015-11-02 15:38:40  INFO: Version: 2.11-SNAPSHOT
2015-11-02 15:40:02  INFO: Shutting down server...
2015-11-02 15:49:57  INFO: Starting server...
2015-11-02 15:49:57  INFO: Operating System name: Linux version: 3.16.0-30-generic architecture: amd64
2015-11-02 15:49:57  INFO: Java Runtime name: OpenJDK 64-Bit Server VM vendor: Oracle Corporation version: 24.85-b03
2015-11-02 15:49:57  INFO: Memory Limit heap: 481mb non-heap: 214mb
2015-11-02 15:49:57  INFO: Version: 2.11-SNAPSHOT
2015-11-02 15:50:51  INFO: Shutting down server...
2015-11-02 15:51:56  INFO: Starting server...
2015-11-02 15:51:56  INFO: Operating System name: Linux version: 3.16.0-30-generic architecture: amd64
2015-11-02 15:51:56  INFO: Java Runtime name: OpenJDK 64-Bit Server VM vendor: Oracle Corporation version: 24.85-b03
2015-11-02 15:51:56  INFO: Memory Limit heap: 481mb non-heap: 214mb
2015-11-02 15:51:56  INFO: Version: 2.11-SNAPSHOT
2015-11-02 15:55:29  INFO: Shutting down server...
2015-11-02 15:56:50  INFO: Starting server...
2015-11-02 15:56:50  INFO: Operating System name: Linux version: 3.16.0-30-generic architecture: amd64
2015-11-02 15:56:50  INFO: Java Runtime name: OpenJDK 64-Bit Server VM vendor: Oracle Corporation version: 24.85-b03
2015-11-02 15:56:50  INFO: Memory Limit heap: 481mb non-heap: 214mb
2015-11-02 15:56:50  INFO: Version: 2.11-SNAPSHOT
2015-11-02 15:58:46  INFO: Shutting down server...
2015-11-02 16:00:14  INFO: Operating system name: Linux version: 3.16.0-30-generic architecture: amd64
2015-11-02 16:00:14  INFO: Java runtime name: OpenJDK 64-Bit Server VM vendor: Oracle Corporation version: 24.85-b03
2015-11-02 16:00:14  INFO: Memory limit heap: 481mb non-heap: 214mb
2015-11-02 16:00:14  INFO: Character encoding: UTF-8 charset: UTF-8
2015-11-02 16:00:14  INFO: Version: null
2015-11-02 16:00:14  INFO: Query not provided: database.createSchema
2015-11-02 16:00:14  INFO: Query not provided: database.insertUser
2015-11-02 16:00:14  INFO: Query not provided: database.insertServer
2015-11-02 16:00:14  INFO: Query not provided: database.selectLatestPositions
2015-11-02 16:00:15  INFO: Starting server...
I hope you can help me with this.
Kindly Regards

It looks like Traccar can't connect to the database.

Hi Anton,
Uhmm let's stated.

Traccar Server Status

root@traccarfix:/opt/traccar# /opt/traccar/bin/traccar status
traccar is running: PID:14536, Wrapper:STARTED, Java:STARTED

Traccar Configuration

root@traccarfix:/opt/traccar# cat /opt/traccar/conf/traccar.cfg

<!-- Global configuration -->
<entry key='database.driver'>com.mysql.jdbc.Driver</entry>
<entry key='database.url'>jdbc:mysql://<IP_ADDRESS>:3306/traccar?allowMultiQueries=true&autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8&sessionVariables=sql_mode=ANSI_QUOTES</entry>
<entry key='database.user'>admin</entry>
<entry key='database.password'>admin</entry>

<!-->
    id - Long
    imei - String
<-->
<entry key='database.selectDevice'>
    SELECT id, uniqueId as imei
    FROM devices;
</entry>

<!-->
    device_id - Long
    time - Date
    valid - Boolean
    latitude - Double
    longitude - Double
    speed - Double
    course - Double
    power - Double (NULL for some protocols)
    extended_info - String (XML)
<-->
<entry key='database.insertPosition'>
    INSERT INTO positions (device_id, time, valid, latitude, longitude, altitude, speed, course, power, address, other)
    VALUES (:device_id, :time, :valid, :latitude, :longitude, :altitude, :speed, :course, :power, :address, :extended_info);
</entry>

<!-->
    device_id - Long
    id - Long
<-->
<entry key='database.updateLatestPosition'>
    UPDATE devices SET latestPosition_id = :id WHERE id = :device_id;
</entry>

<!-- Web interface -->
<entry key='http.enable'>true</entry>
<!--<entry key='http.address'></entry>-->
<entry key='http.port'>8082</entry>
<entry key='http.application'>/opt/traccar/traccar-web.war</entry>

<!-- Geocoder options -->
<entry key='geocoder.enable'>false</entry>
<entry key='geocoder.type'>nominatim</entry>
<entry key='geocoder.url'>http://nominatim.openstreetmap.org/reverse</entry>

<!-- Filtering options -->
<!--<entry key='filter.enable'>true</entry>
<entry key='filter.limit'>3600</entry>
<entry key='filter.invalid'>true</entry>
<entry key='filter.zero'>true</entry>
<entry key='filter.duplicate'>true</entry>
<entry key='filter.distance'>50</entry>-->

<!-- Logging options -->
<entry key='logger.enable'>true</entry>
<entry key='logger.level'>all</entry>
<entry key='logger.file'>/opt/traccar/logs/tracker-server.log</entry>

<!-- Protocol detector -->
<entry key='detector.enable'>true</entry>
<entry key='detector.port'>5000</entry>

...

Database Status and connection

root@traccarfix:/opt/traccar# service mysql status

/usr/bin/mysqladmin  Ver 9.0 Distrib 5.5.44-MariaDB, for debian-linux-gnu on x86_64
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Server version          5.5.44-MariaDB-1ubuntu<IP_ADDRESS>
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/run/mysqld/mysqld.sock
Uptime:                 1 hour 38 min 54 sec
Threads: 4  Questions: 1083  Slow queries: 0  Opens: 99  Flush tables: 2  Open tables: 50  Queries per second avg: 0.182
root@traccarfix:/opt/traccar# mysql -uadmin -padmin -h<IP_ADDRESS>
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 653
Server version: 5.5.44-MariaDB-1ubuntu<IP_ADDRESS> (Ubuntu)
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| traccar            |
+--------------------+
4 rows in set (0.00 sec)
MariaDB [(none)]> use traccar;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [traccar]> show tables;
+-----------------------+
| Tables_in_traccar     |
+-----------------------+
| application_settings  |
| devices               |
| events                |
| notification_settings |
| positions             |
| ui_state              |
| user_settings         |
| users                 |
| users_devices         |
+-----------------------+
9 rows in set (0.00 sec)
MariaDB [(none)]> quit
Bye
root@traccarfix:/opt/traccar#

Conectivity with port 8082 (Failed)

root@traccarfix:/opt/traccar# telnet <IP_ADDRESS> 8082
Trying <IP_ADDRESS>...
telnet: Unable to connect to remote host: Connection refused
root@traccarfix:/opt/traccar#
I think all fine, the traccar service it´s started but I dont know it may be happening.
Do you have any idea?
Kindly Regards

I'm pretty sure that the problem is with database connection. I would recommend to try with original H2 database and see if it works.

Hi Anton, Thanks for you help!!!, Well I tried with the H2 database, but the result its the same.

Traccar configuration file

root@traccarfix:/opt/traccar/conf# cat /opt/traccar/conf/traccar.cfg

<!-- Global configuration -->
<entry key='database.driver'>org.h2.Driver</entry>
<entry key='database.url'>jdbc:h2:/opt/traccar/data/database</entry>
<entry key='database.user'>sa</entry>
<entry key='database.password'></entry>

<!-->
    id - Long
    imei - String
<-->
<entry key='database.selectDevice'>
    SELECT id, uniqueId as imei
    FROM devices;
</entry>

<!-->
    device_id - Long
    time - Date
    valid - Boolean
    latitude - Double
    longitude - Double
    speed - Double
    course - Double
    power - Double (NULL for some protocols)
    extended_info - String (XML)
<-->
<entry key='database.insertPosition'>
    INSERT INTO positions (device_id, time, valid, latitude, longitude, altitude, speed, course, power, address, other)
    VALUES (:device_id, :time, :valid, :latitude, :longitude, :altitude, :speed, :course, :power, :address, :extended_info);
</entry>

<!-->
    device_id - Long
    id - Long
<-->
<entry key='database.updateLatestPosition'>
    UPDATE devices SET latestPosition_id = :id WHERE id = :device_id;
</entry>

<!-- Web interface -->
<entry key='http.enable'>true</entry>
<!--<entry key='http.address'></entry>-->
<entry key='http.port'>8082</entry>
<entry key='http.application'>/opt/traccar/traccar-web.war</entry>

...

Traccar Log

root@traccarfix:# cat  /opt/traccar/logs/wrapper.log.20151102
STATUS | wrapper  | 2015/11/02 17:55:07 | --> Wrapper Started as Daemon
STATUS | wrapper  | 2015/11/02 17:55:07 | Java Service Wrapper Community Edition 64-bit 3.5.25
STATUS | wrapper  | 2015/11/02 17:55:07 |   Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
STATUS | wrapper  | 2015/11/02 17:55:07 |     http://wrapper.tanukisoftware.com
STATUS | wrapper  | 2015/11/02 17:55:07 |
STATUS | wrapper  | 2015/11/02 17:55:07 | Launching a JVM...
INFO   | jvm 1    | 2015/11/02 17:55:07 | WrapperManager: Initializing...
INFO   | jvm 1    | 2015/11/02 17:55:07 | [MLog-Init-Reporter] INFO com.mchange.v2.log.MLog - MLog clients using slf4j logging.
INFO   | jvm 1    | 2015/11/02 17:55:07 | [WrapperSimpleAppMain] INFO com.mchange.v2.c3p0.C3P0Registry - Initializing c3p0-<IP_ADDRESS> [built 16-June-2015 00:06:36 -0700; debug? true; trace: 10]
INFO   | jvm 1    | 2015/11/02 17:55:08 | [WrapperSimpleAppMain] INFO com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource - Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, dataSourceName -> z8kfsx9c1k1jixe1uuuzz9|18244c45, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> org.h2.Driver, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, forceUseNamedDriverClass -> false, identityToken -> z8kfsx9c1k1jixe1uuuzz9|18244c45, idleConnectionTestPeriod -> 600, initialPoolSize -> 3, jdbcUrl -> jdbc:h2:/opt/traccar/data/database, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 15, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, numHelperThreads -> 3, preferredTestQuery -> null, privilegeSpawnedThreads -> false, properties -> {user=, password=}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> true, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ]
When recover the backup file "tracker-server.jar" and I tried connect with MySQL or H2 and the server works fine with this I can access perfect for web page, maybe I need other step for the correct deploy.
For this I only assumed that's the correct form (replace the tracker-server.jar with the new file attached in dropbox)
Best Regards

What version of Traccar did you have before? I just realized that you have an old one. You need to install version 3.1 first and then replace JAR file with the one I provided.

Upss!!!, the test was made in the traccar 2.11, because I have a production server with this version (25 GPS connected).
but what do you think,  it's a good idea migrate to the last version? or I can get this fix for version 2.11?
Thank very much for you help, I wait you answer because is very important for me.
Best Regards

Migration is not that easy if you want to use new web interface, but it's fairly simple if you want to continue using old web interface. In the long term, I guess you would have to update eventually.
Some more info about upgrading:
https://www.traccar.org/update-from-2-x-to-3-0/
https://www.traccar.org/update-from-3-0-to-3-1/

Anton Thanks for you answer!!!, now I deployed the fix in traccar 3.1 and work fine!!!, I tell you the result.
The GPS device send this information
2015-11-03 11:54:13 DEBUG: [084FB14B: 5002 < <IP_ADDRESS>] HEX:<PHONE_NUMBER>36383031303135393738352c5a4330372c3033313131352c412c333332362e3538373431532c30373033372e3931373036572c302e3138362c3134353431322c3030302e3029283836343736383031303135393738352c5a4332302c3033313131352c3134353433312c322c3334322c36353533352c32353529
2015-11-03 11:54:14  INFO: [084FB14B] id: 7, time: Tue Nov 03 11:49:16 CLT 2015, lat: -33.4432345, lon: -70.632099, speed: 0.05399570000000001, course: 0.0
2015-11-03 11:54:14  INFO: [084FB14B] id: 7, time: Tue Nov 03 11:54:12 CLT 2015, lat: -33.4431235, lon: -70.631951, speed: 0.05399570000000001, course: 0.0
The package contains this information (HEX --> DEC)

HEX
DECIMAL

283836343736383031303135393738352c5a4330372c3033313131352c412c333332362e3538373431532c30373033372e3931373036572c302e3138362c3134353431322c3030302e3029283836343736383031303135393738352c5a4332302c3033313131352c3134353433312c322c3334322c36353533352c32353529
(864768010159785,ZC07,031115,A,3326.58741S,07037.91706W,0.186,145412,000.0)(864768010159785,ZC20,031115,145431,2,342,65535,255)

In the database I see this
root@traccar31:~# mysql -uadmin -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 51
Server version: 5.5.44-MariaDB-1ubuntu<IP_ADDRESS> (Ubuntu)
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> use traccar;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [traccar]> SELECT
-> id,
-> protocol,
-> servertime,
-> fixtime,
-> latitude,
-> longitude,
-> other
-> FROM position
-> WHERE
-> deviceid = 7
-> AND servertime = '2015-11-03 11:54:14';
+----+----------+---------------------+---------------------+----------+-----------+----------------------------------------------------------+
| id | protocol | servertime          | fixtime             | latitude | longitude | other                                                    |
+----+----------+---------------------+---------------------+----------+-----------+----------------------------------------------------------+
| 62 | tk103    | 2015-11-03 11:54:14 | 2015-11-03 11:49:16 | -33.4432 |  -70.6321 | 342<IP_ADDRESS> |
| 63 | tk103    | 2015-11-03 11:54:14 | 2015-11-03 11:54:12 | -33.4431 |   -70.632 | <IP_ADDRESS>                       |
+----+----------+---------------------+---------------------+----------+-----------+----------------------------------------------------------+
2 rows in set (0.00 sec)
MariaDB [traccar]>
In the column "other" contains the data of battery, thats great!!! but we can get more data about batterry because we have a only data of charge of the batterry (Voltage).
The protocol contains more data.
(864768010159785,
ZC20,
031115,
145431,
2,					--> Battery Level (1 to 6)
342,				--> Battery Voltage (V)
65535,				--> Input Voltage Battery (V)
255)
In this case we only have the Battery Voltage (V) in the column "other".
You can help me with add this values in the fix?

[ ] 2,         --> Battery Level (1 to 6)
[x] 342,	    --> Battery Charge Voltage (V)
[ ] 65535, --> Input Voltage Battery (V)

Ohh! I forgot ask you if in traccar 3.1 I can see the battery information in the panel status how parametre? (with the information the column other)
Really thank for all!!!! :blush::blush::blush:
Best Regards

Input voltage is already supported. Value 65535 means no value, so it's ignored in your case.
As for battery level, what's the point of having both level and voltage and what does level mean?

Hi Anton, in the documentation protocol of the (GPS http://www.vjoycar.com/Up/day_150610/Revised Protocol 150306.pdf) say the value 65535 is invalid range but the GPS sent other values how you can see now:
1.11 Battery Level(ZC20)
“112”  stands for battery input voltage, eg11.2V，65535 refers to invalid rate
Just in this case I get a bad info for the example, but I ask you this fix? the answer is because that GPS have a input to connect to dynamo and here's geting power and with this value I can know the bad dynamo.

Now the level battery is effective for threshold of monitoring.

Level
Charge

6
100%

5
83%

4
66%

3
50%

2
33%

1
16%

The formule is:
((<level_battery>*100)/6)
I hope I responded. :smiley: :smiley: :smiley:
Best Regards

If you don't see the value, it means it's invalid.
I will think about the battery level, but it seems like redundant information as level is calculated based on the voltage anyway.

OK, that's right!!! thanks for your help!!! but I needed the input volt for monitoring the dynamos.
I think do you have a lot of work and issues that waiting for you and I understand your if you not can help me with this.
Really thanks for all!!!
Best Regards.

Input Voltage is already supported.

Hi anton
I want to use your tracker-server-with-dependencies.jar file to display the battery level of my Vjoy gps tracker in my traccar server but I have a few question about this.
I need to replace the C:\Program Files (x86)\Traccar\traccar-server.jar with traccar-server-with-dependencies.jar or what I need to do?
By the way, my Vjoy tracker use tk103 protocol.
I hope you can help me.

@jcroman-itch, you can just use version 3.2. It already includes the changes.

Thanks for the reply Anton.
It's strange because I already use the version 3.2 but the battery level is not displayed.
The HEX file is
283836343736383031303532323230362c425030352c3139313231352c412c323833382e38323836304e2c31303630312e3237333032572c302e3033392c3137333735322c3030302e3029283836343736383031303532323230362c425030352c3139313231352c412c323833382e38333036394e2c31303630312e3237343630572c322e3930322c3137333830322c3335312e323629283836343736383031303532323230362c425030352c3139313231352c412c323833382e38323930384e2c31303630312e3237373436572c342e3033302c3137333831322c3231392e393829283836343736383031303532323230362c425030352c3139313231352c412c323833382e38313233324e2c31303630312e3239333830572c31302e3539302c3137333832322c3230372e313229283836343736383031303532323230362c425030352c3139313231352c412c323833382e37393037354e2c31303630312e3330393131572c362e3435322c3137333833322c3233362e313129283836343736383031303532323230362c425030352c3139313231352c412c323833382e37393937394e2c31303630312e3334303739572c31352e3032392c3137333834322c3239382e383229.
You think is device problem?

That's because your device doesn't send battery information.

Ok anton, thanks for your help.


sql: support max/min aggregates on collated strings

PR: https://github.com/cockroachdb/cockroach/pull/49530
From release notes:

Added support for the max/min aggregation functions on collated strings. [#49530][#49530] {% comment %}doc{% endcomment %}

This is already documented.