[One Plans] Links Updates

Unset button behaviors of links in table. Allow links to be embedded in offer eyebrow.
Resolves: https://jira.corp.adobe.com/browse/MWPW-139776
Test URLs:

Before: https://stage--express--adobecom.hlx.page/express/draft-one-plans-pricing?tab=1&lighthouse=on
After: https://one-plans-feedback--express--adobecom.hlx.page/express/draft-one-plans-pricing?tab=1&lighthouse=on

Codecov Report
Attention: 2 lines in your changes are missing coverage. Please review.

Comparison is base (70c752f) 33.43% compared to head (2162b15) 33.48%.

Files
Patch %
Lines

express/blocks/pricing-cards/pricing-cards.js
77.77%
2 Missing :warning:

Additional details and impacted files
@@            Coverage Diff             @@
##            stage     #639      +/-   ##
==========================================
+ Coverage   33.43%   33.48%   +0.05%
==========================================
  Files         131      131
  Lines       25439    25442       +3
==========================================
+ Hits         8505     8520      +15
+ Misses      16934    16922      -12

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


[FEATURE] Adding admin functionality to the frontend

Description
1 Admin routes shouldn't be accessible when the URL is directly entered.
2 owner of the post should be able to edit and delete his own post
3 admin should be able to see the edit and delete post option like the 2nd point like post owner. At the same time has his dedicated window using 3rd point.
Use Case
This feature will complete the admin functionality to the frontend.
Proposed Solution
No response
Additional Information
No response
Attachments
No response

i would like to fix this issue

Hi there! , will like to resolve this issue.

i would love to resolve this issue. I am a GSSOC 24 contributor.
Propose Solution

[ ] Will make  a reusable Layout to protect certain routes.
[ ] Need to store user is Admin or not in a global state by using native useContext hook or using library like redux-toolkit.

The question is
Are we getting admin value in user data  or not ?
If not i would also love to  fix this issue along with the above one.


I have left alone the cancellable and similar worlds because of the US/UK spelling style differences (and somehow the double L comes more natural to me despite the rules).

Maybe because I touched those resx files, VS thought why not mess up the project settings with all sorts of different tool versions.

Is it good to merge then?

it passed, so yes.


Fix unwraplen assignment in EVP_PKEY_decapsulate

@t-j-h noted that EVP_PKEY_decapsulate failed to behave in the way described by the documentation here:
https://docs.openssl.org/master/man3/EVP_PKEY_decapsulate/
Specifically, the docs indicate:
The EVP_PKEY_decapsulate() function performs a private key decapsulation operation using ctx.
The data to be decapsulated is specified using the wrapped and wrappedlen parameters.
If unwrapped is NULL then the maximum size of the output secret buffer is written to *unwrappedlen.
If unwrapped is not NULL and the call is successful then the decapsulated secret data is written to
unwrapped and the amount of data written to *unwrappedlen.

But the implementation neither checked that *outlen was non-null when a buffer was provided, nor did it write the actual secret length to *outlen after the decryption was complete.
Fix those issues, and augment the tests to ensure that we pass a size_t pointer into the function.  Also add an additional test to ensure that passing a NULL pointer results in an error

This pull request is ready to merge

Partially squashed and merged to all the active branches. Thank you.

Kicking CIs to see if there is a fips provider version problem or not.

Yep, CI build failures from this.  Worse they made the beta release which also fails: https://github.com/openssl/openssl/actions/runs/11218358737

I'm not sure what's going on here.  It looks like the test immediately aborted with error code of 422

Yep, CI build failures from this. Worse they made the beta release which also fails: https://github.com/openssl/openssl/actions/runs/11218358737

?????
I don't understand.  All the jobs there look successful at this point.


Pantograph Error Cases Report

Environment setup
header = """
set_option maxHeartbeats 0
open BigOperators Real Nat Topology Rat
"""
project_path = "<repo>/experiments/minif2f/MiniF2F"
server = Server(imports=['Aesop', 'Mathlib'], project_path=project_path)

Error cases

[ ] JSONDecodeError for parsing brackets
theorem amc12_2000_p15 (f : ℂ → ℂ) (h₀ : ∀ x, f (x / 3) = x ^ 2 + x + 1)
    (h₁ : Fintype (f ⁻¹' {7})) : (∑ y in (f ⁻¹' {7}).toFinset, y / 3) = -1 / 9

[ ] JSONDecodeError for mathd_numbertheory_552
theorem mathd_numbertheory_552
  (f g h : ℕ+ → ℕ)
  (h₀ : ∀ x, f x = 12 * x + 7)
  (h₁ : ∀ x, g x = 5 * x + 2)
  (h₂ : ∀ x, h x = Nat.gcd (f x) (g x))
  (h₃ : Fintype (Set.range h)) :
  (∑ k in (Set.range h).toFinset, k) = 12

A minimized Case
theorem mathd_numbertheory_552_min (h : ℕ → ℕ) (h₃ : Fintype (Set.range h)) : true

[ ] Unsolved goals
theorem sample (p q r x : ℂ)
      (h₀ : (x - p) _(x - q) = (r - p)_ (r - q))
   : (x - r) _x = (x - r)_ (p + q - r)

The remaining goal state:
p : ℂ
q : ℂ
r : ℂ
x : ℂ
h₀ : (x - p) _(x - q) = (r - p)_ (r - q)
⊢ ℂ

Lean Server Result
The Lean server response can be check here

As for the JSONDecodeError in mathd_numbertheory_552 (and the corrsponding MWE), could you please try the following fix?
https://github.com/lenianiva/PyPantograph/blob/f4cc21cc963a9f410b0aec05052d6b4975861321/pantograph/server.py#L177

Can you explain what is supposed to happen in case 2?
The first one is probably a Python problem

The first one is probably a Python problem

Sorry for the words "parsing brackets"—that wasn't accurate. The issue isn't with the {} but with the () in the last condition:
(∑ y in (f ⁻¹' {7}).toFinset, y / 3)
The same applies to the second one as well. Note that this all works fine in the LSP. You can try the following code:
import Mathlib
import Aesop

theorem mathd_numbertheory_552
  (f g h : ℕ+ → ℕ)
  (h₀ : ∀ x, f x = 12 * x + 7)
  (h₁ : ∀ x, g x = 5 * x + 2)
  (h₂ : ∀ x, h x = Nat.gcd (f x) (g x))
  (h₃ : Fintype (Set.range h)) :
  (∑ k in (Set.range h).toFinset, k) = 12 := sorry

theorem amc12_2000_p15 (f : ℂ → ℂ) (h₀ : ∀ x, f (x / 3) = x ^ 2 + x + 1)
    (h₁ : Fintype (f ⁻¹' {7})) : (∑ y in (f ⁻¹' {7}).toFinset, y / 3) = -1 / 9 := sorry

The error is raised by the server, not by json-loading. You can reproduce the error by:

Understood. This does seem rather strange as I've come across several similar issues that were due to json errors and were resolved by setting ensure_ascii=False.
I was able to successfully reproduce the error you mentioned. Below is a more detailed error backtrace:
PANIC at _private.Pantograph.Frontend.MetaTranslate.0.Pantograph.Frontend.MetaTranslate.translateExpr Pantograph.Frontend.MetaTranslate:71:6: assertion violation<EMAIL_ADDRESS>).contains fvarId'

backtrace:
/path/to/pantograph/pantograph-repl(lean_panic_fn+0x70) [0xaaaad8c6b250]
/path/to/pantograph/pantograph-repl(l_panic___at___private_Pantograph_Frontend_MetaTranslate_0__Pantograph_Frontend_MetaTranslate_translateExpr___spec__1+0x44) [0xaaaad53c26c4]
/path/to/pantograph/pantograph-repl(lean_apply_7+0x460) [0xaaaad8c7a890]
/path/to/pantograph/pantograph-repl(lean_apply_8+0x2fc) [0xaaaad8c7b140]
/path/to/pantograph/pantograph-repl(l_ReaderT_bind___at___private_Pantograph_Frontend_MetaTranslate_0__Pantograph_Frontend_MetaTranslate_translateExpr___spec__8___rarg+0x114) [0xaaaad53c6ba8]
/path/to/pantograph/pantograph-repl(lean_apply_8+0x45c) [0xaaaad8c7b2a0]
/path/to/pantograph/pantograph-repl(l_Lean_Core_withIncRecDepth___at___private_Pantograph_Frontend_MetaTranslate_0__Pantograph_Frontend_MetaTranslate_translateExpr___spec__9+0x464) [0xaaaad53c7534]
/path/to/pantograph/pantograph-repl(l_Lean_Core_transform_visit___at___private_Pantograph_Frontend_MetaTranslate_0__Pantograph_Frontend_MetaTranslate_translateExpr___spec__4+0xa58) [0xaaaad53c40b4]
/path/to/pantograph/pantograph-repl(l_Lean_Core_transform___at___private_Pantograph_Frontend_MetaTranslate_0__Pantograph_Frontend_MetaTranslate_translateExpr___spec__3+0xfc) [0xaaaad53cee5c]
/path/to/pantograph/pantograph-repl(l___private_Pantograph_Frontend_MetaTranslate_0__Pantograph_Frontend_MetaTranslate_translateExpr+0x1dc) [0xaaaad53d1abc]
/path/to/pantograph/pantograph-repl(l_Pantograph_Frontend_MetaTranslate_translateLocalInstance+0x184) [0xaaaad53d26ec]
/path/to/pantograph/pantograph-repl(l_Array_mapMUnsafe_map___at_Pantograph_Frontend_MetaTranslate_translateMVarId___spec__1+0x19c) [0xaaaad53d20b8]
/path/to/pantograph/pantograph-repl(l_Pantograph_Frontend_MetaTranslate_translateMVarId___lambda__3+0x534) [0xaaaad53d6cd4]
/path/to/pantograph/pantograph-repl(lean_apply_8+0x45c) [0xaaaad8c7b2a0]
/path/to/pantograph/pantograph-repl(lean_apply_5+0x444) [0xaaaad8c79338]
/path/to/pantograph/pantograph-repl(l_Lean_Meta_withLCtx___at_Pantograph_Frontend_MetaTranslate_translateMVarId___spec__6___rarg+0x64) [0xaaaad53d4a2c]
/path/to/pantograph/pantograph-repl(l_Pantograph_Frontend_MetaTranslate_translateMVarId___lambda__4+0x19c) [0xaaaad53d78fc]
/path/to/pantograph/pantograph-repl(l_Pantograph_Frontend_MetaTranslate_translateMVarId+0x564) [0xaaaad53d15f4]
/path/to/pantograph/pantograph-repl(l_List_mapM_loop___at_Pantograph_Frontend_MetaTranslate_translateMVarFromTacticInfoBefore___spec__1+0x274) [0xaaaad53dec94]
/path/to/pantograph/pantograph-repl(l_List_mapM_loop___at_Pantograph_Frontend_sorrysToGoalState___spec__3+0x254) [0xaaaad53f1678]
/path/to/pantograph/pantograph-repl(pantograph_frontend_sorrys_to_goal_state_m+0x1b0) [0xaaaad53f2cb0]
/path/to/pantograph/pantograph-repl(lean_apply_5+0x3ac) [0xaaaad8c792a0]
/path/to/pantograph/pantograph-repl(l_Pantograph_Repl_runMetaInMainM___rarg+0x88) [0xaaaad5407528]
/path/to/pantograph/pantograph-repl(l_Pantograph_Repl_runMetaInMainM___rarg___boxed+0x14) [0xaaaad5407c3c]
/path/to/pantograph/pantograph-repl(lean_apply_5+0x3ac) [0xaaaad8c792a0]
/path/to/pantograph/pantograph-repl(l_ReaderT_bind___at_Pantograph_Repl_execute_frontend__process___spec__2___rarg+0x98) [0xaaaad5446a4c]
/path/to/pantograph/pantograph-repl(lean_apply_5+0x3d0) [0xaaaad8c792c4]
/path/to/pantograph/pantograph-repl(l_Lean_withEnv___at_Pantograph_Repl_execute_frontend__process___spec__3+0x1e0) [0xaaaad5446f54]
/path/to/pantograph/pantograph-repl(l_List_mapM_loop___at_Pantograph_Repl_execute_frontend__process___spec__5+0x778) [0xaaaad544923c]
/path/to/pantograph/pantograph-repl(l_Pantograph_Repl_execute_frontend__process___lambda__5+0x510) [0xaaaad544ac04]
/path/to/pantograph/pantograph-repl(l_Pantograph_Repl_execute_frontend__process___lambda__7+0x230) [0xaaaad544be84]
/path/to/pantograph/pantograph-repl(l_Pantograph_Repl_execute_frontend__process+0x180) [0xaaaad544c124]
/path/to/pantograph/pantograph-repl(l_Pantograph_Repl_execute+0x333c) [0xaaaad54507c8]
/path/to/pantograph/pantograph-repl(l_loop___lambda__2+0x264) [0xaaaad53123fc]
/path/to/pantograph/pantograph-repl(l_loop+0x41c) [0xaaaad53117a0]
/path/to/pantograph/pantograph-repl(l_loop___lambda__1___boxed+0x28) [0xaaaad5313758]
/path/to/pantograph/pantograph-repl(lean_apply_6+0x1f8) [0xaaaad8c79bc0]
/path/to/pantograph/pantograph-repl(l_loop+0x41c) [0xaaaad53117a0]
/path/to/pantograph/pantograph-repl(l_main___lambda__1+0xb4) [0xaaaad5313f60]
/path/to/pantograph/pantograph-repl(l_main___lambda__2+0x554) [0xaaaad5314c6c]
/path/to/pantograph/pantograph-repl(+0xfa61e4) [0xaaaad53161e4]
/usr/lib64/libc.so.6(+0x2b040) [0xffffb93cd040]
/usr/lib64/libc.so.6(__libc_start_main+0x94) [0xffffb93cd118]
/path/to/pantograph/pantograph-repl(_start+0x30) [0xaaaad53104b0]

As the error message suggests, commenting out this line can address the aforementioned JSONDecodeErrors. (However, Unsolved goals remains unsolved):
https://github.com/lenianiva/Pantograph/blob/3744cfaa9608cd43e00078283339662b3720949b/Pantograph/Frontend/MetaTranslate.lean#L71C1-L71C43
I'm still not certain why this assertion fails. Perhaps @lenianiva could conduct a more in-depth inspection.


config: add config ui for trigger set options

This adds a new config entry to trigger sets that can add field entries to the top of the trigger set under the raidboss section in the config ui. Trigger sets must have an id to have any config loaded, saved, or displayed.
Triggers can use data.triggerSetConfig['optionId'] here to access anything listed in the config section by id. The Data type for a trigger set can be extended in a way that will type check ids and add field names.
To avoid naming collisions, not all trigger set config values are loaded. Trigger sets get their own config's values loaded implicitly, but if they need to load some other trigger set's values, they can use loadConfigs and specify other trigger sets by id.
For backwards compat, data.triggerSetConfig contains all saved values (even ones that no longer have a config entry). Also, it is possible to use loadConfigs to load trigger set ids that no longer exist.
To also support backwards compat, ConfigEntry.default can now be a function that reads from options. See the e8s/TEA changes for how this works.

@valarnin FYI if you're interested in taking a look

I think this PR covered all the points I raised in our conversation. I won't have time to do more than a cursory examination at the code, but it looks good as far as my use cases are concerned.

I love this new feature, thanks for developing it.


Prevent CVE-2023-2878

Description
Prevent CVE-2023-2878
Checklist

[x] I have read the policy contribution guidelines.
[] I have added test manifests and resources covering both positive and negative tests that prove this policy works as intended.
[x] I have added the artifacthub-pkg.yml file and have verified it is complete and correct.

Note that the test for the CSI secret store are superfluous, unless you actually install a proper CSI driver, the test is kinda meaningless


Missing 3.2.3 GitHub release

Version 3.2.3 is available in the App Store, but there is no GitHub release. Please release this version to GitHub.

@GisoSchroederSAP Could you bring this up to the team, please?

I'm going to ask the DEV team, if this is still possible, now that we're shutting down the DEV organization

@GisoSchroederSAP The Android team managed to publish the release:


Fixed globalvar/var/enum bounding

Problem:
Word bounding for var or enum is badly defined, which matches things like variable_instance_exists()

Hey, I don't know how to test this but it seems like it should get fixed with this. There are no contribution docs but it seemed like an easy fix, could you see if this works and if so publish it?
Thanks!

I accidentally ignored it, thank you very much.

I released an updated version, you can try to update it.


Refactor: Updated CLI documentation

I updated a few things having to do with the CLI documentation.

Ready for review ✅

Great, thank you :)


how to turn on widgetsnbextension from pyq -m notebook?

How do I do the pyq equivalent  from the command line?
jupyter nbextension enable --py --sys-prefix widgetsnbextension
Thanks,
Ray

Try replacing jupyter with pyq -mjupyter in your command.

On Mar 4, 2018, at 8:46 AM, Ray Zhang<EMAIL_ADDRESS>wrote:
How do I do the pyq equivalent from the command line?
jupyter nbextension enable --py --sys-prefix widgetsnbextension
Thanks,
Ray
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.

--
DISCLAIMER
This communication is intended only for the personal use of the
recipient(s) named above and may contain information and/or attachments
that are privileged, confidential, proprietary and protected from
disclosure.  If you are not the intended recipient of this message, you are
hereby notified that any dissemination, distribution or copying of this
message, and any attachments thereto, is strictly prohibited.  If you
receive this message in error, please promptly delete it without further
distribution and reply to the sender that you have received the message in
error.
This communication or any attachment thereto is not intended, and should
not be construed, as a investment advice or and does not constitute an
offer or commitment, a solicitation of an offer, or any advice or
recommendation, to enter into or conclude any transaction.  This
communication or any attachment thereto is not intended, and should not be
construed, as legal, tax, public accounting or auditing advice or opinions.
You should consult your legal counsel, accountants and/or tax advisors
prior to making any decisions or taking any action concerning the matters
in this communication.  Attachments hereto may have additional important
disclosures and disclaimers, which you should read.

Try replacing jupyter with pyq -mjupyter in your command.

$ pyq -mjupyter nbextension enable --py --sys-prefix widgetsnbextension
Enabling notebook extension jupyter-js-widgets/extension...
      - Validating: OK


[BUG] Missing install requirement of certifi

certifi gets imported, but not installed with the library.
This currently breaks the library for us 😞

Damn it :)
Well, I'll do an upgrade to setup requirements, but meanwhile you can add certifi to your requirements.txt to make this work

I added certifi as a requirement in 1.14


Add support for custom context

closes elastic/apm-agent-java#604

Codecov Report

Merging #606 into master will decrease coverage by 0.77%.
The diff coverage is 62.5%.

@@             Coverage Diff              @@
##             master     #606      +/-   ##
============================================
- Coverage     63.13%   62.36%   -0.78%
  Complexity       68       68
============================================
  Files           188      188
  Lines          7278     7105     -173
  Branches        845      821      -24
============================================
- Hits           4595     4431     -164
+ Misses         2413     2403      -10
- Partials        270      271       +1

Impacted Files
Coverage Δ
Complexity Δ

.../apm/agent/report/serialize/DslJsonSerializer.java
82.56% <100%> (+0.72%)
0 <0> (ø)
:arrow_down:

...m/agent/plugin/api/TransactionInstrumentation.java
41.93% <20%> (-10.45%)
0 <0> (ø)

...lastic/apm/agent/impl/transaction/Transaction.java
85% <66.66%> (-3.24%)
0 <0> (ø)

...tic/apm/agent/impl/context/TransactionContext.java
96.66% <88.88%> (-3.34%)
0 <0> (ø)

...co/elastic/apm/agent/report/ApmServerReporter.java
50% <0%> (-7.85%)
0% <0%> (ø)

...apm/agent/impl/transaction/TraceContextHolder.java
50% <0%> (-6.87%)
0% <0%> (ø)

...bci/methodmatching/TraceMethodInstrumentation.java
59.57% <0%> (-5.37%)
0% <0%> (ø)

...ent/jaxrs/JaxRsTransactionNameInstrumentation.java
82.75% <0%> (-2.54%)
0% <0%> (ø)

...astic/apm/agent/impl/transaction/TraceContext.java
89.72% <0%> (-1.23%)
0% <0%> (ø)

...tic/apm/agent/configuration/CoreConfiguration.java
99.3% <0%> (-0.7%)
0% <0%> (ø)

... and 3 more

Continue to review full report at Codecov.

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

I assume there was a discussion about that and this is aligned with other agents, I just don't recall- what is the benefit of custom Numbers and Boolean? Would it make a big difference if indexed (as labels)?

Do you mean why we can't simply convert numbers and booleans as strings and store them as keywords?
It's because you can't graph strings if you want the actual number to be on the y-axis. In other words, you can't use metric aggregations on strings.


Problem multiple languages in Estore from themegrill

Hello
Our website is multiple languages.
Now I don’t get the text in the Header Top Bar bilingual.
(I use Polylang and Hyyan WooCommerce Polylang)
regards
Marco

Hi, I do not know what you mean by "don’t get the text in the Header Top Bar bilingual"
when reporting the problem please provide more details including all the details requested in the issue template.
This plugin is only supported by unpaid volunteers in their spare time so please provide all information which might be needed.


WIP: Add simple docstring based help system for FemtoLisp.

This PR implements a symple documentation system for use in flsip:
ismaelvc@toybox:~$ rlwrap julia --lisp
;  _
; |_ _ _ |_ _ |  . _ _
; | (-||||_(_)|__|_)|_)
;-------------------|----------------------------------------------------------

> (load "femto-docs.scm")
#fn("=000r1c02c1|31e2|31g6c3\x82?0c4c5g5c6335:0c4g6c732e8e8k82c9g8q1c:g7q1c;g9q1tg9302;" ["\n        (help f)\n\n    Displays documentation for function `f`.\n\n    # Usage\n\n    ```\n    > (help docstring)\n\n            (docstring f)\n\n        Retrieve and display function `f` docstring.\n\n        # Usage\n\n        ```\n        > (docstring help)\n        \"\n            (help f)\n\n        Displays documentation for function `f`.\n        \"\n\n        > (docstring princ)\n        \"\"\n\n        > (docstring 'foo)\n        type error: function:vals: expected function, got foo\n        #0 (docstring foo)\n        ```\n\n    #t\n\n    > (help princ)\n\n        No documentation found for `princ`.\n\n    #t\n\n    > (help 'foo)\n    type error: function:name: expected function, got foo\n    #0 (help foo)\n    ```\n    "
  #fn(function:name) docstring "" #fn(string)
  "\n    No documentation found for `" "`.\n\n" "\n" *output-stream* #fn("5000r0~k0;" [*output-stream*])
  #fn("6000r0e0~41;" [princ]) #fn("6000r1~302c0|41;" [#fn(raise)])] help)

> (docstring help)
"\n        (help f)\n\n    Displays documentation for function `f`.\n\n    # Usage\n\n    ```\n    > (help docstring)\n\n            (docstring f)\n\n        Retrieve and display function `f` docstring.\n\n        # Usage\n\n        ```\n        > (docstring help)\n        \"\n            (help f)\n\n        Displays documentation for function `f`.\n        \"\n\n        > (docstring princ)\n        \"\"\n\n        > (docstring 'foo)\n        type error: function:vals: expected function, got foo\n        #0 (docstring foo)\n        ```\n\n    #t\n\n    > (help princ)\n\n        No documentation found for `princ`.\n\n    #t\n\n    > (help 'foo)\n    type error: function:name: expected function, got foo\n    #0 (help foo)\n    ```\n    "

> (docstring princ)
""

> (docstring 'foo)
type error: function:vals: expected function, got foo
#0 (docstring foo)

> (help docstring)

        (docstring f)

    Retrieve and display function `f` docstring.

    # Usage

    ```
    > (docstring help)
    "
        (help f)

    Displays documentation for function `f`.

    # Usage

    ```
    > (help docstring)

           (docstring f)
        Retrieve and display function `f` docstring.

    #t

    > (help princ)

        No documentation found for `princ`.

    #t

    > (help 'foo)
    type error: function:name: expected function, got foo
    #0 (help foo)
    ```
    "

    > (docstring princ)
    ""

    > (docstring 'foo)
    type error: function:vals: expected function, got foo
    #0 (docstring foo)
    ```

#t

> (help princ)

    No documentation found for `princ`.

#t

> (help 'foo)
type error: function:name: expected function, got foo
#0 (help foo)

>
ismaelvc@toybox:~$ julia -v
julia version 0.6.0-dev

This same PR was made to upstream femtolisp, since I believe, julias flisp and vanilla flisp, are different, which is another thing I'd like to document too:

https://github.com/JuliaLang/julia/pull/19830

This is clever, but unfortunately a bit brittle:
> (define (f (a "oops"))
 "docs"
a)
#fn("7000\x8900001000\x8a0000770c0m02c12|;" ["oops" "docs"] f)

With optional and keyword arguments, the doc string is not necessarily the first value. Plus, a compiler optimization could be added to remove pure expressions whose values aren't used, which would remove the string.


update Jackson to 2.18.1

Method singletonSupport in KotlinModule.Builder was removed in jackson-module-kotlin 2.18.0, making kestrel incompatible was Jackson versions >=2.18.0.
This change bumps Jackson dependency to 2.18.1 and updates the module registration call to work with the new way to enable singleton support.

@williamboxhall please, have a look. Thanks!

Or maybe @amatueva can take a look? 🙂

@davidwheeler123 done: 24f599d6746bbe09957e122ae5b9f34b38fa296b

@monosoul I meant to update base_version so when we publish it becomes v0.23.0. But nvm I've merged this and bumped the version in #69. I'll publish it to maven central later today

If you haven't seen it this should be up on maven central now. Thanks for your contribution @monosoul!


S3 crt client timeouts and retry strategy are not working.

Describe the bug
Below mentioned s3 crt client configs we set.
Aws::S3Crt::S3CrtClient *s3_crt_client;
Aws::S3Crt::Model::GetObjectRequest object_request;
Aws::SDKOptions options;
Aws::InitAPI(options);
Aws::S3Crt::ClientConfiguration config;
config.throughputTargetGbps = 1;
config.partSize = 10*1024*1024;
config.httpRequestTimeoutMs = 100;
config.connectTimeoutMs = 100;
config.requestTimeoutMs = 100;
s3_crt_client = Aws::New<Aws::S3Crt::S3CrtClient>("test", config);

We are reading 25MB at a time and we are measuring how much time it is taking for getObject.
average of 500ms taken for each getObject
Even though we set all the timeouts s3 crt client is taking more time?
We even tried with no retry strategy, but still there is no use and the behaviour is same.
  config.httpRequestTimeoutMs = 100;
  config.connectTimeoutMs = 100;
  config.requestTimeoutMs = 100;
  std::shared_ptr<Aws::Client::RetryStrategy> retry;
  retry.reset(Aws::New<Aws::Client::DefaultRetryStrategy>("test", 0, 25));
  config.retryStrategy = retry;

GetObject() is not exiting even timeout is reached. One time we saw GetObject() for size 25MB took 10seconds.
Basically behavior is same even if we didn't set timeouts or assign custom retry strategy.
we are running this in a c5a4x large instance which is running in ap-south-1 region and s3 bucket is also in the same region and account.
Please tell whats wrong with this and suggest how to reduce time taken for GetObject().
Expected Behavior
With zero retries GetObject should exit once timeout is reached.
Current Behavior
With zero retries GetObject is not exiting even timeout is reached.
Reproduction Steps
zero retries
#include <fcntl.h>
#include <unistd.h>

#include <aws/core/Aws.h>
#include <aws/core/client/DefaultRetryStrategy.h>
#include <aws/s3-crt/S3CrtClient.h>
#include <aws/s3-crt/model/HeadObjectRequest.h>
#include <aws/s3-crt/model/GetObjectRequest.h>
#include <aws/s3-crt/S3CrtErrors.h>

void usage(const char *bin)
{
    printf("USAGE: %s <s3_uri> <part_size(in bytes)> <out_file(optional)>\n", bin);
}

uint64_t get_curr_time_ms(void)
{
    struct  timespec   ts;
    uint64_t           ts_64;
    clock_gettime(CLOCK_MONOTONIC, &ts);
    ts_64 = (uint64_t)((ts.tv_sec * 1000) + (ts.tv_nsec/1000000));
    return ts_64;
}

int main (int argc, char* argv[])
{
    char *s3_uri;
    uint64_t read_size = UINT64_MAX;
    uint64_t part_size;
    char *buf = NULL;
    uint64_t read_left;
    uint64_t to_read;
    uint64_t ret;
    uint64_t iter = 0;
    char *out_file = NULL;
    int out_fd = -1;

    if(argc < 5 || argc > 6)
    {
        usage(argv[0]);
        return 0;
    }

    s3_uri = argv[1];
    part_size = strtoull(argv[2], NULL, 10);
    if(argc == 6) out_file = argv[3];
    Aws::S3Crt::S3CrtClient *s3_crt_client;
    Aws::S3Crt::Model::GetObjectRequest object_request;
    Aws::SDKOptions options;
    Aws::InitAPI(options);
    Aws::S3Crt::ClientConfiguration config;
    config.httpRequestTimeoutMs = 100;
    config.connectTimeoutMs = 100;
    config.requestTimeoutMs = 100;
    std::shared_ptr<Aws::Client::RetryStrategy> retry;
    retry.reset(Aws::New<Aws::Client::DefaultRetryStrategy>("test", 0, 25));
    config.retryStrategy = retry;
    config.throughputTargetGbps = 1;
    config.partSize = 10*1024*1024;
    s3_crt_client = Aws::New<Aws::S3Crt::S3CrtClient>("test", config);

    char bucket[128] = {0};
    char key[128] = {0};
    if(sscanf(s3_uri, "s3://%[^/]/%s", bucket, key) == 2)
    {
        Aws::S3Crt::Model::HeadObjectRequest head_object_request;
        Aws::S3Crt::Model::HeadObjectOutcome outcome;
        head_object_request.SetBucket(bucket);
        head_object_request.SetKey(key);
        outcome = s3_crt_client->HeadObject(head_object_request);
        if(outcome.IsSuccess())
            printf("Object found, size:%lu, etag %s\n", outcome.GetResult().GetContentLength(),  outcome.GetResult().GetETag().c_str());
        object_request.SetBucket(bucket);
        object_request.SetKey(key);
    }

    if(out_file)
    {
        out_fd = open(out_file, O_CREAT | O_WRONLY);
        if(out_fd <= 2)
        {
            printf("Error in opening %s in write mode", out_file);
            return 0;
        }
    }
    int64_t pos = 0;

    buf = new char[part_size];
    read_left = read_size;
    while(read_left != 0)
    {
        ret = 0;
        int64_t retry_count = -1;
        to_read = part_size <= read_left ? part_size : read_left;
        iter ++;
        uint64_t start,end;
        Aws::S3Crt::Model::GetObjectOutcome outcome;
        object_request.SetRange(std::string("bytes=") + std::to_string(pos) + "-" + std::to_string(pos+to_read-1));
        object_request.SetResponseStreamFactory(
                [buf, to_read]()
                {
                std::unique_ptr<Aws::StringStream>
                stream(Aws::New<Aws::StringStream>("test"));
                stream->rdbuf()->pubsetbuf(static_cast<char*>(buf),
                        to_read);

                return stream.release();
                });
        start = get_curr_time_ms();
        outcome = s3_crt_client->GetObject(object_request);
        end = get_curr_time_ms();
        printf("Time taken for GetObject %lums\n",end-start);
        if(outcome.IsSuccess())
        {
            ret = outcome.GetResult().GetContentLength();

            if(ret <= to_read)
            {
                pos += ret;
                //log_info("Testing data %02x %02x", ((uint8_t*)buf)[0], ((uint8_t*)buf)[1]);
            }
            else
            {
                printf("This should never happen, pos_:%lu, requested:%lu, read:%lu\n",
                        pos, to_read, ret);
                break;
            }
        }
        else
        {
            printf("Failed to read, pos_:%lu, requested:%lu, error:%s, error_type:%d, error_code:%d\n",
                    pos, to_read, outcome.GetError().GetMessage().c_str(), outcome.GetError().GetErrorType(), outcome.GetError().GetResponseCode()) ;
            break;
        }
        if(ret == 0)
        {
            printf("Nothing read, read_left:%lubytes, iter:%lu\n", read_left, iter);
            break;
        }
        else if(ret < to_read)
        {
            printf("Read %ldbytes instead of %ldbytes, iter:%lu\n", ret, to_read, iter);
        }
        else
        {
            printf("Read %ld bytes, iter:%lu\n", ret, iter);
        }
        read_left -= ret;

        if(ret > 0 && out_fd > 2)
        {
            if(write(out_fd, buf, ret) != ret)
            {
                printf("Error in write!!! (%lu bytes)\n", ret);
                return 0;
            }
            fdatasync(out_fd);
        }
    }

    if(s3_crt_client)
    {
        Aws::Delete(s3_crt_client);
        s3_crt_client = NULL;
    }
    Aws::ShutdownAPI(options);

    if(buf) delete[] buf;
    if(out_fd > 2) close(out_fd);
    return 0;
}

default strategy
#include <fcntl.h>
#include <unistd.h>

#include <aws/core/Aws.h>
#include <aws/core/client/DefaultRetryStrategy.h>
#include <aws/s3-crt/S3CrtClient.h>
#include <aws/s3-crt/model/HeadObjectRequest.h>
#include <aws/s3-crt/model/GetObjectRequest.h>
#include <aws/s3-crt/S3CrtErrors.h>

void usage(const char *bin)
{
    printf("USAGE: %s <s3_uri> <offset in bytes> <read size(0->till end)> <part_size(in bytes)> <out_file(optional)>\n", bin);
}

uint64_t get_curr_time_ms(void)
{
    struct  timespec   ts;
    uint64_t           ts_64;
    clock_gettime(CLOCK_MONOTONIC, &ts);
    ts_64 = (uint64_t)((ts.tv_sec * 1000) + (ts.tv_nsec/1000000));
    return ts_64;
}

int main (int argc, char* argv[])
{
    char *s3_uri;
    uint64_t offset;
    uint64_t read_size;
    uint64_t part_size;
    char *buf = NULL;
    uint64_t read_left;
    uint64_t to_read;
    uint64_t ret;
    uint64_t iter = 0;
    char *out_file = NULL;
    int out_fd = -1;

    if(argc < 5 || argc > 6)
    {
        usage(argv[0]);
        return 0;
    }

    s3_uri = argv[1];
    offset = strtoull(argv[2], NULL, 10);
    read_size = strtoull(argv[3], NULL, 10);
    if(read_size == 0) read_size = UINT64_MAX;
    part_size = strtoull(argv[4], NULL, 10);
    if(argc == 6) out_file = argv[5];
    Aws::S3Crt::S3CrtClient *s3_crt_client;
    Aws::S3Crt::Model::GetObjectRequest object_request;
    Aws::SDKOptions options;
    Aws::InitAPI(options);
    Aws::S3Crt::ClientConfiguration config;
    config.httpRequestTimeoutMs = 100;
    config.connectTimeoutMs = 100;
    config.requestTimeoutMs = 100;
    config.throughputTargetGbps = 1;
    config.partSize = 10*1024*1024;
    s3_crt_client = Aws::New<Aws::S3Crt::S3CrtClient>("test", config);

    char bucket[128] = {0};
    char key[128] = {0};
    if(sscanf(s3_uri, "s3://%[^/]/%s", bucket, key) == 2)
    {
        Aws::S3Crt::Model::HeadObjectRequest head_object_request;
        Aws::S3Crt::Model::HeadObjectOutcome outcome;
        head_object_request.SetBucket(bucket);
        head_object_request.SetKey(key);
        outcome = s3_crt_client->HeadObject(head_object_request);
        if(outcome.IsSuccess())
            printf("Object found, size:%lu, etag %s\n", outcome.GetResult().GetContentLength(),  outcome.GetResult().GetETag().c_str());
        object_request.SetBucket(bucket);
        object_request.SetKey(key);
    }

    if(out_file)
    {
        out_fd = open(out_file, O_CREAT | O_WRONLY);
        if(out_fd <= 2)
        {
            printf("Error in opening %s in write mode", out_file);
            return 0;
        }
    }
    int64_t pos = 0;

    buf = new char[part_size];
    read_left = read_size;
    while(read_left != 0)
    {
        ret = 0;
        int64_t retry_count = -1;
        to_read = part_size <= read_left ? part_size : read_left;
        iter ++;
        uint64_t start,end;
        Aws::S3Crt::Model::GetObjectOutcome outcome;
        object_request.SetRange(std::string("bytes=") + std::to_string(pos) + "-" + std::to_string(pos+to_read-1));
        object_request.SetResponseStreamFactory(
                [buf, to_read]()
                {
                std::unique_ptr<Aws::StringStream>
                stream(Aws::New<Aws::StringStream>("test"));
                stream->rdbuf()->pubsetbuf(static_cast<char*>(buf),
                        to_read);

                return stream.release();
                });
        start = get_curr_time_ms();
        outcome = s3_crt_client->GetObject(object_request);
        end = get_curr_time_ms();
        printf("Time taken for GetObject %lums\n",end-start);
        if(outcome.IsSuccess())
        {
            ret = outcome.GetResult().GetContentLength();

            if(ret <= to_read)
            {
                pos += ret;
                //log_info("Testing data %02x %02x", ((uint8_t*)buf)[0], ((uint8_t*)buf)[1]);
            }
            else
            {
                printf("This should never happen, pos_:%lu, requested:%lu, read:%lu\n",
                        pos, to_read, ret);
                break;
            }
        }
        else
        {
            printf("Failed to read, pos_:%lu, requested:%lu, error:%s, error_type:%d, error_code:%d\n",
                    pos, to_read, outcome.GetError().GetMessage().c_str(), outcome.GetError().GetErrorType(), outcome.GetError().GetResponseCode()) ;
            break;
        }
        if(ret == 0)
        {
            printf("Nothing read, read_left:%lubytes, iter:%lu\n", read_left, iter);
            break;
        }
        else if(ret < to_read)
        {
            printf("Read %ldbytes instead of %ldbytes, iter:%lu\n", ret, to_read, iter);
        }
        else
        {
            printf("Read %ld bytes, iter:%lu\n", ret, iter);
        }
        read_left -= ret;

        if(ret > 0 && out_fd > 2)
        {
            if(write(out_fd, buf, ret) != ret)
            {
                printf("Error in write!!! (%lu bytes)\n", ret);
                return 0;
            }
            fdatasync(out_fd);
        }
    }

    if(s3_crt_client)
    {
        Aws::Delete(s3_crt_client);
        s3_crt_client = NULL;
    }
    Aws::ShutdownAPI(options);

    if(buf) delete[] buf;
    if(out_fd > 2) close(out_fd);
    return 0;
}

Possible Solution
No response
Additional Information/Context
No response
AWS CPP SDK version used
1.11.269
Compiler and Version used
gcc (GCC) 4.8.5
Operating System and version
CentOS Linux and version 7

Hi @DmitriyMusatkin, i tried setting lowSpeedLimit to 75MBps which will kill the requests that are below 75MBps and tried running the test.
Still some requests were taking around 1second to read 25MB(bitrate of around  27MBps) from s3.
Aws::S3Crt::ClientConfiguration config;
config.lowSpeedLimit = 78643200;

Hi,
Any update on the above query?

the way low speed limit is configured in sdk is to kill connection if throughput dips under the specified number for a given number of intervals (3 by default and otherwise derived from request timeout) - https://github.com/aws/aws-sdk-cpp/blob/main/generated/src/aws-cpp-sdk-s3-crt/source/S3CrtClient.cpp#L330.
Hard to tell exactly, whats going on and we might need trace level logs to debug it further. Note: CRT already breaks up get requests into part requests based on the configured part size and your code does the same thing, so there might be something weird interaction between the 2 going on.

Hi @DmitriyMusatkin attaching the trace logs for this can you please check this?
Uploading aws_sdk_2024-06-04-11.log…

bad link? it just points to this issue

Sorry @DmitriyMusatkin here it is aws_sdk_2024-06-04-11.log

The log you show is less than 2 secs.
[DEBUG] 2024-06-04 11:36:31.624 task-scheduler [140710120072960] id=0x7ff98c003238: Scheduling gather_statistics task for future execution at time<PHONE_NUMBER>221890
[DEBUG] 2024-06-04 11:36:31.965 task-scheduler [140709998868224] id=0x7ff988003d38: Scheduling gather_statistics task for future execution at time<PHONE_NUMBER>810723
[DEBUG] 2024-06-04 11:36:31.966 task-scheduler [140709998868224] id=0x7ff988026158: Scheduling gather_statistics task for future execution at time<PHONE_NUMBER>379715
...
[DEBUG] 2024-06-04 11:36:32.276 task-scheduler [140710120072960] id=0x7ff98c003238: Running gather_statistics task with <Canceled> status
[DEBUG] 2024-06-04 11:36:32.276 task-scheduler [140709998868224] id=0x7ff988003d38: Running gather_statistics task with <Canceled> status
[DEBUG] 2024-06-04 11:36:32.276 task-scheduler [140709998868224] id=0x7ff988026158: Running gather_statistics task with <Canceled> status

You can see the task to monitor the throughput all canceled within 1 sec, which they are scheduled to run after 1 sec. referring to here
The reason for those task to be canceled is because the request has completed.
[TRACE] 2024-06-04 11:36:32.275 S3MetaRequest [140710030337792] id=0x1837460 Meta request clean up finished.

As @DmitriyMusatkin said, SDK will only kill the connection unless it keeps being slow for a certain time.

Hi @TingDaoK @DmitriyMusatkin,
Below attached the aws trace logs for s3 read of 25 MB 8 times(total of 200MB). Every time read is taking around 1second for each 25MB read.
config.throughputTargetGbps = 1.0;
config.partSize = 10485760;
config.httpRequestTimeoutMs = 100;
config.connectTimeoutMs = 100;
config.requestTimeoutMs = 100;
config.lowSpeedLimit = 78643200;

Can you please explain why it is taking more time than the configured lowspeedlimt and targetthroughput and when will SDK kill the connection and what is the exact threshold to consider it to be slow?

Hi,
Any update on the above query?

We reviewed the logs.
A couple things are coming into play here

cpp sdk configures low speed limit interval to be 3s from logic here https://github.com/aws/aws-sdk-cpp/blob/main/generated/src/aws-cpp-sdk-s3-crt/source/S3CrtClient.cpp#L330
crt is destroying the connection pool when there are no active requests a given endpoint. That means all connections in that pool are released along with associated tracking. in your sample you are firing requests to a bucket sequentially one after the other, so what ends up happening is pool with a bunch of connections is created for a request, request uses that pool, and once request completes, pool is destroyed. Next request results in pool being recreated. This behavior has changed recently (sometime in april 2024 on crt side and cpp sdk probably imported that change couple weeks after)

what seems to happen in your case is:

you kick off request for 25 MB
internally it splits it into 10, 10, 5 MB requests and puts them on separate connections
each of those smaller requests complete under 1s (and some of them potentially under lowSpeedLimit for the duration of 1s, but because it only run for 1s, it never triggered the connection kill)
once the overall request completes, there is no more requests for a given bucket and it kills the connection pool

Hi @DmitriyMusatkin thanks for the detailed analysis.
I have few questions regarding this.

Is the division of 25MB to 10,10,5MB is based on part size that is configured which is 10MB?
To reproduce the connection timeout case, I purposely set the part size to 500MB, the lowSpeedLimit to 150MB, and the read size to 500MB. As expected, we encountered an error: "Http connection channel shut down due to failure to meet throughput minimum (aws-c-http: AWS_ERROR_HTTP_CHANNEL_THROUGHPUT_FAILURE)." However, the issue is that the operation does not exit immediately after 3 seconds as anticipated. Instead, the getObject operation exits after 30 seconds. This delay suggests that some form of retry mechanism might be occurring internally. How can we improve this?

 config.throughputTargetGbps = 1.0;
 config.partSize = 524288000;
 config.lowSpeedLimit = 157286400;

Attaching the trace logs download link for issue 2 LINK can you please check this?

Hi,
Any update on the above query?

s3 crt client does automatic splitting of all puts and gets into part sized chunks (based on the part size configured on the client) and runs all of them in parallel to optimize throughput
lowSpeedLimit works similar curl low speed limit in this case, it kills the connection because its really slow and tries to complete the request over a different different connection. (note: requestTimeoutMs for regular cpp s3 client maps to curls CURLOPT_LOW_SPEED_TIME as well). httpRequestTimeoutMs works by setting overall curl timeout for regular s3 client, but unfortunately as i mentioned earlier is not supported by s3 crt client yet.
By default CRT will configure a number of retries for every request and i guess what you are observing are those retries as connection get killed (should be 5 retries by default with some backoff time between each). You could try to change the retries to make it fail faster, but thats probably not the best practice. Outside of that, im not sure there are other alternatives unfortunatelly, until crt starts supporting request timeouts. Using regular s3 cpp client might be an option to explore as well.

@DmitriyMusatkin : Could you please point me to the place in the code where partSize is being used for parallel requests? So far I couldn't find a place where this value is being used as you described and I'm trying to understand how the parallelization works (e.g. by dynamically spawning more threads or by using async IO on the socket or ...).
(Just by the way: Same for throughputTargetGbps, where I also couldn't find a code path that seems to use this value, so I'm wondering what a good default would be if the line speed is unknown - should it rather be too high or too low in case of doubt or can it be set to a special value like "zero" to be ignored?)


process-local.py + python3 = JSON issues

I can not seem to get process-local.py working with python3. I admit I am new to Python, but it seems to be something to do with the fact the strings are treated as binary eg b'....'  so the JSON encoding fails.
Any ideas here what to do to tweak this code to get it running? Everything else for the training / testing works fine with p3.
Thanks for the great work by the way, had a lot of fun trying it out!

Update: I couldn't figure this out so I have rolled back to Python 2.7 and it is working with 2.7. Quick question, it seems it generates exactly the same image every time I run it on the same input, in the demo it differs each time you run it, how do I enable this method of generation?

This should be fixed in the next release later today.  Apparently making things work in both py 2.7 and 3.6 is a non-trivial thing.

Wonderful thank you so much!

Generating different images was not intentional, and I don't think they are substantially different in my experience.  I suspect that the noise is from the use of dropout at inference time.


Sudden shutdown after +1000 tokens.

If I ask "Please write a summary of all the countries in the world in alphabetical order. Include in each summary the country's population and population density.", it will write about 1000 tokens, then it'll just shut down, and the UI will lose the connection.
I was using the Stable Vicuna model 13B on 16GB of ram.
If you don't experience this issue, then I think this can be closed, as it's probably just my system's limitation.

This is related to the context limit, you can try to extend it.
catai config --edit nano

change the nCtx to something bigger, for example 4096

export const SETTINGS_NODE_LLAMA = {
    enableLogging: false,
    nCtx: 4096,
    nParts: -1,
    seed: 0,
    f16Kv: false,
    logitsAll: false,
    vocabOnly: false,
    useMlock: false,
    embedding: false,
    useMmap: false,
    nGpuLayers: 3,
};

@ido-pluto How do you change the config now, i have the same issue but looks like the config command was removed, how to archive the same?

You can change the config via the settings button in the webui

@ido-pluto i just editted it to this, but it ignore my changes
{
"bind": "...",
"nCtx": 10000,
"n_ctx": 10000
}

There is a configuration guide in the readme, check it out.
The option you are looking for is here:
https://withcatai.github.io/node-llama-cpp/api/type-aliases/LlamaContextOptions

@ido-pluto i just added, but now i get this error
{
"bind": "...",
"contextSize": 10000,
"batchSize": 10000
}

GGML_ASSERT: /home/runner/work/node-llama-cpp/node-llama-cpp/llama/llama.cpp/ggml-backend.c:519: data != NULL && "failed to allocate buffer"

This is too large, to reset the model you can simply delete and reinstall it


emoji: Unicode emoji on hover should show :canonical_shortcode:, not the unicode symbol.

As reported in issue #5427, some systems don't have the fonts necessary for displaying unicode symbols properly and they are rendered as empty blocks. This means we should change the title and the alt text that we put in the markup generated for unicode emoji. Ideally it should be same as the markup generated for canonical shortcode.

@zulipbot label "area: emoji" "enhancement"

@zulipbot claim


Switch to pairwise summation for any summations in the statistics

This is more accurate at little to no cost of speed. We can follow the lead Julia and NumPy, which use the same approach by default. For the running sums, this requires a little bit of care to track our position in the recursive tree, but it is still fundamentally online as long as we know the expected depth of the tree.

Maximum additional memory usage should be one floating-point accumulator per level of the tree. We also need to do some work to ensure that the tree is balanced; this effectively involves scaling down the base case so that each node of the tree involves a summation of the same number of items (give or take one). Note that, for a perfectly balanced tree, we don't have to even keep track of the position, because it's a function of the number of processed leaf nodes.


[Feature]: sphinx spelling

Feature 🚀
Integration of Sphinx spelling check in workflows tests.
Motivation
Currently, a workflow check sphinx compilation is OK. However, this compilation doesn't take into account spelling mistakes. Thus, sphinx spelling could be a good alternative to include in our project in order to prevent future documentation errors.
Solution
I want workflow fails when spelling error happens in documentation.
Checklist

[x] I have checked that there is no similar issue in the repo (required)

:pencil: We should include a list of words to be ignored by spelling checker (for example, "Sinergym")


Add a ksp plugin for generating source code string of Gallery sample

Is it possible to remove function signature, just retain the body?

Is it possible to remove function signature, just retain the body?

That's ok


Scouting Database V2

I moved the rewrite of v1 to a new repository to better accomodate the changes I want to make, once finished the original version will be archived.

Working checklist: (subject to change a bit)

[x] The Blue Alliance API fetches
[x] Formatting of API output
[ ] Single team match info
[ ] Event match info (forward facing)
[ ] Event and team stats (opr, etc.)
[ ] Predictions model
[ ] Exporter Discord bot

The core application is working now, and I am moving on to adding summary statistics and match outcome predictions.

This application has reached the point at which it achieves most of the non-prediction functionalities that I wanted it to, so I am going to merge this PR and predictions will come in a future one.


Update groups.rst

add the three newest pz team members

This PR adds Gloria Fonseca Alvarez, Qianjun (Ellen) Hang, and Tianqing (TQ) Zhang to the Photometric Redshift Team.
Live draft available here.


CocoaPods update

Hi @kylef
please push recent changes to cocoapods. It would be much help in my future tests :)

https://github.com/CocoaPods/Specs/commit/1c522e1a8bd22726f9f2791a2cf565587fcdfd17


Move to uil.core mailing system

While we moved to using uil.core a while ago, we're still using Django's mailing system instead of the one in uil.core.
As our own version supports templated (read: HTML) mails, it might be time to make use of that. But I'd definitely call it low-priority for now. In fact, we might want to wait till version 2.1 is out of alpha, as I'm planning to include a base template for e-mails in that release. (At the moment, all apps using the mail system use their own base template).

So DSC 3 RC.1 introduced an even fancier mailing system that doesn't require 2 templates per mail anymore, it might be time to work on switching over.
However, there are some considerations:
Do we still want 2 templates for every mail?
The obvious downside of having two templates is the work of making sure they are both correct. However, there is also a major downside to to switching to the 1-template-only model, namely links.
The new system automatically generates the missing template if only one is supplied. Thus, if we use plain text templates only, it will generate a HTML version for us. The downside here is that we don't have HTML markup and thus have to paste links plainly (thus, no nice 'click here'). This isn't as nice as we have now.
Going the other route, only having HTML templates gives us the opposite problem. We'd have nice links but the links are stripped from the text, resulting in just plain text with nothing to navigate to. We could solve this by adding a 'if this link doesn't work, copy paste this' line to the mail. But that looks a bit messy imo.
I think I'd prefer to use HTML templates only, and dump the plain links into the footer. But I'd like hear your opionion as well @miggol and @Meesch
What are our mails going to look like?
The new template is quite flexible, with multiple optional parts and styling tools. (Mostly because some apps required a lot but I didn't want all that to be mandatory).
The optional parts are:

a 'sender'
a banner
a footer

Some examples (these are some test emails I made, there are some small formatting changes in the final version)
A mail with all parts:

A mail with only a footer:

A mail with only a sender:

(This one is a tad wider, ignore that, the other 2 examples are using the final width)
I'm in favor of using a sender and a footer, but I know that @miggol has some strong feelings about this :P
There are some other styling options, but I'd rather discuss those after agreeing on this first.

Oh tip:
If y'all want to play around with the new mail template I'd suggest firing up the DSC dev project; the 'custom email editing form' page can be used to play around with it.

I do not understand what causes the links to be stripped from the text in the second option: how does this happen and does that happen frequently?

Our code strips it intentionally. When creating a plain text version automatically from HTML, it strips out all HTML tags and only leaves the text inside. So:
meep! would become meep!.
Otherwise you'd have a lot of HTML, making the plain text version almost unreadable.

Okay, but that seems to be a problem inherent to creating plaintext files. In that case I completely agree with you that the second option adds a better experience compared to what we had before for HTML, and not a worse experience for plaintext.


add marshaler and unmarshaler for otlpgrpc.[]Request and otlpgrpc.[]Response

Description:
This PR adds marshaler and unmarshaler for OTLPgRPC.[]Request and OTLPgRPC.[]Response for logs, metrics, and traces.
Link to tracking Issue:
Issue # 4052
Testing:
Implements test cases for marshaler and unmarshaler for OTLPgRPC.[]Request and OTLPgRPC.[]Response.

Another PR # 4085 has been filed upstream.


Allocator list does not return null if two empty nodes are found

When an allocation is requested, if two empty nodes are detected, allocate and alignedAllocate return null.
This will not work with allocators which always return fresh memory. Such allocators may not hold alive objects (are empty), but don't have available fresh memory.
I also added a test which this PR fixes.

Thanks, I also ran into this bug:
https://issues.dlang.org/show_bug.cgi?id=18853


Write a Python program to convert seconds to hours

Description
Write a Python program to convert seconds to hours
1 hour = 60 minutes = 3600 seconds
Input  : 18000
Output : 5

How to contribute

Save the solution in program/convert-seconds-to-hours.py file
Add convert-seconds-to-hours.py file in convert-seconds-to-hours folder

!assign

!assign

Hey @Emilia-mazari, this issue is already assigned to @Robert-Capra !!!
Please choose another issue.
Thanks for your interest in contributing to this project.


Publishing on Gitlab registry with uv publish needs extended access rights

Hello,
I am very new to uv but I find the project very interesting. Coming from the system-level programming world (C/C++ and Cmake on massive mono-repos with hundreds of targets and tons of automation tools), uv is the first tool, amongst those I encountered, which can do project management in the Python world the way I like it: clean, explicit and simple 👍
I have converted one simple Python project to uv and I have one issue regarding publishing.
My project is hosted on a private Gitlab instance, and this project contains a Python package which is published on the project's package registry on Gitlab.
Before uv, I was building my wheel using setuptools and pushing it using twine.
The build and publication was done by a CI job, and all twine needs to push on the project package registry on Gitlab is the CI_JOB_TOKEN provided by Gitlab.
uv publish fails to do so using the same token. After some experiments, it seems that uv publish needs a token with api scope to work, which means I have to create one and put in my CI/CD variables, and which is not the best in terms of security.
In the end, I kept twine for the publishing at the end of my job for security reasons instead of using uv publish.
Two questions:

Is there something I did wrong or did not understand?
If not, is there a reason for uv publish on Gitlab's registry to need a token with a wider scope than twine?

Thank you for your help, and thanks for this very good project 🙏

You are using CI_JOB_TOKEN as the access token, and twine can use CI_JOB_TOKEN, right?
Could you please provide more specific details? Such as the version of uv you're using, and what environment variables you've set for both twine and uv publish, including the values assigned to these variables. If any of the values are confidential, you can simply label them as "confidential name.

Found the issue, the --token option sets the username as __token__.
In Gitlab, pushing to pypi registry using CI_JOB_TOKEN requires to set the username to gitlab-ci-token, but it also works with the username __token__ if the token has an api scope, which led my to false interpretation of what was going on.
This script works just fine 👌
uv build
uv publish --publish-url $CI_SERVER_URL/api/v4/projects/$CI_PROJECT_ID/packages/pypi --username "gitlab-ci-token" --password $CI_JOB_TOKEN dist/*.whl

Some documentation about this in uv documentation may be interesting, but this would imply following any update on this on Gitlab documentation to update the uv documentation accordingly.
Sorry for the false alarm 🙏

That's indeed confusing! We unfortunately haven't fully figured out what to do with tokens yet (https://discuss.python.org/t/pep-694-upload-2-0-api-for-python-package-repositories/16879/64, https://github.com/astral-sh/uv/issues/9195#issuecomment-2483840918)


fix: update links from older versions of guide with previous repo URLs

Noticed some links in the contributing guide were pointing to old names for this repo.

lgtm! thanks @ericrallen .


External stylesheets is not loaded in the editor

I tried:
var editor = new wysihtml5.Editor('textEditor', {
		    toolbar: 'toolbar',
		    stylesheets: "http://www.myurl.com/test.css",
		    parserRules:  wysihtml5ParserRules
});

When running the editor the stylsheet test.css is not loaded.

Are you using textarea/iframe mode (the texteditor element is textarea) or the div/contenteditable mode? In the latter case i think the stylesheet loading like this will not work. It makes less sense too i guess as it can be added to page header anyway.

I tested with both textarea and div and also with the option: contentEditableMode false and true. It did not work.
The only way I get it to work is using textarea and iFrame and this workaround:
		editor.on("load", function() {

			// workarount for injecting stylesheet in editor
			// https://github.com/xing/wysihtml5/issues/262
			if (!editor.isCompatible()) {
		      return;
		  	}
			var doc =  editor.composer.sandbox.getDocument();
			var link = doc.createElement("link");
			link.href = "${assetPath(src:'preview.css', absolute:true)}";
			link.rel = "stylesheet";
			doc.querySelector("head").appendChild(link);

	    });

Is this a bug or do you have any better solution? Thanks for help!

I encountered a similar problem - I am using the editor in a Polymer component, and CSS rules defined in the component's style section were not applied to the editor's content when using the Shady DOM polyfill, but they were applied when using native Shadow DOM (currently available only in Chrome and Opera). I overcame this by adding the same CSS rules to the page's style section, and then they were applied to the editor when using Shady DOM. However I still needed to keep the rules also in the component's style section because with native Shadow DOM CSS rules defined outside the component scope would do not apply to anything in it.

Hi @GabiAxel , did you manage to get it working with Polymer?
I will try that soon and was looking for some hints / help
Thanks, Fausto

@Fausto-theXS I didn't pursued this since I posted the comment. What I can say after trying to integrate Polymer with a lot of other JS libraries, is that practically every library that handles the DOM and was not built with Shadow DOM in mind would not work well with Shadow DOM, so even if you run on Chrome/Opera you may have to stick to Shady DOM mode (which is the default). So if I were to continue with the state I described in my previous comment, I would just keep the default and put the styles I want to apply to third party non-Polymer components outside of my Polymer components (you can write these

Thanks @GabiAxel for your prompt reply
Let's see what I can do on this path or if I'd settle down for a less featured alternative.


Fix Send and Sync implementations for Channel

Fix Send and Sync implementations for Channel
Channel should not be usable to use with non Send/Sync messages types
because it allows transfering types across threads
This patch also relies on the auto trait implementations for Requester/Responder.
This is technically a breaking change, but I don't think it should be a major release.
This is unlikely to affect anyone, and if it does, it's probably uncovering unsoundness

Yeah, AFAIK fixing soundness bugs does not require a breaking change release.

I think Send should be enough, as we're sending the full thing, no?

I don't think Sync is required indeed. But I prefer being cautious :sweat_smile:


Added Thomas Algorithm in Scratch

Yay Scratch!
I've set the width of the svg to 1000, but I think it resizes down automatically if the screen size is smaller. Pretty neat.

Yay! I'm super happy :D
And yes, Thomas algorithm is easy to implement cleanly when I don't have access to crazy abstractions :p


Version 0.7.0

Chore

Update pypublish pipeline
Remove not usefull workspace system

Codecov Report
Attention: Patch coverage is 38.33333% with 74 lines in your changes are missing coverage. Please review.

Project coverage is 51.11%. Comparing base (50d1f76) to head (d82e2df).
Report is 46 commits behind head on main.

Files
Patch %
Lines

src/name2data.rs
11.62%
38 Missing :warning:

src/main.rs
0.00%
22 Missing :warning:

src/lib.rs
80.00%
9 Missing :warning:

src/record2chunk.rs
50.00%
5 Missing :warning:

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@             Coverage Diff             @@
##             main      #12       +/-   ##
===========================================
- Coverage   80.30%   51.11%   -29.19%
===========================================
  Files           7        7
  Lines         396      626      +230
===========================================
+ Hits          318      320        +2
- Misses         78      306      +228

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Plugin not importing all games in my Humble library

Firstly, huge thanks for doing this and supporting Playnight. Amongst other benefits, these tools are invaluable in preventing us buying the same game multiple times.
I do have an issue with this plugin where it will not import all my games in my Humble library into Playnight - only 2 out of 28 were listed in Playnight. Is there anything I need to do to get the rest imported?

If they are games that come as Steam (or other store) key, then the plugin will ignore those, unless you disable this in plugin's options.

Thanks Josef, I didn't think of that. That's true, we don't want the same game counted twice because we purchased it on one platform (Humble) for use on another (Steam). I'll need to look at my other Playnight importer plugins and make sure they correctly only count once for purchases meant for a different store. I'm sure they all do.


Provide a content model to get started quickly

Heyooo, thank you for putting this starter together. I wonder If you'd be up for including an example content model inside of this project (similar to how it is done in other examples).
Having a content model available would allow people to install and set up Contentful with a single command.
What do you think? :)

That's really cool, I didn't know you could do that! I will add it to the list.

Nice!!! If you did, let me know, i'd love to give it a spin and maybe share it with the Contentful community (I work for Contentful 🙈). :)

I've added that in, thanks for the suggestion.


Allow the "is" operator in the action scope

Category
Cedar language or syntax features/changes
Describe the feature you'd like to request
Submitting this on behalf of a customer who asked: "How would I express that a policy applies to any action in a particular namespace?"
Thought the "is" operator would work for this.
permit(
  principal,
  action is My::Namespace::Action,
  resource
)
when {...};

But, it's prohibited.
cedar validate -s schema/admission.cedarschema -p schema/admission-policy.cedar
  × failed to parse policy set
  ╰─▶ `is` cannot appear in the action scope
    ╭─[10:5]
  9 │     principal,
 10 │     action is admission::Action,
    ·     ───────────────────────────
 11 │     resource
    ╰────
  help: try moving `action is ..` into a `when` condition

Research indicates this is because RFC 5 specifies that it is not allowed.  (So the next question is, why was that explicitly written in RFC 5.)
Here's the discussion from the original RFC: https://github.com/cedar-policy/rfcs/pull/5#discussion_r1235295202
It is related to a discussion a while back about whether it's possible to have more than one action type.  And indeed it is because of namespaces. Given that, it seems like we should allow is everywhere in Rust.  (Already done in Lean: https://github.com/cedar-policy/cedar-spec/blob/884737200b12da3a22e1763a5aed9e09d350a766/cedar-lean/Cedar/Spec/Policy.lean#L42)
Re-reading the discussion I don't think there's any reason we couldn't add action is to the scope. ISTM that we took this option precisely because we could relax it later if needed.
Describe alternatives you've considered
See discussion in original RFC: https://github.com/cedar-policy/rfcs/pull/5#discussion_r1235295202
Additional context
No response
Is this something that you'd be interested in working on?

[ ] 👋 I may be able to implement this feature request
[ ] ⚠ This feature might incur a breaking change

We currently restrict the action scope to only contain comparisons against an Action type, so permit(principal, action == Foo::"view", resource); is a parse error. If we do this, we should be consistent with is so permit(principal, action is Foo, resource) would also be an error. permit(principal, action is admission::Action, resource) would be fine.


Add MacOS X support on Travis-CI

Due to multiple sed issues between BSD and GNU add a MacOS X to the build matrix.
See https://docs.travis-ci.com/user/multi-os/

Done in https://github.com/zsh-users/antigen/pull/365


Intercept AND invalidate request

Hello everyone ! I am currently trying to intercept requests sent to GA (which I am able to do) and stop the request so no data is sent to GA.
I tried the mocking section of the documentation, which also works, but even if I mock the request and the response, data is still sent to GA.
I tried the hook section of the documentation (example below) in which I alter the request sent to GA by altering its URL from https://www.google-analytics.com/collect to a non-google URL.
import {
RequestHook,
RequestMock
} from 'testcafe';
export class CybermetrieRequestHook extends RequestHook { // RequestMock
constructor(requestFilterRules, responseEventConfigureOpts) {
super(requestFilterRules, responseEventConfigureOpts);
}
async onRequest(event) {
event.requestOptions.url = "https://uselessURL.com";
}
async onResponse(event) {
// ...
}
}
Throwing Errors in the MOCK or HOOK methods still do not allow me to block, stop or invalidate the request.
Can somebody help me ^

Hi @Raph-Capitale

I tried the mocking section of the documentation, which also works, but even if I mock the request and the response, data is still sent to GA.

You don't need to write a custom hook for it. Inspect the Network in DevTools, determine all of the Google Analytics requests (requests can be sent via several URLs) and mock them using the built-in 'RequestMock' class.
See this example for more information.

Thanks Milher, but that way I still see the data coming out in GA ... I had already tried that solution without success ...

Here is my setup :


Remove useless if statement

Description
A small refactoring

@miki131 Thanks for your PR. We will merge it shortly :)


Crashlytics initialize Issue

Please check below image

I set config file as shown in image while I build application and run in mobile got error like below image.

The sdk needs updating due to the switch from Fabric to Firebase. I've got this on my list of things to do but might be a while before i get to it. You can make the updates on your own instance

@vicky0802
Currently, our app depends on Fabric’s SDK as well (which has been) deprecated recently to initialize Firebase - Crashlytics which is why this exception is being thrown.
We’ll be updating our Firebase SDK in the next few weeks which solves this problem. Or if you want, you can do the update and push an upstream PR. Happy to review an OSPR doing this!

The issue seems to be resolved now. ✨


spec fix

Little fix on specs

Coverage remained the same at 98.039% when pulling d39dcb4c9a20dc3780c6fe0673acd8f03a4d6ac0 on alex-strizhakov:master into 9db561443da9d52f53a576b302fe7c977fc20a87 on elixytics:master.

❤ 💚 💙 💛 💜


processRoutes should not create aliases for routes if amp: false

In my app I'm using amp:false on nuxt config and amp: hybrid on just a single page.
My bundle file is filled with aliases generated for each route, even if AMP is not available for that one; I'd expect to have the route alias only on that single route

Unfortunately, there isn't any performant way to detect which page uses amp and which is not. Right now module creates an alias for all routes in the project.  That's because there isn't any API in Nuxt to detect pages options before routes generation

I understand it. What about an option to define a static array of routes, in case you don't want dynamic generation?

Sounds good to me. 👍👍


Fix Int precision issue part 3

Closes: #262 ;

I think it would be better to modify the Title.
Use StringNumber for integers beyond i32
example - https://github.com/aicers/review-web/pull/265

Could you rebase this please?


Longhorn volume replicas reports healthy state after instance manager deleted and volume detached

Steps to reproduce:

Create a longhorn volume.
Attach volume to node, and wait volume to be in Healthy state.
In Volume Details page, get instance Instance Manager name
Using kubectl delete pods INSTANCE_MANAGER_POD_NAME -n longhorn-system
Longhorn Volume gets detached, but replicas states reports Healthy.

@meldafrawi Can you reproduce this issue now?

Can't be reproduced.
Closing the issue.


Cli: log client requests/responses at DEBUG level

Helps a lot when figuring out what a command is actually doing:
DEBUG=1 bundle exec bin/kontena stack registry remove --force test/redis
D, [2016-11-29T12:20:47.655272 #6982] DEBUG -- CLIENT: DELETE /stack/test/redis: {} -> 204 No Content: ""

DEBUG=1 kontena stack registry remove --force test/redis:1.0
D, [2016-11-29T12:20:51.917360 #6989] DEBUG -- CLIENT: DELETE /stack/test/redis/version/1.0: {} -> 204 No Content: ""

There's already EXCON_DEBUG=true but it's quite noisy. Maybe it has some simple interface to switch the debug-outputter.

Close in favor of #1436


GroupBy DateTime month not working as expected

Many thanks for the great framework.
Is the following a desired behavior or am I misunderstanding the usage? When I group the table rows by the month value of their date column and compute a sum over other columns I encounter the following problem:
If the date falls on the first or second of a month, it is grouped with the entries from the previous month.
I encountered the same problem using filter: items.date.month.equals(month)). When using items.date.isBetweenValues(start, end) the problem does not occur (start== first of month 00:00:00.000, end == last of month 23:59:99.999).
I used a Pixel 6 with API34 as an emulator for the app and the following minimal example. Drift version 2.15.0.
Expected result by minimal example: {1: 100.0, 2: 200.0}
Current result by minimal example: {1: 200.0, 2: 100.0}
import 'dart:io';
import 'package:flutter/widgets.dart' hide Table;
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as p;

part 'minimal_example_bug.g.dart';

@UseRowClass(Item)
class Items extends Table {
  IntColumn get id => integer().autoIncrement()();
  RealColumn get amount => real()();
  DateTimeColumn get date => dateTime()();
}

class Item {
  final int id;
  final double amount;
  final DateTime date;

  Item({
    required this.id,
    required this.amount,
    required this.date,
  });
}

@DriftDatabase(tables: [Items])
class Example extends _$Example {
  Example._internal() : super(_openConnection());

  //Namedconstructor for creating in-memory database for testing queries
  Example.forTesting(super.e);

  static Example _instance = Example._internal();

  factory Example() {
    return _instance;
  }

  @override
  int get schemaVersion => 1;

  Future<int> addItem(
    double amount,
    DateTime date,
  ) async {
    final itemToAdd = ItemsCompanion(
      amount: Value(amount),
      date: Value(date),
    );
    return into(items).insert(mode: InsertMode.insertOrAbort, itemToAdd);
  }

  Future<Map<int, double>> getMonthlyBalance(int year) async {
    Map<int, double> monthlyBalance = {};
    final balance = items.amount.sum(filter: items.date.year.equals(year));
    final query = selectOnly(items);
    query
      ..addColumns([items.date.month, balance])
      ..groupBy([items.date.month]);
    final result = await query.get();
    for (var row in result) {
      monthlyBalance[row.read<int>(items.date.month)!] =
          row.read<double>(balance) ?? 0.0;
    }
    return monthlyBalance;
  }
}

LazyDatabase _openConnection() {
  return LazyDatabase(() async {
    final dbFolder = await getApplicationDocumentsDirectory();
    final file = File(p.join(dbFolder.path, 'example.sqlite'));
    return NativeDatabase.createInBackground(file);
  });
}

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final db = Example();

  await db.addItem(100.0, DateTime(2024, 1, 8));
  await db.addItem(100.0, DateTime(2024, 2, 1));
  await db.addItem(100.0, DateTime(2024, 2, 3));

  final balance = await db.getMonthlyBalance(2024);
  print(balance);
}

Thanks for the helpful report! I think this is a timezone issue (the problem doesn't happen with DateTime.utc being used when inserting), but I think the local offsets should cancel out...

Ok, figured it out! The problem is indeed related to timezones. I'll use mine (Europe/Berlin) as an example to explain. By default, drift stores date time values as unix timestamps. In my timezone, 2024-02-01 had a +1 hour offset from UTC. While the timestamp is thus<PHONE_NUMBER> (which, for this purpose, we can consider to uniquely represent an instant in time), assigning a date or time to that timestamp requires the context of a timezone.
Unfortunately, .month interprets the timestamp as UTC, as the documentation also mentions. Due to the one hour offset,<PHONE_NUMBER> in UTC however is 2024-01-31 23:00:00 (DateTimes are always times, so not specifying any time would be midnight). So moth "correctly" identifies the date as being in January.
The docs suggest this rather clumsy workaround, which would give you the correct results:
final month = items.date.modify(DateTimeModifier.localTime()).month;

A better option is to store date time values as text, because that will always include the timezone. For values stored as text, month behaves correctly out of the box.
Changing the option unfortunately requires a schema change and a migration since existing values need to be transformed, but the documentation section I've linked explains how to do that.
I'll close this as it is (unfortunately) working as intended. We should have been storing date times as text to begin with, but can't change the default without breaking existing databases.


Refact: Notifications library and notify functions

Resolves https://github.com/opencollective/opencollective/issues/5711
Sorry about the diff, I just broke down the whole notifications lib.

Since this is a big refactor, I'll be waiting until Wednesday to merge this since tomorrow I'll probably be off most of the day.

Rebased and fixed conflicts.


Run travis with ghc-8.0.1

should-not-typecheck doesn't seem to work with ghc-8.0.1. And I don't see any solution to fix it.

@phadej The code should check for TypeError rather than ErrorCall for ghc-8.0.1, as deferred type errors now have their own dedicated exception type.

Awesome, thanks. I'll take a look when I get home tonight (alternately a PR would be great :p).

@kosmikus @CRogers If I change ErrorCall to TypeError the issue doesn't go away. Seems that should-not-typecheck block cannot catch the exception anymore:
parallels@ubuntu:~/mess/should-not-typecheck$ git diff
diff --git a/src/Test/ShouldNotTypecheck.hs b/src/Test/ShouldNotTypecheck.hs
index fd85ec0..b0a54b4 100644
--- a/src/Test/ShouldNotTypecheck.hs
+++ b/src/Test/ShouldNotTypecheck.hs
@@ -1,7 +1,7 @@
 module Test.ShouldNotTypecheck (shouldNotTypecheck) where

 import Control.DeepSeq (force, NFData)
-import Control.Exception (evaluate, try, throwIO, ErrorCall(..))
+import Control.Exception (evaluate, try, throwIO, ErrorCall(..), TypeError(..))
 import Data.List (isSuffixOf)
 import Test.HUnit.Lang (Assertion, assertFailure)

@@ -24,7 +24,7 @@ shouldNotTypecheck a = do
   result <- try (evaluate $ force a)
   case result of
     Right _ -> assertFailure "Expected expression to not compile but it did compile"
-    Left (ErrorCall msg) -> case isSuffixOf "(deferred type error)" msg of
+    Left (TypeError msg) -> case isSuffixOf "(deferred type error)" msg of
       True -> case isSubsequenceOf "No instance for" msg && isSubsequenceOf "NFData" msg of
         True -> assertFailure $ "Make sure the expression has an NFData instance! See docs at https://github.com/CRogers/should-not-typecheck#nfdata-a-constraint. Full
         False -> return ()
parallels@ubuntu:~/mess/should-not-typecheck$ cabal test
Preprocessing library should-not-typecheck-2.0.1...
Preprocessing test suite 'tests' for should-not-typecheck-2.0.1...
Running 1 test suites...
Test suite tests: RUNNING...
tests: test/ShouldNotTypecheckSpec.hs:82:32: error:
    • Couldn't match type ‘Bool’ with ‘Int’
      Expected type: Expr Int
        Actual type: Expr Bool
    • In the first argument of ‘Add’, namely ‘(BoolVal True)’
      In the first argument of ‘shouldNotTypecheck’, namely
        ‘(Add (BoolVal True) (IntVal 4))’
      In a stmt of a 'do' block:
        shouldNotTypecheck (Add (BoolVal True) (IntVal 4))
(deferred type error)
Test suite tests: FAIL
Test suite logged to: dist/test/should-not-typecheck-2.0.1-tests.log
0 of 1 test suites (0 of 1 test cases) passed.

I also tried to modify shouldNotTypecheck to
shouldNotTypecheck _ = return ()

and the TypeError is still thrown, I'm not sure what happens, but seems like exception is thrown in outer scope already. And I'm not sure whether that is a GHC bug?
I tried to come with smaller example in ghci
GHC 7.10.3
Prelude> let foo _ = return () >> putStrLn "OK"
Prelude> let x = foo (True :: Int)

<interactive>:16:14: Warning:
    Couldn't match expected type ‘Int’ with actual type ‘Bool’
    In the first argument of ‘foo’, namely ‘(True :: Int)’
    In the expression: foo (True :: Int)
Prelude> x
OK

GHC 8.0.1
parallels@ubuntu:~/mess$ ghci
GHCi, version <IP_ADDRESS>60316: http://www.haskell.org/ghc/  :? for help
Prelude> let foo _ = return () >> putStrLn "OK"
Prelude> let x = foo (True :: Int)

<interactive>:2:14: error:
    • Couldn't match expected type ‘Int’ with actual type ‘Bool’
    • In the first argument of ‘foo’, namely ‘(True :: Int)’
      In the expression: foo (True :: Int)
      In an equation for ‘x’: x = foo (True :: Int)

N.B. an error, not a warning as with 7.10.3!

This looks like a manifestation of GHC Ticket #11197, FWIW.

I see that milestone is marked for 8.0.2, @kosmikus should we disable should-not-typecheck tests for GHC-8.0.1?
@CRogers, I'd also make revisions to should-not-typecheck, so it's not buildable with ghc-8.0.1 (restrict base). And I guess we don't have other solution than wait for 8.0.2?

@phadej I'm not 100% convinced this cannot be worked around in 8.0.1 somehow. I had made some local tests and did get the expected results (but with code not completely equivalent to the stuff in should-not-typecheck). But yes, if there's no easy way, I'd go for disabling the tests temporarily, in the hope this will ultimately work again.

I have a workaround.
Yes, this is GHC #11197. The problem is that GHC 8 is not very clever when figuring out where, precisely, to put the deferred type error in the compiled program (that is, how deep evaluation needs to get before triggering the runtime error), and it often puts it way too early. The way to fix this is to tell GHC precisely where to put it, which will be at the largest enclosing contexts that mucks with constraints. To get GHC to make the right context, you just need a higher-rank type. This worked for me:
shouldNotTypecheck :: NFData a => (() ~ () => a) -> Assertion

Now, GHC knows to put the deferred type error in the argument to shouldNotTypecheck, not on the line containing the call to shouldNotTypecheck. Running the testsuite showed failures, but I think @kosmikus addressed that above. It was a big improvement from the original state, where the testsuite didn't run at all.
It's terribly ugly that this type has to leak out to users reading Haddock, but it makes this package usable on GHC 8.

Thanks @goldfirere, it seems to work!

Yes, thanks @goldfirere.

Great conversation! It's unfortunate to have to change the API for this workaround, I wonder if keeping shouldNotTypecheck :: NFData a => a -> Assertion but having it simply call to another package only function shouldNotTypecheckWithWorkaround :: NFData a => (() ~ () => a) -> Assertion would work. I need to set up the 8.0.1 rc3 before I can test this...

Nope, that doesn't work. Great sadness. I see the CPP will not change the API for people not <8.0.0, so I'm happy to merge this in and do a release.

Released: https://hackage.haskell.org/package/should-not-typecheck-2.1.0

Hackage trustee nitpick:
The major bump was really unnecessary, there were not anything breaking change, actually no new functionality at all, so it could have been 2.0.2 or <IP_ADDRESS>.

All packages on Hackage should use PVP

@phadej The way the PVP is phrased it doesn't ever forbid you to make a major version bump. It gives conditions under which you must bump the major or minor version counter and when they may stay the same. (FWIW, I still agree with you. It seems it was unnecessary here. But if the PVP is supposed to be interpreted in the way that unnecessary version bumps are not ok, then it has to be changed.)

Oh, I was not aware of this PVP, I was going by SemVer http://semver.org,
so this was not a major version bump in my mind.
On Tue, 19 Apr 2016, 10:20 Andres Löh<EMAIL_ADDRESS>wrote:

@phadej https://github.com/phadej The way the PVP is phrased it doesn't
ever forbid you to make a major version bump. It gives conditions under
which you must bump the major or minor version counter and when they may
stay the same. (FWIW, I still agree with you. It seems it was unnecessary
here. But if the PVP is supposed to be interpreted in the way that
unnecessary version bumps are not ok, then it has to be changed.)
—
You are receiving this because you modified the open/close state.
Reply to this email directly or view it on GitHub
https://github.com/CRogers/should-not-typecheck/pull/6#issuecomment-211821158

It's on the Hackage mainpage.

Guidelines for Hackage Packages:

All packages should follow the Package Versioning Policy (PVP).
Packages cannot be deleted, so you should consider uploading new versions packages as a package candidate and testing before publishing it to the main index.

But don't worry, nothing bad happened. It's only a bit inconvenient for other people, who expect package version to follow PVP. Luckily it's trivial to transfer from SemVer to PVP. And if you make new packages, please use PVP right from the beginning.

@phadej But as I said, there was no violation of PVP here. The way you interpret it does not match the way it is phrased. If you want to change that, then you should change the PVP.

@kosmikus, sorry, I didn't meant that there was a PVP violation. I was surprised about the major bump, and suspected (right!) that PVP isn't known.


Unable to open file from internal storage

I saved a file to my internal storage with this path: file = getFileStreamPath(fileName);
I am attempting to access the file with this line of code but it keeps returning null each time:
try{
File file = getFileStreamPath(fileName);
folioReader.openBook(file.getAbsoluthPath);
Log.e("file: ", "file: " + filePath);
} catch (Exception e){
e.printStackTrace();
}
}

Which is your getFileStreamPath? Can you describe more clearly

I finally resolved my issue. I discovered from my device file explorer that my files were saved as .txt instead of .epub extension. After converting them, it worked smoothly with this code:
var path: String = context.getFilesDir().getAbsolutePath()
Thanks for your effort!


Alert for user that he should stay online and active when send/receive Beam

Description
In mobile wallets, once the application goes to the background or in screen off - the process goes sleep. In this case transactions cannot handled
Awake once in 30 min and pop-up messages is not a guarantee, since  after some time in screen off also the internet disconnects
Sasha suggests to design user alert in the wallet that ask to stay online

Duplicate of that task https://github.com/BeamMW/ios-wallet/issues/103


resetScript fixup

resetScript command should have a better name, like bee reset (combine into one command) and should also have some sort of confirmation like "set line to 0" or smthn

[User]: ^bee reset
[Adman]: Succesfully reset the bee-script to 0!```


Update test deployment manifest for workload cluster

What this PR does / why we need it:
Update test deployment manifest for workload cluster
Which issue this PR fixes (optional, in fixes #<issue number>(, fixes #<issue_number>, ...) format, will close that issue when PR gets merged):
Updating test deployment manifest for workload cluster. So that Kubemark nodes can talk to the docker socket on the host instance.
Special notes for your reviewer:
Release notes:

NONE

looks like go-linter PR check is failing, but for unrelated to this PR reason, should be fixed in a separate PR.
/approve

looks like go-linter PR check is failing, but for unrelated to this PR reason, should be fixed in a separate PR.
/approve

i'm going to manually merge this, then we can fix the linter issue

created https://github.com/kubernetes-sigs/cluster-api-provider-kubemark/pull/42 to address the linting issues


COMP: Set the minimum required CMake version to 3.10.2.

As agreed in:
https://discourse.itk.org/t/cmake-update/870/
Set the cmake_minimum_required to version 3.10.2.

@jhlegarreta Thank you for working on getting up to date.

@thewtex CMake update in CI infrastructure


weave launch not functioning on the latest docker for mac

The latest beta is throwing an error on weave launch:
unable to create network: API error (500): invalid ipam driver: "weavemesh"

Just for the record, are we talking about 1.12.0-rc2-beta16?

I can confirm this is the case on Docker for Mac version 1.12.0-rc2-beta16. @rade have we tested Docker plugin on 1.12.0-rc2 in general? Docker for Mac ships vanilla builds, as far as I am aware.

@the-destro is this in connection with https://github.com/kubernetes/kubernetes-anywhere/issues/138 that you have reported earlier?

have we tested Docker plugin on 1.12.0-rc2 in general?

We've run our entire test suite against 1.12.0-rc1, iirc.

One thing I just realised is that I was testing this using Weave Net 1.5.2. Having tested with latest 1.6.0, I can confirm that this issue only occurs on Docker for Mac 1.12.0-rc2-beta16 and with Weave Net 1.5.2. I doesn't occur with Weave 1.5.2 on Boot2Docker 1.12.0-rc2. All works well with Docker for Mac and Weave Net 1.6.0.

@the-destro please upgrade to Weave Net 1.6.0.

I'm having the same issue running on Linux (Centos 7):
$ weave launch
unable to create network: API error (500): invalid ipam driver: "weavemesh"

$ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS               NAMES
1d06ff78f8de        weaveworks/plugin:1.6.0      "/home/weave/plugin"     11 seconds ago      Up 8 seconds                            weaveplugin
5bc96b29e3eb        weaveworks/weaveexec:1.6.0   "/home/weave/weavepro"   12 seconds ago      Up 10 seconds                           weaveproxy
adb78fc332cc        weaveworks/weave:1.6.0       "/home/weave/weaver -"   13 seconds ago      Up 12 seconds                           weave
$ weave version
weave script 1.6.0
weave router 1.6.0
weave proxy  1.6.0
weave plugin 1.6.0
$ docker version
Client:
 Version:      1.12.0-rc2
 API version:  1.24
 Go version:   go1.6.2
 Git commit:   906eacd
 Built:
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.0-rc2
 API version:  1.24
 Go version:   go1.6.2
 Git commit:   906eacd
 Built:
 OS/Arch:      linux/amd64
$ uname -a
Linux localhost.localdomain 3.10.0-327.18.2.el7.x86_64 #1 SMP Thu May 12 11:03:55 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

I wonder what may be in common between Moby (the Alpine derivative used in
Docker for Mac) and CentOS?
On Fri, 24 Jun 2016, 09:44 Carlos León<EMAIL_ADDRESS>wrote:

I'm having the same issue running on Linux (Centos 7):
$ weave launch
unable to create network: API error (500): invalid ipam driver: "weavemesh"
$ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS               NAMES
1d06ff78f8de        weaveworks/plugin:1.6.0      "/home/weave/plugin"     11 seconds ago      Up 8 seconds                            weaveplugin
5bc96b29e3eb        weaveworks/weaveexec:1.6.0   "/home/weave/weavepro"   12 seconds ago      Up 10 seconds                           weaveproxy
adb78fc332cc        weaveworks/weave:1.6.0       "/home/weave/weaver -"   13 seconds ago      Up 12 seconds                           weave
$ weave version
weave script 1.6.0
weave router 1.6.0
weave proxy  1.6.0
weave plugin 1.6.0
$ docker version
Client:
Version:      1.12.0-rc2
API version:  1.24
Go version:   go1.6.2
Git commit:   906eacd
Built:
OS/Arch:      linux/amd64
Server:
Version:      1.12.0-rc2
API version:  1.24
Go version:   go1.6.2
Git commit:   906eacd
Built:
OS/Arch:      linux/amd64
$ uname -a
Linux localhost.localdomain 3.10.0-327.18.2.el7.x86_64 #1 SMP Thu May 12 11:03:55 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/weaveworks/weave/issues/2391#issuecomment-228290916,
or mute the thread
https://github.com/notifications/unsubscribe/AAPWS5IHni4pTarfpkw2QguXXgzTy4XCks5qO5j9gaJpZM4I7JPe
.

@mongrelion currently I'm not able to reproduce this with either versions (1.5.2 and 1.6.0). Can you reproduce it consistently?

@mongrelion if you can reproduce it, please use weave launch --log-level=debug and provide the output of docker logs weaveplugin.

@errordeveloper sorry, I can't seem to reproduce it anymore. I'm currently trying it all out in a Vagrant machine which I created last night and ran into that issue.
I just recreated the machine (Docker & Weave installation steps are automated) and can't seem to reproduce the error anymore. I'm running into other issues but those are off topic for this thread.
Sorry about the fuzz.

@mongrelion ok, so I am suspecting it could be a race condition in Docker plugins API. Could you share the Vagrantfile, and I'll try to run it in a loop for a while?

@errordeveloper here you go.
Heads up: you'll need Ansible installed. Ping me on Slack if you need help with that.

I ran the following in that directory:
while true; do (make destroy ; make up) && vagrant ssh -c "weave launch && weave status" ; [ "$?" -ne 0 ] && break || continue ; do

The error didn't come up in 26 iterations.

I am seeing this error after docker swarm init. See #2403.
@the-destro @mongrelion did you perhaps run docker swarm init? What does docker network ls return?

@rade yes I did. I have tried after leaving the swarm as well and got the same error.
unable to create network: API error (500): invalid ipam driver: "weavemesh" ```
```NETWORK ID          NAME                DRIVER              SCOPE
50c83b482c45        bridge              bridge              local
c9991d2ca8c4        docker_gwbridge     bridge              local
bbf39d6c4934        host                host                local
32g4baxfxlyi        ingress             overlay             swarm
22ed0bfac9cf        isolated_nw         bridge              local
28d734abc0f8        none                null                local```

$ docker logs weaveplugin
INFO: 2016/06/27 23:05:36.615258 Weave plugin 1.6.0 Command line options: [--log-level=debug]
INFO: 2016/06/27 23:05:36.617946 Docker API on unix:///var/run/docker.sock: &[Os=linux KernelVersion=4.4.13-moby BuildTime=2016-06-17T22:09:20.440355664+00:00 ApiVersion=1.24 GitCommit=a7119de GoVersion=go1.6.2 Version=1.12.0-rc2 Arch=amd64 Experimental=true]
INFO: 2016/06/27 23:05:36.618103 Listening on /run/docker/plugins/weave.sock for global scope
INFO: 2016/06/27 23:05:36.618179 Listening on /run/docker/plugins/weavemesh.sock for local scope```
weaveworks/plugin                    1.6.0               af9b3731ed7a        7 days ago          87.06 MB
weaveworks/weaveexec                 1.6.0               0d4dc9773eb8        7 days ago          74.7 MB
weaveworks/weave                     1.6.0               005ff267f724        7 days ago          28.19 MB
weaveworks/weavedb                   latest              9de1af088a49        2 weeks ago         244 B
weaveworks/kubernetes-anywhere       toolbox             572c95debbdb        6 weeks ago         448 MB
weaveworks/kubernetes-anywhere       toolbox-v1.2        572c95debbdb        6 weeks ago         448 MB
weaveworks/kubernetes-anywhere       toolbox-v1.2.4      572c95debbdb        6 weeks ago         448 MB```

yes I did.

I which case the problem you are seeing is very likely the same as #2403.

I have tried after leaving the swarm as well and got the same error.

See https://github.com/weaveworks/weave/issues/2403#issuecomment-228746464
@mongrelion were you too running docker swarm init?

@rade I think I might have, yes, as I was doing tests to integrate the demo app with SwarmKit and ran into that error at some point.

Thanks for the confirmation. I am going to close this as a dup of #2403 then.


Pass generic to HTMLAttributes in Link typings

Seems to fix type errors with event listeners

Can you show an example of what this fixes?

Here's an example:
function onClickTrackingLink(evt: preact.JSX.TargetedEvent<HTMLAnchorElement>) {
    console.log("Clicked on link with href", evt.currentTarget.href);
}

function TrackingLink(props: preact.JSX.HTMLAttributes) {
    return <Link {...props} onClick={onClickTrackingLink} />;
}

This fails with
Type '(evt: TargetedEvent<HTMLAnchorElement, Event>) => void' is not assignable to type 'EventHandler<TargetedMouseEvent<EventTarget>>'.
  Types of parameters 'evt' and 'event' are incompatible.
    Type 'TargetedMouseEvent<EventTarget>' is not assignable to type 'TargetedEvent<HTMLAnchorElement, Event>'.
      Type 'TargetedMouseEvent<EventTarget>' is not assignable to type '{ readonly currentTarget: HTMLAnchorElement; }'.
        Types of property 'currentTarget' are incompatible.
          Type 'EventTarget' is missing the following properties from type 'HTMLAnchorElement': charset, coords, download, hreflang, and 305 more.

because the type for onClick isn't specific enough. The event handler parameter needs to be this so that currentTarget is correctly typed as HTMLAnchorElement.