Add Discrete DP

Status: Not Ready to be Merged, Open for Review
Add Discrete DP

value iteration
policy function iteration
modified policy function iteration

Outstanding items

[x] Preliminary tests have been translated but do not yet run. They need a julian review. The file is currently documented with TODO.
[ ] State-Action Pair Formulation
[ ] Sparse Matrix Support
[x] Docstring cleanup

I will submit an associated PR for the QuantEcon website to add julia lecture

Before we merge let's move the notebooks out of the src directory

@oyamad I have a question for you here.
s_wise_max is well suited for numpy's row major semantics, but less cache friendly for Julia's column major ordering. Do you see any reason not to "transpose" everything so s_wise_max can take max over columns instead of rows?
It would diverge from the python version, but maybe this is a worthwhile divergence?

I am going through the src/markov/ddp.jl file now updating all of the function docstrings.

@mmcky @spencerlyon2 This is great!
@spencerlyon2 Regarding transposing everything, we should do so if it leads to speedup. But I guess we might wait to implement the state-action pairs formulation to see what the best solution will be in both formulations.

It seems argmax is not properly obtained. What does Base.findminmax! on line 127 do?

See this notebook, where I ran the code with the simple example in Puterman. The returned policy function is [1 2], but action 2 at state 2 cannot be optimal, which is infeasible and assigned a value -Inf.

Would it be possible to implement a version of bellman_operator with which we can write the code like:
for i in 1:num_iter
    v_new = bellman_operator(ddp, v)
    # Print or plot v for exmple here
    copy!(v, v_new)
end

(I know this is possible with bellman_operator!(ddp, ddpr) by defining ddpr, but the above seems more intuitive.)

Hey @oyamad thanks for all the comments, I'll do my best to answer all of them:

Base.findminmax!(Base.Functor, out_val , out_argval, input_matrix) will fill out_val and out_argval with the minimum/argmin or max/argmax  along the singleton dimensions of out_val and out_argval. Note that out_argval will be filled with a linear index into input_matrix, not an index column by column. I'm pretty confident that it is doing this correctly. To get the column by column maximizer can do this. If this still doesn't look right to you let me know. Also, if we don't like this behavior of returning a linear index, we can just write our own implementation.
[ ] We can definitely switch the order of input args to match python
[ ] We can implement the bellman_operator(::DDP, ::Array) -> Array
[ ] Good call about handling beta=0 case.
[ ] We should take the call to RQ_sigma out of the 1:k loop
I'm happy to get rid of the tolerance check on the inside of the 1:k loop.

@spencerlyon2 Thank you for your reply.
I am not sure if I really understand how to manipulate ddpr, but compute_greedy! seems not working properly.
julia> include("ddp.jl")
DDP

julia> n, m = 2, 2;

julia> R = [5 10; -1 -Inf]
2x2 Array{Float64,2}:
  5.0    10.0
 -1.0  -Inf

julia> Q = Array(Float64, n, m, n);

julia> Q[1, 1, :] = [0.5, 0.5];

julia> Q[1, 2, :] = [0, 1];

julia> Q[2, 1, :] = [0, 1];

julia> Q[2, 2, :] = [0.5, 0.5]  # Arbitrary;

julia> beta = 0.95;

julia> ddp = DDP.DiscreteDP(Q, R, beta)
DDP.DiscreteDP{Float64,3,2}(2x2x2 Array{Float64,3}:
[:, :, 1] =
 0.5  0.0
 0.0  0.5

[:, :, 2] =
 0.5  1.0
 1.0  0.5,2x2 Array{Float64,2}:
  5.0    10.0
 -1.0  -Inf  ,0.95)

julia> ddpr = DDP.DPSolveResult{DDP.VFI}(ddp)
DDP.DPSolveResult{DDP.VFI}([10.0,-1.0],[9.275,-1.95],0,[1,2],#undef)

julia> ddpr.v
2-element Array{Float64,1}:
 10.0
 -1.0

julia> ddpr.sigma
2-element Array{Int64,1}:
 1
 2

julia> ddpr.v = [0; 0]
2-element Array{Float64,1}:
 0.0
 0.0

julia> DDP.compute_greedy!(ddp, ddpr)
2-element Array{Int64,1}:
 3
 2

julia> ddpr.sigma
2-element Array{Int64,1}:
 3
 2

Given v = [0; 0], the v-greedy policy should be [2; 1]. 3 is out of range anyway...

The problem seems to be in s_wise_max!:
julia> vals = [5 10; -1 -Inf]
2x2 Array{Float64,2}:
  5.0    10.0
 -1.0  -Inf

julia> Tv = Vector{Float64}(2);

julia> sigma = Vector{Int64}(2);

julia> DDP.s_wise_max!(vals, Tv, sigma)
([10.0,-1.0],[3,2])

julia> sigma
2-element Array{Int64,1}:
 3
 2

Sorry, now I think I understand what you mean by "linear order":
julia> ind = map(x->ind2sub(size(vals), x), sigma)
2-element Array{Tuple{Int64,Int64},1}:
 (1,2)
 (2,1)

I think bellman_operator(:: DiscreteDP, ::Array) -> Array looks more straightforward than (:: DiscreteDP, :: DPSolveResult), so it may be good to have the former in addition to (not instead of) the latter.
The user may use bellman_operator in a loop for example to see what is going on inside solve or solve a finite-horizon DP.

@oyamad that's great, so do you think that s_wise_max! and the indices are correct now?
And yeah, I agree with that comment about the bellman_operator method. We should implement that function also

@oyamad that's great, so do you think that s_wise_max! and the indices are correct now?

Yes, sorry for my confusion!

OK great and no problem. I don't love the behavior either -- it isn't very intuitive to me

I translated random_discrete_dp into Julia in random_ddp branch.
Usage:
julia> num_states, num_actions = 3, 2;

julia> beta = 0.95;

julia> ddp = random_discrete_dp(num_states, num_actions, beta)
QuantEcon.DDP.DiscreteDP{Float64,3,2}(3x2x3 Array{Float64,3}:
[:, :, 1] =
 0.237836  0.360343
 0.575364  0.664304
 0.575823  0.0909946

[:, :, 2] =
 0.156995  0.387196
 0.109598  0.314492
 0.091807  0.89442

[:, :, 3] =
 0.605169  0.252461
 0.315039  0.0212035
 0.33237   0.0145855,3x2 Array{Float64,2}:
 -1.20203   -0.661307
 -0.715116  -0.349859
  0.968529  -1.66845 ,0.95)

julia> res_pi = DDP.solve(ddp, DDP.PFI);

julia> res_pi.num_iter
1

julia> res_pi.sigma
3-element Array{Int64,1}:
 1
 2
 3

julia> res_pi.v
3-element Array{Float64,1}:
 -4.19214
 -4.18071
 -2.46888

julia> res_vi = DDP.solve(ddp, DDP.VFI);

julia> res_vi.num_iter
173

julia> res_vi.sigma
3-element Array{Int64,1}:
 1
 2
 3

julia> res_vi.v
3-element Array{Float64,1}:
 -4.19164
 -4.18021
 -2.46839

julia> res_mpi = DDP.solve(ddp, DDP.MPFI);

julia> res_mpi.num_iter
2

julia> res_mpi.sigma
3-element Array{Int64,1}:
 1
 2
 3

julia> res_mpi.v
3-element Array{Float64,1}:
 -4.19214
 -4.18071
 -2.46888

I hope it helps...

Yes, that's great. It will definitely help. Thanks

@spencerlyon2 I just pushed some updates to address the check boxes. How can I push a removal of the last commit? 8606075. It has the correct interface but isn't right as bellman_operator sits within a loop. Do we need to pass Tv and sigma for the s_wise_max! operation?

@mmcky thanks for working on this.
Stack overflow suggests this for undoing a commit
The answer to your question about s_wise_max! will depend on context and which version of the method you are talking about.

@spencerlyon2 Just getting back to this now. I looked into the workflow and decided to run a git revert. That way it adds a commit to undo the changes in a specific commit and it doesn't break anyone else's work.

Regarding new bellman_operator for use within loops.
Is this the function we are looking for, passing in v::Array and sigma::Array?
function bellman_operator(ddp::DiscreteDP, v::Array{Float64}, sigma::Array{Int,1})
    vals = ddp.R + ddp.beta * ddp.Q * v
    Tv = similar(v)
    s_wise_max!(vals, Tv, sigma)
    return Tv
end

Is it possible to implement both bellman_operator(ddp, v) which only returns Tv and bellman_operator!(ddp, v, sigma) which overwrites sigma with the v-greedy policy?

It will be nice if the user can easily write code of finite-horizon backward induction as in this notebook, cell [9].

This is not necessary, but it would also be nice if we have evaluate_policy(sigma) and compute_greedy(v), in addition to evaluate_policy(ddp, ddpr) and compute_greedy!(ddp, ddpr), to see how the algorithms work by implementing them using these functions, as in this notebook, cells [11] and [23].

@oyamad Just a side comment:  These are beautiful notebooks.  Next week my brother, who is a web developer, will arrive here and we'll do some work on the top level of the lecture site.  One thing we want to do is give prominence to a curated list of notebooks, kind of like this page.  We'll take out the ones now in QuantEcon.site and put all notebooks we like in this repo.  If you're willing, it would be great to have the full collection of your DP notebooks.

@jstac Sure, please feel free to pick any of the notebooks there!
(One concern is, as reported here, that the figure at the bottom (right panel) in this notebook looks different from the original figure in Miranda and Fackler.)

OK, I think we have taken care of all the requests/concerns in this PR.
I'll wait for the green light from Travis and give others a day to comment before merging.

The code looks very good. The only thing is that I am still a bit concerned about the "linear order" approach. It may be just a matter of taste though.

I updated random_discrete_dp, which is now in random_ddp2  branch.

The linear order is definitely not as intuitive as the row by row index.
It is, however,  commonly used in julia especially in the functions from Base that we are using here.
We did add one helper method to Base.ind2sub that takes a ddp and a sigma and gives back the row based index version of sigma.
Another option would be to have another field on the result type that has type Nullable{Vector {Int}} that we could leave blank at first  (to conserve memory) and have a special method that would populate it with the row based sigma if the user asks us to. Would that make it easier to reason about?

@spencerlyon2 Thanks, fair enough.

Another option would be to have another field on the result type that has type Nullable{Vector {Int}} that we could leave blank at first (to conserve memory) and have a special method that would populate it with the row based sigma if the user asks us to. Would that make it easier to reason about?

Now I do not think this is necessary.
In many cases, what the user is interested in is not the index itself (whether linear or row based), but the action value,  for example, the level of consumption or saving associated with each action index. This is related to the discussion in QuantEcon/QuantEcon.py#101.
I realized that for the state-action pair formulation, a_indices can actually be used to store action values (not action indices).

@oyamad thank you for continuing to be so thorough reviewing this PR.
I believe I have addressed all the points you brought up and made relevant changes in the code

I translated this notebook in Python into Julia here. The examples from Puterman are correctly reproduced.
(I do not know how to manipulate the DataFrame tables (the column names and the row indices). Could anyone kindly edit them...)

@spencerlyon2 I have a few more questions:

[Maybe for future enhancement] If the elements of R and Q as well as beta are allowed to be Rational, will the outputs be Rational with exact arithmetics (in particular for PFI)? It is the case for MarkovChain.

You once mentioned transposing everything, which is something that has to be done at some point, I suppose. What would that be like? I just wondered if the "linear order" in the current implementation would be preserved there.

Hi @oyamad I think I have addressed the latest set of comments.
There was one unresolved line comment that disappeared when I altered the diff, so I'll post the relevant part of my comment here again.
You asked about the method bellman_operator!{T<:Real}(ddp::DiscreteDP, v::Vector{T}, sigma::Vector) not updating v in place. Here was my response:

Ok so more comments about the last method. There are times when v cannot be modified in place.
For example, suppose that you pass in a Vector{Int} and you end up getting that the result of the bellman operator is not integer-valued (say, a Vector{Float64}). When you try to update the values of the input v with the result of the bellman operation you will get an InexactError because the new Float64 values can't be represented as Int.
So, we have four options:

Remove this method and force users to pass in floating point numbers (just doing [1, 1, 1.0] or Float64[1, 1, 1] instead of [1,1,1] is sufficient)
Keep the method as it is and don't update v
Alter the method to try to mutate the input and just let the error happen
Alter the method to try to mutate, catch it if it happens, and give a more detailed error message when re-throwing the error.

Which alternative do you prefer?

@spencerlyon2 Thank you for your response.

My previous comment (followed by "Sorry, the above comment is for line 197") was about the original one bellman_operator!{T<:AbstractFloat}(ddp::DiscreteDP, v::Vector{T}, sigma::Vector) with T<:AbstractFloat, where I would like the input v to be kept untouched, not replaced with Tv. So the two candidates:

bellman_operator!(ddp, v, Tv, sigma): input ddp and v and overwrite Tv and sigma (and do not modify v)

or

bellman_operator!(ddp, v, sigma): input ddp and v, return Tv, and overwrite sigma (and do not modify v)

Do you think making one of these would be sensible?

Regarding bellman_operator!{T<:Real}(ddp::DiscreteDP, v::Vector{T}, sigma::Vector) with T<:Real, option 1 (remove this) will make things simplest (yes, [1, 1, 1.0] or Float64[1, 1, 1] instead of [1,1,1] is sufficient).

Sorry, it's already there! (Please forget the first one.)

Ok sounds good.
We are getting close. Do you mind taking another look when you have a chance to give the (final ?) approval?

I think this is ready to be merged. Great work, thanks!
(I updated the demonstration notebook.)

That notebook is great, thanks for putting it together.
I'm glad we could get the code into the right form to be useful to you.
I'm curious what the performance is relative to the python version... I wouldn't be surprised if it was a bit slower here because we have the problem set up in a cache un-friendly way

Great work guys, thanks all!!
@oyamad We're working on getting all the Jupyter notebooks up in a revamped site over the next week or two (while Andrij is visiting us here at NYU).  Would you mind to put all or any notebooks you'd like to contribute into the notebooks repo?  All the notebooks of yours I've seen are great so we'll put them all up.
The notebooks in QuantEcon.site we'll shift over ourselves, probably later today.

@jstac Please pick any of them. Will you put the notebooks yourself? Or should I make a pull request to the notebooks repo?

@oyamad A PR would be great.  Like I said, as many of your notebooks you'd like to post we'd like to have up there.

Sure (I will do tomorrow morning).

Some performance tests using random_discrete_dp. Compare the Python version. Timing technology is not the same across the two, but the Julia version is sometimes 10x slower...

Thanks for posting. We have to remember that we should let the jit run on the Julia code and not do timing on the first call.

Ahh nevermind. I see that you have done this. Disregard the previous comment

@oyamad @spencerlyon2 Thanks for the help in getting this merged.


Support Django 1.7 / 1.8

Test failing on 1.7 and 1.8:
ERROR: test_overextends (overextends.tests.Tests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "./../overextends/tests.py", line 93, in test_overextends
    html = get_template(self.unique_id).render(Context())
  File "/Library/Python/2.7/site-packages/django/template/base.py", line 148, in render
    return self._render(context)
  File "/Library/Python/2.7/site-packages/django/test/utils.py", line 88, in instrumented_test_render
    return self.nodelist.render(context)
  File "/Library/Python/2.7/site-packages/django/template/base.py", line 844, in render
    bit = self.render_node(node, context)
  File "/Library/Python/2.7/site-packages/django/template/base.py", line 858, in render_node
    return node.render(context)
  File "/Library/Python/2.7/site-packages/django/template/loader_tags.py", line 126, in render
    return compiled_parent._render(context)
  File "/Library/Python/2.7/site-packages/django/test/utils.py", line 88, in instrumented_test_render
    return self.nodelist.render(context)
  File "/Library/Python/2.7/site-packages/django/template/base.py", line 844, in render
    bit = self.render_node(node, context)
  File "/Library/Python/2.7/site-packages/django/template/base.py", line 858, in render_node
    return node.render(context)
  File "/Library/Python/2.7/site-packages/django/template/loader_tags.py", line 104, in render
    compiled_parent = self.get_parent(context)
  File "./../overextends/templatetags/overextends_tags.py", line 120, in get_parent
    template = self.find_template(parent, context)
  File "./../overextends/templatetags/overextends_tags.py", line 103, in find_template
    context[context_name][name].remove(remove_path)
ValueError: list.remove(x): x not in list

It took me a couple of goes to figure out how to run the tests (not least because the settings.py needs a patch to make it work with Django 1.8).
It looks to me as if this is primarily a bug in the tests. What appears to be happening is that Django 1.8 (and possibly 1.7 as well) build their app registry before the test code edits INSTALLED_APPS, with the result that the only application Django knows about is overextends. I’m not sure how to fix that; the app registry doesn’t have any public API to add applications. The most sensible approach is probably to build the test in a static configuration, rather than trying to dynamically generate and add applications, but I think that’s something for you to decide as the package author.
There is also an additional bug in that calling loader.load_template_source(name, []) will actually find the template (if you check the Django sources, you’ll see that it does if not template_dirs rather than if template_dirs is None when deciding whether you specified template directories to search). Thus there should be an
if not dirs:
    break

in the code in overextends_tags.py.
I've submitted another pull request to fix the problem of the tests not running because of the code in settings.py, and also to add the above change in overextends_tags.py. That doesn’t change the fact that the tests are going to continue breaking because of the application registry problem.

Note that #17 does not completely fix this problem because a decision needs to be made about how to fix the test rig.

Maybe if we somehow used override_settings decorator on INSTALLED_APPS we could maintain the current behaviour?
https://docs.djangoproject.com/en/1.8/topics/testing/tools/#overriding-settings
Also just discovered a new modify_settings API as for Django 1.7:
https://docs.djangoproject.com/en/1.8/topics/testing/tools/#django.test.SimpleTestCase.modify_settings
That matches more closely to what the tests are currently doing, and might be a lot easier to work with (since the decorators need to run at import time). I think it would be fine to drop support for Django 1.6 and earlier - what do you think?

BTW thanks for going to all the trouble of diving deeply into this, it's really appreciated.

@stephenmcd Django 1.6 doesn't need to be supported imo since 1.7 is a LTS, yes. modify_settings looks good.

@jleclanche want to try and finish it off then?

I can't take care of it for a while I'm afraid.

No problem! I just assumed you needed it now.


Update on this feature?

Will this ever get rolled in to CA policies? We have not seen an update on this in several months.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 02ff3d62-dc0e-ad0c-f5ae-418337cf31e4
Version Independent ID: d50952b5-6b98-c40d-d3a3-f9cbec58dd28
Content: Configurable token lifetimes in Azure Active Directory
Content Source: articles/active-directory/develop/active-directory-configurable-token-lifetimes.md
Service: active-directory
GitHub Login: @CelesteDG
Microsoft Alias: celested

@greg-walrath
Thanks for your feedback! We will investigate and update as appropriate.

@greg-walrath This is going to be surely rolled out as per internal communication however timelines are not decided yet as it is still in active development . Once the preview comes out it will be advertised on the Azure AD release page.
https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/whats-new
We still recommend not to use it as it will be surely be deprecated at some point in future.
We will close this issue now. Should you have any further queries, feel free to tag me to your reply and I will answer the same. alternatively you can open a new issue in case you have any further queries on this.
Thank you


Create custom setting groups that can be easily toggled

There are times I'd like to enable/toggle a group of User Settings all at once without having to individually comment/uncomment lines of the config. For instance, it would be great if I could define my own custom groups and toggle between them if I'm on a laptop or have a larger monitor:
{
  "settings.screenSize": "small",
  "screenSize": {
    "small": {
      "window.zoomLevel": -1,
      "editor.fontSize": 16,
      "editor.lineHeight": 24,
    },
    "large": {
      "window.zoomLevel": 0,
      "editor.fontSize": 14,
      "editor.lineHeight": 21,
    }
  }
}

This would especially be useful if you do any kind of presenting/tutorials and need to quickly change a number of various display settings, font sizes, colors, disable linting, etc with a single area of control:
{
  "settings.mode": "tutorial",
  "mode": {
    "default": {
      "window.zoomLevel": -1,
      "editor.fontSize": 16,
      "editor.lineHeight": 24,
      "editor.minimap.enabled": false
    },
    "tutorial": {
      "window.zoomLevel": 0,
      "editor.fontSize": 18,
      "editor.lineHeight": 24,
      "eslint.enabled": false,
      "editor.tabSize": 4,
      "workbench.colorTheme": "Material Theme Light"
    },
    "presentation": {
      "window.zoomLevel": 1,
      "editor.fontSize": 20,
      "editor.lineHeight": 28,
      "eslint.enabled": false,
      "editor.tabSize": 4,
      "workbench.colorTheme": "Material Theme Light"
    }
  }
}

I would rather prefer to switch among different settings files - #23113


Convert Document AI Object to Preserve Layout Text?

Is your feature request related to a problem? Please describe.
I've been using Google Document AI for text extraction from scanned documents, and it's been working well in terms of extracting text. However, I'm facing an issue when it comes to preserving the layout of the text.
In AWS Textract, there's a tool called "pretty print" that helps maintain the layout of extracted text. Tesseract, on the other hand, allows for preserving interword spaces using the config='-c preserve_interword_spaces=1' option which is kind of  does the same thing.
I really wish if "python-documentai-toolbox" could support such output.
Describe the solution you'd like
documentai object => preserved layout text
Describe alternatives you've considered
Extracting text using the pdftotext library seemed like a viable option, but surprisingly,  "python-documentai-toolbox" doesn't offer support for PDF output, which is rather baffling.

Can you provide more information on what you mean by "preserving the layout of the text"?
Do you want all of the text to be printed to the screen or a TXT file in the same general structure as the source document?
An example of an input document and the output text would be useful.

@holtskinner thank you for your response!
what i am looking for something like the example below.
image:

and the output I am getting is as follows:
Someto the left
Someto the left

Some in the middle
Some in the middle

Some with some tab
Some with some tab

Some with some space between them
Some with some space between them

Sometext here
Sometext here

this much
this much

How do I get the desired output string as of the same structure in image?
i.e. as follows:
 										         Some text here
 										         Some text here

Some to the left
Some to the left

 					Some in the middle
 					Some in the middle

 		Some with some tab
 		Some with some tab

Some with some space between them						this much
Some with some space between them						this much

also do you have an example how i can use Document.Page.Block to restructure the document ( ill give it a try)?

we want to do the same thing here!

At there very least, ensuring there are spaces between words in the text output from document AI would be of great assistance. Sometimes, when words are in different entities but next to each other, the Document AI text blob shows them as twowords as opposed to two words. Having a helper function ensure spaces are there would reduce custom post processing for us.

+1 I want the same thing. Currently I'm using PyMuPdf cli to achieve this python -m fitz gettext   https://pymupdf.readthedocs.io/en/latest/recipes-text.html#how-to-extract-text-in-natural-reading-order
Wish the same thing for the document generic OCR (I think the underlying mechanism should be similar, basically reconstructing the layout from the bounding box information https://github.com/pymupdf/PyMuPDF/blob/c0ae13746155e9bb5c11ab7e9a42c2e73758422e/src/main.py#L802)

Any updates on this?
I can't believe Google Cloud OCR doesn't support such a basic output!


refactor: neo tabs

Thank you for your contribution to the KodaDot - One Stop Shop for Polkadot NFTs.
👇 __ Let's make a quick check before the contribution.
PR Type

[ ] Bugfix
[ ] Feature
[x] Refactoring

Needs QA check

@kodadot/qa-guild please review

Context

[x] Related #5852

Did your issue had any of the "$" label on it?

[ ] My DOT address: Payout

Screenshot 📸

[ ] My fix has changed UI

Copilot Summary

🤖 Generated by Copilot at 2c984d8
The pull request refactors and updates the tab components used in various pages and components of the application. It replaces the BootstrapVue b-tabs and b-tab-item components with custom components that extend the Oruga UI library, namely NeoTabs and NeoTabItem. These custom components offer better style and functionality for the tabs, such as icons, labels, tooltips, and fallback content. The pull request also removes some unused and redundant code, and fixes some import paths and method accessibility issues.

🤖 Generated by Copilot at 2c984d8

The tabs in the app were outdated
So they were replaced and updated
With NeoTabs and NeoTabItem
They look much more delightful
And the code is less complicated

General - active tab texts are green, it should be something like white on dark mode and the usual pink on white mode i suppose.

GalleryItemDescription.vue ok

ProfileDetail.vue ok - Mobile problem:

https://github.com/kodadot/nft-gallery/assets/36627808/462f7cd7-0ba8-4c32-bf2b-dcb5f08f0723

SearchSuggestion.vue - beta was supper buggy and its now fixed with this deploy ❤

create.vue - ok

settings.vue - Mobile - cant reach the other options

GalleryItemTabsPanel.vue - Scrolls appearing even if not needed

@prury fixed

Tabs in /settings?tab=metadata look weird (hover state and stuff) could you check why?

how about now, I changed it to k-primary

Maybe we should reintroduce content padding see screenshots

updated, I revert this one 5256a28 (#6231) because on type=toggle need to use padding=0

@prury fixed

ty, looks great!

Can be fixed later

@prury is it possible to recheck pls? 🥺

@prury is it possible to recheck pls? 🥺

Ofc my dear viki, I'll be home soon, recheck this one and everything else

General issue:
Hover effect across all of them

Canary: (text also have hover effect)
https://github.com/kodadot/nft-gallery/assets/36627808/15acf5da-3fd2-4f9b-9caf-0df8bbbf9270
This version:
https://github.com/kodadot/nft-gallery/assets/36627808/fc0a13a1-0f94-435f-bb9b-5f98c8d2bfe5

Item description.vue - ok
GalleryitemtabsPanel.vue - Offers needs some padding:

Profiledetail.vue - ok
Searchsuggestion.vue - ok, only bug from Hover issue PR
BSX - Create.vue - ok
KSM - Create.vue - ok
RMRK - Create.vue - ok
SNEK - Create.vue - ok
Settings.vue - ok

General issue:
Hover effect across all of them
GalleryitemtabsPanel.vue - Offers needs some padding:

updated

sorry, i only saw this one now(padding):

Profile:
Tabs that have a hover tool tip are not changing the text color when hovering:

https://github.com/kodadot/nft-gallery/assets/36627808/74ae764e-11ec-493b-a80a-9b5b5fb13023

I believe some padding is needed here as well(desktop and mobile):

side padding for item offers on mobile(BSX):

@prury @roiLeo updated, related padding/margin and hover


Ambassador needs to stop using deprecated Envoy APIs

The current list:

envoy.api.v2.Cluster.hosts
envoy.api.v2.route.CorsPolicy.enabled

For example, in the logs you'll find:
[2019-05-25 12:45:24.327][115][warning][misc] [source/common/protobuf/utility.cc:173] Using deprecated option 'envoy.api.v2.Cluster.hosts' from file cds.proto. This configuration will be removed from Envoy soon. Please see https://github.com/envoyproxy/envoy/blob/master/DEPRECATED.md for details.

I see also that :)
[2019-05-27 10:03:50.245][95][warning][misc] [source/common/protobuf/utility.cc:173] Using deprecated option 'envoy.api.v2.route.CorsPolicy.enabled' from file route.proto. This configuration will be removed from Envoy soon. Please see https://github.com/envoyproxy/envoy/blob/master/DEPRECATED.md for details.

I think that ticket should not be closed :)


No code generated for public keys

Hello,
After the last update (22.12.2018) there is no code generated for the public keys. The text resources are created for neutral and translations, but there is no public key defined at the backend.
Attached sample key "DeleteFailed", it is created as text, but not generated the related public key.

I mean the auto generated code file for the neutral resource dosen't contain a key with public access modifer for the created text.
but if I type the text manually inside the resource file the auto generated code file will also generate a key with public access modifier for my text.


New deploy scripts

Heroku Metrics page was showing extremely high memory usage.

Attempt to solve this by changing build and deploy scripts to create a lighter production build.

Ran a quick deploy from this branch to confirm that memory usage decreased. Metrics report a ~500mb decrease in memory use!


Add support for server name property in dynamic access key links

What would you like the app to enable you to do?
In dynamic links, add support for name. It's the name that is in the first line of a config in the client app. For example:
{
  "name": "COOL FIT YO",
  "server": "bird.net",
  "server_port": 443,
  "password": "0c7hkloWA3DYErqQimt9Cs",
  "method": "chacha20-ietf-poly1305"
}

This feature is already available for shadowsocks links:

Describe alternatives you've considered
There is none for dynamic links.
Additional context
This opens a lot of opportunities for dynamic links that are handled from a custom backend. It's strange that it wasn't implemented when dynamic links were introduced.

This can have a big impact on UX by showing end user their credits right from the app and much more. Any chance it will be available in the next update?


Error "change max number of threads 4"

@jamesmontemagno , when I'm clicking on menus, displays this error: "hill climbing, change max number of threads 4". And is waging, any suggestions to solve this problem?

That isn't an error at all, that is just debug information about threads. That is no issue at all.


Company profile enhancements

Following my conversation with @Nitrino it was determined we need to create an issue it identify and implement some profile enhancements to companies. Some of these off the top of my head could include:

Whether they consider themselves "remote" (despite having offices). I could see people searching on this.
More complete support for social networks. Right now we store Github and a blog. We could and should allow for others: Twitter, Facebook, Medium, ... you get the idea. Can we find a way to support this without having to add new columns for each new type? I think we can and I think we can update the UI to handle this gracefully.

I'd love to get your thoughts @tajchumber since you do a lot of the UI work 😁

Can we find a way to support this without having to add new columns for each new type?

Social networks usually do not require indexing and searching, so we can just use the PostgreSQL JSON array. e.g.:
[
  {
    "network": "twitter",
    "url": "https://twitter.com/elixirschool"
  },
  ...
]

I'd like to tackle the "remote" option for companies.
I suggest adding a remote true/false field to the companies table. Or are more options needed?
Also, what should the design look like?

@maartenvanvliet thank you for your help. I guess the more accurate solution would be to have a remote field in the jobs schema, because a company might have remote and non remote jobs to offer. Than, we could filter the remote jobs for anyone interested.

One suggestion :  Logo of the company ? might help having a visual impact I think. Perhaps doing a redesign of cards might help?

I've wanted an optional field on submissions for a link which shows that the company is using Elixir. It could be public or visible only to admins, but something like a blog post by one of their engineers or a job posting would substantiate the claim.

Yes that would be helpful, I do some quick checks usually to check the claim (blogs, jobs, github repo's, phoenix html tags, cowboy http headers) but having submissions provide evidence would help 😅

@dzachrich @LatitudeAdjustment @gemantzu @samuelpordeus I would love to revisit the conversation to enhance our company profiles further (they're admittedly a bit lackluster). Do any of you have thoughts? All ideas welcome 🎉

From the above, company logo should be a very good addition. The remote flag, I am still not sure about.

Would take a bit of time to convert all the existing companies but thoughts on a format like this?
%{
  company: %{
    company_logo: "" # What sizes? 35x35?
    description: "A brief description of the company",
    github: "https://github.com/",
    industry: "IT Services",
    name: "Example",
    sector: "Information Technology",
    website: "https://www.example.com",
  },
  locations: [%{
    # Support N locations for companies spread out?
  }],
  elixir_usage: %{
    blog_posts: [
      # Links to blog posts on Elixir usage
    ],
    projects: [
      # Links to Open Source Elixir projects
    ],
    summary: "A summary of how Elixir is used",
  },
  last_changed_on: ~D[2023-03-11],
  remote: true
}

It contains all the current information with some additions:

A section specific to Elixir usage with a summary, links to specific blog posts, and any open source Elixir projects
Industry + Sector to better align with GICS
Support for multiple office locations
A remote boolean
Support for logo

This might somewhat overlap with "Elixir usage" but I would love to see an "adoption story" section describing how and why the company chose Elixir - something to show the CIO/CTO crowd that the decision was based on a rational risk/benefit analysis.

@hassan this is a great suggestion! I think this would go a very long way to helping the executive stakeholders as you mentioned. Thanks so much for sharing 🙏

Instead of remote: true maybe it is better to make it an enum?
type BetterNameField = 'REMOTE' | 'ONSITE' | 'HYBRID'

@yordis that's a great idea!


No text in dialogboxes when restoring notes from backup

Hi
Whe I try to restore notes from backup, the dialogbox that opens has no text in it. There are only the two options "yes" and "no". Also if I press yes, the next infobox also has no text in it.
My language settings are german. Maybe there are missing strings?

This happens on Android 6. Will issue a fix asap

Same goes for save changes dialogs

Please have a look at #30, it's fixed. Just waiting for a merge.

Thanks a lot @gigan3rd for your work. Greatly appreciated. Sorry for the late response, been quite busy lately. Will try to do a merge this weekend and work a bit on the app.

@adrianchifor the problem still persists, #30 has not been merged yet.

@marmistrz He seems to write this app from scratch now. This version can be considered obsolete. :)

@gigan3rd can you point me to the repo?

Project no longer maintained unfortunately, will close the issue.

Fixed in 3.1.4 release 1dac89b.


Test config:set with multi-line values

See deis/deis#4844.  While the root cause doesn't apply to v2, we should still assert that this works as expected, just in case any of the encoding required to set env vars within a k8s manifest is interfering with proper interpretation of newline characters by the containerized apps consuming those environment variables.

we have an automated test for multi-line config values here

That works, but we also need to make sure that the environment variable inside the container (through deis run env) is ok as well, which is what occurred in deis/deis#4844

got it. can you create a new issue over in deis/workflow-e2e for this then?

done. deis/deis-e2e#23 covers that. closing!


traefik * Users: unsupported type: slice

When I have users in my consul KV backend, I get this error on startup.
to duplicate..
config in toml format:
[Web]
address = ":8080"
[web.auth.basic]
users = ["test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/"]
then run storeconfig, and then run it against -consul

Fixed by #759


remove maven metadata from embedded repo

workaround for maven assembly bug
https://issues.apache.org/jira/browse/MASSEMBLY-677
should fix issues reported by some people in #1640

Tested the example scripts, they still work for me. Although I didn't have issues in #1640 so can't say if those were fixed.

@xvrl tested manually, this fixes the build.

@xvrl tested manually, this fixes the build. Thanks.


Too difficut to select parent parking of parking space, add drop-down menu to select between all overlapping features nearby

Description
I'm aware of #2225 and #8264, but I was stuck for a long time trying to select the main parking area here because it's covered with parking spaces and the Ctrl + ↑ shortcut doesn’t work when the parking space is selected. You need to select the right point first, only then the shortcut goes to the parking area.
Also, the shortcut is hard to find and not intuitive.
I would suggest adding a drop-down menu to select between all overlapping features nearby. This menu could be opened with a right-click, middle-click, or simply by hovering the mouse over the area for 1 second (like in Autodesk Inventor).
Screenshots
No response

An easier change would be to make the amenity=parking's inner padding wider, like it's done with building and building:part.

Duplicate of #10320.

Yes that would work for this case, but a menu would also help with other unforeseen issues.


Add tvOS support. Close #118

Changes in this pull request
Closes #118.

Add tvOS framework + test targets
Add shared scheme IGListKit-tvOS
Update Podfile and .podspec
Update .travis.yml
Update CHANGELOG
Update README
Run pod install and check-in updates

Pull request checklist

[x] All tests pass. Demo project builds and runs.
[x] I added tests, an experiment, or detailed why my change isn't tested.
[x] I have reviewed the contributing guide

Coverage remained the same at 86.194% when pulling 08cef3a8e495d84f1d5519ec575bb2dacdc7f06b on tvOS-support into eca0205c26ad7e5a663924dc428225fb5f6b41d9 on master.

Coverage remained the same at 86.194% when pulling 08cef3a8e495d84f1d5519ec575bb2dacdc7f06b on tvOS-support into eca0205c26ad7e5a663924dc428225fb5f6b41d9 on master.

Coverage remained the same at 86.194% when pulling 08cef3a8e495d84f1d5519ec575bb2dacdc7f06b on tvOS-support into eca0205c26ad7e5a663924dc428225fb5f6b41d9 on master.

Coverage remained the same at 86.194% when pulling 08cef3a8e495d84f1d5519ec575bb2dacdc7f06b on tvOS-support into eca0205c26ad7e5a663924dc428225fb5f6b41d9 on master.

All green 🎉

You're all crushing it omg


[BUG] Marching Cubes off by 1

Bug Description
I was replacing my marching cubes code that uses skimage with warp's implementation to speed things up, but I think I discovered an issue. It seems like the outer bounds of marching cubes is being ignored. To test this if you create a volume of all -1s and then set the inside to 1s creating a volume of 1s with a boundary of -1, the result of marching cubes will not produce a cube, only 3 sides of the cube will be created (the sides closest to 0). Additionally if you make the -1 boundary 2 thick this resolves the issue.
I think I know where the issue is but I have not tested it, in marching.cu create_cell_tris line 318:
        if (xi >= mc.nx - 2 || yi >= mc.ny - 2 || zi >= mc.nz - 2)
            return;

I think it should be either >= or -2 but not both, for example: xi > mc.nx -2 or xi >= mc.nx -1
I have attached two images to show what warp's marching cubes looks like compared to that of skimage.

System Information
No response

Hi @eschneeweiss, thank you for opening this issue and apologies for any inconvenience caused!
We actually became aware of this bug some time ago and did experiment with what you suggested, however it wasn't enough to fix the issue that we found with our test geometry, and we didn't spend any more time on it since it hasn't been much of a priority so far.
We will update this issue once it's prioritized and addressed, thanks again!

Hi @christophercrouzet thank you for getting back to me. What can I do to help prioritize this? XD

We were hoping to look into it by the end of the year, or early next year. Is it critical on your end?

We were hoping to look into it by the end of the year, or early next year. Is it critical on your end?

I guess it is not that urgent. Thank you for looking into this!


Build optimization for spiffe/spire security containers

🚀 Feature Request
The SPIFFE server, spiffe config, and spiffe agent containers must built the spire components from source due to lack of an Alpine compatible precompiled binary image.

Needs to work on x86_64 alpine
Needs to work on arm64 alpine

According to https://github.com/spiffe/spire/issues/2913#issuecomment-1125180358
it is possible to base an image off of a ghcr.io repository that has statically-linked binaries instead.
$ docker create --name temp ghcr.io/spiffe/spire-server:1.2.3
$ docker cp temp:/opt/spire/bin/spire-server .
$ docker rm test
$ ldd spire-server
	not a dynamic executable
$ ./spire-server
Usage: spire-server [--version] [--help] <command> [<args>]

Available commands are:
    agent
    bundle
    entry
    federation
    healthcheck    Determines server health status
    jwt
    run            Runs the server
    token
    validate       Validates a SPIRE server configuration file
    x509

This will significantly improve build times.
Ideally, should be able to write an entrypoint script that allows the upstream container to be used directly.

Committed in Levski planning 5/19/2022


wal: fix wal.proto backwards incompatibility

The new schema changes overrode the proto field, which caused the old schema message to be incorrectly unmarshalled. This commit adds the field back in (as deprecated) so that we can handle WALs generated before the change.
Closes #281

Test failure is a known flake. Skipped in: https://github.com/polarsignals/frostdb/pull/288

Actually, using oneof instead of types.Any works. Added another commit so you can compare. What do we think? I'll wait for Thor to take a look as well and we can make a decision.

Awesome, TFTRs! Will clean up and merge


Crash with relativenumber=false

Describe the bug
When using lspsaga and moving the cursor over a terminating brace, if relativenumber=false I will get the error below  when editing a lua file. (if relative number is set to true the error will not occur.)
Error detected while processing CursorMoved Autocommands for "<buffer=1>":
Error executing lua callback: ...im-modern/lazy/lspsaga.nvim/lua/lspsaga/symbolwinbar.lua:271: Vim:E36: Not enou
gh room
stack traceback:
[C]: in function 'nvim_set_option_value'
...im-modern/lazy/lspsaga.nvim/lua/lspsaga/symbolwinbar.lua:271: in function 'render_fn'
...im-modern/lazy/lspsaga.nvim/lua/lspsaga/symbolwinbar.lua:336: in function 'init_buf_symbols'
...im-modern/lazy/lspsaga.nvim/lua/lspsaga/symbolwinbar.lua:358: in function <...im-modern/lazy/lspsaga.
nvim/lua/lspsaga/symbolwinbar.lua:357>
Steps to reproduce
This can be confirmed in the 'modern neovim' (distro) located at https://github.com/alpha2phi/modern-neovim  by @alpha2phi.  Just change the option in this 'distro' to relativenumber=false, and open one of the plugin files such as telescope.lua, lazy.lua etc.
Move the cursor to the end of the file.   As it moves over the { , it will produce the error.
Change relativenumber back to true and the error will disappear.
Expected behavior
No errors with relativenumber=false
Neovim version (nvim -v)
v0.9.0-dev+1137-ged05d38d9
lspsaga commit
latest
Terminal name/version
foot version: 1.13.1 -pgo +ime +graphemes -assertions

I think it not relate relativenumber   ? and it's neovim bug .duplicate https://github.com/nvimdev/lspsaga.nvim/issues/812

I think it not relate relativenumber ? and it's neovim bug .duplicate #812

Agreed this must be related.   And I am no expert....   But isnt it strange or significant that the relativenumber setting will also detrmine if the problem occurs?    At least in the above configuraton set    to true.  No problem.   Set it to false.  The issue will occur.  (It took me 3 days to find that out)

maybe you can use statuscolumn instead use that. and that pr wait for review so wait that pr merge.

maybe you can use statuscolumn instead use that. and that pr wait for review so wait that pr merge.

No prob.  i have relative number set to true and all ok.   Just commented to point out 1)   The wierd behaviour and 2) possible work around.  ;)


Visualizer: let semantics editor handle loading and saving

Changes made. @pdubroy let me know if there is anything needs to be modified.

Hi Meixian, I think it would be a good idea to clean up the control flow logic in the try/catch/finally block, as I've suggested in my comments above. Otherwise everything looks good. Thanks!

I get ride of the finally block, and add some comments, hope this helps. As there are still two more pull requests left, so I'll go ahead and merge this part. Let me know if it's still unclear.

Great! Looks much easier to follow now. Also I saw you cleaned up the other try/catch/finally blocks as well -- thanks 😄


Implement pure passwordless

Emails are passwords.
Some sort of time-based authentication, where PINs are issued and validated into authTokens.
PIN
Request
POST /auth/pin
{
  "email"<EMAIL_ADDRESS>}

Response
{
  "message": "success"
}

Token
Request
POST /auth/token
{
  "email"<EMAIL_ADDRESS>  "pin": "FG76H6"
}

Response
{
  "token": "abdfgbsd9fgbsdfgsdkjfgbsd89fgbdsfiohgbdfgvdsfbnvd8f97vh98sdfn"
}

OTP implemented.


links on job description pages aren't obviously links

in this example post, the links at the bottom of the page are not obviously links to other pages: https://www.ockam.io/team/Senior-Engineer-Elixir/998d280c-3c74-4965-8892-d346c1115b98

The application and interview process, is an example of text that is not obviously a link.
I propose changing the color of the text to Ockam blue #52C7EA . Then when the mouse is over the text have it change to dark ockam blue #36A7C9 and underline it.
Here is the Style guide to get colors and for additional guidance. https://www.ockam.io/style-guide

Willing to work on this..
Kindly assign to me.

@Zyzer01 That's awesome, all yours.
Please let us know if your have any questions as you explore. You can also ask questions on the contributors discord https://discord.gg/RAbjRr3kds

@metaclips FYI ☝


Fix build system dependency relationships

PR #1569 moved some constants into the shared ComponentConstants.jar
file. Building the full system works with this change, but only due to
implicit relationships in the order of how targets are
executed. Unfortunately, these implicit relationships are not present
when running either ant extensions or ant RunLocalBuildServer,
which results in a broken build.
This changes does two things:

Add an explicit dependency to CopyToRunLibDir in buildserver on the
target to build ComponentConstants.jar
Breaks a cyclic dependency of the components module on the
buildserver module on the components module due to the extensions
mechanism wanting to build the buildserver to aggregate the
dependencies of the AndroidRuntime into a single directory. This is
accomplished by breaking the move into two parts, one which moves the
files into the public build directory, which is now populated by the
components build.xml, and the second which copies them into the
buildserver in its build.xml. This allows the extensions mechanism to
use the public directory so it no longer needs to reference the
buildserver.

Fixes #1604
Change-Id: I8df1a373dbb4e98a53e9a41817a15b1dfd4856c6

hi sir after this fix i am able to build ant extensions with the source and library available with app inventor source but now i want to add .jar file so where should i place that .jar file and what and where to be added in build.xml

@asifcool54 Your question isn't related to this issue. You should probably ask question in open-source forum here: https://groups.google.com/forum/#!forum/app-inventor-open-source-dev


Remove unneeded setupLog instance from main

Signed-off-by: Michail Resvanis<EMAIL_ADDRESS>

Codecov Report

Merging #20 (74d0e3c) into main (bacd0bc) will not change coverage.
The diff coverage is 0.00%.

@@           Coverage Diff           @@
##             main      #20   +/-   ##
=======================================
  Coverage   80.00%   80.00%
=======================================
  Files           8        8
  Lines         640      640
=======================================
  Hits          512      512
  Misses        119      119
  Partials        9        9

Impacted Files
Coverage Δ

main.go
20.93% <0.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.


pcall fzf-lua with the correct name when checking integrations

When calling
local enabled = M.values.integrations[name]

name will be "fzf_lua". But pcall needs the correct plugin name with a hyphen instead if an underscore, which is "fzf-lua".

Ah, alright, thanks - didn't realize the divergence.


Remult Admin Nested Actions quickfix

Making nested actions sticky

Quick update: there's a great sveltekit tutorial written By @jycouet
You can find it at:
https://remult.dev/tutorials/sveltekit/


Terraform compliance

Describe this PR
What is the problem we're trying to solve
To ensure that the developer hub API hosted in AWS complies with the highest standards as set out at Hackney.
What changes have we introduced
Amended config.yml to include compliance rules
Added feature files in staging, development and production with compliance rules
Checklist

[x] Code pipeline builds correctly

Follow up actions after merging PR
Create documentation for the compliance process

The pipeline is failing due to the BackupPolicy tag casing difference in the dynamodb.tf files. Update the dynamodb.tf files for each environment to be:
BackupPolicy


Organized native/web payment app buttons. Removed Alipay option.

This pull request organizes buttons and links to install native / web payment apps. Also removes Alipay option.

Thanks a lot Eiji? I have a question, should the package-lock.json files be included here?

@madmath removed package-lock.json


validate top level slice

Fixes Or Enhances
Adds ability to validate top level slice of structs, fixes #882 .
Make sure that you've checked the boxes below before you submit PR:

[x] Tests exist or have been written that cover this particular change.

@go-playground/validator-maintainers

Coverage increased (+0.03%) to 75.167% when pulling 0afb447ca617ef2ecc6dce593fb4d0fee0019e9f on pete911:slice-validation into 88976f39f600bb3979de1ae5efdfd9cff2cf10f1 on go-playground:master.

see https://github.com/go-playground/validator/issues/882#issuecomment-1114281307


Added missing tests for tree_walker#walk.

Signed-off-by: dblock<EMAIL_ADDRESS>Description
Added missing tests for tree_walker#walk.
Part of #264.
Check List

[x] Commits are signed per the DCO using --signoff

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Codecov Report

Merging #347 (ae3a034) into main (7027e65) will increase coverage by 1.26%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##             main     #347      +/-   ##
==========================================
+ Coverage   40.44%   41.70%   +1.26%
==========================================
  Files          23       23
  Lines         633      633
==========================================
+ Hits          256      264       +8
+ Misses        377      369       -8

Impacted Files
Coverage Δ

bundle-workflow/src/paths/tree_walker.py
100.00% <0.00%> (+100.00%)
: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 7027e65...ae3a034. Read the comment docs.


Revert "Adding new test for detecting workload cluster rollingupgrade"

Issue #, if available:
Description of changes:
This reverts commit 26480c33d215237199b3aa9814995a778f5f1a41.
The commit was causing the build to fail with error
# github.com/aws/eks-anywhere/test/e2e [github.com/aws/eks-anywhere/test/e2e.test]
test/e2e/workload_clusters_test.go:42:12: undefined: latestMinorRelease
make[1]: *** [e2e-tests-binary] Error 2

presumably due to a missing prerequisite change which introduced the latestMinorRelease function. This test itself is not necessary for this release branch and can be excluded from the branch.
Testing (if applicable):
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

/approve


PropertyPaneDynamicField class properties ignored

Category

[ ] Question
[ ] Typo
[x] Bug
[ ] Additional article idea

Expected or Desired Behavior
When using the PropertyPaneDynamicField widget for dynamic data, the properties sourcesLabel and filters should not be ignored and work as explained in their respective documentation.
As documented:

The sourcesLabel property should let you replace the default "Connect to source" label by your own label
the filters property should let you filter the sources displayed in the widget's dropdown either by componentId, propertyId or sourceId

Observed Behavior
Using the code below in SPFx 1.8.0 :
PropertyPaneDynamicFieldSet({
    label: 'Paging 1',
    fields: [
        PropertyPaneDynamicField('selectedPage', {
            sourcesLabel: 'Connect to a paging WebPart',
            label: 'Paging 2',
            filters: {
                componentId: Guid.parse('e8e4a931-16e9-4980-98fa-a911cd517080'),
                propertyId: 'selectedPage'
            }
        })
    ]
})

The label "Paging 1" is ignored and not displayed anywhere
The label "Connect to a paging WebPart" is ignored and does not replace the default "Connect to source" label
The filters property is ignored and the dropdown shows everything available no matter what I put in there

It looks like the API is there but not coded yet, and it's a shame because I must be able to filter the sources displayed in the dropdown :(
Steps to Reproduce
Use the code above and notice how the properties are ignored

Where are you seeing the sourcesLabel incorrectly documented? This works locally for me in v1.7.1+ with respect to filters, label & sourcesLabel:
PropertyPaneDynamicFieldSet({
  label: 'Select image source',
  fields: [
    PropertyPaneDynamicField('apolloImageFilename', {
      label: 'Apollo image source'
    })
  ],
  sharedConfiguration: {
    depth: DynamicDataSharedDepth.Property,
    source: {
      sourcesLabel: 'Select the web part containing the list of Apollo Missions'
    },
    property: {
      filters: { propertyId: 'image' }
    }
  }
})

@andrewconnell I didn't see anything incorrectly documented, it just doesn't do anything on my side :(
However, if you look at my code, the sourcesLabel and filters property are on the PropertyPaneDynamicField control, not within the sharedConfiguration property as shown in your code.
Is that how it's supposed to be done? Because both properties are also documented on the PropertyPaneDynamicField control...I will try it the way you suggested tonight, will report back if that works better 👍
Thanks!

@andrewconnell I confirm that specifying the sourcesLabel and filters properties in the sharedConfiguration object rather than on the PropertyPaneDynamicField itself does work as expected. And since my source only exposes one property than I my filter is targeting it, the property dropdown is not even shown which is exactly what I needed because at this point it's too much information for the user.
Still not sure why the properties are also documented on the PropertyPaneDynamicField since it doesn't look like they do anything, but it does work perfectly on the sharedConfiguration so thanks a lot for this!


NSDate convenience initializer shows weird dependency on summer time

When testing  this code:
                    let rome = Region(timeZoneName: .EuropeRome)
                    let date = NSDate(year: 2011, month: 10, day: 9, region: rome)
                    let interval = date.timeIntervalSinceReferenceDate
                    expect(interval.toString()) == "10y 9m 5d 22h"

It fails when executed in summer time and succeeds in winter time.
In summer time it matches "10y 9m 5d 21h".

Time zone evaluation should take place agains the date evaluated, not the current date.

Fixed in 979f3ad203dcdc8cbd21183acdb4feeaee952e4c


Allow release notes in GitHub release

These can just be the release notes copied over from Release Metadata as a configuration option on the train.

This does not seem that useful or sensible to do automatically. If one wants to add promotional material to their GH releases (perhaps OSS repos) they can edit themselves.


Pest icon : False positive

It looks like there can be false positive for the icon on test files.
This occured in phpstan-src tests directory with version 0.2.1-alpha.2.

Thanks for reporting this.
Looks like it is recognising the method call to test as a pest test call.

A release will be made shortly with a fix for this. It might take 1-2 days before it it approved by jetbrains.


Trait not found

What happened?
When I use the optimize option I get the error Trait "Filament\Forms\Components\Concerns\HasUploadingMessage" not found.
The trait is not in \vendor\filament\forms\src\Concerns. When I put on comment 'use Concerns\HasUploadingMessage;' it's working fine. Version error?
How to reproduce the bug
Make a Filament form with Forms\Components\SpatieMediaLibraryFileUpload::make('images')
->image()->imageEditor()->optimize('webp')
Package Version
joshembling/image-optimizer 1.4.0 + Filament 3.1.47
PHP Version
8.2.15
Laravel Version
10.48
Which operating systems does with happen with?
Windows
Notes
No response

Same issue described here
https://github.com/joshembling/image-optimizer/issues/15


Textlocal SMS OTP not being sent.

I'm using Textlocal as the SMS provider in order to send SMS OTP for users to signup/login.
SMS sent via Supabase fails with error "Textlocal error: Internal error". There is no additional information in the Auth Logs.
As I'm able to successfully able to send SMS from Textlocal dashboard and through Textlocal API via Postman, so don't think there is any issue at Textlocals end. Have also verified that the Textlocal config in supabase is exactly the same as what I'm using to send SMS successfully from Textlocal API.
Have also checked this file https://github.com/supabase/gotrue/blob/b57c3959789eeea27a3cd7489895aa68a6479e9b/internal/api/sms_provider/textlocal.go and though I'm not proficient in Go seems like the Textlocal api is configured correctly.
So not sure why sending Textlocal SMS from Supabase fails. Is there a way I can check the request params of the Textlocal API being hit by supabase?
curl of the api request that actually works (have replaced private data with X):
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'apikey=XXXXXXXXXXXXXXXXXXXXX' \
--data-urlencode 'message=123456 is your one-time password to your XXXXX account. This OTP is valid only for 5 minutes. Confidential.

A product of XXXXXX Private Limited' \
--data-urlencode 'numbers=91XXXXXXXXXX\
--data-urlencode 'sender=XXXXXX'

We contacted the TextLocal team and they were quick to help.
TextLocal API was failing because of the next line used in the Message Template.
Original message
{{ .Code }} is your one-time password to your XXX account. This OTP is valid only for 5 minutes. Confidential.
A product of xxx Private Limited
Updated Message
{{ .Code }} is your one-time password to your XXX account. This OTP is valid only for 5 minutes. Confidential.%n %nA product of xxx Private Limited
Solution
TextLocal team informed us to use %n for the next line while creating the template in TextLocal and while adding it to the Supabase SMS message.
We didn't find any documentation on same anywhere, hope this helps others in future.

Resolved.
For anyone else who faces similar issue, if your sms template has a new line make sure you add %n %n in the template instead of actual new line.
For example for in my case the template was
123456 is your one-time password to your XXXXX account. This OTP is valid only for 5 minutes. Confidential.

A product of XXXXXX Private Limited

I modified it to
123456 is your one-time password to your XXXXX account. This OTP is valid only for 5 minutes. Confidential.%n %nA product of XXXXXX Private Limited

Make sure you modify the template in both Textlocal and Supabase.


Replaces the -i INFILE option with an @ prefixed value

-i INFILE broken in credstash 1.3.1. This change replaces the -i option which breaks compatibility with anyone previously using the -i option.
Relates to issue #19

I actually really like the @-syntax. Can you please update the help and README as well?

Sure, how's it look now?

LGTM

I am a bit confused why this change was made, because the whole point of Credstash is that it loads secrets into KMS, and secrets often contain characters like "@". Why didn't we just fix the -i option?

Some of the approaches to fixing the -i option can be found here. If there's a better fix that's been overlooked, do propose it or submit a PR.

It's fine, I can use the work-around now that I know about it. From a UX design point of view, I think the original -i INFILE is a lot more intuitive and sooner or later I expect that use of @ is going to cause a lot of people problems, just as it did me. But it sounds like you had problems with that. Sorry, I probably don't have time to propose a fix for -i.


Remove Telemetry from Ansible

Issue/Feature Description:
Remove the deprecated Telemetry service installation and uninstallation from the SODA installer
Why this issue to fixed / feature is needed(give scenarios or use cases):
Telemetry service was added in the earlier releases of OpenSDS.
This service is since deprecated and we now use Delfin for the monitoring of storage devices.
Telemetry service was installed and uninstalled using the ansible installer. Since the Telemetry service is no longer used the installer files and scripts that were used for Telemetry should be removed from the Installer repository.
How to reproduce, in case of a bug:
These are the locations of the telemetry related files.
/ansible/roles/telemetry-installer/
/ansible/roles/telemetry-uninstaller
ansible/group_vars/telemetry.yml
Other Notes /  Environment Information: (Please give the env information, log link or any useful information for this issue)
SODACODE 2022 Issue

This is a duplicate of documentation/118
You could raise the PR in this repository and link it to the issue there.


TaskGroup feature support, refactor changes, and airflow task dependency validation

TaskGroup feature support, refactor changes, and airflow task dependency validation

Reviewed Code. Looks good to me. Closing the PR.


miss dist dir in v1.2.1

Compiling is failed when I update dom-element-path to 1.2.1 from 1.2.0. I found thre miss dist dir in v1.2.1. Please check and thank you for your time.

Hey!
The dist dir should be automatically created during build process. Are you running the build using yarn build command?

I think the release package should include it, which says you should run yarn build before publishing it to npmjs.com.

Thanks, that was indeed the case. Published 1.3.1 version with dist folder included.


Proto domain api improvements

What changed?
This is a follow-up to #3863 focused on few improvements on Domain API. None of them are strictly necessary, we can discuss whether to take none, some or all of them.

Archival status and URI wrapped into Archival message https://github.com/uber/cadence/commit/f9be08345c0bc4c9e0694b94fe640992d81e7c2f
Flattened UpdateDomainInfo into UpdateDomainRequest as it is not used anywhere else. https://github.com/uber/cadence/commit/7c506386f25eead9720090778639f0f553863508
Add common Domain message which can be reused where complete domain is returned, in: UpdateDomainResponse, DescribeDomainResponse and ListDomainsResponse https://github.com/uber/cadence/commit/e32a6f2044c6d25f8b42582d6c5b9ff9b412cba6
Move security_token to first position, to better indicate that these requests require authentication. https://github.com/uber/cadence/commit/77c024e08f1f297c5c1787b6904679126586105c
Use google.protobuf.FieldMask in  UpdateDomainRequest to specify which fields should be updated. This is used to distinguish between "do not update" and "reset to zero value" semantics. https://github.com/uber/cadence/commit/6544b3398448ac70ec937a552160fbb644b67fac
Finally flatten DomainInfo, DomainConfiguration and DomainReplicationConfiguration structures. Those are related how we store various domain attributes internally. Exposing that as part of API is not necessary and could be simplified as basic domain properties. https://github.com/uber/cadence/commit/0714e0967422ef2d668068d39b84603b8cf1e232

Why?
To simplify DomainAPI and make it more consistent and idiomatic.

How did you test it?

Potential risks

Coverage increased (+0.04%) to 61.46% when pulling f7b200c15a66d88eca8b0590647a9cf4f082dc9e on vytautas-karpavicius:proto-domain-api into 6f67616f6c8c3c8d08f2c480551a16f9c96f4d9f on uber:master.

Coverage increased (+0.04%) to 61.46% when pulling f7b200c15a66d88eca8b0590647a9cf4f082dc9e on vytautas-karpavicius:proto-domain-api into 6f67616f6c8c3c8d08f2c480551a16f9c96f4d9f on uber:master.

Looks great overall. The same-typing of Archival is the only thing that gives me a bit of pause, as it seems possible that those could diverge.... but it does feel like options for one would be added to the other eventually even if not immediately.

Reverted Archival wrapper for now. While it is nicer, it is probably safer not to do it.

Looks great overall. The same-typing of Archival is the only thing that gives me a bit of pause, as it seems possible that those could diverge.... but it does feel like options for one would be added to the other eventually even if not immediately.

Reverted Archival wrapper for now. While it is nicer, it is probably safer not to do it.


Allow a user to specify the timeout

Right now all timeout setting are hard coded, this needs to be cleaned up.

This works, however terminate returns success on time out.  This is because the termiante process is ill defined with respect to the return code.  The terminate pgm fails, but the VM shutdown and the db clean up work.  Proper errors are logged.

af71d4d900c163f9076f45708d386acdc6f5e696


Fuzzy Search Algorithm

Hi, firstly, thank you for this component.
The default search algorithm isn't working well for us. For example, we start the search with "prot...", it should return "protein". But it returns "something something protein something" to us. This probably stems from the fact that there are too many possible matches, and it returns the first few. Thus, we've turned to external algorithms. Right now, we're trying to use this component with a fuzzy search algorithm (https://github.com/krisk/fuse) as it is the most appropriate for our use case, but we couldn't make it work.
Do you have any ideas or suggestions on how to do that?
Thanks again for this component, it's really helpful. Have a nice day.

Hi @MelihDarcanxyz
This component was developed with the purpose to be very simple yet very customizable per user needs, and thus it is completely up to you how to write search function which is passed then to front-end component
By saying "we couldn't make it work" - do you probably mean that  you were unable to use custom fuzzy search library as a dependency for you search function?

Hi @voznik , thanks for update. Yes, that's what I meant. Despite even editing the source code, we had no luck using an external fuzzy search package. We probably couldn't figure it out.
Fist, we have to init the search algorithm:
const fuse = new Fuse(suggestions, {
    includeScore: true,
    threshold: 0.3,
    shouldSort: true,
    distance: 100,
});

Then, we need to call the search function whenever the textcomplete triggers a search function.
function autocomplete(val) {
    // 0, 20 is arbitrarily choosen numbers. They are configured with textcomplete too.
    const results = fuse.search(val).slice(0, 20)
    return results
}

I typed this on the fly, so there may be syntax errors. But the logic is the same.
Thanks in advance, and thanks again for this component.

hey @MelihDarcanxyz congrats, I decided not to argue about anything and implemented default search using Fuse.js
see example.py with default emoji strategy and new company_name strategy
hope this will help

Wow, didn't expect that. Will definitely be of help, have a nice day!

@MelihDarcanxyz if you have time - would you be open to contribute to this repo and create functionality to generate/update CHANGELOG, and update actions workflow to also create github release during release ?

@voznik Sure, but I'll need to understand what to do or how to do properly beforehand. How can we do it?


Error on tensor size & How to config with 16KHz waves?

Hi, I use custom dataset with 16bit PCM 16KHz waves.Here is my configs
{   "train": {     "log_interval": 200,     "eval_interval": 1000,     "seed": 1234,     "epochs": 20000,     "learning_rate": 2e-4,     "betas": [0.8, 0.99],     "eps": 1e-9,     "batch_size": 8,     "fp16_run": false,     "lr_decay": 0.999875,     "segment_size": 7872,     "init_lr_ratio": 1,     "warmup_epochs": 0,     "c_mel": 45,     "c_kl": 1.0   },   "data": {     "training_files":"filelists/ljs_audio_text_train_filelist.txt",     "validation_files":"filelists/ljs_audio_text_val_filelist.txt",     "text_cleaners":["basic_cleaners"],     "max_wav_value": 32768.0,     "sampling_rate": 16000,     "filter_length": 1024,     "hop_length": 256,     "win_length": 1024,     "n_mel_channels": 80,     "mel_fmin": 0.0,     "mel_fmax": null,     "add_blank": true,     "n_speakers": 0,     "cleaned_text": true   },   "model": {     "inter_channels": 192,     "hidden_channels": 192,     "filter_channels": 768,     "n_heads": 2,     "n_layers": 6,     "kernel_size": 3,     "p_dropout": 0.1,     "resblock": "1",     "resblock_kernel_sizes": [3,7,11],     "resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]],     "upsample_rates": [8,8,2,2],     "upsample_initial_channel": 512,     "upsample_kernel_sizes": [16,16,4,4],     "n_layers_q": 3,     "use_spectral_norm": false   } }
when I ran train.py, such error happened
`[INFO] {'train': {'log_interval': 200, 'eval_interval': 1000, 'seed': 1234, 'epochs': 20000, 'learning_rate': 0.0002, 'betas': [0.8, 0.99], 'eps': 1e-09, 'batch_size': 8, 'fp16_run': False, 'lr_decay': 0.999875, 'segment_size': 8192, 'init_lr_ratio': 1, 'warmup_epochs': 0, 'c_mel': 45, 'c_kl': 1.0}, 'data': {'training_files': 'filelists/ljs_audio_text_train_filelist.txt', 'validation_files': 'filelists/ljs_audio_text_val_filelist.txt', 'text_cleaners': ['basic_cleaners'], 'max_wav_value': 32768.0, 'sampling_rate': 16000, 'filter_length': 1024, 'hop_length': 256, 'win_length': 1024, 'n_mel_channels': 80, 'mel_fmin': 0.0, 'mel_fmax': None, 'add_blank': True, 'n_speakers': 0, 'cleaned_text': True}, 'model': {'inter_channels': 192, 'hidden_channels': 192, 'filter_channels': 768, 'n_heads': 2, 'n_layers': 6, 'kernel_size': 3, 'p_dropout': 0.1, 'resblock': '1', 'resblock_kernel_sizes': [3, 7, 11], 'resblock_dilation_sizes': [[1, 3, 5], [1, 3, 5], [1, 3, 5]], 'upsample_rates': [8, 8, 2, 2], 'upsample_initial_channel': 512, 'upsample_kernel_sizes': [16, 16, 4, 4], 'n_layers_q': 3, 'use_spectral_norm': False}, 'model_dir': './logs\ljs_base'}
./logs\ljs_base\G_0.pth
[INFO] Loaded checkpoint './logs\ljs_base\G_0.pth' (iteration 1)
./logs\ljs_base\D_0.pth
[INFO] Loaded checkpoint './logs\ljs_base\D_0.pth' (iteration 1)
C:\Users\randm\miniconda3\envs\vits\lib\site-packages\torch\functional.py:581: UserWarning: stft will soon require the return_complex parameter be given for real inputs, and will further require that return_complex=True in a future PyTorch release. (Triggered internally at  ..\aten\src\ATen\native\SpectralOps.cpp:639.)
normalized, onesided, return_complex)
[INFO] Train Epoch: 1 [0%]
[INFO] [3.3916234970092773, 0.9196377992630005, 0.5174797177314758, 59.94203567504883, 1.200174331665039, 70.09718322753906, 0, 0.0002]
[INFO] Saving model and optimizer state at iteration 1 to ./logs\ljs_base\G_0.pth
[INFO] Saving model and optimizer state at iteration 1 to ./logs\ljs_base\D_0.pth
Traceback (most recent call last):
File "train.py", line 290, in
main()
File "train.py", line 50, in main
mp.spawn(run, nprocs=n_gpus, args=(n_gpus, hps,))
File "C:\Users\randm\miniconda3\envs\vits\lib\site-packages\torch\multiprocessing\spawn.py", line 230, in spawn
return start_processes(fn, args, nprocs, join, daemon, start_method='spawn')
File "C:\Users\randm\miniconda3\envs\vits\lib\site-packages\torch\multiprocessing\spawn.py", line 188, in start_processes
while not context.join():
File "C:\Users\randm\miniconda3\envs\vits\lib\site-packages\torch\multiprocessing\spawn.py", line 150, in join
raise ProcessRaisedException(msg, error_index, failed_process.pid)
torch.multiprocessing.spawn.ProcessRaisedException:
-- Process 0 terminated with the following error:
Traceback (most recent call last):
File "C:\Users\randm\miniconda3\envs\vits\lib\site-packages\torch\multiprocessing\spawn.py", line 59, in _wrap
fn(i, *args)
File "D:\TRAINING\vits\train.py", line 117, in run
train_and_evaluate(rank, epoch, hps, [net_g, net_d], [optim_g, optim_d], [scheduler_g, scheduler_d], scaler, [train_loader, eval_loader], logger, [writer, writer_eval])
File "D:\TRAINING\vits\train.py", line 165, in train_and_evaluate
y = commons.slice_segments(y, ids_slice * hps.data.hop_length, hps.train.segment_size) # slice
File "D:\TRAINING\vits\commons.py", line 53, in slice_segments
ret[i] = x[i, :, idx_str:idx_end]
RuntimeError: The expanded size of the tensor (8192) must match the existing size (2786) at non-singleton dimension 1.  Target sizes: [1, 8192].  Tensor sizes: [2786]`
Is this error due to dataset's sample rate(16KHz instead of 22.05KHz)? What adjustment should I make to continue the training? Thanks in advance.

Please inform if further infomation required.

do you remove .spec.pt file after you change sample_rate, ps: segment_size should be divisible by hop_size
https://github.com/jaywalnut310/vits/blob/2e561ba58618d021b5b8323d3765880f7e0ecfdb/data_utils.py#L72-L80


feat: Redesigned Destinations Section with Hover Card Effect

Title and Issue number
Title : Redesigned Destinations Section with Hover Card Effect
Issue No. : #977
Close #977
Description
Redesigned Destinations Section with Hover Card Effect and Swiper
Video/Screenshots (mandatory)
https://github.com/user-attachments/assets/4b867cbd-7c20-425a-bb1a-7ad5a4ac0437

Type of PR

[ ] Bug fix
[X] Feature enhancement
[ ] Documentation update
[ ] Other (specify): _______________

Checklist:

[X] I have performed a self-review of my code.
[X] I have commented my code, particularly in hard-to-understand areas.
[X] I have tested the changes thoroughly before submitting this pull request.
[X] I have provided relevant issue numbers, screenshots, and videos after making the changes.
[X] I have gone through the  contributing.md file before contributing.

##Are you contributing under any Open-source programme?

[X] I am contributing under GSSOC'24
[ ] I am contributing under VSOC'24

@apu52, please review the pr.


[BenchMark] EmptySet Not Found Exception

Describe your question
I try to benchmark my code with large-data in the latest data.zip (SHA-256: f31494e7b76f72961f78983bb505e33e4446d80da4e78520481c5202b6de946c) but it always fails at Step 4: Test VideoService#getHotspot(String).
Here is the error message:

I've updated my Kotlin plugin in IntelliJ IDEA to 233.13135.103-IJ (which seems to be the latest version in IDEA). And this getHotspot function do work when I run it with bootRun. I return a Collections.emptySet() on corner case.
How can I fix this?

sorry, do you mean you are using kotlin? actually my std program was written in kotlin and it may be an issue on the test case generator

No, I'm not using Kotlin. I just update the plugin to make sure it's not the plugin's problem.
Here is a full error message:

Encountered the same problem

sorry for the inconvenience, it was fixed in https://github.com/hezean/sustc/commit/695a506913a75040bd9106efb10efacf6fe91676, please update to the latest code 🙏


Promisify users' callbacks

This method will prevent users' functions from blocking the main thread. I might write a unit test to cover this scenario.
Closes #197
Please don't delete this checklist! Before submitting the PR, please make sure you do the following:

[x] It's really useful if your PR references an issue where it is discussed ahead of time.
[x] This message body should clearly illustrate what problems it solves.
[x] Ideally, include a test that fails without this PR but passes with it.

Tests

[x] Run the tests with npm run test and lint the project with npm run lint and npm run prettier

Welcome! @Secreto31126 , any insights on when v2 can be released

I'm planning to release it mid September, after Node 16 reaches EoL


added wiffi to stable repo and updated recent to recent version of wiffi

this version seems to be stable according to the feedback in the forum

Please remove "version" from latest  repo file because latest version is always queried from npm automatically. And please do not change published at all. eill stay on date when first published

Sorry, I added wiffi to stable and reverted latest


Forbid from displaying pop-up windows during image export

Hello,
This pull requested created at the behest of @jackparmer (at https://github.com/plotly/image-exporter/issues/65#issuecomment-380532988).
cc: @jmmease @etpinard @n-riesco
How does it look?
―James

@JamesCropcho @etpinard shall we add show: false to the server too?
https://github.com/plotly/image-exporter/blob/1c164bb2a4cb69f67a0f842aaf371bcb7721ca55/src/app/server/coerce-opts.js#L26

@n-riesco @etpinard I think we should do exactly what @jmmease did. I was hoping he could confirm that this PR achieves that.

Can someone please tell me what exactly what show: false does and how it differs from using xvfb? Thanks.

@etpinard My understanding is that when show: false is used, the BrowserWindow is created minimised (in other words, I think xvfb is still needed).

shall we add show: false to the server too?

Yep, good catch :fishing_pole_and_fish:

When I perform a png conversion from the command line I see no window
bin/plotly-graph-exporter.js '{"data":[{"y": [3, 2, 5, 3]}],"layout":{}}' -o out --format=png

But for a PDF I still get a window
bin/plotly-graph-exporter.js '{"data":[{"y": [3, 2, 5, 3]}],"layout":{}}' -o out --format=png

If I hardcode show: false in src/component/plotly-graph/render.js the window goes away during PDF conversion
https://github.com/plotly/image-exporter/blob/c8db9df30280aeacf01941804df5554e21ad3e4b/src/component/plotly-graph/render.js#L158
Is there anything I should do from the command line to cause imgOpts.debug to be false here?

I have two additional related suggestions for your consideration in this PR @JamesCropcho  @jackparmer @etpinard @chriddyp

The electron BrowserWindow has a skipTaskbar option with description

skipTaskbar Boolean (optional) - Whether to show the window in taskbar. Default is false.

On Windows and Linux, setting this to true should keep the electron window from displaying in the taskbar, which I believe to be desirable for making image export a seamless experience for Windows and Linux Python/R users.  I think this change would just involve adding the skipTaskbar option everywhere the show option is added.
Note: I'm on OS X so I can't test this directly, as the dock is not considered a taskbar (See below)

To hide the electron icon from the dock on OS X it is recommended (electron-userland/electron-builder#1456) to add "extendInfo": {"LSUIElement": 1} to the top-level mac configuration settings (which I believe are in package.json for this project). e.g.

"mac": {
  "extendInfo": {
    "LSUIElement": 1
  }
}

Note: I believe these settings only take effect after the application is bundled, so I don't expect it to change the behavior of running bin/plotly-graph-exporter.js out of the development directory.
Thanks for considering. I know I'm being a perfectionist here :-)

Great finds @jmmease !
@JamesCropcho can you please incorporate Jon's feedback into this PR?

@jackparmer Yes, certainly. I will do so.

@jackparmer I have incorporated all of Jon's feedback into this PR, as per your request.
@jmmease, could you kindly examine my recent commits and ensure they adhere to both the letter and spirit of your proposals?

Everything is working well on OS X. No windows popup during export to at least png, pdf, and eps.
Also, I merged this branch with #63, called npm run pack, installed the .dmg, and ran export commands using the /Applications/Plotly Graph Exporter.app/Contents/MacOS/Plotly Graph Exporter  executable and I can confirm that the dock icon is suppressed, without even a flicker!
I looked through the code, and my only comment is I'm curious if there was a reason not to include skipTaskbar alongside all of the new uses of show: false. As I mentioned above, this option relevant only Linux/Windows so I can confirm if it's working.
Can someone on Linux/Windows confirm that the electron application doesn't show (or even flicker) in the taskbar during export of png, pdf, and eps?
cc: @jackparmer @etpinard

After merging #63 into #66 and running npm install && npm run pack, I tested the AppImage version on Ubuntu 16.04, and it runs without flicker (tested --format pdf, png and svg).

I've noticed that running the AppImage version now prints out the message:
installed: X-AppImage-BuildId=5a6b0d10-3f0d-11a8-3934-f7a37a902d22 image: X-AppImage-BuildId=5a6b0d10-3f0d-11a8-3934-f7a37a902d22

I don't remember this happening before.

Thank you for your review, Jon.

I looked through the code, and my only comment is I'm curious if there was a reason not to include skipTaskbar alongside all of the new uses of show: false.

Presumably skipTaskBar is in fact being used the way you proposed, via: https://github.com/plotly/image-exporter/pull/66/files#diff-6b824d79a3398a233ff5db1d7f07a115R15. Unlike show: false, which is conditional upon being in debug mode, skipTaskBar would simply always be true, per your recommendation. Kindly let me know what you think.

I've noticed that running the AppImage version now prints out the message:
installed: X-AppImage-BuildId=5a6b0d10-3f0d-11a8-3934-f7a37a902d22 image: X-AppImage-BuildId=5a6b0d10-3f0d-11a8-3934-f7a37a902d22

I am fine with that, if everyone else is.
@jmmease @etpinard @n-riesco

@JamesCropcho Yes, I see that now. Thanks for explaining.
I too noticed an error/warning message (I can't reproduce it at the moment). For me, it only occurred the very first time I ran the command after building it, and it didn't appear to interfere with the export itself.  That doesn't trouble me personally.
So this lgtm. Thanks to all for being open to my feedback (and for choosing to open source this in the first place!).  I'm really excited to have this on the Python side, it fills in a missing piece that has prevented some people (perhaps many people) from settling on plotly.py as their primary visualization library.

This is looking amazing. show: false and skipTaskBar: true are working out beautifully on my Ubuntu 16.04 machine. Big ups to @jmmease for bringing this up in https://github.com/plotly/image-exporter/issues/65 and shoutout to @n-riesco for suggesting show: false in https://github.com/plotly/image-exporter/issues/65#issuecomment-379542805! I was foolishing waiting for first-class support of the --headless chromium flag in Electron.
It might be nice to ask someone to test this out on Windows before merging this thing. Does anyone know someone with access to a Windows machine?

@etpinard I am able to dual-boot into Windows 10 Pro on my development machine, and I can perform specific tests in that environment upon request. I do not believe I have Git, Powershell or other such tooling present, however.

@n-riesco Could you give me a command(s) you'd like me to execute, specifying which shell to do so in, and optionally specify anything in particular I should look for?

@JamesCropcho First, you need a JSON file that defines a plotly chart (I used this one.
After running the Windows installer, I'm guessing, an executable named Plotly Graph Exporter.exe will be accessible from the command line. If that's the case, the command to  export 20.json into pdf would be:
Plotly\ Graph\ Exporter.exe 20.json --format pdf

Hello @n-riesco, I'll recap what happened here.
I ran the installer. I got this:

...however all was otherwise seemingly okay.,
The installation did not add an executable to the path, at least in the out-of-box Command Prompt. I still found the executable, and ran it. It worked, even if I had to press enter one additional time, to get the prompt back:
C:\Users\James\Downloads>"C:\Users\James\AppData\Local\Programs\image-exporter\Plotly Graph Exporter.exe" --help

C:\Users\James\Downloads>
plotly-graph-exporter

  Usage:

    $ plotly-graph-exporter [path/to/json/file(s), URL(s), glob(s), '{"data":[],"layout":{}}'] {options}

    $ cat plot.json | plotly-graph-exporter {options} > plot.png

  Options:

  --help [or -h]
    Displays this message.

  --version [or -v]
    Displays package version.

  --output-dir [or -d, --outputDir]
    Sets output directory for the generated images. Defaults to the current working directory

  --output [or -o]
    Sets output filename. If multiple inputs are provided, then their item index will be appended to the filename.

  --plotly [or --plotlyjs, --plotly-js, --plotly_js, --plotlyJS, --plotlyJs]
    Sets the path to the plotly.js bundle to use.
    This option can be also set to 'latest' or any valid plotly.js server release (e.g. 'v1.2.3'),
    where the corresponding plot.ly CDN bundle is used.
    By default, the 'latest' CDN bundle is used.

  --mapbox-access-token [or --mapboxAccessToken]
    Sets mapbox access token. Required to export mapbox graphs.
    Alternatively, one can set a `mapboxAccessToken` environment variable.

  --topojson
    Sets path to topojson files. By default topojson files on the plot.ly CDN are used.

  --mathjax [or --MathJax]
    Sets path to MathJax files. Required to export LaTeX characters.

  --format [or -f]
    Sets the output format (png, jpeg, webp, svg, pdf, eps). Applies to all output images.

  --scale
    Sets the image scale. Applies to all output images.

  --width
    Sets the image width. If not set, defaults to `layout.width` value. Applies to all output images.

  --height
    Sets the image height. If not set, defaults to `layout.height` value. Applies to all output images.

  --parallel-limit [or --parallelLimit]
    Sets the limit of parallel tasks run.

  --verbose
    Turn on verbose logging on stdout.

  --debug
    Starts app in debug mode and turn on verbose logs on stdout.

C:\Users\James\Downloads>

I then ran a command analogous to your recommendation:
C:\Users\James\Downloads>"C:\Users\James\AppData\Local\Programs\image-exporter\Plotly Graph Exporter.exe" 20.json --format pdf

C:\Users\James\Downloads>

C:\Users\James\Downloads>

Sadly, the command seems to have not created no output file, (nor any in-terminal output no displayed above).
I must offer the caveat, that I really do not know Windows well at all. In hindsight, I'm not suitable to test these things, because I could have done wrong some complete beginners' mistake.
Still, here is my report.

@JamesCropcho Does it work with other formats? svg? png?

@n-riesco I experienced identical behavior when attempting to create PNG and SVG output.

Ok well, we probably don't have to have a working Windows executable for our 0.0.1. I just logged an issue here -> https://github.com/plotly/image-exporter/issues/70
@JamesCropcho would you mind merge master into this branch and fixing the merge conflict?

@etpinard

@JamesCropcho would you mind merge master into this branch and fixing the merge conflict?

Happily. I have done as requested.

OK @JamesCropcho not sure what happened when you merge master. We have another mess of a commit history in our hands. I'll try squashing and merging again.

Hold on. I'm seeing changes from https://github.com/plotly/image-exporter/pull/63 in https://github.com/plotly/image-exporter/pull/63/files
This will mess up our commit history. @JamesCropcho can you open up a another PR with just the changes you made in src/ before you (tried to) merge master into this branch?

@etpinard

This will mess up our commit history. @JamesCropcho can you open up a another PR with just the changes you made in src/ before you (tried to) merge master into this branch?

I believe I did successfully merge master. As always, if there's some different way you'd like me to do something, let me know.
More to the point of your request: okay, I have found that this is the commit on this branch/PR which is immediately prior the merge commit: https://github.com/plotly/image-exporter/pull/66/commits/f81ff05ddfa1af644d59afb8755584c9829650ee. Next I have found the diff of that revision of that branch relative to master: https://github.com/plotly/image-exporter/compare/master...f81ff05ddfa1af644d59afb8755584c9829650ee. According to it, the list of changed files:

package.json
+1 −1 src/app/runner/coerce-opts.js
+1 −1 src/app/server/coerce-opts.js
+5 −2 src/component/plotly-dash-preview/render.js
+3 −2 src/component/plotly-dashboard-preview/render.js
+2 −1 src/component/plotly-dashboard-thumbnail/render.js
+3 −2 src/component/plotly-dashboard/render.js
+2 −1 src/component/plotly-graph/render.js
+1 −0 src/util/remote.js

All are in /src other than package.json.
Manually reverting the changes in package.json in a branch off this revision mentioned at the top, the difference between that and my new branch is indeed just the package.json changes: https://github.com/plotly/image-exporter/compare/f81ff05ddfa1af644d59afb8755584c9829650ee...just-changes-in-src-from-forbid-popup-windows
The PR as described above has been created, at https://github.com/plotly/image-exporter/pull/72.

I believe I did successfully merge master.

Yes you did. But you also added 7 commits with no new content in the process. git merge origin master should have been enough.

@etpinard

Yes you did. But you also added 7 commits with no new content in the process. git merge origin master should have been enough.

Okay, please pardon me there. Ironically, due to a recent uptick in concern about signal in revision history, I decided to rebase rather than merge, to avoid creating the merge commit. Again ironically, it sounds like that would have in fact been the cleaner method.

Ironically, you find adding 7 commits new-content-less commits better for revision history than one single merge commit.
Moreover, please never rebase (and git push -f) on branches that have open PRs attached to them. If you feel the need to rebase, do that on a different branch/PR.


Unhide files

I prefer the pattern of not hiding these files when they are in a subdirectory. It's helpful to not see them in the main repo to avoid polluting that path, but we don't need to worry about that here.
For example, instead of:
- .eslintrc
- .isort.cfg
...

It would be:
- eslintrc
- isort.cfg
...

refs rtfd/readthedocs.org#3808

👍 makes sense.


Push Lance's data-set check util back into CC2

Need this code in my new LAA test util, so it's a good a time as any to move it upstream

Please rebase manuallt rather then merge master via github

This is a good idea.

Brett, could you also factor this code out of src/main/ccs.cpp and replace it with use of this library function?

lgtm +1