i keep getting  these errors  keep in mind i have no idea how to code. just reporting.

Did you click the big green "ENABLE JAVASCRIPT API" button on the google maps api key page?

Thing is i gave no idea how

It's like the port is already in use.
Close Pkm map.
Open a command prompt and type "netstat -b"
Look for a line that has "8001" in it.
Just above, you'll see the .exe using this port.

mine replies to me requires elevation


remove unnecessary Fut

Otherwise
.before_acquire(|conn| {
   |          ^^^^^^^^^^^^^^ cannot infer type for type parameter `Fut` declared on the associated function `before_acquire`

I wonder why this didn't generate a warning before.

I wonder why this didn't generate a warning before.


Remove trailing backticks

I fail to see how those trailing backticks are intentional (git blame shows it's very old), however should it be intended, I will close this PR.

@TylerMSFT

Can you review this PR?
IMPORTANT: When this content is ready to merge, you must add #sign-off in a comment or the approval may get overlooked.

#label:"aq-pr-triaged"
@MicrosoftDocs/public-repo-pr-review-team

#sign-off

Thanks @Rageking8


Allow user to choose Typescript during project creation via --ts

Closing because we will only support TypeScript at launch


SSL error coming from censys internals

With censys 0.0.6 and requests 2.11.1, I get a super strange SSL error:
  File "[localpath]/censys.py", line 35, in gather
    certificate_api = certificates.CensysCertificates(uid, api_key)
  File "/home/eric/.pyenv/versions/3.5.2/lib/python3.5/site-packages/censys/base.py", line 112, in __init__
    CensysAPIBase.__init__(self, *args, **kwargs)
  File "/home/eric/.pyenv/versions/3.5.2/lib/python3.5/site-packages/censys/base.py", line 59, in __init__
    self.account()
  File "/home/eric/.pyenv/versions/3.5.2/lib/python3.5/site-packages/censys/base.py", line 104, in account
    return self._get("account")
  File "/home/eric/.pyenv/versions/3.5.2/lib/python3.5/site-packages/censys/base.py", line 95, in _get
    return self._make_call(self._session.get, endpoint, args)
  File "/home/eric/.pyenv/versions/3.5.2/lib/python3.5/site-packages/censys/base.py", line 76, in _make_call
    res = method(url, params=args)
  File "/home/eric/.pyenv/versions/3.5.2/lib/python3.5/site-packages/requests/sessions.py", line 487, in get
    return self.request('GET', url, **kwargs)
  File "/home/eric/.pyenv/versions/3.5.2/lib/python3.5/site-packages/requests/sessions.py", line 475, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/eric/.pyenv/versions/3.5.2/lib/python3.5/site-packages/requests/sessions.py", line 585, in send
    r = adapter.send(request, **kwargs)
  File "/home/eric/.pyenv/versions/3.5.2/lib/python3.5/site-packages/requests/adapters.py", line 477, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

I am not yet sure of the root cause, but wanted to open the issue while I had the information.

Thanks for the issue. This should now be resolved.
Google has been deprecating non-SNI-based TLS over the past several months. When we replaced our certificate yesterday, we unexpected lost this non-SNI access into Censys, which (long story short) broke www.censys.io. This is now working again. I ran the tests in the library and they seem to be fine, but let us know if you're still running into problems.

Confirmed that the issue is resolved. Thanks for the detail!


Remove datainsight databases

The tests for the datainsight applications are no longer run because the applications have been retired. Remove the relevant databases.

Are these worth an ensure => absent to clean them up?

I agree with @alext - rather get them off the box, even if it does involve proxying via a FIXME for the meantime until they're all gone.

I don't totally agree that we need to clean these up off CI boxes because they're rebuilt often enough, but I've added the ensure => 'absent'.


fix(fcm): Fix error throw when data property exists but is undefined

When use messaging().sendToDevice(tokens, payload) where payload contains the data property, but it's contains undefined value, I given throws the follow error:
TypeError: Cannot use 'in' operator to search for 'from' in undefined

The following Pull Request contains the solution of the issue with the covered unit tests.

This has recently happened to me.

Hey @hiranya911, Is this PR still need a fix?


[JAVA_GATEWAY_EXITED] Java gateway process exited before sending its port number

I I have done all the steps mentioned in the github and installed docker , now when i try to run the code in the local host page , im getting the below error.
[JAVA_GATEWAY_EXITED] Java gateway process exited before sending its port number.
Please suggest ways to resolve this issue , Im not able to compile any of my code

Same issue here unfortunately.

@namhuynhftu @namhuynhftu I think I may have been able to fixed this.
Can you please try cloning the dockerhub branch like git clone -b dockerhub https://github.com/davidzajac1/zillacode.git and run docker-compose up again and see if it works?
I hosted the images for all of the containers on DockerHub so they will be pulled from there instead of built locally.

I tried this and it works :) thank you for maintaining this very helpful project

I tried this and it works :) thank you for maintaining this very helpful project

Great glad it works, thanks for working with me on this issue!


Implement Collections

Collections hold an arbitrary number of works and contain the same metadata as works as well. For the purposes of Scholarsphere 4, collections will include the same features as the do in Scholarsphere 3. (see #91)
WDLL

collection display page
collections in search results
pages for creating and editing collections, including adding/removing works

In case this comes up: you should be able to add an existing work version to a collection without creating a new version.
Some features I'd like to have down the road, but not necessary for launch:

An ACL (?) that allows anyone to add works to a collection and only allows removing works you've added;
The ability to configure a collection's ordering logic (publication date, alphabetical by title, custom, etc).


Sandbox - Spartka not running successfully

Well, I'm new in the Sparkta community and I'm excited to play with the sandbox but I'm running into an issue starting sparkta.
After starting zookeeper, I tried to run sparkta with the following command
$sh {SPARKTA_HOME}/bin/run but it returns the following error with the main class com.stratio.sparkta.driver.Sparkta not found.
Can you please help me to start sparkta on the sandbox?

Hi arlejeun,
As you said the first thing is run zookeeper.
After that, try
cd /opt/sds/sparkta
sh bin/run
It should work properly, if you have any problem don't hesitate in contact us again.
Also you can find more information here.
Regards.


Fix puglStopTimer() X11, amend test_timer.c with according tests

Merged as 6b31fb5, thanks.
I rewrote the test to also check that multiple timers with different frequencies actually work properly: 0fac728


Issue 1585 widened search

Fixes #1585
This is the updated search result for a keyword:app:

Costs have improved a bit. Not dramatically but noticeably.


Fix for #237

PlayWebContext incorrectly sets port for requests coming from load balancer.

Excellent! Thanks for your contribution.


Whitespace control when using twig components?

I'm using a twig component like:
<twig:Turbo:Stream:Append target="#some-id">

Append this

</twig:Turbo:Stream:Append>

But the whitespace around the div is noise (but still nice for formatting).
Is there a way to ask twig to remove it?
Using the non-HTML-like syntax, I can by using -%} / {%-, but what about the html-like syntax?
Is there some twig:trim="before/after/true/both" that I could use for that? Or that could be added if that looks like a good idea?
<twig:Turbo:Stream:Append target="#some-id" twig:trim="true">

Append this

</twig:Turbo:Stream:Append>

Hi Nicolas,

But the whitespace around the div is noise

What do you mean about "noise"? is it blocking Turbo or equivalent? or is it "purely visual" ?
When I look at the examples they have spaces around the first element, and it seems to be working well. IIUC Turbo will find the first <template> element inside <turbo-stream>, so whitespaces does not matter here.

Is there some twig:trim="before/after/true/both" that I could use for that?

For the moment no, it's not possible to control whitespaces for the component HTML syntax.

Or that could be added if that looks like a good idea?

It can yes, I think there's surely a use case where it would be desirable to control blanks, to avoid the following problem:

About the implementation, maybe twig:trim can be added yes, but this attribute should be intercepted and removed from the attributes passed to the Component instance.
I've also thought about <twig:Foo-> and <-/twig:Foo>, it definitely looks weird, but it can remind you about Twig -%} and {%-.

Most of the time it doesn't matter, sometimes it does :) eg the :empty pseudo-CSS class requires no spaces.
Maybe there is nothing to do and ppl should use either the non-html syntax or remove the whitespace themselves.

Ah, yeah, didn't think about :empty pseudo-selector, you're right!
I also thought about globally configure this behaviour, like vue-template-compiler used to do with Vue 2 and the compiler option whitespace, but it looks like it has been removed with Vue 3 and @vue/compiler-sfc.
It looks like such an option does not exist with React and Svelte, but it does on Angular 18
Some folks in https://github.com/sveltejs/svelte/issues/3080 suggested about a :trim attribute, maybe that's the best option.

:trim could be nice as a generic Twig feature on its own!

This should be dealt with in Twig i think.
But you can already enforce it inside your component i suppose ?
{# index.html.twig  #}

<twig:Acme:Alert>

    Hahaa

</twig:Acme:Alert>

{# Acme:Alert.html.twig #}

{%- block content '' -%}

Should render
Hahaa
 no ?
In general i'm seeing TwigComponent as "blocks" more than "elements", and so internal whitespace should not be something to consider too much, but i'm open to any change if that is something people want/need.
Just: no new exotic syntax for now please ^^

@Kocal
span { display: inline; }


Fix GTest_SOURCE=BUNDLED not work

Description
I failed to build velox in ubuntu and clang-15, because I have gtest-1.11.0 installed (to successully build we need v1.13.0).
When I try to set -DGTest_SOURCE=BUNDLED the cmake output shows that it does not work.
/data1/home/wujianchao/.cache/JetBrains/RemoteDev/dist/1729cdbf0ed8b_CLion-2024.2.2/bin/cmake/linux/x64/bin/cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=/usr/lib/llvm-15/bin/clang -DCMAKE_CXX_COMPILER=/usr/lib/llvm-15/bin/clang++ -DGTest_SOURCE=BUNDLED -DCMAKE_PREFIX_PATH=/data1/home/wujianchao/project/jd/velox/deps-install -G "Unix Makefiles" -S /data1/home/wujianchao/project/jd/velox -B /data1/home/wujianchao/project/jd/velox/cmake-build-debug

....

-- Could NOT find double-conversion (missing: double-conversion_DIR)
-- Found double-conversion: /usr/lib/x86_64-linux-gnu/libdouble-conversion.so (Required is at least version "3.1.5")
-- Found GTest: /usr/local/lib/cmake/GTest/GTestConfig.cmake (found version "1.11.0")
-- Using SYSTEM GTest

The Linux Build test failed is because VELOX_DEPENDENCY_SOURCE is set to SYSTEM but there is no gtest in docker.
Install gtest or set VELOX_DEPENDENCY_SOURCE to auto which do you prefer? Maybe we should fix it in another PR.

Install gtest or use bundled gtest which do you prefer?

I think we can use bundled for now and add gtest to the setup scripts in a follow up PR :)


🇳🇴 Nynorsk translation fixes

Thank you for your work!
Made corrections to GPT translations; overall, decent. GPT performs better in bokmål than nynorsk due to greater amounts of content in bokmål on the internet and in Norway in general, so GPT mixes up some nynorsk with norwegian:')🇳🇴🤘

Looks like more changes are done to manual translation than to GPT part 😀
Can you run formatter locally or just add newline back?

Sorry that I didn't manage to get back to you. Thanks!


[WIP](row store) two phase opt read row store

Proposed changes
Issue Number: close #xxx
Problem summary
Describe your changes.
Checklist(Required)

[ ] Does it affect the original behavior
[ ] Has unit tests been added
[ ] Has document been added or modified
[ ] Does it need to update dependencies
[ ] Is this PR support rollback (If NO, please explain WHY)

Further comments
If this is a relatively large or complex change, kick off the discussion at<EMAIL_ADDRESS>by explaining why you chose the solution you did and what alternatives you considered, etc...

run buildall

run buildall

run buildall

run buildall

run buildall

run buildall

run buildall

run buildall

run buildall

run buildall

run buildall

run buildall

run buildall

run buildall


ui: redesign

The current UI design was quickly thrown together during our hack sessions. During a hack session we should work on redesigning the UI.
Components that need to be designed:

Search
Similar sounds list
Tags
Waveform
Spectrogram
Volume
Back button
Dark mode (and toggle button)

I'll comment the link to the figma so that we can track the progress on it

WIP example


DRM support

First of all - thanks for this wonderful project.
We are wondering if libxaac could be used for creating DRM HE-AAC super-frames for transmission. There is an effort to add HE-AAC (and may be USAC too) to Dream software here:
https://sourceforge.net/p/drm/discussion/general/thread/0486137564/

I am experimenting a bit here, made myself a binary to test and I can't get any playable output, no matter what. 😁

I am experimenting a bit here, made myself a binary to test and I can't get any playable output, no matter what. 😁

How were you tested? I also want to test whether this library supports DRM. Can you give me some suggestions? Thank you.

My plan is to try to integrate it do Dream (in transmission mode) [1], gr-drm [2] or BBC's CS [3].
[1] https://sourceforge.net/p/drm/code/HEAD/tree/dream/
[2] https://github.com/kit-cel/gr-drm
[3] https://sourceforge.net/p/drm/code/HEAD/tree/drmcs/

I am experimenting a bit here, made myself a binary to test and I can't get any playable output, no matter what. 😁

How were you tested? I also want to test whether this library supports DRM. Can you give me some suggestions? Thank you.

My issue is that is only has raw mpeg stream, so any players don't know what to do with that, including ffmpeg.

My plan is to try to integrate it to Dream (in transmission mode) [1], gr-drm [2] or BBC's CS [3].
[1] https://sourceforge.net/p/drm/code/HEAD/tree/dream/ [2] https://github.com/kit-cel/gr-drm [3] https://sourceforge.net/p/drm/code/HEAD/tree/drmcs/

Sounds great, but main issue I have with dream test transmitter mode is there is no proper split stereo I/Q at 0kHz offset, unlike its commercial friend Spark DRM, which won't respond to my e-mail regarding licensing. 😂
If that functionality can be implemented, that would be excellent. 👍

We can use the drmcs and Spark MDI transmitter, or just use Dream receiver to test the counterpart Dream transmitter in a first step.

Btw, adding support on ffmpeg for xaac through external library is a good idea.


Getting Started with Data Lake Files HDLFSCLI

Tutorials: https://developers.sap.com/tutorials/data-lake-file-containers-hdlfscli.html
Hi colleagues,
I'm trying to install with mac, and got below errors,
Preparing to install
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...
Launching installer...
JRE libraries are missing or not compatible....
Exiting....
Is it supported with mac? If yes, can we add more details about the JRE version that I should installed?
Currently, my java version is:
java --version
java <IP_ADDRESS> 2022-04-22 LTS
Java(TM) SE Runtime Environment 18.9 (build <IP_ADDRESS>+2-LTS-10)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build <IP_ADDRESS>+2-LTS-10, mixed mode)

Hello Tony,
In the operation system drop down menu you are able to identify what operating systems are supported.

It looks to support Windows and Linux.
Best,
Daniel


Fix #2810: Switching workspaces during a long-running operation gets stuck

_cancelAllCts now affects all requests in the loop
CompleteSwitchingBrokerAsync waits for cancellation only 10 seconds, after that host will be terminated
RHost.CancelAllAsync can be canceled even when message loop is stuck
Couple of tests added

👍


Suggested API change

I was thinking this would be a good time make API changes if we want. We can maintain an external layer that presents an 'oada-cache' style API ... with the hope that a new API is cleaner (more typeable) and eventually wins.
Here is an example of the API that comes to mind. This is driven by my use case in 'oada-jobs'. Would love to have a discussion on this. If you are agreeable, I would be happy to help make it so.
import { connect, /* LRU */ } from '@oada/client'

// For now just WS, but could have others on day
const conn = new OadaWS("example.oada.com");

/* Maybe "wrap" in a cache layer?
 * conn = LRU(conn);
 */
// Note: type annotation is just for example clarity
// Note: oada1, oada2, ... live at the same time and they
//       need a way store the token separately
const oada1: OadaClient = conn.connect(token1);  // maybe .authenticate(token1) ?
const oada2: OadaClient = conn.connect(token2);

/*
 * all of these use the same WS socket from above but are
 * authed with the correct token
 */
oada1.get(path) // Return type? Should leverage @awlayton's oada-types as possible
oada2.put(path, body, options) // Return type? Should leverage @awlayton's oada-types as possible
oada1.watch(path).on('all|new|edit|delete', (change: OadaChane, oada: OadaClient) => {
	// where `oada` is the OadaClient that recieved the change
})

/*
 * It would be nice to "clone" the client to provide some barriers
 */
oada3 = oada2.clone();

// for example
oada3.setToken(newToken); // this does not affect oada2

Here is high-level oada-jobs implementation with this API (my usecase)
let conns = {
	'domain1': new OadaWs('domain1'),
	'domain2': new OadaWs('domain2')
};

let workers = [
	{
		serviceName: 'myCoOlSeRvIcE',
		domain: 'domain1',
		token: 'verySecure',
		work: (job: OadaChane, oada: OadaClient) => { /* ... */ }
	},
	{
		serviceName: 'mylesscoolservice',
		domain: 'domain2',
		token: '1337',
		work: (job: OadaChane, oada: OadaClient) => { /* ... */ }
	},
}

workers.forEach((worker) => {
	let conn = conns[worker.domain];
	conn.connect(worker.token)
	    .watch(`/bookmarks/services/${worker.serviceName}`)
		.on('add', (job: OadaChane, oada: OadaClient) => {
			worker.work(job, oada.clone());
		});
});

Actually, I just realized I don't need clone(). I can do something like:
workers.forEach((worker) => {
	let conn = conns[worker.domain];
	conn.connect(worker.token)
	    .watch(`/bookmarks/services/${worker.serviceName}`)
		.on('add', (job: OadaChane, oada: OadaClient) => {
			worker.work(job, conn.connect(worker.token));
		});

as long as 'connect' stays very light. I'm thinking 'connect' just creates an 'OadaClient' adds a reference of 'conn' internally and copies the token. Basically the same work 'clone' would need to do at this point.

Please stop calling the tokens barriers. They are bearer tokens

As for the return types of get, etc. we could make them generic like most of the libraries I see  (e.g., axios) where you can tell it the type that the response could be. Were you thinking of something fancier?

@awlayton What? The only use of "barriers" that I find is correct. The intention behind clone() is to insulate the original client from things done to the new client. For example, a .watch() called on the cloned thing should cause new events to arrive at the parents handler.

@abalmos I am fine with your proposed API. If we decide to change it, I would prefer not to keep the 'oada-cache' style API because maintaining multiple APIs is sometimes a pain...

@abalmos Currently, connect function is not very light, i.e., it creates a new websocket connection every time it is called.

@awlayton Yes, we could do that. Would you like to contribute...?

As for the return types of get, etc. we could make them generic like most of the libraries I see (e.g., axios) where you can tell it the type that the response could be. Were you thinking of something fancier?

I'm not sure. The problem with that model is you get good feelings at compile time and forgot to add checks for runtime (also makes it hard to not allow any elsewhere). In this case, it is very likely the result doesn't match the type given how easy it is change things in OADA. I say that because those seems to be the primary source of bugs I had while writing services. It would be nice to know where and how it breaks ... I believe you were working on this type of system?
Could something like this work (haven't had a chance to play with it, which is why I didn't originally suggest it). Seems like it should.
function<T> get(path: string; isType: (data: any) => is a T) {
   const data = get(path);

   if (isType && !isType(data)) {
     throw "Not the right type";
  } else {
    return data;
  }

That, of course, can be called without the typeguard check but at least if you /can/ give one. I suppose it would be called like this:
const blah = wait oada.get("/bookmarks/blah", isBlah);

Where I think TS will call blah type T.

@tomohiroarakawa

Agree on just dropping oada-cache style API ... we might need to convince others to start using this though. I guess we'll have to see.

In the new API OadaWS would do the websocket connection and all the OadaClients would use it. I suppose OadaWS should have some parent interface that would allow OadaClient to use an OadaHTTP, OadaMQTT, OadaSmokeSignals, etc. without change in the future.

If we can come to a reasonable answer to typing get then I can work on a PR. I was hoping @awlayton would fill us in on the types things he was working on. From the last we chatted it sounds like it was heading in a very nice direction, but then @aultac tried to kill it -- not sure where that conversation went.

@abalmos For #2: I like the idea. We have oada-client/lib/websocket.ts, which is a self-contained low-level API for websocket connection. Maybe we can extract it and make it a new API OadaWS, with a proper parent interface.

you said "provide some barriers" and then gave it a bearer token.

If you are wanting runtime checking of the responses then we could use the content type of the response to find the appropriate schema and check again that.

Or yes we can just pass in a runtime check function and infer the type from that.

It doesn't quit work as I had hoped in @oada/types just yet, but theoretically if I can get the function overrides right, then checking based on content-type would tell TS what the return type is... but that does not yet work.

If you are wanting runtime checking of the responses then we could use the content type of the response to find the appropriate schema and check again that.

Have you played with this much? I have been wondering how it will work from TS side. Here is what I mean (and maybe I am just misunderstanding).
Let's say that /bookmarks/services/serviceA has content-type application/vnd.oada.serviceA and that @oada/types knows about that format. Then:
const data = oada.get('/bookmarks/services/serviceA');

should result in data typed as ServiceA: { name: string; } ... but then if I have
console.log(data.name);

How does TS know this is okay at compile time?
Or do  you have to give a hint like:
const data = oada.get('/bookmarks/services/serviceA', 'application/vnd.oada.serviceA');

It would not work in that case no.
A case where it does work if where you are expecting a specific set of content types so you can then use them is conditions
const {data, headers} = axios.get('/boomarks/foo')

switch (headers['content-type']) {
  case: 'application/vnd.foo':
    assert('application/vnd.foo', data))
    const foo = data // Has type Foo
    // Do stuff with a Foo
  break

  case 'application/vnd.bar':
    assert('application/vnd.foo', data))
    const bar = data // Has type Bar
    // Do stuff with a Bar
  break
}

As to how that manifests in the API of this library I am not sure.

I am not more in love with this option than inferring the type from a validation function, I just wanted to list it. I'm not sure which is better.

Some gut reaction thoughts:

I wonder if we can somehow use the tree to determine the expected content-type at compile time?

I think what @awlayton posted is also a good solution, but that is likely how you do it outside of @oada/client.

@awlayton will @oada/types let us fetch a type guard based on content-type? If so, we could do two things:

Pass a type string into get and we just assume that is a content-type and we give to @oada/types. This would be the same code path as determining content-type from the tree. TS seems to follow string enum types at compile time reasonable well...

We ask the client to pass a type guard in (from @oada/types or not). This is by far the easiest to type within @oada/client.

How about this: I'll work on a PR for this API surface, typed with option 2 above and then open an issue to track @oada/types and reconsider?

You cannot fetch a specific type guard function from a content type currently, I suppose that could be added.
But you can already use the validate function with a content type rather than a schema id and if you have imported the corresponding types then there is an override that will tell TS that validate with that id asserts the corresponding type.

Sorry if I am being dense, but are you saying this would be compatible with @oada/types:
function<T> get(path: string; assertType: (resource: any) => asserts resource is T) {
   const data = axios.get(path);
   assertType(data);

   return data;
}

and used like:
import { types } from '@oada/types'

const r = oada.get('/bookmarks/services/serviceA', types.assertType('application/vnd.oada.serviceA'));

Or maybe even
import { types } from '@oada/types'

function<T> get(path: string; assertType: (resource: any) => asserts resource is T | string) {
  const data = axios.get(path);

  if (typeof contentType === "string') {
    types.assertType('application/vnd.oada.serviceA')(data);
  } else {
    assertType(data);
  }

  return data;
}

Of course I am guessing at the @oada/types API. Is that available in some pre-form that I could develop this PR off of?

There is no method like types.assertType('application/vnd.oada.serviceA') to retrieve an assertion function from a content type.
You can do this:
import types from '@oada/types'

types.validate('application/vnd.oada.bookmarks.1+json', data) // Returns true or false

Also, currently if you import the type definition corresponding to the content type, TS will understand the type being checked.
import types from '@oada/types'

// Importing types adds type overrides for the validate function with their content type
import Bookmarks from '@oada/types/oada/bookmarks'

if (types.validate('application/vnd.oada.bookmarks.1+json', data)) {
  // TS will know data is a Bookmarks inside this if
}

I need to rework the structure to make TS understand all the types without having to import them all.
There is a WIP version of @oada/types on github.

Also, if you know the type you want to assert, you do not need to bother with the content type:
// Importing types adds type overrides for the validate function with their id / content type
import Bookmarks, { assert } from '@oada/types/oada/bookmarks'

assert(data) // Asserts data is a Bookmarks

Interesting, so maybe something like this would work then
function<T = any> get(path: string; assert?: (resource: any) => asserts resource is T) {
  const data = axios.get(path);

  assert && assert(data);

  return data;
}

import Bookmarks, { assert } from '@oada/types/oada/bookmarks'

const r = oada.get<Bookmarks>('/bookmarks/services/serviceA', assert)

It is a little clunky but has benefit of allowing a local assert function if @oada/types doesn't own the type of what you are trying to get. I guess it is no worse then what I originally suggested.
If assert is being import from a path like @oada/types/oada/bookmarks, can't it be hard coded by @oada/types to assert the Bookmarks type directly? In that case the usage could be a bit simplier:
import { assert } from '@oada/types/oada/bookmarks'

const r = oada.get('/bookmarks/services/serviceA', assert)

I suppose you will normally need to rename the assert function so you can have more than one.

That works as well already, you do not have to import the type for the assert function to work. That was just in my example from copy pasta.

Also, there is a type in @oada/types for the assertion functions:
import { TypeAssert } from '@oada/types'

function get<T = any> (path: string, assert?: TypeAssert<T>): T {
  const { data } = axios.get(path);

  assert ?? assert(data);

  return data;
}


Scene States Logic Implementation

See Figma Diagram for a visual overview.

[ ] Loading State
Action: Loads assets (images, sounds, etc.)
Changes State: When all assets are loaded, changes state to Ready
[ ] Ready State
Action: Displays a message (i.e. Level One, press Space to start)
Changes State: When user presses required button
[ ] Play State
Action: All game related Logic to play the level is active
Changes State:

If the user presses ESC the level is in the paused state along with all active game logic/visuals
if the user loses all lives the level is in the game over state
if the user survives the time limit the level is in the level complete state

[ ] Paused State
Action: The user can resume the level, restart the level, or go to the start menu
Changes State: When the user presses the applicable button to cause an action above
[ ] Game Over State
Action: The user can restart the level, or go to the start menu
Changes State: When the user presses the applicable button to cause an action above
[ ] Level Complete State
Action: The user can replay the level for a higher score, go to the next level/scene, or go to the start menu
Changes State: When the user presses the applicable button to cause an action above

Not implementing this necessarily, went with a less optimal solution that works for the time being. Will try to develop a better method in another project.


AMD require call is incorrectly replaced by webpack and causes SyntaxError

I am in the process of migrating from RequireJS to Webpack, but following AMD module that worked in RequireJS produces "SyntaxError: missing ; before statement" with webpack:
define([], function() {
    var modules = [];
    if (modules.length) {
        require(modules, function() {});
    }
});

This is basically an excerpt that causes error. Webpack transforms it to following:
    var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
        var modules = [];

        if (modules.length) {
            __webpack_require__(1)!/* require */(/* empty */function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = modules; (function () {}.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}());
        }
    }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));

Browser reports "SyntaxError: missing ; before statement" in the string webpack_require(1)! after function call.
Is it a bug or I can transform this call to some other form?
I use webpack 1.7.3

Can you see this issue in webpack 2?

Part of my code looks like:
		require([area + 'controllers/' + page + 'Controller'], (Controller) => { 			controller = new Controller.default(params); 		});
and is transpiling to:
__webpack_require__.e/* require */(1/* duplicate */).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(9)(area + 'controllers/' + page + 'Controller')];  ((Controller) => {       controller = new Controller.default(params); }.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}).catch(__webpack_require__.oe);
It causes "SyntaxError: missing ) in parenthetical".
Seems that problem is using "apply" on arrow function.
Any solution ?

I think 28f2ffe7f94de886111dbc0b45e3d9df06ae7 already fixed this problem.


Allow user to use existing test image

Building a new integration test image is a little bit slow locally, so add a new
variable to allow developer to control if local existing test image for
integration test is preferred.
Signed-off-by: Lan Luo<EMAIL_ADDRESS>

Codecov Report

Merging #3876 (1faa3e1) into main (ea99ee5) will decrease coverage by 24.35%.
The diff coverage is n/a.

@@             Coverage Diff             @@
##             main    #3876       +/-   ##
===========================================
- Coverage   62.31%   37.95%   -24.36%
===========================================
  Files         288      115      -173
  Lines       41223    15776    -25447
===========================================
- Hits        25687     5988    -19699
+ Misses      13485     9301     -4184
+ Partials     2051      487     -1564

Flag
Coverage Δ

integration-tests
37.95% <ø> (?)

kind-e2e-tests
?

unit-tests
?

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

pkg/apis/stats/v1alpha1/register.go

pkg/agent/cniserver/server.go

pkg/ipam/poolallocator/allocator.go

...g/agent/apiserver/handlers/podinterface/handler.go

pkg/agent/apiserver/handlers/ovsflows/handler.go

pkg/agent/multicast/mcast_socket_linux.go

...ntroller/networkpolicy/networkpolicy_controller.go

pkg/util/ip/ip.go

pkg/version/version.go

pkg/clusteridentity/clusteridentity.go

... and 393 more


feat: add delete_marker_replication_status in replication rules

what

There are no control ability for enable Delete marker replication in this module

why

The reason of this was because empty filter would always be generated in this line
And this will disable the Delete marker replication option in replication rule

references

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket#delete_marker_replication_status

/test all

@DesmondH0 Thanks for the contribution! Released as 0.45.0.

@DesmondH0 Thanks for the contribution! Released as 0.45.0.

wow....thanks, thats the fastest PR response I got so far 😄


Boundary variables for auxiliary coordinates of more than two dimensions

Section 7.1 on "Cell boundaries" contains the following text, about providing boundary variables for auxiliary coordinate variables of more than two dimensions:

Bounds for multi-dimensional coordinate variables with p-sided cells

In all other cases, the bounds should be dimensioned (...,n,p), where (...,n) are the dimensions of the auxiliary coordinate variables, and p the number of vertices of the cells. The vertices must be traversed anticlockwise in the lon-lat plane as viewed from above. The starting vertex is not specified.

There is no example given. I suppose it must mean something like this for three dimensions:
variables:
  float x(nk,nj,ni);
    x:bounds="x_bounds";
  float x_bounds(nk,nj,ni,p);

Since it talks about traversing the vertices clockwise in the lat-lon plane, it must be concerned with horizontal faces of the 3D cells. A horizontal coordinate variable only has to be 3D (rather than 2D) if the cells aren't aligned in vertical columns. Do you agree with this interpretation? If so, we should clarify it. 3D cells don't just have horizontal faces, so this convention is of restricted use. For a more general treatment of bounds in two dimensions, we could refer to UGRID.
Cheers, Jonathan

Dear all
I propose the following changes to remedy the defect described above in Sect 7.1 "Cell boundaries". In addition I propose to insert some new subsection headings, explanatory text, and rearrangement of text in Sect 7.1, to improve clarity. I don't believe this is any change to the meaning of the convention, except for one small generalisation (at the end). On account of that, and because the text changes are quite extensive, I've relabelled the issue as an enhancement.
The proposed changes are listed below. You might find it easier to look at the pull request or the HTML of the modified document.
Cheers
Jonathan

On re-reading, I suppose that "multidimensional" is referring to the dimensionality of the arrays, rather than the physical space. To clarify this, I've propose deleting this word, and adding a sentence to the end of the first paragraph of Sect 7.1: "CF can currently describe boundaries for cells which have one or two spatial dimensions, but does not provide conventions to describe the boundaries of cells with three spatial dimensions. Please refer to UGRID for development of such conventions."

Between the second and third paragraphs of Sect 7.1, insert heading "7.1.1 Boundaries and formula terms".

Delete the short paragraph, "Applications that process cell boundary data often times need to determine whether or not adjacent cells share an edge. In order to facilitate this type of processing the following restrictions are placed on the data in boundary variables." This paragraph is unnecessary because the following subsections have specific statements about contiguousness.

Promote the bold text "Bounds for 1-D coordinate variables" to become the heading for new subsection 7.1.2, remove the indentation of the following lines, and correct the typo in "identically".

Move Example 7.2 into 7.1.2. It is concerned with a 1D latitude axis, but currently it appears at the end of 7.1, after the multidimensional case.

Modify the bold text "Bounds for 2-D coordinate variables with 4-sided cells" to "Bounds for horizontal coordinate variables with 4-sided cells", promote it to become the heading for new subsection 7.1.3, and remove the indentation of the following lines.

I propose that we modify the first sentence in 7.1.3 to provide a bit more context and explanation, from

In the case where the horizontal grid is described by two-dimensional auxiliary coordinate variables in latitude lat(n,m) and longitude lon(n,m), and the associated cells are four-sided, then the boundary variables are given in the form latbnd(n,m,4) and lonbnd(n,m,4) ...

to

There is a common case of a rectangular horizontal grid, with four-sided cells, whose two axes are not latitude and longitude (e.g. it uses a map projection from <> or a curvilinear grid, such as the tripolar ocean grid). In that case, two-dimensional auxiliary coordinate variables in latitude lat(n,m) and longitude lon(n,m) may be provided as well. Since the sides of the cells do not generally have constant latitude or longitude, all four vertices must be specified individually. Therefore the boundary variables for the two-dimensional auxiliary coordinate variables are given in the form latbnd(n,m,4) and lonbnd(n,m,4) ...

The next paragraph describes the anticlockwise traversal of the four-sided cell, but does not require this ordering. I'm certain we have always required it, as is indeed stated in the final paragraph about the "multidimensional cells". Therefore I have rephrased the present paragraph to state this requirement as well.

Move Example 7.3 into 7.1.3. It illustrates the 2-D 4-sided case, but currently it appears at the end of 7.1, after the multidimensional case. Change its title from "Cells in a non-rectangular grid" to "2-D cells in a non-latitude-longitude grid", because the grid is logically rectangular (64,128).

Modify the bold text "Bounds for multi-dimensional coordinate variables with p-sided cells" to "Bounds for coordinate variables with p-sided cells in two spatial dimensions", and promote it to subsection heading 7.1.4, with the following text:

In the general case of a grid composed of polygonal cells in two spatial dimensions with p sides and vertices, or a mixture of polygons where p is the maximum number of sides and vertices, the grid could have one, two or more dimensions, depending on how it is organised logically (e.g. as a 1-D list or a 2-D rectangular arrangement). The boundary variables for the auxiliary coordinate variables are dimensioned (...,m,p), giving coordinates for the p vertices of each cell, where m are the horizontal dimensions. If the cells are in a horizontal plane, their vertices must be traversed anticlockwise in the longitude-latitude plane as viewed from above. The starting vertex is not specified.

The case of a 2-D horizontal coordinate variables with 4-sided cells (Section 7.1.3) is a particular case, with p=4 for boundary variables dimensioned (n,m,p), where n and m are horizontal dimensions. See also <> for conventions describing horizontal cells with more complicated geometry and topology.

This is a small generalisation to admit the possibility of 2D cells in other than the horizontal plane e.g. in (height,latitude). I'm sure CF is being applied to those cases, and they might need 2D auxiliary coordinates. I haven't made the requirement for the vertices to be traversed in a right-handed way apply to cases apart from the horizontal plane, where we already have that requirement.

I have updated the PR #547 to make two further changes on which there appears to be consensus in discussion 380, namely

Delete "If bounds are not provided, an application might reasonably assume the gridpoints to be at the centers of the cells, but we do not require that in this standard" in the preamble of section 4.
In the first paragraph of section 7.1, on bounds, insert

If cell boundaries are not provided (using the bounds attribute), an application can assume only that each gridpoint lies somewhere within or upon the boundaries of its own cell. Without a boundary variable, the extent of a cell is not known, nor whether adjacent cells are contiguous, separated by a gap, or overlapping.

I would be grateful for support to be expressed for these changes, so that they can go into 1.12, which we must agree by Monday 11th Nov i.e. next week.
Thanks.

@JonathanGregory > I really like and support the re-arrangement in Chapter 7.
Would it be easier for a new reader to see the following order of sections?

Bounds for 1-D coordinate variables
Bounds for 2-D coordinate variables with 4-sided cells
Bounds for multi-dimensional coordinate variables with p-sided cells
Boundaries and Formula Terms

I do not know if such a re-ordering is easy to take in this PR or if it should be moved to a later PR.

@TomLav -- Thinking back to when I first read through the spec, it was easiest when the concepts relevant to what I was working with (output from numerical weather models) came first.  I would say that the best ordering for new readers is basic concepts and common use cases first, with more complicated / specialized stuff coming later.
So I think your ordering makes a lot of sense.  I definitely agree that Boundaries & Formula Terms should be separated out into its own subsection, and that it should come after the section on 1-D bounds.
One thing that I think might make it easier for the reader would be to talk about a true 1-D case first, like time bounds.  Because in terms of use cases, the different things readers want to know are how to handle time bounds, bounds for a lat-lon grid, bounds for a projected rectilinear grid, bounds for an unstructured grid, and bounds for a parametric z coordinate.  I think that's roughly the ordering of most common to least common use case, and it's also the ordering you have suggested (plus the time bounds case).

+1 to all of what @sethmcg said :-)
I've been thinking about this and started to write up some more detailed discussion -- far more detail than we should put in CF, but I think it would be good to have this sort of dc somewhere. Specifically things like @sethmcg mentioned:
but a bit more general, like:
How to describe:
A lat-lon aligned rectangular grid
A projected rectangular grid.
A curvilinear logically rectangular grid.
An unstructured grid (this one should point the UGRID spec)
Note that as it stands, CF doesn't (with the exception of the new UGRID spec) talk about the relationship between grids and cells much at all -- it talks about grids, and it talks about cells, and a grid is a particular arrangement of cells, but that has to be inferred (calculated?) from the cell bounds.
Or maybe I've missed something, but in any case, I think we need more documentation about that.
I've made a start here:
https://github.com/ChrisBarker-NOAA/CF_conventions_notes/blob/main/rect_grid/rectangular_grids_in_CF.md
It's only a start -- but hopefully you can see where I"m going with this -- i'd love any feedback or help anyone might provide.
The end goal of that doc is that both produced of output from gridded models, and consumers of such output will know what to do with a full example.

Hi @ChrisBarker-NOAA , is it possible to add comments to your markdown page ?
Looking through it I remembered the Arakawa C grid (https://en.wikipedia.org/wiki/Arakawa_grids), used by the (now outdated) COSMO-D2 model, which defines some parameters on the nodes, some (like wind speed) on the borders of the cell, and I imagine that some parameters are means for the whole cell.

I support the proposed change.
Don't hold up things for this, but I did notice the statements under figs. 7.1 and 7.2 that say: "Tuples (lon(i),lat(j)) represent grid cell centers." Given the discussion that the cell coordinate values aren't necessarily half way between the bounds, should these statements be reworded? Perhaps "The tuple (lon(i),lat(j)) represent the coordinate location of a cell."? Or perhaps "Tuples (lon(i),lat(j)) represent grid cell nominal centers."?

@Armin-RS: yes, please do! You can use gitHbu issues or PRs, or, if you want to do more than a little bit, I'm happy to give you access.
As for "Arakawa C grid" -- yes, I hope to get there -- and there are other complications there -- fluxes through cell walls, etc.

Dear @TomLav @sethmcg @ChrisBarker-NOAA @taylor13
Thanks for your comments. I had already put the formula terms into its own section. @TomLav's suggestion is to move this section to the end. I didn't do that at first because I started this issue with the aim of minimal changes for clarity. However, it's no problem to move it, so I've done so, given that you agree it's better at the end.
Taking Seth's suggestions of considering time, and a purely 1D case, I have mentioned 1D time in the preamble of section 7, and I have changed Example 7.1 from latitude to time. Also I moved the following text, which described the same example, into the box of the example, and I have spelled out more details. In addition to Example 7.1, we still also have Fig 7.1, which is about 1D latitude and longitude together, so both cases are now covered. On reviewing the preamble of sect 7, I thought it was not as clear as it could be, so I have rearranged and modified it in other ways too, though not intending to change its meaning.
In the last version, I had inserted a statement that, without bounds, you could assume only that the point is somewhere within or on the boundary of the cell. I noticed subsequently that this is a recommendation in the conformance document, not a requirement. Hence, without bounds, nothing at all can be assumed about the relationship between cells and points, as @TomLav suggests. I have now stated this instead in sect 7.1. I have also inserted an explicit statement that if you want to indicate that a cell has zero size you must give it explicit coincident bounds. Also in sect 7.1, I have added more text to describe the recommendation that the point should lie within the cell, and also the requirement that the bounds should be ordered in the same sense as the coordinates. I've added the latter requirement to the conformance document, which didn't have it before, although it was already stated with "must" in the convention.
I agree with Chris's reluctant conclusions, "I guess it's not useless to have, e.g. a cell_method and a cell-area with no defined bounds, though not great. Even a cell_method with no other definition of the cells is still some information." I've always understood that to be the intention of the convention. Bounds and cell methods are both separately optional, but informative, especially in combination. Bounds are currently optional, not recommended. I suggest we postpone reconsidering whether they should be recommended to version 1.12.
I have altered the reference to "centers" that Karl noticed in the captions of Figs 7.1 and 7.2. It now says that the coordinate values "locate the gridpoints".
The aim of the present issue is clarification of the current convention. In order to meet the CF 1.12 deadline (beginning the three-week period for acceptance on Monday), we must limit our ambitions. :smiley:
The PR #547 now shows the text following the above changes. They are also shown in the modified HTML conventions document. What do you think?
Best wishes
Jonathan

Because both NUG and COARDS define coordinate variables but not cells or bounds, I think it would be useful to continue to have some guidance on the undefined nature of cells in chapter 2. It should perhaps also include some description in terms of pixels as I think this is often a point of confusion for those who are used to dealing with raster/image data and may not think of cell/bounds as something relevant. Perhaps something like:

If bounds are not provided, the location of the gridpoint within the cell/pixel is undefined. Because both the NUG and COARDS define 'coordinate variables' but not cells or bounds, many applications handle gridpoints without an associated bounds as being located at the centers of the cells/pixel. To be explicit, cell bounds should (must?) be defined.

Probably the raster/image language should be a separate discussion with a more extensive review.

Probably the raster/image language should be a separate discussion with a more extensive review.

absolutely - there may even be a need to add something specifically for pixels -- I've noticed that sometimes pixels are defined by their corner and size, sometimes by the center points.
Also:
"The raster data model consists of rows and columns of equally sized pixels interconnected to form a planar surface."
From a random google:
https://pressbooks.pub/gist/chapter/6-2/#:~:text=The raster model will average,from which it is derived.)
But that's consistent with what I've seen, including GDAL:
https://gdal.org/en/latest/user/raster_data_model.html
Key point is that the pixels are all the same size (in the coordinate system used) and that size is defined -- so you don't need to specify all the coordinates -- if you know the corner, the pixel size, and the raster size (number of pixels) you. can. compute the locations of all the pixels.
You can cover that in CF the two coordinate dimensions that happen to be equally spaced -- but even then it's a bit confusing as to whether the coordinates are the center or corner, and the dx and dy are not clearly stated (can be computed of course)
I know that CF is trying to be general, but saying something about specific cases like this is a good idea -- either as a specific spec, or at least a documented: "best practices for storing raster data".
Anyway -- new topic :-)

Dear all
Thanks to your comments, enough support has been expressed for us to be able to accept this proposal in three weeks, on 1st December, if no-one raises any concerns before then.
@ethanrd, thanks for your suggestion. I agree that it's useful to compare CF with raster pixels. I also agree that we could have an extensive discussion of it, which we don't have time for before CF 1.12 is finalised. However, I've made an attempt, following your suggestion. I've updated the PR #547 and HTML as below. Will this help?
Cheers
Jonathan
Addition of new text (in bold) to the definition of "cell" in sect 1.3, "Terminology":
A region in one or more dimensions whose boundary can be described by a set of vertices recorded in boundary variables. The term interval is sometimes used for one-dimensional cells. A two-dimensional cell is analogous to a pixel in a raster graphic, but is a more general concept (see section 1.4, "Overview").
Addition of new text (in bold) and small replacements, in sect 1.4, "Overview"
It is often the case that data values are not representative of single points in time, and/or space and other dimensions, but rather of intervals or multidimensional cells. This convention CF defines a bounds attribute to specify the extent of intervals or cells. Because both the NUG and COARDS define coordinate variables but not cells or bounds, many applications assume that gridpoints are always located at the centers of their cells. This assumption does not hold in CF. If bounds are not provided, the location of the gridpoint within the cell is undefined, and nothing can assumed about the location and extent of the cell.
A two-dimensional cell is analogous to a pixel in a raster graphic, but is a more general concept. Pixels in a raster are rectangular, all of the same size, and arranged in a logically rectangular array with their nominal point locations at their centers. By contrast, two-dimensional cells in a CF field do not necessarily satisfy any of those conditions, though they commonly do. Furthermore, as an alternative to cells in two dimensions, CF defines a convention for the case where each data value is associated with a geographical feature that is described by one or more points, lines or polygons.
When data that is representative of cells can be described by simple statistical methods (for instance, mean or maximum), those methods can be indicated using the cell_methods attribute. An important application of this attribute is to describe climatological and diurnal statistics.

I think we should avoid talking about pixels without more discussion:
http://alvyray.com/Memos/CG/Microsoft/6_pixel.pdf
Title: "A pixel is not a little square"

Dear Chris
I added this text because of your comments and Ethan's that it would be useful to compare the CF concept of a cell with the pixels of a raster. I can take it out again if it's wrong or not useful, but I do think it could help some people who are new to CF, so perhaps we can improve it. What do you think, @ethanrd?
You're right that we shouldn't say anything about the shape of pixels. How about this (replacing three of the sentences in the previous draft):
A two-dimensional cell is analogous to a pixel in a raster graphic, but is a more general concept. Pixels in a raster are evenly spaced in each dimension and arranged in a logically rectangular array. Two-dimensional cells in a CF field do not necessarily satisfy either of those conditions, though they commonly do.
Wiktionary defines "pixel" as "One of the tiny dots that make up the representation of an image in a computer's memory" or "One of the squares that make up a work of pixel art or a zoomed-in image in a computer." About raster graphics, Wikipedia says "A raster graphic represents a two-dimensional picture as a rectangular matrix or grid of pixels."
Best wishes
Jonathan

@ChrisBarker-NOAA and @TomLav. Thanks for your comments on the PR #547, which I have implemented, as shown in the HTML.

Thanks, Ethan. I have updated the PR #547 and the HTML with my revised sentences from above.
Yes, I think you're right that CF users are more likely to be familiar with rasters and pixels in connection with sensors than with graphics. We can work on a revision of this text once CF 1.12 is done, if you like.

Sounds good. Chris @ChrisBarker-NOAA, does this sound ok to you? Adding Jonathan's pixel text for 1.12 and revisiting after.

I think we can (and should) talk about rasters, from teh GIS point of view -- but try to leave the word pixel out of it, but certianly don't say a pixel is a rectangel :-)
OGC talks about coverages, of which this is a regular 2 dimensional grid coverage
https://www.w3.org/TR/sdw-bp/#coverages
or there's the GDAL raster model:
https://gdal.org/en/latest/user/raster_data_model.html
which does talk about pixels, but not as "squares" or "rectangles" as far as I can tell with a quick read.

@ChrisBarker-NOAA. The current text doesn't say the pixels are rectangular. It says they are arranged in a rectangular array.

This change is now agreed, since no new concerns have been raised in the last three weeks. Thanks for your contributions to the discussion, @TomLav @Armin-RS @ethanrd @ChrisBarker-NOAA @sethmcg @taylor13.


Change some apis to use struct sol_buffer insteand of char *buf, size_t buflen - V3

Fixed problems pointed by @barbieri
Changes since v2:

Removed SOL_JSON_ESCAPE_STRING macro
sol_buffer_expand() will not only expand the mount necessary to fit the required bytes.

+1

merged


Issue 1700 - Transaction log state store architectural decision

Make sure you have checked all steps below.
Issue

[x] My PR addresses the following issues and references them in the PR title. For example, "Issue 1234 - My Sleeper
PR"

Resolves https://github.com/gchq/sleeper/issues/1700

Tests

[x] My PR adds the following tests OR does not need testing for this extremely good reason:

Documentation only

Documentation

[x] In case of new functionality, my PR adds documentation that describes how to use it, or I have linked to a
separate issue for that below.

https://github.com/gchq/sleeper/issues/1702

[x] If I have added, removed, or updated any external dependencies used in the project, I have updated the
NOTICES file to reflect this.

See https://github.com/gchq/sleeper/issues/1713


Removing spaces

OPS Build status updates of commit dc0df70:
:clock10: Preparing: average preparing time is 43 sec(s)

OPS Build status updates of commit dc0df70:
:clock10: Incremental building: average incremental building time is 17 sec(s)

OPS Build status updates of commit dc0df70:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

Articles/BusinessSolutions/CorporateCommunications/GetRSSFeedsonKaizala/DisplayRSSFeedsinKaizalagroups.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.


message-feed: Spoof time with generated messages in development.

Currently all the messages are sent at the "same time" when really they should be randomly spread out over time in order for us to be able to easily test other features that are time related in development.

Agreed; ideally, they'd be spread over the last week or something when generated.  Tagging as a priority, since this seems like something that should be relatively easy and fairly valuable to fix.

@zulipbot claim
Right now I have implemented this
message.pub_date = timezone_now() - timezone_timedelta(days=(100-num_messages), hours=random.randint(0,23), minutes=random.randint(0,59))
Rather than create a new variable, I have reused num_messages to chronologically increase time, so the first spoofed message might be posted 3 months ago, the second 2 months and 27 days, etc.
Looks like this

We'll probably want to have at least 2 messages for most days, so that we exercise the code to group messages together.  Not to get too complicated, but I could see an algorithm, where you do something like this:

remove 10 most recent from list, randomly put them today
totally skip yesterday, so we would expose regressions with big gaps
remove 11th most recent from list, make day before yesterday
remove random-size batches, going back one day a time, till you run out of messages

@showell If a developer logs on at 12:05 AM, how should I handle the random time going back a day? If I were to have 10 messages for 'today', is today the past 24 hours, or after 12 AM

I think just spacing each message a random period between 0 and 1 hour would probably work fine, with a bit less complexity in the algorithm, and still have the ~100 messages spread over about 4 days.

Submitted a pull request.


Add pre-commit cli

This PR adds the pre-commit cli to the repo so that the pre-commit will be run on pull requests and commits.
Reference: #1911
pip install pre-commit
pre-commit install
pre-commit run --all-files

@slowy07 It only took 4.7 seconds to run the pre-commit. This is so much faster than GitHub Actions! Thank you.
https://results.pre-commit.ci/run/github/245837930/1708352021.a_tx5YhiREKyiGb9poDbWQ

I have removed codespell from GitHub Actions and added check-large-files and black formatting for pre-commit.

sir @giswqs , i suggest for fomatter use ruff-formatter, cause is more advance and more usefull and faster than black formatter, cause the ruff based on rust which is extremly fast and more configureable

@slowy07 It seems ruff supports Jupyter notebook as well. That's great.
https://docs.astral.sh/ruff/faq/#does-ruff-support-jupyter-notebooks

yes sir @giswqs , and for this one, i think mybe are best choice for replacing black formatter

Ha, ruff detects 429 errors that need to be fixed. This might take sometime. Wish I had stared using ruff long time ago to avoid accumulating so many errors.

Adding notebook checking found 830 errors. This will take a while to resolve. Will work on it when I have time.
https://github.com/astral-sh/ruff-pre-commit
- repo: https://github.com/astral-sh/ruff-pre-commit
  # Ruff version.
  rev: v0.2.2
  hooks:
    # Run the linter.
    - id: ruff
      types_or: [ python, pyi, jupyter ]
      args: [ --fix ]
    # Run the formatter.
    - id: ruff-format
      types_or: [ python, pyi, jupyter ]

we can create a configuration for passing or just ignore that error cause the ruff issue with toml configuration sir @giswqs if you want sir
reference: https://docs.astral.sh/ruff/settings/#lint_extend-unsafe-fixes

Good to know that there is an option to ignore certain error types.
I notice some auto fixes by ruff are incorrect. Need to look into it.

ouch, mybe its cause --fix parameter was generate the auto fixing that are not recommended for geemap project sir


Remove :server-auth:webapp

Motivation:
CI fails to install Node.js binary for :server-auth:webapp. https://github.com/line/centraldogma/actions/runs/10036375065/job/27734008120?pr=989#step:6:163 In fact, the login page is supported by the new webapp so :server-auth:webapp is no longer used even for the legacy webapp.
I think the straightforward solution for the CI problem is to remove :server-auth:webapp.
Modifications:

Remove :server-auth:webapp and related Gradle tasks.

Result:
Fix CI build failures.

Looks like it still fails. 🤔
https://github.com/line/centraldogma/actions/runs/10051604317/job/27781470253?pr=992#step:6:159

Deleted Gradle caches and triggered builds
gh cache list |grep gradle | awk '{ print $1 }' | xargs -I {} gh cache delete {}

Let me merge this PR and make CI work.

@ikhoon
Could you also check this failure? It faied to merge to main branch.
https://github.com/line/centraldogma/actions/runs/10053176511


GROUP BY on tag does not work if there is a value with the same name.

I'm not allowed to use group by on a tag it there is value with the same name.
$ influxd version
InfluxDB v<IP_ADDRESS> (git: 0.9.4 c4f85f84765e27bfb5e58630d0dea38adeacf543)

Writing a tag and a field with the same name is not supported.  Due to the way shards are written, we can't prevent this from happening, but when reading the data there is no way for us to know what you want to retrieve.

Hmm, okey. Maybe drivers should throw an exception if that happens then.

For some cases, we could, but for others, we can not. Meta data for fields and tags are not stored at the consensus layer, but at the shard layer.  This is done to support the speed of writes that the database needs to ingest.
So, for instance, if you wrote a single point with both a field and a tag with the same name, I agree, we could easily reject that write.
Effectively I'm agreeing with you, but it's not an easy problem to solve, but hopefully we will keep working towards that.  I think it's fair to say we might need to make this clearer when people are learning about InfluxDB for good design practice.
//cc @beckettsean

Related issue for preventing duplicate tag and field keys: https://github.com/influxdb/influxdb/issues/2615
@kwando you should get a meaningful error message when attempting it:
> insert tagfield,abab=def abab=42
> select * from tagfield group by abab
ERR: can not use field in GROUP BY clause: abab

I was using the ruby driver and it did not raise an exception:
https://github.com/influxdb/influxdb-ruby
And yeah, highlighting this in the documentation would probably be good. I'm probably not the first and most likely not the last one to hit this error.


Add SQLite support

Ths is a brilliant project.
Pls add support for SQLIte. This will be one less container/server.

I've been having the same problem for a few days now, but I haven't found a solution anywhere.


Unable to launch LoadBalancer type EgressGateway Service

Bug description
Unable to launch LoadBalancer type EgressGateway Service even after overriding the values in the operator spec.
[ ] Docs
[ x ] Installation
[ x ] Networking
[ ] Performance and Scalability
[ ] Extensions and Telemetry
[ ] Security
[ ] Test and Release
[ ] User Experience
[ ] Developer Infrastructure
Expected behavior
istio-egressgateway service of type LoadBalancer is created
Steps to reproduce the bug
Use below IstioOperator spec to install istio using
istioctl manifest apply -f <below spec>

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  name: istio-operator
spec:
  # Use the default profile as the base
  # More details at: https://istio.io/docs/setup/additional-setup/config-profiles/
  profile: default
  namespace: istio-system

  components:
    ingressGateways:
    - enabled: true
    egressGateways:
    - enabled: true
    pilot:
      enabled: true
    sidecarInjector:
      enabled: true
    telemetry:
      enabled: true
    citadel:
      enabled: true
    galley:
      enabled: true
  meshConfig:
    enableAutoMtls: true
  values:
    global:
      controlPlaneSecurityEnabled: true
    gateways:
      istio-egressgateway:
        type: LoadBalancer

Creates a egress service as shown below:
NAME                  TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                    AGE
istio-egressgateway   ClusterIP   <IP_ADDRESS>   <none>        80/TCP,443/TCP,15443/TCP   7d18h

Version (include the output of istioctl version --remote and kubectl version and helm version if you used Helm)
client version: 1.5.7
control plane version: 1.5.7
data plane version: 1.5.7 (6 proxies)
How was Istio installed?
using istioctl
Environment where bug was observed (cloud vendor, OS, etc)
Azure AKS

What do you expect? IP allocated for istio-egressgateway service?

Yes.

The loadbalancer IP depends on your cloud provider, it's not an issue of istio.

istio-egressgateway service created is of ClusterIP type instead of LoadBalancer type.
apiVersion: v1
kind: Service
metadata:
  annotations:
    ...
  labels:
    app: istio-egressgateway
    istio: egressgateway
    operator.istio.io/component: EgressGateways
    operator.istio.io/managed: Reconcile
    operator.istio.io/version: 1.5.7
    release: istio
  name: istio-egressgateway
  namespace: istio-system
spec:
  clusterIP: <IP_ADDRESS>
  ports:
  - name: http2
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  - name: tls
    port: 15443
    protocol: TCP
    targetPort: 15443
  selector:
    app: istio-egressgateway
    istio: egressgateway
  sessionAffinity: None
  type: ClusterIP

This is output from my cluster, and the service type is ClusterIP.  Ingress Gateway service was defined to be LoadBalancer and External IP was created by the cloud provider and assigned to the service.

You should use k8s resource overlay to set the service type instead of helm values:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  name: istio-operator
spec:
  # Use the default profile as the base
  # More details at: https://istio.io/docs/setup/additional-setup/config-profiles/
  profile: default
  namespace: istio-system

  components:
    ingressGateways:
    - enabled: true
    egressGateways:
    - enabled: true
      k8s:
        overlays:
        - kind: Service
          name: istio-egressgateway
          patches:
          - path: spec.type
            value: LoadBalancer
    pilot:
      enabled: true
    sidecarInjector:
      enabled: true
    telemetry:
      enabled: true
    citadel:
      enabled: true
    galley:
      enabled: true
  meshConfig:
    enableAutoMtls: true
  values:
    global:
      controlPlaneSecurityEnabled: true

Thank you very much @morvencao. this one did generate a valid type in the istio-egressgateway service.


drivers: pwm: Place API into iterable section

Add wrapper DEVICE_API macro to all pwm_driver_api instances.

You still had the led commit, need to drop that.

You still had the led commit, need to drop that.

You're too quick!

You forgot drivers/pwm/pwm_rpi_pico.c

Missed it because it wasn't static. Fixed

Careful making it static, but it looks fine in this case.

@anangl PTAL


"Remove files" button still sumbits the form.

You should add type="button" attribute to the button with {{ removeFilesMessage }} prop.

I have opened a pull request for it. #16

Thanks for commenting, please post a PR in the new repo:
https://github.com/updivision/vue2-multi-uploader


Travis: test with Python 3.7

Closes https://github.com/neovim/python-client/pull/356.

Seems to not work with pypy, could it stay on 14.04?

Yes, done.


RAM is very slow for HMset and and HMget

https://github.com/siddontang/ledisdb/issues/354
extremely slow, how do I speed it up? Afterall, I'm using RAM, using redis directly is 2x slower (because of the TCP roundtrip i suspect) but other in-memory such as freecache is running around 50ms average for both SET and GET.
Currently with the example you have provided, I'm running HMset at 6s. Can you pls give example on how to speed this up? I suspect it's at the FVPair area but... any ideas?
Hope you can look into the GC area like freecache. Thanks in advance.
pure SET and GET only 3x slower than freecache which is "acceptable"

I'm using https://github.com/siddontang/ledisdb/issues/354
it's actually as a package. How do I do cfg.DBName = "RAM" from a package called "myLedisDB"?
I dont know how to call it in func main() too... but I prefer it's set inside "myLedisDB" package. Can you provide some guidance? Thanks.

IMO, I can't get your point about how to set "RAM", you can set it every where before you initialize ledisdb.

I'm running HMset at 6s

Can you give me your benchmark case? 6s is too slow.

6s for 100,000 HMset, around 16666.6667 HMset per second. I would like to speed this up because I'm getting freecache for 100,000 set at 1s
possible to improve this? 16k hmset request/s i think it can be much higher.

try this :
https://pastebin.com/raw/df4pMAsz

@unisqu
The RAW mod you used is wrong, here is my change:
var cfg *lediscfg.Config
var fcachel *ledis.Ledis
var fcachedb *ledis.DB

func main() {
	cfg = lediscfg.NewConfigDefault()
	cfg.DBName = "memory"
	var err error
	fcachel, _ = ledis.Open(cfg)
	fcachedb, _ = fcachel.Select(0)

Above can use the memory mode. But this is still slower than freecache, some reasons:

You set multi field-values, each pair is a new key-value written, so the number of total written keys is 4 times than freecache.
HMset and HExpire also need to write meta data, another extra two Write operations.
HMSet and HExpire also need to read the meta data of Hash, another extra two Read operation
HMSet and HExpire will encode the key internally, this causes allocation and memmove.
goleveldb uses skiplist, which is not optimized

As you can see, many things need to be done in LedisDB, but I am still not satisfied with its performance, I have been planning to refactor this project, but have not enough time, sorry.

another thing is that even we use memory mode, goleveldb will still write data to WAL which will cause another I/O...

@unisqu
The RAW mod you used is wrong, here is my change:
var cfg *lediscfg.Config
var fcachel *ledis.Ledis
var fcachedb *ledis.DB

func main() {
	cfg = lediscfg.NewConfigDefault()
	cfg.DBName = "memory"
	var err error
	fcachel, _ = ledis.Open(cfg)
	fcachedb, _ = fcachel.Select(0)

I see a significant improvement from 6.5s to 5.3s with the above change. Thx

I see, how to disable the WAL? I need it in memory mode only.

there's advantage to using hash data type in cache on my application. if memory is exceeded, what will happen? the hash "key" is dropped based on LRU?

by the way, i'm quite surprised there's no easier way to rewrite this... seems very "redundant/extra"
       c := ledis.FVPair{Field: []byte("c" + urlreq), Value: []byte(htmlcode)}
       h := ledis.FVPair{Field: []byte("h" + urlreq), Value: []byte(qwcache)}
       t := ledis.FVPair{Field: []byte("t" + urlreq), Value: []byte(strconv.Itoa(timeNow))}
       s := ledis.FVPair{Field: []byte("s" + urlreq), Value: []byte(strconv.Itoa(statuscode))}

@unisqu
There is no way to disable WAL, you have to change the goleveldb code, but I don't know wether it is right or not. You can comment https://github.com/siddontang/ledisdb/blob/master/vendor/github.com/syndtr/goleveldb/leveldb/db_write.go#L244
For memory mode, all data will be saved in memory, no LRU, so you may meet OOM.
you can use
paris := []ledis.FVPair{
  {key, value},
  {key, value},
}

to simplify your code.

IMO, if you care too much about performance and just want a cache now, my project is not a good choice for you, because I have no time to improve it.

OOM

is there a quick fix to this? limiting ram usage and evicting based on LRU. do you mind pointing me to where i can fix this myself? i can buy you a few more coffee for this feature.

ok i've seen the code to goleveldb... i think i can comment enough things to skip those goleveldb sections.

truly, this package is more useful if purely MEMORY only. I really thought it was just memory only but i can't believe still needing to go through goleveldb.
from my assessment of your code, should only take 1 day for you to write for pure memory only with LRU.
I dont mind waiting a bit for this but when do you think you can do this? over the weekend?

is there a quick fix to this? limiting ram usage and evicting based on LRU. do you mind pointing me to where i can fix this myself? i can buy you a few more coffee for this feature.

maybe we can try other memory engines instead. But you must realize that LedisDB is not designed for cache. So if you forget to expire the key, you will meet OOM.
This is not one day or one-weekend work, and another problem is that I have not enough time even at the weekends these days.  To my honest, I want many guys to use my project, but now I have to suggest not using this project because it can't fit your need and can't be improved quickly.

do you have alternatives for the moment that uses hash like data structure for cache in golang? in-memory

maybe https://github.com/golang/groupcache?

it doesn't have hash key field value
only key value


Refacto(front):Full refacto front

Need to review all component and divise by function and component

[ ] Refacto security logged component check is done in page not in componement
[ ] Refacto dispatch and useEffect logic, dispatch for fetching data is now call from page before componement, no more useEffect for dispatch and fetch
[ ] Refacto Info page
[ ] Refacto CryptoList page
[ ] Refacto Dashboard
[ ] Refacto CryptoDetails
[ ] Refacto Wallet
[ ] Refacto WatchList
[ ] Refcato All rest component

First simple refacto ok, need to refacto logic in all big component


add a new param option: after_validation

I've added a new option after_validation to param to execute ruby block code after the validation passed.
Also, I updated the README file about the usage of it.

Hi @yanyingwang!
Do you think you'd be able to add some tests for the option?

@nickcharlton   Sure, I'll add tests for it and get to you later. Thank you for reminding me.

@nickcharlton   I've already added the test for this change. Please review it again. Thank you!

Thanks for your contribution, @yanyingwang. I appreciate you being responsive to adding tests.
I appreciate the symmetry of this API with Active Record validation callbacks in Rails, but think it's inappropriate in this case. Because the param method is executed synchronously in order of declaration, you shouldn't need callbacks to make changes after a validation. For example, I believe that your test case is equivalent to the version without an after_validation option:
get '/after_validation' do
  param :a, String, after_validation: lambda { |a| params["b"] = a }
end

get '/without_after_validation' do
  param :a, String
  params["b"] = params["a"]
end

Is there a situation in which after_validation offers behavior that couldn't be accomplished by a regular statement after the call to param?

@mattt,  thanks for the reply, and I think this is a good point for us to discuss. Actually, the after_validation can do some very subtle things as I think.
First of all, let's check out that when you say "the param method is executed synchronously in order of declaration" you mean that, for example:
param :a, Sinatra::Param::Boolean, required: true
param :b, Sinatra::Param::Boolean, required: true

This means the params[:a] should be a boolean and must exist at the same time, and after the validation of params[:a] is passed, and the validation of params[:b] will be started.
Am I right about this?
And about the subtle things and the usage of after_validation, let's take this example:
param :a, String, in: [ "aa", "aaa" ], after_validation: lambda { |a| params["b"] = (a == "aa" ?  "true" : "false") }
param :b, Sinatra::Param::Boolean, required: true

As my test with binding.pry, this is definitely not the same as this:
param :a, String, in: [ "aa", "aaa" ]
param :b, Sinatra::Param::Boolean, required: true

params["b"] = (params["a"] == "aa" ?  "true" : "false") }

If there is something wrong, please let me know and we can disuss it more deeply.

Thanks for taking the time to explain your intention with your feature.
To clarify, I believe that your example of after_validation in your latest comment:
param :a, String, in: [ "aa", "aaa" ], after_validation: lambda { |a| params["b"] = (a == "aa" ?  "true" : "false") }
param :b, Sinatra::Param::Boolean, required: true

...is equivalent to the following:
param :a, String, in: [ "aa", "aaa" ]
params["b"] = (a == "aa" ?  "true" : "false")
param :b, Sinatra::Param::Boolean, required: true

Is this not the case?

@mattt   Yes, you're right. I think it's the same thing. And it should be like this if without  after_validation:
param :a, String, in: [ "aa", "aaa" ]
params["b"] = (params["a"] == "aa" ?  "true" : "false")
param :b, Sinatra::Param::Boolean, required: true

@mattt  Probably not.
I have not tried them yet, but I think the difference is that within the after_validation, the block code will only be executed when there exists the request params["a"].
But without the after_validation, the block code params["b"] = (a == "aa" ?  "true" : "false") will always be execute no matter the request params has params["a"] or not.

@yanyingwang Alright, how about this, then?
param :a, String, in: [ "aa", "aaa" ]
params["b"] = (params["a"] == "aa") if params["a"]
param :b, Sinatra::Param::Boolean, required: true

My primary concern is that after_validation doesn't provide new functionality that couldn't be achieved by a roughly equivalent statement. Like with other feature requests, I'd prefer to limit the amount of logic that a param call encapsulates in favor of conventional Ruby statements.
An additional concern is that I can't think of a compelling use case in which this would be beneficial. That is, what would "a" and "b" be in a real-life example?

@mattt
I very appreciate that you're very responsible about this. But in my opinion, about your first concern,  what params doing here is provide an easy way to encapsulate code. Lots of methods here can be transferred to a roughly equivalent statement, such as transform: :upcase, we can do the same thing with preceding code like param["a"] = param["a"].upcase if param["a"]. What after_validation doing here is the same way.
Actually, my concern is after_validation can do things that may crash other things by accident, because it has the ability to change things out of param itself.
Back to the reality, the original idea of adding this after_validation option is from that I'm trying to refactor an API, let's say it's like this:
param ......
param :valid, Sinatra::Param::Boolean
param ......

And I want to substitute the valid param to status like this:
param ......
param :status, [ "valid", "expired" ]
param ......

But I still need to remain the API to be compatible with the old client request.
param ......
param :status, [ "valid", "expired" ], after_validation { |status| params["valid"] = (status == "valid" ? true :false }
param :valid, Sinatra::Param::Boolean
param ......

I know I can do it with a new API version, but this seems neat to me.

@yanyingwang
To your point about the transform, option—the notable difference there is that the transformation is applied before validation. So including it as part of the param call that defines the validation parameters makes sense to me.

Actually, my concern is after_validation can do things that may crash other things by accident, because it has the ability to change things out of param itself. And that people in their head may not know it.

For me, this is sufficient reason not to include after_validation as a feature. The implicit contract of the params call is that it affects only the specified parameter. Allowing a mechanism to cause side effects outside of that could make it difficult to reason about behavior.
A few thoughts about your status and valid example:

I wouldn't advise having a single route handle logic for multiple API client versions. If possible, a better design would be to have a route for each version, switching on the relevant hint (API_VERSION header, query parameter, etc.)
The determination of whether or not something is valid shouldn't be a parameter, it should be a regular Boolean variable. In your route logic, you should instead have is_valid = params["status"] == "valid" || params["valid"].
In actuality, the logic for determining whether something is valid is underdetermined in your example. If params["valid"] is explicitly set to "false" in the parameters, that value would be overridden by params["status"] set to "valid". Again, the side effects of after_validation make it difficult to reason about what's happening.
If you really didn't want to write another line of code, you could always just do:

param :status, [ "valid", "expired" ]
param :valid, Sinatra::Param::Boolean, default: { params["status"] == "valid" }


rcon password not work after update

I'm using ARRCON as the client in the past, but today when I udpate the docker image, it's unable to work anymore.
This is what I used.
E:\Game\PalworldServerManagement\ARRCON-3.3.7-Windows\ARRCON.exe -H <palworld serverIP> -P 25575 -p <mypalworldadminpassword>

by any change have you defined your password as follows?
ADMIN_PASSWORD="PASSWORD_HERE"
If you do, I would recommend you change it to:
ADMIN_PASSWORD=PASSWORD_HERE

you are right, I'm using the quote version.
Then how to update the old docker-compose.yml file? just simplely remove every string double quote?

@JustusPan Yup just remove all the quoted strings.
That is not a valid crontab expression, you can use this tool to validate: https://crontab.guru/


Add One or More Screenshots to Readme

Once output formatting is improved, adding a screenshot or two of output to the readme from Stubb would be helpful.

Closing due to stopping active dev on this repository.


Shutter pages

Shutter pages prototype: https://hmrc-design-patterns.herokuapp.com/pages/shutter-pages/index
Todo

[ ] Discuss the header for shutter pages. Using the standard header with phase banners and HMRC logo may be overkill for this page
[x] Do we need as many examples as are displayed on this page

Related issues

#54 Service closed
#59 Technical difficulties
#29 Service unavailable

Number of examples
We discussed the number of examples on the page in our show and tell in Worthing and consensus was that more examples was better than just one. It's easier to do the right thing if there are concrete examples.

Branch created on assets frontend for this pattern https://github.com/hmrc/assets-frontend/tree/%23103-shutter-page-pattern

@gavinwye Same as #29.

This is published in the GOV.UK Design System. We have the Welsh version but there is no reason to keep a separate issue.


Errors on yaml.validate: true

Environment:

macOS
cfn-lint: 0.29.5
vs code: 1.44.2
vscode-cfn-lint: 0.11.1
vscode-yaml: 0.7.2
no other yaml extension installed

Problem
This extension is setting yaml.validate to false whenever it starts.
As I understand this is done because, with the default setting (true), a lot of false errors are shown.
Leaving out that's a bad practice to edit other extension's settings with no user consent/notice, my first question is:

Why disabling the validation instead of fixing the bug?

I noticed other closed issues on this topic, but it seems the problem was never resolved.
Since I think that we should be able to work with the validation enabled, I want to ask:

Will there ever be an effort to make this extension work with yaml.validate: true?

Let me test a few things out.
Also note that the Readme needs to be updated to include the setting.
https://github.com/aws-cloudformation/aws-cfn-lint-visual-studio-code/blob/master/package.json#L87-L91
The idea here is to draw visibility to issues with the yaml validation as we are mostly looking to use that extension for the autocomplete capabilities.  We tried to wrap the setting with our own setting and only set it if appropriate.  I would agree this isn't an ideal solution but we believe the autcomplete functionality is helpful to doing CloudFormation development.  What I want to make sure is that we didn't miss a scenario.  We should only be setting yaml.validate to false only if you have cfnLint.validateUsingJsonSchema set to false

Another problem of writing yaml.validate: false into the settings.json of vs code is also that the validation is disabled for every other yaml file, be it a cfn o just a regular yaml.

relevant code:
https://github.com/aws-cloudformation/aws-cfn-lint-visual-studio-code/blob/089b197e2c7df4ec26d35c23ebb77383c724a86e/client/src/extension.ts#L188-L209

Hello @kddejong and @PatMyron,
Have you been able to find a solution to this?
I am new to cloud formation. I have spent several hours figuring out why block scalars are flagged as errors in the Yaml files. JSON schema is not identifying values as strings when working with the Intrinsic function.

I'm working on a new way to include the yaml language server that should resolve these issues.  its a bigger rewrite to the plugin but should allow us to completely decouple from the vscode-yaml extension.

We no longer require vscode-yaml and this should be resolved at this point.

Thanks @kddejong


Location jumping back to real location

Hey there,  is there a way to set the max speed moving with the dpad? At the moment the options are locked.
By the way, i recognized the location sometimes changes to my real location for about a second when using floating view, then it changes back to the fake location. Is there a workarround for this issue?

I have the same issue with or without dpad. Always trying to go to my real location than return back to fake one, constantly, that's annoying when playing and get me banned sometimes cause of that.

So it's not just me. I tried to disable GPS, but then it's Messing gps

Whoops, wrong Button.
So, again. Disabling GPS doesn't work. I have Set GPS mode to "only GPS", still getting this issue. I'm using galaxy Note 3 / Android 4.4.2

No, you're not alone. That's very annoying. Sometimes it's doing this every 5 seconds...

I've got another Problem, maybe you can confirm that too. Sometimes the Google App which has to be used for GPS mocking crashes. This happens randomly when using pad

Sorry for closing / opening. Just flashed my device, i have to get used to it again

I think that jumping back to the real location may be caused by the app calling FusedLocationApi.getLastLocation(), this function's mocking settings is working if you set to the app itself not com.google.android.gms

What do you mean?!

Is there a way to fix it? Sorry if I misunderstand you.

j2rong: Is there a way to solve the issue falling back to real location?
Thanks man.

working on a temporary workaround, but what's really causing this is still being investigated.

Sweet, thanks. Let us know when it's done bro!

I think it's fixed, feel free to reopen if there is any problem.

There is no upgrade?

0.8.404.813 only version available in Xposed Installer.

Latest version available*

Sorry! It's there now! Thanks man!

Jumping back again... Issue not solve on LG G4 LG-H812.
Thanks.

Hope you can find the issue...

try turning off gps and what's your settings?

GPS only in Location settings. Mock Mock Location installed + your FakeLocation app. That's it.

If GPS turned off, Pokemon Go give me error "GPS signal not found" and I'm unable to play.
Thanks man.

Oh, and, Mock location not on in developer's option since I am using Mock Mock Location, it doesn't allow me to tick option on.

Try clear your settings in "com.google.android.gms" and set it in Pokemon (also connect with it)
If it still doesn't work, turn on log switch in Settings and post it please. (XposedInstaller - Log)
PS: The module doesn't need mock location permission

Where do I clear that? What't that application?
Ok, gonna deactivate Mock Mock Location.

I mean I know how to clear cache/settings, but what is the application name of "com.google.android.gms" ?

Which package do you set to mock Poke's location?

The one that contains Google Services.

@roylaprattep Set and connect to Poke's package instead

I FakeLocation on the Pokemon Go app? If so, the app give me the error "Failed to detect location".
"Allow mock location" enabled in Developer's options.

No more FakeLocation on "Google services" too.

Well... Faking location on Pokemon Go instead, doesn't work. I guess I will have to live with the problem...

Can you provide some logs?
Turn on in FakeLocation's Settings, and run the game, the logs can be found in XposedInstaller

Did you received my log file via email? I sent it.

Well, keep me in touch buddy!

@roylaprattep email not received, you can post it here

I do not see option to attach a file?

Give me your email please so I can send you the complete log file.

error.txt

Got it!

Maybe you will have to rename it to "error.log", this was it's default name, github gave me error, isn't supporting extension ".log".

@roylaprattep It looks like you are mocking com.google.android.gms and com.nianticlabs.pokemongo at the same time?

No Polemon Go isn't mocking, I only tried this one time to test if it can solve the problem.

Found any solution?

Hellooo?  Is there anyone...?
Still have no solution?
Just tell us if you can't find s solution...

Sorry for the late reply,
Can't find anything in the log, but I'm working on several problems may related to this in future releases, you may try it then

Rooted devices can't play anymore and RootCloak have no effect... Can you do something about it?

@roylaprattep
You can search 'Magisk'


Turicreate Text Classifier predicts lower accuracy than CreateML Text Classifier

The same training data, turicreate 80% prediction accuracy is lower than createml 95%,
but the creation of objects occupy memory, turicreate is lower than createml, memory very good,
the Turicreate .mlmodel file 1.5MB created object memory occupancy exceeds 6MB,
the Createml .mlmodel file 100KB created object memory occupancy exceeds 6MB.
Turicreate How should I improve the prediction accuracy?
https://apple.github.io/turicreate/docs/userguide/text_classifier/
https://developer.apple.com/documentation/createml/creating_a_text_classifier_model

To improve the performance of Turi Create's text classifier, there are few things you could try:
1 - Try increasing the word_count_threshold parameter of text_classifier.create. This will also decrease the size of the .mlmodel file.
2 - Trying increasing he max_iterations iteration parameter.
3 - The text classifier wraps logistic regression. You could preform the preprocessing yourself then try using different parameters when creating the logistic regression model.


Make metadata available for use in templates

Please answer the following questions and leave the below in as part of your PR.

[x] This PR corresponds to an issue with a clear problem statement.

[x] I have updated the CHANGELOG.md file with a description of the addressed issue.

I'd like to specify a canonical URL for some of my blog posts in their metadata and then use that in the resulting HTML. Instead of exposing one more specific type of metadata, I thought it would be useful to just make all metadata available for use in the templates.
I'll create an issue with a more detailed problem statement and update the changelog later today.

Thanks!


Drop player if not in discord

Is it possible to force player to be in discord?
If the player is not in discord then disconnect the player?
I did set the requirements to have discord but it does not drop the player instead the player is able to click the play button anyways.

Nevermind I just removed the play button, and that fixed it


Provide easy means to list and join chat channels

As Axel just showed me, join should be easy since its basically already implemented like when you close all channels.

Related:
https://github.com/FAForever/downlords-faf-client/issues/532

Existing channels (like language channels) can be advertised in the UI used for opening a new channel, which should be easier to access with https://github.com/FAForever/downlords-faf-client/issues/532
Related: https://github.com/FAForever/downlords-faf-client/pull/854

Not going to be implemented due to lack of channels for now