docs: outline the approaches for exposing consoles

Add a document that examines the way that VNC, SPICE and serial
consoles can be exposed to tenant users from Kubevirt, and
outlines the supportable scenarios and implementation notes.
Signed-off-by: Daniel P. Berrange<EMAIL_ADDRESS>

This PR is completely unrelated to berrange:dco, so should probably be rebased onto master.

Opps, my origin was pointing to the wrong repo. Rebased to current master now

I think this proposal is valuable, as it outlines a clear approach how VMs can be accessed from the outside, even with the disagreement around where the resolver should live.
@berrange would you reopen or repush this pr?
@michalskrivanek how does this solution work for you?

let me add that for the resolver issue - let's start with one method, and then see how it works.
To me the separation of the logic looks flexible enough to change this over time.

#dontforget


Fix typo in README.md

TypeError: Cannot read property 'get' of undefined - nexmo.application.get - application is undefined. Should be nexmo.applications.get

Thanks for the PR!


sdparm: 1.10 -> 1.11r320

Semi-automatic update generated by https://github.com/ryantm/nixpkgs-update tools. This update was made based on information from https://repology.org/metapackage/sdparm/versions.
meta.description for sdparm is: '"A utility to access SCSI device parameters"'.

Checks done (click to expand)

built on NixOS
/nix/store/rl94szf8q72riabp0gnsf07r5356b9z8-sdparm-1.11r320/bin/sas_disk_blink passed the binary check.
/nix/store/rl94szf8q72riabp0gnsf07r5356b9z8-sdparm-1.11r320/bin/scsi_ch_swp passed the binary check.
/nix/store/rl94szf8q72riabp0gnsf07r5356b9z8-sdparm-1.11r320/bin/sdparm passed the binary check.
3 of 3 passed binary check by having a zero exit code.
0 of 3 passed binary check by having the new version present in output.
directory tree listing: https://gist.github.com/211ca5f719457ef10f70dbc3dc2551c6
du listing: https://gist.github.com/89c6e345480aa9ad66fe4feb454ccf52

Rebuild report (if merged into master) (click to expand)

3 total rebuild path(s)
1 package rebuild(s)
1 x86_64-linux rebuild(s)
1 i686-linux rebuild(s)
0 x86_64-darwin rebuild(s)
1 aarch64-linux rebuild(s)
First fifty rebuilds by attrpath
sdparm

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/rl94szf8q72riabp0gnsf07r5356b9z8-sdparm-1.11r320 \
  --option binary-caches 'https://cache.nixos.org/ https://r-ryantm.cachix.org/' \
  --option trusted-public-keys '
  r-ryantm.cachix.org-1:gkUbLkouDAyvBdpBX0JOdIiD2/DP1ldF3Z3Y6Gqcc4c=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(r-ryantm's Cachix cache is only trusted for this store-path realization.)
Or, build yourself:
nix-build -A sdparm https://github.com/r-ryantm/nixpkgs/archive/9592a90ddbc006b7cf3718198bcf030a8fcc06fe.tar.gz

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/rl94szf8q72riabp0gnsf07r5356b9z8-sdparm-1.11r320
ls -la /nix/store/rl94szf8q72riabp0gnsf07r5356b9z8-sdparm-1.11r320/bin

Same as #56739 . This is a beta release according to http://sg.danny.cz/sg/sdparm.html, we shouldn't merge it.
@ryantm can you blacklist this or modify the version pattern to ignore betas?


Proper display of the wide character strings in the output

Description
The output of the test result doesn't really seem to work well with the wide character strings, a.k.a. std::wstrings.
It sould be nice to use the wide strings without worrying about converting them to normal strings.
Steps to reproduce
If this check fails, (GetText returns a std::wstring object)
CHECK(text_editor_simulator.GetText() == L"static_cast<int>(floatValue);");

The report looks like this:
Original: CHECK(text_editor_simulator.GetText() == L"static_cast<int>(floatValue);")
Expanded: CHECK({?} == [{?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}])

Yikes, the wide string literal has even got printed as an array!
I can partially workaround like this:
const std::wstring s = text_editor_simulator.GetText();
CHECK(std::string{ s.begin(), s.end() } == "static_cast<int>(floatValue한국어);");

... But since this kind of conversion is indeed incorrect, the output string will be corrupted. (Note the \m\xB4)
Original: CHECK(std::string{ s.begin(), s.end() } == "static_cast<int>(floatValue한국어);")
Expanded: CHECK(static_cast<int>(floatValue\m\xB4) == static_cast<int>(floatValue한국어);)

Finally, If I do the conversion from utf16 to utf8 properly, (I used uni-algo's una::utf16to8)
const std::string a = to_u8_string(text_editor_simulator.GetText());
const std::string b = to_u8_string(L"static_cast<int>(floatValue한국어);");
CHECK(a == b);

I can get the result I wanted then.
Original: CHECK(a == b)
Expanded: CHECK(static_cast<int>(floatValue한국어) == static_cast<int>(floatValue한국어);)

While there is a way to get the desired output, it needs some extra conversion. So it would be nice to have a native support for the wide strings.
Extra information

doctest version: v2.4.11
Operating System: Windows 10
Compiler+version: Microsoft Visual Studio Community 2022 (64-bit) Version 17.6.2

Update: Came up with a better solution while reading the source.
Adding this partial specialization will convert all the wide character strings including std::wstring, std::wstring_view, wchar_t[], etc. when formatting them for the outputs.
#include <uni-algo/conv.h>

namespace doctest
{
template<std::convertible_to<std::wstring_view> T>
struct StringMaker<T>
{
    static String convert(const T& value)
    {
        const std::string s = una::utf16to8(value);
        return String{ s.c_str() };
    }
};
}

However, the wide character strings don't necessarily use the utf-16 encoding. In my case they do, so I can work with it but the best solution will be the native support for the wide character strings :)
side note: I tracked down how the Expanded output formats the objects and found the line "No stringification detected for type T. See string conversion manual". I was surprised that there is a document for this and the code actually hints it. Great work!

However, the wide character strings don't necessarily use the utf-16 encoding. In my case they do, so I can work with it but the best solution will be the native support for the wide character strings :)

Exactly, hence no default formatter for it! ;)
I took me some tome to grok what is going on here, now I finally got it!
A small reproducer to show chat is going on (I see you also figured out that there is a different between a wchar array and a wchar pointer)
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include <doctest/doctest.h>

TEST_CASE("783")
{
    std::wstring text = L"hello, wstring";
    const wchar_t *wchar_ptr = text.c_str();
    const wchar_t wchar_array[] = L"hellow, wstring";
    CHECK(text == wchar_array);
    CHECK(text == wchar_ptr);
    CHECK(wchar_ptr == wchar_array);
}

produces
[doctest] doctest version is "2.4.11"
[doctest] run with "--help" for options
===============================================================================
main.cpp:4:
TEST CASE:  783

main.cpp:11: ERROR: CHECK( wchar_ptr == wchar_array ) is NOT correct!
  values: CHECK( 0x64cbc9bcaee0 == [{?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}] )

===============================================================================
[doctest] test cases: 1 | 0 passed | 1 failed | 0 skipped
[doctest] assertions: 3 | 2 passed | 1 failed |
[doctest] Status: FAILURE!

I believe this is by design since doctest can not know if your wchar* is a pointer to array or a pointer to a single wchar.

side note: I tracked down how the Expanded output formats the objects and found the line "No stringification detected for type T. See string conversion manual". I was surprised that there is a document for this and the code actually hints it. Great work!

Just to clarify for other readers, if you #define DOCTEST_CONFIG_REQUIRE_STRINGIFICATION_FOR_ALL_USED_TYPES this type of error will be detected at compile time, see here: https://github.com/doctest/doctest/blob/master/doc/markdown/configuration.md#doctest_config_require_stringification_for_all_used_types


Literal type plus `RadioButtons

When you combine a field with a Literal and the RadioButtons type, magicclass doesn't seem to render anything:
from magicclass import magicclass, field
from typing import Literal

@magicclass
class Gui:
    foo = field(Literal["a", "b", "c"], widget_type="RadioButtons")

Gui().show(run=True)

It seems to be a bug of magicgui.
I opened an issue here.


Rate Limit Plugin: Re-enable VConnection when SNI is empty

When the rate limit plugin is used as a global plugin, the VConnection without SNI should be re-enabled immediately.

Cherry-picked to v9.1.x branch.
Cherry-picked to v9.2.x


fix(cli): prevent early returning on init cmd

Description
When I run yarn graphql-codegen init, it just print some options and is ended immediately. So I add await operator to prevent it from early returning.
Related #8162

Type of change

[x] Bug fix (non-breaking change which fixes an issue)

Screenshots/Sandbox (if appropriate/relevant):
yarn graphql-codegen init

How Has This Been Tested?
I haven't tested this. But if it is needed tell me how I can test.
Checklist:

[ ] I have followed the CONTRIBUTING doc and the style guidelines of this project
[x] I have performed a self-review of my own code
[ ] I have commented my code, particularly in hard-to-understand areas
[x] I have made corresponding changes to the documentation
[x] My changes generate no new warnings
[ ] I have added tests that prove my fix is effective or that my feature works
[x] New and existing unit tests pass locally with my changes
[ ] Any dependent changes have been merged and published in downstream modules

Hey @ohsory1324 thanks for this! can you run yarn changeset and add a patch explaining your fix.

Thanks!

 Will wait for CI and cut a release. Thanks!


feat(HierarchyKeyring; CMC): Shared cache across Hierarchy Keyrings

Issue #, if available:
Description of changes:
Adding a new type Shared to the union CacheType in order to allow a shared cache across multiple hierarchy keyrings. The customer will provide an already initialized CryptographicMaterialsCache as an Shared type, which can be shared across multiple Hierarchical Keyrings.
As before, if any other type in CacheType is provided to the Hierarchical Keyring, it will initialize a cache of that type, to be used with only that Hierarchical Keyring. If nothing is provided here, a DefaultCache is initialized to be used with only that Hierarchical Keyring with entryCapacity = 1000.")
If the method CreateCryptographicMaterialsCache is called with this Shared ICryptographicMaterialsCache type as input, it MUST throw an error since the initialized ICryptographicMaterialsCache should already be one of the other types in the union CacheType, that is one out of DefaultCache, NoCache, SingleThreadedCache, MultiThreadedCache, StormTrackingCache.
Note that it doesn't make sense to create a shared Shared cache of type NoCache because NoCache type caches have entry capacity of 0.
Squash/merge commit message, if applicable:
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

meta comment: pls add duvet annotations/comments :)


Etag & Range issues in public buckets

Hi there, the public read has a couple of issues.

The second time you try to download a file you will recieve this error, the string will be different. I have tried this with multiple files. Status Code: 500
TypeError: Conditional ETag should not be wrapped in quotes ("d03c2f258e9fc6e7236f61c130ed1e48").

Range files, specifically m3u8 video files don't work.

Using this: denoflare push https://raw.githubusercontent.com/skymethod/denoflare/v0.5.4/examples/r2-public-read-worker/worker.ts

Here is a working script that works with m3u8 video files & range
interface Env {
  KEMAL: KEMAL
}

function parseRange(encoded: string | null): undefined | { offset: number, length: number } {
  if (encoded === null) {
    return
  }

  const parts = encoded.split("bytes=")[1]?.split("-") ?? []
  if (parts.length !== 2) {
    throw new Error('Not supported to skip specifying the beginning/ending byte at this time')
  }

  return {
    offset: Number(parts[0]),
    length: Number(parts[1]) + 1 - Number(parts[0]),
  }
}

function objectNotFound(objectName: string): Response {
  return new Response(`<html><body>R2 object "<b>${objectName}</b>" not found</body></html>`, {
    status: 404,
    headers: {
      'content-type': 'text/html; charset=UTF-8'
    }
  })
}

export default {
  async fetch(request: Request, env: Env, context: any): Promise<Response> {
    const url = new URL(request.url)
    const objectName = url.pathname.slice(1)

    console.log(`${request.method} object ${objectName}: ${request.url}`)

    if (request.method === 'GET' || request.method === 'HEAD') {
      if (objectName === '') {
        if (request.method == 'HEAD') {
          return new Response(undefined, { status: 400 })
        }

        const options: R2ListOptions = {
          prefix: url.searchParams.get('prefix') ?? undefined,
          delimiter: url.searchParams.get('delimiter') ?? undefined,
          cursor: url.searchParams.get('cursor') ?? undefined,
          include: ['customMetadata', 'httpMetadata'],
        }
        console.log(JSON.stringify(options))

        const listing = await env.KEMAL.list(options)
        return new Response(JSON.stringify(listing), {headers: {
          'content-type': 'application/json; charset=UTF-8',
        }})
      }

      if (request.method === 'GET') {
        const range = parseRange(request.headers.get('range'))
        const object = await env.KEMAL.get(objectName, {
          range,
          onlyIf: request.headers,
        })

        if (object === null) {
          return objectNotFound(objectName)
        }

        // Construct the cache key from the cache URL
        // const cacheKey = new Request(url.toString(), request);
        // const cache = caches.default;

        // Check whether the value is already available in the cache
        // if not, you will need to fetch it from R2, and store it in the cache
        // for future access
        // let response = await cache.match(cacheKey);
        // context.waitUntil(cache.put(cacheKey, response.clone()));

        const headers = new Headers()
        const status = object.body ? (range ? 206 : 200) : 304
        object.writeHttpMetadata(headers)
        headers.set('etag', object.httpEtag)
        headers.set('Access-Control-Allow-Origin', '*')
        headers.set('Cache-Control', 's-max-age=3600');
        const response = new Response(object.body, {
          headers,
          status
        })
        return response
      }

      const object = await env.KEMAL.head(objectName, {
        onlyIf: request.headers,
      })

      if (object === null) {
        return objectNotFound(objectName)
      }

      const headers = new Headers()
      object.writeHttpMetadata(headers)
      headers.set('etag', object.httpEtag)
      return new Response(null, {
        headers,
      })
    }
    if (request.method === 'PUT' || request.method == 'POST') {
      const object = await env.KEMAL.put(objectName, request.body, {
        httpMetadata: request.headers,
      })
      return new Response(null, {
        headers: {
          'etag': object.httpEtag,
        }
      })
    }
    if (request.method === 'DELETE') {
      await env.KEMAL.delete(url.pathname.slice(1))
      return new Response()
    }

    return new Response(`Unsupported method`, {
      status: 400
    })
  }
}

What is the http client in your use case?
m3u8 files do not typically need range requests, do you mean the underlying .ts files?
Any way you can share what your R2 bucket objects look like or how they were uploaded?
I think there is an issue in the v0.5.4 of etag handling, but Range-requests work for me.

Ok fixed the etag handling in commit 46fb4554c2d00297d24bfe48a2eff83b0f29c598, try it out on your side and see if it works in your client setup.
To use the version as of that commit, replace the release tag with the commit hash:
denoflare push https://raw.githubusercontent.com/skymethod/denoflare/46fb4554c2d00297d24bfe48a2eff83b0f29c598/examples/r2-public-read-worker/worker.ts
I tested this myself using an hls generated with: ffmpeg -i input.mp4 -hls_playlist_type vod out.m3u8, and using rclone to upload to an R2 bucket, then testing the m3u8 with iina, quicktime, and the mp4 as well and the browser.  Range requests work fine for me.

Ok fixed the etag handling in commit

Yes that seems to be fixed. The caching solution used is https://github.com/kotx/render and it works. The range video files I had tested extensively and it doesn't work still with denoflare afaik.
If it fails you will see: A network error occurred: manifestLoadError
The best place to test range is here

Ah, I think I see what you're running into: CORS
Take a look at the Error box in that test page and: This might be a CORS issue, which is indeed the case by confirming in dev tools.
I didn't run into this yet, since I'm hosting the content first-party, so CORS is not applicable.
Note your examples hardcode the most permissive CORS policy: headers.set('Access-Control-Allow-Origin', '*')
It's tricky, because a generic public read worker like this denoflare example should not make everything available via CORS by default.
S3 has a way to configure with configuration: https://docs.aws.amazon.com/AmazonS3/latest/userguide/ManageCorsUsing.html
Hopefully R2's native public read functionality will have something similar.
In the meantime, I guess I'll have to add some way of configuring this using another custom env binding.

Ah, I think I see what you're running into: CORS

You are correct. I just changed the cors and it works now. Hopefully R2 will add configs as you said. Right now it's a little finicky with caching, public buckets etc.
function computeHeaders(obj, range) {
    const headers = new Headers();
    obj.writeHttpMetadata(headers);
    console.log('writeHttpMetadata', [
        ...headers
    ].map((v)=>v.join(': ')
    ).join(', '));
    headers.set('content-length', String(obj.size));
    headers.set('etag', obj.httpEtag);
    headers.set('last-modified', obj.uploaded.toUTCString());
    headers.set('Access-Control-Allow-Origin', '*'); <----- HERE
    if (range) headers.set('content-range', computeContentRange(range, obj.size));
    return headers;
}

Update: Doesn't sound like R2 public buckets will have CORS config at launch - so this will indeed still be useful to add to this example in the meantime.
I'll add something before cutting the next minor Denoflare release.

Awesome, it's quite easy to edit atm, if people really need it. It's just a one line operation.

Included in the latest denoflare release v0.5.6.
Added two new optional CORS config vars to the public read example worker and updated the docs: https://denoflare.dev/examples/r2-public-read#configuration
The examples on that page also now show how to provide the most basic and permissive CORS access (Access-Control-Allow-Origin: *)

Nice!

46fb455,

Are you sure the fix here is correct?
I'm running into an issue  where I fetch an R2 image first and it works.
If I reload the image  , I get an error:
Error: Unexpected status 400, code=InvalidArgument, message=Invalid Argument: If-None-Match each ETag must be surrounded by double quotes

If I remove the stripEtagQuoting  it works :
    const etagDoesNotMatch = ifNoneMatch
      ? ifNoneMatch
      : undefined

Strangely, the issue only seems to happen in Chrome, and when running locally.

actually, I can also get it to report the same error with Firefox and a longer mp3 file.
I'm guessing it must be some weird combination of 'range' and 'If-None-Match'

I'll take a look, the requirements around etags have already changed a few times on Cloudflare's side, I'll retest.
You're saying it works fine when running on cf, but not when running denoflare serve locally?
I'm assuming you're using the latest version of the public read worker?

I was able to reproduce quickly locally (denoflare serve), production seems fine.
Looks like they did indeed change etag validation requirements, but this time in their S3-implementation, not the worker bindings.
Just posted a fix in commit c051c53ff6f1dbad10d5fd4439e0f892c56572a3, can you verify it on your side?
To try this version, just substitute denoflare/v0.5.8 with denoflare/c051c53ff6f1dbad10d5fd4439e0f892c56572a3 in the instructions on the R2 public read guide page

I still the same issue.
Output from the example worker in recent chrome using denoflare serve:
Bundled https://raw.githubusercontent.com/skymethod/denoflare/v0.5.8/cli-webworker/worker.ts (process) in 1472ms
runScript: https://raw.githubusercontent.com/skymethod/denoflare/c051c53ff6f1dbad10d5fd4439e0f892c56572a3/examples/r2-public-read-worker/worker.ts
Bundled https://raw.githubusercontent.com/skymethod/denoflare/c051c53ff6f1dbad10d5fd4439e0f892c56572a3/examples/r2-public-read-worker/worker.ts (process) in 17ms
worker: start
Started in 1786ms (isolation=isolate)
Local server running on http://localhost:3000
fetchExternalIp: Fetching...
fetchExternalIp: Determined to be <IP_ADDRESS> in 127ms
GET http://localhost:3000/images/711-pictograms.jpg
{"flags":[]}
request headers:
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9,de-AT;q=0.8,de;q=0.7,es-US;q=0.6,es;q=0.5
cache-control: max-age=0
cf-connecting-ip: <IP_ADDRESS>
cf-ray: 8808ce8362916cca
connection: keep-alive
cookie: connect.sid=<blah>
dnt: 1
host: localhost:3000
if-modified-since: Sun, 04 Sep 2022 23:58:08 GMT
if-none-match: "197413f08652a6bc89f7f4181ead90d3"
sec-ch-ua: "Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "macOS"
sec-fetch-dest: document
sec-fetch-mode: navigate
sec-fetch-site: none
sec-fetch-user: ?1
upgrade-insecure-requests: 1
user-agent: <blah>
bucket.get images/711-pictograms.jpg {"onlyIf":{"etagDoesNotMatch":"197413f08652a6bc89f7f4181ead90d3","uploadedAfter":"2022-09-04T23:58:09.000Z"}}

error displayed in browser:
Error: Unexpected status 400, code=InvalidArgument, message=Invalid Argument: If-None-Match each ETag must be surrounded by double quotes, got '197413f08652a6bc89f7f4181ead90d3'.
    at throwIfUnexpectedStatus (https://raw.githubusercontent.com/skymethod/denoflare/v0.5.8/common/r2/r2.ts:147:11)
    at async getOrHeadObject (https://raw.githubusercontent.com/skymethod/denoflare/v0.5.8/common/r2/get_head_object.ts:36:5)
    at async getObject (https://raw.githubusercontent.com/skymethod/denoflare/v0.5.8/common/r2/get_head_object.ts:6:12)
    at async ApiR2Bucket.get (https://raw.githubusercontent.com/skymethod/denoflare/v0.5.8/cli/api_r2_bucket.ts:60:21)
    at async https://raw.githubusercontent.com/skymethod/denoflare/v0.5.8/common/rpc_r2_bucket.ts:39:34
    at async RpcChannel.receiveMessage (https://raw.githubusercontent.com/skymethod/denoflare/v0.5.8/common/rpc_channel.ts:41:36)
    at async Worker.worker.onmessage (https://raw.githubusercontent.com/skymethod/denoflare/v0.5.8/cli/worker_manager.ts:70:17)

Sorry, my fault - bad instructions.  This fix was in denoflare itself (the way local buckets work), the public-read worker is unchanged.
So you can test locally by installing denoflare as of that commit, by substituting denoflare/v0.5.8 with denoflare/c051c53ff6f1dbad10d5fd4439e0f892c56572a3 in the installation page

disco.  looking good now.

Thanks - since this only affects local dev and there is a temporary workaround for it (installing to a commit), I won't cut an emergency release version for it, but it will go out in the next release


WatchProxyServer

What problem does this PR solve?
#1478
What is changed and how it works?
add watch_stream and watchProxyServer
Check List
Tests

Unit test: to be added if approved.

@nolouch
If the design should be changed, please tell me.
When the design is approved, I would remove the pd-client which is used for test.
:beers:

Codecov Report

Merging #1530 into master will decrease coverage by 0.58%.
The diff coverage is 18.67%.

@@            Coverage Diff             @@
##           master    #1530      +/-   ##
==========================================
- Coverage    67.6%   67.02%   -0.59%
==========================================
  Files         158      159       +1
  Lines       15634    15800     +166
==========================================
+ Hits        10570    10590      +20
- Misses       4101     4254     +153
+ Partials      963      956       -7

Impacted Files
Coverage Δ

server/grpc_service.go
54.83% <0%> (-3.7%)
:arrow_down:

client/client.go
64.11% <0%> (-5.01%)
:arrow_down:

server/server.go
77.94% <100%> (+0.21%)
:arrow_up:

server/watch_stream.go
32.14% <32.14%> (ø)

server/coordinator.go
78.03% <0%> (-6.67%)
:arrow_down:

server/schedulers/shuffle_hot_region.go
64.1% <0%> (-6.42%)
:arrow_down:

server/api/redirector.go
78.94% <0%> (-5.27%)
:arrow_down:

server/util.go
70.86% <0%> (-4.64%)
:arrow_down:

server/schedule/basic_cluster.go
88.67% <0%> (-3.78%)
:arrow_down:

server/leader.go
79.66% <0%> (-1.25%)
:arrow_down:

... and 10 more

Continue to review full report at Codecov.

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

@nolouch
Thanks for your review!
Recently I am a little busy, I would finish it in several days. :beer:

@nolouch
I am recently focuing on libos in the intel-sgx, so sorry for delaying this pr.
I'd like to close this pr temporary.
Sorry!
webb

@bradyjoestar That's ok. Thanks.


(ios) Use fresh lightning-kmp instance for every background operation

A recent ticket has reminded us that IncomingPaymentHandler keeps an in-memory list of pending PaymentParts, and that this can cause issues when the background & foreground processes (on iOS) have a different view of the current state.
Long term, the proper solution is probably to address the in-memory pending variable. However, the exact details are still unknown. And to do it right will take some time.
In the meantime, the following partial-solution has been proposed:

everytime the background process is told to process an incoming push notification, it should use a fresh instance of lightning-kmp (to ensure that potential in-memory state isn't an issue)

A quick refresher on how the foreground/background stuff works on iOS:
To ensure that an iPhone's battery lasts "all day", Apple places many restrictions on an app's ability to use the CPU when the app is in the background. And the hoop they make us jump through is to use something called a "notification service extension". Here's how it works:

we have to create a completely separate mini-process that is capable of handling incoming push notifications in the background
when a push notification arrives for Phoenix, Apple will launch our mini-process
although it's a separate process, it can share a folder & database with the main app process
our mini-process is allowed a maximum of 30 seconds of CPU time
our mini-process is allowed a maximum of 24 MB of memory (if we exceed this limit, iOS will kill it)

What normally happens is:

push notification arrives for Phoenix
iOS launches our mini-process
iOS invokes the didReceive(notification:) method in our mini-process to handle the notification
iOS waits until we invoke the completionHandler with our result
iOS kills our mini-process

However, the last step is not a guarantee. If multiple push notifications arrive, then instead of killing the mini-process, iOS will invoke the didReceive(notification:) method again. It also seems to be the case that iOS may keep the mini-process alive if there's no memory pressure.
And for this reason, it was possible that the lightning-kmp instance was "stale" when processing a push notification. This PR deallocates the lightning-kmp instance after processing each push notification. My primary concern was that this would either leak memory, or cause the mini-process memory footprint to exceed the 24 MB limit. However, in testing, the app maintained a footprint of around 16 MB, even after cycling thru multiple lightning-kmp instances.

Note that this is only a partial solution. In the linked ticket, there was a specific example of the problem with a foreground & background process. This PR fixes that example. But if you simply switched roles (foreground <=> background), the same problem would occur.

Nice, that makes a lot of sense! FWIW I've spent time studying the IncomingPaymentHandler, and thanks to our encrypted channel backup that is automatically restored whenever a new instance connects, I believe the only change we need to ensure we don't end up partially fulfilling payments because of state inconsistencies is to clean up the pending map on disconnections, which I implemented in https://github.com/ACINQ/lightning-kmp/pull/583
It's worth also trying our best to kill the mini-process at the end of its task, because there may be other in-memory state that could cause issues (even though they shouldn't be as severe, as nothing comes to mind that generated support tickets).

I cannot really review the swift code, but the description LGTM. I suppose you are closing coroutines, I guess we will see if our not missing anything in PhoenixBusiness.stop()! That's quite a list of things to cancel 😁


Better specify ATECC508A variant in schematic/bom

The schematic and BOM only specify that the chip is a ATECC508A, which leaves open which of three packages, and two interfaces are used:

It looks to me like the relevant variant is the ATECC508A-MAHDA: can someone confirm that?

Yes, it is -MAHDA indeed.


Compare JS bundling solutions

Set up https://www.npmjs.com/package/webpack-closure-compiler and run some size and performance benchmarks comparing it to our current webpack config.
See https://github.com/nolanlawson/cost-of-small-modules.
cc @KimberlyMunoz @sebworks @virginiacc

:+1:

yeah, lets do it. I think we can reduce our JavaScript footprint by 50%.


Remove build artifacts in .out directory when built-type or target-type changes

With output-dir it is possible to use one directory for all build-type or target-types.
https://github.com/ReinhardKeil/csolution-examples shows how this could be applied.  The picture below shows a build with *cm0*.Debug and *cm4.Release build which is easy to identify by the *.log file names:

A problem is now when the build-types are changed, therefore I suggest to implement this additional behavior in the build process.
When a build process starts, the build tool should check if there is a log file with the current build/target-type. If this does not exist, the build output artifacts cannot be reused and to ensure a proper rebuild, the build tool could simply delete all files with the name ., in the example above Hello.. This would ensure that a change of build/target-type in a build context manager would remove inconsistent artifacts.

see cmsis-toolbox 2.0.0-dev0


System.ArgumentOutOfRangeException at AWBWApp.Game.API.Replay.AWBWJsonReplayParser.readString

System.AggregateException: Failed to parse replay with path: C:\Users\docto\OneDrive\Desktop\All League Replays\1vs1 Chosin Reservoir\594794.zip (Specified argument was out of the range of valid values.)
 ---> System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
   at AWBWApp.Game.API.Replay.AWBWJsonReplayParser.readString(ReadOnlySpan1 text, Int32& index)
   at AWBWApp.Game.API.Replay.AWBWJsonReplayParser.readReplayActionTurn(ReplayData replayData, ReadOnlySpan1 text, Int32& textIndex)
   at AWBWApp.Game.API.Replay.AWBWJsonReplayParser.readReplayActions(ReplayData replayData, ReadOnlySpan`1 text)
   at AWBWApp.Game.API.Replay.AWBWJsonReplayParser.ParseReplayZip(ZipArchive zipArchive)
   at AWBWApp.Game.IO.ReplayManager.ParseAndStoreReplay(String path)
   --- End of inner exception stack trace ---
   at AWBWApp.Game.IO.ReplayManager.ParseAndStoreReplay(String path)
   at AWBWApp.Game.AWBWAppGameBase.ImportFiles(ProgressNotification updateNotification, String[] paths)

594794.zip

This is a replay corruption issue. Just a very unique one as decompressing the text doesn't detect it.
Technically under #99.


On navigating to some books from History, the header does not update for the current book- Tamil content for ESV book

On navigating to a book from history, for some books, the header does not update for the current book.
English ESV on the header displays with Tamil content.
*In such cases, note folder does not reflect for newly created notes and so does bookmarks (appears for existing notes)


bump react version to 16.4.1

fixes https://github.com/reach/router/issues/27

sweeeeeeeet

excellent, thanks!

thank you for acting so fast - because of that i was able to deploy boring-ssg with no issues at all 🤗

Hi @ryanflorence - Sorry to post in a closed issue, when is this going to be released?


PT109 not imported, other movie duplicated but wrong

Version: 2.9.2
Build: 2017-01-27 15:08
OS: Windows Server 2012 R2 6.3
JDK: 1.8.0_101 amd64 Oracle Corporation
What is the actual behaviour?
I have a folder on my raid (F:movies done), within this folder are my movies in separate folders.
Every time I move the movie PT109 into the folder movies done and tell tiny media to rescan, PT109 does not show up in the list but some other movie is duplicated And 2 JPG files are placed in the root at movies done folder.
What is the expected behaviour?
The rescan of the root folder to show PT109
Steps to reproduce:
f:movies done
known good movies in separate folders moved into the root.
Scan for movies
Move PT109 folder into root
Rescan for new movies
Additional
Have you attached the logfile from the day it happened?
No, the system give me the error "We don't support that file type.
I verified it was a ZIP file

dunno whats the issue on github is - it works for some users, but don't for others :|
Can you please send us the tmm.log via http://www.tinymediamanager.org/contact/ ?

Done.Let me know if you do not get it
  From: Myron<EMAIL_ADDRESS>
To: tinyMediaManager/tinyMediaManager<EMAIL_ADDRESS>Cc: bobreese<EMAIL_ADDRESS>Author<EMAIL_ADDRESS>Sent: Thursday, February 23, 2017 10:51 AM
Subject: Re: [tinyMediaManager/tinyMediaManager] PT109 not imported, other movie duplicated but wrong (#132)
dunno whats the issue on github is - it works for some users, but don't for others :|Can you please send us the tmm.log via http://www.tinymediamanager.org/contact/ ?—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.

This is a nice one :)
The folder "PT109" gets falsely detect as a stacking marker (pt = part), so we remove this.
Now we take the parent folder and parse this (the complete storage) and merge all NFOs together.
Please remove the movie from DB, and rename the folder to something different, like "PT boat 109".
Will be fixed for next version...

Thank you!
  From: Myron<EMAIL_ADDRESS>
To: tinyMediaManager/tinyMediaManager<EMAIL_ADDRESS>Cc: bobreese<EMAIL_ADDRESS>Author<EMAIL_ADDRESS>Sent: Thursday, February 23, 2017 1:13 PM
Subject: Re: [tinyMediaManager/tinyMediaManager] PT109 not imported, other movie duplicated but wrong (#132)
This is a nice one :)
The folder "PT109" gets falsely detect as a stacking marker (pt = part), so we remove this.
Now we take the parent folder and parse this (the complete storage) and merge all NFOs together.Please remove the movie from DB, and rename the folder to something different, like "PT boat 109".
Will be fixed for next version...—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.


[BEAM-8471] Flink native job submission for portable pipelines

Add a new Flink entry point (main method) that invokes the external SDK client entry point to generate the pipeline and submits the resulting Flink job like any other Flink native driver program would, via the optimizer plan environment ("[auto]").
Note that in this PR, the SDK client is assumed to be on the same host, which is the case when Flink and Python dependencies are in the same container image, for example. While this is something that can be solved at build time, the question from Robert made me realize that the dependency is almost identical to that between the runner and SDK on the execution side, which is abstracted via the environment concept. So we could, in the future, consider introducing a "client environment" or simply expand the existing environment. This would allow the SDK bits for both pipeline construction and execution to live in a side car container, separate from Flink.

Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

[ ] Choose reviewer(s) and mention them in a comment (R: @username).
[ ] Format the pull request title like [BEAM-XXX] Fixes bug in ApproximateQuantiles, where you replace BEAM-XXX with the appropriate JIRA issue, if applicable. This will automatically link the pull request to the issue.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

See the Contributor Guide for more tips on how to make review process smoother.

R: @chadrik

Thanks for the heads up.  I don't have any input on this, but I do like staying in the loop on this subject!


Rollup build options for bytenode

Would be lovely to have more information of how the build process works as for me to understand how to include rollup options/plugins and manipulate the output process.
Specifically I'm interested on adding rollup-plugin-bytenode within the build process but couldn't figure out how to do it exactly.
// vite.config.js:

import bytenode from 'rollup-plugin-bytenode';
const path = require('path');
const srcPath = path.resolve(__dirname, 'src');

module.exports = {
  port: 4000,
  open: false, // do not open the browser as we use electron
  alias: {
    // setup aliases for cleaner imports
    '/~/': srcPath
  },
  optimizeDeps: {
    exclude: [
      'path',
      'electron-window-state',
      'electron-context-menu'
    ]
  },
  rollupInputOptions: {
    input: 'src/main.js',
    output: [
      {
        file: 'dist/main.js',
        format: 'cjs'
      }
    ],
    plugins: [bytenode()]
  }
};

That configuration doesn't work for you? I think is fine like that.
I've created a plugin for rollup that it's injected in that way and it worked.

Thanks @Aferz.
It's good to know that at least I'm looking in the correct place.
Tried to replace rollupInputOptions with rollupOutputOptions but I get:
Unknown output options: 0. Allowed options: amd, assetFileNames, banner, chunkFileNames, compact, dir, dynamicImportFunction, entryFileNames, esModule, exports, extend, externalLiveBindings, file, footer, format, freeze, globals, hoistTransitiveImports, indent, inlineDynamicImports, interop, intro, manualChunks, minifyInternalExports, name, namespaceToStringTag, noConflict, outro, paths, plugins, preferConst, preserveModules, sourcemap, sourcemapExcludeSources, sourcemapFile, sourcemapPathTransform, strict, systemNullSetters

@gianniskarmas no, that plugins key is for vite related plugins.
You must inject the plugin like this:
// vite.config.js
...

rollupOutputOptions: {
  plugins: [bytenode(yourOptionsHere)]
}

...

Is that what you asked for related to the plugin options?

@Aferz Sorry I wasn't clear.
The 2nd code block above is plugin's demo code for rollup.config.js.
I am just trying to figure out how to pass these rollup options through vite.config.js as to convert specific .js files to .jsc on build.

@gianniskarmas I understand now. I think you could accomplish it by writing this in your vite.config.js:
module.exports = {
  outDir: 'dist',

  rollupInputOptions: {
    input: 'main.js'
  },

  rollupOutputOptions: {
    format: 'cjs',
    entryFileNames: `[name].js`, // Default is `[name].[hash].js`,
    plugins: [
      bytenode()
    ]
  },
}

Thank you @Aferz.
That did the trick to the point, for me to realize, that bytenode cannot get compiled through vite because it does not work in the browser so rollup throws an error when it tries to load v8 to do its job.
Do you happen to have any idea how to overpass this?
Many Thanks for your help.

Mmh I don't know what bytenode does, but I though it just rewrite your bundle applying some transformation? Vite has nothing to do with that. Vite is only for the server part. The browser shouldn't interact with that plugin.
Let me know if I'm right and see if we can find a solution.

@gianniskarmas.You can use vite plugin do it(you need custom transform js code -> jsc). See https://github.com/vitejs/vite/blob/master/playground/plugins/jsPlugin.ts#L4 and https://github.com/vitejs/vite/blob/master/src/node/transform.ts#L26.

Thank you Both,
Basically I am building static files with vite to be used in electron and trying to figure out how and at which point of the rollup compilation process I can use bytenode to compile .js files to v8 .jsc ones.
Right now it throws an error at the time it loads v8.
I think it is better to compile with rollup vite's .js file first as to have it ready for electron-builder.
@underfin I can't understand how to implement the plugin and transform part.
Should I create new 'plugins.js' with the above code and load it within a 'plugins' section like plugins: 'plugins.js'?
Many Thanks

Hope this help you out.
plugins: [{
    transforms: [
      {
        test({ path }) {
          return path.endsWith('a.js')
        },
        async transform({ id, code }) {
          const bundle = await rollup({
            input: id,
            output: [
              {
                file: id,
                format: 'cjs'
              }
            ],
            plugins: [
              bytenode()
            ]
          });

          await bundle.write({ file: id, format: "cjs" });

          return { code: code }
        }
      }
    ]
   }]

Thanks @underfin.
I tried your example but got lost as I didn't see any changes happening and no .jsc files being created.
The file I want to encode is the final main.[hash].js after build. How should I approach this?
My input file to replace a.js I assume it should be src/main.js?
Also what is id and code and where do they derive from?
Couldn't receive any output from console.log within vite.config.js or by using vite --debug.
Many Thanks

I tried your example but got lost as I didn't see any changes happening and no .cjs files being created.

bytenode generate files is .jsc files.await bundle.write({ file: id, format: "cjs" }); this will overwrite your orignal files,please pay attention.You can see test in https://github.com/jakexchan/rollup-plugin-bytenode/blob/master/tests/index.js.

The file I want to encode is the final main.[hash].js after build. How should I approach this?

The builded files is already support this format.If you want to format .jsc files,maybe you need do sth with your self.

My input file to replace a.js I assume it should be src/main.js?

The files which you want to compile .js files to .jsc.

Also what is id and code and where do they derive from?

See https://github.com/vitejs/vite/blob/master/src/node/transform.ts#L8-L31

Couldn't receive any output from console.log within vite.config.js or by using vite --debug.

Maybe you missed some sth, just add console log in plugin, it will output when plugin is called (eg.run vite build)

Maybe you missed some sth, just add console log in plugin, it will output when plugin is called

@underfin see #501 about vite swallowing some logs. I've been able to reproduce the log-swallowing in and outside a plugin.

Any updates?  I struggle with this for long time.....

After trying so many different combinations, I am still confused :/
I read every test and example of bytenode, vite plugins and transforms and whatever I try produces wrong jsc.
Having a loader file inside /src/main.js with just a require to src/mainVite.js as to solve paths (in my case this was a problem) what would be a full example of vite.config.js?
import bytenode from 'rollup-plugin-bytenode';
const { rollup } = require('rollup');
// const { terser } = require('rollup-plugin-terser');
const fs = require('fs');

const path = require('path');
const srcPath = path.resolve(__dirname, 'src');

module.exports = {
  port: 4000,
  open: false, // do not open the browser as we use electron
  alias: {
    // setup aliases for cleaner imports
    '/~/': srcPath
  },
  optimizeDeps: {
    exclude: [
      'path',
      'electron-window-state',
      'electron-context-menu',
      'sendkeys-js',
      'electron-vibrancy-fixforlatest',
      'electron-updater',
      'electron-log',
      'bytenode'
      // 'socket.io-client'
    ]
  },
  outDir: 'dist',
  rollupInputOptions: {
    input: srcPath + '/main.js',
    output: [
      {
        format: 'cjs'
      }
    ]
  },
  rollupOutputOptions: {
    format: 'cjs',
    entryFileNames: `[name].js` // Default is `[name].[hash].js`,
  },
  plugins: [
    {
      transforms: [
        {
          test({ path }) {
            return path.endsWith('main.js') //matched your want compiled files
          },
          async transform({ id, code }) {
            console.log(id);
            console.log(code);
            const bundle = await rollup({
              input: id,
              output: [
                {
                  file: 'dist/_assets/main.js',
                  format: 'cjs'
                }
              ],
              plugins: [
                // terser(),
                bytenode({
                  compileAsModule: true,
                  keepSource: false
                })
              ]
            });
            await bundle.write({ file: id, format: "cjs" });
            const compileFile = path.resolve('dist/_assets/main.js', 'dist/test.jsc');
            // path.resolve(__dirname, 'dist/test-case.jsc');
            fs.existsSync(compileFile);
            return { code: code }
          }
        }
      ]
    }
  ]
};

this output just compiles src/main.js to src/main.jsc.
What I want to do is to compile dist/_assets/main.js to jsc and if possible require that jsc from index.html (also haven't figure that out)
@underfin. @Aferz any help would be greatly appreciated.
Many Thanks

Any update on this?

Its been long

Another point of view: After I packaged the code with WebPack . Start Electron and recurse dist directory to convert JS to JSC, generate js files with the same name to call JSC, and then regenerate to ASAR

@cliqer closing this issue because a lot has changed since it was opened. Feel free to open a new one against the latest Vite version if you think there are still changes needed.


Add CI

[x] linting (comes with Rust, check for pre-commit hook)
[ ] tests and coverage https://github.com/mozilla/grcov

Can use https://github.com/actions-rs/toolchain but for now I just copied parts of https://github.com/rust-lang/log/blob/master/.github/workflows/main.yml

Commented out Windows for now. Need to conditionally run the permissions test (or use some cross-platform code).
error[E0433]: failed to resolve: could not find `unix` in `os`
[171](https://github.com/open-contracting/cardinal-lib/actions/runs/3501669945/jobs/5865513947#step:4:172)
   --> src\lib.rs:135:18
[172](https://github.com/open-contracting/cardinal-lib/actions/runs/3501669945/jobs/5865513947#step:4:173)
    |
[173](https://github.com/open-contracting/cardinal-lib/actions/runs/3501669945/jobs/5865513947#step:4:174)
135 |     use std::os::unix::fs::PermissionsExt;
[174](https://github.com/open-contracting/cardinal-lib/actions/runs/3501669945/jobs/5865513947#step:4:175)
    |                  ^^^^ could not find `unix` in `os`
[175](https://github.com/open-contracting/cardinal-lib/actions/runs/3501669945/jobs/5865513947#step:4:176)

[176](https://github.com/open-contracting/cardinal-lib/actions/runs/3501669945/jobs/5865513947#step:4:177)
error[E0599]: no method named `set_mode` found for struct `Permissions` in the current scope
[177](https://github.com/open-contracting/cardinal-lib/actions/runs/3501669945/jobs/5865513947#step:4:178)
   --> src\lib.rs:165:21
[178](https://github.com/open-contracting/cardinal-lib/actions/runs/3501669945/jobs/5865513947#step:4:179)
    |
[179](https://github.com/open-contracting/cardinal-lib/actions/runs/3501669945/jobs/5865513947#step:4:180)
165 |         permissions.set_mode(0o000);
[180](https://github.com/open-contracting/cardinal-lib/actions/runs/3501669945/jobs/5865513947#step:4:181)
    |                     ^^^^^^^^ method not found in `Permissions`
[181](https://github.com/open-contracting/cardinal-lib/actions/runs/3501669945/jobs/5865513947#step:4:182)

[182](https://github.com/open-contracting/cardinal-lib/actions/runs/3501669945/jobs/5865513947#step:4:183)
Some errors have detailed explanations: E0433, E0599.
[183](https://github.com/open-contracting/cardinal-lib/actions/runs/3501669945/jobs/5865513947#step:4:184)
For more information about an error, try `rustc --explain E0433`.
[184](https://github.com/open-contracting/cardinal-lib/actions/runs/3501669945/jobs/5865513947#step:4:185)
error: could not compile `libocdscardinal` due to 2 previous errors
[185](https://github.com/open-contracting/cardinal-lib/actions/runs/3501669945/jobs/5865513947#step:4:186)
warning: build failed, waiting for other jobs to finish...
[186](https://github.com/open-contracting/cardinal-lib/actions/runs/3501669945/jobs/5865513947#step:4:187)

Coverage: https://coveralls.io/github/open-contracting/cardinal-lib


tN card does not respond correctly after navigating to a verse with no TNs

v0.9.0 build 008141c
Settings are English and test_org
After hitting a verse where there is no tN content, the tN card gets "stuck" showing the "Loading resource..." message. It's unclear to me what causes it to get in sync again.
https://images.zenhubusercontent.com/310359593/2cb59903-6163-4e27-a3cc-883b7602ab4a/issue_184.mp4

Similar to #187

v0.9.0 build 96e267c
tN card loads properly when the content is available. Not seeing the syncing issue.

Not seeing this issue in v0.9.0 build 96e267c. tN card loads the data correctly.

Works correctly in v0.9.0 build 2f4b7ee


Share Video to Feed

Is it possible to share video to feed?

right now its only image to feed and stories, and video to stories. Video to feed i think its easier to do, do you need some help?

Yes if possible. We are trying to share video to feed without the need to save it locally. Do you have a snippet on how to do it? (using UIDocumentController). For some reason sharing using UIActivityController doesn't work properly.. :\


Make constraint solving modes individually toggleable

In order to be able to test our different constraint solving strategies, we should be able to enable/disable the solving modes individually, such that e.g. we can test subtyping without having constraints contracted by the diamond-contractor.

During solving of the test "contracts a larger cycle with more stuff" we get
Debug[Constr]: constr_8 : [worst,global,exact] IsSupremum (τ_5,τ_0) :=: τ_6,
Debug[Constr]: constr_3 : [worst,global,exact] IsLessEqual (τ_3,τ_0),
Debug[Constr]: constr_7 : [global,exact] IsSupremum (τ_4,τ_1) :=: τ_3,
Debug[Constr]: constr_0 : [worst,global,exact] IsLessEqual (τ_0,τ_1)
Debug[Constr]:    - others:
Debug[Constr]: []
Debug[Subtyping]: ~~~~ collapsing cycles of (τ_4,τ_3)
Debug[Subtyping]: ~~~~ graph is fromList [(τ_5,[τ_6]),(τ_3,[τ_0]),(τ_0,[τ_6,τ_1]),(τ_1,[τ_3]),(τ_4,[τ_3])]
Debug[Subtyping]: ~~~~ found cycles [] unifying with τ_3
Debug[Subtyping]: ~~~~ collapsing cycles of (τ_1,τ_3)
Debug[Subtyping]: ~~~~ graph is fromList [(τ_5,[τ_6]),(τ_3,[τ_0]),(τ_0,[τ_6,τ_1]),(τ_1,[τ_3]),(τ_4,[τ_3])]
Debug[Subtyping]: ~~~~ found cycles [] unifying with τ_3

which seems to not find an existing cycle 3 -> 0 -> 1 -> 3.

@ooovi , this does not seem to be a bug with my rewrite, but rather with the cycle solving, right?

closed with 7dbb117


Impl quadrature

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

Project coverage is 99.23%. Comparing base (e4090e6) to head (5f673ff).
Report is 278 commits behind head on main.

Files
Patch %
Lines

russell_lab/src/algo/quadrature.rs
99.50%
2 Missing :warning:

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@            Coverage Diff             @@
##             main      #97      +/-   ##
==========================================
+ Coverage   99.08%   99.23%   +0.15%
==========================================
  Files         146      175      +29
  Lines       32028    39842    +7814
==========================================
+ Hits        31734    39537    +7803
- Misses        294      305      +11

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


Reduced image sizes

This reduces images size from a total of 9.22mb to 6.11mb resulting in a slightly smaller image.
Resolves https://github.com/AmruthPillai/Reactive-Resume/issues/697
I've split the pull requests from https://github.com/AmruthPillai/Reactive-Resume/pull/760 for easier tracking, management, discussion and reverting if required.

LGTM 🚀


Docs CI fails building<EMAIL_ADDRESS>

To mitigate this issue, docs will build for 8.0.0 instead of the latest version. Once this issue is fixed we will need to remove this package from Language-Settings.ps1
Example failing build: https://apidrop.visualstudio.com/Content CI/_build/results?buildId=246384&view=results
Error message:
current package: @azure/batch
current version is : 9.0.0
##[error][User Error]: ./esm/batchServiceClient.d.ts doesn't exist, which is defined in package.json.

##[error]Process completed with exit code 1 and had 1 error(s) written to the error stream.

@danieljurek  v10 is out with the fix, please remove the exception. Thanks!

Still seeing failures when onboarding<EMAIL_ADDRESS>Sample run: https://apidrop.visualstudio.com/Content CI/_build/results?buildId=248375&view=logs&j=fd490c07-0b22-5182-fac9-6d67fe1e939b&t=ce91d5d6-0c55-50f5-8ab9-6695c03ab102
{
  target_repo: {
    url: 'https://github.com/MicrosoftDocs/azure-docs-sdk-node',
    branch: 'smoke-test',
    folder: './'
  },
  npm_package_sources: [ { name: '<EMAIL_ADDRESS>} ],
  source_repos: []
}
=== Install npm packages ===

Start to install npm package<EMAIL_ADDRESS>Finished to install npm package<EMAIL_ADDRESS>current package: @azure/batch
current version is : 10.0.0
##[error][User Error]: ./types/src/batchServiceClient.d.ts doesn't exist, which is defined in package.json.

##[error]Process completed with exit code 1 and had 1 error(s) written to the error stream.

@azure/batch 9.0.0 was released manually since we didn't have track1 data plane release pipelines after mgmt pipelines were removed from main branch. But @azure/batch 10.0.0 was released by release pipelines and artifact was built by following pipeline. I have checked the gulp script and no change was done in this gulp script. Internally it uses npm pack with the help of NPMScope class.  @deyaaeldeen  Are we supposed to run any pre-step before running npm pack?
Released artifact: https://dev.azure.com/azure-sdk/public/_build/results?buildId=1045515&view=artifacts&pathAsName=false&type=publishedArtifacts

@danieljurek we identified the issue and created a patch<EMAIL_ADDRESS>Please let us know if that works for you.

This worked initial testing and has been added back into onboarding. Will reopen this if there are problems.


TC-GR-2.2 - Groups Cluster - RemoveallGroups command not working

1.Problem - when RemoveAllGroups command is sent from TH to DUT , the group still exists in the GroupTable
2.Sequence of steps
removeallgroups - ./chip-tool groups remove-all-groups 1 0
grouptable - ./chip-tool groupkeymanagement read group-table 1 0
3.Test Environment
App used - allclusters app
Platform - Chip-tool - RPI-4, 8GB RAM
DUT - RPI-4, 8GB RAM
Network - Ble-wifi
Commit - 9493d7b48c410f058b85552e1668b33f858afcac
4.Logs
DUT_Logs.txt
TH_Logs.txt

This looks like an issue similar to the one #19221 fixed.  It looks like the two-arg form of GroupDataProviderImpl::RemoveEndpoint duplicates a bunch of the code from the three-arg form, and while the latter was fixed the former was not.
@rcasallas-silabs Could you take a look, please?  Ideally the impls would just be shared as much as possible, to avoid these problems....

Cert Blocker Review: Tagging Cert blocker, keeping assigned to @rcasallas-silabs


added limits.h to resolve MAX_INT on osx

When building new epi-read methyl dackel 0.4.0, I hit a compilation error on INT_MAX

MBias.c:157:35: error: use of undeclared identifier 'INT_MAX'
bam_mplp_set_maxcnt(iter, INT_MAX);

This was fixed by including limits.h in the header for MBias.c

Good catch!


Configure Azure Pipelines

This pipeline configuration builds the application and produces a build for the Release configuration.

asasdd


Added fastlane configuration files

fastlane is an established Continuous Delivery solution for iOS/Mac projects. The configuration files are similar to a Podfile, also Ruby based.
Some examples:

https://github.com/wikimedia/apps-ios-wikipedia/blob/master/fastlane/Fastfile
https://github.com/wikimedia/apps-ios-wikipedia/blob/master/fastlane/Deliverfile
https://github.com/artsy/eidolon/blob/master/fastlane/Fastfile
https://github.com/fastlane/examples/blob/master/MindNode/Fastfile

The configuration files added with this pull request: Fastfile, Deliverfile and Snapfile :+1:

735 Fastfile files but only 80 Snapfile files and 62 Deliverfile files.
@arfon What's the rule for filenames? Are the last two numbers enough?

@pchaigno thanks for the quick reply. Fastfile definitely is the most important one. Just keep in mind, this is a deployment solution for iOS projects. Most companies have their iOS apps closed source and not publicly available.

@arfon What's the rule for filenames? Are the last two numbers enough?

@pchaigno - based on @KrauseFx's comments I ran a quick staff search which gives me high-level stats for all files (not just public ones) and it looks like there are about 600 Snapfile and Deliverfile files on GitHub in total so I think we should include them all.

it looks like there are about 600 Snapfile and Deliverfile files on GitHub in total so I think we should include them all.

Perfect!
@KrauseFx Could you add sample files for these three filenames?

@arfon Great, thank you! :+1:
@pchaigno Sure:

Fastfile
Deliverfile
Snapfile

Thanks again :+1:

Could you add them in the samples/Ruby/filenames/ directory of this pull request?

@pchaigno sure thing, added with https://github.com/KrauseFx/linguist/commit/fd4111cdbe383208a9f9efd498ddb6a88a05f96a
I saw the Podfile was missing there too, so I added an example Podfile as well :+1:

I saw the Podfile was missing there too, so I added an example Podfile as well

Great! Thanks! :zap:

:+1: thanks for this @KrauseFx

Thank you @arfon for taking the time and merging the changes. Really appreciated :+1:

@KrauseFx - my pleasure. These changes will be live in the next release of Linguist


SusanneWindfeldPedersen from OPS portal: Merge from master to live

Docs Build status updates of commit 966c014:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

dynamics-nav/Creating-Filter-Pages-for-Filtering-Tables.md
:white_check_mark:Succeeded

dynamics-nav/MESSAGE-Function--Dialog-.md
:white_check_mark:Succeeded

dynamics-nav/OutStream-WRITETEXT-Function.md
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


⚠ Bofrost.es has degraded performance

In 536e955, Bofrost.es (https://www.bofrost.es) experienced degraded performance:

HTTP code: 200
Response time: 1269 ms

Resolved: Bofrost.es performance has improved in 5bc37fe after 7 minutes.


Update Landscape Entry for mosaik

Changes requested
Change the license to Open Source (mosaik is licensed under LGPL, see the repository here: https://gitlab.com/mosaik/mosaik, most of the adapters are licensed under MIT).
Thank you!
Greetings from the mosaik team

Hi - thanks for this update @eike ! Can you take a look and see if this card looks correct to you?
https://deploy-preview-853--lfenergy.netlify.app/card-mode?selected=mosaik

Oh, sorry, I was imprecise in my original post. mosaik is licensed under LGPL 2.1, not LGPL 3.0. Other than that, it looks good. Thanks!

No worries - check now to see if it's correct.

Yes, perfect. Thank you!


add surface distance calculation

Add a function and example for calculating the distance between two surfaces

Codecov Report

Merging #9 (ff6191f) into main (ecca1d5) will increase coverage by 1.73%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##             main       #9      +/-   ##
==========================================
+ Coverage   82.19%   83.93%   +1.73%
==========================================
  Files          17       18       +1
  Lines         382      417      +35
==========================================
+ Hits          314      350      +36
+ Misses         68       67       -1

Impacted Files
Coverage Δ

src/morphometrics/measure/_tests/test_mesh.py
100.00% <100.00%> (ø)

src/morphometrics/measure/mesh.py
100.00% <100.00%> (ø)

src/morphometrics/utils/surface_utils.py
100.00% <100.00%> (+7.14%)
: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 ecca1d5...ff6191f. Read the comment docs.

https://user-images.githubusercontent.com/1120672/158811914-2ec08f72-92b1-4d3e-af2f-7d824c40ebe6.mov


Syncing master with 4.9.0

Merging 4.9.0 into master

Coverage remained the same at 67.807% when pulling a1b002c355d351f3a7b9544fc0f7a886b2adca50 on v4.9.0 into 0866dcbaa3a5ad5450e8c6239fd3d39156d83196 on master.


Add Randomness to Health and Damage Values

Description

Start enemies at a random health value between 40 and 60.
Start enemies with a random attack value between 10 and 14
Attack damage is random, using robot's attack value as an upper limit (for example, if the player's attack is 10, their damage range is 7-10).

Used Math.random and Math.floor to accomplish this


BAN-2160 Show links in captions

Add support for links in captions of images and embed features.
https://mydevex.atlassian.net/browse/BAN-2160

LGTM.
The code for captions looks pretty similar, I wonder if it makes sense to share it between Embed and Image?

+1 Looks good, I've just added a few minor comments, thanks!

The code for captions looks pretty similar, I wonder if it makes sense to share it between Embed and Image?

Good idea, but if it's gonna take time, I'd say let's merge this now and refactor later because there is already a ticket waiting for this fix.

LGTM.
The code for captions looks pretty similar, I wonder if it makes sense to share it between Embed and Image?

Definitely does. I am pretty confident I have almost the same code in one other place too, but like Oz said, we wanted it to quickly as it is a reopened ticket and this was not really in the original scope as I had not factored links so we want to close it.
I will give all the article json stuff a refactoring/ cleanup with Rubocop soon.


Feature/deselect all

this should close #89 when merged

Coverage increased (+0.1%) to 84.593% when pulling 5db7a9dba0872a20562a0ccb07995fabadf842a2 on feature/deselect-all into 7bd0a63f054a3270c265ba6c0f3fa58f8c8ef6b7 on master.


NewsSource & NewsItem base class setup [Work in progress]

The following tasks are opened in this PR

[ ] Initialize the base class for NewsSource
[ ] Initialize TechCrunchNewsSource class
[ ] Define the the NewsItem{} class to store news in a specific format
[ ] Develop the slash command to get news updates on demand (just doing console.log() for now)

Issues with this approach

Typescript circular dependency issue when deploying the app

Links related to the issue -

https://stackoverflow.com/questions/43176006/typeerror-class-extends-value-undefined-is-not-a-function-or-null
https://stackoverflow.com/questions/37312197/node-js-v6-2-0-class-extends-is-not-a-function-error/37312355#37312355

Hey @umangutkarsh
We can take an alternative approach to avoid the issue you have mentioned,
We can have a single class NewsSource and then have adapter objects for different sources.
For example.
We can have a TechCrunchAdapter
then initialise a new NewsSource using
const newsSource = new NewsSource(new TechCrunchAdapter(...));
or
const newsSource = new NewsSource(TechCrunchAdapter.create(...));

Hey @umangutkarsh We can take an alternative approach to avoid the issue you have mentioned,
We can have a single class NewsSource and then have adapter objects for different sources.
For example. We can have a TechCrunchAdapter then initialise a new NewsSource using
const newsSource = new NewsSource(new TechCrunchAdapter(...));
or
const newsSource = new NewsSource(TechCrunchAdapter.create(...));

Sure, will create a PR using this. Thanks.

Hi @abhinavkrin . Please review the approach once.

LGTM! I will approve this PR. I would suggest to use types instead of anywherever possible.

Sure, will make the changes wherever required.


General Admin Dashboard

Currently the Admin-Dashboard is incomplete. If you try to go to the admin dashboard it will redirect into the user-panel.


MLFlow Custom Pyfunc Model returns NotImplementedError

I created an MLFlow Pyfunc model with the following defintion:
import mlflow.pyfunc

class SimpleModel(mlflow.pyfunc.PythonModel):
    """
    Simple model for testing
    """
    def __init__(self, model):
        self.model = model

    def predict(self, context, inputs):
        sample_output = {
            "output": 123
        }

        return sample_output

I saved this model to my local machine and started MLServer. I wanted to send this payload:
#/v2/models/{model}/infer
{
"inputs": [
        {
            "name": "simple-model",
            "shape": [1],
            "datatype": "string",
            "data": ["test"],
        }
    ]
}

#/invocations
{
"inputs": [{}]
}

I called both the /v2/models/{model}/infer and /invocations endpoint, but I get the following error:
ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/uvicorn/protocols/http/h11_impl.py", line 428, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in __call__
    return await self.app(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/fastapi/applications.py", line 270, in __call__
    await super().__call__(scope, receive, send)
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/starlette/applications.py", line 124, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/starlette/middleware/errors.py", line 184, in __call__
    raise exc
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/starlette/middleware/errors.py", line 162, in __call__
    await self.app(scope, receive, _send)
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/starlette_exporter/middleware.py", line 307, in __call__
    await self.app(scope, receive, wrapped_send)
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/starlette/middleware/gzip.py", line 24, in __call__
    await responder(scope, receive, send)
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/starlette/middleware/gzip.py", line 44, in __call__
    await self.app(scope, receive, self.send_with_gzip)
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
    raise exc
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
    await self.app(scope, receive, sender)
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
    raise e
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/starlette/routing.py", line 706, in __call__
    await route.handle(scope, receive, send)
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/starlette/routing.py", line 66, in app
    response = await func(request)
               ^^^^^^^^^^^^^^^^^^^
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/mlserver/rest/app.py", line 42, in custom_route_handler
    return await original_route_handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/fastapi/routing.py", line 237, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/fastapi/routing.py", line 163, in run_endpoint_function
    return await dependant.call(**values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/mlserver/rest/endpoints.py", line 99, in infer
    inference_response = await self._data_plane.infer(
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/mlserver/handlers/dataplane.py", line 103, in infer
    prediction = await model.predict(payload)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/mlserver/parallel/model.py", line 54, in predict
    inference_response = await self._send(ModelMethods.Predict.value, payload)
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/mlserver/parallel/model.py", line 71, in _send
    response_message = await self._dispatcher.dispatch_request(req_message)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/mlserver/parallel/dispatcher.py", line 99, in dispatch_request
    self._workers_queue_monitor(worker, wpid)
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/site-packages/mlserver/parallel/dispatcher.py", line 114, in _workers_queue_monitor
    queue_size = worker._requests.qsize()
                 ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/miniconda3/envs/mlserver/lib/python3.11/multiprocessing/queues.py", line 126, in qsize
    return self._maxsize - self._sem._semlock._get_value()
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
NotImplementedError

Am I doing anything wrong or is there any issues with my input format or any missing parameters from my model?
Environment details:
MacOS, conda 4.12.0, MLFlow 2.3.1, MLServer 1.3.2

Hey @joshuajorel ,
There's a known issue in the latest MLServer which causes problems with MacOS. You can find the original issue in https://github.com/SeldonIO/MLServer/issues/1122 (you can also track this issue to be notified once a solution is put in place).


Large velocity reset IMU-preintegration!

@rsasaki0109 I used li_sam_ros2 repository and tried to run the casual walk bag but it shows deviation and the map doesnot smooth when it processed. It contains lots of noise. can help me out how to solve this issue cuz I am new to this! Thanks in advance.

Slowing down the playback speed of rosbag might solve the problem.

Slowing down the playback speed of rosbag might solve the problem.

@rsasaki0109 "Arigatou gozaimasu" It worked!!! :) .


Update TGInaccessibleMessage.swift

Always 0.

Hello, ok, but you do not understand one nuance, this code is generated. And at the next release, the generator will delete all your changes.

I understand that you can write it more beautifully, but then you will have to manually check all the classes and changes with your eyes every day. Search manually every day for these changes on the documentation site in the Telegram API. If you're ready for it, you can try it. Now all classes fully comply with the official Telegram API.

if in this class the field is always 0, then this is a question not for this library, but for the developers of the telegram api, I will not make my class changes to the official telegram api, simply because it is convenient at the moment.

didn't know about automatic generation. roger that


Payara 163 Issues

Great tool thank you for publishing.  Seems to fail against Payara 163 however.

If you specified what is the error you're getting I might be able to help, I think I used it in 2016 already.
However 163 is quite old and had quite some issues with asadmin, therefore the script might fail

My bad, I meant the latest version 183.  Closing this issue, apologies.  I will open a new issue, but essentially after install it enters a loop and generates tons of output.


Atom 1.21.1 high CPU usage

Prerequisites

[X] Put an X between the brackets on this line if you have done all of the following:

Reproduced the problem in Safe Mode: http://flight-manual.atom.io/hacking-atom/sections/debugging/#using-safe-mode
Followed all applicable steps in the debugging guide: http://flight-manual.atom.io/hacking-atom/sections/debugging/
Checked the FAQs on the message board for common solutions: https://discuss.atom.io/c/faq
Checked that your issue isn't already filed: https://github.com/issues?utf8=✓&q=is%3Aissue+user%3Aatom
Checked that there is not already an Atom package that provides the described functionality: https://atom.io/packages

Description
After upgrading from atom 1.21.0 to 1.21.1 atom starts to use ~300% CPU at start and then falls back to 100% CPU. It is busy looping, i.e. at some point the CPU fan of the laptop starts to spin up.
The problem disappears after downgrading to 1.21.0.
Steps to Reproduce

Upgrade to 1.21.0
atom --safe --clear--window-state
check CPU usage with top

Expected behavior: [What you expect to happen]
No CPU hogging
Actual behavior: [What actually happens]
Initial 300% CPU usage, drops to 100% after a short while.
Reproduces how often: [What percentage of the time does it reproduce?]
Always
Versions
$ atom --version
Atom    : 1.21.1
Electron: 1.6.15
Chrome  : 56.0.2924.87
Node    : 7.4.0
$ apm --version
apm  1.18.5
npm  3.10.10
node 6.9.5 x64
python 2.7.13
git 2.14.2
$ inxi -SMCG
System:    Host: XXXXX Kernel: 4.13.6-300.fc27.x86_64 x86_64
           bits: 64
           Desktop: KDE Plasma 5.10.5
           Distro: Fedora release 27 (Twenty Seven)
Machine:   Device: laptop System: LENOVO product: 20F90058MS v: ThinkPad T460s serial: N/A
           Mobo: LENOVO model: 20F90058MS v: SDK0J40697 WIN serial: N/A
           UEFI: LENOVO v: N1CET60W (1.28 ) date: 09/26/2017
CPU:       Dual core Intel Core i7-6600U (-HT-MCP-) cache: 4096 KB
           clock speeds: max: 3400 MHz 1: 2800 MHz 2: 2800 MHz 3: 2800 MHz
           4: 2800 MHz
Graphics:  Card: Intel HD Graphics 520
           Display Server: x11 (X.org 119.5 )
           drivers: modesetting (unloaded: fbdev,vesa)
           Resolution<EMAIL_ADDRESS><EMAIL_ADDRESS>           OpenGL: renderer: Mesa DRI Intel HD Graphics 520 (Skylake GT2)
           version: 4.5 Mesa 17.2.2

Additional Information
I also tried latest 1.22.0-beta1 but it didn't fix the issue.
I'm attaching a Javascript CPU Profile I recorded according to the instructions:
CPU-20171027T085826.cpuprofile.gz

Does your projects contain symlink loops? Does changing the watcher backend to "emulated" in your settings-view prevent the problem?

Switching File System Watcher to "Emulated with Atom events" and restarting Atom fixed the issue for me. Thanks. I don't see anything related to File System Watcher in the 1.21.1 release notes, though...
Looks like one of my projects (buildroot.org) creates file system loops during build:
$ find -type l | xargs -I {} find -L {} -type d | wc -l
find: ‘./buildroot-new/output/build/host-gcc-final-6.4.0/build/arm-buildroot-linux-gnueabihf/libstdc++-v3/include/bits/stamp-bits’: Too many levels of symbolic links
find: File system loop detected; ‘./buildroot-new/output/build/attr-2.4.47/include/attr/attr’ is part of the same file system loop as ‘./buildroot-new/output/build/attr-2.4.47/include/attr’.
find: File system loop detected; ‘./buildroot-new/output/build/host-attr-2.4.47/include/attr/attr’ is part of the same file system loop as ‘./buildroot-new/output/build/host-attr-2.4.47/include/attr’.
.... a few more....

After clearing the build area Atom 1.21.1 File System Watcher also works OK with native API.

@stefanb2 Then this issue is a duplicate of https://github.com/atom/atom/issues/15966 you may want to subscribe there for updates.
Can you please add a comment there with the information in your comment? I think it would be helpful for everyone to know that buildroot.org creates these symlink loops. Also include the information about this only happening on Atom 1.21.1. Thank you :bowing_man:

We noticed that this is a duplicate of https://github.com/atom/atom/issues/15966. You may want to subscribe there for updates.
Because we treat our issues list as the Atom team's backlog, we close duplicates to focus our work and not have to touch the same chunk of code for the same reason multiple times. This is also why we may mark something as duplicate that isn't an exact duplicate but is closely related.
For information on how to use GitHub's search feature to find out if something is a duplicate before filing, see the How Can I Contribute? section of the Atom CONTRIBUTING guide.

Thanks for handling this quickly. I was unaware that there were symlink loops in one of my projects, otherwise I would have connected the dots while browsing the open issues list...


Why MvpActivity extends Activity not AppCompatActivity.

Why MvpActivity extends Activity. If We use Activity we can't use toolbar and another design view component in my activity.  Activity like pause when presenter working. Please fixed it.
Thanks

Hi @kazimdsaidul . There is moxy-app-compat module. This contains MvpAppCompatActivity ;)


[select] Revisit/refactor the select component

Expected Behavior
Provide a stateless select component where a selected values can be controlled.
Current Behavior
Currently Select handles selected values within its internal state and doesn't provide any hook to manage the value without actually selecting/deselecting those.

Just merged #373 – which I think addresses this. Feel free to re-open otherwise.


Great Job!Hope to see the released code.

Thanks for your interest! Our paper has just been accepted to ICASSP 2024.
Code has been released with detailed instructions.
Now you can start an experiment easily following instructions in README.
Also, welcome visit our project page for a quick overview of the paper.


Add example how to use the AsyncAuthInterceptor

added example service registration that uses the AsyncAuthInterceptor to request a bearer token

Fixes https://github.com/grpc/grpc-dotnet/issues/1682
Fixes #24132

@JamesNK, I can move this into a .NET 6.0  gRPC client factory app sample and then pull the relevant code snippets back into the topic if there is a version of this code sample you sign off on.
@danm-de,  Thanks for taking the time and effort to provide a code example!

This docs PR has inspired some new features in the gRPC client factory. It should make this much easier. See https://github.com/grpc/grpc-dotnet/pull/1705
Let's pause this PR and then adapt it to the new feature once it's merged.

@danm-de See https://github.com/dotnet/AspNetCore.Docs/pull/25734 for docs on a new auth feature that's being added to grpc-dotnet. It would replace this PR.

Thanks for working on this. A new feature and docs - https://github.com/dotnet/AspNetCore.Docs/pull/25734 - replaces this. Closing


Hello developer, I would like to ask a question about the location of tiles

this is the situation where I directly loaded tiles without making any modifications:

you can see that the position of the building is vertical.Here is a demonstration of my model after making positional changes in the code:

You can see that the positions of some subcomponents have been misplaced，How can I perform the correct position transformation of tiles？Thank you!

this is my tiles file
two_ifctileset.zip

This is not really an issue of the 3d-tiles-tools. The issue tracker should not be used for general support questions. If you want to report a bug in the 3d-tiles-tools, or request a featue, then you can open an issue here. But if you have a general question, then you could alsk at the Cesium Community Forum. There, more people will see your question, and more people will have a chance to answer. And if you ask such a question, then you should include more information. For example: I can see this line scene1.rotate... in the screenshot. But I don't know which framework/library/application you are actually using for rendering the tileset.

However, I did have a short look at the tileset that you provided. And I have to add a disclaimer here: I have to make a few guesses, due to the lack of technical background information. But the problem is very likely caused by the fact that the tileset has a structure that is ... not ideal for "runtime manipulations".
The tileset consists of a single root node/tile. And it has several child tiles. (Each child tile refers to one B3DM file). The child tiles do have a transform matrix that contains a huge translation component. This translation component should probably move the tile data to a certain position on the globe. But the problem is that this translation has to be taken into account when you want to rotate the tileset. Depending on the exact renderer that you are using (and depending on what scene1.rotate... is doing, exactly), the result of applying a rotation may not be what you expect.
I tried to illustrate this here:

The question now is: How can this be solved?
And there is probably no easy, one-fits-all solution. But for the specific tileset that you attached, there may be a way to accomplish the desired goal. Since the structure of the tileset is very simple, you can easily create a new one that has a structure that makes this kind of manipulation easier.
You can use the createTilesetJson command to create a new tileset JSON file from the given B3DM files. When you run
npx 3d-tiles-tools createTilesetJson -i C:\two_ifctileset -o C:\two_ifctileset\tileset-new.json
then it will generate the tileset-new.json that is attached here:
tileset-new.json
This tileset will be located at the origin. This means that it will not include any tile transform matrices. This means that

you have full control over the rotation of the tileset
but you are also responsible for putting the tileset at the desired position on the globe

The following is a sandcastle that shows how this can be done:
const viewer = new Cesium.Viewer("cesiumContainer");

const tileset = viewer.scene.primitives.add(
  await Cesium.Cesium3DTileset.fromUrl(
    "http://localhost:8003/tileset-new.json", {
    debugShowBoundingVolume: true,
  })
);

// Move the tileset to a certain position on the globe
const transform = Cesium.Transforms.eastNorthUpToFixedFrame(
  Cesium.Cartesian3.fromDegrees(-75.152408, 39.946975, 20)
);
const scale = 1.0;
const modelMatrix = Cesium.Matrix4.multiplyByUniformScale(
  transform,
  scale,
  new Cesium.Matrix4()
);
tileset.modelMatrix = modelMatrix;

// Zoom to the tileset, with a small offset so that
// it is fully visible
const offset = new Cesium.HeadingPitchRange(
  Cesium.Math.toRadians(-22.5),
  Cesium.Math.toRadians(-22.5),
  560.0
);
viewer.zoomTo(tileset, offset);

The result will be the tileset, rendered at the given cartographic position:

Thank you for your reply! I think I will listen carefully to your suggestions. For the issue of correcting the position of tiles, I think the root cause of the problem may be the inconsistency of the coordinate axes applied when creating the tile set. I will study this and would like to know if you have any good suggestions? Thank you!

the inconsistency of the coordinate axes applied

I assume that refers to the question of which axis is the 'up' axis. And yes, this can be confusing. Every tool and every 3D format has its own convention. For example, glTF (which is contained in B3DM) defines the Y-axis as 'up' (at least, in version 2.0). In 3D Tiles, the Z-axis is the 'up' axis. And there are further details of the conventions that may cause confusion. Some of that is summarized at https://github.com/CesiumGS/3d-tiles/tree/main/specification#y-up-to-z-up , but ... regardless of how clearly it is specified, it will always lead to bugs.
However, in the level of the tileset itself, changing the 'rotation' could be simple. In a CesiumJS Sandcastle, you can set the tileset.modelMatrix (as shown in the example above), and this can contain the required rotation. But in the tileset that you provided, this is more difficult, because it contains the translation components in the child tiles.
Do you happen to know which tool was used for creating this tileset?

Yes, I used the py3dtiles tool to create tiles. Fortunately, I have found the problem of dealing with tiles with incorrect orientation. I added a corresponding matrix to the root node of tiles. json and set the corresponding rotation vector, and the incorrect orientation of tiles actually became correct. Although I am not sure why this operation can solve the problem perfectly, I still want to understand the principle behind it. If you know, I hope you can tell me. Thank you!

The screenshot that you showed already seems to be from the tileset-new.json that was created with the createTilesetJson command. And there, none of the tiles contains a transform. So you can insert the transform 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0, ... that applies the rotation for the up-axis conversion. And the important point is: This can be done without affecting the transforms of the child tiles, and without affecting the bounding volumes. If the chilld tiles contained a transform matrix, then inserting the axis-conversion transform would affect the position of the tile content in the way that I tried to illustrate in the picture above.

Sorry, I didn't use the createTilesetJson command to perform a tileset.json update. I just added a matrix for the root node on top of the original tileset.json, and didn't do anything else. So, I'm curious why adding a matrix allows me to rotate and transform it as a whole. Here is the modified JSON
tileset.zip

I see. I was confused by the screenshot: It shows a boundingVolume for the root that is different from the bounding volume of the root of the tileset that you just posted:
    "geometricError": 500.0,
    "root": {
        "boundingVolume": {
            "box": [
<PHONE_NUMBER>339863,
                3554992.1194912135,
                10.550217400223502,
                48.79999904060969,
                0.0,
                0.0,
                0.0,
<PHONE_NUMBER>7441339,
                0.0,
                0.0,
                0.0,
                29.849785207338435
            ]
        },
...

In general, you have to be a bit careful when "manually" editing a tileset JSON file: It can easily happen that the tileset becomes "inconsistent" in terms of the bounding volumes and transforms.
In this case, adding a transform to the root tile should be "safe" in many ways: It originally did not have a transform (meaning that the transform defaulted to the identity matrix), and when you assign a new transform only to the root, then no bounding volumes or other transforms have to be updated.
But two things are still raising some questions:

When you insert this transform, then it should affect the 'world position' of all tiles, as illustrated in the image that I posted
I wonder in how far the effect of this transform seems to be different to the effect of the scene1.rotateX... call that you showed earlier.

I assume that you are using https://github.com/NASA-AMMOS/3DTilesRendererJS for rendering the tileset, is that correct? (Maybe I'll have a short look at this, and what rotateX might be doing different than just applying a rotation to the tileset...)

I'm very sorry, I forgot something. After adding the matrix to tileset.json, I don't need to manipulate the position of the model in the scene. I just need to modify the newly added matrix to change the position of the model at will. Therefore, the previous rotateX is no longer used (if it is necessary to use it, there will still be a problem of position confusion). I do use 3dtilesrenderjs, which makes it easy for me to load tiles in Threejs. Thank you for your reply!


Using a calculated cell value in a formula cell

http://bossanova.uk/jexcel/examples/including-formulas-on-your-spreadsheet
In cell C2 add:
=SUM(B1*C1)
C2 becomes 10000 which is great.
But then the total (cell C5) now has # ERROR
Looks like it can't calculate because there is a calculated cell in its range to calculate.

Try to change to
=B1*C1
SUM requires a second parameter, such:
=SUM(X1:X2)
On Wednesday, September 27, 2017, steveo2001<EMAIL_ADDRESS>wrote:

http://bossanova.uk/jexcel/examples/including-formulas-on-your-spreadsheet
In cell C2 add:
=SUM(B1*C1)
C2 becomes 10000 which is great.
But then the total (cell C5) now has # ERROR
Looks like it can't calculate because there is a calculated cell in its
range to calculate.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/paulhodel/jexcel/issues/42, or mute the thread
https://github.com/notifications/unsubscribe-auth/AFvagYw0St2syKR5XOcndXGfWBbLLBvOks5smj71gaJpZM4Plrp_
.

Seems that # ERROR is because of the '=' character on C2.
C2 became a text and the formula cannot resolve reference
Sorry, my english isn't good


support binary input

Could you clarify what this does?

@defunctzombie oops, i thought i closed this. I was trying to optimize for binary inputs, vs the current way of interpreting inputs as utf16 strings. I think i misunderstood the internals somewhat and even though that test passed, the qr code was unreadable.


Automated Package Upgrade

:tada: This PR is included in version 25.3.64 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


fixed some bugs, Jexus can host a netcore site with dev environment.

fixed some bugs, Jexus can host a netcore site with dev environment.

Quoted from Readme,
This repo has been merged into Jexus Manager,

https://github.com/jexuswebserver/jexusmanager


Issue for lesson 3.10

Blog link: https://zachpeltz.github.io/zach_2025/blogs/

Assignment
Points
Grade
Evidence

Baseline Grade
55%

Max Grade
90%

Pull Request (Integration)
1
1
https://github.com/nighthawkcoders/portfolio_2025/pull/435

Relevancy Checklist (Peer)
2
1.75

Lesson Style (Period)
1
0.85

Homework, Popcorn Hacks
1 x 5
4

Individual Contribution
1
0.85
https://nighthawkcoders.github.io/portfolio_2025/csp/big-idea/p2/3-10-4

Personal Notebooks / Blogs
1
1
https://zachpeltz.github.io/zach_2025/blogs/

Total
11
9.0

Skill
Points
Grade
Evidence

Work Habits (Analytics)
1
0.9

Team Planning (Issue)
1
0.9

Presentation Memories
1
0.8

Grading and Feedback
1
0.85

Beyond Perfunctory
1
0.85

Assignment
Weightage
Grade
Comments

College Board Coverage
20
TBD
TBD

Python Examples
15
TBD
TBD

JavaScript Examples
15
TBD
TBD

Popcorn Hack Usage
10
TBD
TBD

Homework
10
TBD
TBD

Grading Plan
10
TBD
TBD

Original an Creative
10
TBD
TBD

Total
90

My lesson for 3-10-4 focused on using objects with different types and attributes + working with lists/hacks in python
My work is different from other people and is more interesting because it focuses on different types of topics and can be experimented with in many ways, such as using boolean statements for different questions or answering simple questions
I contributed a lot with my own page to the project and some with our formatting and design for our list operations
My personal blog page also has everyone's homeworks and popcorn hacks that we worked on
Overall both me and my group worked hard with our code and improving our tech skills to the next level and I would say a 90/0.9 is what my personal contribution to the project was

I think that your understanding of conditionals was nice to look at because it showed how you actually learned something you didn't before. I also like the usage of inputs to involve the user more. I like how you learned how to code in both python and javascript through this sprint.

He had a summary for every lesson in his blogs. One grow is to make a main homepage that links to everything, so you don't have to go hunting in every single one of your blogs. He also talked about his achievements and how he made his lesson.

i liked how you described the learning process in your presentation and how you show the code function in VS code. Your page also looks neat and nice.

Worked on teach list operations.  Doing HW helped him understand how to code.  Discussed list operation and inputs.  Shared code and discussed accomplishment in JS and Python.

Blogs are very organized and easy to access. Your explanation about what you improved was very detailed. You also explained the hacks nicely. So overall good job.

Hi Zach, I like how you talked about your contribution to your team's lesson. I think you can go more into depth about what you learned during Sprint 2.

I thought your lesson really went in depth into your summary, and what youve learned so far.

I like how you explained what you improved on and what you have learned overall in Sprint 2. I loved how you also explained the hacks you did, but I think you could speak a little louder so people understand.

Explained the specific contributions he had to the lessons.
Explained clearly how the learned in both python and javascript and the utility for him.
Your presentation clearly explained how your HW helped you.
Nice Work!

I like your dancing mario on your home page was great. Its nice how doing homework made you understand the code! that's what we hoped for. Good job Zach!

Hi Zach,
I like that you went over how you learned a lot of the stuff from each lesson and went into each separate unit.

Glows:

I liked your collection of games and organization of notebooks and lessons on your blogs
Grows:
I believe you could have it more summarized for the notes

I like how you have seperate blogs regarding the summaries the of all the popcorn hacks and homework hacks. The Mario gif was really nice, the embedded link was showing up. So you could try to fix that.