[WIP] Access matrices through iterators where possible.

Not ready for merge. Started from changing implementation of trace to use uniform access to the diagonal elements. Current plan is:

Separate the access loop into its own function.
Put the function interface into a trait function. The "Shape" trait seems like the right place.
Move trace functionality into a trait... maybe NumberMatrix?

If this sounds ok, I'll do those, then generalize to other functionality.

Ok, now I'm confused. Added the feature that is supposed to be required, still doesn't work. Ideas what is really wrong welcome.

Will see today. Apologize for delay.
On Aug 3, 2015 7:22 AM, "Daniel Vainsencher"<EMAIL_ADDRESS>wrote:

Ok, now I'm confused. Added the feature that is supposed to be required,
still doesn't work. Ideas what is really wrong welcome.
—
Reply to this email directly or view it on GitHub
https://github.com/indigits/scirust/pull/16#issuecomment-127097425.

I don't see the DiagIter being used in trace method yet.
I thought further about the iterator approach. I have few concerns about it.  The changes in trace() itself look okay where u replaced calculation using stride with step which is stride + 1.

Creating an iterator has it's own overhead of storage cost, construction time cost. This may not be significant for large matrices, but would be important for small matrices. Though this is not a big concern.
Is Rust fully able to rewrite a next() method call overhead and unwrapping of Option<> return type overhead into a standard optimized for loop? It does claim so. But I haven't verified it myself.
In the next() method you have written let offset = self.pos * (self.stride + 1); Now this involves an extra multiplication instruction. My original implementation has a simple addition operation. In general, multiplication is considered more costly operation than addition.
You also ended up calling .clone() in next implementation. Rust actually makes it a bit hard to write low level generic code.
A typical optimization technique involves unrolling a loop and executive multiple instructions in parallel (for example by using MMX instructions). Doing such a thing is straightforward if we are working with standard C style loops. I am not very sure if Iterators can be optimized in that fashion.

Hi Shailesh!
This conversation is fun :)

This is Work In Progress [WIP]. I am trying to make the changes very gradually, to learn as I go, to give both of us opportunities to think about issues as you mention, and to keep the feedback from rustc manageable. In particular, first I cleaned the trace, then I added the iterator, next I will make the trace use the iterator. So, that part is coming soon.
About iterator efficiency: rustc is moving in the direction of replacing other constructs (from_fn was removed, for example) by iterators; I think the goal is to use iterators all over the place, as a zero cost abstraction, as loops are in C. In particular, using iterators is one of the ways that Rust accepts for avoiding array bounds checks: make sure that the iterator cannot access the wrong data when setting it up, then you don't need to test every access. I think this is a smart approach to the problem! I haven't tried to test this myself, but a dot product I implemented using an iterator had equal or better performance than the one used by numpy (pretty well optimized C). So this seems reasonably a safe bet, though appropriate performance tests would probably be a good idea.
Iterator construction/storage costs: Iterators are generally 1-3 fields, allocated on the stack, so the cost is minimal, and highly accessible to LLVM for further optimization. So indeed, I think we can reasonably ignore the storage and construction costs, even for small matrices.
let offset = self.pos * (self.stride + 1): you are right! thanks for reminding me. I've fixed it on my machine, will include in the PR in the next push (working on something else at the moment). I am not sure whether an integer multiply vs add makes a difference in a data-intensive code like this (probably memory bandwidth bound anyway). The question of how to monitor performance (and get alerted on regressions) in this kind of project is becoming pretty interesting...
About clone and writing low level generic code: yes, I didn't particular try to get the best possible performance out of trace, in particular if clone worked for you I wasn't going to change it. But my experience [1] with the dot product was pretty amazing. The language feature are there, and while the documentation is still lacking, the community is very much willing to help. There in the end people suggested multiple excellent solutions. I guess the clone can be removed by using an iterator that is generic over references or not. Of course when f64 is not much bigger than a pointer, it is not clear that the clone costs us anything.
About SIMD instructions and parallelizing a loop: I am not sure this is not applicable at all to trace: IIUC, SIMD instructions operate on contiguous memory. In rust, this corresponds to slices. Hence I think the highest levels of efficiency can be reached only when operating on slices. Nicely, given something that is a slice (e.g., row in a row major matrix), we can get the iterator for it. Therefore, operators defined over an iterator will also work on a slice. Because the genericity comes from code generation, not indirection, the generated code can use the memory locality (don't know whether it does in practice). In rustc, SIMD is currently unstable and manual. I guess it will become automatic and stable at some point, so not sure it is worth chasing right now. What are some good examples of matrix algorithms where you want to have the option to parallelize them, and an iterator based implementation could get in the way? maybe that is the highest risk issue that we better check out soon.

[1] https://www.reddit.com/r/rust/comments/3f7hd9/fighting_the_borrow_checker_for_generic_dot/

Here are some matrix operations in scirust which are heavily dependent on locality of reference and can potentially be further accelerated via SIMD etc.  in future:

matrix multiplication  A * B  ( can be found in matrix_transpose.rs)
gram matrix computation :  A' * A.  [ A standard part of a normal equation (A' A) x = A' b which is used for solving least squares problems.
Gaussian elimination ( GaussElimination structure and its solve method in linalg/linear_system.rs)

In fact I have two implementations of matrix multiplication.  In my design, matrices are column major following MATLAB/FORTRAN convention. A naive matrix multiplication  tries to multiply each row of A with each column of B resulting in extremely slow performance for large matrices as there are too many cache misses.  The alternative uses a cache oblivious algorithm to compute the transpose of A first and then multiplies each column of A' with each column of B to achieve A * B.
Approach 1 is implemented in multiply_simple function.
Approach 2 is implemented as a combination of
                    let m2 = m.transpose();                     // Matrix multiplication with transpose                     multiply_transpose_simple(&m2, &m).is_ok();
Benchmarking showed the second approach to be  markedly better than the first one for large matrices.
Looks like I forgot to integrate the second approach in the implementation of ops::Mul trait. My bad.

BTW, I don't think f32 and f64 will be the only number types used for representing real matrices. I plan to introduce Fixed point data types also.  So a QM.N [1] format would give full flexibility to the user of the library to choose how many bits they need to represent the integer part and how many bits for the fractional part while keeping the data type within say 16 bits or 32 bits.  There are many signal processing applications where this scheme would work just fine and won't need the full dynamic range of floating point numbers.  This also allows us to pack more data in less memory. Assuming that Rust would someday grow into embedded domains, having this flexibility would allow this generic library to be used in very low memory applications too.
I believe that well designed scientific computing algorithms are expected to be CPU bound rather than data bound. See [2] for some discussion. I am not an expert though.
[1] https://en.wikipedia.org/wiki/Q_(number_format)
[2] http://www.quora.com/What-are-some-examples-of-CPU-bound-and-non-CPU-bound-problems-What-would-be-the-best-programming-language-to-tackle-each-situation

Yes, I'm doing machine learning algorithms, specifically first order stochastic optimization. This consists mostly of matrix vector products, which as Victor says, is memory bandwidth bound. In this case, the most important thing is efficient memory access, a stray in-register instruction doesn't matter. I believe the same holds for reasonable implementations of trace.
For smaller representations, my point stands even more strongly: manipulating their copies is generally cheaper than manipulating pointers to them (so clone is not more expensive than using references). For, say, BigInts, avoiding copies begins to matter.
BTW, is there a reason to use only column major format? One of my goals is to support interoperation with NumPy, which is row major by default.

Seems like putting most functionality on traits should make it easy to also support row major representation. I wonder if that is a zero copy way to implement transpose.

Interesting that the matrix multiplication algorithm you mention is cache oblivious, I didn't know that. It also seems to reduce matrix multiplication to lots of slice-slice dot products, which is nice. That seems perfectly well suited for building on top of efficient iterators for slices. If SIMD doesn't work with iterators, then we can write a dot product that does SIMD, then build the MMM and gram matrix calculation on top of those instead. In both cases, unsafe access patterns can be hidden a couple of layers under.

A useful place for applying your diagonal iterator : has_zero_on_diagonal in singularity.rs.

I have just committed some changes. Shape now has get() and get_unchecked() as separate methods. get() now returns Option<T> .  get_unchecked() is unsafe.  All parts of code have been updated accordingly and unit tests are running fine. You can review the changes.  Two of your changes in ops.rs and trace method got anyway incorporated as I was trying to compile with the new rust nightly and  trace method was affected by the changes related to get().
You will need to merge it before you can push your changes.
Now, many parts of the code (especially in linear algebra section) are littered with the usage of get_unchecked() thus having unsafe blocks in their implementations. They are pretty good use cases of experimenting with different kinds of iterators on the matrix data. Good iterators are likely to reduce the use of get_unchecked() as much as possible.

Cool!

Ok, so diag_iterator is now public, and along with the row and column iterators, requires little of T (actually, I don't understand why most of the bounds that remain are still necessary, but the compiler is demanding them.) Might be ready to merge.

I think I'm done with the diagonal access case. If it looks good to you, lets merge it and then work on replacing other instances of get_unchecked with iterators separately.

The code looks good to me.  As expected the new code is shorter and more expressive and easier to maintain.
Few comments:
I had put +#![feature(associated_type_defaults)] in lib.rs. I guess this need not be put in ops.rs additionally.
Would it be possible for you to write a couple of test benches for say trace()  and diagonal_vector so that we can verify that we are not really losing anything on performance?
You could go like this:
a) clone separately from scriust.
b) develop some simple benchmarks and run them.  Preferably for large matrix sizes (2048x2048).
c) Store the performance numbers in some sheet.
d) Copy the benchmarks to your new code.
e) Run and generate the numbers again.
f) Checkin the benchmarks also as part of this pull requests.
g) Publish before and after optimization numbers here.
This will help in having a strong justification for introducing the changes.

I'm not sure trace etc. are the most important topics for a benchmark, but sure. I like the approach in [1], are we ok with adding Criterion as a dependency? If we're going to heat up the world to get data, might as well make the most of it. Ideally, this should be run from CI, with graphs published over time, regressions warned about etc. But I don't know of an easy way to automate this stuff.
[1] https://github.com/danburkert/rust-ringbuf/blob/master/src/bin/bench.rs

I don't see criterion yet on crates.io.  It is a port of a corresponding Haskell library. I guess you already have experience with Haskell. So my question would be, your comfort level with the library, what is it's stability level? Is API expected to change frequently? Initially I had some dependencies with different rust libraries directly from GITHUB.  After crates.io was launched, I slowly restricted myself to more popular and stable libraries there and removed other dependencies.

I have some experience with haskell, used criterion just a little bit. I
have good experience with profiling, but my experience with benchmarking is
all semi automated, and then it never gets run often enough to help etc. I
only just saw criterion for rust, so have no real information about those
questions. My guess is that the API will be relatively stable simply
because it is a port of something well-established, but it is only a guess.
Maybe worth waiting for a crates.io version.
On Tue, Aug 4, 2015 at 2:40 PM, Shailesh Kumar<EMAIL_ADDRESS>wrote:

I don't see criterion yet on crates.io. It is a port of a corresponding
Haskell library. I guess you already have experience with Haskell. So my
question would be, your comfort level with the library, what is it's
stability level? Is API expected to change frequently? Initially I had some
dependencies with different rust libraries directly from GITHUB. After
crates.io was launched, I slowly restricted myself to more popular and
stable libraries there and removed other dependencies.
—
Reply to this email directly or view it on GitHub
https://github.com/indigits/scirust/pull/16#issuecomment-127707438.

--
Daniel Vainsencher


[Improvement]: Make About part more Attractive

In Home section the about part should be more attractive. Use animation and create beautiful layout.

Can I work on this?

Hello, @Tomiloba2
Yes you can do it. But you are requested to upgrade your forking repo because I have done some changes in my code. Now you can do it 👍You can see my changes in the code.
Thanks man for response.

Alright
On Fri, Sep 2, 2022, 06:33 Amit Barman @.***> wrote:

Assigned #1 https://github.com/AmitBarman99/Horizon/issues/1 to
@Tomiloba2 https://github.com/Tomiloba2.
—
Reply to this email directly, view it on GitHub
https://github.com/AmitBarman99/Horizon/issues/1#event-7310414930, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AZKPD5BHJY2O464N2J4WIYDV4GGSZANCNFSM576OLNDQ
.
You are receiving this because you were assigned.Message ID:
@.***>

I would love to do this if it's not done yet 🤔

Hey @marwanzaky
I already assigned one person to do this. I think he started.
I think it will be better if you will work on "journey" part. Both are same . You can see this issue here #2  . Hope that you will love to do this. Thanks man

Alright, I'll check it out.
On Sat, Sep 3, 2022, 07:18 Amit Barman @.***> wrote:

Hey @marwanzaky https://github.com/marwanzaky
I already assigned one person to do this. I think he started.
I think it will be better if you will work on "journey" part. Both are
same . You can see this issue here #2
https://github.com/AmitBarman99/Horizon/issues/2 . Hope that you will
love to do this. Thanks man
—
Reply to this email directly, view it on GitHub
https://github.com/AmitBarman99/Horizon/issues/1#issuecomment-1236058398,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AZKPD5EL5UREQEZVWDAHS4TV4LUUVANCNFSM576OLNDQ
.
You are receiving this because you were mentioned.Message ID:
@.***>


Unbind subscriptions automatically when view gets detached

[x] Android bindings
[ ] JavaFX bindings

I don't think FX requires it.


Move images from lesson folder to media folder

Is your feature request related to a problem? Please describe.
In the ninth exercise, all the images are in the main folder for the lesson while there is an images folder not all the images are inside it.
Describe the solution you'd like
Move all the images to the images folder, don't forget to change their path in the .md files or ipynb
Additional context
https://github.com/microsoft/generative-ai-for-beginners/tree/main/09-building-image-applications

I'm Self assigning myself to this issue.


Make the package.json more lenient

Current expects node 6.7.0, just make it so greater or equal to 4

@jamesmenera  Should we bump up the minor version after this?

@shishirmk yeah we should bump the version


Gallery app could use a compelling demo/usage of chips

The gallery (and our material widgets) have chips (https://www.google.com/design/spec/components/chips.html#chips-specs) but we don't have a good demo of them.
We could consider building a demo that shows "chips in action":

[ ] dragging a chip for reordering
[ ] adding multiple chips to a row
[ ] editable chips

Fixed with new Chip demo.


[Update]: Aliança Lusa Family

Family name
Aliança Lusa
Family URL
https://royaleapi.com/clan/family/aliancalusa/clans
Family configuration
Aliança Lusa Clan Family

https://royaleapi.com/clan/family/aliancalusa

aliancalusa.yml

name: Aliança Lusa Family
key: aliancalusa
color: red
emblem: Arrow_04
info:
  logo: https://ibb.co/rsShzs7
  description: >
     A Família Aliança Lusa, cujo clã principal foi criado a 18/09/2022, o segundo a 21/10/2022, e o terceiro a 22/06/2023, está já no TOPO do Ranking de Portugal no que toca a troféus e ligas. Temos também um clã para férias, o Aliança Lusa Ⓡ! Somos também clã ATIVO de guerra, com Discord, grupo no Whatsapp e com constantes Torneios Internos com prémios! ATREVE-TE!

     The Aliança Lusa Family, whose main clan was created on 09/18/2022, the second on 10/21/2022, and the third on 06/22/2023, is already at the TOP of the Portugal Ranking in terms of trophies and leagues. We also have a vacation clan, the Aliança Lusa Ⓡ! We are also an ACTIVE war clan, with Discord, Whatsapp group and constant Internal Tournaments with prizes! DARE TO JOIN US!

social:
  - discord: https://discord.gg/SqtyGHAzQN

clans:
  - name: Aliança Lusa
    tag: Q0R08YLJ

  - name: Aliança Lusa 2
    tag: Q20GUCV8

- name: Aliança Lusa 3
    tag: GC92VYJP

- name: Aliança Lusa Ⓡ
    tag: QQ9QP9JJ

Additional Info
No response

All good to upload

The website is still not updated. Any trouble?

Why is it taking so long?! First time was quick...


Python3 fixes

He @berlincode ,
I attempted to use sjcl with Python3 and came across issues with floor division and using a relative import.
The changes in this pull request allowed me to use sjcl with Python3.
Let me know if you have any questions or feedback.
Thanks,
Arne

Hi Arne. Sorry for the long delay. I'll hopefully have a look at it tonight.
Thanks,
Ulf
On 08.07.2016 23:58, Arne Welzel wrote:

He @berlincode https://github.com/berlincode ,
I attempted to use sjcl with Python3 and came across issues with floor
division and using a relative import.
The changes in this pull request allowed me to use sjcl with Python3.
Let me know if you have any questions or feedback.
Thanks,
Arne

    You can view, comment on, or merge this pull request online at:

https://github.com/berlincode/sjcl/pull/2
    Commit Summary

tests: use bytes instad of str

sjcl: use floor division in truncate_iv() for python3 compat

sjcl: use relative import for python3 compat
File Changes

M sjcl/init.py
https://github.com/berlincode/sjcl/pull/2/files#diff-0 (2)

M sjcl/sjcl.py
https://github.com/berlincode/sjcl/pull/2/files#diff-1 (2)

M tests/simple.py
https://github.com/berlincode/sjcl/pull/2/files#diff-2 (4)
Patch Links:

https://github.com/berlincode/sjcl/pull/2.patch

https://github.com/berlincode/sjcl/pull/2.diff

—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/berlincode/sjcl/pull/2, or mute the thread
https://github.com/notifications/unsubscribe/AI99JX9FqmYZPKWKHtohGSwWNftC65CSks5qTsf3gaJpZM4JIblG.

Thanks!
Updated to version 0.1.5 and published to https://pypi.python.org/pypi/sjcl/0.1.5


module 'objaverse_xl' has no attribute 'load_smithsonian_metadata'

Hi all, I met this error when trying to download the data
In [1]: import objaverse_xl

In [2]: df = objaverse_xl.load_smithsonian_metadata()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Input In [2], in <module>
----> 1 df = objaverse_xl.load_smithsonian_metadata()

AttributeError: module 'objaverse_xl' has no attribute 'load_smithsonian_metadata'

Sorry, working documenting the latest API updates with Colab as we speak! Will be done tonight, but 90% done now :)
Take a look: https://colab.research.google.com/drive/15XpZMjrHXuky0IgBbXcsUtb_0g-XWYmN?usp=sharing
I updated the README with this link instead of the old one for now.


[Git] Use https or relative path for submodule urls

Hello,
Wanting to try out transmitter-linux i cloned recursively this repo and the cloning failed on the sub modules.
The issue is that i used a computer of which i didn't authorize the ssh keys on github.
The simple fix is of course to add the public key to github.
As this is a public repo it would make sense to be able to clone it without a github account. So i replaced the sub module urls with https urls instead of ssh ones.
For the opendroneid-core-c module, as it is in the same repo, i used a relative path, this way

if someone clones transmitter-linux using https, opendroneid-core-c will be cloned using https as well
if someone clones using ssh, the sub module will be cloned using ssh as well
in case one day you'd move the whole opendroneid project to some other git server, the relative url wouldn't change

The hostapd and bluez urls work with anonymous ssh, so i could revert this part of the PR if you prefer.
Thanks for this nice project !

Thanks. This makes sense. Consistency is always a good thing.


build_runner takes 3-4 mins when just adding drift dependencies

Describe the bug
I've a project that I need to add an offline support for it.
I tried to add drift dependencies as listed in docs, and when I try to run dart run build_runner it takes 3-4 mins.
Before adding the dependencies, it took only 30-50 secs.
I can't identify why it is taking so much time. Can you help me please?
Note: I haven't added any drift related code yet. Just the dependencies

Even 30s is pretty bad, multiple minutes is a catastrophe :scream:
Drift uses a fairly modular build setup internally where files are independently analyzed first to find Dart files defining drift tables. The generator later reads the intermediate analysis results to build the structure for the database. If you have a very large workspace, I suspect the initial analysis runs could take a long time since they need to look at every file in the project. For incremental rebuilds, the time should be a lot shorter though.
A general build optimization is to reduce the amount of files some builder runs on. For instance, if you know that your database code will be in lib/database, you could create a build.yaml file next to your pubspec with the following content:
targets:
  $default:
    builders:
      drift_dev:
        generate_for:
           - "lib/database/**"

That should hopefully reduce build time drastically, but it should have never been at multiple minutes to begin with. I remember build_runner being able to spit out a timing diagram for builds, but I can't find anything about that anymore. I'll check how to profile builds and follow up, maybe we can see what's taking so long there.

Hi @simolus3
I have a question - mostly an educational one. Would code generation in a project like drift work if the code you generate is based on the AST model (https://github.com/dart-lang/sdk/blob/master/pkg/analyzer/doc/tutorial/ast.md) and not the Element model? (https://github.com/dart-lang/sdk/blob/master/pkg/analyzer/doc/tutorial/element.md)
I have created a code generator (https://github.com/spideythewebhead/tachyon) that uses only the AST model and so the build times are in general less than build_runner but I am wondering if it can cover "all" the cases that build_runner would.
You see a plugin based on the code generator that wraps dio and generates http services (https://github.com/spideythewebhead/http_client_plugin/blob/main/lib/src/code_generator.dart)
And another one for data class (https://github.com/spideythewebhead/data_class_plugin) - tho this is more complicated

@simolus3  Thanks for the detailed explanation. Yes that's true, using the unresolved AST you have to make some assumptions I would say. For example on my code generator I have a custom dart type that makes some assumptions on the types and doesn't actually resolve the full type. So if you have a typedef for the type List it won't work, it works only for the predefined types that the dart provides or I would say the common patterns as least.
Also some common scenario is to search for a class to check if there's declared method, in my case to resolve this, the generator goes through all the dependencies of the "current file" and searches for that class until it finds a match and returns the AST class declaration.
I have created a very simple postgres client and then tried to create a simple orm based on my code generator to see if that's possible and that's how I stumble on this library ( which seems amazing 👏 ).
I have one more question, do you believe that meta programming is going to resolve the speed issue of build_runner having to resolve the full AST or does it fall under the same issues?

Even 30s is pretty bad, multiple minutes is a catastrophe scream
Drift uses a fairly modular build setup internally where files are independently analyzed first to find Dart files defining drift tables. The generator later reads the intermediate analysis results to build the structure for the database. If you have a very large workspace, I suspect the initial analysis runs could take a long time since they need to look at every file in the project. For incremental rebuilds, the time should be a lot shorter though.
A general build optimization is to reduce the amount of files some builder runs on. For instance, if you know that your database code will be in lib/database, you could create a build.yaml file next to your pubspec with the following content:
targets:
  $default:
    builders:
      drift_dev:
        generate_for:
           - "lib/database/**"

That should hopefully reduce build time drastically, but it should have never been at multiple minutes to begin with. I remember build_runner being able to spit out a timing diagram for builds, but I can't find anything about that anymore. I'll check how to profile builds and follow up, maybe we can see what's taking so long there.

After specifying the path of the drift files in build.yaml, it has been reduced again to 30-50 secs.
I agree that 30-50 seconds is bad as well, I will have to do more investigation about it.
I think the rest is not related to drift itself, so I will close this issue.
Thanks for helping!


Filter out irrelevant directories in SimpleCov reports

Currently, the coverage data reported to Coveralls includes lines in RSpec helper files, which inflates the coverage percentage.
This config file for SimpleCov filters out files in the listed directories so that coverage is not artificially inflated.

Merged in 16d05b79b05a1c4d4221c1da7c51e34778c02c0c. Sad about the dip in this wonderful vanity metric, but oh well. :)


Still giving non-fatal Failed test 'route GET /hello/Foo.html'

It gives 'Custom 404 page' instead of expected result.  :)
MBP-Sergej:~ sed$ zef install Bailador
===> Searching for: Bailador
===> Testing: Bailador:ver('0.0.9')
# Skipping author test. Set AUTHOR_TESTING to enable.
# Skipping author test. Set AUTHOR_TESTING to enable.
# Skipping author test. Set AUTHOR_TESTING to enable.

    # Failed test 'route GET /hello/Foo.html'
    # at t/30-examples-app.t line 90
    # expected: $[200, [:Content-Type("text/html")], "Hello Foo.html!"]
    #      got: $[404, [:Content-Type("text/html;charset=UTF-8")], "\n    \n        <title>Custom 404 page</title>\n        <meta charset=\"UTF-8\">\n    \n    \n
Hello, this is 404 for you.
\n    \n\n"]
    # Looks like you failed 1 test of 2
===> Testing [OK] for Bailador:ver('0.0.9')
===> Installing: Bailador:ver('0.0.9')

1 bin/ script [bailador] installed to:
/usr/local/Cellar/rakudo-star/2017.07/share/perl6/site/bin

that's not a failure during the installation.
With use Test you can mark tests as "todo", thats basially a different type of skipping a Test. Documentation regarding this feature of Test can be found here: https://docs.perl6.org/language/testing#index-entry-todo-todo(%24reason%2C_%24count_%3D_1)
So what you are seeing is the todo output of a test that is not yet implemented in Bailador. In this case it is the feature that was requested in this ticket #178.
Unfortunatelly you can't tell from the output that you've provided that this is a skipped test.

This noisy reporting is an issue with Test.pm6 that comes with Rakudo 2017.07
It has been fixed since then and will be in the next release of Rakudo
https://rt.perl.org/Public/Bug/Display.html?id=131767

In any case, thanks for reporting!

Hmm... Didn't knew. Thank you!


alacritty catppuccin-macchiato.yml + ipython unreadable

I have catppuccin-macchiato.yml import and use Alacritty.
Unfortunately it's not readable template to use IPython:
is there any smoother solutions?

This is consistent across other Terminal emulators, it looks like you'd have to set up the Terminal Colors for IPython. Might be worth a separate port.

hey, i've just updated the catppuccin/python docs with an example of how to get the colours into ipython. https://github.com/catppuccin/python/blob/main/README.md#ipython
let me know if you run into any trouble with it :)

Thank you for that, but it's a bit complicated.
I want to use terminal and catpuccin globally, and I can use IPython globally. But in order to use catpuccin in this case I have to install it in an environment.
Is there any other solution to use catpuccin from path, rather than install it in every project?

it should work if you install it globally in the same way you have installed ipython. that's how i use it!

I just realised that my global IPython is 3.11, but my project env is 3.8 version of python. Guess the questions remains - is there any solution to point to the repo with catpuccin, instead of a python package?

unfortunately, this is just how ipython works.
the best i can think of as a truly portable alternative is just to define the style yourself. i cobbled this together by ripping it out of our python port:
from pygments.style import Style
from pygments.token import (
    Comment,
    Error,
    Generic,
    Keyword,
    Literal,
    Name,
    Number,
    Operator,
    Punctuation,
    String,
    Text,
    Token,
)

base = "#1e1e2e"
mantle = "#181825"
text = "#cdd6f4"
red = "#f38ba8"
mauve = "#cba6f7"
peach = "#fab387"
blue = "#89b4fa"
teal = "#94e2d5"
yellow = "#f9e2af"
sky = "#89dceb"
green = "#a6e3a1"
overlay0 = "#9399b2"

class MochaStyle(Style):
    background_color = base
    line_number_background_color = mantle
    line_number_color = text
    styles = {
        Token: text,
        Text: text,
        Error: red,
        Keyword: mauve,
        Keyword.Constant: peach,
        Keyword.Declaration: blue,
        Keyword.Namespace: teal,
        Keyword.Pseudo: mauve,
        Keyword.Reserved: mauve,
        Keyword.Type: blue,
        Name: peach,
        Name.Attribute: blue,
        Name.Constant: yellow,
        Name.Decorator: blue,
        Name.Function: blue,
        Name.Function.Magic: sky,
        Name.Label: blue,
        Name.Tag: mauve,
        Literal: text,
        String: green,
        Number: peach,
        Punctuation: text,
        Operator: sky,
        Comment: overlay0,
        Generic.Heading: f"{blue} bold",
    }

c.TerminalInteractiveShell.highlighting_style = MochaStyle

it's not pretty, but it works.

Thank you for the provided class!
Catpuccin-mochiato and this example are showing the same results, that are hardly readable.

this was a very weird one, i wasn't able to replicate that on my machine but then i switched to my laptop and had the same problem there. i found one interesting thing, if you set the following option in your config:
c.TerminalInteractiveShell.true_color = True

it at least makes the completion legible:

with that set, it now looks the same as it always has on my main machine.
i have been trying to find a way to theme this dropdown properly, with no success. i will keep looking, but hopefully that makes it usable for now!

That exactly did the trick and your solution works as well globally.
Thank you very much.


Input automatically add padding top

react-native, react and native-base version
react-native: 0.55.3
react: 16.3.2
native-base: 2.4.1
Expected behaviour
Input text should be aligned center.
Actual behaviour
Input placeholder is aligned center, but input text has some padding on top.
It works fine when I change to TextInput from react-native
Steps to reproduce (code snippet or screenshot)
<View style={styles.inputContainer}>
  <Item rounded style={styles.inputBox}>
    <Input
      value={this.state.inputText}
      onChangeText={inputText => this.setState({ inputText })}
      placeholder="Type a message..."
    />
    <Icon
      onPress={this.onSend}
      style={styles.sendIcon}
      size={25}
      color="#4CAF50"
      name="send"
    />
  </Item>
</View>

const styles = StyleSheet.create({
  inputContainer: {
    backgroundColor: '#F5F5F5',
    padding: 10,
  },
  inputBox: {
    height: 40,
    paddingLeft: 10,
    backgroundColor: 'white',
  },
  sendIcon: {
    marginRight: 10,
  },
});

Screenshot of emulator/device

Is the bug present in both ios and android or in any one of them?
Only in IOS.

This should be solved for Item rounded in version 2.4.3 of native base


The amount of logs inserted in opensearch are too large

As stated in the title,the processed logs in opensearch are too large. For example,there are many fields in the cloudtrail logs,such as "@message",it is raw log context.And what if i delete the "@message" field, will it be OK?

That is good feedback. Would it be useful if there was an option to delete specific fields such as @message?

That is good feedback. Would it be useful if there was an option to delete specific fields such as @message?

Yes, i think it will be a good to configure it in user.ini

Any syntax to share?


Reminder: installation tips

Lots of you may be using pytorch 1.0++. But using the required version can save you a lot of time. Using pytorch 1.2, but you need to spend a lot of time on fixing bugs.
To sucsefully run this code, plz download cu75/torch-0.2.0.post3-cp27-cp27mu-manylinux1_x86_64.whl
and
pip install torch*whl
pip install torchvision=0.2.0

The above versions have been tested on RTX2080Ti without modifying any lines of the code.
Also pytorch0.4 also works.

were you able to replicate the results? also I have cuda 10.1 will it work with your commands


Improving the section on how to contribute

Describe the issue linked to the documentation
Hello, while I was working on my first PR I hit a few snags and problems that may also happen to new contributors, so I thought it might be useful to update the section in the documentation relative to contributing to skrub.
Some of the things I would like to add:

[ ] A checklist of the operations that should be performed for the PR (pre-commit, write tests, update the changelog etc.)
[ ] How to run tests using a specific environment with pixi on the local machine for debugging
[ ] How to check for code coverage on the local machine
[ ] How to check doctests
[ ] Preparing and running pre-commit
[ ] Some information on where the code for testing is, and how to structure tests

If you have more ideas, please add them!
@Vincent-Maladiere suggested having a section on working with pixi, but I don't have enough experience with it to write it.
Suggest a potential alternative/fix
No response

thanks @rcap107  that's a great idea. I guess this is the file to update: https://github.com/skrub-data/skrub/blob/main/CONTRIBUTING.rst

@rcap107  could you update this issue to state what remains to be done after #1131? thanks


Typechecking crashes when enum contains a duplicated string raw value

struct A
{
    enum CodingKeys:String
    {
        case a
        case b
        case b
    }
}

crashes with
sourcekit-lsp: /home/build-user/swift/lib/Sema/TypeCheckDecl.cpp:1340: evaluator::SideEffect swift::EnumRawValuesRequest::evaluate(swift::Evaluator &, swift::EnumDecl *, swift::TypeResolutionStage) const: Assertion `lastExplicitValueElt && "should not be able to have non-unique raw values when " "relying on autoincrement"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.	While evaluating request TypeCheckSourceFileRequest(source_file "/swift/swift-mongodb/crash.0.swift")
1.	While type-checking 'A' (at /swift/swift-mongodb/crash.0.swift:1:1)
2.	While type-checking 'CodingKeys' (at /swift/swift-mongodb/crash.0.swift:3:5)
3.	While type-checking 'a' (at /swift/swift-mongodb/crash.0.swift:5:14)
4.	While evaluating request EnumRawValuesRequest(main.(file).A.CodingKeys@/swift/swift-mongodb/crash.0.swift:3:10, interface)
[Error - 3:14:02 AM] Request textDocument/codeAction failed.

on swift-5.8-DEVELOPMENT-SNAPSHOT-2023-02-09-a . (amazon linux2 nightly docker container)

rdar://105761206

Reduced example. The following files to type check on current main. Sending over to apple/swift because this is not a SourceKit-LSP specific issue.
enum MyEnum: String {
  case b
  case b
}


fix: update reference architecture

Description
Issue: https://github.com/terraform-ibm-modules/terraform-ibm-account-infrastructure-base/issues/95

Release required?

[ ] No release
[ ] Patch release (x.x.X)
[ ] Minor release (x.X.x)
[ ] Major release (X.x.x)

Release notes content

Run the pipeline
If the CI pipeline doesn't run when you create the PR, the PR requires a user with GitHub collaborators access to run the pipeline.
Run the CI pipeline when the PR is ready for review and you expect tests to pass. Add a comment to the PR with the following text:
/run pipeline

Checklist for reviewers

[ ] If relevant, a test for the change is included or updated with this PR.
[ ] If relevant, documentation for the change is included or updated with this PR.

For mergers

Use a conventional commit message to set the release level. Follow the guidelines.
Include information that users need to know about the PR in the commit message. The commit message becomes part of the GitHub release notes.
Use the Squash and merge option.

/run pipeline

/run pipeline

:tada: This PR is included in version 1.3.3 :tada:
The release is available on:

GitHub release
v1.3.3

Your semantic-release bot :package::rocket:


Scroll position is unchanged when switching between feeds

Some of my feeds have a lot of entries while others have few. So it happens quite often, that I switch from a feed where I have scrolled down several pages to another where there are only few unread items.
Ever since a few versions ago, Vienna keeps the scroll position when switching between feeds. This is rarely what I need. I can currently think of no scenarios where this is advantageous. It might make more sense to remember the scroll position for each feed or not at all.
Any opinions?

#1009 seems to be related.

Fixed in version 3.1.15

At first blush this is working fine now. :)
A warm thank you goes out to all of you dev!


Added small fix in contributing md guide

Category

[X] Content fix
[ ] New article

Related issues

fixes #53

Contents of the Pull Request
🎯 Aim
The aim of this PR is to introduce a small fix to the contributing guidance

Thank you for fixing this, @Adam-it - you rock 🚀


Db::Open() takes a long time

We have a heavily used database, which stores 100G+ data, and is frequently
updated. When we close and reopen the database, it takes up to hours to open it.

Is it possible to config(Options) to make Db::Open() returns quickly?

What steps will reproduce the problem?
1. Open a database
2. Doing a lot Sets/Deletes...
3. Close data
4. Reopen it(Db::Open())

What is the expected output? What do you see instead?

Expecting Db::Open() returns within one second. But it blocks for an hour.

What version of the product are you using? On what operating system?

1.14

Please provide any additional information below.

Original issue reported on code.google.com by<EMAIL_ADDRESS>on 8 Dec 2013 at 2:51

I had a similar issue but in small scale, see
https://groups.google.com/forum/#!topic/leveldb/cAUHHY2MrNk and the reason is
that leveldb automatically compacts on Open(). To avoid this,
CompactRange(NULL, NULL) can before used before closing the db.

Original comment by<EMAIL_ADDRESS>on 9 Dec 2013 at 8:02


remove .nolocal (remnant from prebuild)

See discussion in https://github.com/prebuild/prebuild-install/pull/80

I'd like to release this and #78 and put it into leveldown before releasing that.

.nolocal doesn't seem to be used anywhere (depgrep nolocal prebuild-install gives no output) but since we're removing functionality it should be a new major.

I'm on mobile, but LGTM

4.0.0


Added "--track_promote_to" option for promoting APK between tracks.  …

Finally got around to adding track promotion feature to new mono repo.
See issue #4563.
See https://github.com/fastlane-old/supply/pull/52.

@sschendel Thanks for the PR! I've added some comments on things that need to be cleaned up before this could be merged.
Please also be sure that you've responsed to the feedback from @lacostej on the original PR
I also left a request for commentary about how/when this feature would be used.  I want to make sure this feature isn't confusing for supply users 👍

This looks great. I added 1 more request: update the documentation. Then we'll be ready to merge 🚀

Added the README section you asked for, @asfalcone.

Thanks @sschendel 💯  So glad we finally got this in!!!


Test a react component which uses hooks with isolateModules will fail since jest v27

🐛 Bug Report

Test a react component which uses hooks with jest.isolateModules() will fail since jest v27.
To Reproduce
Steps to reproduce the behavior:
Create a react component which uses hooks:
import React, { useState } from "react";

export default function TestComponent() {
  const [count, setCount] = useState(0);
  return
{count}
;
}

And test it with jest.isolateModules():
/**
 * @jest-environment jsdom
 */
import React from "react";
import { render } from "@testing-library/react";

describe("TestComponent", () => {
  it("should work", () => {
    jest.isolateModules(() => {
      const TestComponent = require("./TestComponent").default;
      const { asFragment } = render(<TestComponent />);
      expect(asFragment()).toBeTruthy();
    })
  });
});

An error will occur:
Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app
See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.

    2 |
    3 | export default function TestComponent() {
  > 4 |   const [count, setCount] = useState(0);
      |                             ^
    5 |   return
{count}
;
    6 | }
    7 |

Expected behavior

Expect no errors.
Link to repl or repo (highly encouraged)

https://github.com/weareoutman/repro-jest-isolate-modules
envinfo

  System:
    OS: macOS 11.3.1
    CPU: (4) x64 Intel(R) Core(TM) i5-7360U CPU @ 2.30GHz
  Binaries:
    Node: 14.16.1 - ~/.nvm/versions/node/v14.16.1/bin/node
    Yarn: 1.22.10 - /usr/local/bin/yarn
    npm: 6.14.12 - ~/.nvm/versions/node/v14.16.1/bin/npm
  npmPackages:
    jest: ^27.0.1 => 27.0.1

The error message seems to be relevant, and I think this case falls under point 3:  You might have more than one copy of React in the same app.
From v27 jest.isolateModules() returns always 100% fresh modules. The test mentioned import react both outside and inside jest.isolateModules callback, causing the renderer to trigger the error.
One workaround could consist of forcing Jest to return the same entity of a given module even inside a jest.isolateModules callback.
 require('module-name');
 jest.mock('module-name', () => jest.requireActual('module-name'));

There's no bulletproof solution and the right configuration should be tailored case by case.

I'm just upgrading to v27 and I've hit this issue, is there any progress in solving this issue properly?

Can I check whether the isolateModules in version 26 was working correctly? To me, it seems like it wasn't doing any isolation and they have fixed that with 27. This simple test case passes for me in 27 but fails in 26:
import OriginalComponent from './Component'

describe('Component', () => {
  it('isolates the modules correctly', () => {
    let Component
    jest.isolateModules(() => {
      Component = require('./Component').default
    })

    expect(OriginalComponent).not.toBe(Component)
  })
})

For reference, the Component.tsx file (transformed for jest by ts-jest) looks like this:
import * as React from 'react'

function Component() {
  const [value, setValue] = React.useState(1)

  return The value is {value}
}

export default Component

If I recall it correctly, Jest 26 isolated only those modules which hadn't been imported, yet. Jest 27 isolateModules takes a different approach by returning a fresh instance of every module.
This can clash with React applications/components since React wants a single React instance being executed.

Any news on this one?

What @toomuchdesign says is correct.
Just make sure you're importing React in the same scope (i.e. isolateModules) as your component.
(not sure how this works with automatic runtime, either way, isolateModules is working correctly)


Successive jobs for rendering using api/server/worker？

Hi, I want to know how to run multiple jobs together?
I create a client to receive ae render requests, and nexrender server with one or two workers.
I send two requests, same job json on the same template, with a short interval, so the first job is not yet done.
Then one of the jobs will fail and with error
Error: nexrender: Cound't find any layers by provided name (P_img) inside a composition: *
aerender ERROR: Runtime error in After Effects.
aerender version 15.1.2x69
PROGRESS: Launching After Effects...
PROGRESS: ...After Effects successfully launched

[msyPUbal3mRscFPoGPE7G] error occurred: Error: Couldn't find a result file
    at ChildProcess.instance.on (/usr/local/lib/node_modules/@nexrender/worker/node_modules/@nexrender/core/src/tasks/render.js:152:31)
    at ChildProcess.emit (events.js:198:13)`

At first, I thought it was caused by the same AE template file, but I made a copy to render on two different AE files, still one of them would fail.
Then I start two workers, with same error.
It works well if I send the second request until the first job is done.
So my question is,
how to make jobs run in parallel or even in serial? Did I misunderstand the usage of nexrender?
Thank you very much!
I work with

nexrender-worker: 1.17.1
@nexrender/api": "^1.14.4",
@nexrender/server": "^1.17.0",

It should work just fine the way you expected it to. nexrender should be capable of rending as many different jobs at a single time as there are running workers.
Looking at the error message you showed:

Error: nexrender: Cound't find any layers by provided name (P_img) inside a composition: *

I can see there is some error within the project file, nexrender is not able to find a particular layer name.
Could you show the json jobs that you submit via API, and also which parameters are you using for workers when you launch them?

I saw the discussion in #235 where mensioned that layerName sometimes will be changed by source.
So I replace "layerName" into "layerIndex" and "composition" of P_img. And it works now!
But I still wonder why layerName doesn't work if multiple jobs running.
I use nexrender-worker --host="http://localhost:3050" to start workers.
Thank you!

My initial suspicion was that it might be caused by a --reuse flag, but I see that you are not using that. So yea, I also wonder now. :D

Hi @inlife , we have found the issue.
It is nothing to do with nexrender, it is due to the aep file. Layer P_img has the same name as the asset file.
Fixed by changing the name in aep to avoid same name of layers and asset files.
Thank you!

Hi @inlife ,
I am facing same issue, I have check the composition name along with layer names and they seem to be intact. Could you help me out with this issue.
ERROR: nexrender: Couldn't find any layers by provided name (LayerName) inside a composition: *

could you share your job definition?

Sure
let projectJson = {
        template: {
            src: `file://${path.join(path.dirname(__dirname), '/public/assets/Project/filename.aepx')}`,
            composition: 'compositionName',
            outputModule: 'Team',
            outputExt: 'mov',
        },
        assets,
        actions: {
            postrender: [{
                module: '@nexrender/action-encode',
                preset: 'mp4',
                output: 'encoded.mp4'
            },
            {
                module: '@nexrender/action-copy',
                input: 'encoded.mp4',
                output: `${dir}/${remakeTitle}.mp4`
            }
            ]
        }
    };
    // Start rendering
    const data = await nexrender(projectJson, settings)


Add Home-page

I did this in my branch:

I added homepage for this project in Frontend.

Hi Ashna,
Your code is perfect according to what I know. Please merge it.


fix: golangci-lint error

Which issue(s) this PR fixes:
https://github.com/longhorn/longhorn/issues/7448
What this PR does / why we need it:
Special notes for your reviewer:
Additional documentation or context

@mergify backport v1.6.x


Unable to set the internal queue for issue_indexer-wrapper when using Redis

Gitea version (or commit ref): 1.13.4

Git version: 2.30.1

Operating system: FreeBSD 12.2

Database (use [x]):

[X ] PostgreSQL
[ ] MySQL
[ ] MSSQL
[ ] SQLite

Can you reproduce the bug at https://try.gitea.io:

[ ] Yes (provide example URL)
[X ] No

Log gist:

2021/03/13 05:30:35 ...eue/queue_wrapped.go:231:Run() [F] Unable to set the internal queue for issue_indexer-wrapper Error: Unable to create queue level for issue_indexer with cfg {"Addresses":"","BatchLength":20,"BlockTimeout":1000000000,"BoostTimeout":300000000000,"BoostWorkers":5,"ConnectionString":"redis://<IP_ADDRESS>:6379/2","DBIndex":0,"DataDir":"/var/db/gitea/data/indexers/issues.queue","MaxWorkers":10,"Name":"issue_indexer","Network":"","Password":"","QueueLength":20,"QueueName":"issue_indexer_queue","SetName":"","Workers":1} by max attempts: error: mkdir redis:: permission denied

Description
I am setting up a new instance and trying to use Redis for queue.  According to the instructions, my app.ini should contain:
[queue]
TYPE		= redis
CONN_STR	= redis://<IP_ADDRESS>:6379/2

When I run Gitea it fails to startup.  The error shown above is what appears in the log.  Removing that section allows Gitea to start.  I am already using Redis for session and do not have a problem.
Here is app.ini (minus the sensitive information):
APP_NAME = Gitea: Git with a cup of tea
RUN_USER = git
RUN_MODE = prod

[database]
DB_TYPE  = postgres
HOST     = <IP_ADDRESS>:5432
NAME     = giteadb
PASSWD   = xxxxxxxxxx
SSL_MODE = disable
USER     = gitea

[indexer]
ISSUE_INDEXER_PATH = /var/db/gitea/indexers/issues.bleve

[log]
ROOT_PATH = /var/log/gitea
MODE      = file
LEVEL     = Info

[mailer]
ENABLED = false

[oauth2]
JWT_SECRET = xxxxxxx

[picture]
AVATAR_UPLOAD_PATH      = /var/db/gitea/data/avatars
DISABLE_GRAVATAR        = false
ENABLE_FEDERATED_AVATAR = false

[repository]
ROOT = /var/db/gitea/gitea-repositories
SCRIPT_TYPE = sh

[repository.upload]
TEMP_PATH = /var/db/gitea/data/tmp/uploads

[security]
INSTALL_LOCK = true
INTERNAL_TOKEN = xxxxxxxxxxxxxxxxxxxxx
SECRET_KEY   = xxxxxxxxxxxxx

[session]
PROVIDER = redis
PROVIDER_CONFIG = network=tcp,addr=<IP_ADDRESS>:6379,db=3,pool_size=100,idle_timeout=180

[server]
DOMAIN       = git.xxxxxx.com
HTTP_ADDR    = <IP_ADDRESS>
HTTP_PORT    = 3000
ROOT_URL     = http://localhost:3000/
DISABLE_SSH  = false
SSH_DOMAIN   = %(DOMAIN)s
SSH_PORT     = 22
OFFLINE_MODE = false
APP_DATA_PATH = /var/db/gitea/data

[service]
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL     = false
DISABLE_REGISTRATION   = false
ENABLE_CAPTCHA         = true
REQUIRE_SIGNIN_VIEW    = false

[cache]
ENABLED	= true
ADAPTER	= memcache
HOST	= <IP_ADDRESS>:11211

[queue]
TYPE		= redis
CONN_STR	= redis://<IP_ADDRESS>:6379/2

If it helps, here is the Redis config (it's just a default installation)
# cat /usr/local/etc/redis.conf | grep -v "^#" | grep -v -e '^$'
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis/redis.pid
loglevel notice
logfile /var/log/redis/redis.log
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
dir /var/db/redis/
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
oom-score-adj no
oom-score-adj-values 0 200 800
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes

No this is not the default configuration. You have copied the app.example.ini to your app.ini.
IT IS NOT SUPPOSED TO BE DONE LIKE THAT.

 Sorry.
You are intending to use redis for all of your queues?

The issue here is that the issue indexer queue is still configured to use a level queue
Set:
[indexer]
ISSUE_INDEXER_QUEUE_TYPE = redis
```

Apologies for getting the wrong end of the stick - I saw the log line and the `CONN_STR` and was reminded of a different problem.

Thank you for the clarification (I would have never figured that out myself).  I'm guessing this is the same as setting ISSUE_INDEXER_QUEUE_CONN_STR to <IP_ADDRESS>:6379 db=2?

You should be able to use the same style connection string as the one you use above.
Iirc creating a [queue.issue_indexer] section should also allow you to configure the issue indexer in a more consistent fashion - without using these older config values.
The reason for the slightly confusing configuration and multiple places is backwards compatibility - unfortunately the queue system came later than the issue indexer so the old configuration for the issue indexer had to be supported - in particular its default.
I think we should be able to deprecate the old configuration at some point soon and move to a more consistent mode. The trouble is that people tend to get irate when configuration changes under their feet.


Adding k3d-action to Kubernetes Actions ⚡

A GitHub Action to run lightweight ephemeral Kubernetes clusters during workflow. Fundamental advantage
of this action is a full customization of embedded k3s clusters. The action is useful for multi-cluster testing.
Signed-off-by: kuritka<EMAIL_ADDRESS>

Hi @sdras , is here some blocker to include k3d-action ?
Thank you


Partial opcode updates for 6.0.8 hotfix

Updated the opcodes I could.
These are the ones remaining. They're not in opcode wizard, so I don't have an easy method to find them.
StatusEffectList2
StatusEffectList3
BossStatusEffectList
Ability16 aka ActionEffect16
Ability24 aka ActionEffect24
Ability32 aka ActionEffect32
NpcSpawn2

Opcodes grabbed from https://github.com/karashiiro/FFXIVOpcodes which is updated regularly. Some of these are also provided by Dalamud, which can help cut down on manual updates.

Thanks for the PR! I'm kind of on FFXIV hiatus atm until the 6.1 comes out, but I'll quickly update the opcodes.


Tour Status shows '0' but tour continues.

Hi, @isaacplmann @hakimio
While on tour running phase, at one stage the tourService.getStatus() returns 0 but the tour continues.
this.menuCloseSubscription = this.opener.trigger.menuClosed             .pipe(first())             .subscribe(function () {             if (_this.tourService.getStatus() !== TourState.OFF) {                 _this.tourService.end();             }             _this.tourBackdrop.close();         });     };
The above code is triggered. Could you please help out why is this happening. I am using the getStatus() function to do something if the tour is in running state.

Which ngx-tour ui are you using?  And what version?


WIP: Try to revert proxy image

Test if the current visibility/split issue was caused by proxy image change.

Test passed.

/test pull-knative-sandbox-net-istio-latest-mesh
/test pull-knative-sandbox-net-istio-latest
/test pull-knative-sandbox-net-istio-integration-tests
Test passed (mesh test failed by un-related error). Test again.


Sort help by group and command names

Tested both with_embeds and plain and they seem to work. Let me know if something needs to be changed or reworked.
On a side note, I thought about manually moving the "Ungrouped" section to be the last in the list but am not sure if this would be desired behavior.

Thanks


Updated README.md for BestMatch Middleware

Added the details as per the finalized format for README including the badges.

Waiting for James to review it.

You are right 👍
Happy to revisit later as it may just be my personal preference
additional issue 👎  the title has the same heading level as the subtitles.  For consistency the title should be:

# Best Match Middleware

## Build status
...
## Description
...
## Installation
...
## Usage

Hope that makes sense


Falsely uses strict mode when the config $RNAppsFlyerStrictMode=false is explicitly set

Report
Plugin Version
react-native-appsflyer: 6.4.0
AppsFlyerFramework 6.4.0
On what Platform are you having the issue?
iOS
What did you do?
When I run pod install, I get the following note:
react-native-appsflyer: Using default AppsFlyerFramework.You may require App Tracking Transparency. Not allowed for Kids apps.
react-native-appsflyer: You may set variable `$RNAppsFlyerStrictMode=true` in Podfile to use strict mode for kids apps.

So far so good. Then I set the config explicitly in my Podfile with $RNAppsFlyerStrictMode=false.
I run pod install again, and get the following note:
react-native-appsflyer: Using AppsFlyerFramework/Strict mode

What did you expect to happen?
I set the config $RNAppsFlyerStrictMode to false. It uses the regular mode and the note disappears.
What happened instead?
It uses strict mode.

Hi @reichhartd and thank you for opening this issue! you are right, the plugin uses strict mode even when you set $RNAppsFlyerStrictMode=false. so in order to fix it please remove this line from your podfile

Yes, that’s how we use it at the moment. But that's, in my opinion, not the expected behaviour and not developer-friendly. When I explicitly set a config value, I expect the framework to behave accordingly, not always set the value to true.

You are right and it will be fixed in the next release


Feature Request: Navigation button on scm/title

The navigation button on scm/title is one of my favorite features of vscode-git-graph and even GitKraken provides it.

I tried to implement this myself and here is my WIP code which is used to make the above image, but I could not figure out how to implement the backend part.

neat, also didn't know this existed. Your changes work fine for me. I guess you just forgot to do yarn serve in the web folder? (see CONTRIBUTING.md)
you don't have to test this though, we can just merge it now

The problem is that if multiple repositories are open, the buttons do not work expectedly. I want each buttons for each repository to act differently, but all do the same thing.


Prepare faster random land

Hi again,
World.random_land currently does two things:

Work some numpy magic to transform the ocean layer into a list of land indices.
Return a random pair of indices from that list.

The first part is really slow, the second part is nearly free. Thinking about it, as long as the ocean / land divide does not change, we don't need to repeat the first part every time we want a new sample. We can do (1) only once and then get arbitrarily many samples (2).
The implementation attached is not the nicest, but it has the advantage of not breaking the old World.random_land API. I thought that might be worth something, but this is up for discssion. I wanted to discuss this indepentently of the later application which is to use that concept to significantly speed up hydrology simulation (_watermap).
I also provided tests, that will be useful when actually messing with  _watermap later.
So this PR doesn't actually do much but it prepares a later change. Again, let me know what you think.
Cheers
Alex

Coverage increased (+0.01%) to 85.233% when pulling 58b0a141953e1f313067b06b9922cf2708fc68bc on MM1nd:prepare_faster_random_land into bdd349c6affb104b69798113afbe4b86b4eb24c6 on Mindwerks:master.

Coverage increased (+0.8%) to 86.056% when pulling 58b0a141953e1f313067b06b9922cf2708fc68bc on MM1nd:prepare_faster_random_land into bdd349c6affb104b69798113afbe4b86b4eb24c6 on Mindwerks:master.

Codecov Report

Merging #243 into master will increase coverage by 0.73%.
The diff coverage is 100%.

@@            Coverage Diff             @@
##           master     #243      +/-   ##
==========================================
+ Coverage   80.25%   80.98%   +0.73%
==========================================
  Files          28       28
  Lines        3884     3887       +3
  Branches      768      769       +1
==========================================
+ Hits         3117     3148      +31
+ Misses        574      542      -32
- Partials      193      197       +4

Impacted Files
Coverage Δ

worldengine/model/world.py
76.11% <100%> (+0.24%)
:arrow_up:

worldengine/simulations/erosion.py
70.75% <0%> (+10.67%)
: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 bdd349c...58b0a14. Read the comment docs.

I'm loving the additional test-coverage. :)
I'm good with this if you are @ftomassetti

Obviously I'm still confused how branches work.
After the merge of #244 I merged those changes into this branch and now they show up in this PR. Shouln't I have done that?

Coverage increased (+0.03%) to 85.255% when pulling 1c6817d65bf6b4b77267773fefbc07211cf15242 on MM1nd:prepare_faster_random_land into bdd349c6affb104b69798113afbe4b86b4eb24c6 on Mindwerks:master.

Coverage increased (+0.03%) to 85.255% when pulling 1c6817d65bf6b4b77267773fefbc07211cf15242 on MM1nd:prepare_faster_random_land into bdd349c6affb104b69798113afbe4b86b4eb24c6 on Mindwerks:master.

Coverage increased (+0.03%) to 85.255% when pulling 66895a47196c40e5623ef59632f13ae495a6b5e2 on MM1nd:prepare_faster_random_land into bdd349c6affb104b69798113afbe4b86b4eb24c6 on Mindwerks:master.

Hello again,
Admittedly I was getting a bit impatient, but it was right not to merge this. I made the same mistake in test and production code :( It's fixed now though.
The problem was that random_land, for compatibility with it's old API, returns a flat array of length num_samples*2 instead of an two dimensional array. This is not too complex, but it can get confusing and it did confuse me.
So we have to ask ourselves if API compatibility is worth that source of confusion. random_land is called in exactly one place outside of tests and that argument cuts in both directions. It doesn't hurt too much to break an API almost nobody calls, but it also doesn't hurt too much to have a confusing API nobody calls.
In any case I'm currently preparing a PR that actually uses this implementation for speedup. That's how I found the bug. Stay tuned.
Cheers
Alex


[AST] Preserve sugar for generic typealiases.

rdar://problem/43110802

@slavapestov addressed your comment about the parent type. Can you please take a look? (I need to update the several differences in SourceKit tests after this change, so I want to a make sure it's correct before going through  )

In the future, instead of creating new pull requests for every revision, please update an existing PR. It's easier to see the full review history that way.

You can push the current HEAD (irrespective of the local branch name) to an arbitrary branch on a remote repo named foo by doing:
git push -f foo HEAD:refs/heads/other-branch-name

@swift-ci test and merge


Angular Migration broken

While migrating to angular 12 we get :
Package "ng9-password-strength-bar" has an incompatible peer dependency to "@angular/core" (requires "^9.1.9" (extended), would install "12.0.3")
which causes the migration to fail.
Is it possible to allow angular versions over 9 as dependencies ?
Thanks

I was able to successfully upgrade an Angular 9.1 project (with "ng9-password-strength-bar": "1.1.0")  to Angular 12 by adding the --force flag to each of the 10/11/12 ng update commands. Got lots of warnings, but it worked.


[0.9.2] Service fails to start on Ubuntu 14.04

Installed Influxdb via Debian package
Ran  /opt/influxdb/influxd config > /etc/opt/influxdb/influxdb.conf
Running service influxdb restart I get:
influxd process is not running [ OK ]
Starting the process influxd [ OK ]
influxd process failed to start [ FAILED ]

In /var/log/influxdb/influxd.log:
[handoff] 2015/08/21 22:37:41 Failed to start hinted handoff processor: mkdir all: mkdir /root/.influxdb: permission denied
If I run /opt/influxdb//influxd -config /etc/opt/influxdb/influxdb.conf  instead I get normal startup:
using configuration at: /etc/opt/influxdb/influxdb.conf
[metastore] 2015/08/21 22:41:47 [INFO] raft: Node at <IP_ADDRESS>:8088 [Follower] entering Follower state
[metastore] 2015/08/21 22:41:47 read local node id: 1
[admin] 2015/08/21 22:41:47 listening on HTTP: [::]:8083
[httpd] 2015/08/21 22:41:47 authentication enabled: false
[httpd] 2015/08/21 22:41:47 listening on HTTP: [::]:8086
2015/08/21 22:41:47 InfluxDB starting, version 0.9.2, commit 6c0a91f775f9fc0e625d17ffa04a3fe86945ba09
2015/08/21 22:41:47 GOMAXPROCS set to 1
[run] 2015/08/21 22:41:47 listening for signals
[metastore] 2015/08/21 22:41:48 [WARN] raft: Heartbeat timeout reached, starting election
[metastore] 2015/08/21 22:41:48 [INFO] raft: Node at <IP_ADDRESS>:8088 [Candidate] entering Candidate state
[metastore] 2015/08/21 22:41:48 [DEBUG] raft: Votes needed: 1
[metastore] 2015/08/21 22:41:48 [DEBUG] raft: Vote granted. Tally: 1
[metastore] 2015/08/21 22:41:48 [INFO] raft: Election won. Tally: 1
[metastore] 2015/08/21 22:41:48 [INFO] raft: Node at <IP_ADDRESS>:8088 [Leader] entering Leader state
[metastore] 2015/08/21 22:41:48 [INFO] raft: Disabling EnableSingleNode (bootstrap)
[metastore] 2015/08/21 22:41:48 [DEBUG] raft: Node <IP_ADDRESS>:8088 updated peer set (2): [<IP_ADDRESS>:8088]
[metastore] 2015/08/21 22:41:48 [DEBUG] raft: Node <IP_ADDRESS>:8088 updated peer set (2): [<IP_ADDRESS>:8088]
2015/08/21 22:41:48 Sending anonymous usage statistics to m.influxdb.com

The directories under /root/.influxdb appear to be created ok
After that if I run the service restart again it still fails with the same error.

Now that I stared at it some more I realize that the problem is because the script at /etc/init.d/influxb is using the influxdb user to run
USER=influxdb
GROUP=influxdb
but the default config file is listing /root/.influxdb as the directory for a bunch of files and the influxdb user doesn't have perms to write there.
I can make the service start now by changing the USER and GROUP to root inside the shell script, but why doesn't this work out of the box?

@llevar -- it actually does work out of the box. The step:
 Ran /opt/influxdb/influxd config > /etc/opt/influxdb/influxdb.conf

is completely unnecessary, and changed the directory paths of the config file to paths inaccesible by the influxdb user. If you had skipped that step everything would have worked perfectly. Please let me know if you have any more questions.

Thanks for responding @otoolep.
In my understanding the step is necessary to customize configuration. Which I need to do. I indicated the step in its current form just to simplify the test case and rule out my customizations messing normal operation.
The reason I put the config into /etc/opt/influxdb/influxdb.conf is because that was the path that was specified in the service script at /etc/init.d/influxdb. I assume that's the path set up by the installer as I hadn't configured it at any point prior.
/etc/opt/influxdb/influxdb.conf
107 # Configuration file
108 config=/etc/opt/influxdb/influxdb.conf

Is this how config file path specification for the service script supposed to work, or have I gotten confused?
Thanks for your help.

@llevar -- yes, but the easiest way to customize the configuration script is to copy what is put there by the installation script as a backup, and then edit in place the original file in /etc/opt/influxdb/influxdb.conf. If you break it you can just put the copy back and start again. Make sense?

I opened https://github.com/influxdb/influxdb.com/issues/247 to make this all more clear in the docs.

So is it the case that the default config-file file permissions need to be preserved, and I messed things up by overwriting the file instead of editing it in place? How does that relate to the error message that indicates the program trying to write to /root/.influxdb and failing? Which location, that the influxdb user has access to, are those files supposed to go into?

When you overwrote the default config file, it replaced the directories used for storage by InfluxDB with your home directories. Since you are root on this box, the home directories are in root.

So what's the way out? I need to deploy this out to a cluster periodically with customized config. Do I need to replicate the permissions of the original config script in order for it to not mess with the wrong directories? My plan was to deploy this via a config management tool rather than editing a file in place.

The config script does not have permissions, it references directories. When you run /opt/influxdb/influxd config > /etc/opt/influxdb/influxdb.conf the outputted config file puts all the directories under ~. When you are root, ~ translates to /root.
If you don't want to use /root as your InfluxDB data directory there are a few options.

Run /opt/influxdb/influxd config > /etc/opt/influxdb/influxdb.conf as the user you want to run influxd. Then the config file will use that user's home directory as the install location.
Explicitly edit  /etc/opt/influxdb/influxdb.conf to reference the directories you want to use.

Ok that clears it up, thanks. But the installation guide here - https://influxdb.com/docs/v0.9/introduction/installation.html#ubuntu-debian
doesn't really mention needing to run as the influxdb user. In fact the top of the guide states that the configuration needs to be run by someone who has root. Clarifying this would probably help the next chap trying to go through this guide.
Thanks again.

Ran into this again in 12.1

@unlikelyzero this is a very old issue about a version that is out of date. Please open a new issue if you feel there are improvements needed to the Ubuntu package.

Seems this is a problem again at least on Ubuntu 16 installing influxdb v1.0.2. The problem is that /lib/systemd/system/influxdb.service has:
Group=influxdb

But /etc/influxdb/influxdb.conf has several options set to root:
dir = "/root/.influxdb/meta"
dir = "/root/.influxdb/data"
wal-dir = "/root/.influxdb/wal"

What I don't know is if this happened during apt install or me messing around trying to get it to work by generating a config as the root user using influxd config > influxdb.generated.conf


Fix typo regitration to registration

Also updated in backplane-operator: https://github.com/stolostron/backplane-operator/pull/1077

/assign @zhujian7

/lgtm
/approve


Fixed some popups not shrinking their size back when losing items

The scene tree's right-click "sub-resources" menu and in the AnimationTreePlayer.

Cherry picked into 3.0.3


Add SAAJ API contract definition

https://docs.osgi.org/reference/portable-java-contracts.html#java-ee-contracts defines Java EE contracts. SAAJ API, package javax.xml.soap, defined by JSR-67 and available in Java EE is missing there

also, maybe we could move the issue to that repo. then we can close this one?

I asked @lukasj to open the issue here. I would like to keep all the issues for the OSGi spec project in this repo.
Obviously PRs to change the docs need to be in the docs repo.

@rotty3000 Can you make a PR for this? I am not sure what SAAJ is and where to find its API?

SOAP with Attachments API for Java (SAAJ)
"The initial API was part of JAXM 1.0 in JSR-67 and was released in December 2001; the specification was later separated from JAXM in a maintenance release in June 2002."
SAAJ is a standard Java API to produce and consume messages conforming SOAP specifications (SOAP 1.1, SOAP 1.2, SOAP Attachment Feature)
Propose Contract definition

Contract: JavaSAAJ
Version: 1.4
JSR: 067
Java SE Level: 6/7/8/9
Java EE Level: 8
Packages:  javax.xml.soap
Comments: Compatible with 1.3

JSR-067 Maintenance Release (JSR-067 MR) - Resume

JSR-067(MR1) - Maintenance revision of the JavaTM API for XML Messaging, version 1.1.
** Define SAAJ as a standalone technology
** https://jcp.org/aboutJava/communityprocess/maintenance/jsr067/jaxm-changelog-accepted.html
JSR-067(MR2) - Maintenance revision of the SOAP with Attachments API for JavaTM (SAAJ), version 1.2.
** provide support for the proposed WS-I Basic Profile of SOAP 1.1.
** https://jcp.org/aboutJava/communityprocess/maintenance/jsr067/SAAJ1_2ChangeLogFinal1.html
JSR-067(MR3) - Maintenance revision of the SOAP with Attachments API for JavaTM (SAAJ), version 1.3
** provide support for SOAP version 1.2 Message Constructs
** The proposed API changes in SAAJ 1.3 are backward compatible with SAAJ 1.2 APIs.
** https://jcp.org/aboutJava/communityprocess/maintenance/jsr067/SAAJ1_3ChangeLog.html
JSR-067(MR5) - "same as" JSR-067(MR3)
** https://jcp.org/aboutJava/communityprocess/maintenance/jsr067/SAAJ1_3ChangeLog_4.html
JSR-067(MR5) - Maintenance revision of the SOAP with Attachments API for JavaTM (SAAJ), version 1.4
** define JDK 9 module for the SAAJ API to be 'java.xml.soap'
** SAAJ API 1.4 will be the last maintenance release of the JSR 67 specification as a standalone technology
** SAAJ API will continue to be released with the Java API for XML-Based Web Services (JAX-WS) 2.0 JSR
** https://jcp.org/aboutJava/communityprocess/maintenance/jsr067/ChangeLog-SAAJ-1.4-MR.txt

References
JSR and EE4J

API - https://github.com/eclipse-ee4j/saaj-api
RI - https://github.com/eclipse-ee4j/metro-saaj
JSR67 - https://www.jcp.org/en/jsr/detail?id=67
JSR67(MR 4) - https://jcp.org/aboutJava/communityprocess/mrel/jsr067/index4.html

SOAP 1.2 Attachment Feature (SOAP-AF)

https://www.w3.org/TR/soap12-af
https://www.w3.org/TR/2002/WD-soap12-af-20020924/

JavaEE 8 and JakartaEE 8

https://jakarta.ee/specifications/platform/8/platform-spec-8.html
https://www.oracle.com/java/technologies/javaee/javaeetechnologies.html

Tutorial

https://www.infoworld.com/article/3227793/web-services-in-java-se-part-4-soap-with-attachments-api-for-java.html
https://docs.oracle.com/javaee/5/tutorial/doc/bnbhf.html

Thanks, this is helpful.
I'll make the changes in the next few days.
Cheers
On Sun., Nov. 14, 2021, 8:53 a.m. Paulo Borges, @.***>
wrote:

SOAP with Attachments API for Java (SAAJ)
"The initial API was part of JAXM 1.0 in JSR-67 and was released in
December 2001; the specification was later separated from JAXM in a
maintenance release in June 2002."
SAAJ is a standard Java API to produce and consume messages conforming
SOAP specifications (SOAP 1.1, SOAP 1.2, SOAP Attachment Feature)
Propose Contract definition

Contract: JavaSAAJ
Version: 1.4
JSR: 067
Java SE Level: 6/7/8/9
Java EE Level: 8
Packages: javax.xml.soap
Comments: Compatible with 1.3

JSR-067 Maintenance Release (JSR-067 MR) - Resume

JSR-067(MR1) - Maintenance revision of the JavaTM API for XML
Messaging, version 1.1.
** Define SAAJ as a standalone technology
**
https://jcp.org/aboutJava/communityprocess/maintenance/jsr067/jaxm-changelog-accepted.html
JSR-067(MR2) - Maintenance revision of the SOAP with Attachments API
for JavaTM (SAAJ), version 1.2.
** provide support for the proposed WS-I Basic Profile of SOAP 1.1.
**
https://jcp.org/aboutJava/communityprocess/maintenance/jsr067/SAAJ1_2ChangeLogFinal1.html
JSR-067(MR3) - Maintenance revision of the SOAP with Attachments API
for JavaTM (SAAJ), version 1.3
** provide support for SOAP version 1.2 Message Constructs
** The proposed API changes in SAAJ 1.3 are backward compatible with
SAAJ 1.2 APIs.
**
https://jcp.org/aboutJava/communityprocess/maintenance/jsr067/SAAJ1_3ChangeLog.html
JSR-067(MR5) - "same as" JSR-067(MR3)
**
https://jcp.org/aboutJava/communityprocess/maintenance/jsr067/SAAJ1_3ChangeLog_4.html
JSR-067(MR5) - Maintenance revision of the SOAP with Attachments API
for JavaTM (SAAJ), version 1.4
** define JDK 9 module for the SAAJ API to be 'java.xml.soap'
** SAAJ API 1.4 will be the last maintenance release of the JSR 67
specification as a standalone technology
** SAAJ API will continue to be released with the Java API for
XML-Based Web Services (JAX-WS) 2.0 JSR
**
https://jcp.org/aboutJava/communityprocess/maintenance/jsr067/ChangeLog-SAAJ-1.4-MR.txt

References
JSR and EE4J

API - https://github.com/eclipse-ee4j/saaj-api
RI - https://github.com/eclipse-ee4j/metro-saaj
JSR67 - https://www.jcp.org/en/jsr/detail?id=67
JSR67(MR 4) -
https://jcp.org/aboutJava/communityprocess/mrel/jsr067/index4.html

SOAP 1.2 Attachment Feature (SOAP-AF)

https://www.w3.org/TR/soap12-af
https://www.w3.org/TR/2002/WD-soap12-af-20020924/

JavaEE 8 and JakartaEE 8

https://jakarta.ee/specifications/platform/8/platform-spec-8.html

https://www.oracle.com/java/technologies/javaee/javaeetechnologies.html
Tutorial

https://www.infoworld.com/article/3227793/web-services-in-java-se-part-4-soap-with-attachments-api-for-java.html

https://docs.oracle.com/javaee/5/tutorial/doc/bnbhf.html

—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/osgi/osgi/issues/330#issuecomment-968295186, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AABD2TG74E6KWN7AXJHGLNDUL65NFANCNFSM5DXBSNWQ
.

@lukasj @poolborges could you confirm that I've got this correct (just the last commit)?

Yes, that's correct (careful reader may say that older releases are compatible with SE 5 and were for a long time but given where we are, saying 6 as the minimum is fine from my point of view)

@lukasj @poolborges could you confirm that I've got this correct (just the last commit)?

Yes, is correct.


Fix: Workspace member has option to edit categories

Details

Fixed Issues

$ https://github.com/Expensify/App/issues/43623
PROPOSAL: https://github.com/Expensify/App/issues/43623#issuecomment-2165303496
Tests

Precondition: User should have an workspace with all categories Disabled:

Go to FAB > Track expense.
Track a manual expense.
In self-DM Click Categorize it from the actionable whisper.
Verify that: the workspace without categories isn't an option

[x] Verify that no errors appear in the JS console

Offline tests

QA Steps

Same as tests

[x] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:

[x] I verified that all the inputs inside a form are aligned with each other.
[x] I added Design label and/or tagged @Expensify/design so the design team can review the changes.

[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native

https://github.com/Expensify/App/assets/171708823/c5ac6144-2cee-478f-bc96-7f14e067df4e

Android: mWeb Chrome
https://github.com/Expensify/App/assets/171708823/315f248e-a3b3-40e8-8fcb-b6981fb7ce9e

iOS: Native

https://github.com/Expensify/App/assets/171708823/659dfa4f-2397-413d-8263-70b11270925b

iOS: mWeb Safari
https://github.com/Expensify/App/assets/171708823/0526ca95-81e7-46d5-ba53-fe8b839ea31e

MacOS: Chrome / Safari

https://github.com/Expensify/App/assets/171708823/3b724b10-6ba6-4a77-8563-7cb208dcbddd

MacOS: Desktop

https://github.com/Expensify/App/assets/171708823/26ee2546-00ac-47c7-a046-3c3c2c583d1b

@allgandalf since your comments don't relate to the functionality of the code, would you please also test now and hopefully we can get this merged soon? We can fix small things in a follow up if needed.

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

🚀 Deployed to staging by https://github.com/neil-marcellini in version: 9.0.7-3 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Cherry-picked to staging by https://github.com/thienlnam in version: 9.0.7-4 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
failure ❌

🕸 web 🕸
success ✅

@Expensify/applauseleads please QA this PR and check it off on the deploy checklist if it passes.

🚀 Deployed to production by https://github.com/thienlnam in version: 9.0.7-8 🚀

platform
result

🤖 android 🤖
failure ❌

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
failure ❌

🕸 web 🕸
success ✅

🚀 Deployed to production by https://github.com/mountiny in version: 9.0.8-6 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅


The app window gets empty if it loses focus

The app window gets empty (only logo stays) if it loses focus... in my case it happens in many occasions: minimizing it, closing it to tray, switching to another app, etc.
https://user-images.githubusercontent.com/997305/191211431-46ab255d-78c2-4426-a972-2aec3bf15577.mp4
Operating System: EndeavourOS
KDE Plasma Version: 5.25.5
KDE Frameworks Version: 5.98.0
Qt Version: 5.15.6
Kernel Version: 5.19.8-zen1-1-zen (64-bit)
Graphics Platform: X11
pacman -Q electron
electron 20.0.3-2
pacman -Q electron17
electron17 17.4.11-2
pacman -Q electron19
electron19 19.0.13-2

A workaround (working even with closing into the tray) at least in KDE: set "focus stealing prevention" to "force" and "Extreme" in the Special Window Settings.

Aha ... or turn off in the app:
Optimize application: Optimizes application when it's not focused
(stupid me :])

But still... I would expect either, the app is "loaded back" when it gets the focus back, or at least there is an explanation text next to the "Optimize application" option.

Hello!
You're absolutly right with your latest comment, the app should "load back" when it regains focus, this a bug, thanks a lot for reporting!

Cool. Thanks a lot for the fix.


Remove SurfaceManager in favor of Substance.Controller

Background: I wanted to connect undo/redo to our command API.  However, I'm not sure if the surface scope is always right for this.
surface.executeCommand('undo');

What about document changes that haven't been triggered by an active surface (e.g. an entity reference that has been changed inside a panel in Archivist)? How to undo them?
One idea I had is to move the executeCommand API one level up to the SurfaceManager, which is always available. If there is no active Surface and e.g. toggleStrong is executed we could just do nothing. But at least we would always have an interface to execute commands. Also, are there cases where we don't have any surface at all, but use regular UI elements to trigger document changes. Then we would need
Substance.Controller
Maybe we should consider introducing a new interface called let's say Substance.Controller, replacing the SurfaceManger, but doing more. It would be some kind of higher interface that you can initialize in your app by passing a Substance doc and an app context (used to let the app handle commands if the substance controller did not find a command for it). We could use the Substance Controller to abstract away some infrastructure code, owning:

Clipboard
ComponentRegistry
CommandRegistry
registered Surfaces
Keybindings (to be implemented)
Expose interface for saving a doc (e.g. accessing unsaved changes => isDirty() etc.)

Document Controller would be the bridge between the app (Substance.Component hierarchy) and our more low level interfaces. E.g. a command (which does not have access to the app) could call this.executeCommand('switchState', {contextId: 'editTopicCitation', topicCitationId: 'foo'}); Since there is no command on document controller level it would be passed to the context (the app) which needs to expose an executeCommand interface too and give it a chance to handle it. This would address #61.
Somehow we should try to unify concepts. We have commands now on Surface level, and actions on component level, which are very similar and could be one concept. Also it hurts sometimes that we don't have dependency injection in our Substance (non-component world). But if we wanted that it would mean we need to give up on our plain constructors.
TL;DR: Would a higher level Substance.Controller interface make sense that deals with surfaces, commands like undo/redo, connect the surface editing world with the app world and reduce the app boilerplate?
I could start sketching this as part of next Writer Refactor...

I think that is reasonable. It sounds like this would be the place to add customizations.
Go for it!

Will do!
Just one more rant: I think I need to make a distinction between a Command and an Event.

Commands need a class implementation and they inspect the current editing state (which surface is focussed, what is the selection to perform the appropriate operations. A command either triggers a change to the document or makes the UI somehow change accordingly

Events: I would use the Controller as a global event dispatcher mechanism, where you can emit and and bind/connect to certain events from everywhere, so even leaf components that don't share a parent can communicate with each other.

Two scenarios:

toggleLink is executed: canExpand is true so the link will be expanded using the expand transformation
toggleLink again: canEdit is true (because your cursor is under an existing link) so this time no transformations will be triggered but instead we do controller.emit('show:edit:prompt', linkId) the linktool listens to that event and shows the link editor.

Good?

Sounds good. As always with event based system: don't overuse it ;)

This is done.