Enhancements and modifications in the display app

Major changes in the webApp (deployed here):

display code:

scintillator tiles have been added in the 3D app. The trigger cells (TCs) geometry of the entire calorimeter is now complete: pions and taus can be studied.
a slider has been added in the display app in order to control live the clustering radius. Currently the app is using the reconstruction chain implemented in CMSSW (default reconstruction chain in the code) which in our framework has been translated in Python. In the future the new clustering algorithm, which includes the new coarse seeding and the seeding algorithms, can be easily implemented.
the new switch button layer selection allows to visualise specific portions of the calorimeter
the new coarse seeding algorithm can be run through the application and the coarse seeds visualised on screen. More details about it can be found here.
in addition to the energy scale set by default in the display app, it is possible to visualise with discrete colours the different seeds found by the reconstruction chain event by event. This functionality becomes particularly interesting when 200 pile-up photon or tau samples are used.
the web page layout has been updated

geometry.py:

a new plotly friendly format for the geometry can be chosen for the geometry dataframe, as alternative to bokeh.
added the function _display_sci_cartesian to calculate, as it is currently done for silicon, the position of the scintillator tiles in cartesian coordinates. This allows to use the same function in the display code to plot both silicon cells and tiles.
minor changes

cluster.py:

the clustering function has been improved, adding a second output: a collection - in natural coordinates - of the clustered trigger cells.

data handling:

in data_process.py, added a new method to save events after processing. Currently, to speed up the event processing through the reconstruction chain, each event from .parquet file is pre-processed and saved in a .hdf file. When a random event is requested from the display app the .hdf file is read. The display process lasts less than 1 second. If a particular event requested by the user is not yet pre-processed, the code finds the event in the parquet file and processes it live. The entire process lasts ~3 seconds.
The pre-processed events are saved in the .hdf file using their event number as primary key and the clustering radius as secondary key, i.e. the HDF keys are in the form of <event_number> / <cluster_radius> .

production:

added new genparticle_pt branch in the skimming file (produce.py).

The README.md has been updated especially in the section 3D display app
The new look of the web application. A 0 pile-up pion is shown. Scintillator tiles are clearly visible.

200 pile-up photon: a large cut (in cartesian coordinates) around the generated particle has been applied. Multiple seeds in different colours shown.

The same 200 pile-up photon analysed with different clustering radii.

@mchiusi Thank you for the PR. Nice to see that the event displays we've been using for quite some time already will be part of master. Some general comments (more detailed ones will come after merging #43 to make sure both PRs are consistent):

Could you clean a bit your git history?
The slides that controls the clustering radius changes one parameter, while its visualization gives the idea that it is an interval. Could you change the way you control the clustering radius so that it is clear we are changing a single number? On the other hand, this slider type works very well for the layer selection.
I suppose you could update the "ROI" label to "CS" or similar?
The ROIs can be selected also for the pion dataset, but nothing happens. Could you add a check when no ROIs are available?
I see no modifications in tasks/roi.py. Are you using the same version as in the master branch?
You changed tasks/cluster.py: 1) It is tricky, as you have to make sure it does not break existing code, which will happen since you've changed what the function returns 2) The "new" information you are returning is available in the output files of the task 3) I agree that it would be nice to also return outputs directly from one function to another instead of relying always on the output files, but that will have to be done for all the tasks for consistency (to allow chained calls like cluster(seed(roi()))), not just for one
As a suggestion, you could add a quick_random() function that picks an event randomly from the pool of events that were already processed (in the .hdf5 file) when the user is impatient
Please clarify in the PR what you mean by "primary" and "secondary" keys

@mchiusi Thank you for the PR. Nice to see that the event displays we've been using for quite some time already will be part of master. Some general comments (more detailed ones will come after merging #43 to make sure both PRs are consistent):

Could you clean a bit your git history?

I have done it uploading the second set of comments. At the moment commits are organised in macro-arguments.

The slider that controls the clustering radius changes one parameter, while its visualization gives the idea that it changes an interval. Could you modify the way you control the clustering radius so that it is clear we are changing a single number? On the other hand, this slider type works very well for the layer selection.

Thanks for the suggestion, now the slider has been set so that continuous values are excluded (included = False)

I suppose you could update the "ROI" label to "CS" or similar?

In the display code I remove every "ROI" label. Should I also change the name to task/roi.py?

The ROIs can be selected also for the pion dataset, but nothing happens. Could you add a check when no ROIs are available?

Now when pion events are displayed the CS switch is removed.

I see no modifications in tasks/roi.py. Are you using the same version as in the master branch?

I was calculating the ROI in the display code. Now I moved everything in tasks/roi.py and I have updated the code.

You changed tasks/cluster.py: 1) It is tricky, as you have to make sure it does not break existing code, which will happen since you've changed what the function returns 2) The "new" information you are returning is available in the output files of the task 3) I agree that it would be nice to also return outputs directly from one function to another instead of relying always on the output files, but that will have to be done for all the tasks for consistency (to allow chained calls like cluster(seed(roi()))), not just for one

tasks/cluster.py now returns the same output as before, since the additional information I have added is saved in files by the same function.

As a suggestion, you could add a quick_random() function that picks an event randomly from the pool of events that were already processed (in the .hdf5 file) when the user is impatient

If the .hdf5 file is present in the local folder, automatically the coed picks an event randomly from it. Why should I add another function to provide an event?

Please clarify in the PR what you mean by "primary" and "secondary" keys

Now it should be clearer.

Second review
Regarding you PR text, please fix the following:

Please include a reply to my previous comments in this thread for future clarity
At least some of my comments seem not to be implemented in the web app that you link; can you please update the version shared via *.app.cern.ch (and the plots in the PR description)?

Yes, now it has been implemented. The code has been slightly modified so that the input files are all stored in my eos repository. It has in the webApp branch here

The scintillator tiles were actually added in Scintillator geometry #26, and the geometry was already complete; what you did was to include them in the 3D visualization, which is very different from a technical point of view

I think it is clear from the PR what I did.

"the new coarse seeding algorithm has been implemented in the app": In reality no algorithm is implemented in the app; the app takes advantage of the existing algorithms, which are completely independent from the app. Could you please rephrase?

Answer in the previous set of comments. Now the code has been moved to tasks/roi.py and updated.

"the graphic has been updated": what exactly? Same for "minor issues have been fixed", if you do not list what you did is simpler just to remove them. All your modifications can anyways always be seen in the commit diffs.

Removed.

"added the possibility to chose between bokeh and plotly" The mechanism to support more libraries was already present. You could say that you added support for plotly.

Thanks.

In the first bullet point of "data handling.py", it is not clear to me from the text what you added and what was already available

Previously, there was no capability to save events after processing. I have now added this feature along with the mechanism for handling post-processed data. The existing code for searching events in the parquet file has been retained. Please let me know if I have to update the PR, it seems clear to me.

Thanks for the answers above.

In the display code I remove every "ROI" label. Should I also change the name to task/roi.py?

I suppose you mean changing it to task/coarse_seeding.py (or similar), and I think that is a good thing to do. Just remember to update all the imports as well.
All the rest is good :+1:

Thanks for the answers above.

In the display code I remove every "ROI" label. Should I also change the name to task/roi.py?

I suppose you mean changing it to task/coarse_seeding.py (or similar), and I think that is a good thing to do. Just remember to update all the imports as well.

I've changed the names of some files and all the variables related to the ROI. Now the two chains are called:

default chain
new chain

I have tested both my display app and the run_meta.py and they works well. Let me know if there are inconsistencies  in the code due to many changes I have done.

All the rest is good 👍

Third review
These are almost all very minor comments, and we can merge it as soon as you address them. Could you just provide an answer to previous review comments?

All your comments are now included in the latest commit.


Will this library support perspective view by tilting the image ?

Hi,
It would be great if add perspective view along with this library (something like navigation in map).
Thanks in Advance

it's not clear what you're asking

Hi mike ,
I am asking about perspective view, something similar to street view or
navigation in google map. the image is tilted 45 degree so that the
destination point can be seen from the starting point. currently we have
only top view. Is that possible with this library?
Thanks & Regards,
Arun Chand
Senior Software Engineer | Android Mobility
S: arunchand10888 | W: arunchand10888
http://linkedin.com/in/arunchand10888
M: +91<PHONE_NUMBER>
On Wed, Mar 15, 2017 at 3:54 AM, Mike Dunn<EMAIL_ADDRESS>wrote:

it's not clear what you're asking
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/moagrius/TileView/issues/397#issuecomment-286580418,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AF0jY2DyOYErYu7HIUQYGyoZzsZHpbBbks5rlxOjgaJpZM4McU6N
.

Thanks for clarifying.  No, that will not be a part of this library.


[FLINK-32024][docs] Short code related to externalized connector retrieve version from its own data yaml

What is the purpose of the change
Currently, we have some shortcodes specifically designed for externalized connector, such as connectors_artifact, sql_connector_download_table, etc.
When using them, we need to pass in a version number, such as sql_connector_download_table "pulsar" 3.0.0. It's easy for us to forget to modify the corresponding version in the document when releasing a new version.
Of course, we can hard code these into the release process. But perhaps we can introduce a version field to docs/data/connector_name.yml and let flink directly reads the corresponding version when rendering shortcode.
Brief change log

Let short codes related to externalized connector retrieve version from its own data yaml.

Verifying this change
Test manually in my local env.
Does this pull request potentially affect one of the following parts:

Dependencies (does it add or upgrade a dependency): no
The public API, i.e., is any changed class annotated with @Public(Evolving): no
The serializers: no
The runtime per-record code paths (performance sensitive): no
Anything that affects deployment or recovery: JobManager (and its components), Checkpointing, Kubernetes/Yarn, ZooKeeper: no
The S3 file system connector: no

Documentation

Does this pull request introduce a new feature? no

After this PR is approved, I will go to the external connector repository to adapt this change.

LGTM. I have tested it(set the version to 10.0.0) on my local Mac, and it looks good.

Thanks @TanYuxin-tyx for the review, merging.


Fix Travis-CI in the master & some cleanup of the Travis config

this reverts #501. I do think - these tests don't make sense for python-only library (see also #553)
run tests on CPython 3.9

@MaxGaukler, you may want to look on this too, esp. the first patch.

@fredrik-johansson, this is an alternative to #552

As the gmpy backend outsources the integer computations to an external library, testing it on arm64 could catch architecture-dependent bugs in that library. You may want to look into whether we test both backends (gmpy and pure python).

As the gmpy backend

I think, this belongs to the gmpy testing (and it seems - there are arm64 tests).

You may want to look into whether we test both backends (gmpy and pure python).

Unfortunately, no.  The current config tests only pure-python arithmetics.


Optional Constraints

Hi,
I have been learning about optional constraints, however, I am encountering some difficulties.
I would like to apply three different constraints to a domain of numbers (x). The constraints are:
2 < x
7 < x
12 < x
However, I want these constraints to be optional, such that at any one time, only one constraint is enforced. I know that if there are only two constraints (e.g. 2 < x and 7 < x) I can easily achieve this using boolean logic:
b = model.NewBoolVar('b')
model.Add(2 < x).OnlyEnforceIf(b)
model.Add(7 < x).OnlyEnforceIf(b.Not())
Thus, at any one time, only one constraint is enforced. How can I achieve this when there are a total of 3 (or more) optional constraints?

This is problematic.
If x = 8, then there are no solutions.

Hi Iperron,
Here is the specific code I am working on:
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

from ortools.sat.python import cp_model

class VarArraySolutionPrinter(cp_model.CpSolverSolutionCallback):
  """Print intermediate solutions."""

  def __init__(self, variables):
    cp_model.CpSolverSolutionCallback.__init__(self)
    self.__variables = variables
    self.__solution_count = 0

  def on_solution_callback(self):
    self.__solution_count += 1
    for v in self.__variables:
      print('%s=%i' % (v, self.Value(v)), end=' ')
    print()

  def solution_count(self):
    return self.__solution_count

def ChannelingSampleSat():

  # Create the CP-SAT model.
  model = cp_model.CpModel()

  # Declare our primary variables.
  x = model.NewIntVar(0, 20, 'x')
  y = model.NewIntVar(0, 20, 'y')

  # Declare our intermediate boolean variable.
  b = model.NewBoolVar('b')

  # Constraints on x
  model.Add(x >= 2).OnlyEnforceIf(b)
  model.Add(x <= 4).OnlyEnforceIf(b)

  model.Add(x >= 6).OnlyEnforceIf(b.Not())
  model.Add(x <= 8).OnlyEnforceIf(b.Not())

  # First, b implies (y == 0).
  model.Add(y == 0).OnlyEnforceIf(b)

  # Second, not(b) implies (y == 1).
  model.Add(y == 1).OnlyEnforceIf(b.Not())

  # Search for x values in increasing order.
  model.AddDecisionStrategy([x], cp_model.CHOOSE_FIRST,
                            cp_model.SELECT_MIN_VALUE)

  # Create a solver and solve with a fixed search.
  solver = cp_model.CpSolver()

  # Force the solver to follow the decision strategy exactly.
  solver.parameters.search_branching = cp_model.FIXED_SEARCH

  # Search and print out all solutions.
  solution_printer = VarArraySolutionPrinter([x, y])
  solver.SearchForAllSolutions(model, solution_printer)

ChannelingSampleSat()

It's a modification of one of your example scripts that I found here:
https://github.com/google/or-tools/blob/master/ortools/sat/doc/channeling.md
If 2 <= x <= 4 then y is set equal to 0. If 6 <= x <=8 then y is set equal to 1. Thus, the output is:
x=2 y=0
x=3 y=0
x=4 y=0
x=6 y=1
x=7 y=1
x=8 y=1

I would like to add a third optional constraint: if 10 <= x <= 12 then y is equal to 2. Thus, the output would be:
x=2 y=0
x=3 y=0
x=4 y=0
x=6 y=1
x=7 y=1
x=8 y=1
x=10 y=2
x=11 y=2
x=12 y=2

How can I use Boolean logic to work with three optional constraints?

Brilliant! Thanks for the help Iperron, really appreciate it.

If by any chances you can not find the doc referred to by @lperron , the doc folder has been renamed to https://github.com/google/or-tools/blob/stable/ortools/sat/docs/integer_arithmetic.md#step-function


Replaced letter is moved to another place in the Sequence mode

Steps to Reproduce

Switch to Macro

Open file
ketcher (select edit).zip

Sequence mode  >> Select Peptides

Context menu >> Edit Sequence

Select K and W

7.Press H (for replace the K and W)
Actual behavior
H@ sequence appears as a new one at the bottom

Expected behavior
H appears befor U instead of K and W.

Versions:
Windows 10
Chrome Version 123.0.6312.106 (Official Build) (64-bit)
Version 2.20.0-rc.2
Indigo Toolkit
Version 1.19.0-rc.2.0-g6c0e3fecf-wasm32-wasm-clang-12.0.0
Issue found in the context of testing - https://github.com/epam/ketcher/issues/3824

The issue has been moved from 2.21.0-rc.2 to 2.22.0-rc.1 after discussion with management and in accordance with the testing flow process.

Moved to Refined Backlog since not fixed over 1 release


Support go fiber

Description [describe your advice]
Fiber is a Go web framework built on top of Fasthttp, the fastest HTTP engine for Go. It's designed to ease things up for fast development with zero memory allocation and performance in mind.
Solution [if any solutions, describe here]
Add go fiber web framework
Others [screenshots and other info]

Supported.  See: https://github.com/GoAdminGroup/go-admin/blob/master/examples/gofiber/main.go


To run the AppImage, glibc_2.30 is needed but not present on the Stable Debian !

Can you release an AppImage but for qlibc_2.28 which current in Stable Debian ??
Thanks.

See README.md:

The AppImage we provide as the prebuilt for Linux might not work on your machine. You can build LANDrop by yourself if the prebuilt doesn't work for you.


relentless console spam

my console is constantly being spammed with this error
05.10 17:44:50 [Server] WARN java.lang.Exception: Stack trace
05.10 17:44:50 [Server] WARN at java.lang.Thread.dumpStack(Thread.java:1336)
05.10 17:44:50 [Server] WARN at com.wildex999.tickdynamic.listinject.ListManager.remove(ListManager.java:374)
05.10 17:44:50 [Server] WARN at com.wildex999.tickdynamic.listinject.ListManagerEntities.remove(ListManagerEntities.java:57)
05.10 17:44:50 [Server] WARN at com.wildex999.tickdynamic.listinject.ListManagerEntities.remove(ListManagerEntities.java:9)
05.10 17:44:50 [Server] WARN at net.minecraft.world.World.func_72939_s(World.java:2164)
05.10 17:44:50 [Server] WARN at net.minecraft.world.WorldServer.func_72939_s(WorldServer.java:737)
05.10 17:44:50 [Server] WARN at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:902)
05.10 17:44:50 [Server] WARN at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:470)
05.10 17:44:50 [Server] WARN at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:781)
05.10 17:44:50 [Server] WARN at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:627)
05.10 17:44:50 [Server] WARN at java.lang.Thread.run(Thread.java:748)
is there any way to fix it?

    # Disables all log output to the console. Make sure this is off before providing the author with logs.
    B:nologs=true

this does not seem to fix the console spam for me, and this seems to happen when players are logged into the server.

Makes sense since this is an error being reported by Java and not the mod


Exception when trying to run simple test

Hello I tried to test the driver out but When compiling the source "sbt compile" and try to run it "sbt run" to test I get Java.lang.runtimeExpection: no main class detected
when I package the code and try to run the simple Java app I get error with using the driver
Class.forname("com.github.mmolimar.ksql.jdbc.ksqldriver");
Exception in thread "main" Java.lang.NoClassDefFoundError: scala/ Function1
At java.lang.class.forname0(native method)
At java.lang.class.forname(unknown source)
...
Did anyone stumble on similar issue and knows how to overcome it?
Thank you.

Have you tried with java.sql.DriverManager.registerDriver(new com.github.mmolimar.ksql.jdbc.KsqlDriver)?

Getting the same error as ThePickNick; however, I'm getting it out of RazorSQL when trying to use the driver to query my ksql server, any ideas?

Same when using the produced driver jar in Intellij:

Its most likely because the produced jar is not a fat-jar, i.e. is missing the internal dependencies of the driver. Not sure hot to fix that, because it's done in sbt.

@ThePickNick, you may add the dependencies to your project. If you are using maven, it would be these two deps:
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.11.11</version>
        </dependency>

        <dependency>
            <groupId>io.confluent.ksql</groupId>
            <artifactId>ksql-rest-app</artifactId>
            <version>4.1.0</version>
        </dependency>

Can you try with the new version? Build the jar executing sbt clean assembly.

I've tried with the fat-version of the current master, and the noclassdef error seems fixed.
However, in Intellij IDEA I'm still struggling to use the driver for a dockerized setup as described in https://docs.confluent.io/current/quickstart/cos-docker-quickstart.html because it is asking for user credentials, and it's unclear to me where those could be found.

Greaa!


Functionality for switching between editing and interactive mode

Recently I was trying to add PR for switching between editing and interactive mode PR. So, after a small conversation with Chris Villa in discord thread, he said that you want to add toggle in header for switching modes, I have added new functionality in context, which allows user to interact with components inside preview in "out of box" editor and in custom editor.
Closes issue https://github.com/measuredco/puck/issues/565

I've been doing some thinking and this will actually be better on the AppState rather than a separate status. This saves us polluting the usePuck hook with every piece of appState, and introducing a custom dispatcher (setIsInteractive)
I also think that isInteractive is probably not quite the right name. I would prefer to introduce a new parameter to AppState, either mode or previewMode: "interactive" | "edit". Does that make sense?
Having said that, I know you're keen to get this done, so I'm happy to do a canary containing this existing implementation if it would help you out.

I think that you're right, but as I understand, usePuck is allowed either on "out of box" solution (default ), either on custom layout side, so I would like to use it from usePuck hook, cus I'am using custom layout.
About naming, got you, I will try to fix this as soon as possible, probably, on the beginning of next week or weekend

@SicParv1sMagna the app state is exposed via usePuck, and can be controlled via the dispatcher: https://puckeditor.com/docs/api-reference/functions/use-puck#appstate
I'm not convinced on the naming yet. For now, let's just move isInteractive to the app state and worry about the rename later (I can do a follow-up).

@chrisvxd Hello, sorry for fixing this pr so long. Removed isInteractive from usePuck hook and renamed it to mode

@chrisvxd is my merge request still actual?

@chrisvxd Missed that moment, fixed it, check it please)

@chrisvxd Can you please check new version

Hi @SicParv1sMagna - I've addressed merge conflicts, but you still need to update your tests for this to pass CI. Please run cd packages/core && npm run test -u and commit the updated snapshot change.

Give me few minutes

cd packages/core && npm run test -u

Done


Will there be a getting started and porting guide for C++  MFC and Win32 users?

I'm very good at Win32 naked API and still remember MFC, but there are so many question for someone like me who never went into C# world and only knowd that XAML is an XML for GUI.
Tutorials and getting started and blog posts about special porting topics are required urgently.
It's hard to even start asking questions when you don't understand anything whats going on.
And by the way, please open a user forum and separate it from the github source. github always seems like a very bad way to answer user questions, it just feels wrong and is not very inviting.

@anawishnoff FYI

I think I mentioned this in other issues, but examples of taking Win32 apps and making modern versions of them in terms of UI and repurposing the existing code - could be invaluable.
Calculator is an app that did that, but maybe Notepad may be the next Win32 app to adopt WinUI considering it is now a store app.
Sometimes this will "Here is how you add a button/main menu/dialog" with Win32 on one side and WinUI the other - other times it will be "well this classic UI is no longer recommended, here is how we would do it now".

Calculator is an app that did that, but maybe Notepad may be the next Win32 app to adopt WinUI considering it is now a store app.

And the typical scribble application please to see how large custom controls (canvases) are implemented.  Input Handling, maybe even PenKit (or whatever its called outside the Apple world).
Notepad is just a wrapper around the rich text control.


Ui lens is blank when touch search button

api return data , but ui failed render

Can you confirm the zipkin version you're using, and what is the storage backend ?

Can you confirm the zipkin version you're using, and what is the storage backend ?

not use the storage backend,it used in memory, the zipkin version is  latest.

Can you confirm the zipkin version you're using, and what is the storage backend ?

the excute.jar by mvn install source code ! . i dont konw the way of package is correct?

Building from source is not needed, follow the quick-start to get going https://github.com/openzipkin/zipkin#quick-start and report back if you encounter any issues.

encounter

I need change the  storage backend to support oracle , but i dont find related way,so i want change the source code .

I need change the storage backend to support oracle , but i dont find related way,so i want change the source code .

it has been supported oracle?

Oracle is not a supported storage option, there is a mysql storage option but it's not recommended for (high volume) production usage. See https://github.com/openzipkin/zipkin/tree/master/zipkin-storage if you want to explore making your own storage backend.
Apart from that, cloning and following the instructions here https://github.com/openzipkin/zipkin#running-the-server-from-source should give you a running server.

e. See https://github.com/openzipkin/zipkin/tree/master/zipkin-storage if you want to explore making your own storage backend.

thanks for much


Add stumpy_gif and update the description for stumpy_png

Hi,
I added another image library (stumpy_gif) and updated the description for stumpy_png because it is now possible to write .png files.

Sounds good.


task decorator on standard functions

Hello,
Maybe I'm misunderstanding the way task decorator should be used but consider the following code (Python 3.4) :
import asyncio
from pulsar import task

@task
def func():
    return 42

fut = func()
asyncio.get_event_loop().run_until_complete(fut)
print(fut.result())

It fails with :
TypeError: 'int' object is not iterable

This test feels wrong. I think using asyncio.coroutine() to create a coroutine from the functionargument would be better.
I'll submit a patch as soon as I solve my issues with running the test suite.

Indeed, to be honest that decorator is somehow there for legacy reason.
I think the test should only be if the res is a Future.

Indeed, to be honest that decorator is somehow there for legacy reasons.

Interesting. I have been using it on my Routers method to construct the reply in an asynchronous fashion. Am I missing something ?

That is the correct use for now, at least until python 3.4 is supported.
Once python 3.4 support is dropped (when python 3.6 is released) the task decorator is not that useful anymore. The async/await pair will do the job nicely.
The async wsgi specification will include native coroutine as well as futures as a possible return value from a wsgi middleware.

this is now fixed


add web_questions

add Web Question dataset
#336
Maybe @patrickvonplaten you can help with the dummy_data structure? it still broken

What does the nlp-cli dummy_data command returns ?

test.json -> test
and
train.json -> train
as shown by the nlp-cli dummy_data command ;-)

LGTM for merge @lhoestq - I let you merge if you want to.


How to set/calculate Tempo value?

I checked basic demos with MIDI.js & it works well.
I played with example "chopin-prelude-e-minor", & tried to play this melody with different tempo, but
it always play with same tempo, for example tracks[0].setTempo(x); x=120 or 240 or 480.
Am I missing some information about usage of tempo? please guide

setTempo parameters has  been changed recently; it depends if you install/download MidiWriterJS after or before the change.
Checkout this:
https://github.com/grimmdude/MidiWriterJS/pull/11

I downloaded it today, so I think it is latest one.
Here is my scenario

Integrate (install) MidiWriterJS  file in MIDIPlayer example
Change line "player.loadFile(song[songid++ % song.length], player.start);" to "player.loadFile(userFunctionDataUri(), player.start);", here "userFunctionDataUri()" is a user function returning MIDI String created by MidiWriterJS function "dataUri()"
Try different tempo parameter
Result : It plays with same tempo even after different tempo inputs

Hi @shivrajsa,
This could be an issue with MIDI.js.  Have you tried testing it in another MIDI player?
-Garrett

Could you please suggest a good & stable MIDI player, I will try.
It should take DataUri() output as input as per scenario.

When I'm working on this library this I typically use GarageBand for MIDI playback since it has good visualization of notes and meta events.  For online playback I've had some trouble finding a bug free MIDI player (and actually considered writing one of my own).  I did find, however, this one to work pretty well:
https://github.com/chenx/MidiPlayer
It's the same one I'm using on the example page for this repo.  You'll have to check to see if it accepts Uint8 array as an input, I know it takes a dataURI though.
-G

Hi @shivrajsa, for my midi test and work i usually rely on MuseScore. You said you started from the chopin example (btw @grimmdude examples should be updated to new setTempo parameters) is it right? Just want to understand if there is some ¨bug¨ in MidiWriterJS or not.
Also @shivrajsa i took some time to introduce myself about indian music and let me say it´s very awesome (well.. actually VERY awesome.... considering i come from western music studies); now I understand your request about giving note times in seconds. I thought of few ways to do so with MidiWriterJS, but it´s still a forced way to do things... Do you know of any software specific to work with indian music (MIDI related)?
@grimmdude I used to compare MIDI files generated from this library and the same partiture composed in other software with hex editors; it´s a good meter of comparsion.
Thanks to both =)
-M

In my app there is option to export melody as MIDI file, you can check this option above each melody (table) at this  link. Instead of "Devnagari" you can select option "Western" to see notations of melody in western format.
Just drag drop exported MIDI file at this  link, an app mentioned as 'Color Piano' in MIDI.js demos. It works well even in Windows Media Player.
I generate MIDI using library jsmidi where it is possible to manipulate delay in seconds.
Some month back I tried to generate string using jsmidi & given it as input to MIDI.js player & it did not work well.
You can check MIDI generated using my app for further analysis.
Also here is one more app to check http://ragapedia.com/, I did not try it but there is option to export MIDI file.

Hi @shivrajsa,
I took some time to try midi generated by this library with both MuseScore and color piano you mentioned and everything is fine (setting diffrents tempo).
I also try to take a look to an exported of yours at vishwamohini music notation and cannot find the midi meta event to set tempo (FF 51), so I think the player try a guess.

Edit: and I think the guess is based on the delta time for each events and the total songs duration.
I'm still searching on the topic MIDI-Indian like music. I'm gonna ask to some music schools and alike, you could try to do the same in the meantime
-M

I believe if the tempo event doesn't exist then MIDI players will default to 120 bpm.
-Garrett

this could be closed in favor of #13

Hi @lplume @grimmdude, as said by @grimmdude it could be issue of MIDI.js, could you please also check this issue with MIDI.js because exported MIDI works well with MIDI.js player but datauri does not work well with MIDI.js player.
Using MIDI.js to play MIDI files generated by this library will be very useful because we can use soundfont in MIDI.js, take a look at my app where I am playing Tabla (Indian classical percussion instrument) using this library. Also we can easily set animations

Hi @shivrajsa ,
Could you download a fresh copy of this library and see if you still have the same issues with MIDI.js?  Just put in a small fix on the tempo setup.
-Garrett


fix: support-logging search not work

@frankiezdh Commit isn't signed. Issue wasn't created before PR outlining the scope of the proposed work. Not reviewing this until those things are fixed.


How to enable autocompletion for ClojureScript?

Hello! I've installed Deoplete and it's working when edition Javascript, CSS, etc.. but it's not for ClojureScript... I do need to add something to my deps to get this working? I'm using Shadow-cljs
Thank you very much for your amazing work!

Hey! This is probably the issue someone else ran into! clj-suitable was broken for shadow-cljs recently, there's an option on the develop branch to disable the enhanced CLJS completion and just rely on the core completion mechanics: let g:conjure#client#clojure#nrepl#completion#cljs#use_suitable = v:false on develop should do it? As long as you have the CIDER middleware too? https://github.com/Olical/conjure/wiki/Quick-start:-ClojureScript-(shadow-cljs)

#107 details the issues with advanced CLJS completion, I think just swapping to the develop branch will get it working for you.

I'm going to close this for now since I think it's probably to do with this upstream bug which there's currently a workaround for in the latest release https://github.com/Olical/conjure/pull/107
Hopefully it'll get fixed soon! Until then this slightly simpler completion should be working now. Let me know if not!


Automated cherry pick of #6875: replace err with errors.cause

Cherry pick of #6875 on release/3.2.
#6875: replace err with errors.cause

/lgtm
/approve


[a11y] Add Button functionality to OptionButton

What and Why
OptionButton's outer-most clickable container is a div rather than a button. This PR updates it to use button semantics instead, and converts all related code for functionality to TypeScript to better safeguard against regression.
CHANGELOG

Updates all () => {} instances to be () => undefined to future-proof against eslint issues for https://eslint.org/docs/rules/no-empty-function.

It also prettifies these .md files, so you can just mark them viewed to reduce the diff noise.

Renames type prop, used for styling, to be buttonType in OptionButton.

More verbose naming makes clear the type is for our primary and secondary button styles.
This was required to avoid type namespace issues for the HTML button property.

TODO

I'd like to double-check how this looks in PocketDerm, but also wanted to get this in front of you for a quick review (time permitting) before your EOD, if only to sanity-check direction next week.

The functionality is fantastic, and overall I love the approach of using an actual interactive element. There might be a world where we would want this to use either a radio or checkbox input instead of a button, but honestly I think this will meet all of our compliance and usability goals if we add a role to indicate the type of input this is representing.
The button width is behaving strangely on the Storybook for some reason - I imagine that the button is inheriting a width from somewhere? Adding width and max-width seemed to fix it...

Once those issues are resolved, though, I think this is good to go. I'm going to go ahead an approve, but obviously feel free to get a second set of eyes before merging if you'd like some additional thoughts for any reason!

It looks like there is div-specific styling in our stories (along with some button-specific changes that needed to be made). This is fixed in d615b7a.


Ensure specifying a node-version updates the pinned node.

[x] Ensure tests fail properly (demonstrating the issue described in #21)
[x] Implement fix (use volta pin when within a Node project)

Fixes #21

Thanks for the fix here! 🎉


Question about OpenVR

Hey @ashtuchkin
You'll have to excuse my ignorance on this, but would this be tracked with OpenVR/SteamVR like a Vive tracker?  I'm interested in making something that would work with this software from Brekel:
https://brekel.com/openvr-recorder/
Is it as simple as assembling the parts and embedding the software or would there be other steps needed for it to be found by this software and/or the Vive software?
Awesome stuff.  Thanks so much!
Eric

This project is much more low-level. It does give you current 3d coordinates with some precision, but it's nowhere near the stability of the original Vive trackers. You'll also need to get these coordinates to your computer somehow (currently the coordinates are calculated on the device itself).


grpc Ruby gem depends on older version of google-protobuf

The current 1.0.1 version of grpc Ruby gem pings its google-protobuf dependency on version 3.0.2. This prevents other Google gems that are built on top of grpc to upgrade to later google-protobuf 3.1. E.g. gax-ruby
Is there a plan to release newer version of grpc to either upgrade dependency on google-protobuf or loosen up the restriction?
/cc @omaray, @swcloud

closing as fixed by https://github.com/grpc/grpc/pull/8914


Allow fixtures to execute rust code

Feature Request
Is your feature request related to a problem? Please describe.
Currently I need to parse a CSV file and generate IDs on the go which I cannot do in yaml files because their are static.
Describe the solution you'd like
Would be great if we have a new method named like seed_by_function that takes a function instead of a path.
Describe alternatives you've considered
This can sometimes be moved into the migrations crate but as the migration crate has no access to generator, factories etc. it isn't a viable option for everything.

I am working on a pr for this.


Adding and Deleting PKCS11 Modules using modutil

Is your feature request related to a problem? Please describe.
N/A
Describe the solution you'd like
Update the script to use modutil instead of printf on pkcs11.txt files. This will make the codebase smaller and would allow a user to change pkcs modules much easier.
Describe alternatives you've considered

https://firefox-source-docs.mozilla.org/security/nss/index.html
https://docs.oracle.com/cd/E19879-01/820-4335/ablrf/index.html

Additional context
Ensure that your web service is taken offline (stopped, disabled, etc.) while performing these steps and ensure no concurrent access to the NSS database by other processes (such as a browser). Doing so may corrupt the NSS database or result in improper usage of these certificates.

Maybe another option other than modutils. p11-kit-proxy provider is automatically and globally injected into every NSSDB by /etc/crypto-policies/back-ends/nss.config on Fedora.
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/security_hardening/using-the-system-wide-cryptographic-policies_security-hardening


Feature/List Detection Employees w/ Filtering

list commands for departing-employee and high-risk-employee, really useful for checking the occupants of these lists w/o having to open the UI.
Test:
code42 departing-employee list
code42 departing-employee list -f RAW-JSON
code42 departing-employee list -f CSV
code42 high-risk-employee list
code42 high-risk-employee list -f RAW-JSON
code42 high-risk--employee list -f CSV
Questions:
Do we want to echo something like "nobody on list" when 0 results?

Do we want to echo something like "nobody on list" when 0 results?

Probably, since this is an established pattern in other places where a list yields no results. I would say something like There are currently no users on the <listname> list.

An option to filter results by departing date too can be useful. Use case: A user is interested in knowing employees departing in next 1 month or between given dates.

@kiran-chaudhary Thank you for your feedback! You found some good stuff, I addressed it all I believe except I made a compromise.  Instead of implementing some custom filtering via Departure Date, I added the API-given filter clauses as options.  They include EXFILTRATION_24_HOURS and EXFILTRATION_30_DAYS and departing employee even has one for LEAVING_TODAY... So these mirror the same functionality in the UI!  Thanks Kiran, let me know what you think

@kiran-chaudhary Thank you for your feedback! You found some good stuff, I addressed it all I believe except I made a compromise. Instead of implementing some custom filtering via Departure Date, I added the API-given filter clauses as options. They include EXFILTRATION_24_HOURS and EXFILTRATION_30_DAYS and departing employee even has one for LEAVING_TODAY... So these mirror the same functionality in the UI! Thanks Kiran, let me know what you think

This looks good now.
Below points are not on our team's plate but a general suggestion to be taken up with concerned team:

Analysing the data it seems there should be an option to filter out results of past dates i.e right now "departing employee" displays data even of "departed employees", if not added then OPEN filter will display current data even in 2022.

As we renamed our product from "Insider threat" to "Insider Risk", on that same thought process, we should recommend renaming "EXFILTRATION_24_DAYS" to a milder word like "DEPARTING_WITHIN_24_DAYS".

I have read the CLA Document and I hereby sign the CLA


Version 1.74.5

Tweaks the -engine command to be more "Module"
Adds 2 new commands "-telsa" and "-hail"
Tesla being the same as -sing but for the Tesla Engine
Hail removes the mostly unused -law command and replaces it with a message for our Lord and Savior - Dr. Bronzebeard
Happy?

@GunHog Tada

Add the changelog to the manual. Later I will have to make it a separate file or something.

Was just going to do that

@GunHog updooted

Good girl.


Subsequent JOIN s don't match to correct row

Describe the bug
I have a query where I JOIN three tables, and then have a WHERE clause on the last table ("twintag.owner"). If I give a value that exists there, all the results are returned (regardless of whether or not the "twintag.owner" matches the actual value), and if I give a value that doesn't exist, it returns nothing.
The query is as follows:
SELECT "75620d04a8b7b34c70c68f7af68953af".*
FROM "75620d04a8b7b34c70c68f7af68953af"
JOIN "f4be58656cd5e54b9bffa1706c3c49ff" AS "linkedtwintag"
    ON "75620d04a8b7b34c70c68f7af68953af"."82ad7656c6b6be56e9abfac772c89b4c" = "linkedtwintag"."776ff32c7d7bfb1c1a49d5c0d94e0db8"
JOIN "__bag" AS "linkedtwintag_twintag"
    ON "linkedtwintag"."dataScope" = "linkedtwintag_twintag"."storage_qid"
WHERE 1 = 1
AND "linkedtwintag_twintag"."owner" = '324ae4533db15dcb19e3473fea54177a'
ORDER BY "75620d04a8b7b34c70c68f7af68953af"."qid" ASC

If I start from the intermediate table it works as expected and I get back the one result I'm looking for:
SELECT "f4be58656cd5e54b9bffa1706c3c49ff".*
FROM "f4be58656cd5e54b9bffa1706c3c49ff"
JOIN "__bag" AS "twintag"
    ON "f4be58656cd5e54b9bffa1706c3c49ff"."dataScope" = "twintag"."storage_qid"
WHERE 1 = 1
AND "twintag"."owner" = '324ae4533db15dcb19e3473fea54177a'  ORDER BY "f4be58656cd5e54b9bffa1706c3c49ff"."qid" ASC

To Reproduce
Create some tables where you can construct a JOIN from table A to B and from B to C.
Execute the (type of) query, where you use the intermediate table to join from table A to C, filtering on something in table C:
SELECT "75620d04a8b7b34c70c68f7af68953af".*
FROM "75620d04a8b7b34c70c68f7af68953af"
JOIN "f4be58656cd5e54b9bffa1706c3c49ff" AS "linkedtwintag"
    ON "75620d04a8b7b34c70c68f7af68953af"."82ad7656c6b6be56e9abfac772c89b4c" = "linkedtwintag"."776ff32c7d7bfb1c1a49d5c0d94e0db8"
JOIN "__bag" AS "linkedtwintag_twintag"
    ON "linkedtwintag"."dataScope" = "linkedtwintag_twintag"."storage_qid"
WHERE 1 = 1
AND "linkedtwintag_twintag"."owner" = '324ae4533db15dcb19e3473fea54177a'
ORDER BY "75620d04a8b7b34c70c68f7af68953af"."qid" ASC

Expected behavior
I expect only the items which match the filter on table C to be returned.
Currently it returns either ALL items if an item matches, or NO items if there is no match found. In the example above I expect 1 match, but I get all the items from table A back.
If I change the value I'm looking for in table C to be non-existent there, I get back no results instead, which is expected.
Additional context
I'm also using datafusion-remote-table from seafowl (https://github.com/splitgraph/seafowl/tree/main/datafusion_remote_tables)

Thank you for the report @MidasLamb  -- is it possible to share a reproducer (aka the data referred to above)? This seems like it may be data specific

@alamb , I've created a reproduction repo here: https://github.com/MidasLamb/datafusion-multiple-join-bug-example
If you search for "b93" in the output that is shown, you'll see in the first test that when the WHERE clause is added, there suddenly are a lot more results which show up out of nowhere compared to the first show() without a WHERE clause

It seems to be a bug in a default optimizer, because adding this:
    let ctx = SessionContext::with_state(
        state
            .with_optimizer_rules(vec![])
    );

gives back the results that I expect

Awesome - @MidasLamb . If possible, could you identify:

Which optimizer rule is at fault?
What is the change in logical / physical plan (EXPLAIN VERBOSE)?

@Dandandan , I'm trying to find the default optimizer rules so I can start weeding them out, but I can't find them immediately, so that's why I already posted that little update

No worries, this is the entire list:
        let rules: Vec<Arc<dyn OptimizerRule + Sync + Send>> = vec![
            Arc::new(SimplifyExpressions::new()),
            Arc::new(UnwrapCastInComparison::new()),
            Arc::new(ReplaceDistinctWithAggregate::new()),
            Arc::new(EliminateJoin::new()),
            Arc::new(DecorrelatePredicateSubquery::new()),
            Arc::new(ScalarSubqueryToJoin::new()),
            Arc::new(ExtractEquijoinPredicate::new()),
            // simplify expressions does not simplify expressions in subqueries, so we
            // run it again after running the optimizations that potentially converted
            // subqueries to joins
            Arc::new(SimplifyExpressions::new()),
            Arc::new(MergeProjection::new()),
            Arc::new(RewriteDisjunctivePredicate::new()),
            Arc::new(EliminateDuplicatedExpr::new()),
            Arc::new(EliminateFilter::new()),
            Arc::new(EliminateCrossJoin::new()),
            Arc::new(CommonSubexprEliminate::new()),
            Arc::new(EliminateLimit::new()),
            Arc::new(PropagateEmptyRelation::new()),
            Arc::new(FilterNullJoinKeys::default()),
            Arc::new(EliminateOuterJoin::new()),
            // Filters can't be pushed down past Limits, we should do PushDownFilter after PushDownLimit
            Arc::new(PushDownLimit::new()),
            Arc::new(PushDownFilter::new()),
            Arc::new(SingleDistinctToGroupBy::new()),
            // The previous optimizations added expressions and projections,
            // that might benefit from the following rules
            Arc::new(SimplifyExpressions::new()),
            Arc::new(UnwrapCastInComparison::new()),
            Arc::new(CommonSubexprEliminate::new()),
            Arc::new(PushDownProjection::new()),
            Arc::new(EliminateProjection::new()),
            // PushDownProjection can pushdown Projections through Limits, do PushDownLimit again.
            Arc::new(PushDownLimit::new()),
        ];

Seems to be a caused by these two rules, commenting one of them makes it works as expected:
state.with_optimizer_rules(vec![
            // Arc::new(SimplifyExpressions::new()),
            // Arc::new(UnwrapCastInComparison::new()),
            // Arc::new(ReplaceDistinctWithAggregate::new()),
            // Arc::new(EliminateJoin::new()),
            // Arc::new(DecorrelatePredicateSubquery::new()),
            // Arc::new(ScalarSubqueryToJoin::new()),
            Arc::new(ExtractEquijoinPredicate::new()),
            // Arc::new(SimplifyExpressions::new()),
            // Arc::new(MergeProjection::new()),
            // Arc::new(RewriteDisjunctivePredicate::new()),
            // Arc::new(EliminateDuplicatedExpr::new()),
            // Arc::new(EliminateFilter::new()),
            Arc::new(EliminateCrossJoin::new()),
            // Arc::new(CommonSubexprEliminate::new()),
            // Arc::new(EliminateLimit::new()),
            //
            // Arc::new(PropagateEmptyRelation::new()),
            // Arc::new(FilterNullJoinKeys::default()),
            // Arc::new(EliminateOuterJoin::new()),
            // Arc::new(PushDownLimit::new()),
            // Arc::new(PushDownFilter::new()),
            // Arc::new(SingleDistinctToGroupBy::new()),
            // Arc::new(SimplifyExpressions::new()),
            // Arc::new(UnwrapCastInComparison::new()),
            // Arc::new(CommonSubexprEliminate::new()),
            // Arc::new(PushDownProjection::new()),
            // Arc::new(EliminateProjection::new()),
            // Arc::new(PushDownLimit::new()),
        ]),

Individual plans
Plan without bug:
+--------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| plan_type                                        | plan                                                                                |
+--------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| initial_logical_plan                             | Projection: service_article.qid, service_article.timestamp, service_article.createdDate, service_article.82ad7656c6b6be56e9abfac772c89b4c, metadata.dataScope, metadata.qid, metadata.timestamp, metadata.createdDate, metadata.776ff32c7d7bfb1c1a49d5c0d94e0db8, bag.owner, bag.status, bag.created_date, bag.edition, bag.subedition, bag.parent, bag.time_limit, bag.file_count, bag.file_count_limit, bag.capacity, bag.capacity_limit, bag.bandwidth, bag.bandwidth_incoming, bag.bandwidth_outgoing, bag.bandwidth_limit, bag.client_ip, bag.deletion_time, bag.credits, bag.suspended, bag.suspendedowner, bag.flagged, bag.blessed, bag.cleared, bag.added, bag.saved, bag.shared, bag.skipped, bag.celebrated, bag.scan_count, bag.bandwidth_all_incoming, bag.bandwidth_all_outgoing, bag.resourcelimit_email_flag, bag.edition_activated_date, bag.storage_qid, bag.customizationflags                                                                                |
|                                                  |   Filter: bag.storage_qid = Utf8("b936b63f271c21b4a00957b325cb9a22")                                                                                |
|                                                  |     Inner Join:  Filter: bag.storage_qid = metadata.dataScope                                                                                |
|                                                  |       Inner Join:  Filter: metadata.776ff32c7d7bfb1c1a49d5c0d94e0db8 = service_article.82ad7656c6b6be56e9abfac772c89b4c                                                                                |
|                                                  |         TableScan: service_article                                                                                |
|                                                  |         TableScan: metadata                                                                                |
|                                                  |       TableScan: bag                                                                                |
| logical_plan after inline_table_scan             | SAME TEXT AS ABOVE                                                                                |
| logical_plan after type_coercion                 | SAME TEXT AS ABOVE                                                                                |
| logical_plan after count_wildcard_rule           | SAME TEXT AS ABOVE                                                                                |
| analyzed_logical_plan                            | SAME TEXT AS ABOVE                                                                                |
| logical_plan after eliminate_cross_join          | SAME TEXT AS ABOVE                                                                                |
| logical_plan                                     | Projection: service_article.qid, service_article.timestamp, service_article.createdDate, service_article.82ad7656c6b6be56e9abfac772c89b4c, metadata.dataScope, metadata.qid, metadata.timestamp, metadata.createdDate, metadata.776ff32c7d7bfb1c1a49d5c0d94e0db8, bag.owner, bag.status, bag.created_date, bag.edition, bag.subedition, bag.parent, bag.time_limit, bag.file_count, bag.file_count_limit, bag.capacity, bag.capacity_limit, bag.bandwidth, bag.bandwidth_incoming, bag.bandwidth_outgoing, bag.bandwidth_limit, bag.client_ip, bag.deletion_time, bag.credits, bag.suspended, bag.suspendedowner, bag.flagged, bag.blessed, bag.cleared, bag.added, bag.saved, bag.shared, bag.skipped, bag.celebrated, bag.scan_count, bag.bandwidth_all_incoming, bag.bandwidth_all_outgoing, bag.resourcelimit_email_flag, bag.edition_activated_date, bag.storage_qid, bag.customizationflags                                                                                |
|                                                  |   Filter: bag.storage_qid = Utf8("b936b63f271c21b4a00957b325cb9a22")                                                                                |
|                                                  |     Inner Join:  Filter: bag.storage_qid = metadata.dataScope                                                                                |
|                                                  |       Inner Join:  Filter: metadata.776ff32c7d7bfb1c1a49d5c0d94e0db8 = service_article.82ad7656c6b6be56e9abfac772c89b4c                                                                                |
|                                                  |         TableScan: service_article                                                                                |
|                                                  |         TableScan: metadata                                                                                |
|                                                  |       TableScan: bag                                                                                |
| initial_physical_plan                            | ProjectionExec: expr=[qid@0 as qid, timestamp@1 as timestamp, createdDate@2 as createdDate, 82ad7656c6b6be56e9abfac772c89b4c@3 as 82ad7656c6b6be56e9abfac772c89b4c, dataScope@4 as dataScope, qid@5 as qid, timestamp@6 as timestamp, createdDate@7 as createdDate, 776ff32c7d7bfb1c1a49d5c0d94e0db8@8 as 776ff32c7d7bfb1c1a49d5c0d94e0db8, owner@9 as owner, status@10 as status, created_date@11 as created_date, edition@12 as edition, subedition@13 as subedition, parent@14 as parent, time_limit@15 as time_limit, file_count@16 as file_count, file_count_limit@17 as file_count_limit, capacity@18 as capacity, capacity_limit@19 as capacity_limit, bandwidth@20 as bandwidth, bandwidth_incoming@21 as bandwidth_incoming, bandwidth_outgoing@22 as bandwidth_outgoing, bandwidth_limit@23 as bandwidth_limit, client_ip@24 as client_ip, deletion_time@25 as deletion_time, credits@26 as credits, suspended@27 as suspended, suspendedowner@28 as suspendedowner, flagged@29 as flagged, blessed@30 as blessed, cleared@31 as cleared, added@32 as added, saved@33 as saved, shared@34 as shared, skipped@35 as skipped, celebrated@36 as celebrated, scan_count@37 as scan_count, bandwidth_all_incoming@38 as bandwidth_all_incoming, bandwidth_all_outgoing@39 as bandwidth_all_outgoing, resourcelimit_email_flag@40 as resourcelimit_email_flag, edition_activated_date@41 as edition_activated_date, storage_qid@42 as storage_qid, customizationflags@43 as customizationflags] |
|                                                  |   FilterExec: storage_qid@42 = b936b63f271c21b4a00957b325cb9a22                                                                                |
|                                                  |     NestedLoopJoinExec: join_type=Inner, filter=BinaryExpr { left: Column { name: "storage_qid", index: 1 }, op: Eq, right: Column { name: "dataScope", index: 0 } }                                                                                |
|                                                  |       NestedLoopJoinExec: join_type=Inner, filter=BinaryExpr { left: Column { name: "776ff32c7d7bfb1c1a49d5c0d94e0db8", index: 1 }, op: Eq, right: Column { name: "82ad7656c6b6be56e9abfac772c89b4c", index: 0 } }                                                                                |
|                                                  |         ParquetExec: file_groups={1 group: [[home/midas/test/fus/service_article.parquet/part-0.parquet]]}, projection=[qid, timestamp, createdDate, 82ad7656c6b6be56e9abfac772c89b4c]                                                                                |
|                                                  |         ParquetExec: file_groups={1 group: [[home/midas/test/fus/metadata.parquet/part-0.parquet]]}, projection=[dataScope, qid, timestamp, createdDate, 776ff32c7d7bfb1c1a49d5c0d94e0db8]                                                                                |
|                                                  |       ParquetExec: file_groups={1 group: [[home/midas/test/fus/bag.parquet/part-0.parquet]]}, projection=[owner, status, created_date, edition, subedition, parent, time_limit, file_count, file_count_limit, capacity, capacity_limit, bandwidth, bandwidth_incoming, bandwidth_outgoing, bandwidth_limit, client_ip, deletion_time, credits, suspended, suspendedowner, flagged, blessed, cleared, added, saved, shared, skipped, celebrated, scan_count, bandwidth_all_incoming, bandwidth_all_outgoing, resourcelimit_email_flag, edition_activated_date, storage_qid, customizationflags]                                                                                |
|                                                  |                                                                                |
| physical_plan after aggregate_statistics         | SAME TEXT AS ABOVE                                                                                |
| physical_plan after join_selection               | SAME TEXT AS ABOVE                                                                                |
| physical_plan after PipelineFixer                | SAME TEXT AS ABOVE                                                                                |
| physical_plan after repartition                  | ProjectionExec: expr=[qid@0 as qid, timestamp@1 as timestamp, createdDate@2 as createdDate, 82ad7656c6b6be56e9abfac772c89b4c@3 as 82ad7656c6b6be56e9abfac772c89b4c, dataScope@4 as dataScope, qid@5 as qid, timestamp@6 as timestamp, createdDate@7 as createdDate, 776ff32c7d7bfb1c1a49d5c0d94e0db8@8 as 776ff32c7d7bfb1c1a49d5c0d94e0db8, owner@9 as owner, status@10 as status, created_date@11 as created_date, edition@12 as edition, subedition@13 as subedition, parent@14 as parent, time_limit@15 as time_limit, file_count@16 as file_count, file_count_limit@17 as file_count_limit, capacity@18 as capacity, capacity_limit@19 as capacity_limit, bandwidth@20 as bandwidth, bandwidth_incoming@21 as bandwidth_incoming, bandwidth_outgoing@22 as bandwidth_outgoing, bandwidth_limit@23 as bandwidth_limit, client_ip@24 as client_ip, deletion_time@25 as deletion_time, credits@26 as credits, suspended@27 as suspended, suspendedowner@28 as suspendedowner, flagged@29 as flagged, blessed@30 as blessed, cleared@31 as cleared, added@32 as added, saved@33 as saved, shared@34 as shared, skipped@35 as skipped, celebrated@36 as celebrated, scan_count@37 as scan_count, bandwidth_all_incoming@38 as bandwidth_all_incoming, bandwidth_all_outgoing@39 as bandwidth_all_outgoing, resourcelimit_email_flag@40 as resourcelimit_email_flag, edition_activated_date@41 as edition_activated_date, storage_qid@42 as storage_qid, customizationflags@43 as customizationflags] |
|                                                  |   FilterExec: storage_qid@42 = b936b63f271c21b4a00957b325cb9a22                                                                                |
|                                                  |     RepartitionExec: partitioning=RoundRobinBatch(16), input_partitions=1                                                                                |
|                                                  |       NestedLoopJoinExec: join_type=Inner, filter=BinaryExpr { left: Column { name: "storage_qid", index: 1 }, op: Eq, right: Column { name: "dataScope", index: 0 } }                                                                                |
|                                                  |         NestedLoopJoinExec: join_type=Inner, filter=BinaryExpr { left: Column { name: "776ff32c7d7bfb1c1a49d5c0d94e0db8", index: 1 }, op: Eq, right: Column { name: "82ad7656c6b6be56e9abfac772c89b4c", index: 0 } }                                                                                |
|                                                  |           ParquetExec: file_groups={1 group: [[home/midas/test/fus/service_article.parquet/part-0.parquet]]}, projection=[qid, timestamp, createdDate, 82ad7656c6b6be56e9abfac772c89b4c]                                                                                |
|                                                  |           ParquetExec: file_groups={1 group: [[home/midas/test/fus/metadata.parquet/part-0.parquet]]}, projection=[dataScope, qid, timestamp, createdDate, 776ff32c7d7bfb1c1a49d5c0d94e0db8]                                                                                |
|                                                  |         ParquetExec: file_groups={1 group: [[home/midas/test/fus/bag.parquet/part-0.parquet]]}, projection=[owner, status, created_date, edition, subedition, parent, time_limit, file_count, file_count_limit, capacity, capacity_limit, bandwidth, bandwidth_incoming, bandwidth_outgoing, bandwidth_limit, client_ip, deletion_time, credits, suspended, suspendedowner, flagged, blessed, cleared, added, saved, shared, skipped, celebrated, scan_count, bandwidth_all_incoming, bandwidth_all_outgoing, resourcelimit_email_flag, edition_activated_date, storage_qid, customizationflags]                                                                                |
|                                                  |                                                                                |
| physical_plan after global_sort_selection        | SAME TEXT AS ABOVE                                                                                |
| physical_plan after EnforceDistribution          | SAME TEXT AS ABOVE                                                                                |
| physical_plan after CombinePartialFinalAggregate | SAME TEXT AS ABOVE                                                                                |
| physical_plan after EnforceSorting               | SAME TEXT AS ABOVE                                                                                |
| physical_plan after coalesce_batches             | ProjectionExec: expr=[qid@0 as qid, timestamp@1 as timestamp, createdDate@2 as createdDate, 82ad7656c6b6be56e9abfac772c89b4c@3 as 82ad7656c6b6be56e9abfac772c89b4c, dataScope@4 as dataScope, qid@5 as qid, timestamp@6 as timestamp, createdDate@7 as createdDate, 776ff32c7d7bfb1c1a49d5c0d94e0db8@8 as 776ff32c7d7bfb1c1a49d5c0d94e0db8, owner@9 as owner, status@10 as status, created_date@11 as created_date, edition@12 as edition, subedition@13 as subedition, parent@14 as parent, time_limit@15 as time_limit, file_count@16 as file_count, file_count_limit@17 as file_count_limit, capacity@18 as capacity, capacity_limit@19 as capacity_limit, bandwidth@20 as bandwidth, bandwidth_incoming@21 as bandwidth_incoming, bandwidth_outgoing@22 as bandwidth_outgoing, bandwidth_limit@23 as bandwidth_limit, client_ip@24 as client_ip, deletion_time@25 as deletion_time, credits@26 as credits, suspended@27 as suspended, suspendedowner@28 as suspendedowner, flagged@29 as flagged, blessed@30 as blessed, cleared@31 as cleared, added@32 as added, saved@33 as saved, shared@34 as shared, skipped@35 as skipped, celebrated@36 as celebrated, scan_count@37 as scan_count, bandwidth_all_incoming@38 as bandwidth_all_incoming, bandwidth_all_outgoing@39 as bandwidth_all_outgoing, resourcelimit_email_flag@40 as resourcelimit_email_flag, edition_activated_date@41 as edition_activated_date, storage_qid@42 as storage_qid, customizationflags@43 as customizationflags] |
|                                                  |   CoalesceBatchesExec: target_batch_size=8192                                                                                |
|                                                  |     FilterExec: storage_qid@42 = b936b63f271c21b4a00957b325cb9a22                                                                                |
|                                                  |       RepartitionExec: partitioning=RoundRobinBatch(16), input_partitions=1                                                                                |
|                                                  |         NestedLoopJoinExec: join_type=Inner, filter=BinaryExpr { left: Column { name: "storage_qid", index: 1 }, op: Eq, right: Column { name: "dataScope", index: 0 } }                                                                                |
|                                                  |           NestedLoopJoinExec: join_type=Inner, filter=BinaryExpr { left: Column { name: "776ff32c7d7bfb1c1a49d5c0d94e0db8", index: 1 }, op: Eq, right: Column { name: "82ad7656c6b6be56e9abfac772c89b4c", index: 0 } }                                                                                |
|                                                  |             ParquetExec: file_groups={1 group: [[home/midas/test/fus/service_article.parquet/part-0.parquet]]}, projection=[qid, timestamp, createdDate, 82ad7656c6b6be56e9abfac772c89b4c]                                                                                |
|                                                  |             ParquetExec: file_groups={1 group: [[home/midas/test/fus/metadata.parquet/part-0.parquet]]}, projection=[dataScope, qid, timestamp, createdDate, 776ff32c7d7bfb1c1a49d5c0d94e0db8]                                                                                |
|                                                  |           ParquetExec: file_groups={1 group: [[home/midas/test/fus/bag.parquet/part-0.parquet]]}, projection=[owner, status, created_date, edition, subedition, parent, time_limit, file_count, file_count_limit, capacity, capacity_limit, bandwidth, bandwidth_incoming, bandwidth_outgoing, bandwidth_limit, client_ip, deletion_time, credits, suspended, suspendedowner, flagged, blessed, cleared, added, saved, shared, skipped, celebrated, scan_count, bandwidth_all_incoming, bandwidth_all_outgoing, resourcelimit_email_flag, edition_activated_date, storage_qid, customizationflags]                                                                                |
|                                                  |                                                                                |
| physical_plan after PipelineChecker              | SAME TEXT AS ABOVE                                                                                |
| physical_plan                                    | ProjectionExec: expr=[qid@0 as qid, timestamp@1 as timestamp, createdDate@2 as createdDate, 82ad7656c6b6be56e9abfac772c89b4c@3 as 82ad7656c6b6be56e9abfac772c89b4c, dataScope@4 as dataScope, qid@5 as qid, timestamp@6 as timestamp, createdDate@7 as createdDate, 776ff32c7d7bfb1c1a49d5c0d94e0db8@8 as 776ff32c7d7bfb1c1a49d5c0d94e0db8, owner@9 as owner, status@10 as status, created_date@11 as created_date, edition@12 as edition, subedition@13 as subedition, parent@14 as parent, time_limit@15 as time_limit, file_count@16 as file_count, file_count_limit@17 as file_count_limit, capacity@18 as capacity, capacity_limit@19 as capacity_limit, bandwidth@20 as bandwidth, bandwidth_incoming@21 as bandwidth_incoming, bandwidth_outgoing@22 as bandwidth_outgoing, bandwidth_limit@23 as bandwidth_limit, client_ip@24 as client_ip, deletion_time@25 as deletion_time, credits@26 as credits, suspended@27 as suspended, suspendedowner@28 as suspendedowner, flagged@29 as flagged, blessed@30 as blessed, cleared@31 as cleared, added@32 as added, saved@33 as saved, shared@34 as shared, skipped@35 as skipped, celebrated@36 as celebrated, scan_count@37 as scan_count, bandwidth_all_incoming@38 as bandwidth_all_incoming, bandwidth_all_outgoing@39 as bandwidth_all_outgoing, resourcelimit_email_flag@40 as resourcelimit_email_flag, edition_activated_date@41 as edition_activated_date, storage_qid@42 as storage_qid, customizationflags@43 as customizationflags] |
|                                                  |   CoalesceBatchesExec: target_batch_size=8192                                                                                |
|                                                  |     FilterExec: storage_qid@42 = b936b63f271c21b4a00957b325cb9a22                                                                                |
|                                                  |       RepartitionExec: partitioning=RoundRobinBatch(16), input_partitions=1                                                                                |
|                                                  |         NestedLoopJoinExec: join_type=Inner, filter=BinaryExpr { left: Column { name: "storage_qid", index: 1 }, op: Eq, right: Column { name: "dataScope", index: 0 } }                                                                                |
|                                                  |           NestedLoopJoinExec: join_type=Inner, filter=BinaryExpr { left: Column { name: "776ff32c7d7bfb1c1a49d5c0d94e0db8", index: 1 }, op: Eq, right: Column { name: "82ad7656c6b6be56e9abfac772c89b4c", index: 0 } }                                                                                |
|                                                  |             ParquetExec: file_groups={1 group: [[home/midas/test/fus/service_article.parquet/part-0.parquet]]}, projection=[qid, timestamp, createdDate, 82ad7656c6b6be56e9abfac772c89b4c]                                                                                |
|                                                  |             ParquetExec: file_groups={1 group: [[home/midas/test/fus/metadata.parquet/part-0.parquet]]}, projection=[dataScope, qid, timestamp, createdDate, 776ff32c7d7bfb1c1a49d5c0d94e0db8]                                                                                |
|                                                  |           ParquetExec: file_groups={1 group: [[home/midas/test/fus/bag.parquet/part-0.parquet]]}, projection=[owner, status, created_date, edition, subedition, parent, time_limit, file_count, file_count_limit, capacity, capacity_limit, bandwidth, bandwidth_incoming, bandwidth_outgoing, bandwidth_limit, client_ip, deletion_time, credits, suspended, suspendedowner, flagged, blessed, cleared, added, saved, shared, skipped, celebrated, scan_count, bandwidth_all_incoming, bandwidth_all_outgoing, resourcelimit_email_flag, edition_activated_date, storage_qid, customizationflags]                                                                                |
|                                                  |                                                                                |
+--------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Plan with bug:
+--------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| plan_type                                        | plan                                                                                |
+--------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| initial_logical_plan                             | Projection: service_article.qid, service_article.timestamp, service_article.createdDate, service_article.82ad7656c6b6be56e9abfac772c89b4c, metadata.dataScope, metadata.qid, metadata.timestamp, metadata.createdDate, metadata.776ff32c7d7bfb1c1a49d5c0d94e0db8, bag.owner, bag.status, bag.created_date, bag.edition, bag.subedition, bag.parent, bag.time_limit, bag.file_count, bag.file_count_limit, bag.capacity, bag.capacity_limit, bag.bandwidth, bag.bandwidth_incoming, bag.bandwidth_outgoing, bag.bandwidth_limit, bag.client_ip, bag.deletion_time, bag.credits, bag.suspended, bag.suspendedowner, bag.flagged, bag.blessed, bag.cleared, bag.added, bag.saved, bag.shared, bag.skipped, bag.celebrated, bag.scan_count, bag.bandwidth_all_incoming, bag.bandwidth_all_outgoing, bag.resourcelimit_email_flag, bag.edition_activated_date, bag.storage_qid, bag.customizationflags                                                                                |
|                                                  |   Filter: bag.storage_qid = Utf8("b936b63f271c21b4a00957b325cb9a22")                                                                                |
|                                                  |     Inner Join:  Filter: bag.storage_qid = metadata.dataScope                                                                                |
|                                                  |       Inner Join:  Filter: metadata.776ff32c7d7bfb1c1a49d5c0d94e0db8 = service_article.82ad7656c6b6be56e9abfac772c89b4c                                                                                |
|                                                  |         TableScan: service_article                                                                                |
|                                                  |         TableScan: metadata                                                                                |
|                                                  |       TableScan: bag                                                                                |
| logical_plan after inline_table_scan             | SAME TEXT AS ABOVE                                                                                |
| logical_plan after type_coercion                 | SAME TEXT AS ABOVE                                                                                |


Fix compile errors on C++20

I had to make these changes for C++20 support as well. Is this project still being maintained?


Fix UnimplementedError() by using double instead of int as fallback

This PR makes translate use double instead of int as fallback values. The reason being that when the fallback is used, the underlying function will throw an UnimplementedError(). This can happen when executing WidgetTests.

  void translate(dynamic x, [double y = 0.0, double z = 0.0]) {
    double tx;
    double ty;
    double tz;
    final tw = x is Vector4 ? x.w : 1.0;
    if (x is Vector3) {
      tx = x.x;
      ty = x.y;
      tz = x.z;
    } else if (x is Vector4) {
      tx = x.x;
      ty = x.y;
      tz = x.z;
    } else if (x is double) {
      tx = x;
      ty = y;
      tz = z;
    } else {
      throw UnimplementedError();
    }

@sameersingh2704 any chance we can get this merged and published on pub.dev?


Translation README.md into Korean

Hello,
After I saw the translation of README documents to Chinese, I thought it would be interesting to translate README to Korean for Korean user.
Currently, I have a team of three people who are also pleased to cooperate.
I am looking forward to your favorable reply.
All the best,
nuxlear

@nuxlear That would be great! Would love to see this, perhaps with #812 :smile:

@ryanoasis
Thank you for reply!
I will send a pull request with translated README file soon 😄

@ryanoasis
While translating the README file, we found that the hyperlinks stated are connected to vundle.txt, which is described in English.
Is it fine to translate the vim manual doc/vundle.txt into Korean and make a new file of doc/vundle_kr.txt?

@nuxlear I was trying to see if I could find any recommendations for handling something like what you requested but wasn't able to.
This seems reasonable to me. Sure for now at least feel free to add a Korean version of the vim doc as well :smile:

I know a long time has passed but I'd still be open to getting a Korean translation in :smiley:

@ryanoasis
Sorry for my late reply..
Indeed, it was the project of open source class in my university.
Before we translate doc/vundle.txt the class was over, so there was no contributions more.
So, if the translation is restarted, it may be the project on my own,
and because of my schedule the speed of contribution will quite slow...
If you don't mind about them, I will try translate doc/vundle.txt in Korean :)
P.S. Are there other documents needed to be translated except for doc/vundle.txt?


Separate tabs for books on global search results

Describe the feature you'd like
Would love to see separate tabs for search results in books for the global search. A single tab will show all search results while users can go to other tabs to look for results in each book or shelf. If displaying books in a tab could result in the tabs being too many, admins may be given an option to display specific number of relevant tabs or set the tabs to display shelves.
Describe the benefits this would bring to existing BookStack users
This will streamline global search for the app. Users will be able to search in specific books or shelves without browsing to the location. I believe content discovery is key for the platform and this would be a valuable addition. I would add a 'please' for this feature, hope it would be in the interests of the core user base and your general direction for the platform.
Can the goal of this request already be achieved via other means?
Users can browse to specific books or shelves and type search items, though not as advanced as the global search page.
Have you searched for an existing open/closed issue?

[X] I have searched for existing issues and none cover my fundemental request

How long have you been using BookStack?
1 to 5 years
Additional context
No response

Thanks for your reply @ssddanbrown . I felt that I didn't communicate my intentions well, so I attached the concept here. The scenario would be users typing a search term and the global search page would spun up results from all shelves and categorize them in tabs. Similar to a Google search, where it has tabs for images, videos and so on. This way, there will be less friction to look for results in a specific shelf.

Thanks for the further detail.
I'm not sure I'd ever look to make search so shelf-focused like that, since shelve are not required nor do they define boundaries between content, but I can see value in scoping search to a shelf.
We already have  #3546 open, which would achieve some of what's desired in this request, while it would otherwise be a dependency to something like this (Since we don't currently have scope-level search) so I'm going to close this off in the interest of de-duplicating issues.


Could not run Generamba on macOS High Sierra 10.13

Hi;
While I was trying to install Generamba on macOS 10.13  I could not run any related command, where I always receive the following message:
-bash: generamba: command not found
Here's my ruby version:
ruby 2.3.3p222 (2016-11-21 revision 56859) [universal.x86_64-darwin17]
I also noticed the following warning message:
WARNING:  You don't have /Users/Basil_A/.gem/ruby/2.3.0/bin in your PATH,
gem executables will not run.

Try install via gem.


Apply to be a testnet validator for the next round

Apply to be a testnet validator for the next round

merged manually into public-testnet-3


Support right to left messages

Hello.
A good approach to implementing it (that is used in many chat applications) would be to check the first character of every line to see whether it belongs to a right-to-left language and switch the direction of that line if it does.
For simplicity, the check can also be made on the first character of every message so to switch the direction of the whole message. But this will cause some problems to the users as well.

The CSS for this is probably a fairly large project.  #267 and #731 are related.

Yeah, that makes sense; we could without much technical difficulty add a right-to-left CSS class to messages that have this property; which means the real challenge is doing the CSS to support this nicely without a ton of duplicated work.  Might not be too hard to get something basic working.

I can help doing something if you point me in the right direction. I have some experience doing such things.

And I think that the input text area should be acting the same way, switching directions when the first character on it is an RTL one.

I'm pitching in here, hoping it's not too much wall-of-text.
Supporting RTL can be a complicated endeavor, and it usually involves more than just the textbox itself; I would split this issue to several aspects if you really want to support RTL --

The interface is one aspect -- how to handle usernames in RTL, topics in RTL, etc. Do you want to allow for translation to the interface itself like the menu buttons, etc?)
The typing is another aspect -- do you use an autodetection for directionality (see below for concerns on that) or include a "flip directionality" button (like in word processors) and do you allow for paragraph-wide or inner directionality switch (for example, what happens when someone types a sentence in English with a name in Arabic followed by a number... try it, it's fun ;)

As for the auto-detection, I'd be careful about that, as it's not all that simple. Several other products online try to do that, some more successfully than others, but they all run into problems in some way or another.

Google Hangouts, for example, changes the directionality of a paragraph you type based on how many characters in RTL there are. That means that if you start writing in English, the direction is LTR, then switched to Farsi, it continues to be LTR until the number of characters surpasses the English ones, at which point it switches to RTL for the entire paragraph. If you then switch back to English and continue typing, it may actually flip back.
Facebook seems to normally go by the first strong character inserted ('strong' as in BiDi Algorithm definition) which can create a lot of frustration for those of us who type in English but have friends names in RTL language like Hebrew. If you type "@somethingInHebrew my address is 123 nowhere drive, apt 112, SF, CA" you'll get the entire sentence RTL'ed. Same goes for the other way around, mentioning a name in English but typing in Hebrew or Farsi or Arabic, etc.
Word processors usually avoid automatically recognizing your typing, and opt for letting you literally choose the directionality. This is also what we do in the Wikimedia Foundation with VisualEditor; you can type what you want, and then mark the section that is RTL and specifically isolate it. This prevents annoying issues like things that end with parentheses and brackets and numbers from getting mangled. But it is probably meant more for an article-writing process, and not very useful for a "chat-like" interface.

So my recommendation would be --

If we use auto detection, be aware that nothing is perfect; find a strategy (going by the first strong character is probably fine) and stick to it throughout the system - both in typing and in viewing.
Make sure that the input's direction (if it flips to RTL or stays LTR) is then reflected, consistently, in the way the message is viewed. (This isn't the case in Facebook, for example - sometimes the input would flip you around but then the resulting status shows inconsistent - which is the most frustrating action ever as you can't even try to correct or predict issues as you type)
Consider allowing a button to wrap something in bidi-isolation
Live with the fact that RTL users expect everything to be inconsolably broken, and that the mere fact we're trying is a huge deal ;)

We use a method to discover the directionality from content in MediaWiki, see reference to the code here: https://github.com/wikimedia/mediawiki/blob/master/languages/Language.php#L1958
With the (rather insane) regexp here: https://github.com/wikimedia/mediawiki/blob/master/languages/Language.php#L174

@mooeypoo awesome, thanks for the thoughts!

Attaching a hacky implementation that @Shayan-To has been using that may be a useful resource:
rtl.zip
This project still needs a volunteer to get it working in a mergable form.

Anyone interested in using my hacky implementation (that Tim attached above ^^^), here's the instructions (link to the conversation):

Extract it to /home/zulip/prod-static.
Run add_to_app.sh script (using bash).
After each deploy (server upgrade), run add_to_app.sh script again.

hi , i run this scripts , not happend

@McpCyber a built-in feature was merged into Zulip long after this thread; you should be able to just use RTL messages in Zulip directly.

@timabbott Thanks , in the web version that's fine . but in Mobile app ohhh No


sqlx mig add -r and sqlx mig revert stopped working

sqlx-cli=0.2.0
sqlx = 0.3 and 4.2
I cant explain what happened I used it the whole time and then I switched to linux and tried there it just stopped. Then tried it on again on my mac it stopped
rebased on a older commit again not working
steps to reproduce
cargo install --version=0.2.0 sqlx-cli --no-default-features --features postgres
sqlx database create
sqlx mig add -r test

@KulSthl what error do you get when trying to run it?

@KulSthl what error do you get when trying to run it?

Found argument '-r' which wasn't expected, or isn't valid in this context
If you tried to supply -r as a PATTERN use -- -r

Found argument '-r' which wasn't expected, or isn't valid in this context
If you tried to supply -r as a PATTERN use -- -r

@abonander Can close as this is a really old version of the cli.


x/tools/gopls: add ability to set deep completion Budget via LSP Configuration

What version of Go are you using (go version)?

$ go version
go version devel +da4d58587e Sat Dec 7 15:57:30 2019 +0000 linux/amd64
$ go list -m golang.org/x/tools
golang.org/x/tools v0.0.0-20191213221258-04c2e8eff935
$ go list -m golang.org/x/tools/gopls
golang.org/x/tools/gopls v0.1.8-0.20191213221258-04c2e8eff935

Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (go env)?
go env Output
$ go env
GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/myitcv/.cache/go-build"
GOENV="/home/myitcv/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/myitcv/gostuff"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/home/myitcv/gos"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/home/myitcv/gos/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/home/myitcv/gostuff/src/github.com/myitcv/govim/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build191688178=/tmp/go-build -gno-record-gcc-switches"

What did you do?
See below for background. We very quickly established this is related to the deep completion Budget being exceeded. Hence https://github.com/golang/go/issues/36142#issuecomment-565732822 and the updated title.
Background
In govim test complete_deep_fuzzy we verify that deep fuzzy completions work.
The test is as simple as ensuring that the input file:
package main

func main() {
	var a struct {
		b struct {
			crikey int
		}
		d int
	}
	var x int
	x = a.ck
}

when completed after a.ck results in:
package main

func main() {
	var a struct {
		b struct {
			crikey int
		}
		d int
	}
	var x int
	x = a.b.crikey
}

However, over 50% of the time we're seeing this test fail because no completion items are returned.
Here are the gopls logs from a failing and passing run:

fail.log
pass.log

Much like #35638 this is a timing/race related issue and hard to reproduce standalone. Generally I find this fails when my machine is under high stress.
The test can be run on a machine that uses Docker via:
go test -exec="dockexec govim/govim:go1.13.4_vim_v8.1.2253_v1 -t -e VIM_FLAVOR=vim" -count=1 -v -run "TestScripts/scenario_default/complete_deep_fuzzy" ./cmd/govim

(download of Docker image may initially take some time)
What did you expect to see?
A consistently passing test.
What did you see instead?
Intermittent failures.

cc @stamblerre @muirdm

It might be the completion budget. If it runs out of the (default) 100ms budget, it will give up on deep completions. You can try disabling the "Budget" completion option by setting it to 0, but it isn't currently exposed over LSP.

The log files attached to the initial comment were incorrect: now fixed.
Also worth noting is that if the initial go.mod is "tidy" then I've currently been unable to reproduce this.
More explicitly, if the initial go.mod is:
module mod.com

Then the test fails as reported above.
However if it is:
module mod.com

go 1.13

it has not yet failed.

You can try disabling the "Budget" completion option by setting it to 0

Thanks @muirdm - hadn't thought about that. Will try now.

@muirdm - brilliant observation, thank you. Setting the Budget to 0 has indeed "fixed" the test failures. Hence for integration tests we will need the ability to do this.
I'll change the title of this description to instead be a request to expose gopls configuration to set this value.

@myitcv: does the above CL work for you?

Re-opening until https://go-review.googlesource.com/c/tools/+/211759 lands

All fixes for this have now landed.