Feature - Chat Badges

So here is a quick go at adding the subscriber and turbo badges.
If you can track more, such as mod badges and staff that could make it pretty complete.

It seems to run into an issue with bttv where the styling that mimics the twitch site doesn't seem to work with bttv.

Currently looking into fixing that, I am thinking that the changes I did in pr #18 should fix it, but I am going to submit this pr first before I try to test it with those changes. This addresses issue #20

Having those additions does not seem to change it. Looks like bttv strips the float-left class from all chatlines, which causes the emotes to not be handled correctly. Not sure what to do.

Thanks. There is a field called usertype (mod, global_mod, admin or staff) in our JSON that can be used for even more badges :smile:

Closing this as #26 seems to be based on this PR


We don't have the ability to use a consistent version on Transifex - causing syntax markup differences

The issue
E.g. https://github.com/silverstripe/silverstripe-framework/commit/fc63ac8fed8587714000c1a37bf7331a34818614#diff-8eff9e0de4d3e7e3184cac847cffd119R92
Sometimes it seems to be changing quotation around strings even when string values don't change at all.
The cause
Depending on a local dev set-up, people may install different versions of Transefix, based on the dependancies it defines.
Solution
~a). It seems difficult to pin all local development environments to use the same version, aside from creating something like a Docker image.~ We're going for Option B.
b). Perhaps we just need to update the release documentation that a pre-set up process is to have the same version of Python and ensure Transefix is up to date, which Transefix relies on.

It's possible that this happens when two different farmers have different Transifex CLI versions, perhaps?

Yeah, I've just updated transifex-client dependencies and the issue seems to have disappeared

I'm thinking maybe we should add some sort of pre-step that checks that you have a compatible version of all required third party tools. Basically, if you don't have the correct version of python or PHP or transifex, then we block you right away from proceeding.

That implies we'll have to maintain that list of compatible versions and update it when security releases come out. Furthermore, if you have a native setup, those could be upgraded by your package-manager or prevent you from upgrading your operating system in case you pin them down to the particular versions.

My perception of it is perhaps a little less expansive. I wouldn't lock people down to specific versions or flag insecure version of dependencies ... I don't think that's cow's purpose. I would mostly focus on defining what the minimal required versions are.
It would have been helpful for me getting cow set up locally if it warn me straight away of what I was missing.
Also for people running this thing natively, they are relatively easy way to switch between version of different binaries. e.g.: Ubuntu ships with Python 2.7 and Python 3.6, and you can pretty easily swap between the two with some clever use of alias.
At the end of the day if we know for a fact that cow doesn't work with specific version of some dependencies, then we should make a reasonable effort to try to warn users about it.

I wouldn't lock people down to specific versions or flag insecure version of dependencies ... I would mostly focus on defining what the minimal required versions are.

In that case, we won't solve the issue reported in this card since the problem caused by the transifex dependencies installed with a time difference in several months

At the end of the day if we know for a fact that cow doesn't work with specific version of some dependencies

it does work in both cases, but produces slightly different artefacts (semantically correct in both cases, but syntactically different)

It would have been helpful for me getting cow set up locally if it warn me straight away of what I was missing

Agree, I think we might add a checker for those tools to be installed, but that feels to be a different problem since it happens with transifex-client installed and functioning well in both cases

You're talking about using Docker for cow now right, so we can have a consistent Transifex CLI version if we do that?

yes, I think in that case we might be able. That could imply us baking the image and publishing it to the hub. However, at the moment it always installs the freshest versions of everything on every localhost first time the container is getting build.

Yeah, we striked-out the Docker option for this issue because it seems over-kill just to resolve this issue. Although, now that @dnsl48 already has the Docker PR ready we could shift the focus of this issue to make some explicit Transifex config updates to the container. Otherwise we're still going to see the same problem with individual containers being set up at different times.
The outcome of this issue is that everyone uses a consistent version of Transifex (not a minimum version) so to avoid syntax differences between versions.

Given the above, I'm opening back up the Docker option. Here's the changes to the description:

Solution options

- a). It seems difficult to pin all local development environments to use the same version, aside from creating something like a Docker image.
+ a). Update the newly created Docker container to enforce a consistent version of Transifex. See recent PR: https://github.com/silverstripe/cow/pull/149


Refactor Font Awesome and SimpleIcons

Font Awesome
The issue
DoIt makes heavy use of Font Awesome's icons. But the way we load it in is pretty slow. We are using  CSS + web font to load these icons, which means the browser needs to first download and parse the CSS file, then it finds the links to the web fonts, then go and downloads all of them before it can render any icons. To make things worse, we also download all the icons on all pages. So even on a simple webpage without any font awesome icons, the user still needs to pay this heavy performance penalty.

The files are pretty large as well. On documentation site's homepage, all the icons take up more than 30% of the total download size.
The proposal
A better plan is to inline all the icons as SVGs right inside of the HTML, so users only download what's actually get displayed. Repeated icons will get gzipped, so they won't take up extra bandwidth.
For the most part, it should be pretty straightforward to implement. We can download and commit all the raw svg files into the repository (we are already doing this for SimpleIcons). Then use https://gohugo.io/functions/os/readfile/ to read them in as needed during build.

Potential breaking change: I am not sure how to handle https://hugodoit.pages.dev/theme-documentation-content/#fontawesome I would rather replace this with a shortcode, but this will cause a huge breaking change.

SimpleIcons
SimpleIcons are used as SVGs files, but they are loaded inside theme.js using fetch calls.
https://github.com/HEIGE-PCloud/DoIt/blob/bc2dc96d4ea7d0dc1e7238dd89e978c8f2b8653a/assets/js/theme.js#L48-L64
Ideally, this should be moved to build time as well. https://github.com/HEIGE-PCloud/DoIt/blob/bc2dc96d4ea7d0dc1e7238dd89e978c8f2b8653a/layouts/partials/plugin/icon.html

It's really great.

https://pagespeed.web.dev/analysis/https-pages-hugodoit-com/sc03psd1s7
100/100


'Frame rate' is inconsistently spelled as one word

Both the 'frame rate' and 'framerate' spellings are used. Note that the options screen uses the text 'framerate', though that may not be the correct spelling.

Maybe it's worth just switching all usages of framerate to fps, since latter seems to be used much more frequently?

No, I dont think FPS and framerate are the same thing. FPS Is a unit of framerate. There might well be places where FPS could be used, but check before blindly replacing it everywhere.

No, I dont think FPS and framerate are the same thing. FPS Is a unit of framerate. There might well be places where FPS could be used, but check before blindly replacing it everywhere.

they are the same thing in the context of Minecraft, as Minecraft always uses FPS to measure framerate. both instances of "framerate" being used in Yarn refer to FPS (MAX_FRAMERATE is used in the max framerate slider, which is measured in FPS, and frameRateSamples gets populated with MinecraftClient#currentFps)


Escape # in links

When creating a link to a file with a # in the filename, the link gets truncated. This happens because the filename is eventaully is passed to url.Parse which (correctly!) interprets the # as fragment separator.
This commit escapes the # in the filename before creating the link.
Fixes #12342

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

1) Add a test to cover #4926, #8232, and #12342

resources/page/path_integration_test.go
// Copyright 2024 The Hugo Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package page_test

import (
	"testing"

	"github.com/gohugoio/hugo/hugolib"
)

// Issue 4926
// Issue 8232
// Issue 12342
func TestHashMarkInPermalink(t *testing.T) {
	t.Parallel()

	files := `
-- hugo.toml --
disableKinds = ['section','rss','sitemap','taxonomy']
[permalinks]
s1 = '/:section/:slug'
-- layouts/_default/list.html --
{{ range site.Pages }}{{ .RelPermalink }}|{{ end }}
-- layouts/_default/single.html --
{{ .Title }}
-- content/s1/p1.md --
---
title: p#1
tags: test#tag#
---
-- content/s2/p#2.md --
---
title: p#2
---
`

	b := hugolib.Test(t, files)

	b.AssertFileExists("public/s1/p#1/index.html", true)
	b.AssertFileExists("public/s2/p#2/index.html", true)
	b.AssertFileExists("public/tags/test#tag#/index.html", true)

	b.AssertFileContentExact("public/index.html", "/|/s1/p%231/|/s2/p%232/|/tags/test%23tag%23/|")
}

2) Change the commit message per the code contribution guidelines:
resources/page: Escape hash sign in permalinks

Fixes #4926
Fixes #8232
Fixes #12342

Wow, thanks!

Fixed grammar mistake in the commit message.

Sorry, I didn't see this before creating #12342.
It's not like this has been working before, so #12342 shouldn't be a breaking change.
I don't see why someone would want to keep # in the path part of the URL, but if someone could come up with a convincing argument, I'll listen. But we cannot just patch the page permalinks, that is rather arbitrary. This is certainly also a problem for all the resource.* creation/getter funcs etc. We could fix it in the paths.URLEscape func (note that I have have removed the duplicate URLEscape in #12342), but we would have to be careful about not escaping trailing hashes.

OK, I closed my PR. I will merge this, lets worry about other URLs later.


Draft: Resource not implemented for MatchboxSocket Fix

This isn't a fix, just a quick way to share the problem.
References #178

Okay if we delete the branch?


wasabi package doesn't work without JAVA_HOME setup

You have to setup the JAVA_HOME additionally to make it work in OSX
export JAVA_HOME=/usr/libexec/java_home

@vinodtalati the following lines in [ws]/bin/fpm.sh fail on osx where users do not specify JAVA_HOME:
export JAVA_HOME=${JAVA_HOME:-/usr/local/java}
export PATH=$JAVA_HOME/bin:$PATH

q: are these lines required for all supported environments?
if so, then for OSX we should set the default value to /usr/libexec/java_home
q: if we do have to set JAVA_HOME then does /usr/libexec/java_home exist on linux?
i am hoping we can remove explicitly setting JAVA_HOME :)

@jwtodd This should be removed.
The path /usr/libexec/java_home doesn't exit on linux. This is only for mac.
The Ubuntu patch we added does everything required for Linux inside the bootstrap method (in wasabi.sh). For Mac the JAVA_HOME was never set anywhere. It could be added to bootstrap as well.
In any case the lines you mentioned in fpm.sh should not be there.

ok thx @vinodtalati i will spin up a PR
much appreciated!


Precision now sets the number of decimals

Dear Orca,
Thank you so much for this client!
I fixed the 3rd parameter precision of field() so it indicates the number of decimals instead of the total number of digits. Now it should behave like your influxdb-c client.
Yours,
Trucosuso.

Thanks to your excellent contribution.


Mock routes should set response statusCode

Specific case: Hapi appears to not set status code to 200 automatically (apparently the other frameworks do). Since swagger-tools validator relies on statusCode being set (swagger-validator.js:224:41), it should ensure that it explicitly sets statusCode when sending responses.
See: https://github.com/swagger-api/swagger-node/issues/277

This is more of a result that res.statusCode does not default to some value in Hapi rather than swagger-tools not setting req.statusCode.  The way mocking works is that it will check req.statusCode and based on its value, we will look up the response for that status code.  Since Hapi does not set this, we will not assume res.statusCode has been set and default to 200 to fix this issue.

Actually, mocking handles this fine.  :)  The problem with this is in the validator where we do response validation.  No biggie, the fix is still the same.

You're right, we should be explicitly setting res.statusCode when we render the mock response.  Since we fail to do that, and Hapi doesn't do it for us, we break the response validation code which assume res.statusCode is set.

<EMAIL_ADDRESS>has been released with this fix.


project doesn't compile after merge request #6

mvn clean install produces following error:

[ERROR] Failed to execute goal on project java2typescript-jaxrs: Could not resolve dependencies for project java2typescript:java2typescript-jaxrs:jar:0.2-SNAPSHOT: Could not find artifact java2typescript:sample-web-app:jar:0.2-SNAPSHOT -> [Help 1]

That's because @raDiesle created 2 new subprojects that appear to contain everything from sample-web-app, but dependencies are incorrect.
I'll fix the dependencies with pull request soon, but I still have one question:
@raDiesle, should sample-web-app subproject be deleted?

to fix this issue, please merge either pull requests #17 or #18 (that contains code from other merge requests as well, that would otherwise conflict with each other)

hm, thanks for fixing!
I do neighter remember my pull request nor have an explanation


Support K8S Gateway API

As also described in https://gateway-api.sigs.k8s.io/ an Ingress API (resource) isn't tied to a specific role, but instead contains configuration for both infrastructure, policies, frontend and backend. The new Gateway API solves this by splitting the ingress api into Gateway, Route, etc...
Today there is no support for the Gateway API in Pomerium and it would be nice to add it.
My question is whether there are plan / initiatives in this direction?
Paul

There are no immediate plans to implement the Gateway API but it is something we are investigating and encourage community feedback here as we investigate it. Thank you for the request @paul-bormans!

Happy to say we have support for Gateway API in 0.28. Learn more at https://docs.pomerium.com/docs/k8s/gateway-api. Let us know your feedback @paul-bormans !


Specify occurrence of each sequence in input

Hello,
Could the library support occurrence information of sequences in the input? I have data in this form, where the last element of a sequence indicates the number of times this sequence has occurred in the dataset.
c d e 7
b b b d e 89
c c c a 123
b b c c 789

Seems duplicate of #21. Please double check that one.


Changed interpolation technique

Changed interpolation technique to BICUBIC. Also created a config file which will maintain all the static predefined and static information.

Thanks for the PR! Merging now.


Error when running migrations.

I'm getting the error
TypeError: Cannot read property 'split' of undefined

Would you mind sharing your localStorage data if this persists so I can debug?

I won't be able to look at this until Monday.

This is still happening

Hi, I have looked at the changes you made yesterday in #62 , this now works. Thanks.

Great! Thanks for checking it out and reporting. I will close this now.


Instructor training form wording

Fixes #1224 and #1231.

This needs further work on UI at admin side and on tests.

@erinbecker can you please take a look and decide if this is how you wanted it? Don't mind the "Captcha" field being wrong - it's due to a testing session.

Sorry for the delayed response. Thanks for implementing these changes @pbanaszkiewicz. There have been a few developments since this issue was originally opened, so I've included those changes in the points below to get everything updated in this change if possible.

line 1 please change “Software Carpentry and Data Carpentry” to “The Carpentries”
capitalize Code of Conduct in first bullet point
change second bullet points to “You must complete short follow-up tasks after the course in order to complete certification. The tasks are described at [url].” (i.e. leave out “three” and estimation of total time, as these tasks may change in the near future)
In blue box, change “partner” to “member”
text under group name, please change to “If you are scheduled to receive training at a member site, please enter the group name you were provided.”
the question “I self-identify as a member of a group that is under-represented in research . . . “ and the following question should both provide check boxes in addition to a text box. We want respondents to be able to say that meet this criterion and then give details about how.
The question “How often have you been involved with The Carpentries in the following ways” should not be check boxes but rather pull down menus with numbers (0, 1, 2, 3+) for each category.
The second to last check box - please end after the url and remove “and take a total of approximately 8-10 hours”.

The idea behind removing the specific references to the number of checkout tasks and the time it takes to complete them is that by having this information available in only one place (the website rather than AMY) it will be easier to keep it up to date. Thank you very much!

Thanks a lot @ErinBecker and sorry for the delay. Here's a screenshot containing requested changes, except the following:

the question “I self-identify as a member of a group that is under-represented in research . . . “ and the following question should both provide check boxes in addition to a text box. We want respondents to be able to say that meet this criterion and then give details about how.
The question “How often have you been involved with The Carpentries in the following ways” should not be check boxes but rather pull down menus with numbers (0, 1, 2, 3+) for each category.

They're a little bit harder to make. Thanks for patience :)

A few minor suggestions from myself:

if you're moving from "partner" to "member", maybe you want to change "partnerships[at]carpentries.org" to "memberships[at]..."
you can unify link to the Code of Conduct, ie. host it at http://carpentries.org/conduct
just above the blue information box there's this part:

Carpentry instructor training, please see http://carpentries.github.io/instructor-training/.

I'm wondering if I should change it to "For Carpentry [or Carpentries?] instructor training, please see [url]."

Thanks @pbanaszkiewicz - please see my PR to this branch on your fork here: https://github.com/pbanaszkiewicz/amy/pull/5

@pbanaszkiewicz - did my changes come through ok? I was trying to take care of the fiddly wording so that you didn't have to add any more commits, but I'm not sure if my syntax was correct. If it was, I think this is ready to merge.

@ErinBecker I'm very sorry for the delay. I've merged your changes (thanks a lot!) and also reverted the my change regarding under-represented question.
I think we're set, can you please confirm?

One thing I've noticed is that there's (unstyled) Code of Conduct available now at http://carpentries.org/conduct/, not sure if you want it instead of two CoC urls?

This looks great! Thanks @pbanaszkiewicz! I've merged the current version.
Our Carpentries website is due to be officially "released" and shown to the general public in the next week or so, but I think having the two URLs is fine for now.

@ErinBecker excellent. Should I make a release & deploy later this week?

Yes please!!
On Tue, Mar 27, 2018 at 12:48 PM, Piotr Banaszkiewicz <
<EMAIL_ADDRESS>wrote:

@ErinBecker https://github.com/ErinBecker excellent. Should I make a
release & deploy later this week?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/swcarpentry/amy/pull/1230#issuecomment-376651792, or mute
the thread
https://github.com/notifications/unsubscribe-auth/ASSbf424eApYQoleTYY_RA1Qx5aJpm5sks5tipeNgaJpZM4SC08Q
.

--
Associate Director, The Carpentries


Issue predb status cleanup

References

Related to https://github.com/DSpace/DSpace/issues/8125
Related to https://github.com/DSpace/DSpace/pull/8267

Description
The script to update solr docs with predb state (from eg Import script) only processed the first 10 docs with database_status:predb (default solr page size)
Instructions for Reviewers

Add more than 10 new items

Check in solr they have database_status:predb

Run item-database-status script with config item-database-status.time-until-reindex set to 0 for example (so all solr records indexed before script run time) are updated

Verify all the docs for the new items no longer have predb status

For automated test: Run updated SolrDatabaseResyncIT before fix & verify script fails to clear status field for more than 10 docs

Checklist

[x] My PR is small in size (e.g. less than 1,000 lines of code, not including comments & integration tests). Exceptions may be made if previously agreed upon.
[x] My PR passes Checkstyle validation based on the Code Style Guide.
[x] My PR includes Javadoc for all new (or modified) public methods and classes. It also includes Javadoc for large or complex private methods.
[x] My PR passes all tests and includes new/updated Unit or Integration Tests based on the Code Testing Guide.
[x] If my PR includes new libraries/dependencies (in any pom.xml), I've made sure their licenses align with the DSpace BSD License based on the Licensing of Contributions documentation.
[x] If my PR modifies REST API endpoints, I've opened a separate REST Contract PR related to this change.
[x] If my PR includes new configurations, I've provided basic technical documentation in the PR itself.
[x] If my PR fixes an issue ticket, I've linked them together.

Ported to dspace-7_x via https://github.com/DSpace/DSpace/pull/9269


Can't parse 'center'. Sequence item with index 0 has a wrong type

File "draft.py", line 8, in
fr_object1.train_model(folder)
File "C:\Users\Hoan\anaconda3\envs\timekeeping\lib\site-packages\FaceReco\FaceReco.py", line 84, in train_model
faceAligned = self.faceDetection(os.path.join(trainpath,im))
File "C:\Users\Hoan\anaconda3\envs\timekeeping\lib\site-packages\FaceReco\FaceReco.py", line 55, in faceDetection
faceAligned = self.fa.align(img, gray, dlib.rectangle(x1,y1,x2,y2))
File "C:\Users\Hoan\anaconda3\envs\timekeeping\lib\site-packages\imutils\face_utils\facealigner.py", line 67, in align
M = cv2.getRotationMatrix2D(eyesCenter, angle, scale)
TypeError: Can't parse 'center'. Sequence item with index 0 has a wrong type
Can you fix this please

I'm having the same issue. When I tried to debug using the source files, I got:
Input In [5], in FaceReco.init(self)
13 self.serial_number = FaceReco.number_of_object_count
14 posepre=pose_predictor_model_location()
---> 15 self.pose_predictor = dlib.shape_predictor(posepre)
16 detect = face_recognition_model_location()
17 self.face_encoder=dlib.face_recognition_model_v1(detect)
RuntimeError: Error deserializing object of type int
Seems like there is something wrong with *.dat files now.


[WIP] Implement xml_file fetcher

@amywieliczka, if you want to take a sneak peek at this XML fetcher, I invite you to do so. It works, and I fetched collection 26935 of the reported 77k records in about 20 seconds locally. It reported there are actually more than 110k records though, so there might be an issue there, or maybe there's actually more records.
I haven't written any mapping code yet, so I consider this to be a little naive, a little optimistic, but nevertheless it does what it's supposed to do. Let me know your thoughts!

@lthurston I think our legacy harvester code has some logic built in to leave out "metadata only" records; the source collection has some items that don't have a digital image -- just metadata records only. That may account for the count difference that you're seeing

@aturner That makes sense, thanks for the explanation. My instinct is to leave those records in our imported files in order to stay as true to the original source data as possible (despite the fact that we have to rewrite it to paginate), but am only too happy to be overruled.


Investigate compatibility with sky plugins

There has been interest on the forums in increased compatibility with plugins like TrueSky, e.g. making CesiumSunSky share its directional light with these other systems. It may be good to research how these other plugins work and if it is straightforward to better expose the directional light in Cesium SunSky.
TrueSky, for example, references a directional light in the scene. CesiumSunSky has a directional light component as part of the blueprint. It would involve changing the base SunSky functionality somewhat, but it may be possible to modify CesiumSunSky so that it also references a directional light in a scene, rather than its own directional light component.

Yes please

Any chance for a tutorial or just advice on how to to modify CesiumSunSky so that it also references a directional light in a scene?

Hi @WellyWonder,
We are currently working on a tutorial that covers CesiumSunSky in detail. In the meantime, I tested out a few things and I was able to modify CesiumSunSky to use a scene directional light instead. You can find those changes in this branch.
This may be merged into main and included in a future release soon, but I haven't done thorough testing yet so I'm not sure what the timeline on that would look like.
If you want to replicate the changes yourself, here's what I did:

Added two new editor variables, a boolean and a Directional Light Object Reference. You can create a directional light in the scene and assign it to the Level Directional Light object reference.

In the Construction Script, add a branch to turn off and on the directional lights based on which one you'd like to use

In the Update Sun function, "Orient Sun and Directional Light" section, add a Select node to pick between the two directional lights and replace the original directional light reference. All the nodes above the comment box were added for this.

Please let me know if this works for you!


Unicode Null Characters & Adding Entity to Luis.ai causes Training to Fail

If you have no custom entities created on Luis.ai but get a training failed error as soon as you add one, you may want to check if you have unicode null characters in your exported JSON. A couple of weeks back we added training utterances with multiple spaces before the start of the utterance. This caused unicode null chars ("\u0000") to be added to our JSON. There were no problems until we tried to add an entity a few weeks later. Once these chars are removed, Luis will be able to train again. I tried reproducing the issue, but it looks like the Luis.ai team has fixed the problem.
I reporting this issue so people don't have to spend hours trying to figure out what is wrong.

Closing because this is fixed.


[ENHANCEMENT] : "Show More" Button is off centered

The Show More button is off centered.

I can take a stab at this one!

Okay @DeandreJWhite assigning to you.

@DeandreJWhite Are You working on this or should I remove the assign? Please let me know at the latest.

I wanted to work on this, and I am great at HTML/CSS... but I cannot figure out how to operate GitHub correctly :/ (How to clone the file and repo?)
If you can help me that’s great, sorry.

On Oct 19, 2020, at 2:15 PM, Yuvraj Dagur<EMAIL_ADDRESS>wrote:

@DeandreJWhite Are You working on this or should I remove the assign? Please let me know at the latest.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

hi!
i see two PR open, do want to wait for @DeandreJWhite fix?

@manuelrhdotcl I don't know. He's saying he can't figure out how to get it done with Github? I do want to know how he solved it as he is saying that he is good at HTML/CSS ;-)
Maybe @thatfreakcoder need to have a look. greets!

Hey guys thanks a ton. I am excellent with code but have never used Git before. I am trying to complete a Hacktoberfest challenge but Github is confusing...

We are here to help @DeandreJWhite ,first of all i recommend to download VS code. with this you can easily work on git projects. For the working part here, you first need to fork this project to your own profile. Se the repo we are in now thatfreakcoder/AngularWeatherApp becomes DeandreJWhite/AngularWeatherApp. once you've done that, you need to clone the repo to your pc. you can do this with the git cli, use git bash (i use that) and browse to the folder you want this repo to be in. once there you use the link of this repo in this command git clone "repo url"
then the repo wil be "copied" to your folder. Once youve done that you can open the folder with VS Code. Now you can edit the code as you want. Once you're done (and the code works with no errors) you need to:

stage the changes
commit the changes
push the changes
these 3 steps (you can go to the "changes" tab in VS Code to do that) will push the changes you made to the repo in YOUR profile. Once you visit the repo in your profile, it's gonna say at the top '"This repo is x commits ahead of "the repo from thatfreakcoder"'. than you click on "Create pull request" and then if it says that there are no merge conflicts you can create the pull request.

quick guide on how to get this done but the Hacktoberfest have made a video that explains it all.
Video from Hacktoberfest
Hope this helps!
Happy coding @DeandreJWhite

@amauryverschooren gave an excellent explanation @DeandreJWhite . See if that helps, and make a PR. waiting for your PR since it was assigned to you. @DeandreJWhite .

@DeandreJWhite how you doing? if you have any questions, shoot! we're here to help!
Greets Amaury

Sorry, please remove me from the project.

On Oct 22, 2020, at 2:11 PM, amauryverschooren<EMAIL_ADDRESS>wrote:

@DeandreJWhite how you doing? if you have any questions, shoot! we're here to help!
Greets Amaury
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

Hi @thatfreakcoder , I can work on this. Please assign to me.


Seeking proposals for how to implement STREAMING body mode in ext_proc

Title: Help figure out how to implement STREAMING body mode for the ext_proc filter
Description:
The ext_proc protocol describes four ways to handle request and response bodies:

Ignore them. This is the default and works fine.
BUFFERED mode -- this is already implemented. The filter buffers the body in memory, returns an error if the buffer fills up before end of stream, sends the buffer to the external processor, and waits for a response which will optionally modify the buffer.
STREAMING mode -- not implemented yet. This is intended to support the use case of an external processor that wants to modify the body one chunk at a time, or otherwise handle a body of arbitrary size.
BUFFERED_PARTIAL -- not implemented yet. This is intended for processors that want to inspect only the start of the body, or perhaps cache bodies smaller than a certain maximum size.

In order for STREAMING mode to be implemented, the filter would need to do something like this, for both the encoding and decoding paths:

en|decodeData is called with a chunk of data.
Save a pointer to the buffer that we just received.
Send a message on the gRPC stream that contains the new body chunk.
When the processor sends back a response, apply any modifications to the body chunk saved in step 2.
Continue processing, which will presumably loop back to step 1.

This doesn't work consistently because there is no way for step 1 (en|decodeData) to respond with a status that tells the filter manager, "do not continue iteration and do not send me any more chunks." As a result, in some cases, we perform steps 1, 2, and 3, and then while waiting for the response, we end up back on step 1 even though we never got to step 4. As a result, we don't know how to apply modifications to the body in a way that will allow us to properly process them in order.
In some cases, a combination of StopIterationAndWatermark, combined with calling "*AboveWriteBufferHighWatermark" seems to do the trick. But sometimes it doesn't. The result is that after en|decodeData returns, but before it can call "continue," the next chunk is delivered.
Since this doesn't work, I can think of a few more possibilities:

The filter could try to keep track of all the chunks that it received, assuming that a StopIterationAndWatermark status means that although more chunks will be received, none will be forwarded to other filters. Then, apply responses to individual chunks as they come back. But the problem here is that when we finally call "continue," won't all the chunks be sent on down the filter chain?
The filter could try to somehow be notified when the watermark really causes reading of writing is paused. It could buffer everything to that point and not clear the watermark until it has all been processed. I don't see how to do that in both directions, however.
The filter could keep track of multiple buffers, but then clear each buffer so that when we "continue" it would just continue with empty buffers down the filter chain. Then when we actually know what data should be forwarded, we could call "injectEn|DecodedDataToFilterChain." This might work and I'll have to try it.
We could give up and make streaming mode read-only. We can probably adjust things so that the filter will still have the ability to send back an error in many cases after reading the body, but otherwise the body would really be read-only. This would mean that there are cases in which ext_proc is not useful.

If you read all this, then thanks -- as you can see I could use some advice on how to make this whole thing work!

@snowp do you want to comment as the other owner of ext_proc?

seems like a reasonable way to do this, though it probably needs some testing to make sure there's nothing preventing this from working. If you want to avoid the empty data frames to the next filters maybe you can stop iteration in this case?

cc @alyssawilk in case there are other ways of accomplishing this

I guess offhand I can think of 2 ways to handle this.
The cleaner way would be to implement a StopAllIteration for body data, like we have for headers.  This would really stop further calls until resumption was triggered.  That said, it's going to be a complicated and high risk change.
The hackier way would be akin to 3, moving the data into locally owned buffers as encodeData calls happen and re-injecting the original or modified data as return calls are processed.  If you would want a series of streamed RPCs this may not be that terrible, though you'd want to make sure you use the watermark callbacks to stop the flow of incoming data as your locally cached data grows past configured limits.

Thanks for the comments so far. Plan 3 -- clearing buffers as we send them to the remote server, and then using the "inject into filter chain" capability to put them back -- works for me in some manual tests. My current challenge is figuring out how to test them properly in an automated way. I'll probably have a draft PR next week or the week after.

I have a working PR, with working tests for this now:
https://github.com/envoyproxy/envoy/pull/17069
It works using the idea "3" from up top:

As data callbacks come in to the filter, it "moves" the data into a new buffer, which it dispatches via gRPC message to the external processor, and then keeps in a queue.
As a result, filters farther down the chain see empty buffers in their data callbacks.
When a response comes back from the external processor, it injects the processor's result into the filter chain using "inject**codedData". (The processor may respond indicating that there is no change, which means that the original buffer stored in the queue is what gets injected.)
The filter raises the watermark when chunks are outstanding to be processed by the filter so that we do not fill up with buffers waiting for processing.

This works well for large bodies and I have observed that I can stream them through without running out of memory, and the watermarking appears to be working. The stream of body chunks being sent to the processor also ends up being pipelined, which is a good thing because otherwise latency would be very high.
As it is, this feature has the potential to introduce a lot of latency for large message bodies, because in the worst case each body chunk has to endure a gRPC round trip. So while this feature will make it theoretically possible for someone to, for example, compress or encrypt data without buffering, in practice I think this will be uncommon and slow.
I think that a better use case for this feature would be to effectively buffer the data, but to have a safety valve to ignore bodies that are larger than a certain size. I'm also considering another body processing mode specifically designed for this which I think will be more useful.


multi: remove existing meta field in asset TLV to replace w/ meta hash optionally revealed in genesis minting proof

Related to https://github.com/lightninglabs/taro/issues/62.
Problem Statement
In this PR, we fix an issue with the meta field as defined today:

The field in practice may be very large (hundreds of KBs), and is serialized along with each asset TLV in a proof chain.
This means that the proof size is a function of the size of the meta field itself, meaning more data to lug around for clients.

Solution
Meta -> Meta Hash in TLV
Instead, we make the meta field itself a hash commitment. Only the meta hash field exists in every asset TLV. This means the asset genesis (which rn is serialized along with addresses) nearly constant sized other than the tag (which we can also instead make into a commitment). The meta hash is then the hash of the TLV serialization of the meta reveal (see below).
To start, the meta has a single type: opaque blob. This type is itself a TLV, so we can add more types in the future, and also other types contingent on the type itself. Eg: we can add a JSON blob type, or a MIME type that then relies on the existence of some other string to fully bind the structure of the meta bytes.
MetaReveal in Proof File Blob
We then add a new optional field to the proof format that allows the minter (or anyone that knows of the pre-image) to reveal it within the first proof state transition. As this is only exist in the first state, which is to be bootstrapped by the users from a Base Universe, the proof sizes are no longer dependent on the asset meta itself (constant value at the start). We then add a rule that this can only exist for assets that have a genesis witness (minted assets).
New assets_meta table in the database
Along the way we modify the DB to add a new assets_meta table and reference that directly. This allows for larger meta blobs, as we no longer need to read the entire thing if we want to look at the genesis details for assets. Two query mechanisms based on the asset ID and the asset hash have also been added.
RPC + CLI Changes
On the RPC layer, we now expose the meta field to callers, and display the hash in most other locations. We also add an API that lets callers fetch the meta based on the hash or asset ID.
On the CLI, we propagate all the above updates, then also add a new option to read the meta from a file on disk, as it may be too large to pass as a command line string.
Follow up Work
Update the spec accordingly.

Spec PR here: https://github.com/Roasbeef/bips/pull/34

@jharveyb: review reminder
@roasbeef, remember to re-request review from reviewers when ready

@jharveyb: review reminder
@roasbeef, remember to re-request review from reviewers when ready

@jharveyb: review reminder
@roasbeef, remember to re-request review from reviewers when ready

@jharveyb: review reminder
@roasbeef, remember to re-request review from reviewers when ready

@jharveyb: review reminder
@roasbeef, remember to re-request review from reviewers when ready

@jharveyb: review reminder
@roasbeef, remember to re-request review from reviewers when ready

@jharveyb: review reminder
@roasbeef, remember to re-request review from reviewers when ready

@jharveyb: review reminder
@roasbeef, remember to re-request review from reviewers when ready

@jharveyb: review reminder
@roasbeef, remember to re-request review from reviewers when ready

@jharveyb: review reminder
@roasbeef, remember to re-request review from reviewers when ready


Julia / Genie

https://genieframework.com/

Hello, closing this issue as we are showcasing implementations, not the technologies themselves.


ES5 migration/compatibility

apparently we don't use any ES6 feature other than const and let  and that kinda thing {a,b,c}
for the sake of compatibility with everything, just change that

fixed in https://github.com/Stremio/stremio-aggregators/commit/92bed3c0ce411a19267977f5579c0ceb8fdf79ae


Auth is missing

It looks like authentication is missing. I would recommend you add it by default since some people will run this on a public server or with ngrok or inlets.

I will incorporate Keycloak’s Gatekeeper and an ingress controller.
https://github.com/keycloak/keycloak-gatekeeper

Another option would be a combo of an envoy sidecar and Keycloak, using Keycloak’s JWKS and envoy JWT validation

Started in #3

Useful guide: https://www.twistlock.com/labs-blog/securing-kubernetes-openfaas-beyond/


Javascript markdown tag added to docs

I noticed that the javascript object was plain text and thought it would be easier to read if it was highlighted.
Done as part of my live stream here https://youtu.be/G7rQdhJJGJk

Thanks Man :)


[GDnative] Rethink DEBUG_METHODS_ENABLED to keep introspection in release

I've realized a bit late that Godot introspection system consider method's arguments information (i.e. arguments types and names) as only useful for debug (and so are totally ignored when switching to release)
While this was true before, this is no longer the case now that the GDnative API provides introspection system to 3rd party module.
For instance, my Python binding lazily generate the binding to a Godot class by using the introspection API.

argument name information improve readability of the generated method
name information also allow to do key/value style argument passing (e.g. camera.set_orthogonal(z_near=42.0))
type information allow to do argument type checking before calling Godot. This is good because:

it saves conversion time if type is wrong
it allow to uses ptrcall to avoid converting arguments to Variant, having Godot doing an additional lookup, having to check return type for type error and convert it back to a readable thing for the caller

On top of that from a GDnative user, it is really strange to have this introspection API returns different things (even worse: the returned format is the same but informations differs !) depending on if you use the Godot binary with or without the editor.

@karroffel @reduz sorry to directly ping you this topic, but I think this is a serious one considering it implications and how deep we are into the release process of 3.0

It makes the binary more fatty, but you are free to make your own template
with tools or debug enabled
On Dec 27, 2017 10:14 AM, "Emmanuel Leblond"<EMAIL_ADDRESS>wrote:

@karroffel https://github.com/karroffel @reduz
https://github.com/reduz sorry to directly ping you this topic, but I
think this is a serious one considering it implications and how deep we are
into the release process of 3.0
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/godotengine/godot/issues/15065#issuecomment-354112241,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AF-Z24NQIvMMtDEhfle9zYgUTFF8ECwdks5tEkLHgaJpZM4RMq-p
.

Thanks for the answer reduz ^^

It makes the binary more fatty

Yes, from my tests I go from 25mo to 28mo when enabling DEBUG_METHODS_ENABLED by hand (on linux 64 with gcc-7).
This 10% change seems not much on PC, but I guess your concern is more about less powerful targets (especially the web one).

but you are free to make your own template with tools or debug enabled

From my tests, introspection is provided on the editor and debug release version of Godot. That means I would "only" have to provide a release version with DEBUG_METHODS_ENABLED enabled.
While it seems doable, I would rather not doing this:

supporting a custom build is more work on my side :'-(
it would make a poor user experience to ask to manually download a custom release template
it seems like dividing the community, the whole point of GDNative was to avoid having as many custom builds as needs...

To avoid this I see two solutions:

add new target to the official release template (i.e. release with introspection), I guess @akien-mga wouldn't be found of this solution :trollface:
tell users it use the official release-debug template instead of the release when using introspection. This is the status quo solution, however I don't know the differences between this version and the release (except for the introspection). From what I saw it only enable the DEBUG_ENABLED which provide better warning prints this. This seems like a really small change (I would even say this should be the default release mode) so I feel like I'm missing something there...

Regarding my initial post, my biggest concern was about the correctness of the API toward 3rd party users.
For instance using _ClassDB.get_class_method on _OS give us the following json for method _OS.native_video_play when introspection is available:
{
   'name':'native_video_play',
   'args':[
      {
         'name':'path',
         'class_name':'',
         'type':4,
         'hint':0,
         'hint_string':'',
         'usage':7
      },
      {
         'name':'volume',
         'class_name':'',
         'type':3,
         'hint':0,
         'hint_string':'',
         'usage':7
      },
      {
         'name':'audio_track',
         'class_name':'',
         'type':4,
         'hint':0,
         'hint_string':'',
         'usage':7
      },
      {
         'name':'subtitle_track',
         'class_name':'',
         'type':4,
         'hint':0,
         'hint_string':'',
         'usage':7
      }
   ],
   'default_args':[

   ],
   'flags':1,
   'id':583,
   'return':{
      'name':'',
      'class_name':'Error',
      'type':2,
      'hint':0,
      'hint_string':'',
      'usage':262151
   }
},

which becomes:
{
   'name':'native_video_play',
   'args':[

   ],
   'default_args':[

   ],
   'flags':1,
   'id':0,
   'return':{
      'name':'',
      'class_name':'',
      'type':0,
      'hint':0,
      'hint_string':'',
      'usage':7
   }
}

What I find fundamentally wrong here is there is Godot act just like everything went smooth while providing dummy data to the user.
So in the end the API is not consistent between dev and release modes, and failed silently on this inconsistency... And I feel like the first victim of this trick :smile:
I guess a really simple way to go around this would be to add warning prints when using those function when introspection is disabled.


Update threads.lisp in koans and koans-solved

Update semaphore related code in koans/threads.lisp to return count.
Update koans-solved/threads.lisp with SBCL 2.2.9 (Win 10) run result.

Furthermore, cannot access the cla site to sign.

Hey @cellnet thanks for the CLA, we cannot accapt this request until the CLA is signed.

@Slids Understood. Just ignore the push request then. Because I cannot visit the CLA url - always failed on opening.


feat: use release to update state usage in preview/apply/destroy

What type of PR is this?

What this PR does / why we need it:
Which issue(s) this PR fixes:

Fixes #
Special notes for your reviewer:
Does this PR introduce a user-facing change?

Additional documentation e.g., design docs, usage docs, etc.:

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

256 of 599 (42.74%)  changed or added relevant lines in 19 files are covered.
68 unchanged lines in 7 files lost coverage.
Overall coverage decreased (-0.6%) to 54.348%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

pkg/cmd/meta/meta.go
0
1
0.0%

pkg/engine/api/destroy.go
19
20
95.0%

pkg/engine/operation/graph/resource_node.go
1
2
50.0%

pkg/engine/api/apply.go
14
16
87.5%

pkg/engine/operation/parser/spec_parser.go
2
4
50.0%

pkg/engine/operation/preview.go
18
20
90.0%

pkg/cmd/preview/preview.go
17
21
80.95%

pkg/engine/operation/port_forward.go
10
15
66.67%

pkg/engine/operation/watch.go
6
12
50.0%

pkg/engine/operation/destory.go
31
39
79.49%

Files with Coverage Reduction
New Missed Lines
%

pkg/engine/operation/parser/spec_parser.go
1
65.85%

pkg/engine/operation/destory.go
2
84.21%

pkg/engine/operation/apply.go
2
74.62%

pkg/cmd/apply/apply.go
3
50.15%

pkg/server/manager/stack/stack_manager.go
9
19.48%

pkg/engine/api/apply.go
19
63.16%

pkg/cmd/destroy/destroy.go
32
52.38%

Totals

Change from base Build<PHONE_NUMBER>:
-0.6%

Covered Lines:
8924

Relevant Lines:
16420

💛  - Coveralls

All tested!
a> kusion preview

b> kusion apply

c> kusion destroy


Intermittent issue when fetching multiple keys

Hi, we're seeing the following failure when trying to fetch using an MGET with many keys:
** (exit) exited in: :gen_server.call(#PID<0.960.0>, {:commands, [["MGET", "edge:cache:distance-JP986309-37.7838,-122.401", "edge:cache:distance-JP141681-37.7838,-122.401", "edge:cache:distance-JP543185-37.7838,-122.401", ...]]}, 5000)
** (EXIT) an exception was raised:
** (FunctionClauseError) no function clause matching in anonymous fn/2 in Redix.Protocol.parse_integer/1
(redix) lib/redix/protocol.ex:140: anonymous fn("3", <<131, 104, 2, 100, 0, 2, 111, 107, 98, 0, 0, 135, 196, 13, 10, 36, 49, 51, 13, 10, 131, 104, 2, 100, 0, 2, 111, 107, 98, 0, 0, 168, 38, 13, 10, 36, 49, 51, 13, 10, 131, 104, 2, 100, 0, 2, 111, 107, 98, 0, ...>>) in Redix.Protocol.parse_integer/1
(redix) lib/redix/protocol.ex:196: anonymous fn/3 in Redix.Protocol.resolve_cont/2
(redix) lib/redix/protocol.ex:196: anonymous fn/3 in Redix.Protocol.resolve_cont/2
(redix) lib/redix/connection/receiver.ex:86: Redix.Connection.Receiver.new_data/2
(redix) lib/redix/connection/receiver.ex:62: Redix.Connection.Receiver.handle_info/2
(stdlib) gen_server.erl:615: :gen_server.try_dispatch/4
(stdlib) gen_server.erl:681: :gen_server.handle_msg/5
(stdlib) proc_lib.erl:240: :proc_lib.init_p_do_apply/3

Fetching the same batch of keys results in the above error intermittently, with a high rate of occurrence when we have about 100 keys.  Reducing the batch size to around 50 seems to eliminate the errors.  As I understand it, Redis is capable of retrieving several thousands of keys at the same time.  I've tried reproducing the issue in isolation in a separate repository, but was unable to do so, so I thought I would post the error here to try and get more insight.

Hey @jlee0831, thanks for the report! I pushed a possible fix to master (a272dec59d8ac0c2cf1b4253d0e965e6bd7d7d45), are you willing to give it a try? I'll release a new version if it fixes the bug. :smiley:
To try it out, you can just do this in your mix.exs:
def deps do
  [...,
   {:redix, github: "whatyouhide/redix"}]
end

@whatyouhide, that seems to do the trick! Thanks for the quick response.

Ah, no worries, sorry for the bug in the first place! I'll release v0.3.6 later today and ping you here.

@jlee0831 released v0.3.6, grab it while it's hot!


[stacked_cli] Respect Opt-out/Opt-in for Google Analytics

Hey!
Since you are using the usage-Package for Google Analytics you should follow the Opt-out/Opt-in convention like stated in the documentation:
When do we send analytics data?
You can use this library in an opt-in manner or an opt-out one. It defaults to opt-out -
data will be sent to Google Analytics unless the user explicitly opts-out.
The mode can be adjusted by changing the value of the Analytics.analyticsOpt field.

Opt-out In opt-out mode, if the user does not explicitly opt-out
of collecting analytics, the usage library will send usage data.

Opt-in In opt-in mode, no data will be sent until the user explicitly opt-in to collection.
This includes screen views, events, timing information, and exceptions.

I think it is ok to use it as an opt-out but i would like to see a setting, maybe in your config file to deactivate it. I would not use the cli in a company enviroment atm.

dooooope! I will review and merge soon @ferrarafer


Cors policy breaking remote tunnels on vscode.dev and insiders.vscode.dev

Does this issue occur when all extensions are disabled?: Yes (client), client never connects to host so host extension shouldn't effect result

VS Code Version: client: vscode.dev (1.85.1 0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2) server (shouldn't effect issue): 1.85.1 0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2 x64
OS Version (host): NixOS
OS Version (client): all of: Chrome (version 120.0.6099.199) on windows, Edge (version 120.0.2210.121) on Windows, Firefox Nightly (version 123.0a1) on Android

Steps to Reproduce:

setup a vscode tunnel on a host computer
sign in (tested with github) on vscode.dev
no tunnels show up
manually connect to tunnel with vscode.dev/tunnel/hostname
observe network error
check browser console and find CORS policy violation

The exact error is:

Access to XMLHttpRequest at 'https://global.rel.tunnels.api.visualstudio.com/api/v1/tunnels?tags=hostname,vscode-server-launcher&allTags=true&limit=1&global=true' from origin 'https://v--19o6jif34c0mpeit1a8veou0n92b64oqhb27cp6a35c7mh7slql1.vscode-cdn.net' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

connecting to the same tunnel work via vscode app (version 1.84.2 1a5daa3a0231a0fbba4f14db7ec463cf99d7768e)

This error just started occuring for me; the tunnels were working fine when the issue was opened.

We are investigating and working on resolving this issue. We are hoping to have a fix out in about an hour.

Working for me now!

Fantastic! The fix should be available in all regions soon. Thanks for the feedback everyone!

is this an issue with code serve-web or only vscode.dev?

can confirm working for me as well.


Placement of Orchestrator in the network topology

Hi ,
I would like to open a discussion about the placement of Orchestrator in the network topology. We, at WIX, are planing to  use Orchestrator which will update a consul template and ProxySql servers will grab/sync the new configurations when available ( Grosso modo :-) )
One of the scenarios Orchestrator can be an added value to ProxySql is that he can detect a Network Split and  Isolating one of DCs by  "telling"  proxySql  (when I say "tell" I mean after Orchestrator took care, if needed,  of failover/promoting/re-master etc....)  not to use that DC to serve IO.
So where exactly the orchestrator must be placed in the Network? If we are using the same DCs/networks for the orchestrator nodes then both orchestrator APPS will be elected as ACTIVE during network split   and that will cause a mess in the ProxySql configuration because each Orchestrator will try to isolate the connections from the other side of the network/dc.
Some solutions offered:

Use a third DC for orchestrator. - What will happen if, for some reason that network gets Isolated?? probably no failover will occur

Using a Galera  cluster for the Orchestrator backend database - Not sure which topology to use for this, please advice .

We need to find a topology for orchestrator to allow him to do objective decisions on the mysql cluster topology.

Good question and the very one I'm tackling right now. And with a lot of implications, too. And philosophical questions...
Note this discussion began in email, and I'm merging in this response some insights from out exchanged correspondence.
Right now:

The behavior is dictated by your MySQL backend setup.

Orchestrator nodes all collaborate by communicating through the MySQL backend (not directly with each other).

If you have a 2 datacenter master-master setup, with local orchestrator to each master then indeed a network partitioning will make both of them active. Bad.

A friend of ours from Ghent University is using orchestrator on top of Galera cluster. He's running it on a single DC setup, so partitioning isn't handled (he's happy to run manual work on DC failure), but let's discuss:

Three nodes Galera setup
Each galera node also runs a local orchestrator, connecting to <IP_ADDRESS>
As effect, an orchestrator node can only become leader if it has quorum
Which is very good.
For the low orchestrator backend workload, I believe (though haven't tried) you should be able to run cross-DC Galera setup, similarly.
you would then put three galera nodes, each in a different DC (use AWS as mediator if you don't have a third DC). Again each node will run local orchestrator connecting to <IP_ADDRESS>

@tapuhi you are running a 2-DC setup. You'd place one orchestrator+galrea node in each DC. You will then need a 3rd DC, let's make that an AWS setup.

you need a 2-DC quorum.
if only Amazon goes down, you don't have a problem.
I think this would work well for you, assuming, again, Galera cross-DC latencies are acceptable.

Plan for Q2 (things I'm working on right now, no guarantees etc.):
I'm writing a complete new deployment setup for orchestrator.

orchestrator would be able to run on a sqlite backend (as opposed to mysql) -- already POC. But that's not the main point.
orchestrator nodes would have private, local databases (be it sqlite or mysql)
orchestrator nodes will collaborate via raft consensus.
orchestrator node becomes leader if it has raft consensus.
all nodes to discoveries and probing, but only active node runs failovers
furthermore, before failover, active node will optionally consult with the other members: "is everyone agreeing we have a dead master?" -- if consensus is reached, failover is kicked.

You would then have one orchestrator node in each DC.
One thing to note about the raft implementation is that I don't see a way to force a specific node to grab leadership.
The issue is that you may be normally running from DC1, but the leader orchestrator node would happen to be running from DC2 -- and this still works, but with latencies, implying longer recovery times. By all means not a deal breaker but something I'd like to tackle.
Further notes

you will likewise need a 3-DC Consul setup

or else, multiple DC-local setups, but then you need to update your multiple Consuls setups, and that's again raising distribution problems. What happens if you can't reach one?

if a tree falls in the woods and no one is there to hear it, does it make a sound?
DC partitioning is so very complicated. What makes a recovery scenario?

If the master is alive and well, but all of its replicas are partitioned away, should this be considered a failover scenario or not?
If so, but replicas are also partitioned between themselves, should we really really kick the failover?
if DCs are partitioned, and the DC where the master is has fewer replicas, should you choose to failover to the other DC based on the fact it has greater serving capacity?
etc.
Not all questions will be answered to the satisfaction of everybody. I'm long enough in the orchestrator business to know different users expect opposite responses to same failure conditions.

Related: https://github.com/github/orchestrator/issues/175

Given that @tapuhi is running orchestrator/raft I'm closing this issue.


Easy way to get vertices on the boundary?

Hi all,
I've written a little extrusion program for a mesh, which works by extruding boundary faces. I know there is a way to get the number of boundary elements of a mesh (mesh->GetNBE()), but is there an easy way to get the number of vertices on the boundary and / or the list of vertices on the boundary?
What I am doing now is looping through all the boundary elements, adding their vertices to a big list, and removing duplicates. Is this basically the solution?
Thanks!

There are currently no methods that return this information. What you are doing seems to be a good solution.
One indirect method to get a list of all boundary vertices is to define a linear FE space on the mesh and then construct the ess_tdof_list as in ex1/ex1p. Since for a linear space the dofs correspond to the vertices, the ess_tdof_list will contain exactly the list of all boundary vertices.

Thanks, @v-dobrev! I didn't think of the linear FE solution you proposed, but that's interesting. For now I'll just stick to what I'm doing, I think.


Raise error when replace_object

Setup cartridge cluster with failover
Setup separated crud-router and crud-storage
Make a write load
Switch master under load
One time

LuajitError: ...rk/starwars/.rocks/share/tarantool/crud/common/utils.lua:35: attempt to index field 'master' (a nil value)

It seems, it was crud-0.0.4. The relevant code is the following:
https://github.com/tarantool/crud/blob/1fa7ffc052852c98eea15ef4c48b4411554520dc/crud/common/utils.lua#L33-L37
The code remain unchanged since 0.0.4.
It seems logical that there is a time frame, when the old master is already demoted, but the new one is not promoted yet. Also I see that vshard contains 'whether there is a master?' checks that confirms my guess.
We should not lean on master presence unconditionally and should report a proper error if there is no master. The error should give a user hint that it is a transient error and the request can be safely retried.
BTW, crud has no autoretries / retry strategy settings?

BTW, as I see, vshard's call automatically waits for master (until a timeout). It seems, it would be good to use the same approach.
NB: Don't forget to substract time we waiting for a space from net.box request timeout.


Update DeveloperGuide.md on non-functional requirements

Closes #25

Codecov Report

Merging #40 (95a1e34) into master (d5c64fc) will not change coverage.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master      #40   +/-   ##
=========================================
  Coverage     72.15%   72.15%
  Complexity      399      399
=========================================
  Files            70       70
  Lines          1232     1232
  Branches        125      125
=========================================
  Hits            889      889
  Misses          311      311
  Partials         32       32

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

LGTM


Fix 404 page reference in storage-blob-static-website-host.md

The rest of this document refers to 404.html, but this one line incorrectly specifies error.html

@jogleasonjr : Thanks for your contribution! The author, @tamram, has been notified to review your proposed change.


Support for Directives in GraphQL Queries

A spec-compliant GraphQL server must (at least) provide support to the following two directives:

@include(if: Boolean)
@skip(if: Boolean)

Reference: GraphQL Directives
Subtasks

[ ] https://github.com/ballerina-platform/ballerina-standard-library/issues/1852

To support this, we have to have the fix for https://github.com/ballerina-platform/ballerina-lang/issues/31485 first.

Sub tasks:

[ ] https://github.com/ballerina-platform/ballerina-standard-library/issues/1852
[ ] https://github.com/ballerina-platform/ballerina-standard-library/issues/1853

Since the ballerina GraphQL uses the code first approach, developers have full authority over the service environment. If the developer wants to change the execution in a particular area of the GraphQL service, the developer can easily modify the resource functions. Therefore, at this stage, the purpose of custom directives which is to get an alternate execution of the GraphQL service can be achieved via directly modifying the resource functions in the service. Up To now, we did not encounter any specific use cases which can not address without custom schema directives. Due to that, we are not going to add the custom directive support at the moment.

Proposal: GraphQL Directives
Summary
Add GraphQL Directives feature into GraphQL package. Directives provide a way to add additional information to get alternate execution behaviors.
Goals

Add support for GraphQL default directive skip
Add support for GraphQL default directive include

Motivation
GraphQL directives can be used to provide additional information to GraphQL executor. This additional information indicates that it should be evaluated differently in the execution. With the directives, users can

conditionally include part of a document
conditionally exclude part of a document
describe additional information for the types

during the execution. Without directives, it's hard to achieve operations like conditionally including or excluding the fields during the execution. This also provides the ability to dynamically change the shape of queries using variables.
Description
As described in the above section, Directive is a prominent feature of GRaphQL with a lot of benefits. This proposal includes the implementation strategy of Ballerina GraphQL directives.
There are two different types of directives depending on the location of use.

Query type - directives applicable in TypeSystemDirectiveLocation
Schema type - directives applicable in ExecutableDirectiveLocation

Schema-type directives are defined in the schema and executed when building the schema and query type directives are visible to the client and can be accessed through the query. Other than that GraphQL spec has defined two query type directives and a schema type directive that should be supported as default directives.
Default directives in GraphQL

Skip
Include
Deprecated

Implementation
As the first step, this proposal consists of the implementation details of Skip and Include directives. These directives can be used to conditionally exclude or include fields, fragment spreads, and inline fragments. Currently, these two directives can be handled within the validation phase in ballerina GraphQL.

Users can define the queries including directives as in the spec.

{
    getTeacher($skipName: Boolean! = true) {
        name @skip(if: $skipName)
        email
        subject
    }
}

Do not need to explicitly define the “skip” and “include” directives since these are supported as defaults directives.
In the parser, validate any directives that are defined.
Create a directive node and put it in the field node which defines the directive. An array will be added to the field node to keep the directives of that field.
According to the spec these two types can be used only with FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT locations. Currently, we have a set of directive locations in the DirectiveLocations type.

Ex: Directive node:
public class Directive {

    private string name;
    private Location location;
    private ArgumentNode[] argumentNodes;
    private DirectiveLocations[] directiveLocations;

    public isolated function init(string name, Location location) {
        self.name = name;
        self.location = location;
        self.argumentNodes = [];
        self.directiveLocations = [];
    }

    public isolated function getName() returns string {
        return self.name;
    }

    public isolated function getLocation() returns Location {
        return self.location;
    }

    public isolated function addArgument(ArgumentNode argNode) {
        self.argumentNodes.push(argNode);
    }

    public isolated function getArguments() returns ArgumentNode[] {
        return self.argumentNodes;
    }

    public isolated function addDirectiveLocation(DirectiveLocation dirLocation) {
        self.directiveLocations.push(dirLocation);
    }

    public isolated function getDirectiveLocations() returns DirectiveLocations[] {
        return self.directiveLocations;
    }

}

To validate the directives, add a new class DirectiveValidator, and include the validation logic within this. In validation phase, the directive name and the argument value are checked and according to the argument value, skipped fields can be removed in this phase.
Since we support only “skip” and “include” directives, other directives defined in the query are invalidated in this phase and return an error. (Ex: “User-specific directives are not supported yet”)
After this validation phase, queries do not include any directives. Therefore after this phase, the query will be executed as a general query.

Complete Example
Schema
type Teacher record {
      string name;
      string email;
      string subject;
};

Teacher T1 = {
      name: “Walter”,
      email<EMAIL_ADDRESS>      subject: “chemistry”
}

Teacher T2 = {
      name: “Watson”,
      email<EMAIL_ADDRESS>      subject: “science”
}

service /graphql on new graphql:Listener(9090) {
    resource function get getTeacher() returns Teacher[] {
         return [T1,T2];
    }
}

Document
{
    getTeacher($skipName: Boolean! = true) {
       name @skip(if:$skipName)
       email
       subject
    }
}

Response
{
  "data": {
    "getTeacher": [
      {
          "email"<EMAIL_ADDRESS>          "subject": "chemistry"
      },
      {
          "email"<EMAIL_ADDRESS>          "subject": "science"
      }
    ]
  }
}

Since the ballerina GraphQL uses the code first approach, developers have full authority over the service environment. If the developer wants to change the execution in a particular area of the GraphQL service, the developer can easily modify the resource functions. Therefore, at this stage, the purpose of custom directives which is to get an alternate execution of the GraphQL service can be achieved via directly modifying the resource functions in the service. Up To now, we did not encounter any specific use cases which can not address without custom directives. Due to that, we are not going to add the custom directives support at the moment.


Fix copying of the reduced Planck constant

Please see https://en.wikipedia.org/wiki/H_with_stroke

I stumbled upon this in https://github.com/py-pdf/pypdf/issues/2009#issue-1818191533 and as far as I can tell the reduced Planck constant is the only one, of the listed characters, that we don't already handle correctly when copy-pasting.

/botio test

/botio makeref

@Snuffleupagus
I've completed the list of  Glyphs names to Unicode  in https://github.com/py-pdf/pypdf/pull/2016 if you are interesting


Profile undefined check cleanup

Fixed typo in checking for defined value

Looks like i did something wrong with this pull request

Try targeting dev instead of master.


Custom timestamps?

I'm interested in using custom timestamps, as discussed here:
https://stackoverflow.com/questions/65610580/how-can-we-add-our-own-timestamp-in-prometheus-metric-series
This is supported in prometheus/metric.go, using the function NewMetricWithTimestamp.  But, is does not seem to be supported by this repo, i.e. there is no NewMetricWithTimestamp() in sql_exporter/metric.co.  Also, the metric definitions are a bit different between these two libraries.  So, it is not trivial to call the existing function with an sql_exporter/metric.
I found it was more straightforward to create a similar struct and function in sql_exporter/metric.go.
I haven't tested it yet with Prometheus, but, I'm wondering if it will work?  Any tips or advice about using custom timestamps for Prometheus with this library?  The change mirrors the existing function.  But, my main question is how it will be handled by Prometheus.  Kind of a newb, so I'm not really sure even why the metric definitions are so different between the libraries. (yet both appear to work with Prometheus)
And also, after I add the timestamp, how can I display it locally in the localhost:9399/metrics?

In case anyone is wondering, yes, it is possible and Prometheus will read and use the custom timestamps.


Add leeway to JWT nbf checking

Adds a constant leeway (60 seconds) to the nbf claim check to account
for clock skew between the registry servers and the authentication
server that generated the JWT.
The leeway of 60 seconds is a bit arbitrary but it was based on
hub.docker.com logs/metrics where we don't see drifts of more than a
second on our servers running ntpd (happy to lower or increase if necessary).
I didn't attempt to make the leeway configurable as it would add extra
complexity to the PR and I am not sure how Distribution prefer to
handle runtime flags like that.
Also, I am simplifying the exp and nbf check for readability as the
previous NOT (A AND B) with cmp operators was not very friendly.
Ref:
https://tools.ietf.org/html/rfc7519#section-4.1.5
cc @jlhawn as he reported the same error.
Signed-off-by: Marcus Martins<EMAIL_ADDRESS>

LGTM

cc @dmcgowan

I didn't attempt to make the leeway configurable as it would add extra
complexity to the PR and I am not sure how Distribution prefer to
handle runtime flags like that.

This just a token parameter so it should be limited in scope to the token auth package.
My preference is that we do not put this in as a constant nor have it be specific for "nbf". If we are want to account for a clock skew between the token server it should be a configured value which applies to both "nbf" and "exp".  We do not have a defined time for when a client should request a new token so it is possible for a clock skew in the opposite direction to cause a client to use an expired token. Whatever value we find acceptable for clock skew should then apply in both directions.

Thanks for the feedback @dmcgowan I will submit a fixed PR this weekend.

@marcusmartins any updates on this?

The PR looks okay.
Would it be better to add the leeway on the generation side, rather than the registry side, since this is ultimately a policy decision?

@stevvooe On the question of what side to add leeway, I think the consumer of the JWT
should define how much leeway is acceptable. The question is clearer to me if I think in terms of expiration instead of nbf; if the issuer tells me to expire the cert at T, the registry should honor that contract accounting some clock drift between the systems.
This also seems to be the most common approach among JWT handling libraries.

@marcusmartins The registry should honor the terms of the token. The authority really needs to be in control of any leeway of the meaning. It is the single point of this system and should set the policy. If there is clock drift, we can build that into the token. The policy is accurate, trusted and obvious when debugging. The source is known.
When you hide this in the evaluator of the token, all bets are off. We lose the guarantees of a signed token.

This also seems to be the most common approach among JWT handling libraries.

Do you have any data to back this statement up? Can you point to any audited JWT library that doesn't honor the terms of the token?
cc @diogomonica @NathanMcCauley

@stevvooe the JWT spec specifically states that a small leeway is acceptable for both exp and nbf (immediately following exp sub-section linked to).
In both cases it suggests the leeway should be no more than a few minutes and leaves it up to "implementers" to decide. As an implementer is not necessarily in control of both the client and server I'd suggest the "few minutes" of leeway should be assumed to be divided between the two. If both permit one minute of leeway for a total allowance of 2 minutes, that would still be well within the specification and allow different implementations to more reliably work together even if one of them did not implement leeway.

@endophage Thank you.

@stevvooe @dmcgowan I am finally picking up this patch again, sorry for the delay. What are you thoughts on having a static leeway of 1 minute that would be added to both the expiration and the "not before" check?

@marcusmartins As long as it is a part of the spec, that's probably okay.

[Current coverage][cc-pull] is 52.39%

Merging [#1686][cc-pull] into [master][cc-base-branch] will decrease coverage by 7.05%

@@             master      #1686   diff @@
==========================================
  Files           120        120
  Lines         10477      10482     +5
  Methods           0          0
  Messages          0          0
  Branches          0          0
==========================================
- Hits           6229       5492   -737
- Misses         3417       4238   +821
+ Partials        831        752    -79

[][cc-pull]

Powered by Codecov. Last updated by [07f32ac...036c4d8][cc-compare]
[cc-base-branch]: https://codecov.io/gh/docker/distribution/branch/master?src=pr
[cc-compare]: https://codecov.io/gh/docker/distribution/compare/07f32ac1831ed0fc71960b7da5d6bb83cb6881b5...036c4d84f43d5f53e14ef75ad26d004c16d204ca?src=pr
[cc-pull]: https://codecov.io/gh/docker/distribution/pull/1686?src=pr

🚢

@dmcgowan @stevvooe Can I get another review? Thanks.

LGTM + a few small considerations.
PTAL @diogomonica @NathanMcCauley

@stevvooe @dmcgowan I have updated the PR to use time.After and time.Before (https://github.com/docker/distribution/pull/1686/commits/db1bf930981383ab99126a7d1abc8856a15189a0#diff-6e88481a7d56a60a85a0b3cb744474a9R152).
I didn't modify the claimset struct to unmarshall to time.Time to keep the diff small but I would happy to do in a separate PR if you think it would help with maintainability.  Same for more explicit error message as mentioned in https://github.com/docker/distribution/pull/1686#discussion_r70901249

@marcusmartins LGTM on the Before/After changes. Don't worry about making ClaimSet unmarshal to a time type, since unix epoch is required there.
LGTM with approvals from security folks.

@endophage Can you review? Thanks

LGTM. Looks nice and clean. Good tests.

@RichardScothern @dmcgowan Is there anything else to do in this PR?

I don't think so.  LGTM


Korean Localization add

Add Korean localization string json file.

0.6.1 is almost done (now alpha.7), I hope you could follow up with its localization update


support for 'assume role' aws feature

This is a follow-up for https://github.com/ManageIQ/manageiq/pull/18810 as demanded by UI team.

@agrare please review

Ivanchuk backport details:
$ git log -1
commit 575a2b401210054ff3a63dcea9c437da8b16ca46
Author: Adam Grare<EMAIL_ADDRESS>Date:   Thu Aug 1 16:10:47 2019 -0400

    Merge pull request #19088 from AlexanderZagaynov/features/aws_sts_assume_role

    support for 'assume role' aws feature

    (cherry picked from commit 682f4dfeea85968b420933d498db7212a6b801ab)

    https://bugzilla.redhat.com/show_bug.cgi?id=1631845


Feature automated tests

Added automated tests of gRPC client functions.
Fixed nil pointer dereference bugs.
Adjusted pull request code test to include dpservice.

I changed the test file as requested and also reordered the steps, because dpservice was not always started before make test was run.


code2prompt Not Functioning with WSL

Describe the bug
When trying to use code2prompt in a WSL environment, terminal throws the error: command not found.
cipher@Command:~/cipher/packages/core$ code2prompt src
code2prompt: command not found
cipher@Command:~/cipher/packages/core$ cd ..
cipher@Command:~/cipher/packages$ cd ..
cipher@Command:~/cipher$ code2prompt src
code2prompt: command not found

To Reproduce

cd to packages/core
run code2prompt src

Expected behavior
Expected the terminal to provide a summary of the source code, so I can provide this to an AI model for context and editing.
Screenshots

Additional context
As mentioned by Shaw here https://www.youtube.com/live/ArptLpQiKfI?si=tk2cuKJWQ3W9f-Ue&t=1705

What was the resolution?


cruoton asking for password

So my friend has a chromebook and she is trying to run the following command in crosh.
sudo sh ~/Downloads/crouton -e -t xfce
after she types it it asks for a password but what password? Also whenever I see other people type it it does not ask for a password. Thanks

-e will set encryption on a chroot see https://github.com/dnschneid/crouton#with-encryption Also she should specify a release. Use the following for a trusty chroot with xfce desktop and no encryption. sudo sh ~/Downloads/crouton -r trusty -t xfce,extension The extension target will make clipboard sync possible between chromeos and the chroot. You get a link to the chrome extension in the Web store once your chroot is succesfully created. You need to install that too to make the clipboard sync work. See also https://github.com/dnschneid/crouton#prerequisites where there is the link to the extension also mentioned.

ok thanks ill have her try "sudo sh ~/Downloads/crouton -r trusty -t xfce,extension"

ok she has linux but when she trys to use the internet on her linux desktop it gives her a pop-up saying "failure to connect to default web browser (or input/output error)". What does this mean? Thanks

in the console it says needs crouton extension but she already has crouton right?

@EvanDawesome
Hi! Please see this section of the Readme.md

@tonyxue
she has the extension installed already. Is this "Add the extension or xiwi version to your chroot"  part of this command "sudo sh ~/Downloads/crouton -r trusty -t xfce,extension" or is it separate?

@EvanDawesome You have the extension target installed in the chroot, however you need chromeos crouton extension from the webstore to make it work. You need to install it in chromeos.

OK so we pushed add to chrome yesterday. Is that what we were supposed to do?

@EvanDawesome Yes

why would it be giving an error then? I had her enter developer mode by esc refresh and power then at recover screen pushed ctrl d.  she download the latest version of crouton from http://goo.gl/fd3zc then use ctrl alt t to open crouton and used the command shell followed by sudo sh ~/Downloads/crouton -r trusty -t xfce,extension. Then we added the crouton extension for her chrome. Then used sudo startfxce4 to start using linux.

@EvanDawesome You mean the "failure to connect to default web browser (or input/output error)" error. That is not related to the extension. I guess that the default web browser isn't set. You can try  "Application Menu --> Internet --> Netsurf webbrowser" instead of just clicking the web browser icon.

ok in linux or chrome os?

In linux. Just take it step by step. If this works for you then we see how to set the default browser.

@divx118
ok thanks. she is busy right now so we can do it over skype later. I will tell you how it works out tomorrow and ask any other questions.

thanks for your support so far

I am sure "Application Menu --> Internet --> Netsurf Web Browser" will work for you.
I just setup a new chroot and the default web browser is not set correctly on xfce trusty. I will open a bug report for it. You can solve it by doing the following in linux: "Application Menu -> Settings -> Preferred Applications" You will get a screen where you can set the default webbrowser by default it is set to "Debian sensible browser" click on that and choose "other" then type in the input field "netsurf" without the quotes. Close the window by clicking the close button. Now the web browser icons should work and open the browser.

thanks it worked! I don't know how you knew all this but I am glad you did. See ya later.

Can this issue be closed?

yes


put latest client on git

always failed to download client bin, and do not want to build myself.

It’s all fine with the binary download from softether.org. But if your download always failed and if you wan’t help yourself with a own compiled client binary, it’s your problem…
So, please stop spam.
Rgds, Robert
P.S. Google, Bing and Co. are your friends:
http://lmgtfy.com/?q=softether+vpn+client+download+-softether.org
Have Fun
Von: 249550148<EMAIL_ADDRESS>Gesendet: Mittwoch, 14. Januar 2015 05:05
An: SoftEtherVPN/SoftEtherVPN
Betreff: [SoftEtherVPN] put latest client on git (#126)
always failed to download client bin, and do not want to build myself.
—
Reply to this email directly or view it on GitHubhttps://github.com/SoftEtherVPN/SoftEtherVPN/issues/126.


Make syslinux/extlinux easier to manipulate /proc/cmdline

White on white is a bit dumb.... in agreement with www.linuxuser.co.uk/reviews/webconverger-11-review/
syslinux-themes-webc is actually responsible here

is there a simple way to make the boot command line not flicker and repeat text ? its really difficult to use like that.

Talk to the syslinux folks ;) I'll investigate today.

Spent ours trying to come up with a theme, with https://github.com/Webconverger/Debian-Live-config/blob/master/webconverger/config/bootloaders/isolinux/stdmenu.cfg
Can someone come up with a theme that doesn't suck!? :P
http://www.syslinux.org/wiki/index.php/Doc/menu

Additional thoughts: This menu need to be a black background.
 Black, white, black, black, white.
We need it to be a better flow: black, black, black, black, (fade-in?) white

I think the syslinux is pretty decent now in the dailies.


Cleanup the remaining of AddressBook in a few places

I haven't changed the domumentations in /docs/tutorials and relevant puml files as I haven't figured out what they are used for. Maybe can wait until 1.4

I haven't changed the domumentations in /docs/tutorials and relevant puml files as I haven't figured out what they are used for. Maybe can wait until 1.4

The tutorial contains the old files from the tutorial-remark we had done before, I think it is fine to leave it there as it is not used anywhere


feat(remix-react): add support for http-equiv in meta function

Took inspiration of the OG tags: if people want to use the http-equiv tag, they'll have to do
export const meta: MetaFunction = () => ({
  'http-equiv:refresh': '3;url=https://www.mozilla.org',
});

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-http-equiv
@kentcdodds Not sure how this would best fit in the docs, so I'll leave that up to you if you don't mind.

Closes #941

I wonder... Are there a lot of unique tags like this? Should we maybe allow people to have a different way to define these for more control?

It seems like those are the only ones
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta

Remix currently special-cases og:* prefix to set the property attribute vs name.
However, fb:* prefix also uses property, but twitter:* uses name. Who needs consistency?! 🤦♂
I discuss in this issue. https://github.com/remix-run/remix/issues/1717

@kentcdodds it's not so meaningless, as it allows to override a specific item in the merged metas:
// parent.tsx
export const meta: MetaFunction = () => {
  return {
    author1: {name: "author", content: "Author One"},
    author2: {name: "author", content: "Author Two"},
  };
};

// parent/child.tsx
export const meta: MetaFunction = () => {
  return {
    author2: {name: "author", content: "Another Author"},
  };
};

in the child route, this will be rendered:
<meta name="author" content="Author One" />
<meta name="author" content="Another Author" /> <-- took the place of Author Two

(the specification allow some meta to appear more than once)

Oh nice! Yeah, I'm a fan 👍

Still needs documentation update (and ideally tests)

@machour I think it's a problem on dev, as this only happened after rebasing & dev fails too
https://github.com/remix-run/remix/runs/5580333691

@machour It seems like https://github.com/remix-run/remix/commit/32335011e2fc0b77d9ec26471f14f9a458814323 is passing, but a rebase on dev (https://github.com/remix-run/remix/commit/e9ef8abf8b02851425ab7486ea3cd597fe5b584f) seems to be failing 🤔

I suspect that the problems is with the flat map part

@machour Even with the flatMap call, it passed a couple of commits before current dev HEAD

I don't see why we're expecting an eventual array there anyways

The value is either string or object or an array of strings/objects.
To not have to do the same thing twice (once in the loop and once outside of it, like we did before), I first wrapped the value in an array. Since we can now have nested arrays (if the value was already an array), we flatten the array.
This way we're always having an array of strings/objects and can do the if/else only once.

@machour I first only added support for non-array objects, but @kentcdodds asked me to add support for object arrays too, so it's more consistent.

Gotcha. I wasn't aware that arrays were supported before this PR. Thanks for baring with me 🙏

@kentcdodds @machour I also added some tests now.
I also made the types a bit stricter for charset, charSet & title as those were only supported anyways.

I think we should be able to get this merged as soon as we get CI happy 👍

get CI happy

That's where I could use some help I think 😅
I don't really see the problem in my code changes... 🤔😕

@kentcdodds Any chance we could look at making meta allow returning an array like links. If so, it would simplify meta handling and we wouldn't need this weird object syntax.
See PR #2497 where we discuss this. Still need to create a PR for implementing array version, but if you're open to it, I'd gladly work on it.
I think it would be nice to have similar API for both meta and links. If this is supported, even deprecate the current object syntax in favor of array of objects.
export const meta = ({data}) => [
  { title: 'my title' },
  { charset: "utf-8" },
  { property: "og:xxx", content: "url" },
  { property: "article:published_time", content: "..." },
  { name: "description", content: "..." },
  { name: "twitter:card", content: "..." },
  { property: "fb:app_id", content: "..." },
  { httpEquiv: "refresh", content: "..." },
  ...
]

I also would like to see:

#2497 merged
Array support for meta (with the current object syntax)
This PR #2331 reverted

I don't think we should deprecate object syntax as it's simpler. Array syntax would be your escape hatch if you need complete control.

The benefit of the object syntax here is when we merge all the routes it can be used to override the meta values.
I'm fine with adding array syntax. I'm not sure why we need to revert #2331 though.

As noted, the name is not meaningless, which is why I agreed and merged this PR: https://github.com/remix-run/remix/pull/2331#issuecomment-1069420261
My bad on merging it before getting Michael and Ryan's approval (I thought I had, but obvious I hadn't).
But I think it's important to consider the override case which is why I'd say we should not deprecate the object version and only do this with arrays in the future. I think both make sense.

I was waiting for the other PR to land before adding the Array variant. I should have a PR ready soon.


Benchmark_inference

I don't quite understand the line:
            transformer_result = benchmark(transformer, x[:, -1:], start_pos=seq_length - 1)

I timed it and also timed the following:
            transformer_result = benchmark(transformer, x[:, 0:1], start_pos=0)

The longer the seq_length, I was expecting the timings to become more and more disparate. But that isn't the case. The second call gave a throughput of approximately 50% of the throughput of the first call. Why would that be? I believe I have some kind of misunderstanding. Thanks.

@erlebach I'm not able to reproduce the 50% throughput difference you described.
The TransformerLM model is using a KV cache, which stores the (key, value) projections from previous iterations for greater efficiency.  The larger your start_pos is, the more tokens from the cache are input to the model.  With start_pos=seq_length - 1, you should see the Transformer throughput proportional to (1 / seq_length).
My local timings using the provided benchmark script:
transformer_result = benchmark(transformer, x[:, -1:], start_pos=seq_length - 1)

Benchmarking inference throughput...
seq_length: 2048
RetNet throughput: 169.198 tokens/s
Transformer throughput: 32.561 tokens/s
seq_length: 3072
RetNet throughput: 168.538 tokens/s
Transformer throughput: 22.192 tokens/s
seq_length: 4096
RetNet throughput: 169.317 tokens/s
Transformer throughput: 16.867 tokens/s
seq_length: 5120
RetNet throughput: 169.625 tokens/s
Transformer throughput: 13.653 tokens/s
seq_length: 6144
RetNet throughput: 169.368 tokens/s
Transformer throughput: 11.403 tokens/s

In the second case with start_pos=0, inference will always use a single token from the KV cache.  For that reason, the inference latency should now be independent of the sequence length -- confirmed by the benchmark script, where throughput is now much higher and roughly constant.
transformer_result = benchmark(transformer, x[:, 0:1], start_pos=0)

Benchmarking inference throughput...
seq_length: 2048
RetNet throughput: 168.090 tokens/s
Transformer throughput: 202.074 tokens/s
seq_length: 3072
RetNet throughput: 168.641 tokens/s
Transformer throughput: 192.910 tokens/s
seq_length: 4096
RetNet throughput: 168.724 tokens/s
Transformer throughput: 202.399 tokens/s
seq_length: 5120
RetNet throughput: 168.665 tokens/s
Transformer throughput: 202.023 tokens/s
seq_length: 6144
RetNet throughput: 168.609 tokens/s
Transformer throughput: 199.622 tokens/s

In the second case with start_pos=0, inference will always use a single token from the KV cache.

Note - this is incorrect usage of the transformer model.  It may be faster, but will not give similar outputs.

@erlebach Closing for now, but feel free to add more questions if you have any.


Fix bug BucketExists when using aws s3 as storage server

What news

When we check Bucket Exist with aws s3. The uri will be emptied, so Request will be Forbidden

Stale PR, please resubmit with the review fixes.


Space(s) just before LF makes encrypted data mess

If there is/are space(s) just before a line feed in file, encrypted data will be messed.
When you open the encrypted file with kubesec edit, you will see encoded line feeds like \n.
I'm using 0.9.2 with Google Cloud KMS.

A line with white space(s) at the end of the line is illegal yaml format.
Please ignore this issue.