Correct hash behavior for floating point numbers

Correct hash behavior for floating point numbers
This fixes HashMap where a key or part of a key is a floating point
number. To fix this the following has been done:

HashMap now takes an extra template argument Comparator. This class
gets used to compare keys. The default Comperator now works correctly
for common types and floating point numbets.

Variant implements ::hash_compare() now. This function implements
nan-safe comparison for all types with components that contain floating
point numbers.

Variant now has a VariantComparator which uses Variant::hash_compare()
safely compare floating point components of variant's types.

The hash functions for floating point numbers will now normalize NaN
values so that all floating point numbers that are NaN hash to the same
value.

C++ module writers that want to use HashMap internally in their modules
can now also safeguard against this crash by defining their on
Comperator class that safely compares their types.
GDScript users, or writers of modules that don't use HashMap internally
in their modules don't need to do anything.
This fixes #7354 and fixes #6947.

I'm actually removing all the template magic. It appears to be poorly  in general  and I introduced a GCCism. It builds and runs fine on clang also but perhaps not msvc? Anyway I'm working on a new revision. It will just hardcode the behavior only for Variant.

Because of the template trickery @tagcup's concern about the burden on module writers to implement hash_equals() should also be addressed.

Will this work on types that use floats but don't implement a special comparison function (name doesn't matter, be it operator== or hash_compare) that behaves in the particular way to suit Variant's needs?

Due to the way godot's hash system works it will always crash if you try to place an object in it for which x != x and you then try to retrieve it later.
Custom types written in c++ will have to either implement hash_equals() or make sure their operator==() deals with it if they have this property.

@tagcup You're right, there needs to be a little more done for this to be really OK. We need to know in an unambiguous way whether or not an object is the same. And while we can't do a bit-by-bit comparison for Variant I think we can get away with it for 'normal' C++ objects.
Looks like we're going to end up with a solution that does all of the things

Due to the way godot's hash system works

Then the hashing is wrong. You can't expect to fix Variant's issues by fixing everybody else to "fix" their code and implement this particular hack.
Furthermore, this is pretty much specific to GDScript. You can write games in C++ or any other upcoming languages.

Custom types written in c++ will have to either implement hash_equals() or make sure their operator==() deals with it if they have this property.

Not just custom types. This applies to everything that GDScript has access to, including dozens of other classes that ships with Godot and missing in your PR.
Also, to make this really work just in the core, you need to go through this list:
http://docs.godotengine.org/en/stable/classes/_classes.html
And good luck explaining all Godot users that a special comparison function that behaves in a particular way is required in their class is to work without crashing the editor.

And good luck explaining all Godot users that a special comparison function that implements a non-standard floating point comparison is required in their class to work without crashing the editor.

If we just can continue this interesting discussion without being sarcastic or trying to prove by all means that the other is wrong, that would be nice. We're looking to work together towards a common solution, so let's keep it constructive (so far it's fine, but yesterday it wasn't, so I prefer to drop a small encouragement for going in a positive discussion ground beforehand ;)).

@akien-mga That wasn't meant to be sarcastic actually. I was literally thinking: "let's say this gets merged, how do we explain this to others?"
I understand & totally agree with what you're saying though. Sorry if it sounded harsh.

I understand & totally agree with what you're saying though. Sorry if it sounded harsh.

Yeah it didn't particularly sound harsh, but I know that such discussions can quickly become heated when all participants are passionate about the topic, so I preferred to make sure everybody makes an effort to try to think positively about proposed solutions (while still being able to say what is not a good solution of course). So it wasn't particularly for you, but for all of us (even if I quoted your might-be-interpreted-sarcastically last line hehe).

@tagcup I had another look as I remember from our last discussion being quite sure there was nothing else needed. I looked at my notes again and to be extra sure spend another 15 minutes single-stepping through the relevant codepaths.
Have look look at variant_op.cpp:281
if (p_b.type==OBJECT)
	_RETURN( (p_a._get_obj().obj == p_b._get_obj().obj) );
if (p_b.type==NIL)
	_RETURN( !p_a._get_obj().obj );

This is what happens when OP_EQ is called on a Variant of type object (which the current code continues to do, and is the code used by the hash comparison function also)
At this point p_a._get_obj().obj is of type Object*. GDScript (and hash tables) are only ever able to compare the pointer values of Objects. Different objects in GDscript are always different. An illustration:
func _ready():
    var x = Listener.new()
    var y = Listener.new()
    print (x == y)

will print 'False' to the terminal.
This PR does solve the issue.
I got a little sidetracked by @tagcup's comments on the previous PR as I thought they were worried about users of HashMap in C++. That cannot be helped. If you want to use HashMap from C++ with custom types you will still have to ensure that x ==x. But for GDScript and module writers it does not matter at all.

Sorry, my previous explanation actually left out an important detail. One may reasonably ask 'but TMM, if objects are always unequal why don't THEY crash the engine?'.
The answer to that is that the crash occurs only when an object hashes the same but is still not equal to the object. (object meaning 'a thing in the hashtable') for Variants of type Object this doesn't matter as the hash value is calculated as follows:
case OBJECT: {
	return hash_djb2_one_64(make_uint64_t(_get_obj().obj));
} break;

As in, here also only the pointer value is taken into account.

Ah, OK. Thanks for the explanation.
The issue partially remains, because you it is still possible to introduce new classes to GDScript that are not objects. So then let me confirm this. Is it true that doing this involves adding custom hooks to Variant? Because that's different from writing a module, and you document it as some internal mechanism only required when injecting a new (non-object-based) type to GDScript.

@tagcup this is correct. The only way to add a type to GDScript that would need this special treatment is by adding it as a type to Variant. This cannot be done without actually editing variant.h, variant.cpp, and variant_ops.cpp. I think that if someone does this they will encounter Variant::hash_equals() and try to find out why it's there :)

For the maintainers. @reduz just suggested I add an equality check function as a parameter to the hashmap when instantiating. This makes everything a little cleaner, and alleviates some of the mistakes other C++ module writers may have. I'll implement this in this PR also, please don't merge yet until another comment saying it's ready.
If you prefer I can close this PR and reopen it once this is implement @akien-mga

Again sorry for being illiterate about the internals of GDScript, but I realized I have one more follow-up question along the same lines.
Let's say I make a class in Godot (using the class keyword). Does it actually inherit from Reference or Object?
BTW, it'd be really nice if you can add some comments in the code about this workaround, maybe even link to the relevant github issue, because it's not obvious and can be perplexing (speaking from experience :)).

If you prefer I can close this PR and reopen it once this is implement @akien-mga

It's fine by me if you want to simply rebase this PR :)

Also please don't forget about other basis GDScript-accesible types: Basis, Transform, Transform2D, Plane, etc.

@tagcup I think no additional clarification is needed, to me this code is relatively simple (compare with other parts of the core....)
About the class question, you can use extends just fine there, exactly like in the main body of the script (or even inline, if you want, with class A extends B:)

@bojidar-bg No, I think the workaround regarding IEEE-754 floats needs to be clarified, because 1) this is a very specific kind of hack that is bound to the internal quirks of how dictionary works in GDScript 2) and new types added in the future are expected to implement this hack too.
I mean I'm not talking about a detailed doc, just a a few lines saying that this non-standard floating point comparison is required for types containing floats to make hashing work, and a link to this issue for details for example.

@bojidar-bg
Yes, but what if it doesn't extend anything? Is there a hidden, default base class (maybe Reference)?
What I was essentially trying to ask is this: can we generate a class from GDScript that won't work correctly with the current hashing unless the user also provides a special comparison function.

@tagcup there is no codepath where you can create a class from gdscript where you can cause the interpreter to call operator==() from HashMap's compare function. This fix really is comprehensive for this isue.

@bojidar-bg @akien-mga  I think this is now done. If you're OK with the code in general feel free to merge it.

ok @akien-mga I think I've addressed your concerns now

@bojidar-bg I think I've addressed your suggestions also.

@tagcup I believe my last set of changes address your concerns.

@hpvb Can you please, please, please just write a sentence that conveys actual information about what exactly (nan==nan for floats) is expected from a comparator? You're expecting a particular non-standard behavior, so please document what it is. "Safe" doesn't convey any useful information or help any future contributor in a meaningful way.

If you mention floats and NaN != NaN issue which breaks x == x, future readers will be able to understand what's really going on.

I have added a reminder to a potential user that nan != nan in C++. I hope this addresses your concern.

Thank you. That has nothing to do with C or C++ though, that's just how the hardware works.
Could you please also add Math_NAN in math_defs.h and use that, and not include math.h directly?

I've removed the 'in C' comment. I've added the value from that PR as well. Someone needs to ensure that when #7787 gets merged we don't get two separate definitions.

Thank you! LGTM otherwise.

About #7787, it affects only a single line of the PR, so regardless of the merge order, should be an easy fix.

@tagcup The trick is not easy vs not easy, the question is who :wink:

@bojidar-bg Yes but what I'm trying to say is, since it's going to a trivial fix either way, does it really matter?

We can have specializations for types with floats, its not terrible
On Feb 15, 2017 2:27 PM, "Rémi Verschelde"<EMAIL_ADDRESS>wrote:

And good luck explaining all Godot users that a special comparison
function that implements a non-standard floating point comparison is
required in their class to work without crashing the editor.
If we just can continue this interesting discussion without being
sarcastic or trying to prove by all means that the other is wrong, that
would be nice. We're looking to work together towards a common solution, so
let's keep it constructive (so far it's fine, but yesterday it wasn't, so I
prefer to drop a small encouragement for going in a positive discussion
ground beforehand ;)).
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/godotengine/godot/pull/7815#issuecomment-280078420,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AF-Z275qSdNoIzs_KchR1YSUS7tmayqSks5rczWTgaJpZM4MBvRC
.

We can have specializations for types with floats, its not terrible

Since it turned out that this only impacts data types added directly into GDScript and not stuff derived from Object (including all user modules), yeah, totally.
I mean, to me, it's not ideal to have workaround which needs to be implemented for each GDScript data structure with floats separately over and over again in a particular manner consistently, but luckily, there're only a handful such cases and users aren't expected to that anyway, and nobody came up with a better workaround so far.

@tagcup You keep calling this a workaround. There are only a handful of options:

x[nan] == x[nan] : Implement a nan-safe comparison for Variant, every non-GDScript type that wants to use HashMap has to implement one too.
x[nan] != x[nan]: Implement a nan-safe hasher for Variant, every non-GDScript type that wants to use HashMap has to implement one too.
x[nan] != x[nan]: Hardcode a nan-safe hasher in HashMap. No non-GDScript type can use HashMap <-- This is Go's solution.

Of these different solutions I picked the one with the least surprising results for users of GDScript. A HashMap index is NOT a math operation, a hashmap index is a symbolic reference to another thing, adhering to float semantics for a symbol makes no sense to me.
You will also notice that every implementation requires the same level of knowledge from non-GDScript types.

You keep calling this a workaround.

Because that's what it is.
As I already explained, you are conflating two things. The nature of how NaN keys are handled, and how this is applied to floats.
Go has support for maps at language level. For this reason, they can implement and change this behavior with a single function. It doesn't matter which behavior it is, and frankly I don't care which you chose to implement, it's non-standard either way. If they wanted to hash all NaNs to a single bin, then they can also do that by changing a single function in the runtime, and it will just work without any active efforts: it won't require users to implement special functions with special behaviors (I'm referring to Comparator).
C++ doesn't readily give you a way to define one function which will be applied to all floats in all incoming data structures. Workaround, ugly-standard-breaking-floating-point-hack or whatever you wanna call it, regardless of the way you chose to break IEEE-754 for your hash function, my problem is this:
You're not just implementing a single non-standard function (which I think is fine, everybody else is also doing that), you're asking that everyone has to reimplement that non-standard thing exactly over and over again whenever they add a new class to GDScript.
I don't how how I can make this more clear.

Go doesn't support nested data structures as hash keys, it has no way to override the equals operator. If they did they'd have to pick either the first or second option. There is no alternative. I don't understand why you have any objection at all to something that simply is unavoidable.

Go doesn't support nested data structures as hash keys, it has no way to override the equals operator. If they did they'd have to pick either the first or second option. There is no alternative. I don't understand why you have any objection at all to something that simply is unavoidable.

Despite the fact that this is tangent to the point I just made, I'll bite.

Go doesn't support nested data structures as hash keys, it has no way to override the equals operator.

It does support nested data structures as hash keys.
And yes, there is not operator overlading, and yes, and users can't change the runtime's hashing behavior. And they don't want to allow that either. I'm sure they don't want to end up with awkward things like Comparator either.

There is no alternative. I don't understand why you have any objection at all to something that simply is unavoidable.

So you're actually saying you have considered all the possible scenarios men and gods can conceive, and you're absolutely sure that it's impossible to come up with a hash map implementation for GDScript that doesn't require everyone, past and future, to implement your particular hack over and over again consistently. Even though no prominent language sorts to this kind repetitive workarounds. Wow. OK. So be it.
You know, this isn't productive. Let's stop this. @reduz is fine with your workaround or whatever keyword you wanna use to pitch it. I already said LGTM.

You guys seem to get along great, did't expect such a strong friendship
would develop :P
I am honestly not someone so knowledgeable on theoretical backgrounds, so
for the most part i'm mostly inclined towards solutions that just work.
It seems to happen that sometimes I go against preconceptions or standards
without realizing it, so It's vital that you guys can make a point for when
we are crossing the line in this regard. Yet, I will insist that usability
always takes the priority.
I think the hash map solution, adding a comparison operator works well
enough. C++ provides automatic template specialization in case one wants to
use it from C++ for types such as Vector2, Vector3, etc. For GDScript this
is a special case, as hashing and comparing happens in Variant.  The
proposed solution is good enough for me, and definitely better than what
was done before, can't really think of a better one.
On Thu, Feb 16, 2017 at 5:44 PM, Ferenc Arn<EMAIL_ADDRESS>wrote:

Go doesn't support nested data structures as hash keys, it has no way to
override the equals operator. If they did they'd have to pick either the
first or second option. There is no alternative. I don't understand why you
have any objection at all to something that simply is unavoidable.
Despite the fact that this is tangent to the point I just made, I'll bite.
Go doesn't support nested data structures as hash keys, it has no way to
override the equals operator.
It does support nested data structures as hash keys
https://play.golang.org/p/nOHVhyBET2.
And yes, there is not operator overlading, and yes, and users can't change
the runtime's hashing behavior. And they don't want to allow that either.
I'm sure they don't want to end up with awkward things like Comparator
either.
There is no alternative. I don't understand why you have any objection at
all to something that simply is unavoidable.
So you're actually saying you have considered all the possible scenarios
men and gods can conceive, and you're absolutely sure that it's impossible
to come up with a hash map implementation for GDScript that doesn't require
everyone, past and future, to implement your particular hack over and over
again consistently. Even though no prominent language sorts to this kind
repetitive workarounds. Wow. OK. So be it.
You know, this isn't productive. Let's stop this. @reduz
https://github.com/reduz is fine with your workaround or whatever
keyword you wanna use to pitch it. I already said LGTM.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/godotengine/godot/pull/7815#issuecomment-280454129,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AF-Z29jkJyPcP87bhxflj5NJpxSqpGmYks5rdLUfgaJpZM4MBvRC
.

It does support nested data structures as hash keys.

Sorry, I was imprecise. This only works as long as all types have a strong equality guarantee. What I meant by 'nested' (which was the wrong term to use). You can't have a type with say, a pointer in it to another type as a hash key.
When you do that it is no longer possible reconstruct the key value. So you can be in a situation where:
n1.a. = 1
n1.b.b = 2
n2.a = 1
n2.b.b = 2
map[n1] != man[n2]

if any of the fields are pointers, or if any field is a map itself as maps are not comparable. The only way to compare those is using reflect.DeepEqual(), but there is no way to tell a Map to do this. So the issue is sidestepped by simple not supporting these types as hashkeys.

Hashing works fine with everything in Go. If you have a reference (pointer, slice, map), it will just compare the pointers, which is the expected behavior per language standard from day 1. It may not work the way you expect, and yes, it is confusing for some people at first, but that's something else.
By this standards, you can as well say "hashing doesn't work with floats in Go because I expect them to has all NaNs into same bin, and it behaves differently".
It's just a design decision to avoid runtime burden.

Alright, we're running in circles here.
@tagcup If you can make a Godot module that exposes your concerns about this PR (i.e. implement a new type that should use the same kind of hashing and show that all hell breaks loose) that would be very helpful so that we can bring the technical discussion further. But now just discussion whether this solution here is better or worse than Go's, it's bringing us nowhere. @hpvb has tried several times to explain why Variant hashing is different from Go's, but if that's not enough, I think we really need a PoC that showcases what is the real issue that you are concerned with. Otherwise it's starting to sound like bikeshedding.

@akien-mga If you missed it, I've already said that LGTM and

there're only a handful such cases and users aren't expected to that anyway, and nobody came up with a better workaround so far.

Beyond that, I'm just replying to his nitpicking about whether his PR is a monument of perfection or a just a workaround with certain burdens to other people and off-topic (and wrong) comments about how maps work in Go, so it sounds it's unfair you're telling me this.

Well I feel there's nitpicking on both sides about a topic which might not really be worth so much discussion, i.e. "is it a workaround or not?". It's code that works, it doesn't implement a standard but the consensus we agreed upon, so I guess it can be seen as both a workaround and the right solution for Godot.
That said, I'm thankful for both you and @hpvb spending so much time to try to get to the bottom of this and ensure we have the best (as in "best fitting to our needs", not the best technical solution to this generic issue ;)) solution implemented in Godot :)

Thanks @akien-mga and thanks for the review and discussion @tagcup. On to the next bug! :)

At the end of the day, I'm also thankful to @akien-mga, @reduz and @bojidar-bg for keeping the discussion sane @hpvb for fixing 2 serious issues. And I do apologize for all the noise.

On to the next bug! :)

For some reason, I'm feeling scared :P


No output when using --plugins Replayer

Hello,
Trying to determine if the Replayer plugin is still supported. I see it in the repository, and LogShark does not fail when using that parameter but no output is generated.
In the logs I can see
info: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Writing to Json file ReplayerOutput\Playback_16_06_-19-33-23.json
Additional logs
-----Summary-----
Run ID<PHONE_NUMBER>2340-ec2amaz-lidka50-prod_logs_20200527 failed after running for 00:01:23.6195788. Reported problem: No workboo
ks were generated successfully.
This problem is unexpected and it is not known whether or not it will go away if LogShark is run again.
Information below might contain more details on what exactly failed
  -----Processing errors-----
  No errors occurred while processing log set

  -----Generated workbooks-----
  Workbook templates available: Apache; Art; Backgrounder; ClusterController; Config; Filestore; Hyper; Netstat; Postgres; Resourc

eManager; SearchServer; ServerTelemetry; Tabadmin; Vizportal; VizqlDesktop
  -----Log Reading Statistics-----
  Processed zip file compressed size: 453 MB
  Plugins that received any data: Replayer

  Apache                                            : Processed 3 files in 00:00:04.1416243. Elapsed: 00:00:04.1416243. Total size

: 38 MB. Processing at 9.18 MB/sec
VizqlserverCpp                                    : Processed 16 files in 00:01:18.3930365. Elapsed: 00:01:18.3930365. Total siz
e: 1548 MB. Processing at 19.75 MB/sec
  -----Data Writers Statistics-----

But nothing in ..\output\

Hi Jonathan,
Replayer plugin outputs into ReplayerOutput dir instead of Output. Each run generates a single json file that is used by the Replayer tool. See Replayer docs for more info.

Hi,
Simply a typo in my original post, no file is generated as stated in the logs.
This file
info: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Writing to Json file ReplayerOutput\Playback_16_06_-19-33-23.json
Does not get generated.

Plz try to run Replayer plugin on this attached log set. Do you get json from it?
logs_clean_tsm.zip

This seems to have worked. Any way to determine what might be bad in our
logs?
On Wed, Jun 17, 2020, 12:26 PM Evgenii Orlianskii<EMAIL_ADDRESS>wrote:

Plz try to run Replayer plugin on this attached log set. Do you get json
from it?
logs_clean_tsm.zip
https://github.com/tableau/Logshark/files/4793759/logs_clean_tsm.zip
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/tableau/Logshark/issues/122#issuecomment-645462539,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABOSVQLMK5D6YR6UK4IF5HTRXDVCDANCNFSM4N75RKNA
.

Confirmed our logs still aren't able to produce any output. Are there any specific parameters I need to use for tsm maintenance to generate the logs in a format replayer expects? I seem to be coming up short finding repayer documentation (https://community.tableau.com/docs/DOC-11065)

Hi Jonathan,
I am one of the engineers who worked on the Replayer plugin's implementation.
I need some more details from your logs that don't produce the json output. Do you see some exceptions in that log, e.g. NullReferenceException or ArgumentNullException? If you do, please share the lines around them to better give me an idea about what could be going bad.
Thank you,
Stoyko

Other things that could be useful in my investigation - the output log may have lines like this:
Processing file node1/gateway_0.20192.19.0718.15431126834964030102991/logs/access.2019_08_09_00_00_00.log
Processing file node1/vizqlserver_0.20192.19.0718.15438685063481366773782/logs/nativeapi_vizqlserver_1-1_2019_08_09_00_00_00.txt
These are the 2 types of files that the Replayer needs: access and nativeapi_vizqlserver.
If you could provide some excerpts from one of each kind of files, it may help me see where the parsing is choking.
Feel free to mask sensitive info (PII), e.g. user name, machine name, etc.
Thanks!

Hi @skostov-tableau
I do not see any exceptions. I do see "Processing file node1/vizqlserver"
o: LogShark.LogParser.TableauLogsReader[0]       Processing file node1/vizqlserver_0.20192.19.0518.06392751812560705202560/logs/nativeapi_vizqlserver_1-0_2020_05_24_00_00_00.txt
Full log
PS C:\Users\Administrator> C:\deploy\LogShark\LogShark.exe C:\deploy\prod_logs_20200527.zip --plugins Replayer info: LogShark.LogSharkRunner[0]       Starting to process Log set C:\deploy\prod_logs_20200527.zip info: LogShark.LogSharkRunner[0]       Generated Run ID:<PHONE_NUMBER>3336-ec2amaz-foo-prod_logs_20200527 info: LogShark.LogSharkRunner[0]       Hyper Writer requested. Initializing writer factory... info: LogShark.LogSharkRunner[0]       Using temp folderC:\Users\Administrator\AppData\Local\Temp\2\LogSharkinfo: LogShark.LogParser.TableauLogsExtractor[0]       Starting TableauLogsExtractor for log setC:\deploy\prod_logs_20200527.zipinfo: LogShark.LogParser.TableauLogsExtractor[0]       Provided log set appears to be zip file info: LogShark.LogParser.TableauLogsExtractor[0]       Looking for known nested zip files inside zip file 'C:\deploy\prod_logs_20200527.zip' info: LogShark.LogParser.TableauLogsExtractor[0]       No known nested zip files found in 'C:\deploy\prod_logs_20200527.zip info: LogShark.LogParser.TableauLogsExtractor[0]       Completed TableauLogsExtractor for log setC:\deploy\prod_logs_20200527.zipinfo: LogShark.Plugins.PluginInitializer[0]       Starting to load plugins for string: Replayer info: LogShark.Plugins.PluginInitializer[0]       1 plugins loaded: Replayer info: LogShark.LogSharkRunner[0]       Based on requested plugins, the following log types will be processed: Apache, VizqlserverCpp info: LogShark.LogSharkRunner[0]       Starting to process Apache logs info: LogShark.LogParser.TableauLogsReader[0]       Starting to process log set partC:\deploy\prod_logs_20200527.zipfor Apache logs info: LogShark.LogParser.TableauLogsReader[0]       Processing file node1/gateway_0.20192.19.0518.06392913226452077960687/logs/access.2020_05_25_00_00_00.log info: LogShark.LogParser.TableauLogsReader[0]       Completed processing file node1/gateway_0.20192.19.0518.06392913226452077960687/logs/access.2020_05_25_00_00_00.log in 00:00:01.6268909 (17 MB, 80123 lines, 10.45 MB/s) info: LogShark.LogParser.TableauLogsReader[0]       Processing file node1/gateway_0.20192.19.0518.06392913226452077960687/logs/access.2020_05_26_00_00_00.log info: LogShark.LogParser.TableauLogsReader[0]       Completed processing file node1/gateway_0.20192.19.0518.06392913226452077960687/logs/access.2020_05_26_00_00_00.log in 00:00:01.7698777 (20 MB, 92369 lines, 11.30 MB/s) info: LogShark.LogParser.TableauLogsReader[0]       Processing file node1/gateway_0.20192.19.0518.06392913226452077960687/logs/access.2020_05_27_00_00_00.log info: LogShark.LogParser.TableauLogsReader[0]       Completed processing file node1/gateway_0.20192.19.0518.06392913226452077960687/logs/access.2020_05_27_00_00_00.log in 00:00:00.0247930 (0 MB, 1366 lines, 0.00 MB/s) info: LogShark.LogParser.TableauLogsReader[0]       Completed processingC:\deploy\prod_logs_20200527.zipfor Apache logs. Processed 3 files in 00:00:03.4212065. Elapsed: 00:00:03.4212065. Total size: 38 MB. Processing at 11.11 MB/sec info: LogShark.LogSharkRunner[0]       Done processing Apache logs. Processed 3 files in 00:00:03.4212065. Elapsed: 00:00:03.4212065. Total size: 38 MB.  Processed 16 files in 00:01:07.0621731. Elapsed: 00:01:07.0621731. Total size: 1548 MB. Processing at 23.08 MB/sec
info: LogShark.LogSharkRunner[0]
Done processing VizqlserverCpp logs. Processed 16 files in 00:01:07.0621731. Elapsed: 00:01:07.0621731. Total size: 1548 MB. Processing at 23.08 MB/sec
info: LogShark.LogSharkRunner[0]
Telling all plugins to complete processing of any cached data
info: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Processing 136 apache source lines and 110 begin command controller, 137 server telemetry, 5406 lock session, 0 end bootstrap vizqlserver events
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:1
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:0
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:2
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:3
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID1:2
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:0
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:1
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID1:0
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:2
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:3
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID1:2
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:0
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:3
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID1:1
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:3
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:0
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID1:0
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:3
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID1:3
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID1:3
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:0
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:3
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:1
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:0
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID1:1
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:3
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:3
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID1:1
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID1:3
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:1
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:1
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID1:0
dbug: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Getting commands for vizqlserver session NotRealSessionID-1:1
----removed several lines all the same as above for readability jf ----
info: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Serializing Json replay sessions
info: LogShark.Plugins.Replayer.ReplayerPlugin[0]
Writing to Json file ReplayerOutput\Playback_30_06_-13-01-34.json
info: LogShark.LogSharkRunner[0]
Completed reading log set and generating data
info: LogShark.LogParser.TableauLogsExtractor[0]
Disposing log extractor temporary files...
info: LogShark.LogParser.TableauLogsExtractor[0]
Log extractor temporary files disposed
info: LogShark.LogSharkRunner[0]
Plugins that had any data sent to them: Replayer
info: LogShark.Writers.Hyper.HyperWorkbookGenerator[0]
Starting to generate workbooks with results...
fail: LogShark.LogSharkRunner[0]
No workbooks were generated successfully.
info: LogShark.Program[0]
  -----Summary-----
  Run ID<PHONE_NUMBER>3336-ec2amaz-foo-prod_logs_20200527 failed after running for 00:01:12.8016924. Reported problem: No workbooks were generated successfully.
  This problem is unexpected and it is not known whether or not it will go away if LogShark is run again.
  Information below might contain more details on what exactly failed

  -----Processing errors-----
  No errors occurred while processing log set

  -----Generated workbooks-----
  Workbook templates available: Apache; Art; Backgrounder; ClusterController; Config; Filestore; Hyper; Netstat; Postgres; ResourceManager; SearchServer; ServerTelemetry; Tabadmin; Vizportal; VizqlDesktop

  -----Log Reading Statistics-----
  Processed zip file compressed size: 453 MB
  Plugins that received any data: Replayer

  Apache                                            : Processed 3 files in 00:00:03.4212065. Elapsed: 00:00:03.4212065. Total size: 38 MB. Processing at 11.11 MB/sec
  VizqlserverCpp                                    : Processed 16 files in 00:01:07.0621731. Elapsed: 00:01:07.0621731. Total size: 1548 MB. Processing at 23.08 MB/sec

  -----Data Writers Statistics-----

`

Thanks Jonathan. The lack of exceptions makes it hard to troubleshoot.
I'd like to ask you to try 2 more things:

Can you search the entire folder under Replayer for file Playback_30_06_-13-01-34.json? (this is the one the tool reported to be writing to).
If not found, it's possible (though remotely) that the sessions in access and vizqlserver logs don't intersect. Choose one session ID reported by the tool (e.g. NotRealSessionID-1:1, but with the real ID) and search the gateway_* files and the vizqlserver_* files for that session ID. Make sure it is found in both.

If it is found in both, can you please provide examples of each line? E.g. on the example I ran, I use session ID  84673FA7D7284E03B5C77EF472317037-1:1, and 2 example lines are:
logs\vizqlserver_node1-1.log:2019-08-09 21:29:02.411 +0000 (Default,---redacted---,84673FA7D7284E03B5C77EF472317037-1:1,XU3eaafymHlRj@z8RHr-4wAAAe4) pool-15-thread-2 : INFO  wgsessionId=R963KTxFQ3WXkDj24_5z_w com.tableausoftware.model.vizql.session.IVizqlSessionManager - activity=session-destroyed sess=84673FA7D7284E03B5C77EF472317037-1:1 user=---redacted--- site=Default site_id=1 guest=0 wg_session_id=R963KTxFQ3WXkDj24_5z_w session_type=WORKBOOK_VIEW workbook_name=Regional workbook_id=1 status=1
logs\access.2019_08_09_00_00_00.log:ec2amaz-t1i4g5m fe80::a481:6c14:1c46:746 - 2019-08-09T20:58:17.638 "Coordinated Universal Time" 80 "POST /vizql/w/Regional/v/Obesity/bootstrapSession/sessions/84673FA7D7284E03B5C77EF472317037-1:1 HTTP/1.1" "-" 200 7822 "812" 4775397 XU3eaafymHlRj@z8RHr-4wAAAe4
(again, please redact any sensitive/PII data).
Thanks
Stoyko

Hi Stoyko,
3rd time is a charm it seems, it generated this time when we re-ran it to generate some logs. Thanks for your help and direction.


Initiator flag

Describe the bug
The initiator flag is not properly used in this linear network so that connection setup request is not emitted.

This should be configured in ini file. Let me close for now.


[Question]: Retriever documents, embeddings = None

Question Validation

[X] I have searched both the documentation and discord for an answer.

Question
Hello,
I have a question regarding the embeddings, when using .retrieve, I got a list of NodeWithScore, however the embedding is always set to None. I am wondering why?
Here my code to create the retriever:
index = VectorStoreIndex.from_documents([doc], embed_model=embedding_model, transformations=[TokenTextSplitter(
    chunk_size=128, chunk_overlap=50, id_func=my_id_func
)]  )

base_retriever = VectorIndexRetriever(
    index=index,
    similarity_top_k=15,
)

r = base_retriever.retrieve(query)

Most vector stores will have it set to none to save memory and processing from passing around large vectors.
Tbh, some vector stores will return It, some won't, this should probably be more consistent and configurable

With the default vector store, you can use index.vector_store.get(node.node_id) to get the associated embedding


Backend/simple matching

First commit

@JaneBellaiche can you link the PR to the corresponding clubhouse story? Thanks!

[ch61527]

[ch-61527]

Unit tests are failing 👿

Oupsidoups ! That's because I've modified Tagger arguments after committing the test file
But now it's all good !

Top! Merge & ca part en WE!


Capability to filter also by place name

Add capability to filter by place name and/or by place type;
this allows for a "Store Finder".

Thanks a lot.


Speaker confidence missing from PrerecordedResponse, and utterance confidence not set

What is the current behavior?

Speaker confidence is not defined in the PrerecordedResponse model
When dumping to JSON, confidence field for utterance is not present

Steps to reproduce

Call with diarization:

        options = PrerecordedOptions(
            model=MODEL,
            language="en",
            smart_format=True,
            punctuate=True,
            paragraphs=True,
            diarize=True,
            keywords=keywords,
        )

        source: UrlSource = UrlSource(url=audio_url)

        response await self._deepgram.listen.asyncprerecorded.v("1").transcribe_url(
            source,
            options,
        )

Dump the response

logger.info(response.to_json())

Expected behavior
Both confidence and speaker_confidence to be present in the dumped json, as indicated in the docs
Please tell us about your environment
Python 3.12.1

Sorry, was looking at the wrong field. Closing as this was raised in error.


The implement of APFL is quite different from the paper and the source code provided by the author.

Hello, I find that the implement of APFL in your platform is quite different from the paper and the source code provided by the author.
For example, there exists some extra code that APFL doesn't have, and it seems that you miss the code of updating alpha.
Can you check it?
Thank you.

Hi, @sc1101
I implemented APFL following FedRep's official code :-)

I have updated the code for APFL, please check it.

I have updated the code for APFL, please check it.

Hi, I think it's perfect now, thank you.


TypeError: Object.values is not a function during Exporting Routes on build

I'm building from the sass template with my config file:
import ExtractTextPlugin from 'extract-text-webpack-plugin'

export default {
  getRoutes: async () => {
    return [
      {
        path: '/',
        component: 'src/containers/Home',
      },
//+ other routes

and App,js has the basic example for routing:
import React from 'react'
import { Router } from 'react-static'
import Routes from 'react-static-routes'

import './app.scss'

export default () => (
  <Router>
    <Routes />
  </Router>
);

dev server from localhost works well but this error shows up on build:
=> [✓] App Bundled: 31475.245ms
=> Exporting Routes...
TypeError: Object.values is not a function
    at _callee$ (C:\Users\John\Documents\Projects\test-site\node_modules\react-static\lib\static.js:177:32)
    at tryCatch (C:\Users\John\Documents\Projects\test-site\node_modules\regenerator-runtime\runtime.js:62:40)
    at GeneratorFunctionPrototype.invoke [as _invoke] (C:\Users\John\Documents\Projects\test-site\node_modules\regenerator-runtime
\runtime.js:296:22)
    at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (C:\Users\John\Documents\Projects\test-site\node_module
s\regenerator-runtime\runtime.js:114:21)
    at step (C:\Users\John\Documents\Projects\test-site\node_modules\react-static\lib\static.js:120:191)
    at C:\Users\John\Documents\Projects\test-site\node_modules\react-static\lib\static.js:120:437
    at C:\Users\John\Documents\Projects\test-site\node_modules\react-static\lib\static.js:120:99
    at C:\Users\John\Documents\Projects\test-site\node_modules\react-static\lib\static.js:205:30
    at Array.map (native)
    at _callee4$ (C:\Users\John\Documents\Projects\test-site\node_modules\react-static\lib\static.js:149:46)
    at tryCatch (C:\Users\John\Documents\Projects\test-site\node_modules\regenerator-runtime\runtime.js:62:40)
    at GeneratorFunctionPrototype.invoke [as _invoke] (C:\Users\John\Documents\Projects\test-site\node_modules\regenerator-runtime
\runtime.js:296:22)
    at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (C:\Users\John\Documents\Projects\test-site\node_module
s\regenerator-runtime\runtime.js:114:21)
    at step (C:\Users\John\Documents\Projects\test-site\node_modules\react-static\lib\static.js:120:191)
    at C:\Users\John\Documents\Projects\test-site\node_modules\react-static\lib\static.js:120:361

First, check that you are ok the latest version. Next, please post a link
to your repo or at least paste your config and any other relevant files.
Then we can help you debug the problem 👍
On Wed, Dec 20, 2017 at 10:09 AM cliffasaurus<EMAIL_ADDRESS>wrote:

I'm building from the sass template with my config file:
import ExtractTextPlugin from 'extract-text-webpack-plugin'
export default {
getRoutes: async () => {
return [
{
path: '/',
component: 'src/containers/Home',
},
//+ other routes
and App,js has the basic example for routing:
import React from 'react'
import { Router } from 'react-static'
import Routes from 'react-static-routes'
import './app.scss'
export default () => (

);
dev server from localhost works well but this error shows up on build:
=> [✓] App Bundled: 31475.245ms
=> Exporting Routes...
TypeError: Object.values is not a function
at _callee$ (C:\Users\John\Documents\Projects\test-site\node_modules\react-static\lib\static.js:177:32)
at tryCatch (C:\Users\John\Documents\Projects\test-site\node_modules\regenerator-runtime\runtime.js:62:40)
at GeneratorFunctionPrototype.invoke [as _invoke] (C:\Users\John\Documents\Projects\test-site\node_modules\regenerator-runtime
\runtime.js:296:22)
at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (C:\Users\John\Documents\Projects\test-site\node_module
s\regenerator-runtime\runtime.js:114:21)
at step (C:\Users\John\Documents\Projects\test-site\node_modules\react-static\lib\static.js:120:191)
at C:\Users\John\Documents\Projects\test-site\node_modules\react-static\lib\static.js:120:437
at C:\Users\John\Documents\Projects\test-site\node_modules\react-static\lib\static.js:120:99
at C:\Users\John\Documents\Projects\test-site\node_modules\react-static\lib\static.js:205:30
at Array.map (native)
at _callee4$ (C:\Users\John\Documents\Projects\test-site\node_modules\react-static\lib\static.js:149:46)
at tryCatch (C:\Users\John\Documents\Projects\test-site\node_modules\regenerator-runtime\runtime.js:62:40)
at GeneratorFunctionPrototype.invoke [as _invoke] (C:\Users\John\Documents\Projects\test-site\node_modules\regenerator-runtime
\runtime.js:296:22)
at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (C:\Users\John\Documents\Projects\test-site\node_module
s\regenerator-runtime\runtime.js:114:21)
at step (C:\Users\John\Documents\Projects\test-site\node_modules\react-static\lib\static.js:120:191)
at C:\Users\John\Documents\Projects\test-site\node_modules\react-static\lib\static.js:120:361
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/nozzle/react-static/issues/251, or mute the thread
https://github.com/notifications/unsubscribe-auth/AFUmCRXCzXDFp7RCTq9dgt4dt7X1yylPks5tCT8rgaJpZM4RIscw
.

I also faced this problem. It was because I was using node 6 which does not support Object.values, see Object.values node support.
It is safe to use with node version >= 7.5.0
@tannerlinsley we should add engines key in package.json of react-static.
"engines" : { "node" : ">=7.5.0" }

Please PR that! :)
On Wed, Dec 20, 2017 at 11:58 PM Atif Afzal<EMAIL_ADDRESS>wrote:

I also faced this problem. It was because I was using node 6 which does
not support Object.values, see Object.values node support
http://node.green/#ES2017-features-Object-static-methods-Object-values.
It is safe to use with node version >= 7.5.0
@tannerlinsley https://github.com/tannerlinsley we should add engines
key in package.json of react-static.
"engines" : { "node" : ">=7.5.0" }
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/nozzle/react-static/issues/251#issuecomment-353273443,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AFUmCVZJmVLm0j-59NdlJbT_rgRAThmlks5tCgGLgaJpZM4RIscw
.

NM, I got it in the next release. 👍

https://stackoverflow.com/questions/6237295/how-can-i-update-nodejs-and-npm-to-the-next-versions


Fix Shutdown Crash in Main Menu

The shutdown crash in main menu is caused by the Co8 world map extensions. Some list of widgets is extended and more widgets are freed, but it never seems to be initialized right. I cannot see the co8 code in IDA, so this is an issue.

Should be documented in the SpellSlinger files.
https://github.com/CircleOf8/DllDocumentation/blob/master/Spellslinger's Notes/worldmap_enhancement.txt

Ok, I think I fixed what Spellslinger did wrong - he changed the struct WorldmapWidgets (pointed to at 10BEF2D0), and expanded the "acquiredLocations" field (offset 0x200 through 0x234 expanded to 0x200 thru 0x250). There is another widget at the end of the struct though, originally at 0x238 (moved to 0x254) - he forgot to change this offset when freeing the widgets, which resulted in trying to free 0x238 twice, yielding a crash.
However, I still get a crash after fixing this - this time by d3d stuff :) your territory!
I don't think it's related, since I'm now getting this crash on GoG too.

Fixed in one of the latest updates


[PDI-18369] Converting Integer to Timestamp type using Select values …

…step results in incorrect date
The Kettle property is now called 'KETTLE_TIMESTAMP_NUMBER_CONVERSION_MODE' and controls how Timestamp should be converted to a number and vice-versa.
There're three possible values:

'LEGACY': (the default, the behaviour that existed until now) Timestamp to number uses milliseconds but number to Timestamp uses nanoseconds
'MILLISECONDS': both conversions use milliseconds
'NANOSECONDS': both conversions use nanoseconds

Added several unit tests to guarantee all three scenarios (and a few others to upper the coverage).
@pentaho-lmartins @pentaho/tatooine

:warning: Build finished in 34m 29s
Build command:
mvn clean verify -B -e -Daudit -amd -pl core,engine

:no_entry: Failed Tests
:cloud_with_lightning_and_rain: 18 test(s) failed:
org.pentaho.di.core.row.value.ValueMetaTimestampTest.testConvertTimestampToNumber_Milliseconds (click to expand)
expected:<1.567308896123E12> but was:<1.567312496123E12>

org.pentaho.di.core.row.value.ValueMetaTimestampTest.testConvertTimestampToBigNumber_Nanoseconds (click to expand)
expected:<1567308896123456789> but was:<1567312496123456789>

org.pentaho.di.core.row.value.ValueMetaTimestampTest.testConvertTimestampToNumber_Nanoseconds (click to expand)
expected:<1.56730889612345677E18> but was:<1.56731249612345677E18>

org.pentaho.di.core.row.value.ValueMetaTimestampTest.testConvertTimestampToBigNumber_DefaultMode (click to expand)
expected:<1567308896123> but was:<1567312496123>

org.pentaho.di.core.row.value.ValueMetaTimestampTest.testConvertTimestampToInteger_Milliseconds (click to expand)
expected:<1567308896123> but was:<1567312496123>

org.pentaho.di.core.row.value.ValueMetaTimestampTest.testConvertBigNumberToTimestamp_Milliseconds (click to expand)
expected:<2019-09-01 05:34:56.123> but was:<2019-09-01 04:34:56.123>

org.pentaho.di.core.row.value.ValueMetaTimestampTest.testConvertIntegerToTimestamp_Milliseconds (click to expand)
expected:<2019-09-01 05:34:56.123> but was:<2019-09-01 04:34:56.123>

org.pentaho.di.core.row.value.ValueMetaTimestampTest.testConvertTimestampToNumber_DefaultMode (click to expand)
expected:<1.567308896123E12> but was:<1.567312496123E12>

org.pentaho.di.core.row.value.ValueMetaTimestampTest.testConvertTimestampToInteger_Nanoseconds (click to expand)
expected:<1567308896123456789> but was:<1567312496123456789>

org.pentaho.di.core.row.value.ValueMetaTimestampTest.testConvertIntegerToTimestamp_Nanoseconds (click to expand)
expected:<2019-09-01 05:34:56.123456789> but was:<2019-09-01 04:34:56.123456789>

org.pentaho.di.core.row.value.ValueMetaTimestampTest.testConvertTimestampToInteger_DefaultMode (click to expand)
expected:<1567308896123> but was:<1567312496123>

org.pentaho.di.core.row.value.ValueMetaTimestampTest.testConvertTimestampToBigNumber_Milliseconds (click to expand)
expected:<1567308896123> but was:<1567312496123>

org.pentaho.di.core.row.value.ValueMetaTimestampTest.testConvertIntegerToTimestamp_DefaultMode (click to expand)
expected:<2019-09-01 05:34:56.123456789> but was:<2019-09-01 04:34:56.123456789>

org.pentaho.di.core.row.value.ValueMetaTimestampTest.testConvertNumberToTimestamp_Nanoseconds (click to expand)
expected:<2019-09-01 05:34:56.123456> but was:<2019-09-01 04:34:56.123456>

org.pentaho.di.core.row.value.ValueMetaTimestampTest.testConvertBigNumberToTimestamp_Nanoseconds (click to expand)
expected:<2019-09-01 05:34:56.123456789> but was:<2019-09-01 04:34:56.123456789>

org.pentaho.di.core.row.value.ValueMetaTimestampTest.testConvertNumberToTimestamp_Milliseconds (click to expand)
expected:<2019-09-01 05:34:56.123> but was:<2019-09-01 04:34:56.123>

org.pentaho.di.core.row.value.ValueMetaTimestampTest.testConvertNumberToTimestamp_DefaultMode (click to expand)
expected:<2019-09-01 05:34:56.123456> but was:<2019-09-01 04:34:56.123456>

org.pentaho.di.core.row.value.ValueMetaTimestampTest.testConvertBigNumberToTimestamp_DefaultMode (click to expand)
expected:<2019-09-01 05:34:56.123456789> but was:<2019-09-01 04:34:56.123456789>

Tests run: 4789, Failures: 18, Skipped: 7    Test Results

:information_source:  This is an automatic message

:white_check_mark: Build finished in 36m 5s
Build command:
mvn clean verify -B -e -Daudit -amd -pl core,engine

:ok_hand: All tests passed!
Tests run: 4789, Failures: 0, Skipped: 7    Test Results

:information_source:  This is an automatic message

Please, don't forget to squash commits!

:warning: Build finished in 38m 2s
Build command:
mvn clean verify -B -e -Daudit -amd -pl core,engine

:no_entry: Failed Tests
:cloud_with_lightning_and_rain: 1 test(s) failed:
org.pentaho.di.core.row.value.ValueMetaConverterTest.testTimestampIntegerConversions (click to expand)
expected:<2019-09-01 04:34:56.123456789> but was:<2019-09-01 03:34:56.123456789>

Tests run: 4790, Failures: 1, Skipped: 7    Test Results

:information_source:  This is an automatic message

:warning: Build finished in 38m 30s
Build command:
mvn clean verify -B -e -Daudit -amd -pl core,engine

:no_entry: Failed Tests
:cloud_with_lightning_and_rain: 1 test(s) failed:
org.pentaho.di.core.row.value.ValueMetaConverterTest.testTimestampIntegerConversions (click to expand)
expected:<2019-09-01 04:34:56.123456789> but was:<2019-09-01 03:34:56.123456789>

Tests run: 4790, Failures: 1, Skipped: 7    Test Results

:information_source:  This is an automatic message

:white_check_mark: Build finished in 1h 23m 18s
Build command:
mvn clean verify -B -e -Daudit -amd -pl core,engine

:ok_hand: All tests passed!
Tests run: 4790, Failures: 0, Skipped: 7    Test Results

:information_source:  This is an automatic message

:white_check_mark: Build finished in 38m 1s
Build command:
mvn clean verify -B -e -Daudit -amd -pl core,engine

:ok_hand: All tests passed!
Tests run: 4790, Failures: 0, Skipped: 7    Test Results

:information_source:  This is an automatic message


Consider rest args in guessOverload

Motivation

Fixes #7360
Test plan

See included automated tests.

We have a policy of testing changes to Sorbet against Stripe's codebase before
merging them. I've kicked off a test run for the current PR.  When the build
finishes, I'll share with you whether or how it failed. Thanks!
Stripe employees can see the build results here:
→ https://go/builds/bui_OlXhUzWgASpY6C
→ https://go/builds/bui_OlXi2w0xuUkygP
→ https://go/builds/bui_OlXiBlrKvNa1hK

Current dependencies on/for this PR:

master

PR #7406

PR #7382

PR #7383   👈

PR #7384

This comment was auto-generated by Graphite.

We have a policy of testing changes to Sorbet against Stripe's codebase before
merging them. I've kicked off a test run for the current PR.  When the build
finishes, I'll share with you whether or how it failed. Thanks!
Stripe employees can see the build results here:
→ https://go/builds/bui_Oq1p6KqqXM1f6U
→ https://go/builds/bui_Oq1pc0zbzczEOF
→ https://go/builds/bui_Oq1p0f0xvjwbN6

We have a policy of testing changes to Sorbet against Stripe's codebase before
merging them. I've kicked off a test run for the current PR.  When the build
finishes, I'll share with you whether or how it failed. Thanks!
Stripe employees can see the build results here:
→ https://go/builds/bui_OqNN6sdlPTwFcy
→ https://go/builds/bui_OqNNGad1l73GZ8
→ https://go/builds/bui_OqNNkhk1zf3AzC


v2 Database Migration hsql -> h2

Description
Changes made:

jdbc driver and some queries (hsql -> h2)
aspect ratio fix images
database migration (happens automatically)

This is what I've checked on linux and windows (need help in validation on mac):

functionalities of classifai (should be no breakdown)
aspect ratio fix, can try on this image
old database is completely moved into .classifai/.archive folder
3 json files (portfolio, segmentation, boundingbox) are completely moved into .classifai/.archive folder
no data lost from old database
if error happens during migration ( mainly due to connection failure to any database ), a backup of data will be in .classifai/.archive folder, but an empty H2 database will be created. So user can choose to seek for help to retrieve data or move on with clean database. Nevertheless, there will be an error message about that. A document on data retrieving can be prepared if required.

Feel free to do anything to break it
But one case is not allowed, which is keep switching v1 and v2 back and forth. This is to prevent the database index get messed up.
FYI, the database migration only happens when hsql exists, and h2 not exists.
If there is any abnormal behavior please let me know
@codenamewei there is one thing need your advice :

there is a new column "date" required a default value for old data, at the moment I put it as the time when migration happens.

Please do ask me question if there is any.
Thanks
Fixes # (issue)
Type of change
Please delete options that are not relevant.

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

Tested on?

[ x] Windows
[ x] Linux Ubuntu
[ x] Centos
[ ] Mac
[ ] Others  (State here -> xxx )

Checklist:

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

Bugs and Code Smells are solved,
Can try to test it now...
Thanks.

Bugs and Code Smells are solved,
Can try to test it now...
Thanks.

@YCCertifai
Tested on Windows and Ubuntu18.04

functionalities of classifai working
Old data copied to .classifai/.archive when database fail to connect.

Screnshot of database failure.

@devenyantis for all the v1 distro, the username is SA. Only for cw_v2 brach the username is admin.
Most probably ur previous database is from cw_v2 brach. Try to delete the database, install with any v1 database first then proceed with the test again.

@YCCertifai
Database from v1 hsqldb successfully migrate to h2.

@devenyantis
a little context in there:
reason why we have to put it as admin for v2 onwards is because only when in admin state, HSQLDB database engine of h2/hsqldb can be connected to the database to do queries from.
meaning there is this gui where you can connect to database and do queries in the window
we failed to do that in v1 and do not implement the changes as it will be backward incompatible for existing user who already using v1 (upon installing new version)
hence for v1 and v2, the database cant be the same.
i always rename my folder .classifai_v1 .classifai_v2 when swapping v1 and v2 version

ill take a look at this PR this week. kindly on hold merging of this branch thanks.
meanwhile, if you plan to do development on v2, feel free to create a new branch based on this branch, the conflict of changes will likely be smaller upon merging
git checkout -b new_branch base_branch

Example:
git checkout -b cw_branch sum_v2_dbMigration

thanks guys
@devenyantis @YCCertifai

@codenamewei
changes made:

final variable -> all capital letters separated with "_"
functios rename -> less verbose name
spacing consistency
--unlockdb arg is deleted, with modified comment
intermediate json files are deleted upon migration
logging message review.
If duplicated access of databases/classifai, a very wild error message will generated in the log file, stating that unable to connect to database.

I fixed the major code smells, but the minor are all naming convention, sonarcloud doesn't like full capital letters...


how to specify word length when calling as a function?

I must be dense, but I can't figure out how to call the word length options (short, medium, long) as part of the word_generate or words_generate functions. In other words, I want to be able to specify word_generate(short) or words_generate(3, long).

Hi Fred,
we are calling generate_word like outlined at [1] and it seems to work well [2,3,4]. You might also like [5].
With kind regards,
Andreas.
[1] https://github.com/daq-tools/vasuki/blob/master/vasuki/unique/gibberish.py
[2] https://api.hiveeyes.org/vasuki/unique/gibberish?size=small
[3] https://api.hiveeyes.org/vasuki/unique/gibberish?size=medium
[4] https://api.hiveeyes.org/vasuki/unique/gibberish?size=large
[5] https://api.hiveeyes.org/vasuki/


ci: use full ASAN

Previously we used LD_PRELOAD to add ASAN to our build. This is at best imperfect, since the full benefits of ASAN can only be realized by adding compiler instrumentation.
This also makes the job run python, java, and nodejs tests with ASAN.

The lock-free queue is the source of an ASAN failure. Specifically, the
queue does not guarantee strict FIFO circumstances in the name of speed.
This means that our code that loops through the queue is incorrect.
The goal is to replace this queue-based design soon regardless, and
hence we don't want to spend more time on this.
Also, this commit removes a useless logger in the buffer manager.


Support for Enterprise Github

Github allows enterprise companies to use a sub-domain to access github: e.g.: github.domain.com, however this is not currently supported in the Hub project. Would it require too much effort to write in functionality that would allow for a enterprise domain, or would it be better to fork and hard-code in the domain?
Thanks!

See #98

@damianb Thanks!


Update cursive dependency to 0.13

Any chance this gets merged. The view is non-functioning as it is in for the latest version of Cursive.

@gyscos

Thanks for the work!


feat: file

Prerequisites

[X] I have searched for existing issues that already include this feature request, without success.

Describe the Feature Request
Hello
can you add option so we can dowonload file
Describe the Use Case
Hey how is everything you can add the option to download a file where it shows all the daily movement or during the time the auto buyer was working. in this way we can query and filter the data we want to type: hour price type of letter
Describe Preferred Solution
Dowload file
Describe Alternatives
File
Additional Information
No response

Will be addressed as part of #549


Add "IrfanView" to supported image viewers list

noted that "IrfanView Plugins" needs to be installed and enabled by the user

Any PR to this repo requires you to sign the CLA and add your name to AUTHORS. Sorry about the bureaucracy :)

Done :)

Ok now i'm actually done, really sorry for the separate authors PR, i'm new to this.

No problem.
Two things:

you have to keep AUTHORS alphabetically sorted :)
the author check fails with User nebenzhal<EMAIL_ADDRESS>not found, please add yourself to the AUTHORS file, so I'm guessing the email address you used for the commits doesn't match the one you added. Something like this should fix that: git commit --amend --author="Yonatan Nebenzhal<EMAIL_ADDRESS>(and then git push --force again)

You may need to squash both commits before updating the author, which you should be able to do with git rebase -i main and then changing the second commit to squash instead of pick.
Sorry for making you jump through all those hoops :)


Update CARTO website

Map on https://trias-project.github.io/alien-macroinvertebrates/ is broken, either because CartoJS is no longer supported or because of https errors. Update once new render_website is implemented.

Also update link in README


Main branch, linter failure on new Rust version

It seems the main branch is currently failing Clippy lint checks against Rust 1.83.0. Previous succ run was on stable-x86_64-unknown-linux-gnu unchanged - rustc 1.82.0.
cc @alamb

related #1570

Thanks for the report @demetribu  -- hopefully this is fixed now


Fix parse rename use-case

Fix the parser when parsing renamed files which have no changes this can be observed using git mv  then git diff

duplicate of https://github.com/waigani/diffparser/pull/31


Compilation issue with i128 support in nom >= 4.2.0

Hi guys. I've found an issue while updating nom to the latest version. I have rustc 1.35.0 and when I update nom version to greater than 4.1.1 all i128 related macros and functions are not available, and of course, it breaks up my compile.
I investigate a bit and found the following:

Downloaded nom crate sources don't have build.rs file (checked in cargo cache).
In nom >= 4.2.0 was added a #[cfg(stable_i128)] to all i128 related macros and functions.
Configuration for i128 is defined in build.rs which is not shipped within the crate.

So, no matter which version of rustc you are using, all i128 related functions will not be available anyway.

thank you for the report, I just published version 4.2.3 which includes the build.rs file, that should fix the issue

Just checked version 4.2.3, this issue no longer arise. Thanks for your support.


UI elements randomly disappear for some frames on specific android devices

Bevy version
Bevy 0.14.1
Relevant system information
Samsung Galaxy A34
Cargo 1.80.0
Built using https://github.com/NiklasEi/xbuild
What you did
Rendered user interface and a regular sprite.
use bevy::prelude::*;

#[bevy_main]
fn main() {
    let mut app = App::new();
    app.add_plugins(DefaultPlugins).add_systems(Startup, setup);
    app.run();
}

fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
    commands.spawn((Camera2dBundle::default(), IsDefaultUiCamera));
    commands.spawn((
        NodeBundle {
            style: Style {
                width: Val::Px(500.0),
                height: Val::Px(125.0),
                ..default()
            },
            ..default()
        },
        UiImage::new(asset_server.load("branding/bevy_logo_dark_big.png")),
    ));
    commands.spawn(SpriteBundle {
        transform: Transform::from_xyz(0., 0., 0.),
        sprite: Sprite {
            custom_size: Some(Vec2::new(500., 125.)),
            ..default()
        },
        texture: asset_server.load("branding/bevy_logo_dark_big.png"),
        ..default()
    });
}

What went wrong
The ui image is flickering, but the regular sprite is not flickering.
Additional information
https://github.com/user-attachments/assets/e5c3c48b-6470-440b-9392-e4a2257ec75b
One of my play testers for my game has this issue, this was recorded on their phone. Other people, including me don't have this issue so it could be a device related issue. This flickering also happens on text and 9-slices (not shown in example).
This issue happened once to me, but never again after that. But on this persons phone it seems to happen almost always.
This might be a related issue: https://github.com/gfx-rs/wgpu/issues/2399, but I am not sure since it only happens on UI elements as shown in the video.
This pull request seems to be solving a similar issue: https://github.com/bevyengine/bevy/pull/13462.
Maybe this bug has something to do with system ordering?

@MarcoMeijer how are you using xbuild with bevy, exactly? It would be nice if you provided more of the project code. I am having trouble even running bevy with xbuild in the first place.

@Nihilistas
I have a manifest.yaml file containing this:
android:
  gradle: true
  icon: "assets/icon.png"
  manifest:
    package: "com.x.y"
    version_code: 13
    uses_permission:
      - name: "android.permission.INTERNET"
    application:
      label: "x"
      theme: "@android:style/Theme.DeviceDefault.NoActionBar.Fullscreen"
      activities:
        - orientation: "landscape"

And a cargo.toml file containing this:
[package]
name = "bug-report"
version = "0.1.0"
edition = "2021"

[dependencies]
bevy = { version = "0.14.1" }

[lib]
crate-type = ["staticlib", "cdylib"]

[package.metadata.android]
package = "org.x.y"
apk_name = "x"
assets = "assets"
resources = "assets/android-res"
strip = "strip"
build_targets = ["aarch64-linux-android"]

[target."cfg(target_os = \"android\")".dependencies.cpal]
version = "0.15"
features = ["oboe-shared-stdcxx"]

[package.metadata.android.sdk]
target_sdk_version = 31

[package.metadata.android.application]
icon = "@mipmap/ic_launcher"
theme = "@android:style/Theme.DeviceDefault.NoActionBar.Fullscreen"
label = "x"

[package.metadata.android.signing.release]
path = "<PATH_TO_KEYSTORE_FILE>"
keystore_password = "<PASSWORD_TO_KEYSTORE_FILE>"

[package.metadata.android.application.activity]
orientation = "landscape"

[[package.metadata.android.uses_permission]]
name = "android.permission.INTERNET"

For my use case I needed internet permissions but you can probably remove that.
And that's it. Then I just run x build --platform android --store play.

sorry for the late reply.
I am using the manifest.yaml and cargo.toml you provided, but I get this error:
Process: com.x.y, PID: 10458 10458 10458 E AndroidRuntime: java.lang.UnsatisfiedLinkError: Unable to load native library "/data/app/~~fthkHCbi4QDyynDTLS7DKg==/com.x.y-KgxWJ91X3SXS140HyupMMg==/lib/arm64/libbug_report.so": dlopen failed: library "libc++_shared.so" not found: needed by /data/app/~~fthkHCbi4QDyynDTLS7DKg==/com.x.y-KgxWJ91X3SXS140HyupMMg==/lib/arm64/libbug_report.so in namespace clns-4
Did you ever get this kind of error?

ok I got it to run finally. The issue in the end was that I was after all using the non-forked version of xbuild. On my Pixel phone the issue doesn't seem to appear so far. Next Wednesday I'm gonna go get more devices to test with. Btw, what android OS version does the Galaxy A34 you mentioned have?

@Nihilistas their android version is 14

Another play tester reported this problem, their phone is a "Redmi Note 11s Pro"

I also have a Redmi Note 8 Pro and this happens consistently.

I have some new android devices to report in #15792

I have similar issue on Motorola Edge 50 Neo: Dimensity 7300 with example from ui/text. But in my case no ui elements shown at all.
There is spam of this error in logcat but app is not crashing its still responsive.
2024-12-03 20:49:48.834 10904-10968 BLASTBufferQueue        com.clownworks.timepass              E  [SurfaceView[com.clownworks.timepass/com.clownworks.timepass.MainActivity]#1](f:1,a:7) acquireNextBufferLocked: Can't acquire next buffer. Already acquired max frames 7 max:5 + 2


Groupbar text is misaligned and out-of-bounds

System Info and Version
 System/Version info
Hyprland, built from branch  at commit 358e59e69d27a69381bc0872b5b8d1184bc6b6a1  (layout: fix centering of new floating windows).
Date: Sun Jun 2 23:11:55 2024
Tag: v0.40.0-150-g358e59e6, commits: 4756

flags: (if any)

System Information:
System name: Linux
Node name: weerwolf
Release: 6.6.30-gentoo-dist
Version: #1 SMP PREEMPT_DYNAMIC Sat May 11 06:06:48 CEST 2024

GPU information:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] [10de:1c82] (rev a1) (prog-if 00 [VGA controller])

os-release: NAME=Gentoo
ID=gentoo
PRETTY_NAME="Gentoo Linux"
ANSI_COLOR="1;32"
HOME_URL="https://www.gentoo.org/"
SUPPORT_URL="https://www.gentoo.org/support/"
BUG_REPORT_URL="https://bugs.gentoo.org/"
VERSION_ID="2.15"

plugins:

======Config-Start======

Config File: /home/user/.config/hypr/hyprland.conf: Read Succeeded

# #######################################################################################
# AUTOGENERATED HYPR CONFIG.
# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT,
# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS.
# #######################################################################################

# This is an example Hyprland config file.
# Refer to the wiki for more information.
# https://wiki.hyprland.org/Configuring/Configuring-Hyprland/

# Please note not all available settings / options are set here.
# For a full list, see the wiki

# You can split this configuration into multiple files
# Create your files separately and then link them to this file like this:
# source = ~/.config/hypr/myColors.conf

################
### MONITORS ###
################

# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=DP-1,1920x1080@165,0x0,1

###################
### MY PROGRAMS ###
###################

# See https://wiki.hyprland.org/Configuring/Keywords/

# Set programs that you use
$terminal = alacritty
$menu = rofi -show combi

#################
### AUTOSTART ###
#################

# Autostart necessary processes (like notifications daemons, status bars, etc.)
# Or execute your favorite apps at launch like this:

exec-once = hyprpaper
exec-once = ckb-next --background

exec-once = dinitctl setenv DISPLAY=$DISPLAY
exec-once = dinitctl start dunst
exec-once = dinitctl start kwalletd

#############################
### ENVIRONMENT VARIABLES ###
#############################

# See https://wiki.hyprland.org/Configuring/Environment-variables/

env = XCURSOR_SIZE,24
env = HYPRCURSOR_THEME,rose-pine-hyprcursor
env = HYPRCURSOR_SIZE,32
env = SDL_VIDEODRIVER,wayland

# NVIDIA
env = LIBVA_DRIVER_NAME,nvidia
env = XDG_SESSION_TYPE,wayland
env = GBM_BACKEND,nvidia-drm
env = __GLX_VENDOR_LIBRARY_NAME,nvidia

#####################
### LOOK AND FEEL ###
#####################

# Refer to https://wiki.hyprland.org/Configuring/Variables/

# https://wiki.hyprland.org/Configuring/Variables/#general
general {
    gaps_in = 5
    gaps_out = 20

    border_size = 2

    # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
    col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
    col.inactive_border = rgba(595959aa)

    # Set to true enable resizing windows by clicking and dragging on borders and gaps
    resize_on_border = false

    # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
    allow_tearing = true

    layout = dwindle
}

# https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration {
    rounding = 10

    # Change transparency of focused and unfocused windows
    active_opacity = 1.0
    inactive_opacity = 1.0

    drop_shadow = true
    shadow_range = 4
    shadow_render_power = 3
    col.shadow = rgba(1a1a1aee)

    # https://wiki.hyprland.org/Configuring/Variables/#blur
    blur {
        enabled = true
        size = 3
        passes = 1

        vibrancy = 0.1696
    }
}

# https://wiki.hyprland.org/Configuring/Variables/#animations
animations {
    enabled = false

    # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more

    bezier = myBezier, 0.05, 0.9, 0.1, 1.05

    animation = windows, 1, 7, myBezier
    animation = windowsOut, 1, 7, default, popin 80%
    animation = border, 1, 10, default
    animation = borderangle, 1, 8, default
    animation = fade, 1, 7, default
    animation = workspaces, 1, 6, default
}

# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
dwindle {
    pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
    preserve_split = true # You probably want this
}

# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
master {
    new_is_master = true
}

# https://wiki.hyprland.org/Configuring/Variables/#misc
misc {
    force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers
    disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :(
    allow_session_lock_restore = true
}

group {
    col.border_active = rgba(33ccffee) rgba(00ff99ee) 45deg
    col.border_inactive = rgba(595959aa)

    groupbar {
        font_size = 16
        col.active = rgba(1188cc88)
        col.inactive = rgba(595959aa)
    }
}

#############
### INPUT ###
#############

# https://wiki.hyprland.org/Configuring/Variables/#input
input {
    kb_layout = us
    kb_variant =
    kb_model =
    kb_options = compose:ralt
    kb_rules =

    repeat_delay = 300
    repeat_rate = 40

    follow_mouse = 1

    sensitivity = -0.5 # -1.0 - 1.0, 0 means no modification.

    touchpad {
        natural_scroll = false
    }
}

# https://wiki.hyprland.org/Configuring/Variables/#gestures
gestures {
    workspace_swipe = false
}

binds {
    allow_workspace_cycles = true
}

# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
device {
    name = epic-mouse-v1
    sensitivity = -0.5
}

####################
### KEYBINDINGSS ###
####################

# See https://wiki.hyprland.org/Configuring/Keywords/
$mainMod = SUPER # Sets "Windows" key as main modifier

bind = $mainMod, Return, exec, $terminal
bind = $mainMod & SHIFT, Q, killactive,
bind = $mainMod & SHIFT, E, exit,
bind = $mainMod, Space, togglefloating,
bind = $mainMod, D, exec, $menu
bind = $mainMod, F, fullscreen
bind = $mainMod, M, fullscreen, 1
bind = $mainMod, Z, pin
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, V, togglesplit, # dwindle
bind = $mainMod CTRL, Q, exec, hyprctl kill
bind = $mainMod ALT, L, exec, swaylock -c 000000

# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d

# Move focus with mainMod + hjkl
bind = $mainMod, H, movefocus, l
bind = $mainMod, L, movefocus, r
bind = $mainMod, K, movefocus, u
bind = $mainMod, J, movefocus, d

# Move focus with mainMod + arrow keys
bind = $mainMod SHIFT, left, movewindoworgroup, l
bind = $mainMod SHIFT, right, movewindoworgroup, r
bind = $mainMod SHIFT, up, movewindoworgroup, u
bind = $mainMod SHIFT, down, movewindoworgroup, d

# Move focus with mainMod + hjkl
bind = $mainMod SHIFT, H, movewindoworgroup, l
bind = $mainMod SHIFT, L, movewindoworgroup, r
bind = $mainMod SHIFT, K, movewindoworgroup, u
bind = $mainMod SHIFT, J, movewindoworgroup, d

# Window cycle
bind = $mainMod, Period, cyclenext
bind = $mainMod, Comma, cyclenext, prev

# Window swap
bind = $mainMod SHIFT, Period, swapnext
bind = $mainMod SHIFT, Comma, swapnext, prev

# Group cycle
bind = $mainMod CTRL, H, changegroupactive, b
bind = $mainMod CTRL, J, changegroupactive,
bind = $mainMod CTRL, K, changegroupactive, b
bind = $mainMod CTRL, L, changegroupactive

bind = $mainMod CTRL, left, changegroupactive, b
bind = $mainMod CTRL, down, changegroupactive,
bind = $mainMod CTRL, up, changegroupactive, b
bind = $mainMod CTRL, right, changegroupactive

# Group swap
bind = $mainMod CTRL SHIFT, H, movegroupwindow, b
bind = $mainMod CTRL SHIFT, J, movegroupwindow,
bind = $mainMod CTRL SHIFT, K, movegroupwindow, b
bind = $mainMod CTRL SHIFT, L, movegroupwindow

bind = $mainMod CTRL SHIFT, left, movegroupwindow, b
bind = $mainMod CTRL SHIFT, down, movegroupwindow,
bind = $mainMod CTRL SHIFT, up, movegroupwindow, b
bind = $mainMod CTRL SHIFT, right, movegroupwindow

# Switch to previous workspace
bind = $mainMod, B, workspace, previous
bind = $mainMod SHIFT, B, movetoworkspace, previous

# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10

# Switch workspaces with mainMod + [F1-F10]
bind = $mainMod, F1, workspace, 11
bind = $mainMod, F2, workspace, 12
bind = $mainMod, F3, workspace, 13
bind = $mainMod, F4, workspace, 14
bind = $mainMod, F5, workspace, 15
bind = $mainMod, F6, workspace, 16
bind = $mainMod, F7, workspace, 17
bind = $mainMod, F8, workspace, 18
bind = $mainMod, F9, workspace, 19
bind = $mainMod, F10, workspace, 20

# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10

# Move active window to a workspace with mainMod + SHIFT + [F1-F10]
bind = $mainMod SHIFT, F1, movetoworkspace, 11
bind = $mainMod SHIFT, F2, movetoworkspace, 12
bind = $mainMod SHIFT, F3, movetoworkspace, 13
bind = $mainMod SHIFT, F4, movetoworkspace, 14
bind = $mainMod SHIFT, F5, movetoworkspace, 15
bind = $mainMod SHIFT, F6, movetoworkspace, 16
bind = $mainMod SHIFT, F7, movetoworkspace, 17
bind = $mainMod SHIFT, F8, movetoworkspace, 18
bind = $mainMod SHIFT, F9, movetoworkspace, 19
bind = $mainMod SHIFT, F10, movetoworkspace, 20

# Example special workspace (scratchpad)
bind = $mainMod, S, togglespecialworkspace, magic
bind = $mainMod SHIFT, S, movetoworkspace, special:magic

# Groups
bind = $mainMod, G, togglegroup

# Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
# Scroll through existing workspaces with keyboard
bind = $mainMod, N, workspace, e+1
bind = $mainMod SHIFT, N, workspace, e-1
bind = $mainMod, Period, workspace, e+1
bind = $mainMod, Comma, workspace, e-1

# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow

# Audio bindings
bind =, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bind = CTRL, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle

# MPD media bindings
bind =, Pause, exec, mpc toggle
bind =, XF86AudioPlay, exec, mpc toggle
binde =, XF86AudioNext, exec, mpc next
binde =, XF86AudioPrev, exec, mpc prev
binde = SHIFT, XF86AudioNext, exec, mpc seek +10
binde = SHIFT, XF86AudioPrev, exec, mpc seek -10
bind = SHIFT, XF86AudioRaiseVolume, exec, mpc seek +10
bind = SHIFT, XF86AudioLowerVolume, exec, mpc seek -10
bind = CTRL, XF86AudioRaiseVolume, exec, mpc volume +2
bind = CTRL, XF86AudioLowerVolume, exec, mpc volume -2

# Notifications
bind = $mainMod, Grave, exec, dunstctl close
bind = $mainMod SHIFT, Grave, exec, dunstctl close-all
bind = $mainMod CTRL, Grave, exec, dunstctl history-pop

# Screenshot
bind = CTRL, Print, exec, grimblast copysave area ~/Screenshots/$(date +%Y-%m-%dT%H-%M-%S).png
bind =, Print, exec, grimblast copysave output ~/Screenshots/$(date +%Y-%m-%dT%H-%M-%S).png
bind = $mainMod, Print, exec, grimblast copysave active ~/Screenshots/$(date +%Y-%m-%dT%H-%M-%S).png

###############
### SUBMAPS ###
###############

bind = $mainMod, R, submap, resize

# will start a submap called "resize"
submap = resize

# sets repeatable binds for resizing the active window
binde =, right, resizeactive, 10 0
binde =, left, resizeactive, -10 0
binde =, up, resizeactive, 0 -10
binde =, down, resizeactive, 0 10

# sets repeatable binds for resizing the active window
binde =, L, resizeactive, 10 0
binde =, H, resizeactive, -10 0
binde =, K, resizeactive, 0 -10
binde =, J, resizeactive, 0 10

# use reset to go back to the global submap
bind =, escape, submap, reset

# will reset the submap, which will return to the global submap
submap = reset

##############################
### WINDOWS AND WORKSPACES ###
##############################

# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules

# Example windowrule v1
# windowrule = float, ^(kitty)$

# Example windowrule v2
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$

windowrulev2 = suppressevent maximize, class:.* # You'll probably like this.

exec-once = waybar

======Config-End========

Bug or Regression?
Regression
Description
The text of the groupbar is out-of-bounds and misaligned as can be seen here.

I did a git bisect and this bug has been introduced in commit ca0833c9ed6d6034b360d0ea83f3ac942ffb45b5
Before commit ca0833c9ed6d6034b360d0ea83f3ac942ffb45b5 it looked like this:

In both cases the text seems to go out-of-bounds, but since commit ca0833c9ed6d6034b360d0ea83f3ac942ffb45b5 it's more out-of-bounds than it used to be.
How to reproduce
Config to reproduce:
~/.config/hypr/hyprland.conf:
group {
    col.border_active = rgba(33ccffee) rgba(00ff99ee) 45deg
    col.border_inactive = rgba(595959aa)

    groupbar {
        font_family = Terminus
        font_size = 16
        col.active = rgba(1188cc88)
        col.inactive = rgba(595959aa)
    }
}

This bug can also be reproduces with font_family = DejaVuSans. Maybe the font_size is causing it.
Crash reports, logs, images, videos
No response

can't you use height?

tagging @zakk4223 as the regressor

can't you use height?

This doesn't work. The text is still misaligned.

I actually tried to fixed the font box being smaller than the real space it uses a while back but didn't succeed at finding how to get the real font height with pango
added height so it would use the wrong size provided by pango

iirc only the center size is being used


Reactivating testnet3 related tests

This is expected. CI is currently using a testnet2 endpoint. I will update CI to use a testnet3 endpoint from now on.

Great work! :100:


Add Board Button in Boards

I want to create 'add new board' button at the all other boards right side

boards.title is a property that accepts HTML, you can add buttons there as you wanted.
See https://jsfiddle.net/marcosrocha85/Lk9t483r/

My solution is;
/* Other Boards */ ,
{
'id': '0',
'order': 99999,
'title': 'New Boards',
'class': '',
'dragBoards': false
}
After Add:
                kanban.removeBoard('0');
                kanban.addBoards([
                    {
                        id: '0',
                        order: 99999,
                        title: '

Yeni Pano

',
                        dragBoards: false
                    }
                ]);

Is there an easier way?

I guess I don't understanding you. You want to add a new board at the most right of kanban or you want to add a button at every board title?

https://ibb.co/V9ZpFBj
This is my screen, when I click the 'Yeni Pano' button, I want to create a new board and then the 'Yeni Pano' button will remain on the far right of all boards.
My solution is;
var kanban = new jKanban({
element: '#tasks',
widthBoard: '290px',
dragBoards: true,
click: function(el) {/* /},
dropEl: function (el, source) {/ /},
dragendBoard: function (el) {/ /},
boards: [
/ Other Boards */
{
'id': '0',
'order': 99999,
'title': 'Yeni Pano (Add New Board)',
'dragBoards': false
}
]
});
When clicked (Add New Board) button i delete the board with the id value of 0 (this is my for my Add New Board Button) and create it again. I'm doing this so that my 'Add New Board Button' can stay on the far right.

Now I could understand you. I guess the best way is the way you're doing because of the current behavior of jKanban. I think would be nice if jKanban had a button to add a board like that, so pull requests are welcome. Oh, and nice board btw. ;)

Thank you for your nice thought :) As I said, I just wanted to know if there is an easy solution :)


Configurate (Related) Issue

I'm unsure where this issue belongs. I don't know if it's a Sponge issue or a Configurate Issue
I am saving a List<ItemStackSnapshot> to a config here:
https://github.com/NucleusPowered/Nucleus/blob/7c54cccf54ced00802baf04f994ce3b269510e38/src/main/java/io/github/nucleuspowered/nucleus/configurate/datatypes/KitDataNode.java#L20
It should be saving like this:
https://gist.github.com/hsyyid/f7277757533259c90d66f945531e1068#file-general-json-L19
However instead, it's doing this:
https://gist.github.com/hsyyid/8d29310addd67b2a7d9a014f9a3927bf#file-general-json-L19
Those quotation marks around the level and id of the enchantment is causing it to be deserialized as Strings, not Integers. This then causes this issue:
https://github.com/NucleusPowered/Nucleus/issues/181

I can't reproduce this on 1.10.2, so this was either already fixed or exists only on 1.8.9 (or I'm doing something wrong).


feat: Add support for kafka event source config

Description
Add support for self_managed_kafka_event_source_config and amazon_managed_kafka_event_source_config to be able to set custom consumer group ids.
Motivation and Context
This config is available in lambda function and should be available in alias as well so we can specify custom consumer group ids.

This PR is included in version 7.12.0 :tada: