Detected dubious ownership in repository error when running the action

Is there an existing issue for this?

[X] I have searched the existing issues

Does this issue exist in the latest version?

[X] I'm using the latest release

Describe the bug?
In an already existing CI pipeline, using the action for testing purposes exactly as described in the readme:
      - name: Test to list changed files
        id: changed-source-files
        uses<EMAIL_ADDRESS>
      - name: List all changed files
        run: |
          for file in ${{ steps.changed-source-files.outputs.all_changed_files }}; do
            echo "$file was changed"
          done

After running I get the error:
changed-files-diff-sha
  Verifying git version...
  Valid git version found: (2.36.3)
  Running on a pull request event...
  Fetching remote refs...
  fatal: detected dubious ownership in repository at '/__w/cloudops-docs/cloudops-docs'
  To add an exception for this directory, call:

  	git config --global --add safe.directory /__w/cloudops-docs/cloudops-docs
  Error: Process completed with exit code 128.

To Reproduce

Existing github actions file that runs on ubuntu-latest
Copy the code based on the example

What OS are you seeing the problem on?
ubuntu-latest or ubuntu-20.04
Expected behavior?
Action should list the changed files
Relevant log output
No response
Anything else?
No response
Code of Conduct

[X] I agree to follow this project's Code of Conduct

Using actions/checkout@v3 with either fetch-depth: 0 or fetch-depth: 2 changes nothing, still getting the error.

@AbianG The safe.directory config is done by the checkout action which you are required to use with this action. Noting that this doesn't have anything to do with the fetch-depth setting.
See: https://github.com/actions/checkout#usage

Hey there!
I also see this happening with
            - name: Checkout code
              uses: actions/checkout@v3
              with:
                  set-safe-directory: true
            - name: Get changed files in the docs folder
              id: changed-files-specific
              uses: tj-actions/changed-files@v34
              with:
                  files: |
                      <...>

I checked that the checkout action indeed performs the safe.directory, and I does...
(I'm running in a custom Docker image on a self-hosted runner)

@jackton1 the configuration option seems to be related to checkout yes, but this issue in my case started happening after I added changed-files action to an already-working pipeline (wanted to perform the actions it has always performed on the whole repo just on the changed files, hence the addition) That's why I believed it had to do with the interaction between changed-files and the rest of my config.

As @jackton1 stated, related to checkout and not to this action, but I'll leave the fix to help other users:
Problem is checkout set-safe-directory is not persisted to other jobs. Instead, a small job to run run: git config --global --add safe.directory "$GITHUB_WORKSPACE" should be added. (See: https://github.com/actions/checkout/issues/766)
As an example, I added it just before changed-files and worked correctly:
      # Add safe.directory per https://github.com/actions/checkout/issues/766
      - name: Setting repo parent dir as safe safe.directory
        run: git config --global --add safe.directory "$GITHUB_WORKSPACE"

      - name: Test to list changed files
        id: changed-source-files
        uses<EMAIL_ADDRESS>
I hope this helps!


testIsExecutionFinished doesn't pass

The following test doesn't pass and it's the last one that needs to be corrected to finally have only green tests for Sindarin:
SindarinDebuggerTest>>#testIsExecutionFinished
	| scdbg |
	scdbg := SindarinDebugger debug: [ self helperMethod16 ].
	self deny: scdbg isExecutionFinished.
	scdbg
		stepOver;
		step;
		step;
		stepOver;
		step;
		stepOver;
		step.
	"Reached `self isActiveProcess` in Process>>#terminate"
	self assert: scdbg isExecutionFinished

This is because it does multiple steps when the debguged method contains only one message and a return so only 2 stepOver| should be performed:
helperMethod16

	^ 1 + 1

We'll then see if the tested method works fine or not

Actually, I see that the related method has been fixed on Pharo side: https://github.com/pharo-project/pharo/pull/8567
These changes should have been integrated to this repo a year and a half ago. This important PR is also supposed to fix a crash in
SindarinDebugger>>#stepOver


fixes to sharder and server for pivot code

also includes some cleaning/bugfixing in object server code structure
still getting some errors related to child containers getting a pivot instead of the root container.
Currently unsure if related to container server or merge function.

Looks great, nice refactor of the redirect stuff  :+1:


How to migrate data from any of my databases to Teams?

I wish to migrate data from a database to Teams. Can I accomplish that using connectors?

Office 365 Connectors are a great way to push your app's rich content into Microsoft Teams.
Could you please elaborate on what do you mean by migrate data to Teams?


Test pipelines

Signed-off-by: Chmouel Boudjnah<EMAIL_ADDRESS>

Codecov Report

Merging #325 (f309f24) into main (0afcf92) will increase coverage by 0.04%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##             main     #325      +/-   ##
==========================================
+ Coverage   70.06%   70.11%   +0.04%
==========================================
  Files          32       32
  Lines        2175     2178       +3
==========================================
+ Hits         1524     1527       +3
  Misses        503      503
  Partials      148      148

Impacted Files
Coverage Δ

pkg/cmd/repository/list.go
79.72% <0.00%> (+0.85%)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 0afcf92...f309f24. Read the comment docs.


Add listen property on ValueListenableBuilder

A listen property on the ValueListenableBuilder would be nice for side effects that aren't part of the building process.
For example if the state of the ValueNotifier is success and the page needs to change, or if the state is error and I need to display a toast. Those things are not part of the build process.

@cedvdb
Can you check this plugin and see if it answers your requirement ?

@darshankawar That's not really what I'm asking. I'm asking for a listen property on the widget that would be a function that returns void that would act just the same as the build method.  Basically like a BlocConsumer

Thanks for the details.


[flash_ctrl] ADD TEST FOR THE HOST CTRL ARBITER

Perform operations via the Flash Software Interface, and at the same time invoke a
Hardware RMA operation . This verifies the arbitration within the Flash Protocol
Controller. The arbiter should allow any outstanding Software operations to complete
before the RMA starts.  When the RMA completes the RMA remains in its final state
until Reset and Software access is blocked.
Signed-off-by: TIM EWINS<EMAIL_ADDRESS>

Comments accepted and implemented, pushed again

Rebased

Changes made ... pushed again

Please can this be merged?


phpunit tests

Coverage increased (+2.1%) to 7.992% when pulling 6770da5a41f61e8d96312e2c4619cfa8b741cfea on Tr0nYx:master into f317ba14747a605be666cc4954fcce8dc598b456 on Alpha-Trader:master.

Coverage increased (+2.1%) to 7.992% when pulling 6770da5a41f61e8d96312e2c4619cfa8b741cfea on Tr0nYx:master into f317ba14747a605be666cc4954fcce8dc598b456 on Alpha-Trader:master.

Coverage increased (+2.1%) to 7.992% when pulling 6770da5a41f61e8d96312e2c4619cfa8b741cfea on Tr0nYx:master into f317ba14747a605be666cc4954fcce8dc598b456 on Alpha-Trader:master.


[Bug] MediaElement broken on iOS in Release mode - "Default constructor not found"

Description
When running on an iOS device in Release, the following exception is thrown:
Default constructor not found for type Xamarin.CommunityToolkit.UI.Views.MediaElement
This doesn't happen on the device in Debug, only Release.
Steps to Reproduce

Build and deploy to iPhone in Release
Navigate to screen with MediaElement pointed to network location
Exception occurs on screen load

Expected Behavior
Actual Behavior
Basic Information

Version with issue:
Last known good version:
IDE: VS for Mac
Platform Target Frameworks:

iOS:  14.3

Workaround
Setting this mtouch argument fixes the issue: --linkskip=Xamarin.CommunityToolkit
Stack Trace
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
Xamarin.Forms.Xaml.XamlParseException: Position 27:14. Default constructor not found for type Xamarin.CommunityToolkit.UI.Views.MediaElement (Most recent call last)
at Xamarin.Forms.Xaml.CreateValuesVisitor.Visit(Xamarin.Forms.Xaml.ElementNode node, Xamarin.Forms.Xaml.INode parentNode) in Xamarin.Forms.Xaml.CreateValuesVisitor line 3680
at Xamarin.Forms.Xaml.ElementNode.Accept(Xamarin.Forms.Xaml.IXamlNodeVisitor visitor, Xamarin.Forms.Xaml.INode parentNode) in Xamarin.Forms.Xaml.ElementNode line 671
at Xamarin.Forms.Xaml.ElementNode.Accept(Xamarin.Forms.Xaml.IXamlNodeVisitor visitor, Xamarin.Forms.Xaml.INode parentNode) in Xamarin.Forms.Xaml.ElementNode line 467
at Xamarin.Forms.Xaml.RootNode.Accept(Xamarin.Forms.Xaml.IXamlNodeVisitor visitor, Xamarin.Forms.Xaml.INode parentNode) in Xamarin.Forms.Xaml.RootNode line 299
at Xamarin.Forms.Xaml.XamlLoader.Visit(Xamarin.Forms.Xaml.RootNode rootnode, Xamarin.Forms.Xaml.HydrationContext visitorContext, System.Boolean useDesignProperties) in Xamarin.Forms.Xaml.XamlLoader line 719
at Xamarin.Forms.Xaml.XamlLoader.Load(System.Object view, System.String xaml, System.Reflection.Assembly rootAssembly, System.Boolean useDesignProperties) in Xamarin.Forms.Xaml.XamlLoader line 1415
at Xamarin.Forms.Xaml.XamlLoader.Load(System.Object view, System.String xaml, System.Boolean useDesignProperties) in Xamarin.Forms.Xaml.XamlLoader line 39
at Xamarin.Forms.Xaml.XamlLoader.Load(System.Object view, System.Type callingType) in Xamarin.Forms.Xaml.XamlLoader line 103

The same problem was in Xamarin.Forms
https://github.com/xamarin/Xamarin.Forms/issues/9752
It seems you need to preserve this class from linking.
You can use linker config file for achieving it.
Or just call somewhere in code this constructor.
new MediaElement();

The same problem was in Xamarin.Forms
https://github.com/xamarin/Xamarin.Forms/issues/9752
It seems you need to preserve this class from linking.
You can use linker config file for achieving it.
Or just call somewhere in code this constructor.
new MediaElement();

@znelson32 can you provide your release configuration? You can find it on your csproj

@znelson32 can you provide your release configuration? You can find it on your csproj

The same problem was in Xamarin.Forms
xamarin/Xamarin.Forms#9752
It seems you need to preserve this class from linking.
You can use linker config file for achieving it.
Or just call somewhere in code this constructor.
new MediaElement();

This fixed the issue, it's akin to: --linkskip=Xamarin.CommunityToolkit
Would be nice to have [Xamarin.iOS.Foundation.Preserve] in the source so we never run into this, but no big deal.

@znelson32 yeah, but to add that we need to know better in what situation the linker is removing the ctor. Since XCT is linker safe so we can't add Preserve in all, we need to do it conditionally. So if you can share your release config or provide a repro that will be great to us

Here's what I have:

none
true
bin\iPhone\Release
prompt
4
Entitlements.plist
ARM64
iPhone Distribution: XYZ
AppProvisioningProfile
--optimize=experimental-xforms-product-type
SdkOnly


watchQuery on page re-creates page component

Version
v2.7.0
Reproduction link
https://codesandbox.io/s/pj3jj4884j
Steps to reproduce

Press the "Bump foo" button
Note that this button sets the browser's location bar to the current page with an updated query string

What is expected ?
Setting/changing the foo query string parameter does not recreate the page component. Instead, the page component is re-used
What is actually happening?
The page component is recreated each time the foo query string parameter is changed (as evidenced by the console logging 'created' on each query string parameter changed).
This has performance/usability implications for more complex pages
Additional comments?
Repro link is for v2.7.x.
Here is a link showing the old, preferred behaviour (v2.6.x): https://codesandbox.io/s/mzl7n86jv9
I believe this to be a breaking change, even if this new behaviour is intended. And if it is intended, what is a work around to achieve the old behaviour (as I'm relying on the page component to be reused)

This bug report is available on Nuxt community (#c9223)

@dhritzkiv Sorry for the inconvience.
Can you please try to add key on page component ?
  key: 'index',
  watchQuery: ["foo"],

@clarkdo Either of those key options result in a page that only changes once (going from "/" to "/?foo=2"; but "/?foo=2" to "/?foo=3" does not trigger the nuxt page render cycle) and the component is still re-created.
Further, using key: ({fullPath}) => fullPath, /does/ trigger the nuxt page render cycle, but the page component is still re-created (by the router-view?) each time.
I can't think of a way to achieve the old behaviour.

@dhritzkiv It should be the same behaviour as before with functional key: ({ path }) => path, because component will have exact same key this.$route.path as before and skip the changes introduced by above pr.

I added the change based on your codesandbox, you can see that Foo keep increasing and only 1 created log.

Huh! So, for some reason this change works in Firefox, but doesn't work in Safari! (Safari is where I created/updated the codesandbox). In Safari, the updated query string doesn't trigger changes.
(Note: the underlying problem in this issue doesn't work in Firefox, either. And the old behaviour from 2.6.3 worked in Safari just fine)


[FLINK-3059] Javadoc fix for DataSet.writeAsText()

Currently writeAsText() in javadoc states it simply generates a file,
but this is not always true and it depends on the environment configuration.
This Pull Request is to add the clarification to the method's javadoc.

Thanks for improving this. The docs were not obvious, and your change makes it much better.
I added two comments, otherwise this looks good to me.

+1 to merge

Love it!
+1

Will merge this PR.


[Developer Activities]: 2023 The inaugural Developer Activities

Welcome to  The inaugural Developer Activities
We have selected some topics. You can choose the relevant theme based on your interests and then comment on the selected issue ID.
Topics
Tool Optimization

Topic
Issue
Module
Assigne
PR
Progress

[Easy] The cfs-cli tool supports QoS management
#1893
cfs-cli
@rogerogers

[Easy] The cfs-cli supports setting the maximum number of dp on datanode
#1897
cfs-cli
@NaturalSelect

[Easy] The blobstore-cli supports setting background task switch
#1898
blobstore-cli

[Easy] The blobstore-cli supports offline specified nodes
#1899
blobstore-cli

[Easy] The blobstore-cli supports showing disk drop or disk repair progress
#1900
blobstore-cli

[Easy] The blobstore-cli supports Clustermgr to switch masters
#1901
blobstore-cli

[Easy] The cfs-cli supports viewing all master address information
#1902
cfs-cli

[Medium] The cfs-cli displays disk information of DataNode
#1895
cfs-cli

[Medium] The cfs-cli supports querying file information through inodes
#1896
cfs-cli

Code Optimization

Topic
Issue
Module
Assigne
PR
Progress

[Easy] Unit Test Supplement
#1903
Master,MetaNode,DataNode,ObjectNode
@jjyaoao

[Easy] Log flush output before crash
#1910
Master,MetaNode,DataNode,ObjectNode

[Easy] filetype returned by os.readdir only contain file, dir, symbol link type
#1501
client

[Easy] Support the master to uniformly configure the push gateway address of the data reported by the client
#1913
Blobstore

[Easy] The RPC module of the erasure code system supports downloading crc data integrity verification
#1914
Blobstore

[Easy] Master/DataNode/MetaNode start log optimization
#1917
Master,MetaNode,DataNode

[Medium] Client mount point supports non-repeatable mount
#1904
Cilent

[Medium] MetaNode requests Master dp information list reuse
#1908
MetaNode

[Medium] Process (all) log storage rolls according to directory space
#1909
All

[Medium] The erasure code subsystem supports reporting indicators in Consul mode
#1911
Blobstore

[Medium] Support the master to uniformly configure the push gateway address of the data reported by the client
#1912
Master

[Medium] Limit the number of threads for blobnode and datanode to read and write disk
#1915
BlobNode,DataNode

[Medium] Master does snapshot optimization
#1916
Master

[Medium] Master qosClientId allocation optimization
#1918
Master

[Medium] Volume supports sleep capability
#1919
Master

[Medium] Master supports the reporting interface of io and cpu load
#1922
Master

[Hard] DataNode receiving processing supports speed limit
#1906
DataNode

[Hard] Clear the abnormal Data Partition of the replica volume
#1907
DataNode,MetaNode,Master

Deployment Optimization

Topic
Issue
Module
Assigne
PR
Progress

[Medium] Automatic production of rpm packages supports version release
#1905
All

Hi, @rogerogers
Welcome aboard! We're looking forward to your contributions.

Hello, i want to try #1893

Hi, @rogerogers
Welcome aboard! We're looking forward to your contributions.

Hello, I want to try #1897

Hello, I want to try #1903

NaturalSelect

Hi，@NaturalSelect you're welcome!
Understood, please feel free to ask any questions you may have.

Hello, I want to try #1897

Hi，@NaturalSelect you're welcome!
Understood, please feel free to ask any questions you may have.

Thank you

Hello, I want to try #1897

Hi, @jjyaoao
This is an interesting task, maybe you can first familiarize yourself with your favorite modules and then start enjoying coding.

Due to the wide range of topics covered by #1903,  we do not limit the number of applicants who can sign up.
Everyone is welcome to apply.

hello, I want to try #1902

hello, I want to try https://github.com/cubefs/cubefs/issues/1904

Hello, I'm interested in #1899 , thank you!

Hello, I'm going to try #1898 , thanks!

hello, I want to try #1902
Hi, @xiaodi22013
We look forward to your joining.

hello, I want to try #1904
Hi, @mfordjody
Welcome to join us, it looks like a good choice.

Hello, I'm interested in #1899 , thank you!

Hi, @aFlyBird0
Start enjoying your CubeFS journey now.

Hello, I'm going to try #1898 , thanks!

Hi，@cloorc
You are now in charge of this topic.

Hello, I want to try #1900 , thanks!

Hello, I want to try #1900 , thanks!

Hi, @setcy
Let's embark on a coding journey!

hi, #1501 is ok?

Hello @pengtianyue025, could I try #1914?

Hello, @pengtianyue025 , I want to try #1901 , thanks

/assign #1501 Let me do it, thank you. @pengtianyue025

hi, #1501 is ok?

Hi, @201341
Just do it!

Hello, @pengtianyue025 , I want to try #1901 , thanks

Hi, @sjcsjc123
Now you are the owner of #1901

/assign #1501 Let me do it, thank you. @pengtianyue025

Hi, @rayowang
I am so sorry, this issue has assigned to @201341 , would you mind picking a different one

Hello, can I apply for #1919 as the second topic?

Hello, can I apply for #1919 as the second topic?

Yes, no problem！ If you have any question, please contact @Victor1319

Hello, I want to try #1915 .

ok, no problem. please contact @cessory

Hello, I want to try #1915 .

ok, no problem. please contact @cessory

Thank you

hello, i want to try #1895 , but maybe i need more context about this topic

Welcome to join us. The cfs-cli tool needs to display the list of disks  one the datanode as well as the list of datapartitions of the disk , more dispaly information details you can contact with me

Hello, I want to try https://github.com/cubefs/cubefs/issues/1910

Hi，@gueFDF you're welcome!
https://github.com/cubefs/cubefs/issues/1910 is Assigned to you .
please feel free to ask me if you have any questions.

Hello, I want to try #1910

Hi, gueFDF,
https://github.com/cubefs/cubefs/issues/1910 is assigned to you.
If you have any question, please contact me @true1064

Hello, the issue #1901 has been finished, i now choose #1896 , have already create pull request

Hello, I'm interested in #1922 .

Hello, I'm interested in #1922 .
ok, #1922  is assigned to you.If you have any questions,  you can contact with me

Hello, I'm interested in #1922 .
ok, #1922  is assigned to you.If you have any questions,  you can contact with me

Thank you.

Hello, the issue #1901 has been finished, i now choose #1896 , have already create pull request

#1896 is assigned to you.
You can keep asking me if you have any questions。

Hello, I just opened a pull request for #1922, and I'm edge to try topic #1918.

Hello, I want to try https://github.com/cubefs/cubefs/issues/1914

Hi, I wanna try https://github.com/cubefs/cubefs/issues/1913

Hello, I want to try #1914

Sorry, The issue has some incompleteness and is closed for now. You can try others.

Hi, I wanna try #1913

@Zhytou  Sorry, It seems that someone else has finished this, see #2126.  Many other issues are waiting for you.

Hello！Can I try the issue #1908 ?

Hello！Can I try the issue #1908 ?

@baijiaruo plz check this out


add transformers model to be used as judge

Will need to follow the same approach as https://github.com/huggingface/lighteval/pull/146

Hey @clefourrier! I'll build that one if no assignee for now


WIP: ex_machina support

@mathieuprog This produces the following error:
mix test
Compiling 3 files (.ex)

18:06:30.660 [info]  == Running<PHONE_NUMBER>0000 PolymorphicEmbed.CreateTables.change/0 backward

18:06:30.662 [info]  drop table reminders

18:06:30.665 [info]  == Migrated<PHONE_NUMBER>0000 in 0.0s
warning: redefining module PolymorphicEmbed.CreateTables (current version defined in memory)
  test/support/migrations/20000101000000_create_tables.exs:1

18:06:30.702 [info]  == Running<PHONE_NUMBER>0000 PolymorphicEmbed.CreateTables.change/0 forward

18:06:30.702 [info]  create table reminders

18:06:30.711 [info]  == Migrated<PHONE_NUMBER>0000 in 0.0s
........

  1) test inputs_for/4 (PolymorphicEmbedTest)
     test/polymorphic_embed_test.exs:434
     Assertion with == failed
     code:  assert contents == ~s"<input id=\\"reminder_channel___type__\\" name=\\"reminder[channel][__type__]\\" type=\\"hidden\\" value=\\"email\\"><input id=\\"reminder_channel_address\\" name=\\"reminder[channel][address]\\" type=\\"text\\" value=\\"a\\">"
     left:  "<input id=\"reminder_channel___type__\" name=\"reminder[channel][__type__]\" type=\"hidden\" value=\"email\"><input id=\"reminder_channel_address\" name=\"reminder[channel][address]\" type=\"text\">"
     right: "<input id=\"reminder_channel___type__\" name=\"reminder[channel][__type__]\" type=\"hidden\" value=\"email\"><input id=\"reminder_channel_address\" name=\"reminder[channel][address]\" type=\"text\" value=\"a\">"
     stacktrace:
       test/polymorphic_embed_test.exs:456: (test)

.........

Finished in 0.3 seconds
18 tests, 1 failure

I'm not sure what the issue is.

(Allow edits by maintainers is on, feel free to change things yourself...)

I think the key was to change the cast function to accept a struct instead of attributes?
Could you explain why cast receives a struct?

@mathieuprog We're not really casting anything at all anymore since we have a custom cast fn. We could also just raise an error to cast via our fn instead. That will break ex_machina however.

Why did you decide to change the cast function if it's kinda unused? Just curious

Because i simplified some things that caused problems while refactoring. My first choice was to raise an error, but that breaks a test.
Also I want an error if people try to cast via the normal cast.
If you're ok with breaking the machina test, I'd rather just raise an error no matter what is provided to the fn.

There will be complaints. What if we check if we are in the test environment and that ex_machina is a dependency?

@mathieuprog that would be a possibility. I'm not sure though why we would not allow this in general for other libraries.
The complete opposite would work too:

deprecate custom cast
People use normal cast instead

You mean stop using cast_polymorphic_embed in favor of cast?
That won't work. The library at first worked through cast. Only recently cast_polymorphic_embed has been introduced. To receive the changeset.
https://github.com/mathieuprog/polymorphic_embed/issues/10

@mathieuprog that makes sense
We could also forbid cast alltogether and provide a custom ex machina strategy. it seems one should be able to override it. That way we would not give it access to special / private apis

@mathieuprog I'll push a "strict" version with an error being raised in cast and I'll see if we can add an ex_machina strategy.

That's awesome 😐 of course this is the way to go... We need to update the readme as well in order to document the ex_machina strategy and how to use it. Just a code snippet is sufficient.

The reason why we added cast_polymorphic_embed is to get the changeset to retrieve the existing data. That's why you could see in the code the merge of the data with the params. I don't think there is any way to use cast and keep the existing data.
The failing test before the introduction of  cast_polymorphic_embed is named "keep existing data".

@mathieuprog I've amended the PR. This shows that it is possible in general, but I've copied a lot of code.
I think if we like this route in general, we should open a ticket at ex_machina to make this simpler without copying everything.

You decided to return the :error atom instead of raising eventually? What are your reasons?

@mathieuprog No real reason, I'm not sure which is better.

Raising an error allows to send a message to the developer, e.g. use cast_polymorphic_embed for field X instead

@mathieuprog Before we talk about details:

How do you like the PRs direction in general?
Would you be willing to coordinate with ex_machina to resolve the issue of a lot of duplicated code?

@mathieuprog The oposite could also be done: Add optional support to ex_machina instead of this way around. That would be easier to implement I think.

The PRs are amazing:) I can also grant you more rights in this project if you depend on it, as you have a good understanding of the codebase. Let me know in that case.
For ex_machina I have been thinking that you did enough. If now an ex_machina user who has the need of using ex_machina with polymorphic_embed asks for support (and the support and test that you have seen actually were written based on a request from an ex_machina user), we now offer a base (what you have done) to work from; he is free to contribute more for better support.
I think we both have a lack of interest to work with ex_machina so I consider this already a great effort for anyone who needs it.

The opposite could also be done: Add optional support to ex_machina instead of this way around

I prefer the least possible dependency to ex_machina. So the strategy is the way to go?

@mathieuprog I'm already maintainer of far too many libraries and I'm fine just creating PRs :)
What are you saying with this?

Should we add the files as they are in this PR?
Should we remove the ex_machina specific stuff and people can look up this PR for reference?

In any case I can change the :error => raise to an error. What error message would you like?

PolymorphicEmbed must not be casted using Ecto.Changeset.cast/3, use PloyMorphicEmbed.cast_polymorphic_embed/2 instead.

I prefer the least possible dependency to ex_machina. So the strategy is the way to go?

We'll have some kind of chicken / egg problem here. I suppose ex_machina might say the same thing. The only difference is that this library would have to duplicate basically the whole ecto strategy while ex_machina only has to add a few lines.

Should we add the files as they are in this PR?

I didn't look thoroughly yet but I would add the files, and redirect a future requester to these files and this discussion. But of course feel free to open an issue on ex_machina's side, but that's up to you:D
I personally don't mind to have files in draft state in an ex_machina folder.

What error message would you like?
PolymorphicEmbed must not be casted using Ecto.Changeset.cast/3, use PloyMorphicEmbed.cast_polymorphic_embed/2 instead.

Good but it's cast/4, not cast/3
And "PloyMorphicEmbed" has typos.
👍

How do you see finishing up that PR? I think all what's left is the error message? Or do you have anything else in mind?

@mathieuprog Changed
About the files from ex_machina: Can we include MIT licensed code in an Apache licensed library?

I will study your ex_machina code now:) by the way you mentioned there was an error (https://github.com/mathieuprog/polymorphic_embed/pull/26#issuecomment-749089178); I checkout the code and the tests pass. So you fixed that error?

@mathieuprog I fixed the test, there was an error in my code that the test correctly identified.

Issue posted on ex_machina's repo:
https://github.com/thoughtbot/ex_machina/issues/407

It might take several days, maybe weeks to get an answer, so can we remove the support of ex_machina at all for now?
Also I linked a file in the ex_machina issue, so if you push further maybe that link will not work anymore? Is it possible to keep your work for a while while removing it for merging?

Maybe we can create a new PR based on this one, and prefix this one by "[ON HOLD]" ?

@mathieuprog I'll create a new one without the ex_machina files.

@mathieuprog This PR now only contains ex_machina stuff and is based on the new #27

Perfect!

Hello 👋  is there a chance this could be merged soon ?

@richthedev This is currently such an ugly hack that I don't think it should be merged.
It is really ugly since a lot of code had to be copied since we couldn't hook into the existing ex_machina code.
The options currently are:

Wait until we get some results in this PR & https://github.com/thoughtbot/ex_machina/issues/407
Copy the files from this PR and add them to you own project

@maennchen Thanks for the swift response.

An ex_machina maintainer https://github.com/thoughtbot/ex_machina/issues/407 asked for ideas but we didn't get back with any yet.
I thought of a few:
1. Use of config in the main application
config :ex_machina, :cast_custom_types, MyApp.ExMachina.CastCustomTypes

MyApp.ExMachina.CastCustomTypes would have to implement a behaviour such as:
defmodule MyApp.ExMachina.CastCustomTypes do
  @behaviour ExMachina.CastCustomTypes

  @impl true
  def cast_custom_types(struct) do
    struct
    |> PolymorphicEmbed.ExMachina.CastCustomTypes.cast_custom_types()
    |> OtherLibrary.ExMachina.CastCustomTypes.cast_custom_types()
  end

  @impl true
  def schema_custom_types(struct) do
    PolymorphicEmbed.ExMachina.CastCustomTypes.schema_custom_types(struct)
      ++ OtherLibrary.ExMachina.CastCustomTypes.schema_custom_types(struct)
  end
end

defmodule PolymorphicEmbed.ExMachina.CastCustomTypes do
  @behaviour ExMachina.CastCustomTypes

  @impl true
  def cast_custom_types(struct) do
    cast_polymorphic_embeds(struct)
  end

  @impl true
  def schema_custom_types(struct) do
    schema_polymorphic_embeds(struct)
  end
end

This would be the easiest to code on ex_machina's side because the configuration is globally accessible.
2. Use of metaprogrammaing
The other way to inject code is through the use of use, but it seems already very complex ex_machina's side where you have use-inception: https://github.com/thoughtbot/ex_machina/blob/v2.7.0/lib/ex_machina/strategy.ex#L63
Then we'd have in the tests:
use ExMachina.Ecto, strategy: MyApp.ExMachina.EctoStrategy

defmodule MyApp.ExMachina.EctoStrategy do
  use ExMachina.EctoStrategy, cast_custom_types: [PolymorphicEmbed.ExMachina.CastCustomTypes]
end

defmodule PolymorphicEmbed.ExMachina.CastCustomTypes do
  @behaviour ExMachina.CastCustomTypes

  @impl true
  def cast_custom_types(struct) do
    cast_polymorphic_embeds(struct)
  end

  @impl true
  def schema_custom_types(struct) do
    schema_polymorphic_embeds(struct)
  end
end

3. Dependency
Or ask ex_machina maintainers to detect the use of PolymorphicEmbed library and hardcode a module to call:
if Code.ensure_loaded?(PolymorphicEmbed) do
  PolymorphicEmbed.ExMachina.#function
end

And have ex_machina have an optional dependency on PolymorphicEmbed.
Thoughts?

Any updates?
ExMachina is a very common library for Ecto users. I really hope this problem will be solved soon.

@nallwhy it does not seem it will be solved any time soon except if someone that needs this comes up with a solution. The ex_machina library needs to call our custom cast function, there's an issue open on their side.

Closing. See: https://github.com/beam-community/ex_machina/issues/407#issuecomment-2132656371


Support the grid from Carbon Design System

Detailed description

Add support for grid from Carbon Design System to be able to create a responsive design. The grid, row and column can be angular directives.

Is this a feature request (new component, new icon), a bug, or a general issue?
Yes

Is this issue related to a specific component?
No

What browser are you working in?
All supported browsers

What version of the Carbon Design System are you using?
Latest

What offering/product do you work on? Any pressing ship or release dates we should be aware of?
IBM Assess

related to #47


get_allocation_stats needs an init guard in 0.57.x, since new envvar NRT_STATS

    def get_allocation_stats(self):
        """
        Returns a namedtuple of (alloc, free, mi_alloc, mi_free) for count of
        each memory operations.
        """
        # No init guard needed to access stats members <--------- this assumption is broken in 0.57.1, I think, since stuart's new PR about NRT_STATS
        return _nrt_mstats(alloc=_nrt.memsys_get_stats_alloc(),
                           free=_nrt.memsys_get_stats_free(),
                           mi_alloc=_nrt.memsys_get_stats_mi_alloc(),
                           mi_free=_nrt.memsys_get_stats_mi_free())

When you try this:
python -c "import os; os.environ['NUMBA_NRT_STATS'] = '1'; from numba import config; print(config.NRT_STATS); import numba; rtsys = numba.core.runtime.rtsys; print('[NRT] before:' + str(rtsys.get_allocation_stats())); print('numba.__version__', numba.__version__)"
1
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "numba/core/runtime/nrt.py", line 110, in get_allocation_stats
    return _nrt_mstats(alloc=_nrt.memsys_get_stats_alloc(),
RuntimeError: NRT stats are disabled.

Related with #8235 , in 0.56.x, this bash won't have this exception.
gentle cc @stuartarchibald

But rtsys.initialize(...) need a context argument, not sure which fix is better for this issue. Maybe we need a dummy context, or a separate method for opening NRT_STATS for nrt.

Hi @dlee992, could you share a code sample that reproduces this error?

@guilhermeleobas
Execute this cmd python -c "import os; os.environ['NUMBA_NRT_STATS'] = '1'; from numba import config; print(config.NRT_STATS); import numba; rtsys = numba.core.runtime.rtsys; print('[NRT] before:' + str(rtsys.get_allocation_stats())); print('numba.__version__', numba.__version__)"
I think you will see the same error like me?

Yes, sorry! I forgot you shared this example before.
I think this happens because the NRT was never initialized:
https://github.com/numba/numba/blob/f4c4afcb180193064a0c985246c7c71d007c6b1d/numba/core/cpu.py#L61-L66
If you call any jitted function, the NRT is initialized and your example works:
import os
import numba
import numpy as np
from numba import config

os.environ['NUMBA_NRT_STATS'] = '1'
print(config.NRT_STATS)

rtsys = numba.core.runtime.rtsys

@numba.njit
def foo():
    return np.arange(5)
foo()

print('[NRT] before:' + str(rtsys.get_allocation_stats()))
print('numba.__version__', numba.__version__)

Yes, thanks for your time. But before 0.57, NRT can be used without calling any jitted function first, and in principle, NRT stats should be a global stats, no need to call jitted function first? So I want to discuss whether we can keep this behaviour as before.

The NRT initialisation was made lazy in 0.57 to improve import time (so as to not start compiling things just because an @njit decorated function is encountered) and also compilation time in the case of compiling for a target where the NRT is not used, xref #8438. The NRT cannot be used without being initialised and I don't think there's any guarantee made by Numba about the state of it. I think it's fine to make a change so it's more clear what the problem is in the above case. Let's discuss at the meetings as noted by @guilhermeleobas.

close this for now. looks like no similar complaint about this.


Deleting signal with connected instrument crashes application

ASSERT failure in QVector::operator[]: "index out of range", file /usr/include/qt5/QtCore/qvector.h, line 369
The program has unexpectedly finished.

Fixed during refactor.


No module named 'selective_scan_vmamba'

No module named 'selective_scan_vmamba' will be prompted during training and testing, but training can be normal.

Yes. The VMamba authors implement multiple selective scan operations such as selective_scan_cuda_core, which may have higher computation speed. But the original selective_scan_cuda also works.
I will update the instructions and model file to make the choices of operations optional.


Is it possible to add session for requests?

We also need session middleware like exspres-session for identify all request, do you have any ideas?

I was taking a look at this earlier: https://github.com/denjucks/session
Would this be compatible with Attain?

https://github.com/denjucks/session/pull/2
I already make a supporting middleware and waiting for merging it. Please bear with me :)

@devalexqt @Coteh  Good news! now we can use it https://deno.land/x/session

Very nice!

Awesome! 👍

To get session id  from req: req.session.sessionId


Annotations to clean up boilerplate in executor

Boilerplate code in many executor methods can be eliminated with custom annotations like:

PlayerOnly

This is actually already handled with playerOnlyCommands in the connector, and I don't think support for annotations is where this project should go.


[BUG] - DropdownItem doens't recpect props form the as component.

NextUI Version
2.2.10
Describe the bug
When supplying as prop to DropdownItem , TS signals an error for the as's component props. Example:
<DropdownItem as={Link} to="/about">About</DropdownItem>

Here signals an error fro the to prop doesn't exists.
However there is no error when I make:
<NavbarBrand as={Link} to="/about"><NavbarBrand>

I guess there is discrepancy how these components processes their props.
Your Example Website or App
No response
Steps to Reproduce the Bug or Issue
Follow code above
Expected behavior
TS shouldn't signal errors on as's component props.
Screenshots or Videos
No response
Operating System Version
Linux
Browser
Firefox

I think beacuse the as prop is default prop about nextui, you can see it in the type HTMLNextUIProps, But for this component, It did not implement the function of AS, just like the offcial website did not show the API


Feature: Add a section for Regional Pizza

Type of feature
🍕 Feature
Current behavior
We currently have categories for pizza recipes and facts. It would be nice for people to be able to add their regional pizza styles to this repo as well.
Suggested solution

Add a section for regional pizza styles in the readme that replicates facts and recipes
Create a regional-pizza.md file and replicate the organization of pizza-facts.md
remove the pizza styles section from the facts doc.

Additional context
No response
Code of Conduct

[X] I agree to follow this project's Code of Conduct

Contributing Docs

[X] I agree to follow this project's Contribution Docs

That's a great idea @BekahHW! :) This would be a great way for contributors to introduce themselves. I'll make the PR for this if you're open.

Made the PR @BekahHW! :)


Fixes up rendering over HTTPS link

https://gsa.github.io breaks, the stylesheet is blocked as active mixed content. This PR fixes it.

Thanks!


text_generation.errors.UnknownError: Service Unavailable

System Info
I was trying to run gradio with text-generation, seems this a problem in most spaces:
example: https://huggingface.co/spaces/uwnlp/guanaco-playground-tgi
supposed to return text, but raises an error. Do look into it soon.

the space seems to work perfectly fine.


Update to actions/upload-artifact@v4 and actions/download-artifact@v4

Tech Debt
Starting with actions/upload-artifact@v4, GitHub artifacts are immutable and you cannot upload to the same artifact multiple times.
This repo's GitHub workflows currently use a single test_results artifact to combine results from multiple test jobs. To support actions/upload-artifact@v4, these workflows will need to be updated to use separate artifacts for each job. I don't know how to download a specific group of artifacts without knowing their names, but it looks like we can download all artifacts and then use the ones we care about.
See https://github.com/actions/toolkit/tree/main/packages/artifact for more info.
AB#2605029

Now there is a deprecation schedule: https://github.com/actions/upload-artifact

actions/upload-artifact@v3 is scheduled for deprecation on November 30, 2024. Learn more. Similarly, v1/v2 are scheduled for deprecation on June 30, 2024. Please update your workflow to use v4 of the artifact actions. This deprecation will not impact any existing versions of GitHub Enterprise Server being used by customers.

Also, now there are recommendations on how to update workflows that rely on merging outputs of multiple jobs into the same artifact: https://github.com/actions/upload-artifact/blob/main/docs/MIGRATION.md


Primarily dropping python 2. Added pre-commit and github actions

Primarily dropping python 2.
Added pre-commit and github actions for flake8 & isort, plus pyupgrade in the pre-commit.

The settings need to be added to run the linters and prevent merges without passes.

The settings need to be added to run the linters and prevent merges without passes.

Who's got settings access?

Alongside these pre-commit setups, it'd be ideal to also include pre-commit CI to keep the versions of hooks updated;
https://github.com/marketplace/pre-commit-ci/plan/MDIyOk1hcmtldHBsYWNlTGlzdGluZ1BsYW42MTI2#pricing-and-setup
(This needs to be installed to the repos as we merge these hooks)

@NicolaiRidani before I forget about this, need 2 jobs doing by someone with settings access to wrap this up.


User First and Last name required

Changelog

First and Last name are required when creating or editing users
Error message for blank email phrasing adjusted

Trello card 1160

@amichard Updates finished


Setting  defaultPageSize to a value 0-9 or 11-19 strangely sets the paging dropdown to "5 rows"

Describe the bug
In the demos at: https://react-table.js.org/#/story/simple-table the code on the left allows you to change the defaultPageSize.  If you set it to a number from 1-9 or 11-19 it only shows "5 rows" on the paging drop down in the right hand panel.  My code also reflects the same problem.  The grid renders with the specified number of rows... it just doesn't reflect on the paging drop down.
To Reproduce
Steps to reproduce the behavior:

Go to https://react-table.js.org/#/story/simple-table
Change the code to be: defaultPageSize={9}
View the pane on the right to see the number of rows change to "5 rows" (bug)
Change the code to be: defaultPageSize={10}
View the pane on the right to see the number of rows change to "10 rows" (expected)
Change the code to be: defaultPageSize={13}
View the pane on the right to see the number of rows change to "5 rows" (bug)
Change the code to be: defaultPageSize={20}
View the pane on the right to see the number of rows change to "20 rows" (expected)

Expected behavior
See above outcomes
Codesandbox!
This works on your current demo sandboxes
Screenshots
Desktop (please complete the following information):

OS: PC or Mac
Chrome
70.0.3538.110 (Official Build) (64-bit)

Seeing the same thing when we set the default page size to 1000.
The number of rows that are displayed is correct and the# of pages is correct, just the number of rows is incorrect.
Code sandbox based on the simple table example w/
defaultPageSize={1000}
https://codesandbox.io/s/8zmx6kkrlj


Add support for Carbon Defi

Revision checks

[x] Used smart contracts were audited.
[x] Your Safe App include a manifest.json file at the root with the required data.
[x] The app can be loaded as a custom Safe App in the Apps section of https://app.safe.global.
[x] The app auto-connects to the Safe.
[x] You are able to trigger and execute one transaction with a Safe.
[x] RPC requests are optimized (not triggering many requests in a very short time period).

Name/Description

Carbon Defi
Type

New addition

Compatible Networks

- Mainnet

Audit document

https://github.com/bancorprotocol/carbon-contracts/tree/dev/docs/audits
Code for review

https://github.com/bancorprotocol/carbon-contracts
IPFS hash/App URL

https://app.carbondefi.xyz
Team information

- Project logo: https://app.carbondefi.xyz/logo512.png
- Project landing page: https://carbondefi.xyz
- Team or discord contact: https://discord.gg/bancor
- Twitter link: https://twitter.com/carbondefixyz
- Github link: https://github.com/bancorprotocol/carbon-contracts

Good morning! QA from safe apps team here 😄 The app is working nicely. I've noticed that on chromium based browsers (Chrome and Brave in my case) the cookie pop up is present every time the app is opened or refreshed after accepting or rejecting them. Would it be possible to get rid of it? I see that on Firefox for example the pop up is never shown.
https://user-images.githubusercontent.com/92332710/236399001-10783baa-dfd2-4db1-8b9a-713940d992ee.mp4
Thanks!

@dasanra
Thank you for the feedback and heads up.
Please check again

All good now, thanks!
I will let the team know and the app should be all good to be listed. We will post a message here when the addition is performed.
Cheers!

App should be available now


Request utils fails on 204 HTTP response

When using the request utils to call an API, this API may return a 204 HTTP response (success, no content).
When this is the case, the request.parseJSON() function fails because it is trying to parse an empty string to JSON. This error is unexpected, 204 is a success error code, relatively commonly used, and should be gracefully handled.
I'd expect parseJSON() to return null when parsing a 204. I'd be pleased to submit a PR if it seems like a valid concern to you!

thank you @williamdclt—a PR would be much appreciated!


Semi-autogenerated cli reference

First step for #171
This PR contains auto-generation machinery for CLI reference.
_generate_cli_spec.py generates spec.json file from mlem.cli.app object
_generate_options.py reads spec.json and for each command generates sections and inserts them into respective .md files
Auto-generated sections:

first paragraph (between cmd name and synopsys): mlem cli help message
usage

usage text
arguments with help
subcommands (for groups)

options: list of cli options with help

There are also 2 not generated sections: Description and Examples.
Example: suppose we have a key in spec.json
"apply": {
    "args": {
      "args": [
        {
          "decl": "model",
          "help": "Path to model object  [required]"
        }
      ],
      "impls": null,
      "impl_metavar": null,
      "subcommands": null
    },
    "options": [
      {
        "decl": "-p, --project TEXT",
        "help": "Path to MLEM project  [default: (none)]"
      }
    ],
    "usage": "Usage: mlem apply [options] model data",
    "doc": "Apply a model to data. The result will be saved as a MLEM object to `output` if\nprovided. Otherwise, it will be printed to `stdout`."
  }

And apply.md
# apply

AAAA

## Synopsys

`` `usage
BBB
`` `

## Description

CCC

## Options

DDD

## Examples

EEE

It will be transformed in place into:
# apply

Apply a model to data. The result will be saved as a MLEM object to `output` if
provided. Otherwise, it will be printed to `stdout`.

## Synopsis

`` `usage
Usage: mlem apply [options] model data

Arguments:
- `model`: Path to model object  [required]
`` `

## Description

CCC

## Options

- `-p, --project TEXT`: Path to MLEM project  [default: (none)]

## Examples

EEE

Feel free to suggest changes to generated content formatting and to spec schema

less hacky than https://github.com/tqdm/tqdm/blob/master/.meta/mkdocs.py :)

Should mlem dev be included @mike0sv? I'm curious why that command was not generated. Rel. https://github.com/iterative/mlem.ai/issues/180.
Also, are there clear next steps to move this forward or are we stuck somewhere? Thanks

I'd say lets merge this! I created a separate release/0.3.0 branch just like in core repo so we can finalize bits of work on new release docs without going live with them


Feature request: turn div_container_for_formatted into a web component

This issue was made when I thought web components can solve most of my problem here. I don't believe it any more.
When the needs are all covered by the functionality of a certain web components, It's fine and all. But when it can't fully cover the needs, it makes the problem even more complicated to be solve.
So, I think I won't use a web components for now.


Update meta.yaml

Make small wording change to try to re-trigger conda-forge publication of 1.2.4.

Checklist

[ ] Used a personal fork of the feedstock to propose changes
[ ] Bumped the build number (if the version is unchanged)
[ ] Reset the build number to 0 (if the version changed)
[ ] Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
[ ] Ensured the license file is being packaged.

@conda-forge-admin, please rerender


Extend isUserProvided() to accept a name parameter

Summary

This PR is a feature
It does the following (modify list as needed):

Adds a name parameter (via overload) to Container::isUserProvided to allow for easy querying of subobjects

Provides a better solution for the workaround implemented in https://github.com/LLNL/serac/pull/491

In the future (i.e. outside the scope of this PR), it might be worthwhile considering better names for these functions, since contains might imply that is in the user provided data, rather than in the schema.

I definitely agree that there's some ambiguity with these names - isUserProvided I think is clear because it returns true if something was explicitly provided/specified by the user in the input file, but contains will also return true if a default was provided.  As of right now there's no way of checking to see if something was added to the schema but not provided either via a default or the input file, though that's what contains used to do.  isUserProvidedOrDefaulted is more accurate but less succinct, so I'll have to think about it.

@joshessman-llnl wrote:

contains will also return true if a default was provided.

Now I'm confused again -- it sounds like there are several categories:

isUserProvided() -- in the schema and the user input provided a value
contains() -- in the schema, and either the user input provided a value or the schema provides a default
???  -- in the schema; the user did not provide a value and there is no default
???  -- not in the schema, but the user provided it in the input.  (I don't think this has a function, but can be obtained indirectly through unexpectedNames() )

Is there a function to check if a   Field/Function/Container/...   is in the schema, but doesn't have a value ?

@joshessman-llnl wrote:

contains will also return true if a default was provided.

Now I'm confused again -- it sounds like there are several categories:

isUserProvided() -- in the schema and the user input provided a value

contains() -- in the schema, and either the user input provided a value or the schema provides a default

???  -- in the schema; the user did not provide a value and there is no default

???  -- not in the schema, but the user provided it in the input.  (I don't think this has a function, but can be obtained indirectly through unexpectedNames() )

Is there a function to check if a Field/Function/Container/... is in the schema, but doesn't have a value ?

All the above is correct - there is not currently (convenient) functionality to check if something is just in the schema (the third bullet pt), though if a user really wanted to they could search "manually" with Container::getChildFields/ Container::getChildContainers etc.
I'm not sure how helpful this additional functionality would be - since the Inlet user is obviously in control of what gets added to the schema, they should "know" what's in the schema later on.  An exception to this might be if things were conditionally added to the schema based on some other (external) condition, but @white238 and I had previously discussed this and decided that that's not really something we'd want to encourage - that is, we'd prefer that the schema always be the same no matter what.  I could definitely be missing something though, was there a use case you had in mind?

Looks great @joshessman-llnl !  Can you add a section to the sphinx docs about the difference between contains and isUserProvided?


Port access denied

I try to connect to my arduino UNO, but show this message: "Error starting serial port on Arduino Uno (COM4) Error: Opening COM4:  Access denied"

This usually happens if the port is already in use, for example, by the Arduino app.
It's unlikely this is a bug in the app itself. Windows needs to unlock the port before the app is able to access it. If the port is locked or blocked by the OS, the app won't be able to access it.

Tks a lot, I just close the arduino app and it work. tks

De: curiores @.>
Enviado: sábado, 17 de junho de 2023 18:20
Para: curiores/SerialAnalyzer @.>
Cc: wagmaz @.>; Author @.>
Assunto: Re: [curiores/SerialAnalyzer] Port access denied (Issue #6)
This usually happens if the port is already in use, for example, by the Arduino app.
It's unlikely this is a bug in the app itself. Windows needs to unlock the port before the app is able to access it. If the port is locked or blocked by the OS, the app won't be able to access it.
—
Reply to this email directly, view it on GitHubhttps://github.com/curiores/SerialAnalyzer/issues/6#issuecomment-1595863306, or unsubscribehttps://github.com/notifications/unsubscribe-auth/BAUSRNGLKT6TBMRUW5IU2I3XLYNRZANCNFSM6AAAAAAZKJMEI4.
You are receiving this because you authored the thread.Message ID: @.***>

No problem 😉


Maven Plugin: Generated files are always detected as "Stale" by java compiler.

The files generated by the plugin should be checked with a hash code or other mechanism, and not re-generated if the contents of the file have not changed.
By creating / overwriting the generated files in the target directory, mvn compile always detects the files have changed.
The increases build time for no reason.
Is there a workaround / solution for this, or is it something that needs to be added to the plugin?
[DEBUG] Stale source detected: /Users/s/IdeaProjects/cs/target/generated-sources/com/ck/api/response/Application.java
[DEBUG] Stale source detected: /Users/s/IdeaProjects/cs/target/generated-sources/com/ck/api/response/Inflows.java
[DEBUG] Stale source detected: ...

and so on.

Hi Jim

The files generated by the plugin should be checked with a hash code or other mechanism, and not re-generated if the contents of the file have not changed.

This plugin does not maintain old source code or access to source code generated previously, so there's no way to compare old with new.

mvn compile always detects the files have changed

I believe it's the Maven compile plugin that should be skipping compilation if the source is identical (by hash) to the source used to generate the previously compiled file.
Are you experiencing this bug by any chance:
https://issues.apache.org/jira/browse/MCOMPILER-209
?

Hi @joelittlejohn,
Thanks very much for the quick response.
Perhaps you are right, and I agree with the last comment on the bug, maybe it's time for gradle.
I am however still confused as to how the utility (plugin) would generate files, and at the same time not be able to read what's being replaced and not replace if it's identical?

Hi @joelittlejohn,
I did a bit of an investigation and it really seems like a bug in jsonschema2pojo-maven-plugin.
I encountered the same issue and found out it works in version 1.0.0-alpha2 but does not work in version 1.0.0-alpha4 (there is a broken maven plugin1.0.0-alpha3 so I have not tried).
This is the output of mvn compile when using jsonschema2pojo-maven-plugin:1.0.0-alpha2 :
[INFO]
[INFO] --- jsonschema2pojo:1.0.0-alpha2:generate (default) @ my-module ---
[INFO]
[INFO] --- resources:3.3.0:resources (default-resources) @ my-module ---
[INFO] Copying 47 resources
[INFO]
[INFO] --- compiler:3.11.0:compile (default-compile) @ my-module ---
[INFO] Nothing to compile - all classes are up to date
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.956 s
[INFO] Finished at: 2023-08-11T14:59:24+02:00
[INFO] ------------------------------------------------------------------------

And this is the output of mvn compile when using jsonschema2pojo-maven-plugin:1.0.0-alpha4 :
[INFO]
[INFO] --- jsonschema2pojo:1.0.0-alpha4:generate (default) @ my-module ---
[INFO]
[INFO] --- resources:3.3.0:resources (default-resources) @ my-module ---
[INFO] Copying 47 resources
[INFO]
[INFO] --- compiler:3.11.0:compile (default-compile) @ my-module ---
[INFO] Changes detected - recompiling the module! :source
[INFO] Compiling 90 source files with javac [debug target 17] to target/classes
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  5.171 s
[INFO] Finished at: 2023-08-11T14:59:43+02:00
[INFO] ------------------------------------------------------------------------

I noticed that when using jsonchema2pojo-maven-plugin:1.0.0-alpha4 files generated under /target/classes/ have changed last modified date each time I run mvn compile. This was not happening with jsonschema2pojo-maven-plugin:1.0.0-alpha2. I suspect this to be the root cause that makes maven always recompile sources.
I am aware that this is an old and closed issue. Maybe shall I created a fresh new issue for that?
Thanks

Could you try adding the -X option to Maven to see what is the stale source file?
I don't see anything obvious between these releases to explain this yet. If you run the plugin, copy all sources to another dir, then run the plugin again, can you detect difference between the source files generated the first time and the second time?

It's not a trivial task, but if you get things set up nicely, you could bisect the log between alpha2 and alpha4 (mvn install each time) to narrow this down.

Thanks for the quick response.
And sorry, I made a mistake describing my observations. When I wrote /target/classes/ I meant /target/generated-sources/ - files with changed last modified date are under /target/generated-sources.
I tried to reduce json schemas in the module to just 1 and ran it with -X option and here is the output:
...
[DEBUG] CompilerReuseStrategy: reuseCreated
[DEBUG] useIncrementalCompilation enabled
[DEBUG] Stale source detected: /path/to/generated/Class.java
[INFO] Changes detected - recompiling the module! :source
...

So there is just this one file detected as stale.
I also tried creating a diff between debug logs from alpha2 and alpha4 and here it is:
< [DEBUG] Dependency collection stats {ConflictMarker.analyzeTime=582730, ConflictMarker.markTime=134860, ConflictMarker.nodeCount=35, ConflictIdSorter.graphTime=434244, ConflictIdSorter.topsortTime=314761, ConflictIdSorter.conflictIdCount=19, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=3365288, ConflictResolver.conflictItemCount=34, DfDependencyCollector.collectTime=107135769, DfDependencyCollector.transformTime=6529839}
---
> [DEBUG] Dependency collection stats {ConflictMarker.analyzeTime=632985, ConflictMarker.markTime=169156, ConflictMarker.nodeCount=35, ConflictIdSorter.graphTime=427201, ConflictIdSorter.topsortTime=293091, ConflictIdSorter.conflictIdCount=19, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=3794057, ConflictResolver.conflictItemCount=34, DfDependencyCollector.collectTime=135411251, DfDependencyCollector.transformTime=6994187}
133c133
< [DEBUG] Dependency collection stats {ConflictMarker.analyzeTime=1973007, ConflictMarker.markTime=1027889, ConflictMarker.nodeCount=736, ConflictIdSorter.graphTime=1926133, ConflictIdSorter.topsortTime=204581, ConflictIdSorter.conflictIdCount=248, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=33305553, ConflictResolver.conflictItemCount=705, DfDependencyCollector.collectTime=559392559, DfDependencyCollector.transformTime=38536354}
---
> [DEBUG] Dependency collection stats {ConflictMarker.analyzeTime=1915134, ConflictMarker.markTime=956716, ConflictMarker.nodeCount=736, ConflictIdSorter.graphTime=1447912, ConflictIdSorter.topsortTime=207831, ConflictIdSorter.conflictIdCount=248, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=35355639, ConflictResolver.conflictItemCount=705, DfDependencyCollector.collectTime=589426823, DfDependencyCollector.transformTime=40022959}
669c669
< [DEBUG] Goal:          org.jsonschema2pojo:jsonschema2pojo-maven-plugin:1.0.0-alpha2:generate (default)
---
> [DEBUG] Goal:          org.jsonschema2pojo:jsonschema2pojo-maven-plugin:1.0.0-alpha4:generate (default)
701c701
<   <outputDirectory default-value="${project.build.directory}/java-gen">/home/tony/path/to/my/module/target/generated-sources</outputDirectory>
---
>   <outputDirectory default-value="${project.build.directory}/generated-sources/jsonschema2pojo">/home/tony/path/to/my/module/target/generated-sources</outputDirectory>
717c717`
<   <targetVersion default-value="1.6">${maven.compiler.target}</targetVersion>
---
>   <targetVersion default-value="${maven.compiler.target}">${jsonschema2pojo.targetJavaVersion}</targetVersion>
799c799
< [DEBUG] Dependency collection stats {ConflictMarker.analyzeTime=235611, ConflictMarker.markTime=98726, ConflictMarker.nodeCount=61, ConflictIdSorter.graphTime=91416, ConflictIdSorter.topsortTime=79062, ConflictIdSorter.conflictIdCount=32, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=1503664, ConflictResolver.conflictItemCount=60, DfDependencyCollector.collectTime=111400824, DfDependencyCollector.transformTime=2098194}
---
> [DEBUG] Dependency collection stats {ConflictMarker.analyzeTime=249678, ConflictMarker.markTime=62586, ConflictMarker.nodeCount=61, ConflictIdSorter.graphTime=84858, ConflictIdSorter.topsortTime=27408, ConflictIdSorter.conflictIdCount=32, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=1763854, ConflictResolver.conflictItemCount=60, DfDependencyCollector.collectTime=101029548, DfDependencyCollector.transformTime=2285863}
835,836c835
< [INFO] --- jsonschema2pojo:1.0.0-alpha2:generate (default) @ my-module ---
< [DEBUG] Using mirror maven-default-http-blocker (http://<IP_ADDRESS>/) for apache.snapshots (http://people.apache.org/repo/m2-snapshot-repository).
---
> [INFO] --- jsonschema2pojo:1.0.0-alpha4:generate (default) @ my-module ---
838,841c837,840
< [DEBUG] Dependency collection stats {ConflictMarker.analyzeTime=199554, ConflictMarker.markTime=92904, ConflictMarker.nodeCount=74, ConflictIdSorter.graphTime=40905, ConflictIdSorter.topsortTime=55586, ConflictIdSorter.conflictIdCount=50, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=1786030, ConflictResolver.conflictItemCount=74, DfDependencyCollector.collectTime=108508305, DfDependencyCollector.transformTime=2201955}
< [DEBUG] org.jsonschema2pojo:jsonschema2pojo-maven-plugin:jar:1.0.0-alpha2
< [DEBUG]    org.jsonschema2pojo:jsonschema2pojo-core:jar:1.0.0-alpha2:compile
< [DEBUG]       org.jsonschema2pojo:jsonschema2pojo-scalagen:jar:1.0.0-alpha2:compile
---
> [DEBUG] Dependency collection stats {ConflictMarker.analyzeTime=166016, ConflictMarker.markTime=45474, ConflictMarker.nodeCount=62, ConflictIdSorter.graphTime=24567, ConflictIdSorter.topsortTime=30401, ConflictIdSorter.conflictIdCount=39, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=1116583, ConflictResolver.conflictItemCount=62, DfDependencyCollector.collectTime=67074412, DfDependencyCollector.transformTime=1403782}
> [DEBUG] org.jsonschema2pojo:jsonschema2pojo-maven-plugin:jar:1.0.0-alpha4
> [DEBUG]    org.jsonschema2pojo:jsonschema2pojo-core:jar:1.0.0-alpha4:compile
> [DEBUG]       org.jsonschema2pojo:jsonschema2pojo-scalagen:jar:1.0.0-alpha4:compile
851,859d849
< [DEBUG]       com.google.android:android:jar:<IP_ADDRESS>:compile (version managed from default)
< [DEBUG]          commons-logging:commons-logging:jar:1.1.1:compile
< [DEBUG]          org.apache.httpcomponents:httpclient:jar:4.0.1:compile
< [DEBUG]             org.apache.httpcomponents:httpcore:jar:4.0.1:compile
< [DEBUG]             commons-codec:commons-codec:jar:1.9:test (scope managed from default) (version managed from default)
< [DEBUG]          org.khronos:opengl-api:jar:gl1.1-android-2.1_r1:compile
< [DEBUG]          xerces:xmlParserAPIs:jar:2.6.2:compile
< [DEBUG]          xpp3:xpp3:jar:1.1.4c:compile
< [DEBUG]          org.json:json:jar:20080701:compile
863,864d852
< [DEBUG]       com.squareup.moshi:moshi:jar:1.5.0:compile (version managed from default)
< [DEBUG]          com.squareup.okio:okio:jar:1.13.0:compile
889,890c877,878
< [DEBUG] Created new class realm plugin>org.jsonschema2pojo:jsonschema2pojo-maven-plugin:1.0.0-alpha2
< [DEBUG] Importing foreign packages into class realm plugin>org.jsonschema2pojo:jsonschema2pojo-maven-plugin:1.0.0-alpha2
---
> [DEBUG] Created new class realm plugin>org.jsonschema2pojo:jsonschema2pojo-maven-plugin:1.0.0-alpha4
> [DEBUG] Importing foreign packages into class realm plugin>org.jsonschema2pojo:jsonschema2pojo-maven-plugin:1.0.0-alpha4
892,895c880,883
< [DEBUG] Populating class realm plugin>org.jsonschema2pojo:jsonschema2pojo-maven-plugin:1.0.0-alpha2
< [DEBUG]   Included: org.jsonschema2pojo:jsonschema2pojo-maven-plugin:jar:1.0.0-alpha2
< [DEBUG]   Included: org.jsonschema2pojo:jsonschema2pojo-core:jar:1.0.0-alpha2
< [DEBUG]   Included: org.jsonschema2pojo:jsonschema2pojo-scalagen:jar:1.0.0-alpha2
---
> [DEBUG] Populating class realm plugin>org.jsonschema2pojo:jsonschema2pojo-maven-plugin:1.0.0-alpha4
> [DEBUG]   Included: org.jsonschema2pojo:jsonschema2pojo-maven-plugin:jar:1.0.0-alpha4
> [DEBUG]   Included: org.jsonschema2pojo:jsonschema2pojo-core:jar:1.0.0-alpha4
> [DEBUG]   Included: org.jsonschema2pojo:jsonschema2pojo-scalagen:jar:1.0.0-alpha4
905,912d892
< [DEBUG]   Included: com.google.android:android:jar:<IP_ADDRESS>
< [DEBUG]   Included: commons-logging:commons-logging:jar:1.1.1
< [DEBUG]   Included: org.apache.httpcomponents:httpclient:jar:4.0.1
< [DEBUG]   Included: org.apache.httpcomponents:httpcore:jar:4.0.1
< [DEBUG]   Included: org.khronos:opengl-api:jar:gl1.1-android-2.1_r1
< [DEBUG]   Included: xerces:xmlParserAPIs:jar:2.6.2
< [DEBUG]   Included: xpp3:xpp3:jar:1.1.4c
< [DEBUG]   Included: org.json:json:jar:20080701
916,917d895
< [DEBUG]   Included: com.squareup.moshi:moshi:jar:1.5.0
< [DEBUG]   Included: com.squareup.okio:okio:jar:1.13.0
929,930c907,908
< [DEBUG] Loading mojo org.jsonschema2pojo:jsonschema2pojo-maven-plugin:1.0.0-alpha2:generate from plugin realm ClassRealm[plugin>org.jsonschema2pojo:jsonschema2pojo-maven-plugin:1.0.0-alpha2, parent: jdk.internal.loader.ClassLoaders$AppClassLoader@5cb0d902]
< [DEBUG] Configuring mojo execution 'org.jsonschema2pojo:jsonschema2pojo-maven-plugin:1.0.0-alpha2:generate:default' with basic configurator -->
---
> [DEBUG] Loading mojo org.jsonschema2pojo:jsonschema2pojo-maven-plugin:1.0.0-alpha4:generate from plugin realm ClassRealm[plugin>org.jsonschema2pojo:jsonschema2pojo-maven-plugin:1.0.0-alpha4, parent: jdk.internal.loader.ClassLoaders$AppClassLoader@5cb0d902]
> [DEBUG] Configuring mojo execution 'org.jsonschema2pojo:jsonschema2pojo-maven-plugin:1.0.0-alpha4:generate:default' with basic configurator -->
1006c984
< [DEBUG] Dependency collection stats {ConflictMarker.analyzeTime=41417, ConflictMarker.markTime=42513, ConflictMarker.nodeCount=12, ConflictIdSorter.graphTime=13603, ConflictIdSorter.topsortTime=19241, ConflictIdSorter.conflictIdCount=9, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=219320, ConflictResolver.conflictItemCount=12, DfDependencyCollector.collectTime=29410358, DfDependencyCollector.transformTime=356789}
---
> [DEBUG] Dependency collection stats {ConflictMarker.analyzeTime=42909, ConflictMarker.markTime=19323, ConflictMarker.nodeCount=12, ConflictIdSorter.graphTime=11289, ConflictIdSorter.topsortTime=36168, ConflictIdSorter.conflictIdCount=9, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=201013, ConflictResolver.conflictItemCount=12, DfDependencyCollector.collectTime=26022745, DfDependencyCollector.transformTime=329108}
1039c1017
< [DEBUG]   (f) session = org.apache.maven.execution.MavenSession@3344d163
---
> [DEBUG]   (f) session = org.apache.maven.execution.MavenSession@16f7f59f
1132c1110
< [DEBUG] env.TERM_SESSION_ID: b1021635-e177-4298-8d3a-4d11aa94ad16
---
> [DEBUG] env.TERM_SESSION_ID: a401b2c0-876e-41c0-944c-eae704ec7d6e
1193c1171
< [DEBUG] jsonschema2pojo.version: 1.0.0-alpha2
---
> [DEBUG] jsonschema2pojo.version: 1.0.0-alpha4
1205c1183
< [DEBUG] maven.build.timestamp: 2023-08-12T17:38:06Z
---
> [DEBUG] maven.build.timestamp: 2023-08-12T17:36:43Z
1280c1258
< [DEBUG] Dependency collection stats {ConflictMarker.analyzeTime=50452, ConflictMarker.markTime=39844, ConflictMarker.nodeCount=17, ConflictIdSorter.graphTime=17116, ConflictIdSorter.topsortTime=26132, ConflictIdSorter.conflictIdCount=12, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=288029, ConflictResolver.conflictItemCount=17, DfDependencyCollector.collectTime=44545874, DfDependencyCollector.transformTime=445380}
---
> [DEBUG] Dependency collection stats {ConflictMarker.analyzeTime=42061, ConflictMarker.markTime=40206, ConflictMarker.nodeCount=17, ConflictIdSorter.graphTime=17205, ConflictIdSorter.topsortTime=26015, ConflictIdSorter.conflictIdCount=12, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=241976, ConflictResolver.conflictItemCount=17, DfDependencyCollector.collectTime=45251232, DfDependencyCollector.transformTime=396917}
1332c1310
< [DEBUG]   (f) session = org.apache.maven.execution.MavenSession@3344d163
---
> [DEBUG]   (f) session = org.apache.maven.execution.MavenSession@16f7f59f
1353c1331,1370
< [INFO] Nothing to compile - all classes are up to date
---
> [DEBUG] Stale source detected: /home/tony/path/to/my/module/target/generated-sources/path/to/generated/Class.java
> [INFO] Changes detected - recompiling the module! :source
> [DEBUG] Classpath:
> [DEBUG]  /home/tony/path/to/my/module/target/classes
> [DEBUG]  /home/tony/.m2/repository/org/hibernate/validator/hibernate-validator/6.1.7.Final/hibernate-validator-6.1.7.Final.jar
> [DEBUG]  /home/tony/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar
> [DEBUG]  /home/tony/.m2/repository/org/jboss/logging/jboss-logging/3.4.3.Final/jboss-logging-3.4.3.Final.jar
> [DEBUG]  /home/tony/.m2/repository/com/fasterxml/classmate/1.5.1/classmate-1.5.1.jar
> [DEBUG]  /home/tony/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.13.3/jackson-annotations-2.13.3.jar
> [DEBUG]  /home/tony/.m2/repository/org/apache/commons/commons-lang3/3.6/commons-lang3-3.6.jar
> [DEBUG]  /home/tony/.m2/repository/org/springframework/hateoas/spring-hateoas/1.5.5/spring-hateoas-1.5.5.jar
> [DEBUG]  /home/tony/.m2/repository/org/springframework/spring-aop/5.3.29/spring-aop-5.3.29.jar
> [DEBUG]  /home/tony/.m2/repository/org/springframework/spring-beans/5.3.29/spring-beans-5.3.29.jar
> [DEBUG]  /home/tony/.m2/repository/org/springframework/spring-context/5.3.29/spring-context-5.3.29.jar
> [DEBUG]  /home/tony/.m2/repository/org/springframework/spring-expression/5.3.29/spring-expression-5.3.29.jar
> [DEBUG]  /home/tony/.m2/repository/org/springframework/spring-core/5.3.29/spring-core-5.3.29.jar
> [DEBUG]  /home/tony/.m2/repository/org/springframework/spring-jcl/5.3.29/spring-jcl-5.3.29.jar
> [DEBUG]  /home/tony/.m2/repository/org/springframework/spring-web/5.3.29/spring-web-5.3.29.jar
> [DEBUG]  /home/tony/.m2/repository/org/springframework/plugin/spring-plugin-core/2.0.0.RELEASE/spring-plugin-core-2.0.0.RELEASE.jar
> [DEBUG]  /home/tony/.m2/repository/com/jayway/jsonpath/json-path/2.7.0/json-path-2.7.0.jar
> [DEBUG]  /home/tony/.m2/repository/net/minidev/json-smart/2.4.11/json-smart-2.4.11.jar
> [DEBUG]  /home/tony/.m2/repository/net/minidev/accessors-smart/2.4.11/accessors-smart-2.4.11.jar
> [DEBUG]  /home/tony/.m2/repository/org/ow2/asm/asm/9.3/asm-9.3.jar
> [DEBUG]  /home/tony/.m2/repository/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar
> [DEBUG]  /home/tony/.m2/repository/ch/qos/logback/logback-core/1.3.8/logback-core-1.3.8.jar
> [DEBUG]  /home/tony/.m2/repository/ch/qos/logback/logback-classic/1.3.8/logback-classic-1.3.8.jar
> [DEBUG]  /home/tony/.m2/repository/org/slf4j/slf4j-api/2.0.7/slf4j-api-2.0.7.jar
> [DEBUG]  /home/tony/.m2/repository/org/slf4j/jul-to-slf4j/1.7.36/jul-to-slf4j-1.7.36.jar
> [DEBUG] Source roots:
> [DEBUG]  /home/tony/path/to/my/module/src/main/java
> [DEBUG]  /home/tony/path/to/my/module/target/generated-sources
> [DEBUG]  /home/tony/path/to/my/module/target/generated-sources/annotations
> [DEBUG] Command line options:
> [DEBUG] -d /home/tony/path/to/my/module/target/classes -classpath /home/tony/path/to/my/module/target/classes:/home/tony/.m2/repository/org/hibernate/validator/hibernate-validator/6.1.7.Final/hibernate-validator-6.1.7.Final.jar:/home/tony/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar:/home/tony/.m2/repository/org/jboss/logging/jboss-logging/3.4.3.Final/jboss-logging-3.4.3.Final.jar:/home/tony/.m2/repository/com/fasterxml/classmate/1.5.1/classmate-1.5.1.jar:/home/tony/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.13.3/jackson-annotations-2.13.3.jar:/home/tony/.m2/repository/org/apache/commons/commons-lang3/3.6/commons-lang3-3.6.jar:/home/tony/.m2/repository/org/springframework/hateoas/spring-hateoas/1.5.5/spring-hateoas-1.5.5.jar:/home/tony/.m2/repository/org/springframework/spring-aop/5.3.29/spring-aop-5.3.29.jar:/home/tony/.m2/repository/org/springframework/spring-beans/5.3.29/spring-beans-5.3.29.jar:/home/tony/.m2/repository/org/springframework/spring-context/5.3.29/spring-context-5.3.29.jar:/home/tony/.m2/repository/org/springframework/spring-expression/5.3.29/spring-expression-5.3.29.jar:/home/tony/.m2/repository/org/springframework/spring-core/5.3.29/spring-core-5.3.29.jar:/home/tony/.m2/repository/org/springframework/spring-jcl/5.3.29/spring-jcl-5.3.29.jar:/home/tony/.m2/repository/org/springframework/spring-web/5.3.29/spring-web-5.3.29.jar:/home/tony/.m2/repository/org/springframework/plugin/spring-plugin-core/2.0.0.RELEASE/spring-plugin-core-2.0.0.RELEASE.jar:/home/tony/.m2/repository/com/jayway/jsonpath/json-path/2.7.0/json-path-2.7.0.jar:/home/tony/.m2/repository/net/minidev/json-smart/2.4.11/json-smart-2.4.11.jar:/home/tony/.m2/repository/net/minidev/accessors-smart/2.4.11/accessors-smart-2.4.11.jar:/home/tony/.m2/repository/org/ow2/asm/asm/9.3/asm-9.3.jar:/home/tony/.m2/repository/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar:/home/tony/.m2/repository/ch/qos/logback/logback-core/1.3.8/logback-core-1.3.8.jar:/home/tony/.m2/repository/ch/qos/logback/logback-classic/1.3.8/logback-classic-1.3.8.jar:/home/tony/.m2/repository/org/slf4j/slf4j-api/2.0.7/slf4j-api-2.0.7.jar:/home/tony/.m2/repository/org/slf4j/jul-to-slf4j/1.7.36/jul-to-slf4j-1.7.36.jar: -sourcepath /home/tony/path/to/my/module/src/main/java:/home/tony/path/to/my/module/target/generated-sources:/home/tony/path/to/my/module/target/generated-sources/annotations: -s /home/tony/path/to/my/module/target/generated-sources/annotations -g -target 17 -source 1.8 -encoding UTF-8
> [DEBUG] incrementalBuildHelper#beforeRebuildExecution
> [INFO] Compiling 2 source files with javac [debug target 17] to target/classes
> [DEBUG] incrementalBuildHelper#afterRebuildExecution
> [WARNING] bootstrap class path not set in conjunction with -source 8
> [WARNING] unknown enum constant javax.annotation.meta.When.MAYBE
>   reason: class file for javax.annotation.meta.When not found
1357,1358c1374,1375
< [INFO] Total time:  2.154 s
< [INFO] Finished at: 2023-08-12T19:38:06+02:00
---
> [INFO] Total time:  2.777 s
> [INFO] Finished at: 2023-08-12T19:36:44+02:00
1363c1380
< [WARNING]  * org.jsonschema2pojo:jsonschema2pojo-maven-plugin:1.0.0-alpha2
---
> [WARNING]  * org.jsonschema2pojo:jsonschema2pojo-maven-plugin:1.0.0-alpha4

But I can just see the symptom there, the file is detected as stale for some reason and recompilation is done.
I tried narrowing it down in the code but did not have enough time for that. I am going on a vacation now so I will not respond for the next week but after that I can provide additional details if needed.

Hello, I would like to add to this issue.
I am experiencing the same behavior, the plugin regenerates the sources each time it is invoked (as expected),
and then maven compiler plugin detects the files as stale and recompiles.
I'm using jsonschema2pojo-maven-plugin 1.2.1, maven-compiler-plugin 3.12.1 with maven 3.9.3
Would it be possible to implement a check such as michakurt proposed?
The protobuf-maven-plugin has for example the checkStaleness parameter.
https://www.xolstice.org/protobuf-maven-plugin/compile-mojo.html
"Normally protoc is invoked on every execution of the plugin.
Setting this parameter to true will enable checking timestamps of source protobuf definitions vs. generated sources."
Something like this would be very helpful for this plugin as well.


convert checks in read functions to warnings, unify code

There are a few checks we do in read functions to be sure the file makes sense (e.g. check that Nbls is actually equal to the number of unique baselines). These (should) be checked in the check function, but should still give a warning in the read function itself in the event run_check is turned off.
While looking into this, I noticed how these things are handled vary across file types. We should also unify this code somewhat so the user sees the same behavior whether reading uvfits, miriad, etc.

Fixed in commit 08a901d


Is this code deliberately different than surrounding routines or is it a sign of an incomplete editing session?

Hello,
I am noticing that in the solidmpseqs.h file (OpenVnmrJ/src/nvpsg/solidmpseqs.h) there are many getXXXX() routines that set n90, n90m, and trap values for VNMRS or INOVA. But I am noticing that it does not happen in getspnl(), getr1817(), and getpostc6(). Usually that code happens right after the MPinitialize() call. (Not so for getsamn() but it sets those up earlier). Anyhow is the code correct now that it DOES NOT set the n90, n90m, and trap variables in the regular way for those three routines? Or was this edited code that fell through the cracks?

Duplicate of #847. Closing.


[Trivia] 'Air' as a message reward

After the latest restart (around 2pm CEST 10/04/2021) the market is down, giving a nullpointer whenever you try to use the /market commands.
https://gyazo.com/39557ca5d627800a4f4e68be274185fa
secondly the quiz rewards are broken as well, giving the items to the winner as normal but giving the following message to everyone:
https://gyazo.com/a5e395547ab4c3a4fefb9b3a46e1cceb

Market has since been fixed, sometimes ability storage fails, and it has to be debugged manually via a command. As for quizzes, the message itself is visual, correct?

It is, the rewards are correctly given to the person. but the entire server gets the message among the lines of" received 0xAir as a reward"

Fixed


Improve the promise-caching in the PDFDocument.fieldObjects getter

Improve the promise-caching in the PDFDocument.fieldObjects getter
After PR #18845 we're accessing this getter more, hence it seems like a good idea to ensure that the initial formInfo access is covered as well.
While unlikely to be a problem in practice, at least theoretically that data may not be available and the code in fieldObjects could thus currently be unintentionally invoked more than once.

Reduce duplication in the PDFDocument.calculationOrderIds getter

Smaller diff with https://github.com/mozilla/pdf.js/pull/18871/files?w=1

/botio test


The new keyboard hook lets keypresses go through

Version (which release did you use?)
The latest git version
Describe the bug
The new keyboard hook functionality does not always work correctly, and some of the keypresses gets sent to the application in additon to Nog handling it. In fact for me this is so common that it's almost unusable at the moment.
To Reproduce
The easiest way to produce it is probably to have a workspace with text editors open, and switch the focus between them. But I'm not sure if it's reproducable on all systems.
Expected behavior
All handled keypresses should be swallowed.
More details
I think I know what's going on, since I debugged this a bit. When a key is pressed, a message is sent to another thread through a channel, and once it's handled there, another message is sent back indicate that the key was handled. The main hook thread waits for 100ms to get this message back, and if it doesn't it lets the key press through to other applications. So that's one press getting through even if it's not handled. But what's worse is that the channel is now out of sync (there's more than one message in the queue), so it will start to block KeyUp events instead of KeyDown, which makes things worse.
This 100ms is warranted, as Windows requires the keyboard hooks to not take too long, so that can't be changed. One way to mitigate the issue would be to use a higher thread priority for the processing thread, but that's still quite fragile, it's quite hard to guarantee these timing requirements in all cases.
So instead I recommend, that the actual keymappig is checked inside the hook function, to avoid having to rely on context switches being fast enough. Another improvement for that would be to make sure that no thread locking happens there, for example by making the keymappings buffered so that atomic swaps are used to bring in the new mappings.
This still has a small problem that I don't know how to solve easily, if the mapping is changed by a mode switch, and a new keypress happens immediately after, the re-mapping might not be processed fast enough. But that's probably a very small problem. I can think of a couple of wayst to solve it, but neither of them is easy or desirable.
One way is to have a completely static mapping, that is the mapping of all modes and the mode switches are know in advance. Then the switching would be easily done quickly in the hook itself.
Another way would be to somehow be able to call lua in a way that only allows remapping calls, which probably also would be quick enough.
A third way, very similar to the second one is to queue all real actions, like focusing windows, switching workspaces and so on, but still call lua for every keypress. Lua is quite fast by itself so I think it should be fast enough, and if not, luajit would definitely be able to do it. So that would IMO be the eventual real fix for the issue. This way the lua script could probably be called from the hook function itself on every keypress. And then there's a separate processor that makes all the magic happen.
Note that the issue is probably much worse than it should be right now, at the moment Nog seems to use 100% cpu of one core at all times, which probably delays some actions for more than 100ms. I haven't tracked down what's causing that.
Also note that it would probably be worth blocking key up events as well. They could be done by for example storing handled keys (without modifiers), in a HashSet, and then check that and remove the key on key up.

Actually the problem seems to be mostly related to mode changes, at least that's how I can most easily reproduce. So it seems the remapping is quite slow. But it probably also happens when doing more complex window manipulation, so I don't think it's restricted to that.
I was actually hoping that the keyboard hooks would solve the slow remapping, as I could not use the modes like I wanted to before either, it was simply to slow to re-map, so following keys got ignored. With the support of the QMK firmware for the keyboard, my goal is to use just a single stolen hotkey, which then enables different modes on following keypresses, and automatically sends esc to exit the modes when I release that key. The chords feature request might also be applicable for that behaviour, but using manual modes would be even more flexible, for example I could keep holding down my trigger key, while pressing multiple navigation keys.

The main hook thread waits for 100ms to get this message back, and if it doesn't it lets the key press through to other applications

My first idea would be to see why the check even takes more than 100ms.
If you wrap everything inside this while loop with our time! macro like this:
time!("kb event loop", { ... })

you can see how long each iteration in the event loop takes. Mine take 5 - 10 µs

I didn't add the timing bug I have a log with reasonable timestamps and output to see the problem.
It actually goes out of sync at the very start, when entering work mode. It is possible that some of my display changes makes that part slower.
[2021-08-05 16:39:29.347223 +03:00] INFO [twm\src\main.rs:1031] Listening for keybindings
[2021-08-05 16:39:32.500297 +03:00] INFO [twm\src\keyboardhook.rs:163] KeyDown 87
[2021-08-05 16:39:32.500348 +03:00] INFO [twm\src\keybindings.rs:54] Input event key down 87
[2021-08-05 16:39:32.500435 +03:00] INFO [twm\src\keybindings.rs:76] sending true
[2021-08-05 16:39:32.500484 +03:00] INFO [twm\src\keyboardhook.rs:195] Processed key 87
[2021-08-05 16:39:32.500463 +03:00] DEBUG [twm\src\main.rs:1071] Received keybinding Keybinding(CONTROL+LALT+W, 13, Global, 9087, None)
[2021-08-05 16:39:32.501507 +03:00] INFO [twm\src\bar\create.rs:125] Creating appbar
[2021-08-05 16:39:32.501606 +03:00] DEBUG [twm\src\bar\create.rs:152] Creating appbar for display DisplayId(65539)
[2021-08-05 16:39:32.508433 +03:00] DEBUG [twm\src\bar\create.rs:152] Creating appbar for display DisplayId(65537)
[2021-08-05 16:39:32.521372 +03:00] DEBUG [twm\src\bar\create.rs:152] Creating appbar for display DisplayId(10628619)
[2021-08-05 16:39:32.532365 +03:00] INFO [twm\src\tile_grid\store.rs:22] Saving 1 c0|60[t0|60|200230,r1|60[t0|60|329888,t1|60|789124]]
[2021-08-05 16:39:32.568499 +03:00] INFO [twm\src\tile_grid\store.rs:22] Saving 2 t0|120|134196
[2021-08-05 16:39:32.569223 +03:00] DEBUG [twm\src\system\win.rs:458] Rule(chrome.exe) matched!
[2021-08-05 16:39:32.569812 +03:00] INFO [twm\src\tile_grid\store.rs:22] Saving 3 c0|120[t0|60|722200,t1|60|2235598]
[2021-08-05 16:39:32.572065 +03:00] INFO [twm\src\tile_grid\store.rs:22] Saving 4 t0|120|10754592
[2021-08-05 16:39:32.573394 +03:00] INFO [twm\src\tile_grid\store.rs:22] Saving 5 t0|120|5245030
[2021-08-05 16:39:32.574494 +03:00] INFO [twm\src\tile_grid\store.rs:22] Saving 6 t0|120|134164
[2021-08-05 16:39:32.575254 +03:00] DEBUG [twm\src\system\win.rs:458] Rule(chrome.exe) matched!
[2021-08-05 16:39:32.575937 +03:00] INFO [twm\src\tile_grid\store.rs:22] Saving 7 t0|120|134170
[2021-08-05 16:39:32.576795 +03:00] DEBUG [twm\src\system\win.rs:458] Rule(chrome.exe) matched!
[2021-08-05 16:39:32.577061 +03:00] INFO [twm\src\tile_grid\store.rs:22] Saving 8
[2021-08-05 16:39:32.577498 +03:00] INFO [twm\src\tile_grid\store.rs:22] Saving 9
[2021-08-05 16:39:32.578386 +03:00] INFO [twm\src\tile_grid\store.rs:22] Saving 10
[2021-08-05 16:39:32.579219 +03:00] DEBUG [twm\src\tile_grid.rs:48] IsFullScreened? false FocusedNode: Some(4)
[2021-08-05 16:39:32.579733 +03:00] DEBUG [twm\src\tile_grid.rs:54]
████████████████████████████████████████████████████████████████
█AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB█
█AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB█
█AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB█
█AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB█
█AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB█
█AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB█
█AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB█
█AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB█
█AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA█████████████████████████████████
█AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA█████████████████████████████████
█AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA██CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC█
█AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA██CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC█
█AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA██CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC█
█AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA██CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC█
█AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA██CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC█
█AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA██CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC█
█AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA██CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC█
█AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA██CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC█
████████████████████████████████████████████████████████████████
A ~ NodeID:1 WinID:200230 - keybindings.rs (/mnt/c/proj/nog/twm/src) - NVIM                                                                                Size: 60 Order: 0
B ~ NodeID:3 WinID:329888 - C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe                                                                                Size: 60 Order: 0
C ~ NodeID:4 WinID:789124 - C:\WINDOWS\SYSTEM32\wsl.exe                                                                                Size: 60 Order: 1

[2021-08-05 16:39:32.580016 +03:00] INFO [twm\src\tile_grid.rs:78] Beginning Rendering
[2021-08-05 16:39:32.587066 +03:00] INFO [twm\src\tile_grid.rs:109] Rendering completed
[2021-08-05 16:39:32.633359 +03:00] INFO [twm\src\keyboardhook.rs:163] KeyDown 0
[2021-08-05 16:39:32.833763 +03:00] INFO [twm\src\keyboardhook.rs:201] Timeout 0
[2021-08-05 16:39:32.834141 +03:00] INFO [twm\src\keyboardhook.rs:186] KeyUp 87
[2021-08-05 16:39:33.039685 +03:00] INFO [twm\src\keyboardhook.rs:201] Timeout 87
[2021-08-05 16:39:33.045113 +03:00] DEBUG [twm\src\main.rs:827] Sending redraw-app-bar event
[2021-08-05 16:39:33.045243 +03:00] INFO [twm\src\main.rs:564] Registering windows event handler
[2021-08-05 16:39:33.045372 +03:00] INFO [twm\src\keybindings.rs:54] Input event key down 0
[2021-08-05 16:39:33.045402 +03:00] INFO [twm\src\keybindings.rs:87] sending false
[2021-08-05 16:39:33.045440 +03:00] INFO [twm\src\keybindings.rs:82] Input event key up 87
[2021-08-05 16:39:33.045454 +03:00] INFO [twm\src\keybindings.rs:87] sending false
[2021-08-05 16:39:33.045422 +03:00] DEBUG [twm\src\system\win\win_event_listener.rs:83] Registering win event hook
[2021-08-05 16:39:33.101903 +03:00] DEBUG [twm\src\event_handler\winevent.rs:36] FocusChange: 'alacritty.exe' | 789124
[2021-08-05 16:39:33.245301 +03:00] DEBUG [twm\src\event_handler\winevent.rs:36] FocusChange: 'alacritty.exe' | 329888
[2021-08-05 16:39:36.356771 +03:00] INFO [twm\src\keyboardhook.rs:163] KeyDown 87
[2021-08-05 16:39:36.356787 +03:00] INFO [twm\src\keybindings.rs:54] Input event key down 87
[2021-08-05 16:39:36.356825 +03:00] INFO [twm\src\keyboardhook.rs:198] Did not process key 87
[2021-08-05 16:39:36.356840 +03:00] INFO [twm\src\keybindings.rs:76] sending true
[2021-08-05 16:39:36.356876 +03:00] DEBUG [twm\src\main.rs:1071] Received keybinding Keybinding(CONTROL+WIN+W, 51, Normal, 3087, None)
[2021-08-05 16:39:36.364340 +03:00] INFO [twm\src\keybindings.rs:82] Input event key up 87
[2021-08-05 16:39:36.364331 +03:00] INFO [twm\src\keyboardhook.rs:186] KeyUp 87
[2021-08-05 16:39:36.364385 +03:00] INFO [twm\src\keybindings.rs:87] sending false
[2021-08-05 16:39:36.364407 +03:00] INFO [twm\src\keyboardhook.rs:198] Did not process key 87
[2021-08-05 16:39:36.532291 +03:00] INFO [twm\src\keyboardhook.rs:163] KeyDown 76
[2021-08-05 16:39:36.532328 +03:00] INFO [twm\src\keyboardhook.rs:195] Processed key 76
[2021-08-05 16:39:36.532338 +03:00] INFO [twm\src\keybindings.rs:54] Input event key down 76
[2021-08-05 16:39:36.532362 +03:00] INFO [twm\src\keybindings.rs:76] sending true
[2021-08-05 16:39:36.532386 +03:00] DEBUG [twm\src\main.rs:1071] Received keybinding Keybinding(L, 54, Normal, 76, None)
[2021-08-05 16:39:36.532473 +03:00] INFO [twm\src\keyboardhook.rs:163] KeyDown 0
[2021-08-05 16:39:36.532485 +03:00] INFO [twm\src\keyboardhook.rs:198] Did not process key 0

The first two key ups (the w for the workmode, and the dummy key for the focusing) times out badly.
For example the event received by the hook at 16:39:32.633359, is processed at 16:39:33.045372, between that is
[2021-08-05 16:39:33.045113 +03:00] DEBUG [twm\src\main.rs:827] Sending redraw-app-bar event
[2021-08-05 16:39:33.045243 +03:00] INFO [twm\src\main.rs:564] Registering windows event handler

So my bet is that either of those blocks for too long.
Note that I currently have a timeout set to 200ms, so that's why you see around that time until I print the timeout message. Also note that the channel is at the wrong state at that point, so it's hard to tell if something else takes too long. But yes generally at least the timing between the KeyDown or KeyUp in the hook and the sending to the channel in the Keybindings.rs seems to be ok.

I added some quick timings to the enter_work_mode function, and there are several things that takes a long time. But the change workspace is the biggest culprit, and since it holds the lock it makes the key processing timeout.
I don't have time to look at it further, but there might also be some semi deadlocking going on. Since when I increase the TIME_DURATION, changing workspaces takes longer. For example when I had it at 900 ms, it took over 1s, while now when I have it at 100, it took around 350 ms. But it could also just be statistical noise.

I was supposed to do other things, but I could not stop myself, since at least a temporary solution came to my mind.
It's clear that it was the state_arc locking inside keybindings.rs:listen that was the problem. And that lock is not really needed, the solution was simple, just send the whole keybindings array over the channel.
But there was still a problem after that, the UpdateKeybindings event can be sent without keypresses, so they can queue up a bit,  which made the keybindings not update until you had pressed a certain amount of time. So I just used a loop instead of if, and it seems to be working now.
I will run with this for a while now and see if it's really fixed, and if it is, send a pull request at some point.


How to refresh token/expiry?

I have an iOS/Android app that I am connecting to my API and I obviously don't want the user's session to expire if they've opened the app recently simliar to facebook etc. Is there a way to refresh the token/expiry so they can stay logged in?

@JoshuaNovak919 would user#create_new_auth_token work for you?

I actually had to switch to a different system since I could not get Facebook/Twitter working properly with this gem. I have them nested in an api and v1 namespace so it wouldn't work.


Upgrade AirDroid.app to v3.1.3

Thank you for the contribution. It was merged directly as f38d45ba12dcb57407649e2e6a24b1e1d599fba2 to keep commit history cleaner. Your contribution is still credited to you.


Add methods for quick text positionning

This enables to place a text in height positions around the hole:
JMPositionTop
JMPositionTopRightCorner
JMPositionRight
JMPositionBottomRightCorner
JMPositionBottom
JMPositionBottomLeftCorner
JMPositionLeft
JMPositionTopLeftCorner

- (void) addHoleCircleCenteredOnPosition:(CGPoint)centerPoint andDiameter:(CGFloat)diameter withText:(NSString *)text onPosition:(JMHolePosition)position withMargin:(CGFloat) margin;
- (void) addHoleRectOnRect:(CGRect)rect withText:(NSString *)text onPosition:(JMHolePosition)position withMargin:(CGFloat) margin;
- (void) addHoleRoundedRectOnRect:(CGRect)rect withCornerRadius:(CGFloat)cornerRadius withText:(NSString *)text onPosition:(JMHolePosition)position withMargin:(CGFloat) margin;

Add methods for quick text positionning

Hi, thanks for you works.
I will merge your pull request and change ones lines to improve the "code style"

in method names, "and", "with" are not very useful (i have made the same mistake in my implementation)
you declare JMHolePosition has a NS_ENUM, have you think about the fact of use a NS_OPTION ?
your label builder method is good, it can be a good idea to extract the code that convert Point+JMPositionTop to a category, to allows user to use those algorithms :)

Hi

Thanks for the advice, I will take them into account
About the use of NS_OPTION I didn’t really think about it to be honest I use NS_ENUM because JMHoleType used it. What will be the advantage of using NS_OPTION according to you ?
Yeah great idea

On 19 avril 2016 at 08:57:58, Jérôme Morissard (notifications<EMAIL_ADDRESS>wrote:
Hi, thanks for you works.
I will merge your pull request and change ones lines to improve the "code style"

in method names, "and", "with" are not very useful (i have made the same mistake in my implementation)
you declare JMHolePosition has a NS_ENUM, have you think about the fact of use a NS_OPTION ?
your label builder method is good, it can be a good idea to extract the code that convert Point+JMPositionTop to a category, to allows user to use those algorithms :)

—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHubhttps://github.com/leverdeterre/JMHoledView/pull/6#issuecomment-211761184