Update dependency symfony/console to v6.2.2

This PR contains the following updates:

Package
Type
Update
Change

symfony/console (source)
require
patch
6.2.1 -> 6.2.2

Release Notes

symfony/console
v6.2.2
Compare Source
Changelog (https://github.com/symfony/console/compare/v6.2.1...v6.2.2)

bug #48681 Revert "bug #48089  Fix clear line with question in section (maxbeckers) (chalasr)
bug #48580 Fix missing command not matching namespace error message (Titouan Galopin)
bug #48089 Fix clear line with question in section (maxbeckers)

Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.

[ ] If you want to rebase/retry this PR, check this box

This PR has been generated by Renovate Bot.

⚠ Artifact update problem
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

any of the package files in this branch needs updating, or
the branch becomes conflicted, or
you click the rebase/retry checkbox if found above, or
you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:
File name: composer.lock
Command failed: docker run --rm --name=renovate_sidecar --label=renovate_child -v "/tmp/renovate/repos/github/renovate-reproductions/symfony-flex-backend":"/tmp/renovate/repos/github/renovate-reproductions/symfony-flex-backend" -v "/tmp/renovate/cache":"/tmp/renovate/cache" -v "/tmp/containerbase":"/tmp/containerbase" -e COMPOSER_CACHE_DIR -e COMPOSER_AUTH -e BUILDPACK_CACHE_DIR -e CONTAINERBASE_CACHE_DIR -w "/tmp/renovate/repos/github/renovate-reproductions/symfony-flex-backend" docker.io/renovate/sidecar bash -l -c "install-tool php 8.2.0 && install-tool composer 2.5.0 && git stash -- composer.json && composer install --ignore-platform-req='ext-*' --ignore-platform-req='lib-*' --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins && git stash pop && composer update symfony/console --with-dependencies --ignore-platform-req='ext-*' --ignore-platform-req='lib-*' --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins"
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
fatal: detected dubious ownership in repository at '/tmp/renovate/repos/github/renovate-reproductions/symfony-flex-backend'
To add an exception for this directory, call:

	git config --global --add safe.directory /tmp/renovate/repos/github/renovate-reproductions/symfony-flex-backend


Make readRegister and writeRegister public so error checking is possible

I find it useful to use readRegister to check if the device was initialized properly, since otherwise some errors can sneak by undetected.

 Thanks.


[4.0.0b1] Editor features stopped working properly

After the last system upgrade some features stopped working properly in the editor.
E.g. "mooving line up" now deletes the lines, "duplicate line" doesn't work etc.
What can be the reason for that?
Spyder 4.0.0b1
pyflakes >=0.5.0  :  2.1.1 (OK)
pycodestyle >=2.3 :  2.5.0 (OK)
pygments >=2.0    :  2.4.2 (OK)
sphinx >=0.6.6    :  1.7.7 (OK)
rope >=0.9.4      :  0.14.0 (OK)
jedi >=0.11.0     :  0.13.3 (OK)
psutil >=0.3      :  5.4.7 (OK)
nbconvert >=4.0   :  5.4.0 (OK)
pandas >=0.13.1   :  0.24.1 (OK)
numpy >=1.7       :  1.16.4 (OK)
sympy >=0.7.3     :  1.4 (OK)
cython >=0.21     :  0.29.2 (OK)
qtconsole >=4.2.0 :  4.4.1 (OK)
IPython >=4.0;<6.0:  5.5.0 (OK)
matplotlib >=2.0.0:  2.2.4 (OK)

Spyder 4.0.0b1 is no longer supported. Please update to b3 and try again.
Besides, how did you install Spyder?

I installed it with pip...
Ok, closing the issue, then.

Checked on b3 -- the same issue.
Additionally, some magic commands in qtconsole hang it, e.g "ls".

Please read our
https://github.com/spyder-ide/spyder/wiki/Troubleshooting-Guide-and-FAQ
If you are unable to fix the problem after that, please install Anaconda instead. Unfortunately, we don't have the resources nor the time to help people with custom installations, so it's up to you to figure this one out.
This is because custom installations are for experts or very knowledgeable people who really know what they are doing and are able to easily solve problems like this.

The solution was to downgrade pyqt5 back to 5.12.3-2

We still don't support PyQt 5.13, and that's clearly declared in our setup.py. So I don't know how you ended up with it.


fixed bug in score.R and added info to FAQ

@percyfal I found and fixed quite a few bugs in the score.R script. Looks like after another modification of the authentic.smk, the score.R was not modified accordingly so the scoring system was not working correctly for some period. I also tried to replace paste0 with file.path where possible without too much fiddling with the code as I am not entirely sure about the behavior of file.path in contrast to paste0. Hope it is ok for now, and I will try to switch more and more to file.path in the future


Add some more calendars routes

We have these routes in router-api, which look a bit weird:
[#<Route _id: 5277d004fa5ee55bbe000018, created_at: nil, updated_at: nil, incoming_path: "/bank-holidays.json", route_type: "exact", handler: "backend", disabled: false, backend_id: "calendars", redirect_to: nil, redirect_type: nil, segments_mode: nil>,
 #<Route _id: 5277d004fa5ee55bbe000019, created_at: nil, updated_at: nil, incoming_path: "/gwyliau-banc", route_type: "prefix", handler: "backend", disabled: false, backend_id: "calendars", redirect_to: nil, redirect_type: nil, segments_mode: nil>,
 #<Route _id: 5277d004fa5ee55bbe00001a, created_at: nil, updated_at: nil, incoming_path: "/gwyliau-banc.json", route_type: "exact", handler: "backend", disabled: false, backend_id: "calendars", redirect_to: nil, redirect_type: nil, segments_mode: nil>,
 #<Route _id: 5277d004fa5ee55bbe00001c, created_at: nil, updated_at: nil, incoming_path: "/when-do-the-clocks-change.json", route_type: "exact", handler: "backend", disabled: false, backend_id: "calendars", redirect_to: nil, redirect_type: nil, segments_mode: nil>]

No created_at or updated_at?  Do these routes predate our current way of doing things?  They're definitely not in the content items.

Trello card

Hmm, I've got myself a bit confused by this.  Publishing with the cy locale got me this:
{"request_uri":"http://publishing-api.dev.gov.uk/v2/content/58f79dbd-e57f-4ab2-ae96-96df5767d1b2/publish","start_time":1588587884.789642,"status":409,"end_time":1588587884.9564757,"body":"{\"error\":{\"code\":409,\"message\":\"Cannot publish an already published edition\",\"fields\":{}}}"}

So I came up with a new content id, and got this:
{"error":{"code":404,"message":"Item with content_id 1cf6dcbc-4bb9-4f64-b964-d37b8d05fc7b and locale en does not exist","fields":{}}}

I'll keep digging

Alright, managed to get this working on integration


Add basic project generation test in CI/CD

The release of Spin 0.5.0 is incompatible with the current version of the templates. We should have spotted that before releasing it. To ensure we don't publish a version that can't even generate a project, we need to add a basic project generation test in Spin's CI/CD.

Done in #74, the templates CI/CD will now be in the spin repository.


Get rid of ipxe/ names in the binaries offered up for tftp and http boot

Description
Changes the binary names from ipxe/$name to just $name. Fixes #223
Why is this needed
The filenames recently changed as part of #216 which was a great feature. Unfortunately old UEFI nic fw does not agree. When tested against some of the EM uefi machines (c2.large.arm) they failed to boot. The machines did not even attempt to tftp the file.
How Has This Been Tested?
CI only so far, will be tested against the previously failing machines tomorrow.
How are existing users impacted? What migration steps/scripts do we need?
Not a real big impact, just that the file names won't be so easy to find when looking at tftp or http boot logs.
Checklist:
I have:

[ ] updated the documentation and/or roadmap (if required)
[x] added unit or e2e tests
[ ] provided instructions on how to upgrade

What work is required to push this PR past the draft state?

Not a real big impact, just that the file names won't be so easy to find when looking at tftp or http boot logs.

Could we enrich the log messages to make them easier to search?

What work is required to push this PR past the draft state?

I'm testing this using the sandbox to spin up arm machines (based off of https://github.com/mmlb/sandbox/tree/fix-terraform-and-add-arm64-support) I only just got it to work around EoD last friday. I was able to reproduce the issue in my sandbox setup but this branch did not actually work either. I've yet to examine a tcpdump of good vs bad to ensure things are as expected. So still need some more testing/debugging of this branch.

This is not the issue with #225 and is unnecessary


get_fars(years = 2012) fails with "Error in file(con, "r") : invalid 'description' argument"

In vignettes/Counts.Rmd, the first download fails for both 2012 & 2013 for me, with the above error.
2014 works fine.

This is because these two years have corrupt SAS format catalog files. The workaround had a bug but it has been fixed.


signal arrived during cgo execution at rocksdb_options_create

My Program crashes immediately at start.
In init function I call
gorocksdb.NewDefaultOptions()

SIGILL: illegal instruction
PC=0x7f60fd0b2b82
signal arrived during cgo execution
goroutine 1 [syscall, locked to thread]:
runtime.cgocall_errno(0x40ef4b, 0xc2080b5d80, 0x0)
/usr/local/go/src/runtime/cgocall.go:130 +0xf5 fp=0xc2080b5d60 sp=0xc2080b5d38
github.com/tecbot/gorocksdb._Cfunc_rocksdb_options_create(0x0)
github.com/tecbot/gorocksdb/_obj/_cgo_gotypes.go:690 +0x4d fp=0xc2080b5d80 sp=0xc2080b5d60
github.com/tecbot/gorocksdb.NewDefaultOptions(0xc208036008)
/src/github.com/tecbot/gorocksdb/options.go:71 +0x1f fp=0xc2080b5da8 sp=0xc2080b5d80
store/engine/rocksdb.createNewDb(0x0, 0x0, 0x0, 0x0)

I tried with go 1.4.3 and go 1.5.2
I am not using an embedded version.
I downloaded rocksdb 4.1 and ran
make static_lib
make shared_lib
I am at commit 762103f from Nov 1, 2015

Got it working with
PORTABLE=1 make static_lib
PORTABLE=1 make shared_lib
I am using amazon linux 2015.09 64 bit.
Before I had built RocksDB on a T2.Nano machine (x86 GenuineIntel Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz)
and copied the files to C3.Xlarge machine (x86 GenuineIntel Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz)


SSL_MODE option not behaving correctly with Mysql 5.7

Setup
Versions

Rust: cargo 1.75.0
Diesel: 2.1.4
Database: Mysql 5.7
Operating System: macOS 14.2.1

Feature Flags

diesel: mysql

Problem Description
When using ssl_mode=DISABLED in the connection string, the mode is not passed to mysql or is ignored
What are you trying to accomplish?
Connect to Mysql 5.7 database with ssl_mode disabled
What is the expected output?
The connection to succeed
What is the actual output?
SSL connection error: error:0A000102:SSL routines::unsupported protocol
Are you seeing any additional errors?
The following trace is gotten by
 MysqlConnection::establish(&database_url)
        .unwrap_or_else(|_| panic!("Error connecting to {}", database_url))

Error connecting to mysql://root:changeit@<IP_ADDRESS>/northwind?ssl_mode=DISABLED

stack backtrace:
   0:        0x104769844 - std::backtrace_rs::backtrace::libunwind::trace::h2966c6fbfac9d426
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/../../backtrace/src/backtrace/libunwind.rs:104:5
   1:        0x104769844 - std::backtrace_rs::backtrace::trace_unsynchronized::h8a5f4aefe890b7c5
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:        0x104769844 - std::sys_common::backtrace::_print_fmt::h7574dd98fd39c257
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/sys_common/backtrace.rs:67:5
   3:        0x104769844 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h298c9ab285ff3934
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/sys_common/backtrace.rs:44:22
   4:        0x10477fff8 - core::fmt::rt::Argument::fmt::hf9661447f7b99899
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/fmt/rt.rs:142:9
   5:        0x10477fff8 - core::fmt::write::h4e276abdb6d0c2a1
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/fmt/mod.rs:1120:17
   6:        0x104767f44 - std::io::Write::write_fmt::hd421848f5f0bf9d0
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/io/mod.rs:1762:15
   7:        0x104769680 - std::sys_common::backtrace::_print::h09e653c6686dbd70
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/sys_common/backtrace.rs:47:5
   8:        0x104769680 - std::sys_common::backtrace::print::hd8bd9ecab1f94b94
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/sys_common/backtrace.rs:34:9
   9:        0x10476aaa0 - std::panicking::default_hook::{{closure}}::h520eeb743fc98fb4
  10:        0x10476a7e8 - std::panicking::default_hook::ha6550ffe49b63df1
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panicking.rs:292:9
  11:        0x10476aec8 - std::panicking::rust_panic_with_hook::hddb0e884a202de7c
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panicking.rs:779:13
  12:        0x10476adc8 - std::panicking::begin_panic_handler::{{closure}}::hd2798398a2fd9077
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panicking.rs:657:13
  13:        0x104769cac - std::sys_common::backtrace::__rust_end_short_backtrace::h9201cc364dbb8a23
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/sys_common/backtrace.rs:170:18
  14:        0x10476ab64 - rust_begin_unwind
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panicking.rs:645:5
  15:        0x104789728 - core::panicking::panic_fmt::h4d5168028d4c43c7
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/panicking.rs:72:14
  16:        0x1046d2a5c - rusttest::establish_connection::{{closure}}::ha7f7982614e6afcb
                               at /Users/toniiltanen/rusttest/src/lib.rs:13:29
  17:        0x1046d28d4 - core::result::Result<T,E>::unwrap_or_else::h05e8fc6f6a7b10f4
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/result.rs:1430:23
  18:        0x1046d2bb4 - rusttest::establish_connection::hbe5b06d199bedfb3
                               at /Users/toniiltanen/rusttest/src/lib.rs:12:5
  19:        0x1046c3f74 - show_customers::main::h77b66616093fa3b5
                               at /Users/toniiltanen/rusttest/src/bin/show_customers.rs:8:27
  20:        0x1046c49b0 - core::ops::function::FnOnce::call_once::h6b86f42d8ff9f8cc
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/ops/function.rs:250:5
  21:        0x1046ccaf8 - std::sys_common::backtrace::__rust_begin_short_backtrace::h85e08f78cd4b0e8a
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/sys_common/backtrace.rs:154:18
  22:        0x1046c5aa0 - std::rt::lang_start::{{closure}}::h6fa5e7dccb92eef9
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/rt.rs:167:18
  23:        0x1047654c0 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h1a7c0e059d971da5
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/ops/function.rs:284:13
  24:        0x1047654c0 - std::panicking::try::do_call::h07a34a23e615022b
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panicking.rs:552:40
  25:        0x1047654c0 - std::panicking::try::h1111644420b4cc09
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panicking.rs:516:19
  26:        0x1047654c0 - std::panic::catch_unwind::h31a3b9d6e2ef9973
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panic.rs:142:14
  27:        0x1047654c0 - std::rt::lang_start_internal::{{closure}}::h63c3452500a36531
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/rt.rs:148:48
  28:        0x1047654c0 - std::panicking::try::do_call::h9c5c8a2a0a297bb7
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panicking.rs:552:40
  29:        0x1047654c0 - std::panicking::try::h424cfcafca1bde97
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panicking.rs:516:19
  30:        0x1047654c0 - std::panic::catch_unwind::h345d3d448041017f
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panic.rs:142:14
  31:        0x1047654c0 - std::rt::lang_start_internal::h5b246d44f1526226
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/rt.rs:148:20
  32:        0x1046c5a6c - std::rt::lang_start::h4d3609599c289f9d
                               at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/rt.rs:166:17
  33:        0x1046c4314 - _main

In this photo the results are demostrated:

the failed use of diesel setup with ssl mode on the connection string env variable
the failed use of diesel setup with connection string as the cli parameter
the successful use of mysql cli with ssl mode set to disabled

Steps to reproduce
Install Docker image stackupiss/northwind-db:v1, and try to connect.
The connection succeeds with mysql cli with the --ssl-mode parameter, but not with diesel and the parameter on the connection string
Checklist

[ x] I have already looked over the issue tracker and the discussion forum for similar possible closed issues.

[ x] This issue can be reproduced on Rust's stable channel. (Your issue will be
closed if this is not the case)
[ x] This issue can be reproduced without requiring a third party crate

Using the provided issue template is mandatory. Please update your issue description to follow the template.

@weiznich I updated the issue

Might be related to #3996


Update the @zk-kit/artifacts package and set the new CDN URL as the default one

@cedoor should we move on with implementing a client side solution (that we would remove when the backend solution is implemented https://github.com/privacy-scaling-explorations/snark-artifacts/issues/95)?
Or should we wait for https://github.com/privacy-scaling-explorations/snark-artifacts/issues/95 to be solved first?

Looks like the "latest" URLs are working. Does it make sense to move on with them?

Based on my benchmark, using snark-artifacts.pse.dev as default downloading url would degrade performance. See https://github.com/privacy-scaling-explorations/snark-artifacts/pull/96
let's wait for Nick's feedback to see if we can improve that.


Arduino IDE compability

i am desperate to get this to the Arduino IDE, but i get a huge list of errors when compiling and i can't figure it out due to lack of knowing lvgl well enough... perhaps port it to arduino as well?

Have you added the project's root path to the include paths?
Can you copy here a few from the error messages?

well, arduino is set up differently, and i don't know how to do that on arduino ide.
so i copied everything to the sketch folder, with adding the needed includes in the sketch file.
then i came across alot of "file not found" (due to root include paths), fixed those manually, but then i got "undefined reference to" errors, so i had to include every .c file in my sketch too, and now i get even more errors saying this:
C:\Users\Admin\AppData\Local\Temp\arduino_build_78852\sketch\lvgl/lv_objx/lv_bar.c: In function 'lv_obj_t* lv_bar_create(lv_obj_t*, lv_obj_t*)':
C:\Users\Admin\AppData\Local\Temp\arduino_build_78852\sketch\lvgl/lv_objx/lv_bar.c:62:42: error: invalid conversion from 'void*' to 'lv_bar_ext_t*' [-fpermissive]
 lv_bar_ext_t * ext = lv_obj_alloc_ext(new_bar, sizeof(lv_bar_ext_t));

why not simply make everything easy to integrate in arduino too? :P

note that this is with the application framework enabled

Hm. Please attache the whole compile log as a txt file.

okay, i set compiler warnings to "all" so beware of a HUGE list of errors, here's the list: https://pastebin.com/dJZmD2rp

It seems like compiiler threat the source files as cpp files instead of c. Have you changes the file extensions to .cpp from .c?

the arduino ide does that by default i think, and i cant find a way on how to disable that, and i leaved the file extentions at their default ones ( .h, .c )

I googled on it and found that it a limitation of the Arduino IDE. I have never used Arduino so far but others say there are problems when you begin to use things outside of Arduino. Therefore they recommend to work with an other IDE.
https://stackoverflow.com/questions/7803416/can-the-arduino-ide-be-used-to-develop-plain-old-c-programs
Here is a description about a C compatible IDE:
https://spin.atomicobject.com/2011/10/15/taking-the-training-wheels-off-the-arduino/

i see, so that basically means i need to port the entire device support package to another IDE... (the teensy 3.x support package in my case, which will be a pain)
and i was so hopeful that lvgl could work relatively easy on arduino.. :'(

just a question, will it ever be ported to arduino? or not?

Yes, I'm planning to port it to Arduino (and make the required updates) but I will have time for it only a few month  later... :(
Teensy 3 doesn't support other IDE/compiler then Arduino?

awesome that it's going to be ported! no worries on time, do everything at your tempo, will donate some money for the awesome support :)
and for the teensy 3 not as far as i know.. ^^;

You can create a wrapper class around lvgl to make it arduino compatible, converting whole project to c++ will be a big job.

never did that kind of coding before, so i wouldn't know how to do that tbh ^^;

I don't know Arduino, but I suppose that regardless to the wrappers the Arduino compiler has to compile the code. The wrappers helps you only when you use the functions, don't they?

I have been working on Arduino recently to add support for a new platform that I am making. And lot of code that I write is in C. Arduino core is actually mix bag of C and C++ sources so I am not sure why compiler is throwing errors. It may be the way you are including the files in your project/sketch.

I've downloaded the Arduino IDE and tried to setup an example dummy library. The first thing I faced that I had to modify the .h files:
at the begginig
#ifdef __cplusplus
extern "C" {
#endif
at the end
#ifdef __cplusplus
} // extern "C"
#endif
If you have time for that can you try it?
Also to not waste time I recommend you to try the PC simulator. It is a very good to know the LittevGL and also your code can be copied to an embedded environment later. Here is a guide about the PC simulator: http://www.gl.littlev.hu/pc-simulator

you mean at every .h file? that's gonna take some time.
and i will try the pc emulator :)

also, regarding the pc simulator, why not make a single visual studio project? if needed i can give you a project that's exactly doing that :)

Yes, I mean all .h files... :(
Visual studio project: I've chosen Eclipse CDT because it is cross platform. please create an issue in proj_pc repository to continue the discussion there.

Okay, will change all files and try again upcoming week and tell you the result

i midified all the .h files, and now getting "undefined reference to lv_init()" and the same errors with other functions.

Thank you for the effort to modify the files.
Please, send me the lvgl, misc and hal folders and I will check/try them.

attached is the arduino folder including ili9341 and touch libraries for the adafruit 2.8" tft ( https://www.adafruit.com/product/1651 ) with a teensy 3.1 (i used teensyduino 1.36 & arduino 1.8.1)
the whole zip needs to be extracted in my documents/Arduino
Arduino.zip

I've checked the files, tried to compile and saw multiple type of issues. On next week I'll try to solve them!

Firstly I have tried to port the misc library and I've succeeded! I needed to solve several issues because of the limitations in the Arduino IDE but I was able to compile it! Please try it and if it is working for
you too I will make the LittlevGL as well.
Arduino_misc.zip

it compiles, but it doesn't go past the misc_init(); function on a teensy 3.2 (fastest, with lto, 96mhz), aka a system halt is thrown.

In misc_conf.h disable the IDLE module. USE_IDLE 0

ok, it goes past the misc_init() now, but the ram usage didn't increase, as i see this on the serial monitor:
Start
Free RAM:44035
Misc init.. Done!
Free RAM:44035

It's good if the RAM usage is not growing after init. All the variables are already allocated regardless to calling misc_init. Try not to #include <misc.h> and not call misc_init(). It should decrease the RAM usage.
Other question: Have you ever tried this Eclipse based IDE for Arduino? http://www.baeyens.it/eclipse/
To be hones I'm not so happy with the current solution because (just to mention one thing) I have to use relative include paths which makes the project messy.

never tried that IDE, so would have to try first.

well, this is funny, i tried to use a display driver with the hal files (disp.c + disp.h)
i got multiple errors, and now i am trying to write a bare bone driver in the disp files themselves.
still lots of errors, seems like littlevgl doesn't like cpp class usage in the code? (like spisettings class to adjust spi sleep, mode and such with one call)
this is quite dramatic on my side right now ^^;

The lvgl is still not modified like misc it won't work with Arduino now.
 It seems very difficult to handle such a  complex project like a GUI in Arduino IDE.

Here is guide about how to add the Teensy board to this Eclipse IDE:
https://trippylighting.com/teensy-arduino-ect/arduino-eclipse-plugin/arduino-eclipse-ide-2-4-arduino-1-6-3-teensyduino-1-22-mac-windows-installation/

Hi! Have you tried the Eclipse baded IDE? If yes what are your experiences?

Still have to try, been quite busy the past period
Op 24 jun. 2017 07:17 schreef "Gabor Kiss-Vamosi"<EMAIL_ADDRESS>
:

Hi! Have you tried the Eclipse baded IDE? If yes what are your experiences?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/littlevgl/lvgl/issues/11#issuecomment-310815125, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AKtLV_HRBYW-VBr4YM8hvAap-dNQMFIUks5sHJvigaJpZM4NoaQ7
.

Sorry, I can't find the motivation to move to a different IDE, seems I am too hooked on the Arduino IDE.. ^^;
Maaaybe will try to in the future.
I'm leaving it up to you to close the issue, or simply post updates regarding Arduino IDE support on this thread.
Offtopic: right now I am having the urge to make my own GUI library for the Arduino IDE again.

Sad to hear this. Unfortunately the Arduino IDE compatibility could mean a step back for me because the lack of project properties.
If later you decide to use this library I can offer the already mentioned  (Sloeber)  Eclipse IDE.
Anyway, thank you for the contribution so far!

i installed the sloebel ide, imported the teensy core, and get errors in the teensy core with spiclass (which i need for using the SPI bus.)
this is really frustrating..

Hi,
It is good to here that you have tried that IDE.
Were you able to solve the issue meanwhile?

Sadly not :(

Hi Ramon,
Good news for Arduino! In the upcoming v5.0 release I modified the architecture the graphics library and now it is compatible with the default Arduino IDE. I was able to easily compile it with Teensy 3.6.
I cannot test it because I don't have Teensy hardware, but I hope you can do the testing! :) You need to write a disp_fill and disp_map function (see below)
Here is the library:
lvgl_arduino_lib.zip
An this is my sketch:
#include <lvgl.h>

void hal_init(void)
{
    /*Initialize the display*/
    lv_disp_drv_t disp_drv;
    disp_drv.fill = NULL;  /*function to fill an area:          void fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2, lv_color_t color) */
    disp_drv.map = NULL;   /*function copy pixels to an area:   void map(int32_t x1, int32_t y1, int32_t x2, int32_t y2, lv_color_t *color_p) */
    disp_drv.copy = NULL;  /*ignored*/
    lv_disp_register(&disp_drv);

    /*Initialize the graphics library's tick*/
    /*In a Timer call lv_tich_handler() in every milliseconds*/
}

void setup() {
  lv_init();

  hal_init();

  lv_obj_t *label = lv_label_create(lv_scr_act(), NULL);
  lv_label_set_text(label, "Hello Arduino!");
  lv_obj_align(label, NULL, LV_ALIGN_CENTER, 0, 0);

}

void loop() {
  // put your main code here, to run repeatedly:

}

awesome, altho i see a problem, the arduino IDE has a macro called map, which is used in LV_HAL_DISP.H

hmm... i get errors when assigning my own function to the null pointers:
error: expected primary-expression before 'x1'
     disp_drv.map = disp_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2, lv_color_t *color_p);

I updated the library to not use 'map' name.
lvgl_ardion_lib2.zip
    /*Initialize the display*/
    lv_disp_drv_t disp_drv;
    disp_drv.fill_fp = NULL;  /*function to fill an area:          void fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2, lv_color_t color) */
    disp_drv.map_fp = NULL;   /*function copy pixels to an area:   void map(int32_t x1, int32_t y1, int32_t x2, int32_t y2, lv_color_t *color_p) */
    disp_drv.blend_fp = NULL;  /*ignored*/
    lv_disp_register(&disp_drv);

You get the error because you have to initialize it like this:disp_drv.map_fp = disp_map So write onyl the function name.

ok, didn't know that
now i get this error(?)
error: 'lv_disp_drv_t {aka struct _disp_drv_t}' has no member named 'fill'

Look the previous code example! To be consistent with map_fp I renamed fill to fill_fp

yeah, i figured it out, i am pretty sleepy right now
got it to compile, going to test soon

it compiled, but doesn't work with my ili9341, while it does work when i call the tft driver library (the non lvgl) functions directly, so it must be something inside of lvgl that refuses to run.
btw, i am running a tick timer for the lvgl as documented

Just thinking out loud now: the teensy support package runs as multi thread within each yield call (which happens alot!)
This might be a problem with the lvgl scheduler to prevent it from executing?
Also, the MCU doesn't freeze up, I can draw in the loop what and whenever I want.
Also note that the lvgl doesn't just give no output on the screen, but also no change on the SPI bus to which the screen is connected to.
Yes I have configured the lvgl config file for correct screen resolution, also reduced buffer to 10 lines to fit on my teensy 3.2

Oh sorry, I forget to add lv_task_handler() to the loop... You can also add a  few millisecond delay after it and/or call your applicaton's functions.

it works, lvgl clears the screen to black, but.... no text is displayed :P

Please show me your disp_map function.

void disp_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2, const lv_color_t *color_p) {
  uint16_t c;
  tft.setAddrWindow(x1,y1,x2,y2);
  for (int y = y1; y <= y2; y++) {
    for (int x = x1; x <= x2; x++) {
      c = tft.color565(color_p->red, color_p->green, color_p->blue);
      tft.drawPixel(x,y,c);
    }
  }
}

It seems you forget to increment color_p :)

this proves how newb i am with lvgl xD
thanks! it works as should, not i can dive into optimizing my disp_map function, as it is kinda slow.
issue can be closed :)

Awesome ^^
Please keep in mind the dev-5.0 is under development and some changes may still happen until it is released.

@ramonschepers Instead of .drawPixel try to use .pushColor - this may speed things up... ;-)


Why are the coordinates of predict results are all zero running step3_predict _nodules.py?

Hi, Julian,
After training, I run step3_predict _nodules.py and the result is odd: all the x, y, z coordinates are 0.0, and diameter_mm column are all negative.
What's the possible problem?
Thanks

The root cause is that the (int/int) in python 2 is 0.


[Bug]: Can't display images in Markdown Preview Enhanced

Confirmation

[X] I checked FAQ

The tool/kit where the error occurred
joplin-vscode-plugin
Describe the bug
Pictures can be displayed normally in default vscode markdown preview ,
but can't display in Markdown Preview Enhanced
Steps to reproduce the behavior
open joplin
preiew markdown
log file
I cant read this stuff
Additional context
I cant read this stuff

Need to configure to allow display of local insecure resources, for example if using vscode default previewer is like this

Tested the plugin, it doesn't use the vscode markdown-it extension option, can't fix
ref: https://code.visualstudio.com/api/extension-guides/markdown-extension


Reorganize CampusShuttles

This change is

Review status: 0 of 4 files reviewed at latest revision, 1 unresolved discussion.

a discussion (no related file):
So I had noticed that there was a random storyboard sitting in the Apps file. This hotfix is simply to get that storyboard to its rightful home.

Comments from Reviewable

Reviewed 7 of 7 files at r1.
Review status: all files reviewed at latest revision, 1 unresolved discussion.

Comments from Reviewable


Performance and notation improvements for the adaptive solver

Follows notations and workflow of scipy more closely (see scipy/integrate/_ivp/rk.py).
Also, moves from torch.einsum to torch.tensordot for performance. With this simple benchmark, I saw a systematic improvement (sometimes quite a lot for smaller matrices) both on cpu and gpu:
import torch
import timeit

M = 10
N = 1000
device = 'cpu'

c = torch.randn(M, dtype=torch.complex64).to(device)
k = torch.randn(M, N, N, dtype=torch.complex64).to(device)

print(torch.allclose(torch.einsum('b,b...', c, k), torch.tensordot(c, k, dims=([0], [0]))))
%timeit torch.einsum('b,b...', c, k)
%timeit torch.tensordot(c, k, dims=([0], [0]))

I guess there are a bunch of other places where we could use torch.tensordot rather than torch.einsum?

Actually can't we use torch.matmul?

For information, the benchmark yields exactly the same result for einsum and tensordot on my machine.

Wow, interestingly chatGPT proposes
c.view(-1, 1, 1) * k

which is four times faster on my machine 🤯

I'm a little confused by the code, don't we want to do element-wise multiplication rather than einsum? Something like c.view(-1, 1, 1) * k?

So yes we may be able to use tensordot in some places. I think the point is that tensordot is straight to the point, whereas einsum tries to optimize the tensor contraction in a smart way. However it cannot do miracles when there are no miracles to be made, in which case it's probably better to use tensordot. We should maybe benchmark our kraus_map function in particular.
But there are tons of different tensor contraction functions in torch (tensordot, einsum, matmul, bmm, ...), and it seems like they're all advantageous in their own regime of sizes.
In this case, it seems tensordot is the fastest for me, but very close to einsum. Your other proposal with the view is much slower however. The proper call is (c.view(-1, 1, 1) * k).sum(0). Any way, it's not really a big performance gain because we're mostly limited by the call to lindbladian and not by these small tensor contractions.


PromQL: Parentheses around function arguments aren't evaluated correctly in all situations

Parentheses should always just act like a no-op.
But they lead to query errors when used around some function parameters, like:
rate((foo[5m]))

...or:
label_join(foo, ("foo"), "bar")

This leads to errors like:
Error executing query: unexpected error: interface conversion: promql.Expr is *promql.ParenExpr, not *promql.StringLiteral

The reason is that some function implementations assume concrete implementation types, like here: https://github.com/prometheus/prometheus/blob/64194f7d45cbb7fa2f41c8f219706308f65d511a/promql/functions.go#L66 and https://github.com/prometheus/prometheus/blob/64194f7d45cbb7fa2f41c8f219706308f65d511a/promql/functions.go#L754-L755.
Currently we don't have any ways of generating non-literal strings or matrices without matrix selectors, so I think we only need to ensure that parentheses are skipped around these child nodes before trying to use them.

I disagree with this, the only place where () make sense is whith subqueries and ops.

I can do a lot of things with parentheses that don't make sense, like quantile((1), foo) or ((((rate(foo[5m]))))), so I don't see why those would work, but the other situations shouldn't. At the very least, it should be a syntax error if we don't want to allow it, it shouldn't just be an unexpected crash somewhere in the query.

() for scalar makes sense so you can do (1+1)*2
((rate(5m]))) also makes sense because you could do (3+(backend_enabled*rate(5m]))..
it is really different from rate((((xx[5m])))).
If we allow (vector) to be converted to vector, then rate((x)[4m]) could become valid? That seems really strange to me.

I'm with @roidelapluie on this one.

() for scalar makes sense so you can do (1+1)*2
((rate(5m]))) also makes sense because you could do (3+(backend_enabled*rate(5m]))..
it is really different from rate((((xx[5m])))).

Hm, IMO just because no non-function operations are defined with strings or matrices as operands doesn't mean that parentheses should not work. But if we do not want to allow them, then it should be a syntax error.

If we allow (vector) to be converted to vector, then rate((x)[4m]) could become valid? That seems really strange to me.

That'd at least be a syntax error already, as a matrix selector is its own node type.

If we allow (vector) to be converted to vector, then rate((x)[4m]) could become valid? That seems really strange to me.

That'd at least be a syntax error already, as a matrix selector is its own node type.

@juliusv not since #6590

@juliusv not since #6590

Yeah, wasn't aware that changed visible parsing behavior. Now it yields "invalid parameter 'query': 1:12: parse error: ranges only allowed for vector selectors". Actually if it is a full child now, I'm not even against allowing this kind of expression. But I'm sure you two would disagree :)

The thing is that you can not do:
"a"+"b"
or ({a="bc"} and {c="d"})[5m]
Unless that would be allowed (but what would it do ?), seems strange to add "useless" parenthesis.

I guess it's a matter of taste or consistency. I don't care strongly about allowing it either, but I would prefer to allow no-op parens around any expression type (why special-case?). But anyway, it shouldn't crash so late in the game, it should be a syntax error then.
Funnily I checked our PromQL docs, and we have zero mentions of parentheses, so their behavior appears to be completely undefined from a spec kind of view.

I get what you mean; indeed it should be a syntax error.

@roidelapluie Ok, edited title to that effect.

@juliusv not since #6590

Yeah, wasn't aware that changed visible parsing behavior. Now it yields "invalid parameter 'query': 1:12: parse error: ranges only allowed for vector selectors". Actually if it is a full child now, I'm not even against allowing this kind of expression. But I'm sure you two would disagree :)

That wasn't changed by #6590, but already by #6548.
Note that parentheses are also currently completely fine with scalars.

I guess it's a matter of taste or consistency. I don't care strongly about allowing it either, but I would prefer to allow no-op parens around any expression type (why special-case?). But anyway, it shouldn't crash so late in the game, it should be a syntax error then.

I agree with that standpoint. IMHO the only function parentheses should serve is to indicate evaluation order. I don't really see a point in complicating this for both the users and the implementation.

Funnily I checked our PromQL docs, and we have zero mentions of parentheses, so their behavior appears to be completely undefined from a spec kind of view.

Having some kind of complicated rule set there, describing when parentheses are allowed would be quite weird.

Yeah, it's weird, because I can't think of any other language that doesn't allow parentheses around any node type, but then again there's no other language that has value types which don't have any operators defined on them at all (which introduce the necessity of parentheses). Still I find it surprising that parentheses are illegal just because incidentally a node type has no operators defined on it.

The logic of providing a syntax error here would be quite complex.
We have a wide range of different syntax nodes and basically would have to specify which may be surrounded by parentheses.
Also, how do we deal with redundant parentheses that might increase readability, e.g. a+(b*c).
I'd rather propose to change to remove the promql.ParenExpr type from the AST and evaluate everything in parentheses to its inner expression.
This would provide a reasonably elegant solution to the problem that's quite easy to implement.

I'd rather propose to change to remove the promql.ParenExpr type from the AST and evaluate everything in parentheses to its inner expression.

Not sure if I understand you correctly, but wouldn't removing the parentheses from the AST completely make it impossible to render out again exactly what the user typed in (and interfere with positional metadata)?

wouldn't removing the parentheses from the AST completely make it impossible to render out again exactly what the user typed in (and interfere with positional metadata)?

That's already the case, we lose extra whitespace for example.

@brian-brazil but I thought the new parser work was there to start to retain positional information of all tokens (among other things).

And if we have a formatting tool, we'd want it to be able to retain parentheses where a user put them, even if they were not strictly required (but useful for clarity)?

Positional information in the original string is not the same as being able to render exactly what the user typed from the AST.

Why wouldn't it be (modulo maybe some casing around sum / SUM or so), unless you throw some tokens away / don't keep their positional information? Anyway, I think we'll want to be able to do that.

We lose all the whitespace for one. If we're rendering a canonical output we'll only use the AST, not any other information from the original parsing - just like we do today.

I feel whitespace is ok to lose in that case, but not even retaining the ability to preserve parentheses would be sad.

And if we have a formatting tool, we'd want it to be able to retain parentheses where a user put them, even if they were not strictly required (but useful for clarity)?

With that goal in mind, removing the ParenExpr type is indeed not the best idea.

Yeah, I would keep parentheses as AST nodes, but just completely ignore them for evaluation (always dig out the first non-paren node within them).

That will probably imply string support in promql.
e.g. "ok" would become a valid promql expression that will return a string; because that is the issue there.
(1+2) returns a scalar
(a) returns a vector
(a[90m]) returns a matrix
but ("xx") would be new and return a string

All of these are already valid PromQL expressions, however some of them will cause a panic in the engine.

Yeah, they are already valid expressions, they just cause a panic when wrapped in parens when used in certain contexts (e.g. rate((foo[5m])) panics while (foo[5m]) works fine, without rate() wrapped around it), or when they are the root node (just "foo"). The latter should also just work.

Btw., Prometheus 1.x was able to evaluate "foo" just fine and show the result as a string in the data table in the UI. That broke somewhere in 2.x, which now panics for that case.

Interesting.
However I don't think we should revert that back since there likely is a lot of other software relying on the current behaviour.

I can't see how that would break anyone... if anyone is relying on the fact that root string nodes cause a query error, that would be a very weird use case.

@brian-brazil @roidelapluie
Do you have a good proposal, for which cases exactly parentheses should be allowed?
I personally don't have a good idea here, except always allowing them.

If allowing there everywhere does not cause harm, I propose to allow them everywhere then? It is a switch from my initial position but I think it can make sense.
Note: it does not mean that we need to document it clearly. or encourage it.

Scalars and instant vectors is where I'd expect it to work.

@brian-brazil I still expect parens to work as a no-op around any type (in any language, ever).
Even if we decided to keep the special case to not allow them around certain node types, then rate((foo[5m])) panicking vs. (foo[5m]) being ok still seems broken.

@juliusv How about foo[(5m)] :smiling_imp:

Are durations a nice type now? With associated value type (string/scalar/vector/matrix)? 😅 If not, then no...

No, but their own type in the grammar.
I was just taking your no-op statement literally. :smiley:

Yep, only around any valid PromQL expressions, not syntactic sub-elements :)

The only parser change then would be allowing expressions like (foo)[5m], which I'm not sure is a good idea, everything else in the parser should already be as you described.
The hard part will be fixing the engine.

Scalars and instant vectors is where I'd expect it to work.

If we disallow it for range vectors now, this would break existing queries.

The only parser change then would be allowing expressions like (foo)[5m], which I'm not sure is a good idea, everything else in the parser should already be as you described.

Hmm, I'm wondering if from the user's perspective, foo[5m] should now be exposed as two separate nodes, just because of recent internal changes. So far it had always just been a single node.

The issue I see with allowing parentheses here is that then it would be harder to explain, why (foo)[5m] is allowed, but (foo + bar)[5m] isn't.

Yeah, exactly. I wouldn't want to allow parentheses there either, and not see them as two independent nodes at all.

So IMHO the sanest proposal right now seems to be changing nothing in the parser but changing the engine to always handle ParenExpr as a no-op.

Yep!

#6610 does already part of that, so it would make sense to just extend this PR.

Sounds good to me!

@juliusv Would make sense to change back the issue title then.

@slrtbtfs Thanks, changed it to a newer more appropriate wording.

The new wording implies (foo)[5m] should be legal.
We decided earlier that this should not be the case.

@slrtbtfs Ah I'm still thinking from the user's perspective, where foo[5m] should just be seen as one node and not two independently evaluated ones. Not sure how to word it then... but I guess it may be fine?

Yes, I guess we can leave it like that.

Hello guys, could you explain if this fix will allow the following:
I have CPU usage as a range-vector and at the same time I have pod labels as just labels.
I would like to combine 2 queries for being able to do the following:
avg(
  rate((
    max(kube_pod_labels) by (pod, label_app)
    * on(pod) group_right(label_app)
    container_cpu_usage_seconds_total{container!="POD", image!=""}
  )[5m])
) by (label_app, pod, container, namespace)

Also sometimes I would just want to have the graph for specific application:
avg(
  rate((
    max(kube_pod_labels{label_app="some_label") by (pod, label_app)
    * on(pod) group_right(label_app)
    container_cpu_usage_seconds_total{container!="POD", image!=""}
  )[5m])
) by (label_app, pod, container, namespace)

Currently it is not possible. The closes solution is move the group path outside, but it will lead to decrease of performance. Second one is to use subquery but somehow it produces incorrect result.

@sshishov Thanks for your report. It looks as if this is actually a question about usage and not development.
It makes more sense to ask questions like this on the prometheus-users mailing list rather than in a GitHub issue. On the mailing list, more people are available to potentially respond to your question, and the whole community can benefit from the answers provided.


Reset position counter before waiting on it

Following https://github.com/DiamondLightSource/python-artemis/issues/248 we added a wait earlier on in Artemis for the position counter to be reset. Currently on main this will always fail as the position counter never gets set to 0 before we wait on it.

This means we can remove the staging of the fgs_motors


Multi Module Setup

Just wondering how could be a proper multi module setup with your library. Is there anyway to use Directions classes between different features modules and navigate between them??
How should gradle be setup in library (features) modules?
Thanks!

Hi @buntupana !
I have two examples of this in two forks of two known projects in Android community.
You can read more here:
https://composedestinations.rafaelcosta.xyz/codegenconfigs#multi-module-configs
It also contains the links to those forks. They are not super up to date with latest library versions so there may be some small adjustments but the overall idea is the same.

Thanks for the quick reply and for this awesome library @raamcosta
I've been checking the libraries and it looks that it requires a quite amount of coding to setup the project, not that easy like a mono module project, or maybe I didn't understood pretty well.
I'm trying to figure out if there is a way to inject DestinationsNavigator in ViewModel instead the Composable, is there a easy way to do it with for example Hilt??

Yea it definitely takes more setup compared to single module apps (or just a single module for navigation).
About navigators inside the ViewModel, it’s usually not recommended because they hold inside stuff that can be cleared before the ViewModel is. And so you’d be leaking them.
I have been toying around with the idea of making this possible but it will envolve a kind of event bus in the middle that listens for nav events and proxies them (indirectly) to a component in the MainActivity  that does the actual navigations.
No ETA though you can also do it internally, which I’ve seen before in some blog posts.

@buntupana, I’m closing this but please let me know down below if I can help you any further 🙂

@raamcosta I'm trying to setup a Project with two features modules (Feature1, Feature2) and the App module.
What I think is the best approach is to create Navigator interfaces for every module so from Feature1 I could navigate to Feature2 and vice versa and use di to inject them into the modules. The di module will be feed in the app module.
So for example I could go from HomeScreen (Feature1 module) to DiscoverScreen (Feature2 module) using Feature1Navigator
So far I have two problems:

Auto generate a Graph with destinations from different modules, is this even possible? I had to create it manually:
object NavGraphs {

 val root = object: NavGraphSpec {
     override val route = "discover"

     override val startRoute = DiscoverScreenDestination routedIn this

     override val destinationsByRoute = listOf<DestinationSpec<*>>(
         DiscoverScreenDestination
     ).routedIn(this)
         .associateBy { it.route }
 }

Inject the auto generated DestinationsNavigator in the navigator implementation, I have no idea how to inject the autogenerate one.
 class Feature1NavigatorImpl @Inject constructor(
     private val navigator: DestinationsNavigator
 ) : Feature1Navigator {

     // Discover Screen is in Feature
     override fun toDiscoverScreen(id: String) {
         navigator.navigate(DiscoverScreenDestination(id))
     }
 }

Do you have an idea how I could solve this problems??
Cheers!

Hey @buntupana !
First of all, forget about routedIn calls. This is only useful if you want to have destinations belonging to multiple NavGraphs. So when manually building the NavGraphs, just don't call routedIn unless you really need to.

There are two possible setups for multi module: each feature module outputs a navigation graph (ksp config mode "navgraphs"), or each feature module outputs a single destination (ksp config mode "destinations").  In both cases, you need to manually setup the "root" nav graph that gets passed to DestinationsNavHost to be able to gather these navgraphs / destinations from feature modules.

Why do you want to use DI framework to pass navigators? Where do you want to inject them to? If you want to inject them into ViewModel, like I said before, you shouldn't. If you want to inject to Composable functions, then using DI framework won't work since it's a function and not a class?
Instead, use dependenciesContainerBuilder parameter of DestinationsNavHost to "inject" the navigators. Inside the  dependenciesContainerBuilder lambda, you'll have access to NavController (or DestinationsNavigator). So you can just instantiate your feature modules navigators and pass them using dependency functions.
    DestinationsNavHost(
        //...
        dependenciesContainerBuilder = { //this: DependenciesContainerBuilder<*>
                              // 👇 this will only provide Feature1Navigator for HomeScreen, but you can also
            // use a NavGraphSpec if you want to provide it for all destinations of certain Navigation graph
            dependency(HomeScreenDestination) { Feature1NavigatorImpl(destinationsNavigator) }
        }
    )

@raamcosta wow...that works just perfect. Your are right about the navigation stuff in ViewModel, I was just playing around about some ideas. I guess there is no a quick and simple way to setup a multi module project so far, however you made the process much easier with compose destinations.
Thanks a lot!!


EveCurveLineSet not working?

Have been trying this for a while and can't figure out why i cannot get this to render.
            var curveSet = new ccpwgl_int.EveCurveLineSet();
            curveSet.Initialize();
            curveSet.AddStraightLine([-10000, -10000, -10000], [10000, 10000, 10000], 5, [1, 1, 1, 1], [1, 1, 1, 1]);
            curveSet.Rebuild();

Also EveCurveLineSet.Item = EveCurveLineSetItem; appears to be missing from EveCurveLineSet.js

works with              ccpwgl.onPostSceneRender = function (dt) {                 curveSet.GetBatches(ccpwgl_int.device.RM_TRANSPARENT, batches);                 batches.Render();                 batches.Clear();             };
But EveCurveLineSet.Item = EveCurveLineSetItem; is definitely missing.

PR #262 added the missing EveCurveLineSet.Item thing so they work now.


Include open source license information in mod menu

https://developers.google.com/android/guides/opensource
This would allow people to comply with the rules set forth by the mods better; and with the inclusion of such info we can be more professional than a lot of android apps :trollface:
Anyways shouldn't be too hard given we already have license info in mod json.

whats that link got to do with this?

That link is just a reference that softwares should include open source licenses, especially given that many fabric mods are free open source software.

Fantastic, thank you!

Only took over a year :P


api: Split tests in separate functions

It's more convenient to have more focused tests for each API endpoint
rather than one big "test all" method.

/lgtm


zremrangebyrank order lexicographically if scores are equal

The current implementation does not fallback to lexicographical ordering if scores are equal. For example in redis-cli:
> ZRANGE "test" 0 -1
(empty list or set)
> ZADD "test" 1 "b"
(integer) 1
> ZADD "test" 1 "c"
(integer) 1
> ZADD "test" 1 "a"
(integer) 1
> ZRANGE "test" 0 -1
1) "a"
2) "b"
3) "c"
> ZREMRANGEBYRANK "test" 0 1
(integer) 2
> ZRANGE "test" 0 -1
1) "c"

The sorted_keys method, already used in ZRANGE already handles this scenario, it just needed to also be used in ZREMRANGEBYRANK as well.

@guilleiguaran is there anything else needed in this pull request? Thanks!


add deployment action in CI

Assuming you don't want to add the timeouts CI is complaining about, or the docker credentials, LGTM :-)

the credentials are there, I'm confused

the credentials are there, I'm confused

@Williangalvani remembered that apparently secrets are disabled for PRs, which does make some sense.


feat: Deploy Appsmith on Google Cloud Run

Checklist
I have:

[x] run the content through Grammarly
[ ] linked to sample apps when relevant
[x] added the meta description for each page in the PR
[ ] minimized the callouts and added only when necessary
[ ] added the queryString parameter to the Tabs (if used)
[ ] masked PII in images. For example, login credentials, account details, and more
[x] added images only when necessary
[ ] deleted the images that are no longer used for the updated pages in the PR
[x] followed the image file naming convention while renaming or adding new images. (Use lowercase letters, dashes between words, and be as descriptive as possible)
[x] used the <figure/> tag instead of a markdown representation for images
[x] added the <figcaption/> tag to add a caption to the image
[x] added the alt attribute in the <img/> tag
[ ] verified and updated the cross-references or created redirect rules for the changed or removed content
[x] reviewed and applied the style changes for UI formatting. For example, Bold the UI elements(Buttons on screen) used in the doc.

@sharat87 - Could you please do a round of usability testing for these changes?


Uncaught TypeError: Cannot read property 'name' of undefined

I'm seeing this error on the page below:
Uncaught TypeError: Cannot read property 'name' of undefined.

message: Uncaught TypeError: Cannot read property 'name' of undefined
fileName: http://jsperf.com/benchmark-47.js
lineNumber: 21

Source: http://jsperf.com/ways-to-strip-last-comma

this is a duplicate of https://github.com/jsperf/jsperf.com/issues/45

Closing in favor of #64.


Switch to a tab group for the different install options.

Instead of listing all three install options, one after the next, I put them into tab groups, with our recommended approach (npm) being the first/default tab. This is a visually cleaner presentation of these options that results in a smoother reading experience.
PR Checklist:

[x] I have performed a self-review of my code
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[ ] I have added or updated tests that comprehensively prove my change is effective or that my feature works


How to unzip bundling zip files and there are no filename postfix with .zip?

zipped files like this: test.zip.001,test.zip.002,test.zip.003

Splitting zip files this way (.zip.001, .zip.002, etc) is not according to the formal zip specification. A split zip according to zip specification has the format .z01, .z02....., .zip. This type of split zip files is supported by zip4j. The one you asked is a custom split format used by some tools (I think 7zip splits it this way). At the moment zip4j does not support that format.

Yes,I got it. As the tools like 7zip,360zip split files with no postfix .zip,can you support this as a new feature ? I just happen to meet  this  situation.

Yes, I can implement this and it seems to be a good idea to have this feature in zip4j. But I cannot promise a timeline of when I can implement this. There are already some new feature requests in queue. I will leave this issue open and update it once the feature is implemented.

ok,thanks a lot!

Feature included in v2.4.0 released today

@srikanth-lingala thanks for you!

When i use the zipFile.createSplitZipFile(files, zipParameters, true, 1024 * 70) this line actually split the original zip file into multiple based on size i.e. 70kb.But the content inside the all zip files are same.the content is not splitting up. could you please resolve this issue? or is there any other way call the function?

@srikanthvadde This issue is unrelated to the one this thread is about. Please open a new issue with the problem you are facing, and include as many details as possible like zip4j version, your complete code snippet, os and version, and anything else that you think might be useful. BTW, if you are already not on the latest version of zip4j, try with the latest version before opening this issue.


inline mode, "\lim_{n \to \infty}" renders incorrectly

That looks correct to me. Were you expecting \displaystyle?


Check whether html title is present before parsing in grab_title

Do some cheap tests to determine if a fetched page contains HTML and has a title before parsing it to look for the title.  This change makes grab_title reach the conclusion that a 4MB jpg doesn't have a title much quicker than before.  I also cut the maximum size page that would be downloaded to check for a title down to ~2M from ~25M. I'm not sure what the right number is for that.  500K is too small and 25M seems way too large.

@ferocious-ferret suggested I change this to only download the first 10k, and look in that for the title.  I'll see what I can do about that today.

I'd leave it around ~100-500k, I've seen many pages that dump huge inline css/js blocks in the head before the title

I changed it to read only the first 200K, and to truncate the HTML before parsing.  I tried it with the limit at 100K and it couldn't get youtube titles.


Raw definitions

Stories

As a developer not using Coffeescript, defining classes is awkward, require that I define a class, and then after the fact, call methods on it to define its className, queryName, and associations.

Objectives

Provide a clean interface for raw JS to define classes in a single bundled statement
FUTURE: Protect methods like hasMany from being called whenever
Add note about es7.classProperties

Does anybody know the proper way to define a class in ES6?
Currently I have something like:
const User = (function() {
    class _User extends Api.Base {
        static initClass() {
            this.className = 'User';
            this.queryName = 'users';
        }
    }

    _User.initClass();
    return _User;
}());

export default User;

Which seems to work partially, but I'm running into issues with some functions like ResourceLibrary.constantize.

I can't say one way or another if your class is configured properly.
The one thing I can say is that ResourceLibrary.constantize requires that any constant like User be defined on the ResourceLibrary instance itself.
In your case, that would mean setting Api.User = (function() { class _User ... }). The key that you use on Api must match _User.className static property

Thanks for the quick response, looks like the correct ES6 implementation is actually:
import Api from './Api';

const _User = (Api.prototype.User = class User extends Api.Base {
  static initClass() {
    this.className = 'User';
    this.queryName = 'users';
  }
});
_User.initClass();

export default _User;

Can now define using
ResourceLibrary.createResource(
  class User {
    static define = function() {
      this.hasMany('notifications');
    }
  }
)

className and queryName will be determined based on class name itself, and can be manually overridden in define


Add enum as a new type

I know the library is in active development right now but it would be really nice to have it ASAP. Thanks for your code :)

@artem7902 How do you see enums working on redis-om?
I would like to make a proof of concept for them but i cant quite come up with a good idea to define/use them.


Upgrade to DataFusion 14.0.0

Which issue does this PR close?

Closes #.
Rationale for this change

What changes are included in this PR?

Are there any user-facing changes?

@francis-du fyi


Even more stringent permissions checking

Description
Even more stringent permissions checking to make emoji reaciton code more robust.
Checklist

[x] Add tests for these changes
[ ] Test coverage is not decreased
[ ] Entire test suite passes

Codecov Report

Merging #466 (12db8c2) into master (165d7f9) will decrease coverage by 0.38%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##           master     #466      +/-   ##
==========================================
- Coverage   97.07%   96.68%   -0.39%
==========================================
  Files          68       68
  Lines        3318     3322       +4
  Branches      460      462       +2
==========================================
- Hits         3221     3212       -9
- Misses         54       65      +11
- Partials       43       45       +2

Impacted Files
Coverage Δ

src/spellbot/__init__.py
94.48% <ø> (-0.72%)
:arrow_down:

src/spellbot/operations.py
97.16% <100.00%> (+0.08%)
: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 165d7f9...12db8c2. Read the comment docs.


Can't start daemon on Gentoo.

Checklist

[X] The problem is not listed in the hardware support matrix as a known limitation
[X] I've included a debug snapshot if the issue is related to hardware configuration

Bug description
"rc-update add lactd default" works fine, but when i try to start it with "rc-service lactd start" it says "rc-service: No such file or directory".
LACT-sysfs-snapshot-20240329-180843.tar.gz
System info
- LACT version:5.13
- GPU model:6700xt
- Kernel version:6.6.21
- Distribution:Gentoo

Does the daemon work if you run it manually with lact daemon (as root)?
I haven't used non-systemd distros, so I'm not too familiar with how the units are installed, you might be better of asking the distro package maintainers about this.

Does the daemon work if you run it manually with lact daemon (as root)?
I haven't used non-systemd distros, so I'm not too familiar with how the units are installed, you might be better of asking the distro package maintainers about this.

Yeah it actually works. The output i get is "lact_daemon::socket: listening on "/var/run/lactd.sock" "

Solved by doing a system link "ln -s /sbin/openrc-run /usr/bin/openrc-run".

I haven't used non-systemd distros, so I'm not too familiar with how the units are installed, you might be better of asking the distro package maintainers about this.

This is because on the "split-usr" gentoo profiles /sbin is a separate directory whereas on the merged-usr ones and on other distributions /sbin and /usr/sbin both point to /usr/bin


No code completion after yield keyword

Originally raised at https://github.com/Dart-Code/Dart-Code/issues/2210 by @Tokenyet (looks like https://github.com/dart-lang/sdk/issues/24346, but that was marked fixed a long time ago).

The class that I wanted to use is in the same file (.dart), but the completion can't find any, even If It's own class methods.
[√] Flutter (Channel stable, v1.12.13+hotfix.5, on Microsoft Windows [Version 10.0.18362.535], locale zh-TW)

[√] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[√] Android Studio (version 3.3)
[√] VS Code, 64-bit edition (version 1.41.1)
[√] Connected device (1 available)

• No issues found!

If there is something info not provided, I'll provide It asap.

Small copy/pastable repro:
class Foo {
  bool myField;

  Stream<bool> foo() async* {
    // Completion after "myField" should include "myField"
    yield myFiel;
  }
}

@jwren @pq

Thanks!  I think this one is a dup of #39124.
In any event, looking now. 👍


Adding ext dir to the gemspec

I realized after in #1 that the problem was that the correct directories for compiling and building the gem weren't included to generate ckafka/ckafka.bundle

Actually, after investigating some more it seems that when installing a gem from a git source it doesn't compile it first. Possible work arounds involve pushing to rubygems and checking compiled binary to github.
cc\ @ibawt

Rake compile


Add Aby Abraham Kalathivila to Contributor's list

Add Aby Abraham Kalathivila to Contributor's list

I'm quite elated about your pull request. I wanna evolve this project to addresses various problems faced by first-time contributors. I'd love to learn about your journey in open source community, the problems, pain points you had etc.
Could you explain how you felt when you went through the tutorial, made a pull request and learned that I merged it?
We’ve recently added Facebook share and tweet feature to our web app. Could you please go to https://roshanjossey.github.io/first-contributions/#social-share and share your first contribution to open source?
Also, check out projects with easy issues while you’re there.


Added Bot Framework package references in packages.config.

The packages.config file wasn't referencing the Bot Framework, which was preventing the project from building.

I just saw it has been fixed in a recent commit on the Dev branch.


Update to can-scramble.php to fix #60

can-scramble.php's previous solution would fail this case
assert(can_scramble("ac", "bb") === false);

per #60
New proposed solution converts string to character array, sorts them and compares the results.

Great! Thanks @jklewa.


Issue with have_content inside within_frame

First, I'm not sure this is a cucumber or a capybara or even a poltergeist issue, but I'm sure you can help.
I'm using ruby 2.1.2p95 and tested it both on cucumber pre 2.0.0 and 2.0.0.
If I run the following step, it succeeds:
  within_frame 'my-iframe' do
    expect(page).to have_content("CORRECT CONTENT")
  end

But if I run the following one, instead of the expected "expected to find text..." it throws a undefined method ```map' for nil:NilClass (NoMethodError):
  within_frame 'my-iframe' do
    expect(page).to have_content("WRONG CONTENT")
  end

If I try the expectation outside the within_frame it works fine (by this I mean it fails correctly).
I also tried the following version, moving the page content outside the frame scope, and it works fine:
  iframe_page = nil
  within_frame 'my-iframe' do
    iframe_page = page
  end
  expect(iframe_page).to have_content("WRONG FILE")

Thanks in advance.

This is a bug tracker, not a support forum. Please use the cukes google group.

Well, it felt like a possible bug to me, but thank anyway :D

Possibly, but probably not in Cucumber

I'd like to investigate this a bit more before we close it, if you don't mind Mr Hellesøy.
@joaomilho do you have a backtrace for the undefined methodmap' for nil:NilClass (NoMethodError)` error please?

Right away, Sr.
      undefined method `map' for nil:NilClass (NoMethodError)
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/poltergeist-1.6.0/lib/capybara/poltergeist/browser.rb:60:in `find'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/poltergeist-1.6.0/lib/capybara/poltergeist/driver.rb:120:in `find'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/poltergeist-1.6.0/lib/capybara/poltergeist/driver.rb:124:in `find_xpath'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/capybara-2.4.4/lib/capybara/node/base.rb:107:in `find_xpath'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/capybara-2.4.4/lib/capybara/query.rb:110:in `block in resolve_for'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/capybara-2.4.4/lib/capybara/node/base.rb:80:in `synchronize'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/capybara-2.4.4/lib/capybara/query.rb:106:in `resolve_for'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/capybara-2.4.4/lib/capybara/node/finders.rb:32:in `block in find'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/capybara-2.4.4/lib/capybara/node/base.rb:80:in `synchronize'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/capybara-2.4.4/lib/capybara/node/finders.rb:30:in `find'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/capybara-2.4.4/lib/capybara/node/document.rb:23:in `text'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/capybara-2.4.4/lib/capybara/queries/text_query.rb:26:in `resolve_for'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/capybara-2.4.4/lib/capybara/node/matchers.rb:454:in `block in assert_text'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/capybara-2.4.4/lib/capybara/node/base.rb:84:in `synchronize'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/capybara-2.4.4/lib/capybara/node/matchers.rb:453:in `assert_text'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/capybara-2.4.4/lib/capybara/session.rb:676:in `block (2 levels) in <class:Session>'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/capybara-2.4.4/lib/capybara/rspec/matchers.rb:64:in `matches?'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rspec-expectations-3.2.0/lib/rspec/expectations/handler.rb:50:in `block in handle_matcher'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rspec-expectations-3.2.0/lib/rspec/expectations/handler.rb:27:in `with_matcher'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rspec-expectations-3.2.0/lib/rspec/expectations/handler.rb:48:in `handle_matcher'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rspec-expectations-3.2.0/lib/rspec/expectations/expectation_target.rb:54:in `to'
      /Users/jm/p/on-demand-for-publishers/server/features/step_definitions/purchase_steps.rb:15:in `block (2 levels) in <top (required)>'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/capybara-2.4.4/lib/capybara/session.rb:328:in `block in within_frame'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/poltergeist-1.6.0/lib/capybara/poltergeist/browser.rb:130:in `within_frame'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/poltergeist-1.6.0/lib/capybara/poltergeist/driver.rb:145:in `within_frame'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/capybara-2.4.4/lib/capybara/session.rb:327:in `within_frame'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/capybara-2.4.4/lib/capybara/dsl.rb:51:in `block (2 levels) in <module:DSL>'
      /Users/jm/p/on-demand-for-publishers/server/features/step_definitions/purchase_steps.rb:14:in `block in <top (required)>'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/lib/cucumber/core_ext/instance_exec.rb:25:in `instance_exec'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/lib/cucumber/core_ext/instance_exec.rb:25:in `block in cucumber_instance_exec'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/lib/cucumber/core_ext/instance_exec.rb:42:in `cucumber_run_with_backtrace_filtering'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/lib/cucumber/core_ext/instance_exec.rb:13:in `cucumber_instance_exec'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/lib/cucumber/rb_support/rb_step_definition.rb:106:in `invoke'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/lib/cucumber/step_match.rb:33:in `invoke'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/lib/cucumber/step_match.rb:26:in `block in activate'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/action.rb:22:in `call'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/action.rb:22:in `execute'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/step.rb:31:in `execute'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/runner.rb:99:in `execute'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/runner.rb:46:in `execute'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/runner.rb:24:in `test_step'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/step.rb:16:in `describe_to'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:24:in `block (3 levels) in describe_to'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:23:in `each'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:23:in `block (2 levels) in describe_to'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/lib/cucumber/filters/prepare_world.rb:22:in `call'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/lib/cucumber/filters/prepare_world.rb:22:in `block in test_case'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/around_hook.rb:16:in `call'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/around_hook.rb:16:in `execute'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/runner.rb:99:in `execute'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/runner.rb:46:in `execute'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/runner.rb:30:in `around_hook'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/around_hook.rb:11:in `describe_to'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:92:in `block (2 levels) in compose_around_hooks'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:93:in `call'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:93:in `compose_around_hooks'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:22:in `block in describe_to'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/runner.rb:17:in `call'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/runner.rb:17:in `test_case'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:21:in `describe_to'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/lib/cucumber/filters/prepare_world.rb:11:in `test_case'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:21:in `describe_to'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/lib/cucumber/filters/apply_around_hooks.rb:8:in `test_case'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:21:in `describe_to'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/lib/cucumber/filters/apply_after_hooks.rb:5:in `test_case'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:21:in `describe_to'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/lib/cucumber/filters/apply_before_hooks.rb:5:in `test_case'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:21:in `describe_to'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/lib/cucumber/filters/apply_after_step_hooks.rb:8:in `test_case'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:21:in `describe_to'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/lib/cucumber/filters/activate_steps.rb:8:in `test_case'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:21:in `describe_to'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/lib/cucumber/filters/quit.rb:11:in `test_case'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/case.rb:21:in `describe_to'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/filters/locations_filter.rb:17:in `block in done'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/filters/locations_filter.rb:16:in `each'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/filters/locations_filter.rb:16:in `done'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/filter.rb:61:in `done'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/test/filters/tag_filter.rb:18:in `done'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/compiler.rb:23:in `done'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core/gherkin/parser.rb:31:in `done'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core.rb:29:in `parse'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-core-1.1.3/lib/cucumber/core.rb:18:in `compile'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/lib/cucumber/runtime.rb:70:in `run!'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/lib/cucumber/cli/main.rb:38:in `execute!'
      /Users/jm/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/cucumber-2.0.0/bin/cucumber:9:in `<top (required)>'
      /Users/jm/.rbenv/versions/2.1.2/bin/cucumber:23:in `load'
      /Users/jm/.rbenv/versions/2.1.2/bin/cucumber:23:in `<main>'
      features/purchase.feature:16:in `Then I see the purchase confirmation page'

This looks to me like a bug in poltergeist then. Here’s the line that’s blowing up:
https://github.com/teampoltergeist/poltergeist/blob/master/lib/capybara/poltergeist/browser.rb#L62 https://github.com/teampoltergeist/poltergeist/blob/master/lib/capybara/poltergeist/browser.rb#L62
Can you raise an issue with them? Please do get back to us if you think it is something that only happens when you run this code from Cucumber. Maybe you could try running the same test from an RSpec example?


moderation

Hello, is it possible to remove the function that the bot deletes offensive messages?
I'm not very good at coding

if the both doesnt have Manage Messages perm it wont be able to delete messages
if you want to remove the code for it look for "await message.delete()" in main.py


Store package versions in provenance

Start of the new section in the provenance log:
         "python": {
            "version_string": "3.7.7 (default, Mar 26 2020, 15:48:22) \n[GCC 7.3.0]",
            "version": [
               "3",
               "7",
               "7"
            ],
            "compiler": "GCC 7.3.0",
            "implementation": "CPython",
            "packages": [
               {
                  "name": "Babel",
                  "version": "2.8.1",
                  "path": "/home/maxnoe/.local/anaconda/envs/cta-dev/lib/python3.7/site-packages"
               },
               {
                  "name": "Cartopy",
                  "version": "0.18.0",
                  "path": "/home/maxnoe/.local/anaconda/envs/cta-dev/lib/python3.7/site-packages"
               },
               {
                  "name": "Cython",
                  "version": "0.29.21",
                  "path": "/home/maxnoe/.local/anaconda/envs/cta-dev/lib/python3.7/site-packages"
               },

One question is if we should store all packages here , or limit it to  the ctapipe dependencies as done in ctapipe-info? If running in a shared environment, the list of packages could be very large (in my development env, I have 270 packages installed, but don't really care about the versions of most as they have no effect on the data generated by ctapipe)

We can think about this, yes. But identifying all transitive dependencies, as is needed for fully reproducing the requirement, might be hard.

Yeah, I can't think of a way to get the list of dependencies constantly without just hard-coding it.  Though I didn't look too hard. It may not be possible/easy.

We could use sys.modules, which are all the imported modules.


[0.9.5] InfluxDB Intermittently Hangs (Doesn't Send Response), perhaps environmental cause

The issue I'm having is during querying Influx, occasionally no response is sent and the process hangs until terminated. I've experienced this problem in my Rails application locally using the Influx Ruby adapter and also in simple test scenarios using the CLI and cURL. Interestingly, when I used the UI on :8083 it worked without any issues.
System: OS X 10.11.1
Influx Version: <IP_ADDRESS>
Installed with Homebrew
Steps to Reproduce Issue:
$ influx
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version <IP_ADDRESS>
InfluxDB shell <IP_ADDRESS>
> CREATE DATABASE mydb
> USE mydb
Using database mydb
> INSERT cpu,host=serverA,region=us_west value=0.64
> SELECT * FROM cpu
name: cpu
---------
time      host  region  value
1449091283892011550 serverA us_west 0.64

> SELECT * FROM cpu
name: cpu
---------
time      host  region  value
1449091283892011550 serverA us_west 0.64

After some amount of tries later:
> SELECT * FROM cpu
(nothing)

I also tried the same query using cURL.
curl -G http://localhost:8086/query  --data-urlencode 'db=mydb' --data-urlencode 'q=SELECT * from cpu'

Works most of the time, but eventually nothing is returned and the terminal just hangs there until I ctrl-c out of it.
When tailing the Influx log, I normally see the normal query/response.
[query] 2015/12/02 16:56:01 SELECT * FROM "mydb"."default".cpu
[http] 2015/12/02 17:01:05 ::1 - - [02/Dec/2015:17:01:05 -0500] GET /query?db=mydb&q=SELECT%20%2A%20from%20cpu HTTP/1.1 200 154 - curl/7.43.0 2f93ac95-9940-11e5-82c0-000000000000 386.568µs

When it fails, nothing shows in the log (no query or response or anything else).
I should also mention, that a coworker is working on the same Rails application with the new feature implementing Influx and has had no issues. He setup a loop to cURL Influx 1000 times and it didn't fail. I'm certain this is something to do with my environment, but I can't determine the source.
I'm not sure what other information to provide, but I could definitely use some help figuring out what is going on here.

SELECT * FROM foo can be an expensive query. Is the machine starved for CPU, RAM, or IOPS?

Thanks for the quick response @beckettsean! I don't think it's any of those concerns. I captured my stats when experiencing the issue.
Idle CPU: 89%
Free Memory: 10GB
Reads in/sec: 1
Writes out/sec: 14
The trivial scenario I'm using to troubleshoot the issue only has a single point in the measurement.

Ahh, turns out this was an issue with Forticlient. I turned it off an ran 1000 queries in about 10 seconds with no issue :smile:

If anyone is interested, this is the error I found in my syslog that pointed me in the right direction.
Dec  3 11:28:36 Andres-AC-MBP kernel[0] <Notice>: fctwfnke : error! - please unload again because unregister is not completed yet
Dec  3 11:28:36 Andres-AC-MBP kernel[0] <Notice>: Kext com.fortinet.fct.kext.fctwfnke did not stop (return code 0x5).
Dec  3 11:28:36 Andres-AC-MBP kernel[0] <Notice>: Kext com.fortinet.fct.kext.fctwfnke can't unload - module stop returned 0xdc008017.
Dec  3 11:28:56 Andres-AC-MBP ftgdagent[23847] <Error>: WARNING: The Gestalt selector gestaltSystemVersion is returning 10.9.1 instead of 10.11.1. This is not a bug in Gestalt -- it is a documented limitation. Use NSProcessInfo's operatingSystemVersion property to get correct system version number.
  Call location:
Dec  3 11:28:56 Andres-AC-MBP ftgdagent[23847] <Error>: 0   CarbonCore                          0x9e07bf1d ___Gestalt_SystemVersion_block_invoke + 135
Dec  3 11:28:56 Andres-AC-MBP ftgdagent[23847] <Error>: 1   libdispatch.dylib                   0x936d86c3 dispatch_once_f + 78
Dec  3 11:28:56 Andres-AC-MBP ftgdagent[23847] <Error>: 2   libdispatch.dylib                   0x936d9f4d dispatch_once + 31
Dec  3 11:28:56 Andres-AC-MBP ftgdagent[23847] <Error>: 3   CarbonCore                          0x9dff79e1 _Gestalt_SystemVersion + 1047
Dec  3 11:28:56 Andres-AC-MBP ftgdagent[23847] <Error>: 4   CarbonCore                          0x9dff718a Gestalt + 154
Dec  3 11:28:56 Andres-AC-MBP ftgdagent[23847] <Error>: 5   ftgdagent                           0x00076fa1 main + 1297
Dec  3 11:28:56 Andres-AC-MBP ftgdagent[23847] <Error>: 6   libdyld.dylib                       0x960c56ad start + 1

Thanks for the followup, @andremleblanc.


managed to ensure ES stays up to date with postgres for many to many relationships

got tests for experiement set / experiement indexing correctly in ES ……and it's all good

Coverage increased (+0.05%) to 53.117% when pulling a8b54719a2309ad5fc6bf90cde83458f9d2735f4 on ff-268_dblevel-query into c5572b3d11819ab7dd389cf46666eee0c81a674b on master.

Coverage decreased (-4.5%) to 48.607% when pulling a8b54719a2309ad5fc6bf90cde83458f9d2735f4 on ff-268_dblevel-query into c5572b3d11819ab7dd389cf46666eee0c81a674b on master.


clear statement about WKHTMLTOPDF only with security flaws possible

Describe the Bug
The documentation about is a bit missleading?

Note: as of BookStack v21.08 you’ll need to also enable untrusted server fetching in your .env file like below. This change was made for security since, in many cases, wkhtmltopdf will perform fetches to external URLs which may be defined by users. You should only enable the below option in environments where only trusted users can export content.

It took me long time for trying the "NOT optional"
ALLOW_UNTRUSTED_SERVER_FETCHING=true
Steps to Reproduce
enable WKHTMLTOPDF
without "unsecure fetches"
# In .env file
WKHTMLTOPDF=/home/user/bins/wkhtmltopdf

Expected Behaviour
My missunderstanding was "optional security"
# In .env file
WKHTMLTOPDF=/home/user/bins/wkhtmltopdf

"optional" ... with less functionality
ALLOW_UNTRUSTED_SERVER_FETCHING=true
Screenshots or Additional Context
No response
Exact BookStack Version
v21.12.5
PHP Version
No response
Hosting Environment
Ubuntu 20.04

Hi @ManfredHerrmann,
The use of also within "you’ll need to also enable untrusted server fetching", and the lack of mention of "optional" makes it seem clear to me that this was a requirement. I'm not clear how it's misleading.
Any constructive recommendation in regards to how the docs can be altered to make it clearer?
I didn't want to have both config lines in the same box as I was worried users may copy and paste  without understanding the security risk. It also represents it as a seperate option (Since it is and may control other abilities) rather than being something specific to the WKHTMLTOPDF option.

Hi @ssddanbrown,
sorry for my "bug report" ... it is the first time I try to contribute to famous OpenSource like BookStack :o)
this sentence ... I see its not that easy to express
You should only enable the below option in environments where only trusted users can export content.
my "constructive recommendation"
You should only enable WKHTMLTOPDF + ALLOW_UNTRUSTED_SERVER_FETCHING where only trusted users can export content.
I hope this make sense to you and to all other.

Thank you @ManfredHerrmann.
I've now updated the wording on https://www.bookstackapp.com/docs/admin/pdf-rendering/.
Specifically:

As of BookStack v21.08 the ALLOW_UNTRUSTED_SERVER_FETCHING must also be set to true for wkhtmltopdf to be enabled, without this dompdf will be used instead.

Hopefully this is much clearer in stating this option is required.
Will hence close this off.

well done @ssddanbrown, thanks


meta: copy constructor of function argument is required but not used

A function will fail to register if any of its arguments are not copy constructible even though the copy constructor is not used.
#include <iostream>
#include <entt/meta/factory.hpp>

struct Noisy {
  Noisy() noexcept {
    std::cout << "Default ctor\n";
  }
  explicit Noisy(const int data) noexcept
    : data{data} {
    std::cout << "Data ctor (" << data << ")\n";
  }
  Noisy(const Noisy &other) noexcept
    : data{other.data} {
    std::cout << "Copy ctor\n";
  }
  Noisy(Noisy &&other) noexcept
    : data{other.data} {
    std::cout << "Move ctor\n";
  }
  Noisy &operator=(const Noisy &other) noexcept {
    data = other.data;
    std::cout << "Copy assign\n";
    return *this;
  }
  Noisy &operator=(Noisy &&other) noexcept {
    data = other.data;
    std::cout << "Move assign\n";
    return *this;
  }
  ~Noisy() {
    std::cout << "Dtor\n";
  }

  int data = 0;
};

void takeNoisyConstRef(const Noisy &n) {
  std::cout << "Got " << n.data << '\n';
}

int main() {
  entt::meta<Noisy>()
    .func<&takeNoisyConstRef>("take"_hs);

  if (entt::meta_type type = entt::resolve<Noisy>()) {
    if (entt::meta_func func = type.func("take"_hs)) {
      if (entt::meta_any ret = func.invoke({}, Noisy{73})) {
        std::cout << "OK\n";
      }
    }
  }
}

This has slightly different output in 3.2.2 and master but in either case, the copy constructor is not used.
// 3.2.2
Data ctor (73)
Got 73
Dtor
OK

// master
Data ctor (73)
Move ctor
Got 73
Dtor
Dtor
OK

If I comment out the copy constructor, the function doesn't register. We run into a static_assert. If this was real code, I could just use a pointer instead of a reference so this is no big deal. This was previously discussed in #336.

Oh, wait. This works as intended in a sense.
The meta system is designed to let the user decide what to do and when to do it rather than adopting a fixed policy all the times. So, you can decide when you want to pass an actual object by copy or by reference as an argument (by wrapping it in a std::ref), as well as a a meta_any (by dereferencing it like *any). Similarly, you can decide when you want to capture a return value that is a reference by copy or by value (with the entt::as_alias_t type used on registration).
In this case, it doesn't matter if you're not actually copying the object. Because you pass it directly to the function, you're telling to the underlying meta_any that you want it to copy the value and create a detached instance to pass down the tube. In this case, copy doesn't mean that it invokes the copy-constructor. Actually, since it's a temporary, the move constructor is used by the meta_any contains a copy now and must be copyable for itself, thus the copy constructor of the underlying type must exist.
As a side note, remember that internally we convert literally everything to meta_any because we need an opaque way to pass back and forth values. Otherwise we wouldn't use a reflection system if compile-time types were known.
To work around the issue, you should just pass the value by reference:
if (Noisy noisy{73}; entt::meta_any ret = func.invoke({}, std::ref(noisy))) {
    // ...
}

In this case, you're constructing an aliased meta_any that won't make any copy of the underlying object and therefore doesn't need it to be copy-constructible.

I just realised that the function in the example fails to register in 3.2.2 but doesn't fail in master. So I deleted a big chunk of this comment!

Using a reference wrapper (and calling with std::ref) causes the call to fail at runtime (but on 3.2.2 it works).
void f(std::reference_wrapper<std::unique_ptr<int>>);

Using a const reference wrapper fails at the call site because this constructor takes a non-const pointer. We run into that constructor when using std::cref. If we use std::ref instead, the call fails because the types don't match. This seems odd because you can call a function taking a const ref with std::ref but not a const reference wrapper.
void f(std::reference_wrapper<const std::unique_ptr<int>>);

Are these two behaviours bugs or features? I honestly don't know! 😀

Are these two behaviours bugs or features? I honestly don't know! 😀

Me neither! :smile:
When you cross the boundary of a reflection system is hard as heck to make the whole type system of C++ work nicely.
The main problem here is that meta_any stores internally a non-const void *.
Whether you use a const_cast to get rid of constness for a constant reference wrapper or use a const void * internally, you lost the information on the constness of the original type and one can invoke a cast<T> to get a non-const reference to whatever type is shipped by the wrapper. This quickly becomes a way to pass const objects as non-const ones to meta functions.
We could store aside a boolean value and check it at runtime within cast but imho it doesn't worth it and can be annoying due to its runtime nature.
Similarly, since meta_any uses the reference wrapper as a special token, functions that require it as an argument won't work any time soon because it's wiped out when crossing the boundary.
In my opinion it's not a big problem though, mainly because the reference wrapper isn't meant to be used as an argument to a function in C++. You can do that ofc but there is no advantage on using a plain reference. Instead, their purpose is primarily to store references (as in non-nullable pointers) in containers, something that would be impossible otherwise.
Probably these are corner cases that just don't fit well with the current features but I'm open to suggestions.
I see it would be great to have something perfect but I'm perfectly fine with this kind of limitations if they make it possible to have some features like aliasing. I'm pretty sure I won't try to attach a function that accepts a reference wrapper as an argument anyway while I like quite a lot the fact that I can avoid literally all copies back and forth with a proper configuration.

Makes sense.