Reference to a custom type array becomes null in @sanity-typed/client fetch result

I have a field that is an array of references to a custom type:
    defineField({
      name: 'projects',
      title: 'Projects',
      type: 'array',
      group: 'content',
      of: [
        defineArrayMember({
          type: 'reference',
          to: [{type: 'project'} as const],
        }),
      ],
    }),

project is set up like this:
import {defineArrayMember, defineField, defineType} from '@sanity-typed/types'

export default defineType({
  name: 'project',
  title: 'Projects',
  type: 'document',
  fields: [
    defineField({
      name: 'name',
      title: 'Name',
      type: 'string',
      validation: (Rule) => Rule.required(),
    }),
    defineField({
      name: 'listProject',
      title: 'List Project?',
      description: 'Temporarily hide a project.',
      type: 'boolean',
      initialValue: true,
      validation: (Rule) => Rule.required(),
    }),
    defineField({
      name: 'url',
      title: 'URL',
      type: 'string',
      validation: (Rule) => Rule.required(),
    }),
    defineField({
      name: 'repoUrl',
      title: 'Project Git Repository URL',
      type: 'string',
    }),
    defineField({
      name: 'description',
      title: 'Description',
      type: 'blockContent',
      description: 'Content with markup shown on the Projects page.',
    }),
    defineField({
      name: 'summary',
      title: 'Summary',
      type: 'text',
      rows: 3,
      description: 'Shorter description without markup for featured content cards.',
    }),
    defineField({
      name: 'releasedAt',
      title: 'Released At',
      type: 'date',
    }),
    defineField({
      name: 'techStack',
      title: 'Tech Stack',
      type: 'array',
      of: [
        defineArrayMember({
          type: 'reference',
          to: [{type: 'tech'} as const],
        }),
      ],
    }),
  ],
  preview: {
    select: {
      name: 'name',
      url: 'url',
      listProject: 'listProject',
      releasedAt: 'releasedAt',
    },
    prepare: ({name, url, listProject, releasedAt}) => ({
      title: name,
      subtitle:
        (listProject ? '' : 'HIDDEN: ') +
        url +
        (releasedAt ? ' (' + releasedAt.split('Z')[0] + ')' : ''),
    }),
  },
})

When I go to query it, however, I get a type of projects: null
import type { SanityValues } from "@joostschuur/cms";
import { createClient } from "@sanity-typed/client";

const projectId = process.env.SANITY_PROJECT_ID;
const dataset = process.env.SANITY_DATASET || "production";

const client = createClient<SanityValues>()({
  projectId,
  dataset,
  useCdn: true,
  apiVersion: "2023-05-23",
});

export const getProjectsPage = async () =>
  (await client.fetch(`*[_type == "projectspage"]{...,projects[]->}`))?.[0];

Full WIP code is at https://github.com/jschuur/astro-sanity (lots broken, but it might help with this issue).

I believe this has to do with getting the proper traversal cases tested. You're doing a projection on an array type and you should receive an array of the projected types, but you're probably not.
Right now, I'm working on getting all of the groq type test cases also mirrored against equivalent groq-js test cases, to see if my assumptions about these tests were correct. I can already see they aren't, notably projections on an array type are broken. I'll be pushing out a PR with those tests soon, and then hopefully I can build a fix on it.

Can you try this with @sanity-typed/client at 1.1.3? Let me know if it works!

(or beyond that type, I've been trying to improve things)

@LBBO discovered in a different ticket that projection of optional values was always giving a null, so I have a fix for that in #265. Not sure if that will solve this specific issue so, once it's merged and released, let me know if that version solves this issue.

Yep, works like a charm now. Thanks for the quick fix!


Feature: Add deployment info and best practices to Playwright docs

Checklist
General

[ ] This is a small issue that I tested locally and was confirmed by another developer on a test server.
[X] Language: I followed the guidelines for inclusive, diversity-sensitive, and appreciative language.
[X] I chose a title conforming to the naming conventions for pull requests.

Motivation and Context

We have removed Cypress docs, but Playwright docs do not contain some of the information we used to have. This includes Playwright Bamboo build plan's deployment information, general best practices of E2E testing and some other helpful information.
Description

This PR adds Bamboo deployment information of Playwright e2e testing build plan and removes unused assets related to Cypress docs.
Steps for Testing

Check out the updated documentation.
Testserver States

[!NOTE]
These badges show the state of the test servers.
Green = Currently available, Red = Currently locked
Click on the badges to get to the test servers.

Summary by CodeRabbit

Documentation

Expanded the playwright.rst document with detailed background information on the Playwright test suite and its integration with the Artemis system.
Renamed and enriched the section on best practices for writing new E2E tests.
Introduced a new section on deploying Artemis on a Bamboo build agent, including Docker container configurations.
Added notes on security, test execution timing, and maintenance for the Playwright Docker image.

@HawKhiem yes you can run them locally :) Admin credentials are the ones corresponding to the local instance of Artemis running on your machine (which is required for running the tests). In default  Artemis local config, credentials match the ones in the Playwright env file.

@HawKhiem yes you can run them locally :) Admin credentials are the ones corresponding to the local instance of Artemis running on your machine (which is required for running the tests). In default Artemis local config, credentials match the ones in the Playwright env file.

Thank you!


nested gmres does not work

Description
I am building an iterative solver. Naturally some of my linear operators are defined iteratively using gmres. A simple example would be
def a(x):
    # this function is essentially the linear operator x -> 2*x
    return gmres(lambda i: i, 2 * x)[0]

On top of this linear operator I can define another linear operator
def b(x):
    # this function is essentially the inverse of a
    return gmres(a, x)[0]

However, jax would throw an error message whenever i am trying to call b.
Here is the full script:
import jax
from jax import numpy as np
from functools import partial

gmres = partial(jax.scipy.sparse.linalg.gmres, tol=1e-3, restart=10, solve_method='batched')

def a(x):
    # this function is essentially the linear operator x-> 2*x
    return gmres(lambda i: i, 2 * x)[0]

def b(x):
    # this function is essentially the inverse of a
    # but it does not work...
    return gmres(a, x)[0]

if __name__ == '__main__':
    t = np.ones((10,))
    b(t)

And here is the error message

TypeError: Value UndefinedPrimal(ShapedArray(float32[])) with type <class 'jax._src.interpreters.ad.UndefinedPrimal'> is not a valid JAX type

What jax/jaxlib version are you using?
jax v0.4.12
Which accelerator(s) are you using?
cpu
Additional system info
No response
NVIDIA GPU info
No response

Curiously it seems to work fine if you use cg or bicgstab for either a or b (or both) so it seems to be limited to gmres not other iterative linear solvers. Under the hood both cg and bicgstab use similar infrastructure that gmres doesn't.

You may like to try Lineax, which is our new more-comprehensive solution for linear solvers.
I've just checked and it appears to handle this case without issues.

Assuming this is still a bug, I did some digging and I figured out that the issue is probably caused when the solver calls linear_transpose at the end of the solve. For some reason, as opposed to every other time this function is called, when it generates the jaxpr (line 2282 in api.py), despite having, as far as I can tell, the same parameters, it produces a jaxpr with a non-zero length of equations (len(jaxpr.eqns) > 0) and produces invars that are not in the constvars. This produces a problem further down the line when backwards_pass is called (line 181 in ad.py). This method generates a mapping of sorts between the constvars of the provided jaxpr and some other constants passed into the function itself. Later, the method iterates over every equation in jaxpr.eqns, and as part of that loop, it tries to read the invars from the mapping it generated earlier. If the invar is not defined in the mapping, it gets an UndefinedPrimal by default. Later, when concrete_aval is called on the values, it tries to concrete_aval on the UndefinedPrimal, which fails because apparently an UndefinedPrimal does not have the "__jax_array__" attribute, which causes the method to error out. I am not sure if UndefinedPrimals are supposed to have that attribute (they probably aren't) and I have no idea why the jaxpr generation method just suddenly decided to throw in a bunch of extra invars and constvars. Every other call I caught made a jaxpr with 0 constvars, 1 invar (a), and 0 equations, which didn't cause issues later in the backwards_pass method since it tried to iterate over the equations and immediately stopped since there aren't any. Once again, as far as I can tell, the inputs into the jaxpr generation method are identical each time.

I noticed this when working on some other stuff, but it seems like its a more general problem using gmres with fori_loop in the linear function:
def bfun(x):
    out = jnp.zeros_like(x)
    def body(i, out):
        out = out.at[i].set(3*x[i])
        return out
    return jax.lax.fori_loop(0, x.size, body, out)

jax.scipy.sparse.linalg.gmres(bfun, jnp.arange(5).astype(float))

gives the following assertion error:
AssertionError                            Traceback (most recent call last)
Cell In[108], line 8
      5         return out
      6     return jax.lax.fori_loop(0, x.size, body, out)
----> 8 jax.scipy.sparse.linalg.gmres(bfun, jnp.arange(5).astype(float))

File ~/miniconda3/envs/desc/lib/python3.10/site-packages/jax/_src/scipy/sparse/linalg.py:704, in gmres(A, b, x0, tol, atol, restart, maxiter, M, solve_method)
    702 def _solve(A, b):
    703   return _gmres_solve(A, b, x0, atol, ptol, restart, maxiter, M, gmres_func)
--> 704 x = lax.custom_linear_solve(A, b, solve=_solve, transpose_solve=_solve)
    706 failed = jnp.isnan(_norm(x))
    707 info = jnp.where(failed, x=-1, y=0)

    [... skipping hidden 12 frame]

File ~/miniconda3/envs/desc/lib/python3.10/site-packages/jax/_src/lax/control_flow/loops.py:718, in _scan_transpose(reduce_axes, cts, reverse, length, num_consts, num_carry, jaxpr, linear, unroll, *args)
    716 ires, _ = split_list(consts, [num_ires])
    717 _, eres = split_list(xs, [sum(xs_lin)])
--> 718 assert not any(ad.is_undefined_primal(r) for r in ires)
    719 assert not any(ad.is_undefined_primal(r) for r in eres)
    721 carry_avals, y_avals = split_list(jaxpr.out_avals, [num_carry])

AssertionError:


commit lockfile

I do not know whether or not you intend for this configuration to be reproducible, but it makes almost no sense to not commit lockfiles.
Unless it somehow contains secrets , and from what I can tell, your flake.nix does not contain secrets, you should commit your flake.lock. This will allow for, e.g., nixos-rebuild or nix build to build from the exact same revision of your inputs and help improve the reproducibility of your system.
tl;dr: add your flake.lock to the repo

hi fella!
this repo is not created for my use. this whole project aimed for those whp struggles with creating his own modular nixos config.
i'm trying to make this config as open and forkable as i can (still WIP and not being tested :D), bc mine config in private repo and contains all i need to fully repoduce on both my machines from one flake.
thank you for being worried about!


Proposed change to model function signatures to include request context?

Essentially all calls to the model occur in the context of a request of some sort (literally request in express). I think that context should be the first argument to every model function. This allows the model to safely communicate with "itself" which is very hard to do without a shared context. Happy to do the work, but want some discussion/buy-in first...

Just out of curiosity, what's the specific use case you're trying to achieve?  There's a case to be made that there needs to be a separation of concerns between the model calls and the underlying implementation.
Also, would a bound context that contains the request meet the needs?  Not saying one over the other, just exploring all the alternatives.

#267 an example use case would be protecting certain token usage by caller IP. Basically any case where you want some request-specific data in the body of a model function.

My specific case is actually simpler - we have a distributed logging capability that relies on a log decorator associated with the express request. So I need to get that logger down into the model functions for the request.

I'm not sure if a seperate context parameter is necessary.  I'm wondering if a better approach would be to invoke the model method in the context of the library, (your other PR) and include access to the request/response objects in that context?  Otherwise you end up with a bit of a leaky abstraction in the model.

The key is it needs to be tied to the request, and not the app. So the "this" stuff I did in that other PR doesn't actually help there. Given that there is no notion of "request" in this layer (since that's up in express), I think you need the generic "request context" idea, even if (as I use it) it's just the express request...

Perhaps I'm missing something, but wouldn't allowing for arbitrary properties on Request (#268) give you exactly that - the request context?

How would one retrieve that from a model method?

I like this idea, but it will be a big breaking change that I don't fancy at the moment.
One backwards compatible method of achieving this could be to construct a bespoke this context for for every model calls that (optionally?) includes the current request in, for example, this.request ?

Hi there!
This would be a nice feature to have. I'm facing a similar situation, using a distributed logging mechanism and need to access the express request context inside the model.
Having a this.request inside the module would be a nice feature!

@thomseddon what do you think if we add an optional "express context" parameter to all of the prototypes (authenticate, token...)
Like token(request, response, options, context)  and then pass that context to all children.
Does that sound too bad? If so, it sounds bad because it would be bad for node-oauth2-server or it is bad because it won't work? (I don't mind in forking in order to do it, since I really need to get the request context inside the model functions)

In case someone is interested, here you can find the fork:
https://github.com/diegosucaria/node-oauth2-server
basic usage:
...
oauth.token(request, response, null, null, req).then((token)=> {
...
oauth.authenticate(request, response,{scope: scopes}, null, req).then((token)=> {

then, in your model, add the extra req parameter
...
function getUser(username, password, req)
...
function verifyScope(token, scopes, req)
...

I've added the req parameter to all the grant-types and all the functions in the model.

Once req is required in each function, what about to switch to object oriented form or access to req from this as this.req()?


Add StickK

My bad, must have done this one in a rush. I've just squashed all the fixes into a single commit now.

Thanks for your contribution!


Adds a default configuration for XTDB

Uses the latest XTDB version (v1.21.0-beta3) which is using a version of RockDB that also works on Mac M1 computers.

I also added an html server for XTDB in the :dev profile, it can be very convenient.

Thanks!


Trying to understand the Pile-Up Time implementation

Hello everyone,
So, I'm trying to understand how the pile-up time has been implemented in GRSISORT.
For dead-time, I know we can achieve that by plotting the time interval of two consecutive γ-rays for each crystal (See Fig. 1).
For Pile-up, how do know the exact pile-up time in our detector?  I tried looking at the KValues plot vs the time diff btn 2 gamma's but I don't understand how to determine the pile-up time from this plot (See Fig.2).
Any help will be appreciated.
Thanks.

Yes, that's correct, the pile-up time is the time below which two hits are considered piled up with each other.
Thanks for the feedback.


FastQC needs screenshots

for showing the FastQC output. Perhaps with arrows showing particular parts of the output graphs.

Two screenshots aded - but how to explain Kmer content?

Good question. I'm not sure what is going on! I've assigned this to me now.


Refactor manual lowering

Ticket
None
Problem description
Improve readability of ReplaceMoreTtManually
What's changed
The list new_nodes was a local variable.  Its writing sides scattered hundreds of lines, but it was only read once.  I refactored generation of new_nodes to a function.  Writing new_nodes becomes returning a new node, which boosts readability.  We can also reuse the RAUW logic by simply returning a node.

This refactoring also makes eliding no-ops easier, which helps converting aten.slice.Tensor (#179).  Besides, our use cases of aten._adaptive_avg_pool2d look like no-op as well:

aten._adaptive_avg_pool2d.default

ATen Input Variations
Status

0
Tensor<[1, 512, 7, 7]> self = ?,List[int]<> output_size = [7, 7]
Done

-- https://github.com/tenstorrent/pytorch2.0_ttnn/blob/main/docs/cumulative_input_variations.md#aten_adaptive_avg_pool2ddefault


translate 2-js-basics into japanese

Hi.
I translate 2-js-basics into japanese.
How about this?

Thanks! Do you want to create a billeted list, and tag people for review?

@jlooper

you can let me know and I'll merge these lesson by lesson

If it merges and is OK, comment on it.
Thanks for the suggestion.

@jlooper
This pull request is OK to merge.


Support dynamic selection of a port using '0'

A port number of zero will let the system pick up an ephemeral port in a bind operation.

Since minestom just saves the port before the binding process this possibility will never affect the port value, thus the actual port and the saved port are not the same.

@TheMode Just checked the test. Do you want that the field 'port' is 0 when the system selects a port? If so, wouldn't it be a good idea to being able to access both from other classes.


Crash on starting Starship.exe from Windows desktop folder

Starship.exe crashes on startup, with both the original released executable and the updated one from the Releases page.
Running Windows 11 Pro 24H2, 10.0.26100 Build 26100. I don't know why V:\ is in the log unless it's a temp drive configured by Starship.
Starship.log contents:
[2024-12-24 13:18:13.711] [V:\Starship\libultraship\src\resource\archive\ArchiveManager.cpp:165] [info] Reading archive: C:\Users\PATH\Desktop\game\N64\Star Fox\Starship-Centauri-Alfa-Windows\starship.otr
[2024-12-24 13:18:13.712] [V:\Starship\libultraship\src\resource\archive\OtrArchive.cpp:69] [info] Opened mpq file "C:\Users\PATH\Desktop\game\N64\Star Fox\Starship-Centauri-Alfa-Windows\starship.otr"
[2024-12-24 13:18:13.712] [V:\Starship\libultraship\src\resource\archive\ArchiveManager.cpp:195] [info] Adding Archive C:\Users\PATH\Desktop\game\N64\Star Fox\Starship-Centauri-Alfa-Windows\starship.otr to Archive Manager
[13:18:13.965] [DisplayListPatch.cpp:11] [info] Applying display list patches
[13:18:13.966] [ResourceLoader.cpp:81] [error] Failed to load resource: File not loaded
[13:18:13.966] [ResourceManager.cpp:163] [error] Failed to load resource file at path __OTR__ast_audio/audio_seq_table
[13:18:13.966] [ResourceLoader.cpp:81] [error] Failed to load resource: File not loaded
[13:18:13.966] [ResourceManager.cpp:163] [error] Failed to load resource file at path __OTR__ast_audio/audio_soundfont_table
[13:18:13.966] [ResourceLoader.cpp:81] [error] Failed to load resource: File not loaded
[13:18:13.966] [ResourceManager.cpp:163] [error] Failed to load resource file at path __OTR__ast_audio/audio_sample_bank_table
[13:18:13.966] [ResourceLoader.cpp:81] [error] Failed to load resource: File not loaded
[13:18:13.966] [ResourceManager.cpp:163] [error] Failed to load resource file at path __OTR__ast_audio/audio_seq_font_table
[13:18:13.999] [CrashHandler.cpp:72] [critical] Exception: 0xc0000005
Registers:
RAX: 0x0000000000000000
RCX: 0xC62832C1715E0000
RDX: 0x0000000000000000
RBX: 0x0000000000000000
RSP: 0x000000F4808FFB90
RBP: 0x0000023318151500
RSI: 0x00007FF72EA63FB8
RDI: 0x0000000000000000
R9:  0x0000023318155E28
R10: 0x0000023317FC0000
R11: 0x000000F4808FFA80
R12: 0x0000023318154AB0
R13: 0x0000000000000054
R14: 0x0000000000000001
R15: 0x0000023318178570
RIP: 0x00007FF72DB0AA03
EFLAGS: 0x00010202
At  Addr: 0x3000000000000000
In: C:\Users\PATH\Desktop\game\N64\Star Fox\Starship-Centauri-Alfa-Windows\Starship.exe
At  Addr: 0x3000000000000000
In: C:\Users\PATH\Desktop\game\N64\Star Fox\Starship-Centauri-Alfa-Windows\Starship.exe
At  Addr: 0x3000000000000000
In: C:\Users\PATH\Desktop\game\N64\Star Fox\Starship-Centauri-Alfa-Windows\Starship.exe
At  Addr: 0x3000000000000000
In: C:\Users\PATH\Desktop\game\N64\Star Fox\Starship-Centauri-Alfa-Windows\Starship.exe
At  Addr: 0x3000000000000000
In: C:\Users\PATH\Desktop\game\N64\Star Fox\Starship-Centauri-Alfa-Windows\Starship.exe
At BaseThreadInitThunkAddr: 0x00007FFDBE7EE8C0
In: C:\WINDOWS\System32\KERNEL32.DLL
At RtlUserThreadStartAddr: 0x00007FFDC01BFBA0
In: C:\WINDOWS\SYSTEM32\ntdll.dll

I see, there's a batch file to run instead of a one-click executable like the other Shipwright projects, at least at this time.
It's working now. I'll close this then.


Accessing arrays out of bounds

There are a couple of places in the turn.c file where the code accesses arrays out-of-bounds.
The following code segment will access the non existent elements prop[MAXOBJ] and place[MAXOBJ] (via toting() function).
85   if (closed) {
86     if (prop[OYSTER] < 0 && toting(OYSTER))
87       pspeak(OYSTER, 1);
88     for (i = 1; i <= MAXOBJ; ++i)
89       if (toting(i) && prop[i] < 0)
90         prop[i] = -1 - prop[i];
91   }
The following code will access place[MAXOBJ] (via toting() function).  The call to dstroy() may or may not be a problem, that function allows values >= MAXOBJ, but may not give the intended result here.
792     for (i = 1; i <= MAXOBJ; ++i)
793       if (toting(i))
794         dstroy(i);
In the file database.c there appears to be a related problem in the move() function, where a value >= MAXOBJ will access the fixed array out-of-bounds - the intended array element is likely fixed[obj - MAXOBJ].
298 /*
299   Routine to destroy an object
300 */
301 void dstroy(int obj)
302 {
303   move(obj, 0);
304 }
305
306 /*
307   Routine to move an object
308 */
309 void move(int obj, int where)
310 {
311   int from;
312
313   from = (obj < MAXOBJ) ? place[obj] : fixed[obj];
314   if (from > 0 && from <= 300)
315     carry(obj, from);
316   drop(obj, where);
317 }
318
The arrays are declared in the advdef.h file with a size of MAXOBJ
 26 int place[MAXOBJ];      /* object location  */
 27 int fixed[MAXOBJ];      /* second object loc  */
 28 int visited[MAXLOC];      /* >0 if has been here  */
 29 int prop[MAXOBJ];     /* status of object */

First of all, apologies for the late reply, and thank you for these findings!  I've set up Coverity Scan now also, which has found even more.
I'll be closing this issue when the fixes are merged back to the master branch.

There merged to master.  Fixes will be part of the next release, v4.2.


The version of kornia

Thank you  for your code. What's the version of kornia? I cannot install kornia because of the conflict with pytorch.

kornia should be easy to install via pip, I think any version should be OK. My kornia version is 0.6.8.
I think you should upgrade your pip.

Thank you for your prompt reply. I successfully installed the environment.


Adding new game: doodle-jump game

Is your feature request related to a problem? Please describe.
I had always wanted to contribute to open source. I'm familiar with the tech stack and I wanted to add a game that is made from the same tech stack.
Describe the solution you'd like.
This is a simple implementation of the popular game "Doodle Jump" using HTML, CSS, and JavaScript. The game involves controlling a character (doodler) to jump on platforms and reach higher scores.
Describe alternatives you've considered.
Depending on the aim and project, which is 30 days of javascript, I think this game is quite useful in terms of learning.
Add any other context or screenshots about the feature request here.
No response

@anushkab2508 Thank you for providing your insight but it is not required as of now.


Update change-external-sharing-site.md

https://github.com/MicrosoftDocs/OfficeDocs-SharePoint/issues/2372
Added links.

@JohanFreelancer9 Copy editing is needed for this PR. Thanks.

@MikePlumleyMSFT PR has been copyedited and is ready for final review, could you please check and merge? Thanks!


Changed the cluster ip to 192.168.56.*

If any one had problems with installing kubernetes in a hard way. Specially with the Provisioning infrastructure using Vagrant.
The problem I faced was with the virtual box setup as it uses IPs from <IP_ADDRESS>/24 CIDR Block. So it was not able to assign IPs from <IP_ADDRESS>/24
Made some changes to the IPs for master-1, master-2, worker-1, worker-2 and load-balancer.
Made some changes in the Vagrant file and other places in the repo

@kaustubhmali02  You can specify other IP ranges by creating or modifying this file /etc/vbox/networks.conf with the following content:
* <IP_ADDRESS>/21 <IP_ADDRESS>/16

See https://www.virtualbox.org/manual/ch06.html#network_hostonly for more details.
Then running vagrant up command should not have any issue.

@kaustubhmali02 You can specify other IP ranges by creating or modifying this file /etc/vbox/networks.conf with the following content:
* <IP_ADDRESS>/21 <IP_ADDRESS>/16

See https://www.virtualbox.org/manual/ch06.html#network_hostonly for more details.
Then running vagrant up command should not have any issue.

True. So as per the documentation, HostOnlyNetwork in virtual machine can be changed to other CIDR Blocks but is defaulted to use <IP_ADDRESS>/21 for mac and linux:


Updated dev container

Codecov Report

Merging #676 (49a19fd) into master (ae98b14) will increase coverage by 0.08%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #676      +/-   ##
==========================================
+ Coverage   70.13%   70.22%   +0.08%
==========================================
  Files         125      125
  Lines       11381    11381
==========================================
+ Hits         7982     7992      +10
+ Misses       3399     3389      -10

Impacted Files
Coverage Δ

assemblyline/common/isotime.py
77.27% <0.00%> (+1.51%)
:arrow_up:

assemblyline/common/str_utils.py
76.36% <0.00%> (+1.81%)
:arrow_up:

assemblyline/common/caching.py
38.70% <0.00%> (+5.37%)
:arrow_up:

assemblyline/common/random_user.py
20.00% <0.00%> (+20.00%)
:arrow_up:

Continue to review full report at Codecov.

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


chore: add some info about how swaps work

One more change is we have to update the branding valora_branding_sha in scripts/sync_branding.sh once the branding PR is merged.


fix: storage use asAccess with uri

Types

[x] 🐛 Bug Fixes

Background or solution
其中一个 asAccess 当作 path 参数传入了。 close #233
Changelog

storage use asAccess with uri

Codecov Report

Merging #235 (be75081) into main (84909b4) will decrease coverage by 0.01%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##             main     #235      +/-   ##
==========================================
- Coverage   59.28%   59.27%   -0.02%
==========================================
  Files        1181     1181
  Lines       72663    72663
  Branches    15060    15060
==========================================
- Hits        43078    43068      -10
- Misses      26962    26972      +10
  Partials     2623     2623

Impacted Files
Coverage Δ

packages/extension-storage/src/browser/storage.ts
93.13% <100.00%> (ø)

...es/file-service/src/browser/file-service-client.ts
73.53% <0.00%> (-2.16%)
:arrow_down:

...ages/file-service/src/node/file-service-watcher.ts
71.18% <0.00%> (-1.70%)
:arrow_down:

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 84909b4...be75081. Read the comment docs.


Revise DEFAULT_PARAMS to obtain the language tag

When contacting the private API via the ApiRequest object, the language_tag being passed is currently forced to en-US. It is necessary for the tag to reflect the preferred or browser specified locale to obtain the proper consent and survey

Fixed in #153


upscale image from hd to 4k

Hello Dears,
can I upscale an image from HD of FHD resolution to 4k?

Please can you provide (significantly) more details, including sample images, the code you've written so far, and expectations about the output dimensions etc.
https://sharp.pixelplumbing.com/api-resize

I mean if I have an image that has resolution HD 1920 * 1080 and I need to make it to 3840 * 2160 resolution
Is it doable with sharp js?

Yes, something like:
const output = await sharp(input)
  .resize({ width: 3840, height: 2160 })
  .toBuffer();

I hope this information helped. Please feel free to re-open with more details if further assistance is required.


Synthesise research findings into actionable artefacts pt 2 [Journey map]

What
We have gotten plenty of data from our series of research activities, but we need to funnel all that research data into useful information
Why
This allows us to make sense of the data we have gathered and enables us to make informed decisions & actions
How
We plan to move our generated behaviour groups through our as-is process to isolate consistent pain points, especially one which have clear evidence
Relation
Relates to #685


ValueError: matrix contains invalid numeric entries

Hi! Thanks for sharing your excellent work! when I trained the Lidar branch
I only have one RTX 4080，and my batch size is 4. I encountered this issue when using the previously released code to train the LiDAR branch.Now,I know that it was caused by an incorrect learning rate. I want to konw if I use the latest released code, do I still need to adjust the learning rate based on the total batch size？

Hi! Thanks for sharing your excellent work! when I trained the Lidar branch I only have one RTX 4080，and my batch size is 4. I encountered this issue when using the previously released code to train the LiDAR branch.Now,I know that it was caused by an incorrect learning rate. I want to konw if I use the latest released code, do I still need to adjust the learning rate based on the total batch size？

I have the same problem. Do you have any new progress?

I have the same problem. Do you have any new progress?

I have the same problem, too. And when I increase the max_epoch, the corresponding lr needs to be smaller. I have to adjust the lr again and again.

Hi, I have adjusted also the learning rate but in the 5th epoch it starts to slow down a lot. If you have made any modification in the lr schedule, can you show it? As my batch_size if 3 (approx 1/10 of the original) I have changed lr (from optimizer and min_lr_ratio) to 1/10 of original. Before this change my training was stucked at epoch2 and now it reaches epoch5, but as said, it starts to go too slow.
Thanks in advance

@gerardmartin2 Hello, has the above method been successfully reproduced?Looking forward to your reply!

Hello @zyqww, sorry for the delay. I had something like 1-2% peformance degradation  with respect to the validation results (training only 4 epochs since, as mentioned, the training did not converge in the 5th). I am not sure that this lack of convergence is completely due to these modifications since I have modified some parts of the mmcv and mmdet libraries too. So maybe you can reach 6-8 epochs with these training modifications and get better results than me.

Thank you for your interest in our project. This repository is no longer actively maintained, so we will be closing this issue. Please refer to the amazing implementation at MMDetection3D. Thank you again!


dsh init doesn't work on windows - docroot not found

It seems folder isn't mapped to container.
On Windows 10 when I run dsh init I receive an error (drude-d7-testing is used):

bash: cd: docroot: No such file or directory

I've found that this error on this line: https://github.com/blinkreaction/drude-d7-testing/blob/master/.drude/commands/init#L102
There is same issue for drude-d8-testing installation.

dsh bash
docker@cli:/var/www$ ls -la
total 0
drwxr-xr-x 3 docker users 60 Jun 23 11:55 .
drwxr-xr-x 3 docker users 60 Jun 23 11:55 ..
drwxr-xr-x 3 docker users 60 Jun 23 11:55 .drude

You should not put your project files under .babun folder on windows at the moment

Thank you. Yes, it caused this problem. I've moved my projects folder and now it works fine.
I've added additional check for Windows on installation step:
https://github.com/blinkreaction/drude/pull/150


Unable to verify masters when deploying to Ubuntu on x86

I have two physical Intel machines running Proxmox which have the following VMs:

NUC i7

plane-1 - master
plane-3 - master
worker-1 - worker

Intel Denverton

plane-2 - master
worker-2 - worker

All VM's are running Ubuntu and use a template modelled on TechnoTim's recent video

Expected Behavior
I run ./deploy from the Proxmox (as root user) and it should setup the cluster
Current Behavior
I run the ansible script from my Proxmox server and it fails on the Verification step (even after 20 attempts):
- name: Verification
  block:
    - name: Verify that all nodes actually joined (check k3s-init.service if this fails)
      command:
        cmd: k3s kubectl get nodes -l "node-role.kubernetes.io/master=true" -o=jsonpath="{.items[*].metadata.name}"
      register: nodes
      until: nodes.rc == 0 and (nodes.stdout.split() | length) == (groups['master'] | length)
      retries: 20
      delay: 10
      changed_when: false

I can stop the retry loop which ensures that the transient process is not shut down by ansible and when I go into each of the three masters I can see that:

the transient process is running

running k3s kubectl get nodes (of any variant) will fail as nothing is running on port 8080 which is why the above step fails

when you look for listeners on port 6443 the master VM's you'll find that indeed there is a service listening there:

I have validated all k3s config files with k3s check-config and they are all fine

All files expected to copied to /var/lib/rancher/k3s/server have indeed been copied

Filesystem should have plenty of space on all VMs

I checked the /var/lib/rancher/k3s/server/red/api-server.kubeconfig file to see how it was setup and indeed it's clear on the fact that the listening port is 6443

Steps to Reproduce

use the deploy script
- this runs ansible-playbook site.yml -i inventory/venice/hosts.ini --private-key ~/.ssh/id_rsa -v --user ken
- I also tried runs where I added --ask-become-pass --ask-pass

Context (variables)

OS
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.4 LTS
Release:        20.04
Codename:       focal

all packages are up-to-date

Virtualization
Proxmox 7.1.10
Variables Used:
k3s_version: v1.23.4+k3s1
# this is the user that has ssh access to these machines
ansible_user: ken
systemd_dir: /etc/systemd/system

# interface which will be used for flannel
flannel_iface: "eth0"

# apiserver_endpoint is virtual ip-address which will be configured on each master
apiserver_endpoint: "<IP_ADDRESS>"

# k3s_token is required  masters can talk together securely
# this token should be alpha numeric only
k3s_token: "xxxxx-xxxxx-xxxxx-xxxxx"

# change these to your liking, the only required one is--no-deploy servicelb
# extra_server_args: "--no-deploy servicelb --no-deploy traefik --write-kubeconfig-mode 644 --kube-api-server-arg default-not-ready-toleration-seconds=30 --kube-apiserver-arg default-unreachable-toleration-seconds=30 --kube-controller-arg node-monitor-period=20s --kube-controller-arg node-monitor-grace-period=20s --kubelet-arg node-status-update-frequency=5s"
# extra_agent_args: "--kubelet-arg node-status-update-frequency=5s"

# image tag for kube-vip
kube_vip_tag_version: "v0.4.3"

# image tag for metal lb
metal_lb_speaker_tag_version: "v0.12.1"
metal_lb_controller_tag_version: "v0.12.1"

# metallb ip range for load balancer
metal_lb_ip_range: "<IP_ADDRESS>-<IP_ADDRESS>"

All of these were run with the base configuration in the repo but then I also tried removing the extra_server_args and extra_agent_args from all.yml but that seemed to have zero impact.

While trying to troubleshoot I notice what I believe is an async effect that may be responsible for this behavior.
What I Changed

I add the following step to the roles/k3s/master/main.yml file; this is DIRECTLY before the Verification step:- name: Nodes
  command:
    cmd: k3s kubectl get nodes

This provided me an immediate view into the response for a simple kubectl get nodes command and as you can see it failed with "The connection to the server localhost:8080 was refused - did you specify the right host or port?":

That it is looking for port 8080 makes no sense because the config file clearly is directing to 6443 (and 6444)
Well it makes no sense unless ... hold that thought
... about a moment later I open up an SSH terminal to the plane-1 and type the same command and low-and-behold it works just fine:

So ... this hits into my lack of understanding of the dark arts of Ansible but we are getting 20 interations over  a window in which CLEARLY the services are in fact coming up (at least on plane-1.

Ok then I ate lunch (well figuratively but I really do need to soon):

after removing my one liner change I was eager to see if I could see get plane-2 and plane-3 to do the same at the terminal (I had checked with my one-liner change and there was no nodes up and it was still looking for port 8080!)
that's when I realized that plane-2 and plane-3 weren't ever kicking off and continue to look on port 8080!

So now I really must go to lunch but my suspicion is that the bug is actually with the reset script not ensuring that the service is shutdown and that is leaving stale listeners behind.

When I ran reset.sh it shutdown but did take a lot longer than i'm used to ...

this may be good news ... possibly with the stable version of K3s (versus RC I had used earlier or maybe when I was running out of disk space) it does shutdown correctly but i've never gotten an error before.

holly bejesus ... after about 100 deployments I am greeted with:

Somehow I must have gotten into a state where the old process/service was not being killed through a reset/deployment loop. I am going to eat now. There is still an issue that this happened and it might be as simple as either:

doing a kill -9 on any processes listening on 9443/9444 (aka, kill -9 `lsof i:6443`) right before we kick off the transient cluster service
checking that no processes are listening on 9443/9444 when running reset

Option 2 seems more graceful but option 1 might actually be safer.

sadly i kind of feel like i know Kubernetes and Ansible through this process ;)

Just tested in my lab:
5 20.04 LTS Ubuntu machines
---
k3s_version: v1.23.4+k3s1
ansible_user: anisble user
systemd_dir: /etc/systemd/system
flannel_iface: "eth0"
apiserver_endpoint: "<IP_ADDRESS>"
k3s_token: "some-SUPER-DEDEUPER-secret-password"
extra_server_args: "--no-deploy servicelb --no-deploy traefik"
extra_agent_args: ""
kube_vip_tag_version: "v0.4.3"
metal_lb_speaker_tag_version: "v0.12.1"
metal_lb_controller_tag_version: "v0.12.1"
metal_lb_ip_range: "<IP_ADDRESS>-<IP_ADDRESS>"

host.ini
[master]
<IP_ADDRESS>
<IP_ADDRESS>
<IP_ADDRESS>

[node]
<IP_ADDRESS>
<IP_ADDRESS>

[k3s_cluster:children]
master
node

result
➜  ~ sudo kubectl get nodes

NAME     STATUS   ROLES                       AGE     VERSION
k3s-01   Ready    control-plane,etcd,master   5m40s   v1.23.4+k3s1
k3s-02   Ready    control-plane,etcd,master   5m25s   v1.23.4+k3s1
k3s-03   Ready    control-plane,etcd,master   5m8s    v1.23.4+k3s1
k3s-04   Ready    <none>                      2m42s   v1.23.4+k3s1
k3s-05   Ready    <none>                      2m42s   v1.23.4+k3s1

logs
➜  k3s-ansible git:(master) ✗ ansible-playbook site.yml -i inventory/sample/hosts.ini

PLAY [k3s_cluster] ***********************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************
Monday 04 April 2022  18:27:07 -0500 (0:00:00.098)       0:00:00.098 **********
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]

TASK [prereq : Set SELinux to disabled state] ********************************************************************************************
Monday 04 April 2022  18:27:09 -0500 (0:00:02.135)       0:00:02.233 **********
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]

TASK [prereq : Enable IPv4 forwarding] ***************************************************************************************************
Monday 04 April 2022  18:27:10 -0500 (0:00:00.155)       0:00:02.389 **********
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]

TASK [prereq : Enable IPv6 forwarding] ***************************************************************************************************
Monday 04 April 2022  18:27:10 -0500 (0:00:00.725)       0:00:03.114 **********
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]

TASK [prereq : Add br_netfilter to /etc/modules-load.d/] *********************************************************************************
Monday 04 April 2022  18:27:11 -0500 (0:00:00.641)       0:00:03.756 **********
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]

TASK [prereq : Load br_netfilter] ********************************************************************************************************
Monday 04 April 2022  18:27:11 -0500 (0:00:00.208)       0:00:03.965 **********
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]

TASK [prereq : Set bridge-nf-call-iptables (just to be sure)] ****************************************************************************
Monday 04 April 2022  18:27:11 -0500 (0:00:00.190)       0:00:04.156 **********
skipping: [<IP_ADDRESS>] => (item=net.bridge.bridge-nf-call-iptables)
skipping: [<IP_ADDRESS>] => (item=net.bridge.bridge-nf-call-ip6tables)
skipping: [<IP_ADDRESS>] => (item=net.bridge.bridge-nf-call-iptables)
skipping: [<IP_ADDRESS>] => (item=net.bridge.bridge-nf-call-ip6tables)
skipping: [<IP_ADDRESS>] => (item=net.bridge.bridge-nf-call-iptables)
skipping: [<IP_ADDRESS>] => (item=net.bridge.bridge-nf-call-ip6tables)
skipping: [<IP_ADDRESS>] => (item=net.bridge.bridge-nf-call-iptables)
skipping: [<IP_ADDRESS>] => (item=net.bridge.bridge-nf-call-ip6tables)
skipping: [<IP_ADDRESS>] => (item=net.bridge.bridge-nf-call-iptables)
skipping: [<IP_ADDRESS>] => (item=net.bridge.bridge-nf-call-ip6tables)

TASK [prereq : Add /usr/local/bin to sudo secure_path] ***********************************************************************************
Monday 04 April 2022  18:27:12 -0500 (0:00:00.174)       0:00:04.330 **********
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]

TASK [download : Download k3s binary x64] ************************************************************************************************
Monday 04 April 2022  18:27:12 -0500 (0:00:00.240)       0:00:04.570 **********
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]

TASK [download : Download k3s binary arm64] **********************************************************************************************
Monday 04 April 2022  18:27:19 -0500 (0:00:06.887)       0:00:11.458 **********
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]

TASK [download : Download k3s binary armhf] **********************************************************************************************
Monday 04 April 2022  18:27:19 -0500 (0:00:00.213)       0:00:11.671 **********
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]

TASK [raspberrypi : Test for raspberry pi /proc/cpuinfo] *********************************************************************************
Monday 04 April 2022  18:27:19 -0500 (0:00:00.210)       0:00:11.882 **********
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]

TASK [raspberrypi : Test for raspberry pi /proc/device-tree/model] ***********************************************************************
Monday 04 April 2022  18:27:20 -0500 (0:00:00.778)       0:00:12.660 **********
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]

TASK [raspberrypi : Set raspberry_pi fact to true] ***************************************************************************************
Monday 04 April 2022  18:27:20 -0500 (0:00:00.557)       0:00:13.218 **********
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]

TASK [raspberrypi : Set detected_distribution to Raspbian] *******************************************************************************
Monday 04 April 2022  18:27:21 -0500 (0:00:00.257)       0:00:13.475 **********
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]

TASK [raspberrypi : Set detected_distribution to Raspbian (ARM64 on Debian Buster)] ******************************************************
Monday 04 April 2022  18:27:21 -0500 (0:00:00.283)       0:00:13.758 **********
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]

TASK [raspberrypi : Set detected_distribution_major_version] *****************************************************************************
Monday 04 April 2022  18:27:21 -0500 (0:00:00.227)       0:00:13.986 **********
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]

TASK [raspberrypi : execute OS related tasks on the Raspberry Pi] ************************************************************************
Monday 04 April 2022  18:27:21 -0500 (0:00:00.256)       0:00:14.242 **********
skipping: [<IP_ADDRESS>] => (item=/home/tstewart/dev/public/k3s-ansible/roles/raspberrypi/tasks/prereq/Ubuntu.yml)
skipping: [<IP_ADDRESS>] => (item=/home/tstewart/dev/public/k3s-ansible/roles/raspberrypi/tasks/prereq/Ubuntu.yml)
skipping: [<IP_ADDRESS>] => (item=/home/tstewart/dev/public/k3s-ansible/roles/raspberrypi/tasks/prereq/Ubuntu.yml)
skipping: [<IP_ADDRESS>] => (item=/home/tstewart/dev/public/k3s-ansible/roles/raspberrypi/tasks/prereq/Ubuntu.yml)
skipping: [<IP_ADDRESS>] => (item=/home/tstewart/dev/public/k3s-ansible/roles/raspberrypi/tasks/prereq/Ubuntu.yml)

PLAY [master] ****************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************
Monday 04 April 2022  18:27:22 -0500 (0:00:00.295)       0:00:14.538 **********
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]

TASK [k3s/master : Clean previous runs of k3s-init] **************************************************************************************
Monday 04 April 2022  18:27:23 -0500 (0:00:00.991)       0:00:15.529 **********
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]

TASK [k3s/master : Clean previous runs of k3s-init] **************************************************************************************
Monday 04 April 2022  18:27:24 -0500 (0:00:01.103)       0:00:16.633 **********
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]

TASK [k3s/master : Create manifests directory on first master] ***************************************************************************
Monday 04 April 2022  18:27:24 -0500 (0:00:00.529)       0:00:17.162 **********
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]

TASK [k3s/master : Copy vip rbac manifest to first master] *******************************************************************************
Monday 04 April 2022  18:27:25 -0500 (0:00:00.871)       0:00:18.033 **********
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]

TASK [k3s/master : Copy vip manifest to first master] ************************************************************************************
Monday 04 April 2022  18:27:27 -0500 (0:00:01.343)       0:00:19.377 **********
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]

TASK [k3s/master : Copy metallb namespace manifest to first master] **********************************************************************
Monday 04 April 2022  18:27:27 -0500 (0:00:00.628)       0:00:20.005 **********
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]

TASK [k3s/master : Copy metallb ConfigMap manifest to first master] **********************************************************************
Monday 04 April 2022  18:27:28 -0500 (0:00:00.656)       0:00:20.662 **********
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]

TASK [k3s/master : Copy metallb main manifest to first master] ***************************************************************************
Monday 04 April 2022  18:27:29 -0500 (0:00:00.853)       0:00:21.516 **********
skipping: [<IP_ADDRESS>]
skipping: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]

TASK [k3s/master : Init cluster inside the transient k3s-init service] *******************************************************************
Monday 04 April 2022  18:27:29 -0500 (0:00:00.710)       0:00:22.227 **********
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]

TASK [k3s/master : Verify that all nodes actually joined (check k3s-init.service if this fails)] *****************************************
Monday 04 April 2022  18:27:30 -0500 (0:00:00.573)       0:00:22.801 **********
FAILED - RETRYING: Verify that all nodes actually joined (check k3s-init.service if this fails) (20 retries left).
FAILED - RETRYING: Verify that all nodes actually joined (check k3s-init.service if this fails) (20 retries left).
FAILED - RETRYING: Verify that all nodes actually joined (check k3s-init.service if this fails) (20 retries left).
FAILED - RETRYING: Verify that all nodes actually joined (check k3s-init.service if this fails) (19 retries left).
FAILED - RETRYING: Verify that all nodes actually joined (check k3s-init.service if this fails) (19 retries left).
FAILED - RETRYING: Verify that all nodes actually joined (check k3s-init.service if this fails) (19 retries left).
FAILED - RETRYING: Verify that all nodes actually joined (check k3s-init.service if this fails) (18 retries left).
FAILED - RETRYING: Verify that all nodes actually joined (check k3s-init.service if this fails) (18 retries left).
FAILED - RETRYING: Verify that all nodes actually joined (check k3s-init.service if this fails) (18 retries left).
FAILED - RETRYING: Verify that all nodes actually joined (check k3s-init.service if this fails) (17 retries left).
FAILED - RETRYING: Verify that all nodes actually joined (check k3s-init.service if this fails) (17 retries left).
FAILED - RETRYING: Verify that all nodes actually joined (check k3s-init.service if this fails) (17 retries left).
FAILED - RETRYING: Verify that all nodes actually joined (check k3s-init.service if this fails) (16 retries left).
FAILED - RETRYING: Verify that all nodes actually joined (check k3s-init.service if this fails) (16 retries left).
FAILED - RETRYING: Verify that all nodes actually joined (check k3s-init.service if this fails) (16 retries left).
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]

TASK [k3s/master : Kill the temporary service used for initialization] *******************************************************************
Monday 04 April 2022  18:28:33 -0500 (0:01:02.458)       0:01:25.259 **********
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]

TASK [k3s/master : Copy K3s service file] ************************************************************************************************
Monday 04 April 2022  18:30:03 -0500 (0:01:30.905)       0:02:56.165 **********
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]

TASK [k3s/master : Enable and check K3s service] *****************************************************************************************
Monday 04 April 2022  18:30:04 -0500 (0:00:00.900)       0:02:57.065 **********
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]

TASK [k3s/master : Wait for node-token] **************************************************************************************************
Monday 04 April 2022  18:30:20 -0500 (0:00:15.987)       0:03:13.053 **********
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]

TASK [k3s/master : Register node-token file access mode] *********************************************************************************
Monday 04 April 2022  18:30:21 -0500 (0:00:00.766)       0:03:13.820 **********
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]

TASK [k3s/master : Change file access node-token] ****************************************************************************************
Monday 04 April 2022  18:30:21 -0500 (0:00:00.365)       0:03:14.185 **********
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]

TASK [k3s/master : Read node-token from master] ******************************************************************************************
Monday 04 April 2022  18:30:22 -0500 (0:00:00.539)       0:03:14.724 **********
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]

TASK [k3s/master : Store Master node-token] **********************************************************************************************
Monday 04 April 2022  18:30:23 -0500 (0:00:00.554)       0:03:15.279 **********
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]

TASK [k3s/master : Restore node-token file access] ***************************************************************************************
Monday 04 April 2022  18:30:23 -0500 (0:00:00.154)       0:03:15.433 **********
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]

TASK [k3s/master : Create directory .kube] ***********************************************************************************************
Monday 04 April 2022  18:30:23 -0500 (0:00:00.571)       0:03:16.004 **********
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]

TASK [k3s/master : Copy config file to user home directory] ******************************************************************************
Monday 04 April 2022  18:30:24 -0500 (0:00:00.559)       0:03:16.564 **********
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]

TASK [k3s/master : Configure kubectl cluster to https://<IP_ADDRESS>:6443] *************************************************************
Monday 04 April 2022  18:30:25 -0500 (0:00:00.691)       0:03:17.255 **********
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]

TASK [k3s/master : Create kubectl symlink] ***********************************************************************************************
Monday 04 April 2022  18:30:25 -0500 (0:00:00.788)       0:03:18.043 **********
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]

TASK [k3s/master : Create crictl symlink] ************************************************************************************************
Monday 04 April 2022  18:30:26 -0500 (0:00:00.364)       0:03:18.408 **********
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]

PLAY [node] ******************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************
Monday 04 April 2022  18:30:26 -0500 (0:00:00.634)       0:03:19.043 **********
ok: [<IP_ADDRESS>]
ok: [<IP_ADDRESS>]

TASK [k3s/node : Copy K3s service file] **************************************************************************************************
Monday 04 April 2022  18:30:28 -0500 (0:00:01.553)       0:03:20.596 **********
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]

TASK [k3s/node : Enable and check K3s service] *******************************************************************************************
Monday 04 April 2022  18:30:29 -0500 (0:00:00.843)       0:03:21.439 **********
changed: [<IP_ADDRESS>]
changed: [<IP_ADDRESS>]

PLAY RECAP *******************************************************************************************************************************
<IP_ADDRESS>              : ok=31   changed=15   unreachable=0    failed=0    skipped=12   rescued=0    ignored=0
<IP_ADDRESS>              : ok=25   changed=9    unreachable=0    failed=0    skipped=18   rescued=0    ignored=0
<IP_ADDRESS>              : ok=25   changed=9    unreachable=0    failed=0    skipped=18   rescued=0    ignored=0
<IP_ADDRESS>              : ok=9    changed=3    unreachable=0    failed=0    skipped=12   rescued=0    ignored=0
<IP_ADDRESS>              : ok=9    changed=3    unreachable=0    failed=0    skipped=12   rescued=0    ignored=0

Monday 04 April 2022  18:30:51 -0500 (0:00:22.709)       0:03:44.149 **********
===============================================================================
k3s/master : Kill the temporary service used for initialization ------------------------------------------------------------------ 90.91s
k3s/master : Verify that all nodes actually joined (check k3s-init.service if this fails) ---------------------------------------- 62.46s
k3s/node : Enable and check K3s service ------------------------------------------------------------------------------------------ 22.71s
k3s/master : Enable and check K3s service ---------------------------------------------------------------------------------------- 15.99s
download : Download k3s binary x64 ------------------------------------------------------------------------------------------------ 6.89s
Gathering Facts ------------------------------------------------------------------------------------------------------------------- 2.14s
Gathering Facts ------------------------------------------------------------------------------------------------------------------- 1.55s
k3s/master : Copy vip rbac manifest to first master ------------------------------------------------------------------------------- 1.34s
k3s/master : Clean previous runs of k3s-init -------------------------------------------------------------------------------------- 1.10s
Gathering Facts ------------------------------------------------------------------------------------------------------------------- 0.99s
k3s/master : Copy K3s service file ------------------------------------------------------------------------------------------------ 0.90s
k3s/master : Create manifests directory on first master --------------------------------------------------------------------------- 0.87s
k3s/master : Copy metallb ConfigMap manifest to first master ---------------------------------------------------------------------- 0.85s
k3s/node : Copy K3s service file -------------------------------------------------------------------------------------------------- 0.84s
k3s/master : Configure kubectl cluster to https://<IP_ADDRESS>:6443 ------------------------------------------------------------- 0.79s
raspberrypi : Test for raspberry pi /proc/cpuinfo --------------------------------------------------------------------------------- 0.78s
k3s/master : Wait for node-token -------------------------------------------------------------------------------------------------- 0.77s
prereq : Enable IPv4 forwarding --------------------------------------------------------------------------------------------------- 0.73s
k3s/master : Copy metallb main manifest to first master --------------------------------------------------------------------------- 0.71s
k3s/master : Copy config file to user home directory ------------------------------------------------------------------------------ 0.69s
➜  k3s-ansible git:(master) ✗

Things I would check if I were you:

Variables match the ones used above
That all master noes have the same network interface name (this cannot vary)
All machines have enough disk space, at least 4 GB
Drives are fast enough to run etcd (SSD or faster)

Rather than post my results here, I created a pinned post of troubleshooting and everything I had posted in this thread
https://github.com/techno-tim/k3s-ansible/discussions/20

So I noticed you made a change to the VIP not being recycled. Can't this be done with the reset.sh script and at the same time have it check the various master nodes for listeners which possibly outlived the attempt to shutdown the service? My edge case -- which may be hard to recreate -- involves a rouge process which does not stop listening on the port. Because I'm not yet entirely sure how to recreate this I can't tell how much of edge case it is but checking for the port listeners is quite easy so the cost-to-benefit ratio seems high.

also wondering if maybe there should be a rollback.sh script to rollback not only the services on the clusters but to remove the cluster itself? This might be something you can do with just a kubectl command maybe? I'm at the beginning of my learning curve for K3s.

note: if you think this is too "edgy" to build protection around I can just close this issue

I added a co

So I noticed you made a change to the VIP not being recycled. Can't this be done with the reset.sh script and at the same time have it check the various master nodes for listeners which possibly outlived the attempt to shutdown the service? My edge case -- which may be hard to recreate -- involves a rouge process which does not stop listening on the port. Because I'm not yet entirely sure how to recreate this I can't tell how much of edge case it is but checking for the port listeners is quite easy so the cost-to-benefit ratio seems high.

I did add a comment about it in docs, I did mention this in the video but never wrote it down.  I think it could be added to the playbook rather than the script.  I think it would be nice to figure out what the process is and kill it as part of the reset.yml 🙂

A simple way to test this is to ping the VIP after running reset.yml It will still respond, which it shouldn't.

note: if you think this is too "edgy" to build protection around I can just close this issue

All good.  Let's keep it open.  It was a known issues that I didn't document well enough!

A simple way to test this is to ping the VIP after running reset.yml It will still respond, which it shouldn't.

Really? Pinging a VIP just tests whether the underlying servers are pingable right? Not whether those servers are listening on a given port.

I am only referring to the bug where the VIP stays up after a reset.

but my point is that in my case the VIP was down but the service was not ... they're separate edge cases

I do feel like this was the root cause though, not rebooting after a reset.

Rebooting would have cycled the services so probably would have addressed the issue but the VIP being up/down feels completely separate. In general, I'd say to ensure idempotency you should always check both file system and service ports to ensure nothing untoward is still in place. The VIP is a good thing to check but the actual service ports for Kubectl are too.

Agreed, but I again, feel like you only got into this edge case because the VIP was never destroyed.  I don't mean to harp on it but if the VIP (and all required services and ports that come along with it) were cleaned up properly you wouldn't end up in the edge case where you were, and at one point, 2 clusters in a split brain scenario.  I agree for idempotency sake services and port should not be left open, but again, this was a bug so anything after the bug stemmed from that.


Support for nodes in different regions

This way you can have a control plane node in each location for europe. (FSN, NBG, HEL)

Thanks for the feature request. I am currently carrying out some basic code refactorings. After that it should be easier to realize the feature.

As far as I tried to implement this feature, I think this will be a breaking change.
There could be something I missed, or did wrong.
https://github.com/TeeTeufel/terraform-hcloud-talos/tree/feature/nodesInDifferentRegions
Changing the datacenter of existing nodes will destroy an recreate them, this is something I expect.
While recreating them, it seems that inline primary IPv4/IPv6 addresses won't be recreated. This leads to an terraform error, because primary ip addresses are location bound and can't be transferred to a different datacenter.
I will check how this will behave if primary ips are created with their own resource.
Unrelated to the creation of primary ips, changing the datacenter will probably result in different primary ips for all recreated nodes.
This enhancement probably needs a bit more research in context with autoscaling, because currently I set the datacenter location for the nodes as a list of strings.
With terraform 1.9 there should be a feature introduced to validate a variable condition with external variables. Currently, the list of strings could be longer, or shorter.
https://github.com/hashicorp/terraform/issues/25609#issuecomment-2125070095

This module is currently not able to carry out meaningful upgrades anyway. Changing the machine config would always lead to a recreate of the server.
If so, upgrades have to be made by patch. But this is not so easy, because patches are not idempotent. They build on the current state and change it. This means that a patch can have a different effect the second time you run it.
I think at the beginning it is sufficient to define several node groups in regions when creating the cluster, similar to kube-hetzner.

Been thinking about upgrades recently..
Instead of having a single set of counted resources (server, ip, ..) for all control planes (and workers), there could be a module, which would manage everything for a single instance only.
That would give you the complete control over what version of talos (and k8s) would be running on a given instance.
You could then upgrade them one at a time (for example), w/o downtime.
Would that even work? Different talos (or k8s) versions might not be compatible with one another..
Alternatively - what about deploying a separate cluster, connecting it to the existing cluster, transferring the load to the new one and then destroying the old cluster? A lot could go wrong here..
(still very new with talos, so i'm simply replacing the cluster when necessary)


[style]: Changing the css for the docs page

What's the style idea?
We need to improve the docs page as it seems difficult to read because of the background image or whatever is being inserted. Since it is a page that requires the user's attention to read so it should be clearer and easy to read.
I would like to work on it and this is regarding gssoc'23
Add screenshots
Code of Conduct

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

could you share a demo of problem?

Sure, here is the ss of the issue.
ps: The prev ss was put mistakenly. Sorry!

 Sure, here is the ss of the issue.

this is a SVG image

okay ? but whatever it is , it is not appearing correctly ig?
what do you think?

I guess it's ok.


Help me understand the HELM Classic Leaderboard's missing results

Why were many models not evaluated on tasks like HellaSwag, OpenBookQA, MS MARCO, and summarization tasks like XSUM and CNN/Daily Mail? Is it because they are not suitable for these tasks?

Yes - many scenarios on HELM Classic require logprobs from the model, because they use an adapter that requires logprobs. Many recent model APIs do not provide logprobs.

Closing this issue due to staleness. Feel free to reopen if you have further questions.


Feature Request: Scroll on button hold

Hi, let me first thank you for making this software. I recently made the switch to Linux and not being able to use my Spotlight was one of the last things holding me back. So thanks for solving that issue!
One feature of the official software is that you can scroll by holding down a button (I don't remember which one, or if it is configurable) and rotating the presenter up and down to scroll. This allows you to quickly scroll through a lot of slides. I have no idea if this implementable with the new button mapping framework.

One feature of the official software is that you can scroll by holding down a button (I don't remember which one, or if it is configurable) and rotating the presenter up and down to scroll. This allows you to quickly scroll through a lot of slides. I have no idea if this implementable with the new button mapping framework.

Unfortunately no, it seems it's currently not possible. For that feature, most probably direct communication with the device is necessary (and reverse engineering what kind of messages the original Logitech software exchanges with the device) see also: #71 #6

With the merge of PR #155 that contains a lot of work from @mayanksuman toward this feature - the latest alpha versions are now able to scroll with a configurable button press and hold (next or back).  (Logitech Spotlight)
Right click where you would record your button combination - then you can select the special inputs
Next Hold and Back Hold - with these inputs you can then choose from a different set of mapped actions.


Version19

schmitt filter

wait.. is this same as PR #21?

Sorry.... I forgot to push...

discard schmitt filter
change to skip debouncing


libfunc: array_snapshot_pop_front

implements array_snapshot_pop_front
requires #61
fixes #174
Description
Description of the pull request changes and motivation.
Checklist

[ ] Linked to Github Issue
[ ] Unit tests added
[ ] Integration tests added.
[ ] This change requires new documentation.

[ ] Documentation has been added/updated.

Codecov Report

:exclamation: No coverage uploaded for pull request base (edgar/dict@e1ab75f). Click here to learn what that means.
The diff coverage is n/a.

@@              Coverage Diff              @@
##             edgar/dict     #175   +/-   ##
=============================================
  Coverage              ?   89.57%
=============================================
  Files                 ?       71
  Lines                 ?    12475
  Branches              ?        0
=============================================
  Hits                  ?    11175
  Misses                ?     1300
  Partials              ?        0

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Add note about test directory go mod vendor steps to README

This change adds a quick blurb about the test directory situation for contributors.
As the test directory is a bit odd and our CI will fail if the condition isn't met, this seems like a good thing to call out.
Signed-off-by: Daniel Canter<EMAIL_ADDRESS>

Ci fails literally on what this PR was set out to help with 😂😂😂


setEnergyMeterInput( {}) and addMeterValueInput({return 10;}

Hi @matth-x
Can you please tell me the difference between the setEnergyMeterInput( {});  and addMeterValueInput({return 10;}
/*
* Integrate OCPP functionality. You can leave out the following part if your EVSE doesn't need it.
*/
setEnergyMeterInput( {
//take the energy register of the main electricity meter and return the value in watt-hours
     return 10.f;
 });

addMeterValueInput({return 10;}, "Power.Active.Import", "kW", nullptr, nullptr, 1);

Hi @matth-x
After following this #110
I am trying to send the energy meter value to the cms I am able to send the kwh and kw.
but i am not able to send voltage and current i followed #110 even then cms not getting the voltage and current value.
below is the code pls correct me.
/Below in the logs you can see that there are two warnings as
[AO] warning (MeteringService.cpp:73): could not find metering device for Current.Import
[AO] warning (ChangeConfiguration.cpp:153): validation failed for key=MeterValuesSampledData value=Current.Import,Current.Offered,Energy.Active.Import.Register,Power.Active.Import,Voltage why I am getting these warning how it can find metering device where to putt this???/
How I can correct this??
// matth-x/MicroOcpp
// Copyright Matthias Akstaller 2019 - 2023
// MIT License
#include <Arduino.h>
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti WiFiMulti;
#elif defined(ESP32)
#include <WiFi.h>
#else
#error only ESP32 or ESP8266 supported at the moment
#endif
#include <ArduinoOcpp.h>
#include <ArduinoOcpp/Core/Configuration.h>
bool connectorPlugged = false; //example for the variable where you keep the connector state
void setup() {
/*
 * Initialize Serial and WiFi
 */

Serial.begin(115200);

Serial.print(F("[main] Wait for WiFi: "));

#if defined(ESP8266)
WiFiMulti.addAP(STASSID, STAPSK);
while (WiFiMulti.run() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
#elif defined(ESP32)
WiFi.begin(STASSID, STAPSK);
while (!WiFi.isConnected()) {
Serial.print('.');
delay(1000);
}
#else
#error only ESP32 or ESP8266 supported at the moment
#endif
Serial.println(F(" connected!"));

/*
 * Initialize the OCPP library
 */
ocpp_initialize(OCPP_HOST, OCPP_PORT, OCPP_URL, "J1", "Tronic");

/*
 * Integrate OCPP functionality. You can leave out the following part if your EVSE doesn't need it.
 */
 setEnergyMeterInput([]() {
     //take the energy register of the main electricity meter and return the value in watt-hours

     return 10.f;
});

addMeterValueInput({return 10;}, "Power.Active.Import", "kW", nullptr, nullptr, 1);
addMeterValueInput({return 100;}, "Energy.Active.Import.Register", "kWh", nullptr, nullptr, 1);
addMeterValueInput({ return 10; },"Current.import","A");
addMeterValueInput({return 120;}, "Voltage", "V", nullptr, "L1", 1);
std::shared_ptr<ArduinoOcpp::Configuration<const char *>> mvSampledData = ArduinoOcpp::declareConfiguration<const char *>(
"MeterValuesSampledData", "", CONFIGURATION_FN);
const char *example = *mvSampledData; //example: read value of configuration
*mvSampledData = "Power.Active.Import,Energy.Active.Import.Register,Voltage,Current.Import"; //example: update configuration value
ArduinoOcpp::configuration_save(); //write configs file back to flash immediately (not really necessary though)
setSmartChargingCurrentOutput([](float limit) {
//set the SAE J1772 Control Pilot value here
Serial.printf("[main] Smart Charging allows maximum charge rate: %.0f\n", limit);
});
}
void loop() {
/*
 * Do all OCPP stuff (process WebSocket input, send recorded meter values to Central System, etc.)
 */
ocpp_loop();

//startTransaction("0123456789ABCD");
/*
* Energize EV plug if OCPP transaction is up and running
*/
if (ocppPermitsCharge()) {  /status updated to charging/
//OCPP set up and transaction running. Energize the EV plug here
} else {  /*status updated to finishing*/
    //No transaction running at the moment. De-energize EV plug

}

/*
 * Use NFC reader to start and stop transactions
 */
if (/* RFID chip detected? */ false) {
    String idTag = "0123456789ABCD"; //e.g. idTag = RFID.readIdTag();

    if (!getTransaction()) {
        //no transaction running or preparing. Begin a new transaction
        Serial.printf("[main] Begin Transaction with idTag %s\n", idTag.c_str());

        /*
         * Begin Transaction. The OCPP lib will prepare transaction by checking the Authorization
         * and listen to the ConnectorPlugged Input. When the Authorization succeeds and an EV
         * is plugged, the OCPP lib will send the StartTransaction
         */
        auto ret = beginTransaction(idTag.c_str());

        if (ret) {
            Serial.println(F("[main] Transaction initiated. OCPP lib will send a StartTransaction when" \
                             "ConnectorPlugged Input becomes true and if the Authorization succeeds"));
        } else {
            Serial.println(F("[main] No transaction initiated"));
        }

    } else {
        //Transaction already initiated. Check if to stop current Tx by RFID card
        if (idTag.equals(getTransactionIdTag())) {
            //card matches -> user can stop Tx
            Serial.println(F("[main] End transaction by RFID card"));

            endTransaction();
        } else {
            Serial.println(F("[main] Cannot end transaction by RFID card (different card?)"));
        }
    }
}

}
Pls find Logs below
[main] Wait for WiFi: . connected!
[AO] info (Connection.cpp:56): Connected to url: /ocpp16/205894
[AO] info (BootNotification.cpp:83): request has been Accepted
[AO] info (StatusNotification.cpp:49): New status: Available (connectorId 0)
[AO] info (StatusNotification.cpp:49): New status: Available (connectorId 1)
[AO] info (SmartChargingService.cpp:523): New limit for connector 1, scheduled at = 2023-09-06T15:28:41.193Z, nextChange = 2037-01-01T00:00:00.000Z, limit = {-1.000000,-1.000000,-1}
[AO] warning (MeteringService.cpp:73): could not find metering device for Current.Import
[AO] warning (ChangeConfiguration.cpp:153): validation failed for key=MeterValuesSampledData value=Current.Import,Current.Offered,Energy.Active.Import.Register,Power.Active.Import,Voltage
[AO] info (TriggerMessage.cpp:29): Execute for message type StatusNotification, connectorId = -1
[AO] info (StatusNotification.cpp:49): New status: Available (connectorId 0)
[AO] info (StatusNotification.cpp:49): New status: Available (connectorId 1)
[AO] info (Connector.cpp:224): Session mngt: trigger StartTransaction
[AO] info (StartTransaction.cpp:48): StartTransaction initiated
[AO] info (StatusNotification.cpp:49): New status: Charging (connectorId 1)
[AO] info (StartTransaction.cpp:142): Request has been accepted

For unable to send voltage and current, update the highlighted code in the MeteringService.cpp.

Same issue. My addMeterValueInput functions don't add anything to the Meter Value request that is sent. Can't send Voltage and Current values. Any idea?


KeExpandKernelStackAndCallout parameters are reversed (Size and Parameter)

From ntddk.h:
NTKERNELAPI
NTSTATUS
KeExpandKernelStackAndCallout (
    _In_ PEXPAND_STACK_CALLOUT Callout,
    _In_opt_ PVOID Parameter,
    _In_ SIZE_T Size
    );

wdk-ddi-src/content/storport/nc-storport-hw_adapter_control.md#L514
A space is required after the hash (#) in H1. See http://aka.ms/MarkdownHeadings for more information.

Hash (#) is part of listing:

#define STOR_FILTER_RESOURCE_REQUIREMENTS_V1 0x1


Pan event doesn't work correctly with touch-action pan-y in Chrome 55

Before upgrade to Chrome 55.0.2883.59 beta (64-bit), it works fine
but now, when I pulldown in chrome emulator , the panmove event just triggered once or twice, and the event data is not correct

this is the right event data when i set touchAction none, but if touchAction is none , the page will not scroll

coarse demo
http://jsbin.com/tevitozuku/edit?output

I have a similar problem - panmove has been working for nearly 2 years, no change to the code and it's stopped.  This is Chromium Version 55.0.2883.75 (64-bit). The event appears to trigger correctly at first but the event data I am capturing (var x = event.changedPointers[0].movementX * -1;var y = event.changedPointers[0].movementY * -1;) appears as 0 values. The event will then trigger with any mouse move (not pan) over the bound area.
It appears to work fine in Firefox 50.0.2 but there my bound Tap events are now passing incorrect x/y info.

I think i too am having this issue after updating to Chrome to Version 55.0.2883.75.
All pan directions are a problem for me right now. PanStart fires as expected, but the onPan event fires once only, for that entire gesture.
*Note, it only seems to be a problem while touch emulation is running. If you disable "touch emulation" then everything works as expected.
My guess is the chrome team changed something in the way that chrome emulates device touch events...

+1 and /sub
Im seeing this issue on mobile (android) both chrome and webview :((

Im on mobile so can't edit previous comment :(
Anyway, I wanted to add that it's pan-x (in my case) not working anymore. Also, because i'm seeing this on android, i'm pretty sure they changed the (entire) pointer events on all platforms

+1 , I have the same problem  on pandown/panup and my panend is never triggered .
:(

+1 , I have the same problem on pandown/panup and my panend is never triggered .
:(
+1 This is a very big problem =((

Agreed - I'm going to have to pull hammer out of my project if it remains this way.

Ok, I'm not crazy ^^ I have exactly the same problem.
(Except that in my case, I am on the eve of a release in production !)

looks like chrome team indeed update touch-action options.
they added 'pan-up pan-down pan-left pan-right' with earlier pan-x and pan-y.
link here
they might be interfering with the TOUCH_ACTION constants in hammer.
link here
These properties force the user to start gestures in one direction before the element will respond. This is similar to the "pull-to-refresh" gesture which only responds when the user gestures downwards on the screen.

This line could be the troubling bit.
cc:- @arschmitz

So we're also in the unfortunate predicament of being very, very close to a launch. The app concerned is pretty heavily affected by this bug.
Is there any chance at all, we could get some kind of eta on a potential patch? Or even just an indication of how severe this problem really is (and how complicated the fix will need to be) - would be awesome.
I really don't want to have to rip hammer out of the project (hammer rox!) - but may be forced to if this issue remains for much longer. :(

@glomotion Chrome Dev for Android have the problem too , not only emulator

@zuibunan  Yup. I'm now finding that too. :( I think it was because the Android devices I was testing on were yet to upgrade to Chrome 55. 55 appears to have since rolled out to all our test devices now - and now they all show this problem.

Any one able to find a solution for this problem?

Make sure you set the proper touch-action css attribute for your canvas element.
Ref: https://developers.google.com/web/updates/2016/10/touch-action
My issue got resolved by adding below code in my css
.main-canvas { touch-action: none !important; }

I've done some digging and testing and it looks like the Chrome's new Pointer Events api has some issues:

On desktop it fires pointermove after pointerup
On mobile (android, at least) the touch-action css property does not get inherited by child elements

That last thing might be the problem if you, like me, attached hammer to an element that has children because the event gets cancelled if you start the touch on a child element (it fires pointerdown, pointermove and then pointercancel).
I've created tickets for the issues above on the chromium tracker so you can star those:
https://goo.gl/esp1S5 and https://goo.gl/LesGXI

As an addition to @gargsahil25 solution: make sure the touch-action property is set to all child elements as well:
.main-canvas, .main-canvas * { touch-action: none; }
I recommend not using the !important because you may want to override that property for one or more child elements, like..
.main-canvas .cant-touch-this { touch-action: auto; }
Also, using !important is not a good idea in general and should only be used when needed. Or maybe unless gargsahil25 has a very good reason for using that, of course :)

Thanks @gargsahil25, it worked semi-ok. I have a couple of carousels on the mobile website and this at least made it pan i y-direction as it did before. The only problem is that before Chrome 55 rolled out, I could put my finger on the carousel and scroll up and down on the page, whereas now nothing happens.
So, anyone have an idea about that?

@antipod You want horizontal carousel but have vertical scroll work?
`touch-action: pan-y;
See hammerjs docs:
http://hammerjs.github.io/touch-action/
And:
https://github.com/hammerjs/hammer.js/wiki/How-to-fix-Chrome-35--and-IE10--scrolling-(touch-action)`

@rejhgadellaa I did try that but it doesn't work completely. I can pan in the x direction, and it will allow me to scroll on the page. BUT, hammer.js registers that vertical scroll as a panleft / panright on the carousel and it bugs like it did before, after Chrome updated to 55. Though it only registers it once. Still, this offsets the carousel. Might be a solution there somewhere... I'll find it.

@antipod did you also attach touch-action to all the child elements? see my comment above. I have an implementation like that (with pan-y) and it works for me.

I'm afraid that touch-action on my affected elements didn't solve any of them so sadly it appears to be an incomplete hack.

cc @arschmitz I think this is a little out of my knowledge domain at the moment, if there's a new spec to read I'll read it and a link to new APIs is appreciated but sounds like this may also require some spelunking on how the new stuff works?

When I use v2.04 or the latest version v2.08 Nov, this doesn't allow me to pan or swipe in Chrome 55. However, with v2.08 Apr, distributed version irons out all the bugs I got. I don't use touch-action at all. So someone like me should use the distributed version first before trying anything else.

Again, using the Apr distributed version (I'm assuming by that you mean the .min.js file) === no dice (I was using that version all along).
Noting that the Hammer home page works fine and demos the functionality that I previously had working with panmove, I had a look at the code. I see there that you use the event.deltaX/Y values where I had been using the event.changedPointers[0].movementX/Y values. However adapting my code to use these did not result in a fix as e.g. changing direction mid-pan is not reflected by these values (as they are deltas).
@runspired & @arschmitz I really apologise for telling you guys what to do, but it strikes me that if the developers of the world's most popular browser decide to alter their internal API and that impinges directly on your maintained project's functionality, then you're going to have to bite the bullet and re-factor. Or be maintainers of an increasingly out-of-date project.

And if it's any consolation (and I know it isn't) I've had Google do this to me on multiple occasions also :(

@BossLevel Can you adapt your code something like this? In firefox, two values are the same most of the time except outside the boundaries.
var pY=0;
// listen to events...
mc.on("panleft panright panup pandown tap press", function(ev) {
    myElement.textContent = ev.type +" gesture detected." + ev.changedPointers[0].movementY + " " + (ev.deltaY - pY);
   pY = ev.deltaY;
});

@hanwiz - thanks for your time and effort - the good news is that with some slight modifications, your code works :)
2 points to make before documenting said modifications:

I had wanted to avoid the use of some "globals" (pY - I know it's not a proper global) as it seemed redundant to have to manage these when Hammer was meant to be doing it for me.  However given the ease and speed of implementation utilising these, needs must.
FYI, as per my original post, the ev.changedPointers[0].movementX/movementY values are always zero for me, no matter where and how fast I pan.

With that in mind, line 14 of your pen can be reduced to myElement.textContent = ev.type +" gesture detected." + (ev.deltaY - pY);
In addition, after ending a panmove, the next pan jerks initially. To remove this add the additional following binding:
mc.on('panend', function(event) {
			pX = 0;
			pY = 0;
		});

I still think something needs to be done about this issue (or at least have an example/documentation on the site) but that's your business and I once again thank you for your efforts, particularly @hanwiz

Adding the "touch-action: pan-y" to the affected scrollable element (and it's descendants) solved the issue for me. Here's the SASS class that I used:
`
.scroll-and-swipe {
overflow-y: scroll;
touch-action: pan-y !important;
-webkit-overflow-scrolling: touch;
& * {
  touch-action: pan-y !important;
}

}
`

So I'm still having quite a few problems with Hammer.
Even the simplest examples of hammer seem to be broken in Chrome (with touch emulation enabled) atm.
Also, having padding applied to the hammer bound element also seems to cause issues with offset calcs.
http://codepen.io/creative-lab-sydney/pen/ygyMMO

One of the Chromium tickets mentioned above has been fixed
https://bugs.chromium.org/p/chromium/issues/detail?id=161464
Would it fix this issue or the Hammer team should still make a fix?

@antipod - I noticed on chrome (at least in the touch emulation), that when I get the bogus pan event on vertical scroll, the srcEvent.type is pointercancel.
So a quick ugly work around is to set a panning event to true on pan-start only if the srcEvent.type isnt pointercancel (else false)
Then on your horizontal pan handler, only if panning is true, do your actual stuff. Otherwise, preventDefault.  I haven't fully vetted this out yet but it seems to work initially.
Hope this helps!

I followed @Mathews2115  steps above and it seems to be working for me.  I did not find that the sass rules impacted this.
I made a quick slider with some scrolling to test out in:
Three 'full screen' columns with a footer.
http://codepen.io/alexanderwiebe/pen/qRvbOY
For all events I would wrap existing event code with the following statement:
if(ev.srcEvent.type !== 'pointercancel'){
Are there any other effects of ignoring pointercancel in other browsers ?  I haven't found any in quick testing.

@Mathews2115 has your workaround been behaving well? Would it be hard to do this in hammerjs itself?
I don't understand how the bogus event comes to be, for me it only happens when I pan across a certain area of my screen…

@wmertens So far so good on my end.

fixed with the same
if(ev.srcEvent.type !== 'pointercancel'){
however, 50% of my pans are marked as canceled, which are rejected

@glomotion Thank you very much, it works correctly when i do it as you said.

@blackswanny - I think I'm seeing similar behavior where many of the pans aren't being recognized right on Android, I made a project to reproduce the issue and #1118 as a simple fix that improves the case I'm running into at least

Got the same issue yesterday during the work with Hammer.js. Here is the solution:
// by default, it only adds horizontal recognizers
var mc = new Hammer(myElement);

// let the pan gesture support all directions.
// this will block the vertical scrolling on a touch-device while on the element
mc.get('pan').set({ direction: Hammer.DIRECTION_ALL });```

same problem here.

@web-jenezis : your solution worked for me. I saw that the pointercancel event type pointed out by @alexanderwiebe was indeed causing the bad deltaX and deltaY values, but as @blackswanny commented, some interactions were nearly all pointercancel events, so discarding them would occasionally cause the pan to be almost completely unresponsive. Setting the pan direction caused the pointercancel events to stop firing altogether.

@web-jenezis @malina-kirn  I used Hammer for React and not sure that directions prop is passed to hammer, cause i still see issues with it

 <Hammer
            direction={Hammer.DIRECTION_ALL}
            onPan={this.onPan}
            onPanEnd={this.onPanEnd}
            onPanStart={this.onPanStart}
            onDoubleTap={this.onDoubleTap}
            options={{
                recognizers: {
                    swipe: {
                        enable: false
                    },
                    pinch: {
                        enable: false
                    },
                    press: {
                        enable: false
                    },
                    pan: {
                        enable: true
                    },
                    tap: {
                        enable: true
                    }
                }
            }}>

@blackswanny : as @web-jenezis pointed out, setting the direction attribute blocks vertical scroll on the element. Perhaps you can block native vertical scroll instead of setting direction? This also seems to work for me:
CSS:
.no-scroll .scroll-content{
  overflow: hidden;
}

Add the no-scroll class to the element you're panning. I'd previously tried this on outer elements (blocking scroll on the entire page), but it seems it must be applied directly to the element being panned. I suspect it would have worked if I'd applied the rule to all child elements.

add:
delete window.PointerEvent;
in your index.html PRIOR to loading hammer.js, and it will ignore those events.
You can also set SUPPORT_POINTER_EVENTS = false; (line 384 of v2.0.8) to do the same thing.
Ideally the devs would add the ability to turn this off, but so goes the open source dilemma...

@garyskiba
easier solution if you add the
var SUPPORT_POINTER_EVENTS = false; line at the beginning of your file.
It's dirty but at least don't touch the hammer.js itself

@fssrepository , according to what i see it's not global var and we can't override it so hammer will pick up another value. But I would rather change this var than override native PointerEvent, cause not like to affect other parts of app

@garyskiba @fssrepository Both solutions brakes 'press' if u are unfornate as me if u want to use both 'pan' and 'press' with hammerJS globally available

On the parent wrapper:
touch-event: none
The element inside the wrapper I wanted to be able to scroll vertically:
touch-event: pan-y
Solved it for me!

I have tried
if (ev.eventType !== Hammer.INPUT_MOVE) return;

in my handler. this saves me from the trouble.

Thanks @divisey
That combo works fine to me:
var mc = new Hammer(kek, {
    recognizers: [
        [Hammer.Pan, { direction: Hammer.DIRECTION_HORIZONTAL, pointers: 1, threshold: 10 }]
    ]
});

mc.on('panright panleft', function(ev) {
    ev.preventDefault();
    if (ev.eventType !== Hammer.INPUT_MOVE) return;
    if (ev.pointerType == 'touch' && (Math.abs(ev.deltaX) <= Math.abs(ev.deltaY)+5)) return;

    ...
    your code
    ...
});

I was also getting a lot of premature pointercancel events while panning on Chrome. This ended up working for me:
Adding the touch-event: pan-y property to the child div inside the parent Hammer container. So for the hammer container, I left the default settings (which applies "touch-event: pan-y"), and didn't have to add "touch-events: none" anywhere.


Download Pipeline Artifact reports that drop/Linux_Phase is not a valid artifact names

Download Pipeline Artifact task reports that "drop/Linux_Phase" is not a valid artifact name, which is not correct.
Artifact names can contain / for sure. I can download such drop using the following command:
az pipelines runs artifact download --artifact-name 'drop/Linux_Phase' --path c:\tmp\drop2 --run-id 32568578
The bug is here: https://github.com/microsoft/azure-pipelines-agent/blob/5e79b331809d8074ba6d7be4d3b9cad18a75c115/src/Agent.Plugins/PipelineArtifact/PipelineArtifactPluginUtil.cs#L21

@johnterickson Do you have any context for this restriction?

IIRC this was intentional to avoid the buggy behavior of Build Artifacts.
In Build Artifacts, a command line az pipelines runs artifact download --artifact-name 'drop/Linux_Phase' --path c:\tmp\drop2 --run-id 32568578 could mean either download the contents of:

An artifact published with the name "drop/Linux_Phase" with a file at "file.txt" with the contents "good".
An artifact published with the name "drop" with a file at "Linux_Phase/file.txt" with the contents "evil".

Assuming I am recalling the above correctly, we should probably add a message explaining this in PIpeline Artifacts.