Unable to build Amber_Cmake Error_INTERFACE_INCLUDE_DIRECTORIES

Trying to build Amber on Windows using:
cmake -GNinja -DVulkan_LIBRARY="C:\VulkanSDK\<IP_ADDRESS>" ../..
Getting error as follows:
CMake Error in samples/CMakeLists.txt:
  Target "Vulkan::Vulkan" contains relative path in its
  INTERFACE_INCLUDE_DIRECTORIES:

    "C:/VulkanSDK/<IP_ADDRESS>/include"

Here is the complete output after cmake:
cmake -GNinja -DVulkan_LIBRARY="C:\VulkanSDK\<IP_ADDRESS>" ../..
-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++.exe
-- Check for working CXX compiler: /usr/bin/c++.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Using python3
-- Found PythonInterp: /cygdrive/c/Python37/python.exe (found suitable version "3.7.6", minimum required is "3")
-- Amber enable SPIRV-Tools: TRUE
-- Amber enable Shaderc: TRUE
-- Amber enable tests: TRUE
-- Amber enable samples: TRUE
-- Amber enable lodepng: TRUE
-- Amber enable SwiftShader: OFF
-- Amber enable DXC: FALSE
-- Amber enable Clspv: FALSE
-- Could NOT find Dawn (missing: Dawn_INCLUDE_DIR Dawn_GEN_INCLUDE_DIR Dawn_LIBRARY Dawn_native_LIBRARY)
-- Amber: Did not find Dawn
-- Amber: Checking for CTS Vulkan header
-- Found Vulkan: C:/VulkanSDK/<IP_ADDRESS>
-- Amber: Using Vulkan from Vulkan SDK at C:\VulkanSDK\<IP_ADDRESS>
-- No build type selected, default to Debug
-- Found PythonInterp: /cygdrive/c/Python37/python.exe (found version "3.7.6")
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - found
-- Found Threads: TRUE
-- Found PythonInterp: /cygdrive/c/Python37/python.exe (found suitable version "3.7.6", minimum required is "3")
-- optimizer enabled
-- Shaderc: build type is "Debug".
-- Configuring Shaderc to avoid building tests.
-- asciidoctor was not found - no documentation will be generated
-- Performing Test COMPILER_SUPPORTS_FALLTHROUGH_WARNING
-- Performing Test COMPILER_SUPPORTS_FALLTHROUGH_WARNING - Success
-- Performing Test COMPILER_SUPPORTS_EXTRA_SEMI_WARNING
-- Performing Test COMPILER_SUPPORTS_EXTRA_SEMI_WARNING - Success
CMake Warning (dev) at third_party/spirv-headers/CMakeLists.txt:52 (option):
  Policy CMP0077 is not set: option() honors normal variables.  Run "cmake
  --help-policy CMP0077" for policy details.  Use the cmake_policy command to
  set the policy and suppress this warning.

  For compatibility with older versions of CMake, option is clearing the
  normal variable 'SPIRV_HEADERS_SKIP_EXAMPLES'.
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Installing SPIRV-Header
/cygdrive/c/amber
TRUE
/cygdrive/c/amber
TRUE
/cygdrive/c/amber
TRUE
/cygdrive/c/amber
TRUE
/cygdrive/c/amber
TRUE
/cygdrive/c/amber
TRUE
-- Configuring done
CMake Error in samples/CMakeLists.txt:
  Target "Vulkan::Vulkan" contains relative path in its
  INTERFACE_INCLUDE_DIRECTORIES:

    "C:/VulkanSDK/<IP_ADDRESS>/include"

-- Generating done
-- Build files have been written to: /cygdrive/c/amber/out/Debug

Any help on fixing this issue?

Hi. The Amber repo is here: https://github.com/google/amber
So you might want to file an issue over there.
This looks like it might be an issue with mixing cygwin and non-cygwin tools. Is your CMake provided by cygwin by any chance? It might work better if you use a non-cygwin CMake.

It looks like you have opened an issue in Amber:
https://github.com/google/amber/issues/856
so I will close this.


Xmonad TreeSelect defaultconfig.

tsDefaultConfig :: TS.TSConfig a
tsDefaultConfig = TS.TSConfig { TS.ts_hidechildren = True
                              , TS.ts_background   = 0xdd292d3e
                              , TS.ts_font         = myFont
                              , TS.ts_node         = (0xffd0d0d0, 0xff202331)
                              , TS.ts_nodealt      = (0xffd0d0d0, 0xff292d3e)
                              , TS.ts_highlight    = (0xffffffff, 0xff755999)
                              , TS.ts_extra        = 0xffd0d0d0
                              , TS.ts_node_width   = 200
                              , TS.ts_node_height  = 20
                              , TS.ts_originX      = 90
                              , TS.ts_originY      = 90
                              , TS.ts_indent       = 80
                              , TS.ts_navigate     = myTreeNavigation
                              }

In the above section , changing the values for TS.ts_originY and TS.ts_originX does nothing, indent works, node height and width also works. I want the Tree view to display center screen or maybe bottom of the screen. Or maybe this is not what I'm thinking it is, and according to this site, it changes tree X or Y position on the screen in pixels, I have tried different values from 9 to 99 to 999 😜, nothing works

I have the same issue with ts_originY and ts_originX in the treeSelect module.  Changing the values does nothing.

Hi @apoorv569  and @dwt1,
This module was originally created by me. I haven't been using XMonad for some time since then. I just recently discovered that you have this issue.
After a quick investigation, I concluded that those config values ts_originX and ts_originY are actually never used by this module. :facepalm: It should be fixed with https://github.com/xmonad/xmonad-contrib/pull/385 .


Add -v verbose flag and supress warning output unless the flag is set

I want to enable running gci regularly on every commit (using a git hook).
Today, it produces a lot of output lines of the form:
skip file ... since no import

It would be nice to have the ability to enable/disable this output.

Fixed.


User avatar of logged in user is to large

Describe the bug
The icon of the loged in user is to large.
To Reproduce
Steps to reproduce the behavior:
Open VIS2 Editor
Expected behavior
Only a small icon of the user is visible in the corner
Screenshots & Logfiles

Versions:

Adapter version: vis2-beta v2.0.6

Issue is fixed with 2.0.8


Add blacklist twitter userIDs

Fix #5
Excluding accounts that spreads misinformation
This pullrequest added:

[x] Changes in README (adding point 4)

[x] Adds new env variable to handle blacklisted userIDs
[x] Add test folder and some test coverage of the implemented feature

So the goal is to manually pick out offenders?

So the goal is to manually pick out offenders?

At the moment there's no other way to do it, but as I see in the roadmap

Add misinformation prevention algorithm
Will probably be automated in some way in the following updates

In the meantime we will have a manual way to exclude accounts that we already know are not spreading the right informations

Sure, cool


Simplify Homebrew setup

Gives the benefit of a familiar CLI experience (just using brew instead of dnf) in the host terminal, while keeping everything separate from the base image like when using a container.
Integrating Homebrew would also let us drop extra CLI utilities that are currently included in the image.
Work done so far:
just commands: #68 and #102
setup in yafti: #70, #74

Setup in yafti has been removed in favor of sticking to just commands for developer options, like Homebrew setup here. #102 should be the final thing needed for this specific issue


SP heuristic finds incorrect optimum for simple SP

This example should solve to an optimum at x = 1, y = 1.
import gpkit
from gpkit.shortcuts import *

gpkit.enable_signomials()

x = Var('x')
y = Var('y')

J = 0.01*((x - 1)**2 + (y - 1)**2) + (x*y - 1)**2

sp = SP(J)
print sp
sol = sp.localsolve(x0={x: 1.1, y: 1.1})

print sol.table()

gpkit.disable_signomials()

Output:
In [1]: %run Mike_SP2.py
Optional Python units library (Pint) not installed;unit support disabled.
gpkit.GeometricProgram( # minimize
          -0.02*x + -0.02*y + -2*x*y + 0.01*x**2 + 0.01*y**2 + 1 + x**2*y**2,
          [   # subject to
          ],
          substitutions={  },
          solver="mosek")
Beginning signomial solve.
Using solver 'mosek'
Solving for 2 variables.
Solving took 0.159 seconds.
Solving took 5 GP solves.

Cost
 0.624

Variables
---------
x : 0.789
y : 0.789

Constant sensitivities
----------------------

Possibly related issue: when we print sp it outputs -0.02*x + -0.02*y + -2*x*y + 0.01*x**2 + 0.01*y**2 + 1 + x**2*y**2. Notice that the constant term should be 1.02 instead of 1.

Todo:

[ ] fix this
[ ] add a test
[ ] also test sol = sp.localsolve() (no initial guess)

Update: The output appears to be different from when this ticket was first opened.
[philippekirschen@kirschens-MBP tests]$ ipython issue_274.py
Optional Python units library (Pint) not installed; unit support disabled.
gpkit.GeometricProgram( # minimize
          -0.02*x + -0.02*y + -2*x*y + 0.01*x**2 + 0.01*y**2 + 1 + x**2*y**2,
          [   # subject to
          ],
          substitutions={  },
          solver="mosek")
Beginning signomial solve.
Using solver 'mosek'
Solving for 2 variables.
Solving took 0.191 seconds.
Solving took 5 GP solves.

Cost
----
 0.1433

Free variables
--------------
x : 0.789
y : 0.789

Swept variables
---------------

Constants
---------

Constant and swept variable sensitivities
-----------------------------------------

Observation:
In [28]: gpkit.enable_signomials()

In [29]: x = Var('x')

In [30]: y = Var('y')

In [31]: x-1
Out[31]: gpkit.Signomial(- + x)

In [32]: x-2
Out[32]: gpkit.Signomial(-2 + x)

Another observation:
In [6]: x-0.999
Out[6]: gpkit.Signomial(- + x)

In [7]: x-0.99
Out[7]: gpkit.Signomial(-0.99 + x)

Sub-issues to address:

[ ] The 1 instead of 1.02 constant issue
[ ] The gpkit.Signomial(- + x) issue
[ ] The SP solution issue (if it still remains)

I am open to splitting these into separate issues if anyone has any strong preferences, but for the time being I will keep them here.

The first sub-issue seems unrelated enough and significant enough to merit its own ticket, so I have moved it #316.

The second issue is happening the same place as the first, I'll move it to #316 as well.

Thanks

Weirdly, the results on this are better without the 0.01* out front.

And they only get better as the coefficient increases. Fore example, with 10000* in front, the error (cost) is on the order 1e-6.

Getting an error from this
import gpkit
from gpkit.shortcuts import *
gpkit.enable_signomials()

x = Var('x')
y = Var('y')

J = 0.01*((x - 1)**2 + (y - 1)**2)

sp = SP(J)
sol = sp.localsolve(x0={x: 1.1, y: 1.1})

print sol.table()
gpkit.disable_signomials()

There is a long error traceback sol = sp.localsolve(x0={x: 1.1, y: 1.1}), followed by a rather unsatisfying
KeyError: y

Ok, really weird. I don't get that error without the 0.01 coefficient.

Not getting that error in the refactor, though it's still getting the wrong answer.

Hmmm...it gets the correct answer if there's any constant term in the cost. I wonder if the problem is solver limits on driving log(objective) to minus infinity?

Just a hunch, but I think #296 should take priority -- I wonder if solving that will solve this as well.

PS confirmed the 1-x issue is fixed on the refactor branch
In [3]: x = Variable('x')

In [4]: from gpkit import enable_signomials

In [5]: enable_signomials()

In [6]: x - 1
Out[6]: gpkit.Signomial(-1 + x)

I will focus on #296 for the time being then.

Unfortunately, commit 35d60b2e635850d6dadadeea984aab7b349b9b33 did not fix this issue too.

I guess I should have realized it would not -- this fails for both cvxopt and mosek.

Here's something interesting. Slightly modified version of the original example, with the objective moved to a constraint:
from gpkit import Model, Variable

gpkit.enable_signomials()
x = Variable('x')
y = Variable('y')
z = Variable('z')

J = 1*((x - 1)**2 + (y - 1)**2) + (x*y - 1)**2

sp = Model(z, [z >= J])
print sp
sol = sp.localsolve()

print sol.table()

gpkit.disable_signomials()

output:
# minimize
    z,
[   # subject to
    z >= -2*x + -2*x*y + -2*y + 3 + x**2 + x**2*y**2 + y**2,
],
    substitutions={  }
Beginning signomial solve.
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-9-e83cd81ff128> in <module>()
     10 sp = Model(z, [z >= J])
     11 print sp
---> 12 sol = sp.localsolve()
     13
     14 print sol.table()

gpkit/gpkit/model.py in localsolve(self, solver, verbosity, skipfailures, *args, **kwargs)
    279             return self._solve("sp", solver, verbosity, skipfailures, *args, **kwargs)
    280         except ValueError:
--> 281             raise ValueError("'localsolve()' can only be called on models that"
    282                              " contain Signomials, because such"
    283                              " models have only local solutions. Models"

ValueError: 'localsolve()' can only be called on models that contain Signomials, because such models have only local solutions. Models without Signomials have global solutions, so try using 'solve()'.

Huh, it doesn't for me. It works, actually...

import gpkit
from gpkit import Model, Variable

gpkit.enable_signomials()
x = Variable('x')
y = Variable('y')
z = Variable('z')

J = 1*((x - 1)**2 + (y - 1)**2) + (x*y - 1)**2

sp = Model(z, [z >= J])
print sp
sol = sp.localsolve("cvxopt")

print sol.table()

gpkit.disable_signomials()```

Yah works for me too

Well that is certainly strange. Here's what's creating the ValueError on my machine (I edited the source code to remove the try/catch in localsolve and raise the error directly):
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-1-75cb0e5eb14d> in <module>()
     11 sp = Model(z, [z >= J])
     12 print sp
---> 13 sol = sp.localsolve("cvxopt")
     14
     15 print sol.table()

gpkit/gpkit/model.py in localsolve(self, solver, verbosity, skipfailures, *args, **kwargs)
    276         RuntimeWarning if an error occurs in solving or parsing the solution.
    277         """
--> 278         return self._solve("sp", solver, verbosity, skipfailures, *args, **kwargs)
    279             #raise ValueError("'localsolve()' can only be called on models that"
    280             #                  " contain Signomials, because such"

gpkit/gpkit/model.py in _solve(self, programType, solver, verbosity, skipfailures, *args, **kwargs)
    375                 result = self.program.solve(*args, **kwargs)
    376             elif programType == "sp":
--> 377                 result = self.program.localsolve(*args, **kwargs)
    378             sol = self.parse_result(result, constants, mmaps)
    379             solution.append(sol)

gpkit/gpkit/signomial_program.py in localsolve(self, solver, verbosity, x0, reltol, iteration_limit, *args, **kwargs)
    113                and (not (cost and prevcost)
    114                     or abs(prevcost-cost)/(prevcost + cost) > reltol)):
--> 115             gp = self.step(x0, verbosity)
    116             self.gps.append(gp)
    117

gpkit/gpkit/signomial_program.py in step(self, x0, verbosity)
    165
    166         gp = GeometricProgram(posy_approxs[0], posy_approxs[1:],
--> 167                               verbosity=verbosity-1)
    168         return gp
    169

gpkit/gpkit/geometric_program.py in __init__(self, cost, constraints, verbosity)
     44         self.cs = np.hstack((mag(p.cs) for p in self.posynomials))
     45         if not all(self.cs > 0):
---> 46             raise ValueError("GeometricPrograms cannot contain Signomials.")
     47         self.exps = functools_reduce(add, (p.exps for p in self.posynomials))
     48         self.varlocs, self.varkeys = locate_vars(self.exps)

ValueError: GeometricPrograms cannot contain Signomials.

Hm, looks like a negative c snuck through? Does the code I posted work for you? (you can change the solver, works with all of 'em here)

Just tried your code above using the latest on master; error is slightly different but still a problem:
python issue274.py
# minimize
    z,
[   # subject to
    z >= -2*x + -2*x*y + -2*y + 3 + x**2 + x**2*y**2 + y**2,
],
    substitutions={  }
Beginning signomial solve.
.../gpkit/gpkit/geometric_program.py:143: RuntimeWarning: overflow encountered in exp
  np.exp(solver_out['primal']).ravel()))
.../gpkit/gpkit/small_scripts.py:38: RuntimeWarning: invalid value encountered in double_scalars
  e = mag(x0[vk]*units * p.diff(vk).sub(x0, require_positive=False).c / p0)
.../gpkit/gpkit/geometric_program.py:51: RuntimeWarning: invalid value encountered in greater
  if not all(self.cs > 0):
Traceback (most recent call last):
  File "issue274.py", line 13, in <module>
    sol = sp.localsolve("cvxopt")
  File ".../gpkit/gpkit/model.py", line 286, in localsolve
    raise ValueError("'localsolve()' can only be called on models that"
ValueError: 'localsolve()' can only be called on models that contain Signomials, because such models have only local solutions. Models without Signomials have global solutions, so try using 'solve()'.

@whoburg are you only getting that error with cvxopt?

negative, I get it for both cvxopt and mosek. Looks like it's raising early in localsolve before the solver even gets run.

ps I've removed .pyc files, so it's not that.

shooting from the hip here, but could be interesting to add this as a unit test on a branch, then we'll get three more machines (on jenkins) trying it out

Sounds good.

Goddamnit @bqpd

This one is at least partly my fault for not saying I was working on it.

Interesting, passed mosek on one machine failed on all other machine/solver combinations.

Super wacky.

Agreed re: not making a test; #329  is just debugging

This might be a separate issue, but I thought this was interesting
import gpkit
from gpkit import Model, Variable
with gpkit.EnableSignomials():
    x = Variable('x')
    z = Variable('z')
    J = 0.01*(x - 1)**2
    sp = Model(z, [z >= J])
    sol = sp.localsolve(iteration_limit=50)

#output

Beginning signomial solve.
{x: 0.099503719020998152, z: 0.0094544313448217156}
{x: 0.30858339675657204, z: 0.0070641292715984388}
{x: 0.55138385186126571, z: 0.004137253654887871}
{x: 0.7558555212372341, z: 0.0020329156059758929}
{x: 0.88772160560639424, z: 0.0008742012957197896}
{x: 0.95412334675043098, z: 0.00034540249534560776}
{x: 0.98237655634014498, z: 0.00013081534457576836}
{x: 0.99340766018349569, z: 4.86639535899045e-05}
{x: 0.99755961776297863, z: 1.7977255827085814e-05}
{x: 0.99910015431588806, z: 6.6236742434287643e-06}
{x: 0.99966868273464993, z: 2.4381000785678302e-06}
{x: 0.99987807689494357, z: 8.9711476347932211e-07}
{x: 0.99995514181077461, z: 3.3005551447630321e-07}
{x: 0.9999834968924961, z: 1.2142408125806915e-07}
{x: 0.99999392875103243, z: 4.4669889151738637e-08}
{x: 0.99999776649946515, z: 1.6433196923939157e-08}
{x: 0.99999917833933127, z: 6.0454438375448823e-09}
{x: 0.9999996977276967, z: 2.2239956551815462e-09}
{x: 0.99999988880020207, z: 8.1816243629095626e-10}
{x: 0.99999995909187633, z: 3.0098516157414271e-10}
{x: 0.9999999849507416, z: 1.1072625650178e-10}
{x: 0.99999999446368726, z: 4.0733912983436912e-11}
{x: 1.0, z: 1.0, \fbox{0}: 1.0}
{x: 0.099503719020998152, z: 0.0094544313448217156}
{x: 0.30858339675657204, z: 0.0070641292715984388}
{x: 0.55138385186126571, z: 0.004137253654887871}
{x: 0.7558555212372341, z: 0.0020329156059758929}
{x: 0.88772160560639424, z: 0.0008742012957197896}
{x: 0.95412334675043098, z: 0.00034540249534560776}
{x: 0.98237655634014498, z: 0.00013081534457576836}
{x: 0.99340766018349569, z: 4.86639535899045e-05}
{x: 0.99755961776297863, z: 1.7977255827085814e-05}
{x: 0.99910015431588806, z: 6.6236742434287643e-06}
{x: 0.99966868273464993, z: 2.4381000785678302e-06}
{x: 0.99987807689494357, z: 8.9711476347932211e-07}
{x: 0.99995514181077461, z: 3.3005551447630321e-07}
{x: 0.9999834968924961, z: 1.2142408125806915e-07}
{x: 0.99999392875103243, z: 4.4669889151738637e-08}
{x: 0.99999776649946515, z: 1.6433196923939157e-08}
{x: 0.99999917833933127, z: 6.0454438375448823e-09}
{x: 0.9999996977276967, z: 2.2239956551815462e-09}
{x: 0.99999988880020207, z: 8.1816243629095626e-10}
{x: 0.99999995909187633, z: 3.0098516157414271e-10}
{x: 0.9999999849507416, z: 1.1072625650178e-10}
{x: 0.99999999446368726, z: 4.0733912983436912e-11}
{x: 1.0, z: 1.0, \fbox{1}: 1.0}
{x: 0.099503719020998152, z: 0.0094544313448217156}
{x: 0.30858339675657204, z: 0.0070641292715984388}
{x: 0.55138385186126571, z: 0.004137253654887871}
{x: 0.7558555212372341, z: 0.0020329156059758929}
Solving took 50 GP solves and 0.828 seconds.

Cost
----
 0.002033

Free Variables
--------------
x : 0.7559
z : 0.002033

Unsurprisingly, if you set iteration_limit=22, the answer is correct:
Cost
----
 4.073e-11

Free Variables
--------------
x : 1
z : 4.073e-11

tl;dr the while loop exit condition in localsolve doesn't seem to be doing its job.

There's a cycle! Haha, weird...maybe some of those are feasibility solves?
(which aren't permitted to be the last solve)

Alas no it doesn't seem like the except statement in localsolve ever gets activated so they are all plain vanilla gp.solves.

Weirdddd. Is the cost difference really staying above reltol?

Is this what you mean?
(the try is necessary for when prevcost=None)
 try:
       print abs(prevcost-cost)/(prevcost + cost)
except:
       pass

in which case yes...
# output

0.144704016817
0.261295916399
0.341050295372
0.398578505591
0.433582450504
0.450607123003
0.457720705538
0.460476303345
0.461510257991
0.461893445602
0.462034797781
0.462086850697
0.462106007011
0.462113054959
0.462115648176
0.462116602485
0.462116949706
0.462117078157
0.462117132357
0.462117195347

By the way please can you explain the first part of that conditional?
        while (iterations < iteration_limit
               and (not (cost and prevcost)
                    or abs(prevcost-cost)/(prevcost + cost) > reltol)):

(starting from not)

Oh, that's catching when those costs are None, such as the first two
iterations and whenever a feasibility gp is used.
Re: costs, hmmmmmm. Perhaps we should make that denominator (prevcost +
cost + 1e-10?)

Doesn't seem to help unfortunately

A large enough denominator certainly would :p I think the problem is that prevcost+cost is approaching 0 just as fast as cost is approaching 0

Oh wait you were right, I think the end of each "cycle" is a feasible solve...

Putting 1e-6 in the denominator does indeed solve the problem.

@whoburg @bqpd any suggestions for things I can try, I'm running out of ideas...

The feasible-solve is interesting; what's the gp just before that in model.program? (it should be the infeasible one)

Mm no sorry, I meant the original issue, I think you're referring to what is now #336.

Although I can certainly look into that more, if you don't think the proposed PR (#337) is satisfactory

Oops, my mistake. I'll try and reproduce this on a Windows machine.

I'm not yet personally convinced that adding 1e-whatever is a good solution. Note further discussion at #329. We need to first figure out why things behave so differently with J in the objective vs constraints.

I still think that SPs with optimal objective values equal to (or less than) 0 might be fundamentally ill-posed. That's because the monomial approximations become ill-posed...

oops my last two comments should maybe be in #336

I think I figured that out. When forming approximations, it currently assumes that you're approximating (p)/(1+n), where p is the posynomial portion and n is the negynomial. This isn't true for a signomial cost function. The cost function (I believe?) should just be p/n.

Inspecting the first GP approximation for both cases (case 1: J in objective, case 2: J in constraints)....
Writing these just as a normal GP to be solved....
# case 1
from gpkit.shortcuts import *
x = Var('x')
y = Var('y')
J = 0.00329*x**-0.66*y**1.3 + 0.00329*x**1.3*y**-0.66 + 0.329*x**1.3*y**1.3 + 0.336*x**-0.66*y**-0.66
gp = Model(J)
sol = gp.solve()

# case 2
from gpkit.shortcuts import *
x = Var('x')
y = Var('y')
z = Var('z')
J = 0.00329*x**-0.66*y**1.3*z**-0.33 + 0.00329*x**1.3*y**-0.66*z**-0.33 + 0.329*x**1.3*y**1.3*z**-0.33 + 0.336*x**-0.66*y**-0.66*z**-0.33
gp = Model(z, [J <=1])
sol = gp.solve()

Equivalent GPs, right?
Except the outpuut is different
# case 1
Using solver 'mosek'
Solving for 2 variables.
Solving took 0.0143 seconds.
free variable too sensitive: S_{y} = 6.40e-01
free variable too sensitive: S_{x} = 6.40e-01

Cost
----
 0.6379

Free Variables
--------------
x : 0.8443
y : 0.8443

Sensitivities
-------------
x : 0.64
y : 0.64

# case 2
Using solver 'mosek'
Solving for 3 variables.
Solving took 0.0142 seconds.

Cost
----
 0.2561

Free Variables
--------------
x : 0.8443
y : 0.8443
z : 0.2561

So, why is the cost different and what are those sensitivity warnings about?

what is Model.program in both cases?

(answers his own question)
J as objective:
gpkit.GeometricProgram(
  # minimize
    0.00329*x**-0.66*y**1.3 + 0.00329*x**1.3*y**-0.66 + 0.329*x**1.3*y**1.3 + 0.336*x**-0.66*y**-0.66,
[ # subject to
])

J as constraint:
gpkit.GeometricProgram(
  # minimize
    z,
[ # subject to
    0.00329*x**-0.66*y**1.3*z**-0.33 + 0.00329*x**1.3*y**-0.66*z**-0.33 + 0.329*x**1.3*y**1.3*z**-0.33 + 0.336*x**-0.66*y**-0.66*z**-0.33 <= 1,
])

These are clearly not equivalent programs.

Ooops

Wait why does this work with .solve()???

Because it's the GP approximation?

Lol yup

Sorry about that!

gps solved when J is a constraint:
[gpkit.GeometricProgram(
   # minimize
     z,
 [ # subject to
     0.0098*x**-0.02*z**-0.98 + 0.0098*x**2*z**-0.98 <= 1,
 ]), gpkit.GeometricProgram(
   # minimize
     z,
 [ # subject to
     0.0124*x**-0.17*z**-0.83 + 0.0124*x**1.8*z**-0.83 <= 1,
 ]), gpkit.GeometricProgram(
   # minimize
     z,
 [ # subject to
     0.0311*x**-0.47*z**-0.53 + 0.0311*x**1.5*z**-0.53 <= 1,
 ]), gpkit.GeometricProgram(
   # minimize
     z,
 [ # subject to
     0.0957*x**-0.73*z**-0.27 + 0.0957*x**1.3*z**-0.27 <= 1,
 ]), gpkit.GeometricProgram(
   # minimize
     z,
 [ # subject to
     0.219*x**-0.88*z**-0.12 + 0.219*x**1.1*z**-0.12 <= 1,
 ]), gpkit.GeometricProgram(
   # minimize
     z,
 [ # subject to
     0.344*x**-0.95*z**-0.047 + 0.344*x**1*z**-0.047 <= 1,
 ]), gpkit.GeometricProgram(
   # minimize
     z,
 [ # subject to
     0.427*x**-0.98*z**-0.018 + 0.427*x**1*z**-0.018 <= 1,
 ]), gpkit.GeometricProgram(
   # minimize
     z,
 [ # subject to
     0.468*x**-0.99*z**-0.0066 + 0.468*x**1*z**-0.0066 <= 1,
 ]), gpkit.GeometricProgram(
   # minimize
     z,
 [ # subject to
     0.487*x**-1*z**-0.0024 + 0.487*x**1*z**-0.0024 <= 1,
 ]), gpkit.GeometricProgram(
   # minimize
     z,
 [ # subject to
     0.495*x**-1*z**-0.0009 + 0.495*x**1*z**-0.0009 <= 1,
 ]), gpkit.GeometricProgram(
   # minimize
     z,
 [ # subject to
     0.498*x**-1*z**-0.00033 + 0.498*x**1*z**-0.00033 <= 1,
 ]), gpkit.GeometricProgram(
   # minimize
     z,
 [ # subject to
     0.499*x**-1*z**-0.00012 + 0.499*x**1*z**-0.00012 <= 1,
 ]), gpkit.GeometricProgram(
   # minimize
     z,
 [ # subject to
     0.5*x**-1*z**-4.5e-05 + 0.5*x**1*z**-4.5e-05 <= 1,
 ])]

when J is an objective:
[gpkit.GeometricProgram(
   # minimize
     0.0098*x**-0.02 + 0.0098*x**2,
 [ # subject to
 ]), gpkit.GeometricProgram(
   # minimize
     0.00993*x**-0.002 + 0.00993*x**2,
 [ # subject to
 ]), gpkit.GeometricProgram(
   # minimize
     0.00997*x**-0.00063 + 0.00997*x**2,
 [ # subject to
 ]), gpkit.GeometricProgram(
   # minimize
     0.00998*x**-0.00035 + 0.00998*x**2,
 [ # subject to
 ])]

Wait we are no longer discussing the same test case.
(This is my fault for introducing a new one halfway down the thread).

Oops!
On @whoburg's point, I think putting a signomial objective in as a constraint is actually the only way to approximate it: I don't think we can support signomial objectives any other way.

But it does fine when the coefficient is bigger than 0.01..

Yeah, but it's only an approximate approximation. =P

So just to be clear, the proposed solution is to not permit signomial objectives

Yeah. Does the non-objective version work for Woody?

No :(

Another case where the signomial-in-objective fails but the signomial-in-constraints succeeds.
import gpkit
from gpkit.shortcuts import *
x = Var('x')
with gpkit.EnableSignomials():
    m = Model(1-x, [x<=0.5])
    sol = m.localsolve()

# output

Cost
----
 0.6667

Free Variables
--------------
x : 0.5

import gpkit
from gpkit.shortcuts import *
x = Var('x')
z = Var('z')
with gpkit.EnableSignomials():
    m = Model(z, [z +x >= 1, x<=0.5])
    sol = m.localsolve()

# output
Solving took 4 GP solves and 0.0777 seconds.

Cost
----
 0.5

Free Variables
--------------
x : 0.5
z : 0.5

@whoburg, the error you got above of "GPs can't contain Signomials" seems like a nan or inf snuck into x0 from the previous gp's result (see the ravel() warning)

@bqpd With the re-factor it seems unnecessarily complicated to raise an exception that is specific to a problem type. For example, because of the try/except statements in model.py, I can't raise a ValueError in either signomial_program._ _ init _ _() or signomial_program.localsolve() without it escaping back to the 'localsolve()' can only be called on models that contain Signomials, because.... ValueError, which isn't what I want.

Yeah it's gross :( I'll put in a better check, which PR do you want it in?

I don't mind, is the test274 branch messy or would that work ok?

That one might not be for merging, since it's got that expensive test. I'll put it in your PR, #337

That works for me, thanks

Okay, so I think I figured out one way to fix the bug @whoburg and the Jenkins machines are seeing, after reproducing on my windows laptop: as the objective approaches 0, the approximation (and the solvers) go a bit bonkers. cvxopt and mosek versions (or 32/64bitness) might explain why it works on some computers and not others? But it does seem like it either works for all solvers on a comp or none.
The constraints don't get pushed to 0, but the objective does; I propose we stop SP solving at some eps > 0. For my windows laptop, 1e-6 is the smallest order of magnitude that works.

Hmm, actually, x - y <= 1 could get bad if another constraint is 1 + x <= 1...

Catching up. A few comments.
Re @pgkirsch's example, are you guys aware that the second program uses gp = Model(z, [J <=1]). Should that be  gp = Model(z, [J <=z]) ?
Re: no signomials in objective, I agree this is the right policy for now.

re: "Hmm, actually, x - y <= 1 could get bad if another constraint is 1 + x <= 1...we could stop if any posy_approx is below eps, not just the cost?", I don't follow.

Wow whoops.. correct that and corrected the output

@whoburg, I was basically just saying what you say elsewhere: if we want to allow signomials to approach 0, we'll have to do some extra work.

Closing; we should open a new issue about 0 signomials


List of names/keys for icon blacklist

While SystemUI does a great job blacklisting status bar icons from within its interface, when used as a Tasker plugin the user is required to know name and key of the icons they want to hide.
It would be very helpful if the app made these combinations transparent to the user.
For example, I'd like to automate via MacroDroid the hiding of the mobile/sim icons, but I need to know the name/key for this. SystemUI, of course, already "knows" this combination.
As a solution, the name/key values could be written in small characters under each item on the "blacklist icon" page.

Off

Keys are now listed in version 349.


Handlebar {{#each Attributes.nnn}} only works if the Attributes/Substitutions have more than one element in the array.

@davelemons  Using the example from pinpoint-template-tester if the following:
'Attributes': {
      'OrderNumber': [
        '14286','45361','13892','12580','14382'
      ],
      'OrderAmount': [
        '380.35','378.63','558.05','788.75','252.05'
      ],
      'ItemCount': [
        '20','20','32','35','41'
      ]
  },

was changed to
  'Attributes': {
      'OrderNumber': [
        '14286'
      ],
      'OrderAmount': [
        '380.35'
      ],
      'ItemCount': [
        '20'
      ]
  },

The {{#each}}{{/each}} will not execute at all.  Is this by design?  It seems like a bug to me.  Do you have a workaround?  Thanks.

The above example works for me with respect to this particular project.  If you are talking about this issue in Amazon Pinpoint, I'd recommend opening a support ticket.
This project is just an easy way to test Handlebars.  I wouldn't view it as an extensive test of how Pinpoint has implemented Handlebars.  There are likely several differences with how they implemented it.
All of that being said, My guess is that if you only have one item in the attribute array, Pinpoint is providing a "feature" to expose it as a string rather than an array.  IMHO, I think this makes sense as most users may not be uploading multi-value attributes.
I'm wondering if something like the following will work (This works in vanilla node/handlebars, but I haven't tried in Pinpoint.)
  {{#if Attributes.OrderNumber}}
    We have an order number!
  {{else}}
    No Order Number!
  {{/if}}
  {{#each Attributes.OrderNumber}}

      {{this}}
      {{#with (lookup ../Attributes.ItemCount @index)}}{{this}}{{/with}}
      ${{#with (lookup ../Attributes.OrderAmount @index)}}{{this}}{{/with}}

  {{else}}

      {{Attributes.OrderNumber}}
      {{Attributes.ItemCount}}
      {{Attributes.OrderAmount}}

  {{/each}}

The above example works for me with respect to this particular project.  If you are talking about this issue in Amazon Pinpoint, I'd recommend opening a support ticket.
This project is just an easy way to test Handlebars.  I wouldn't view it as an extensive test of how Pinpoint has implemented Handlebars.  There are likely several differences with how they implemented it.
All of that being said, My guess is that if you only have one item in the attribute array, Pinpoint is providing a "feature" to expose it as a string rather than an array.  IMHO, I think this makes sense as most users may not be uploading multi-value attributes.
I'm wondering if something like the following will work (This works in vanilla node/handlebars, but I haven't tried in Pinpoint.)
  {{#if Attributes.OrderNumber}}
    We have an order number!
  {{else}}
    No Order Number!
  {{/if}}
  {{#each Attributes.OrderNumber}}

      {{this}}
      {{#with (lookup ../Attributes.ItemCount @index)}}{{this}}{{/with}}
      ${{#with (lookup ../Attributes.OrderAmount @index)}}{{this}}{{/with}}

  {{else}}

      {{Attributes.OrderNumber}}
      {{Attributes.ItemCount}}
      {{Attributes.OrderAmount}}

  {{/each}}


[Feature Request] add common paddings to theme (xs, s, m, l, xl)

Use case
When writing a UI library it would be nice to have access to common values for spacing through the theme.
Most applications need:
A color scheme with: [primary, secondary, warn, success, ...]
Spacings with [xs, s, m, l, xl]
The use case therefor would be that if one writes an UI library he can directly use those values as a default. EG:
// this is a container in a UI library that does not have to make assumptions to the spacing used throughout the
// application that will use the library
Container(
  padding: padding ?? Theme.of(ctx).spacing.xs
  color: color ?? Theme.of(ctx).palette.warn

Proposal
To have palette and spacing with the most common values on the theme.  Angular material does it somewhat.

ColorScheme already has primary, secondary and error.

ColorScheme already has primary, secondary and error.

It lacks order imo. I'd have regrouped them under a common property instead of suffixing all of them it is just easier to find this way, without knowing all the names.
Theme.of(ctx).primaryColor
Theme.of(ctx).secondaryColor
//...

Theme.of(ctx).palette.primary
Theme.of(ctx).palette.secondary
//...

The spacings
Theme.of(ctx).spacing.xs
Theme.of(ctx).spacing.s

Text already has its category and things that are specific to a widget would go into their category too


The matting result of official demo cannot be reproduced using local deployment

Sometimes the matting results of the official demo were correct, and sometimes they didn't get the segmentation I wanted
input image:

matting results of the official demo:

The result I expected:

How do I deal with this image of overlapping objects and stabilize it to get the desired result？

In addition, I don't really understand why the first result is background, I can be seen from the following code SamAutomaticMaskGenerator get MaskData should are foreground objects?

Am I wrong about point_labels?
'''
point_labels (np.ndarray or None): A length N array of labels for the
point prompts. 1 indicates a foreground point and 0 indicates a
background point.
'''


Add SelenideElement.ancestor() method

Add SelenideElement.ancestor() method as a synonym for the existing SelenideElement.closest(). Same behavior.
The reason: this naming is closer to the actual XPath syntax (ancestor::*), and closest() is not that obvious for newbie adopters of Selenide.

@bereg2k Yes, it seems we could add such a synonym for closest.
A long time ago, I used name closest because such a method existed in JQuery library. :)


Does not play nicely with the 'bare' template on which it was built.

If you assemble this with the bare template as the nav menu suggests it was built on, there is a noticeable jump by ~8 px right on the whole page.  I haven't found the cause yet, but I know it lies in how each project item (row) is floated.  When you only have a single row, this issue goes away.  I will post if I figure it out.

Should be fixed in BS4 build.


[Snyk] Security upgrade netlify-cli from 15.9.1 to 17.36.3

Snyk has created this PR to fix 1 vulnerabilities in the yarn dependencies of this project.
Snyk changed the following file(s):

package.json
yarn.lock

Note for zero-installs users
If you are using the Yarn feature zero-installs that was introduced in Yarn V2, note that this PR does not update the .yarn/cache/ directory meaning this code cannot be pulled and immediately developed on as one would expect for a zero-install project - you will need to run yarn to update the contents of the ./yarn/cache directory.
If you are not using zero-install you can ignore this as your flow should likely be unchanged.
Vulnerabilities that will be fixed with an upgrade:

Issue
Score

Cross-site Scripting SNYK-JS-SEND-7926862
  391

[!IMPORTANT]

Check the changes in this PR to ensure they won't cause issues with your project.
Max score is 1000. Note that the real score may have changed since the PR was raised.
This PR was automatically created by Snyk using the credentials of a real user.

Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open fix PRs.
For more information:
🧐 View latest project report
📜 Customise PR templates
🛠 Adjust project settings
📚 Read about Snyk's upgrade logic

Learn how to fix vulnerabilities with free interactive lessons:
🦉 Cross-site Scripting

👷 Deploy Preview for resonant-biscochitos-ee6470 processing.

Name
Link

🔨 Latest commit
2058f8fd9bb8de0d9be950159ef69a4933297377

🔍 Latest deploy log
https://app.netlify.com/sites/resonant-biscochitos-ee6470/deploys/66fba9f061bd4c000815fe56


Can this package be used with expo ?

Hello,
Is it possible to use this package with expo without ejecting my application ?
Thank you.

Has anyone tried this? I really have no idea :(

@0xPierre can you try to use it on your expo project and tell us if you succeed ?
If not, can you provide us the error message ? Thanks

@AllInOneYT @0xPierre I used it with Expo managed workflow. Here is how to do it:

install the package
build the app with eas: eas build --profile development --platform android
download the apk build to your device
run your dev client with expo start --dev-client
play with the app in your device

But I did not succeed to print well formatted receipts yet, so I am switching to another package.

I met this error

@AllInOneYT @0xPierre I used it with Expo managed workflow. Here is how to do it:

install the package
build the app with eas: eas build --profile development --platform android
download the apk build to your device
run your dev client with expo start --dev-client
play with the app in your device

But I did not succeed to print well formatted receipts yet, so I am switching to another package.

So basically you used the code provided in the example and were able to produce a receipt via the apk? Its ok if it isn't well-formatted Im currently in a lot of trouble as Ive developed my whole app using Expo React Native and now I cant find a suitable package that I can use to test printers on using RN.
Please also let me know if you've had any luck in this case too.

@ZYBORX I ended up using react-native-thermal-receipt-printer package. But react-native-thermal-printer worked as well with expo eas.
I switched in hope to improve receipt formatting but it was unsuccessful.
At least, thermal printing worked well with any printer when using in production.

@Marcados Yes Im more than willing to build dev app for testing purposes because Im really stuck on this right now.
Could you just confirm a few things:

Did you alter the config's IP and port, or did you leave the default config untouched?
Did you have to take any extra steps to implement it? (other than the following: install the package, use the example code,
build the app, install apk, connect both devices via Bluetooth, opened the app and pressed button to print)

No other step. Here you can see my custom hook to use the printer :
import { BLEPrinter, IBLEPrinter } from "react-native-thermal-receipt-printer";

export default function usePrint() {
 useEffect(() => {
    async function initPrinter() {
      await BLEPrinter.init();
      const printers = await BLEPrinter.getDeviceList();
      setPrintersList(printers);

      // here I auto-select the first printer
      await onLinkPrinterPress(printers[0]);
    }

    initPrinter();
  }, []);

  const onLinkPrinterPress = async (printer: IBLEPrinter) => {
    setLinkedPrinter(printer);
    await BLEPrinter.connectPrinter(printer.inner_mac_address);
  };

const onPrintPress = () => {
    try {
      BLEPrinter.printText("Receipt content");
    } catch ({ message }) {
      console.log("Erreur:", message);
    }
  };

 return {
     onLinkPrinterPress,
     onPrintPress
 }
}

@Marcados but the code you provided is implementing another package. Could you share the link for its documentation? and also could you share the code you used to implement this package (react-native-thermal-printer)

@Marcados but the code you provided is implementing another package. Could you share the link for its documentation? and also could you share the code you used to implement this package (react-native-thermal-printer) the one you said didn't have good formatting options.

I dont have the old code for the current package. This is mainly the same for this one.

@Marcados what did you do for this step of implementing the package:

because expo projects don't have a folder called android.

@Marcados  The code you provided is giving this error

@ZYBORX this is when integrating a package in a React Native project without Expo. Useless here.
@Adil-cs as indicated : "can only be used un TypeScript files"
You are in JavaScript while my code is for TypeScript. Just remove the typing.

@Marcados Tried implementing the code you provided but I'm facing a lot of issues. Could you kindly provide a drive link to a zip file of your project? Just want to check with a printer and see how the whole thing works.

@ZYBORX sorry buddy, I can copy paste the part of the code you are looking for, as I did, but I do not give a protected source code.

@Marcados could you then kindly spare a few minutes and take a look at my code that I've written for testing a printer?
Screen code:
import React, { useState, useEffect } from "react";
import { View, Text, StyleSheet, TextInput, Button } from 'react-native';
import usePrint from "./usePrint";
const usePrintScreen = () => {
const { onPrintPress, onPrintPress2 } = usePrint();
return (

Get Print
<Button
onPress={() => {
onPrintPress()
}}
title={print}
/>
<Button
onPress={() => {
onPrintPress2()
}}
title={print 2}
/>

)
}
export default usePrintScreen;
Component code:
import { BLEPrinter, IBLEPrinter } from "react-native-thermal-receipt-printer";
import { useEffect } from "react";
export default function usePrint() {
useEffect(() => {
async function initPrinter() {
console.log("printer connected")
await BLEPrinter.init();
const printers = await BLEPrinter.getDeviceList();
setPrintersList(printers);
// here I auto-select the first printer
await onLinkPrinterPress(printers[0]);
}
    initPrinter();
}, []);

const onLinkPrinterPress = async (printer: IBLEPrinter) => {
    setLinkedPrinter(printer);
    await BLEPrinter.connectPrinter(printer.inner_mac_address);
};

const onPrintPress = () => {
    try {
        console.log("print command sent")
        BLEPrinter.printText("Receipt content");
    } catch ({ message }) {
        console.log("Erreur:", message);
    }
};
const onPrintPress2 = async () => {
    try {
        console.log("printer connected")
        await BLEPrinter.init();
        const printers = await BLEPrinter.getDeviceList();
        setPrintersList(printers);
        setLinkedPrinter(printers[0]);
        await BLEPrinter.connectPrinter(printer.inner_mac_address);

        console.log("print command sent")
        BLEPrinter.printText("Receipt content");

    } catch ({ message }) {
        console.log("Erreur:", message);
    }
};
return {
    onLinkPrinterPress,
    onPrintPress,
    onPrintPress2
}

}
I am unable to test it with a physical printer right now so if you could just tell me which button would work correctly and if there are any issues in the code.

@AllInOneYT @0xPierre I used it with Expo managed workflow. Here is how to do it:

install the package
build the app with eas: eas build --profile development --platform android
download the apk build to your device
run your dev client with expo start --dev-client
play with the app in your device

But I did not succeed to print well formatted receipts yet, so I am switching to another package.

@Marcados I got my hands on a printer (Black Copper BC-105). I changed the ip address in the example code of this package to match my printers ip but the rest of it is same. I followed your instructions and build apk and used the app on my phone but was unable to generate a print. I have provided my code for reference. Please let me know what I am doing wrong or if you could tell me what you did right it would be of immense help as I am stuck really bad.
Code:
import React, { useState } from 'react';
import { SafeAreaView, useColorScheme, Button, TextInput } from 'react-native';
import { Colors } from 'react-native/Libraries/NewAppScreen';
import ThermalPrinterModule from 'react-native-thermal-printer';
ThermalPrinterModule.defaultConfig = {
...ThermalPrinterModule.defaultConfig,
ip: '<IP_ADDRESS>',
port: 9100,
timeout: 30000,
};
const App = () => {
const isDarkMode = useColorScheme() === 'dark';
const [err2, setErr] = useState("")
const [state, setState] = useState({
text:
'[C]https://via.placeholder.com/300.jpg\n' +
'[L]\n' +
"[C]ORDER N°045\n" +
'[L]\n' +
'[C]================================\n' +
'[L]\n' +
'[L]BEAUTIFUL SHIRT[R]9.99e\n' +
'[L]  + Size : S\n' +
'[L]\n' +
'[L]AWESOME HAT[R]24.99e\n' +
'[L]  + Size : 57/58\n' +
'[L]\n' +
'[C]--------------------------------\n' +
'[R]TOTAL PRICE :[R]34.98e\n' +
'[R]TAX :[R]4.23e\n' +
'[L]\n' +
'[C]================================\n' +
'[L]\n' +
"[L]Customer :\n" +
'[L]Raymond DUPONT\n' +
'[L]5 rue des girafes\n' +
'[L]31547 PERPETES\n' +
'[L]Tel : +33801201456\n' +
'[L]\n' +
"[C]831254784551\n" +
"[C]http://www.developpeur-web.dantsu.com/",
});
const backgroundStyle = {
backgroundColor: isDarkMode ? Colors.darker : Colors.lighter,
};
const onPress = async () => {
try {
console.log('We will invoke the native module here!');
await ThermalPrinterModule.printTcp({ payload: state.text });
  //
  // bluetooth
  // await ThermalPrinterModule.printBluetooth({ payload: state.text });
  //

  console.log('done printing');
  setErr("done")
} catch (err) {
  //error handling
  setErr(err.message)
  console.log(err.message);
}

};
return (

<TextInput
value={state.text}
onChangeText={(text) => setState((prev) => ({ ...prev, text }))}
/>

<Button
title="react-native-thermal-receipt-printer"
onPress={() => navigation.navigate('print')}
/>
Error: {err2}

);
};
export default App;


Url Tracking Stripper breaks GitLab.com branch switcher

See https://gitlab.com/gitlab-org/gitlab-ce/issues/66621.

Is this project pretty much dead?

Sorry for the delay...I'd say it's in a coma. I haven't had time lately to update things. I think it needs a bit of an overhaul to support conditionally applying the stripping based on domain matching as well. Sorry. I will try to get to it sometime, but been really busy.

FYI - started working on this...

This should be fixed now in version 5.0.0. Closing.


Combobox not updated on delete for special characters (in IE)

OpenUI5 version:
1.52.13/1.52.14
Browser/version (+device/version):
IE11 (sorry)
Any other tested browsers/devices(OK/FAIL):
Chrome (without problem)
URL (minimal example if possible):
Better than that, two working example files
User/password (if required and possible - do not post any confidential information here):
Steps to reproduce the problem:

select ä from the combobox
remove focus from the combobox
put focus back in the combobox (so that ä is not selected)
Hit the backspace key (to delete the ä)

What is the expected result?
The value shown by "Selected ID" should be updated (blank)
What happens instead?
The value remains as 1 (which is the id for ä)
Any other information? (attach screenshot if possible)
Really important here is, this issue is only happening the first time the page is loaded. Subsequent tries are always successful.
comboboxSamples.zip
Currently we are working with 1.52* and it is unclear when we can update, however in the attached samples, there is an example running with 1.52.14 and another with 1.56.5, both exhibit the same problem.
This problem was reported to be fixed in 1.52.14:
[FIX] sap.m.ComboBox: Updating with special characters is now correct
But it isn't.

Hi @srenwickblum,
Thank you for providing the code sample
When the html files are opened in IE and test as the steps provided by you, the ID was updated with i delete the special character using the backspace key. Hence i was not able to reproduce the issue.
Could you kindly provide more details on how to reproduce the issue, perhaps a video showing the issue.
Thanks and regards,
Jay

I can reproduce this reliably on IE11 (Edge does not exhibit this issue). Like I pointed out, this only happens the first time (after initially loading the page). Here are the steps again:

Open in either page IE11
Select ä from the drop down
"Selected ID" is updated to equal 1
Click some where else on the screen (focus is removed from the combo)
Click in the body of the Combo, the ä is highlighted
Click an empty area of the combo box so the ä is no longer selected and the cursor is blinking in front of the ä
Hit the backspace key on the keyboard to delete the single character

Bug: "Selected ID" continues to show 1. If you repeat the steps above without doing a refresh, you'll notice it works every time after. This issue is only occurring the first time.
Thanks for looking into this issue, I hope my re-worded steps make it much easier to reproduce this issue.

Hello @srenwickblum ,
Thank you for sharing this finding. I've created an internal incident<PHONE_NUMBER>. The status of the issue will be updated here in GitHub.
Regards, Diana

The fix is merged in the master, 1.58, 1.56 and 1.52 branches.
Best,
Teo


Is there a term/container for describing a set of schemas?

We have some JSON Table Schemas built for describing a particular Tabular Data Package. We maintain the schemas in a Github repo. i.e. https://github.com/tesera/datatheme-afgo-pgyi
Is there some type of standard term/container which define a schema set used for a specific application? We have been calling them "Data Themes". We have been namespacing them "org.application" i.e. afgo.pgyi.
Thoughts?

@whyvez great question - at the moment we have the concept of profiles - see #87

WONTFIX. Think this is a nice idea and one we may revisit (e.g. collecting together a set of schemas) but one we won't address right now.
@whyvez thanks for the suggestions and please re-open if you think there is further discussion here.


CRT: Add system API layer for CRT in order to provide unit tests

By adding SystemAPI layer to CRT library, it would be possible to implement Unit Tests for whole library

This issue is related to issue #6


JedisClusterMaxRedirectionsException: Too many Cluster redirections?

Expected behavior
Get a JedisRedirectionException
Actual behavior
Get a JedisClusterMaxRedirectionsException
redis.clients.jedis.exceptions.JedisClusterMaxRedirectionsException: Too many Cluster redirections?
        at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:97)
        at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:131)
        at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:152)
        at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:131)
        at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:152)
        at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:131)
        at redis.clients.jedis.JedisClusterCommand.run(JedisClusterCommand.java:30)
        at redis.clients.jedis.JedisCluster.get(JedisCluster.java:81)

Steps to reproduce:
Please create a reproducible case of your problem. Make sure
that case repeats consistently and it's not random

build a redis-cluster and send request
creash a master node
get JedisClusterMaxRedirectionsException

Redis / Jedis Configuration
Jedis maxRedirection=5
Jedis version:
2.8.0
Redis version:
3.2.0
Java version:
1.7
Analysis

Seen from the  error stack that program cycles at line 131 and 152 in "JedisClusterCommand" class.
And deep in the code I found in the below case may lead the cycle.
key --(hash)--> node A

Step 1: request goes to node A, but node A is not available
Step 2: request goes to random node B and node B reply a moved redirection to node A
Step 3: request goes to node A and node A is not available yet
Step 4: goes to Step 2 and there is a cycle until redirection reach 5
Step 5: throw "JedisClusterMaxRedirectionsException"

I think when node A is not available jedis should return "JedisRedirectionException " but not "JedisClusterMaxRedirectionsException".
PS: there are same issues  but in jedis 2.8.0 the problem is not fixed.

hi sazzad16, indeed Jedis looks for another master when master node A is not available. But my point is that in my case Jedis show "JedisClusterMaxRedirectionsException" instead of  "JedisRedirectionException " which indicates the issue obviously.

@JackyWoo There can be several JedisRedirectionException generated in that process. Which one would it throw? So a JedisClusterMaxRedirectionsException is thrown. As a bonus, this also means that there has been maxRedirection number of attempts made.


game crashes on selection of my modded character

i don't know why this happens, i just select my character in the chart editor and the game closes, maybe because i don't have an icon for my character, i don't know

Need more information: What's the last thing you see when it crashes?

Need more information: What's the last thing you see when it crashes?

the last thing i see is the black screen that shows after you press enter to test the chart to signify loading, then it either freezes there or crashes, but nothing ever happens after that

Maybe you're not configuring correctly your character, check if the animations names in the json file of your character are correct

Maybe you're not configuring correctly your character, check if the animations names in the json file of your character are correct

turns out i was right and it was the fact that i added no icon, since i used a placeholder icon and then it started working, so that's neat
alright bye guys


v16 Firmware recompile?

Hi there.
since v16 had some major changes in the modules could somebody please do a recompile of this nice mod?
cheers

Hello, AntiFly!
Due to extenuating circumstances, I've been busy with other life things and projects that have eaten up time that would be used to do this. I also had a computer crash, which led to my code structure for this project being wiped. So I will need some time to rebuild it and recompile it. I plan on doing it, I just need some time.
Thanks again for your support! It's people like you that have inspired me to take up the mantle of this project in the first place.
Anyway, I hope to have a build out sometime soon. ETA: IDK when... But soon, hopefully... It's just a matter of getting the time to check all the boxes and not brick people's switches with bad code. :)
Thanks,
//TheModdersDen

Hello, again, @AntiFly!
I just uploaded a new build, however, do note that it is untested at the moment (on my end) and I have yet to get feedback on if it works... Check the build notes for build 1.4.0-beta for more details...
Best,
//TheModdersDen

Will give it a test as soon i find time for it. thank you ;)

hi, i have test on 16.0.1 / 1.5.1 but no sound

Hi, @deejay87!
Thanks for the information! I will be able to test it more thoroughly soon here and should hopefully have a "production ready" version soon. In the meantime, WYSIWYG. Wish I could do more, but I'm currently on vacation and forgot to bring my Switch. :(
Best,
//TheModdersDen

not working for me either so far. kind regards

addition: after upgrading to 16.0.2 and current atmosphere is working with the old version again oO
BootSoundNX-1.3.0

@AntiFly Hello, again!
I am currently having to re-write the sysmodule for the sake of understanding things better. This will take time, but I assure you, it is in the works... I will post more updates as things progress, but for now, I advise those who have not updated NOT TO UPDATE!!!
I noticed that it worked just fine on an emulator (specifically Yuzu), earlier, but what's odd is that it doesn't appear to want to work on the actual hardware.
If anyone in this group knows advanced C or C++, advice or help would be greatly appreciated. I, myself, am more of a "novice" and do this for a hobby. But if someone is willing to fork this, make a PR, and fix it, I'd be more than happy to accept help! :)
Best,
//TheModdersDen

@deejay87 @AntiFly Quick update: I have been meddling with the code, trying to get it to work, and I believe I might have either fixed it (or made considerable progress). I have a Steam Deck emulator (Ryujinx), and by manually launching JUST the sysmodule, I was able to get a bootsound working.
NOTE: This is far from ideal progress, but it's a start.
I'll update you all with what I have when I have more to share. Until then, I am getting ready to upload a video of it in action. Also, some of you might be interested in the automated builds coming from CircleCI (if you want to be on the "bleeding edge.") If so, here's a link to look at the build states and get the latest artifacts:
https://app.circleci.com/pipelines/github/TheModdersDen/BootSoundNX
Best,
//TheModdersDen

Sorry to be so late in updating this, but life has gotten out of hand for me lately.
I was really enveloped in this project, but then my health took a turn to the side and I've been working on getting better since. I would greatly appreciate the homebrew community's efforts on this module. Anything as far as a lead as to why this thing won't play would be much appreciated...
All the best,
//TheModdersDen

i have tried recompiling with the latest devkit

i have tried recompiling with the latest devkit

Any success?

https://drive.google.com/file/d/1ozTyUbQqZs0aX7fYAs2JPUt8uqvXJNN1/view?usp=sharing
some errors, i havent tried it out on a switch

full log:
su
root@155fbd9d3c7e:/# cd /home/bsnx
root@155fbd9d3c7e:/home/bsnx# make
main.cpp
In file included from /opt/devkitpro/libnx/include/switch.h:41,
from /home/bsnx/source/main.cpp:7:
/opt/devkitpro/libnx/include/switch/sf/hipc.h: In function 'HipcRequest hipcMakeRequest(void*, HipcMetadata)':
/opt/devkitpro/libnx/include/switch/sf/hipc.h:255:9: warning: missing initializer for member 'HipcSpecialHeader::padding' [-Wmissing-field-initializers]
255 |         };
|         ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h: In function 'void* cmifMakeControlRequest(void*, u32, u32)':
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_send_statics' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:162:24: note: in expansion of macro 'hipcMakeRequestInline'
162 |     HipcRequest hipc = hipcMakeRequestInline(base,
|                        ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_send_buffers' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:162:24: note: in expansion of macro 'hipcMakeRequestInline'
162 |     HipcRequest hipc = hipcMakeRequestInline(base,
|                        ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_recv_buffers' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:162:24: note: in expansion of macro 'hipcMakeRequestInline'
162 |     HipcRequest hipc = hipcMakeRequestInline(base,
|                        ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_exch_buffers' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:162:24: note: in expansion of macro 'hipcMakeRequestInline'
162 |     HipcRequest hipc = hipcMakeRequestInline(base,
|                        ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_recv_statics' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:162:24: note: in expansion of macro 'hipcMakeRequestInline'
162 |     HipcRequest hipc = hipcMakeRequestInline(base,
|                        ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::send_pid' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:162:24: note: in expansion of macro 'hipcMakeRequestInline'
162 |     HipcRequest hipc = hipcMakeRequestInline(base,
|                        ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_copy_handles' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:162:24: note: in expansion of macro 'hipcMakeRequestInline'
162 |     HipcRequest hipc = hipcMakeRequestInline(base,
|                        ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_move_handles' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:162:24: note: in expansion of macro 'hipcMakeRequestInline'
162 |     HipcRequest hipc = hipcMakeRequestInline(base,
|                        ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/cmif.h: In function 'void cmifMakeCloseRequest(void*, u32)':
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_send_statics' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:179:28: note: in expansion of macro 'hipcMakeRequestInline'
179 |         HipcRequest hipc = hipcMakeRequestInline(base,
|                            ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_send_buffers' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:179:28: note: in expansion of macro 'hipcMakeRequestInline'
179 |         HipcRequest hipc = hipcMakeRequestInline(base,
|                            ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_recv_buffers' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:179:28: note: in expansion of macro 'hipcMakeRequestInline'
179 |         HipcRequest hipc = hipcMakeRequestInline(base,
|                            ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_exch_buffers' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:179:28: note: in expansion of macro 'hipcMakeRequestInline'
179 |         HipcRequest hipc = hipcMakeRequestInline(base,
|                            ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_recv_statics' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:179:28: note: in expansion of macro 'hipcMakeRequestInline'
179 |         HipcRequest hipc = hipcMakeRequestInline(base,
|                            ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::send_pid' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:179:28: note: in expansion of macro 'hipcMakeRequestInline'
179 |         HipcRequest hipc = hipcMakeRequestInline(base,
|                            ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_copy_handles' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:179:28: note: in expansion of macro 'hipcMakeRequestInline'
179 |         HipcRequest hipc = hipcMakeRequestInline(base,
|                            ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_move_handles' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:179:28: note: in expansion of macro 'hipcMakeRequestInline'
179 |         HipcRequest hipc = hipcMakeRequestInline(base,
|                            ^~~~~~~~~~~~~~~~~~~~~
In file included from /opt/devkitpro/libnx/include/switch.h:42:
/opt/devkitpro/libnx/include/switch/sf/cmif.h:187:9: warning: missing initializer for member 'CmifDomainInHeader::num_in_objects' [-Wmissing-field-initializers]
187 |         };
|         ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:187:9: warning: missing initializer for member 'CmifDomainInHeader::data_size' [-Wmissing-field-initializers]
/opt/devkitpro/libnx/include/switch/sf/cmif.h:187:9: warning: missing initializer for member 'CmifDomainInHeader::padding' [-Wmissing-field-initializers]
/opt/devkitpro/libnx/include/switch/sf/cmif.h:187:9: warning: missing initializer for member 'CmifDomainInHeader::token' [-Wmissing-field-initializers]
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_send_statics' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:189:9: note: in expansion of macro 'hipcMakeRequestInline'
189 |         hipcMakeRequestInline(base,
|         ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_send_buffers' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:189:9: note: in expansion of macro 'hipcMakeRequestInline'
189 |         hipcMakeRequestInline(base,
|         ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_recv_buffers' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:189:9: note: in expansion of macro 'hipcMakeRequestInline'
189 |         hipcMakeRequestInline(base,
|         ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_exch_buffers' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:189:9: note: in expansion of macro 'hipcMakeRequestInline'
189 |         hipcMakeRequestInline(base,
|         ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_data_words' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:189:9: note: in expansion of macro 'hipcMakeRequestInline'
189 |         hipcMakeRequestInline(base,
|         ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_recv_statics' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:189:9: note: in expansion of macro 'hipcMakeRequestInline'
189 |         hipcMakeRequestInline(base,
|         ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::send_pid' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:189:9: note: in expansion of macro 'hipcMakeRequestInline'
189 |         hipcMakeRequestInline(base,
|         ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_copy_handles' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:189:9: note: in expansion of macro 'hipcMakeRequestInline'
189 |         hipcMakeRequestInline(base,
|         ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_move_handles' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/cmif.h:189:9: note: in expansion of macro 'hipcMakeRequestInline'
189 |         hipcMakeRequestInline(base,
|         ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/tipc.h: In function 'void tipcClose(TipcService*)':
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_send_statics' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/tipc.h:63:5: note: in expansion of macro 'hipcMakeRequestInline'
63 |     hipcMakeRequestInline(armGetTls(), .type = TipcCommandType_Close);
|     ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_send_buffers' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/tipc.h:63:5: note: in expansion of macro 'hipcMakeRequestInline'
63 |     hipcMakeRequestInline(armGetTls(), .type = TipcCommandType_Close);
|     ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_recv_buffers' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/tipc.h:63:5: note: in expansion of macro 'hipcMakeRequestInline'
63 |     hipcMakeRequestInline(armGetTls(), .type = TipcCommandType_Close);
|     ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_exch_buffers' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/tipc.h:63:5: note: in expansion of macro 'hipcMakeRequestInline'
63 |     hipcMakeRequestInline(armGetTls(), .type = TipcCommandType_Close);
|     ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_data_words' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/tipc.h:63:5: note: in expansion of macro 'hipcMakeRequestInline'
63 |     hipcMakeRequestInline(armGetTls(), .type = TipcCommandType_Close);
|     ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_recv_statics' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/tipc.h:63:5: note: in expansion of macro 'hipcMakeRequestInline'
63 |     hipcMakeRequestInline(armGetTls(), .type = TipcCommandType_Close);
|     ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::send_pid' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/tipc.h:63:5: note: in expansion of macro 'hipcMakeRequestInline'
63 |     hipcMakeRequestInline(armGetTls(), .type = TipcCommandType_Close);
|     ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_copy_handles' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/tipc.h:63:5: note: in expansion of macro 'hipcMakeRequestInline'
63 |     hipcMakeRequestInline(armGetTls(), .type = TipcCommandType_Close);
|     ^~~~~~~~~~~~~~~~~~~~~
/opt/devkitpro/libnx/include/switch/sf/hipc.h:264:94: warning: missing initializer for member 'HipcMetadata::num_move_handles' [-Wmissing-field-initializers]
264 | #define hipcMakeRequestInline(_base,...) hipcMakeRequest((_base),(HipcMetadata){ VA_ARGS })
|                                                                                ^
/opt/devkitpro/libnx/include/switch/sf/tipc.h:63:5: note: in expansion of macro 'hipcMakeRequestInline'
63 |     hipcMakeRequestInline(armGetTls(), .type = TipcCommandType_Close);
|     ^~~~~~~~~~~~~~~~~~~~~
In file included from /opt/devkitpro/libnx/include/switch/services/applet.h:13,
from /opt/devkitpro/libnx/include/switch.h:54:
/opt/devkitpro/libnx/include/switch/services/../services/caps.h: In function 'CapsAlbumFileDateTime capsGetDefaultStartDateTime()':
/opt/devkitpro/libnx/include/switch/services/../services/caps.h:213:70: warning: missing initializer for member 'CapsAlbumFileDateTime::hour' [-Wmissing-field-initializers]
213 |     return (CapsAlbumFileDateTime){.year = 1970, .month = 1, .day = 1};
|                                                                      ^
/opt/devkitpro/libnx/include/switch/services/../services/caps.h:213:70: warning: missing initializer for member 'CapsAlbumFileDateTime::minute' [-Wmissing-field-initializers]
/opt/devkitpro/libnx/include/switch/services/../services/caps.h:213:70: warning: missing initializer for member 'CapsAlbumFileDateTime::second' [-Wmissing-field-initializers]
/opt/devkitpro/libnx/include/switch/services/../services/caps.h:213:70: warning: missing initializer for member 'CapsAlbumFileDateTime::id' [-Wmissing-field-initializers]
/opt/devkitpro/libnx/include/switch/services/../services/caps.h: In function 'CapsAlbumFileDateTime capsGetDefaultEndDateTime()':
/opt/devkitpro/libnx/include/switch/services/../services/caps.h:218:70: warning: missing initializer for member 'CapsAlbumFileDateTime::hour' [-Wmissing-field-initializers]
218 |     return (CapsAlbumFileDateTime){.year = 3000, .month = 1, .day = 1};
|                                                                      ^
/opt/devkitpro/libnx/include/switch/services/../services/caps.h:218:70: warning: missing initializer for member 'CapsAlbumFileDateTime::minute' [-Wmissing-field-initializers]
/opt/devkitpro/libnx/include/switch/services/../services/caps.h:218:70: warning: missing initializer for member 'CapsAlbumFileDateTime::second' [-Wmissing-field-initializers]
/opt/devkitpro/libnx/include/switch/services/../services/caps.h:218:70: warning: missing initializer for member 'CapsAlbumFileDateTime::id' [-Wmissing-field-initializers]
In file included from /opt/devkitpro/libnx/include/switch/services/async.h:10,
from /opt/devkitpro/libnx/include/switch.h:55:
/opt/devkitpro/libnx/include/switch/services/../applets/error.h: In function 'ErrorCode errorCodeCreateInvalid()':
/opt/devkitpro/libnx/include/switch/services/../applets/error.h:142:25: warning: missing initializer for member 'ErrorCode::desc' [-Wmissing-field-initializers]
142 |     return (ErrorCode){0};
|                         ^
/home/bsnx/source/main.cpp: In function 'void __appInit()':
/home/bsnx/source/main.cpp:38:12: warning: variable 'rc' set but not used [-Wunused-but-set-variable]
38 |     Result rc;
|            ^~
/home/bsnx/source/main.cpp: In function 'int main(int, char**)':
/home/bsnx/source/main.cpp:83:17: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
83 |         playMp3("sdmc://config/BootSoundNX/sound/bootsound.mp3");
|                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/bsnx/source/main.cpp:77:14: warning: unused parameter 'argc' [-Wunused-parameter]
77 | int main(int argc, char* argv[])
|          ^~
/home/bsnx/source/main.cpp:77:26: warning: unused parameter 'argv' [-Wunused-parameter]
77 | int main(int argc, char* argv[])
|                    ^~
mp3.c
/home/bsnx/source/mp3.c: In function 'initMp3':
/home/bsnx/source/mp3.c:44:22: warning: implicit conversion from 'enum mpg123_param_flags' to 'enum mpg123_parms' [-Wenum-conversion]
44 |     mpg123_par(pars, MPG123_FORCE_STEREO, 1, 0);
|                      ^~~~~~~~~~~~~~~
In file included from /opt/devkitpro/libnx/include/switch.h:170,
from /home/bsnx/source/util.h:1,
from /home/bsnx/source/mp3.c:8:
In function 'padGetButtonsDown',
inlined from 'inputPoller' at /home/bsnx/source/mp3.c:147:21:
/opt/devkitpro/libnx/include/switch/runtime/pad.h:160:12: warning: 'pad.buttons_old' is used uninitialized [-Wuninitialized]
160 |     return ~pad->buttons_old & pad->buttons_cur;
|            ^~~~~~~~~~~~~~~~~
/home/bsnx/source/mp3.c: In function 'inputPoller':
/home/bsnx/source/mp3.c:146:26: note: 'pad.buttons_old' was declared here
146 |                 PadState pad;
|                          ^~~
In function 'padGetButtonsDown',
inlined from 'inputPoller' at /home/bsnx/source/mp3.c:147:21:
/opt/devkitpro/libnx/include/switch/runtime/pad.h:160:30: warning: 'pad.buttons_cur' is used uninitialized [-Wuninitialized]
160 |     return ~pad->buttons_old & pad->buttons_cur;
|            ^~
/home/bsnx/source/mp3.c: In function 'inputPoller':
/home/bsnx/source/mp3.c:146:26: note: 'pad.buttons_cur' was declared here
146 |                 PadState pad;
|                          ^
util.c
/home/bsnx/source/util.c: In function 'fatalSimple':
/home/bsnx/source/util.c:16:5: warning: implicit declaration of function 'ipcInitialize'; did you mean 'bpcInitialize'? [-Wimplicit-function-declaration]
16 |     ipcInitialize(&c);
|     ^~~~~~~~~~~~~
|     bpcInitialize
/home/bsnx/source/util.c:17:5: warning: implicit declaration of function 'ipcSendPid' [-Wimplicit-function-declaration]
17 |     ipcSendPid(&c);
|     ^~~~~~~~~~
/home/bsnx/source/util.c:26:11: warning: implicit declaration of function 'ipcPrepareHeader' [-Wimplicit-function-declaration]
26 |     raw = ipcPrepareHeader(&c, sizeof(*raw));
|           ^~~~~~~~~~~~~~~~
/home/bsnx/source/util.c:26:9: warning: assignment to 'struct  *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
26 |     raw = ipcPrepareHeader(&c, sizeof(*raw));
|         ^
/home/bsnx/source/util.c:33:5: warning: implicit declaration of function 'ipcDispatch'; did you mean 'tipcDispatch'? [-Wimplicit-function-declaration]
33 |     ipcDispatch(srv);
|     ^~~~~~~~~~~
|     tipcDispatch
linking bootsoundnx.elf
built ... bootsoundnx.nso
Failed to get system_resource_size (field not present).
Failed to get version (field not present).
Failed to get process_category (field not present).
Failed to get optimize_memory_allocation (field not present).
Failed to get disable_device_address_space_merge (field not present).
Failed to get signature_key_generation (field not present).
Failed to get program_id_range_min (field not present).
Failed to get program_id_range_max (field not present).
Failed to get program_id (field not present).
Using deprecated kernel_capabilities format. Please turn it into an array.
built ... bootsoundnx.npdm
built ... bootsoundnx.nsp
root@155fbd9d3c7e:/home/bsnx#


Add Memorization Evals to repo

Adds memorization evals to the repo and updates readme on replication details

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


Proxy support

In order to increase access to the network, the idea is to provide a proxy interface (socks5) which can be used as an ingress point in the network. While this in itself should be fairly straightforward, the main issue lies in the differences between connections. A socks5 proxy would allow ingressing via regular TCP sockets (or UDP). But this means the data we receive is actually L5, whereas we send L3 data over the network. This means that unless we build in a TCP stack, we also need the TUN interface locally. At this point, the proxy would accept the connection, create a new connection to the destination network address, which leaves the process, only to ingress again through the TUN interface.
Considering we control the proxy, we could attempt to setup 2 socks5 proxies. The local one acts as ingress. The remote one acts as egress. When a node is setup, an optional egress point is specified. If set, a local ingress will forward all traffic to that target over the network, were it will egress regularly. This gives some form of VPN feature. For this to work, we'll also need to carve out some flags in the encrypted packets, though plenty are available.

Currently not planned, can reopen if needed in the future


Warning: EACCES: permission denied, lstat '/var/lib/docker/image'

I want to cache the pulled docker images. This is the YAML file I wrote:

      - name: Change Docker image directory ownership
        run: sudo chown -R $USER:$USER /var/lib/docker/image

      - name: Cache Docker
        uses: actions/cache@v4
        with:
          path: |
            /var/lib/docker/image
          key: docker-layers-${{ runner.os }}-pull-image

      - name: Pull images
        run: |
          docker pull holism/panel
          docker pull node:lts-bookworm-slim

The problem is that the Post step for Cache Docker can not access the /var/lib/docker/image directory:

Post job cleanup.
Warning: EACCES: permission denied, lstat '/var/lib/docker/image'

I even tried to make it world-writable and executable by using run: sudo chmod -R 777 --preserve-root /var/lib/docker/image, yet I still get that error.
I think it's a bug of your action that does not perform the chmod or can not perform it on the target directory. Therefore I reported it.
I have also seen https://github.com/actions/cache/issues/81 and https://github.com/actions/cache/issues/31.

![FB_IMG_1707177108336](https://github.com/actions/cache/assets/159090726/68f891da-3dc2-4b48-9c07-d745e1b394d1)


Add elapsed time

Hello! Thank you again for this wonderful library.
In my case, i have a pannable container with draggable items. I want the drag to actually start if user holds mouse more than 180ms.
I would use config.dragDelay, but i need to catch the first mousedown event, and stop its propagation down to the pannable container, so panning wouldn't start too.
The soultion i have now, is to memoize first timestamp (memo = time) and then calculate elapsed time (elapsed = time - memo) to check if drag should happen.
I think it could be useful to include elapsed time into gesture state to reduce handler code boilerplateness.

Hey @mrsimb thanks for the suggestion! Can you please share a codesandbox with your current workaround? Thanks!

Okay, will do after i get to home.

Hey @mrsimb did you have time to have a try?

elapsed time would be super useful. i added it to react-three-fiber as well. it's just a
const now = Date.now()
const elapsed = (now - last) / 1000
last = now

elapsedTime has been added in 7.0.0-alpha.22, which currently supports drag and wheel gesture.

great, thanks!
also sorry, i forgot to reply


If search results is zero, the item window remains, when filtering items while displaying the preview window.

**Warning: i solved the problem with minimal init.vim and no
Reproduction Instructions. **
Problem Summary.
Conditions

neovim
set split to 'floating'
preview window is displayed.

Problem
Only the preview window disappears and the cursor moves to the original window while the item window remains.
Expected.
Either of the following

the preview window and the window for the item remain and the cursor remains in the item window. 2.
the item window disappears and the cursor moves to the original window.

Environment Information

ddu-ui-ff version (SHA1):

36a0c44165ef081740b8721c7a8a4fe3b2a93e90

denops.vim version (SHA1):

d7a15615f86830e9464c30f761a3911f619b38b3

deno version (deno -V output):

deno 1.32.5

OS:

ArchLinux

neovim/Vim :version output:

NVIM v0.9.0
Build type: Release
LuaJIT 2.1.0-beta3
Provide a minimal init.vim/vimrc without plugin manager (Required!)

set runtimepath^=~/.vim runtimepath+=~/.vim/after
set runtimepath+=~/.vim/plugged/denops.vim
set runtimepath+=~/.vim/plugged/ddu.vim
set runtimepath+=~/.vim/plugged/ddu-ui-ff
set runtimepath+=~/.vim/plugged/ddu-source-file
set runtimepath+=~/.vim/plugged/ddu-kind-file
set runtimepath+=~/.vim/plugged/ddu-filter-matcher_substring

let &packpath = &runtimepath

" keybind
nmap <silent> ;f <Cmd>call ddu#start(#{
    \   ui: 'ff',
    \   uiParams: #{
    \       ff: #{
    \         split: "floating",
    \         highlights: {'selected': 'Statement'},
    \         winCol: &columns/8 ,
    \         winWidth: 15 ,
    \         winRow: &lines/8,
    \         winHeight: 10 ,
    \         autoAction: {'name':'preview'},
    \         startFilter : v:false
    \       },
    \   },
    \   sourceOptions : #{
    \       _: #{
    \           matchers: ['matcher_substring']
    \       }
    \   },
    \   sources: [#{
    \      name: "file",
    \   }]})<CR>

augroup DduKeyMap
  au!
  autocmd FileType ddu-ff call s:ddu_my_settings()
  autocmd FileType ddu-ff-filter call s:ddu_filter_my_settings()
augroup End

function! s:ddu_my_settings() abort
  " global
  nnoremap <buffer><silent> <Esc>
    \ <Cmd>call ddu#ui#do_action('quit')<CR>

  nnoremap <buffer><silent> i
    \ <Cmd>call ddu#ui#do_action('openFilterWindow')<CR>

  nnoremap <buffer><silent> p
    \ <Cmd>call ddu#ui#do_action('preview')<CR>
endfunction

function! s:ddu_filter_my_settings() abort
  inoremap <buffer><silent> <CR> <Esc><Cmd>close<CR>
  inoremap <buffer><silent> <Esc> <Esc><Cmd>close<CR>

  nnoremap <buffer><silent> <CR> <Cmd>close<CR>
  nnoremap <buffer><silent> <Esc> <Cmd>close<CR>
endfunction

How to reproduce from neovim/Vim startup (Required!)

exec ddu#start
Open filter window
do preview action
search for elements not in item

screenshot (if possible)
https://user-images.githubusercontent.com/42508708/236609259-03cde89a-1b18-4132-9324-3e6133269aec.mp4

You must not execute :close directory.
Please read the documentation.
function! s:ddu_filter_my_settings() abort
  inoremap <buffer> <CR>
        \ <Esc><Cmd>call ddu#ui#do_action('closeFilterWindow')<CR>
  inoremap <buffer> <ESC>
        \ <Esc><Cmd>call ddu#ui#do_action('closeFilterWindow')<CR>
  nnoremap <buffer> <CR>
        \ <Cmd>call ddu#ui#do_action('closeFilterWindow')<CR>
  nnoremap <buffer> <ESC>
        \ <Cmd>call ddu#ui#do_action('closeFilterWindow')<CR>
endfunction

It is just keymappings problem.


chore(from): add benchmarks for the path of IteratorObservable.

Merged with 2ec5b24, thanks @saneyuki


FTP Upload task can't connecting (FTPS).

I try to upload some files to FTPS. The Provider is IONOS (1&1).
The login data are:

Server / Host:  accessXXXXX.webspace-data.io
Protokoll: FTPS
Port: 990

I can login in Filezilla, but the FTP Upload task in my pipline yml file failed.
Starting: FtpUpload
Task         : FTP upload
Description  : Upload files using FTP
Version      : 2.157.0
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/ftp-upload
connecting to: accessXXXXX.webspace-data.io:990
[debug]Connected to <IP_ADDRESS>:990
[error]Error: Timeout (control socket)
[debug]Processed: vso[task.issue type=error;]Error: Timeout (control socket)
[debug]task result: Failed
[error]Ftp Upload failed
[debug]Processed: vso[task.issue type=error;]Ftp Upload failed
[debug]Processed: vso[task.complete result=Failed;]Ftp Upload failed
[section]Finishing: FtpUpload
My taksk in der yml file:
..
task: FtpUpload@2
inputs:
credentialsOption: 'inputs'
serverUrl: 'ftps://accessXXXXX.webspace-data.io:990'
username: 'XXXXX'
password: 'XXXXX'
#rootDirectory: '/'
filePatterns: '**'
remoteDirectory: '/'
clean: false
cleanContents: false
preservePaths: false
trustSSL: true
...
My provider support only ftps access.
A test with a other FTP (only ftp) worked correct.
I don't know what is my error?

The same issue found today.  Used classic definition.
FTPS with and without PASV
Server: ftps://server:990
Credentials Used
Works with Filezilla Passive FTPS

I have the same issue, also I with Ionos provider,  it seems that te V1 of the task resolve the issue

I also have the same issue (with 1&1 Ionos), but also using V1 of the task didn't help.

The same issue with v2, v1 does nothing

I have a hunch this is because the FTPUpload task is suppressing the underlying basic-ftp package's feature to connect using implicit TLS negotiation.
I've had the same issue and was only able to solve it because my FTP server also supports explicit TLS.
Basically, the basic-ftp client has an option named "secure", which can be either "true" (explicit TLS), "false" (no TLS) or "implicit" (implicit TLS). The FTPUpload task won't use the "implicit" option, though. It will either set it to "true", if your server URL starts with "ftps://" or false, otherwise.

Still not working in 2022, same issue

any idea please ?

any idea please ?

This issue is closed. You can't expect the situation to change by itself. Either create a new issue or fix it yourself and submit a PR.
If you're opting for the latter, see my comment above for my idea what the problem might be.


Obtain valid values and keys for enum

Assuming I have the following .proto file
message Foo {
  Bar bar = 1;
}
enum Bar {
  a = 0;
  b = 1;
}

Is there a way to obtain all the valid enum values/keys?
I know that I can switch between atom and integer with Bar.value(:a) and Bar.key(0), but I couldn't find a way to obtain something like Bar.keys() to obtain [:a, :b], Bar.values() to obtain [0, 1] or Bar.map() to obtain %{a: 0, b: 1}
My apologies if there's already a function implemented and I didn't find it. If there isn't, I think it could be helpful.

This functionality was added in 8c86518ea630fa5888797747767bc08d4bd93451 so I'm marking this issue as closed.