quarkus: upgrade to use Quarkus 1.2.0.Final

I've upgraded to the latest Quarkus release and made the required GraalVM upgrade too.
I wasn't sure what versioning scheme was being used for the stack version, so I copied a similar commit (that upgraded Quarkus) and bumped the minor number.
I've not been able to test this change yet, as I wasn't sure how to enforce Appsody to use my local stack, rather than the one in the live stack repo. If you can point me in the right direction, I should be able to test it today or tomorrow (I'll be away Weds to following Weds inclusive).
Thanks.

@paulrobinson thanks for the PR! you can see here to learn about packaging and enforcing Appsody to use your local stack. Alternatively, you can see here for some built-in validation testing.
I took a look at your travis build and it failed because the template pom could not find a parent pom within the version range [0.2,0.3). Bumping the version range in the template pom to [0.3,0.4) should do the trick!
You could also take a look at using templating variables to define the pom version range in the stack.yaml. This would make it easier to bump the stack version in the future as all 'version changes' could be handled in the stack.yaml.

Thanks @skoh7645. I've made the code change you suggested to bump the version range in the template pom.
Are the CI tests adequate, or would you need me to try this out locally? I'm pretty snowed under today finishing things off ready for my vacation.

@paulrobinson If you want to promote the stack to the incubator repo, please move the stack folder to the incubator folder in the PR too. (Will save a separate PR and version upgrade)

@paulrobinson I think we could fix the build by something like:
diff --git a/image/Dockerfile-stack b/image/Dockerfile-stack
index 6dd70c9..f13ba5a 100644
--- a/image/Dockerfile-stack
+++ b/image/Dockerfile-stack
@@ -6,12 +6,13 @@ COPY ./project /project
 COPY ./config /config

 WORKDIR /project
+RUN mkdir "user-app"

 RUN mvn -N io.takari:maven:wrapper -Dmaven=$(mvn help:evaluate -Dexpression=maven.version -q -DforceStdout)
 RUN mvn -B install dependency:go-offline -DskipTests

 ENV APPSODY_PROJECT_DIR=/project
-ENV APPSODY_MOUNTS=".:/project/user-app"
+ENV APPSODY_MOUNTS="src:/project/user-app/src;pom.xml:/project/user-app/pom.xml;mvnw:/project/user-app/mvnw;mvnw.cmd:/project/user-app/mvnw.cmd"
 ENV APPSODY_DEPS="/home/quarkus/.m2"

 ENV APPSODY_RUN="./mvnw -B compile quarkus:dev"

With that change the container is not creating target dir inside of mounted dir so there is no access error.

Apologies for the late response to this. I was on holiday for a week, then it's taken a while to get on top of what happened whilst I was out. I'm hoping to take a look at this tomorrow or Friday.

@Kamran64 yeah, I think I messed up the merge somehow. I cherry-picked my commits on a clean and updated branch and made https://github.com/appsody/stacks/pull/702.

Thanks @paulrobinson. I'll close this one then.


https://github.com/github/opensource.guide/issues/1119#issuecomment-697133532

https://github.com/github/opensource.guide/issues/1119#issuecomment-697133532
Originally posted by @Paola954 in https://github.com/github/opensource.guide/issues/1119#issuecomment-698159345

#1119 (comment)
Originally posted by @Paola954 in #1119 (comment)


WATM acronym

Please explain the usage of WATM acronym for Azure Traffic Manager in this article. It seems this acronym is in fact an older one and isn't used any more. Microsoft Azure Traffic Manager is the name of the service.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: baa6b22d-e969-1a7b-5598-a34e0f6314a6
Version Independent ID: 2d741fa1-3fea-7f78-5074-0627b1bfa129
Content: Rolling application upgrades - Azure SQL Database
Content Source: articles/sql-database/sql-database-manage-application-rolling-upgrade.md
Service: sql-database
Product: unspecified
GitHub Login: @anosov1960
Microsoft Alias: sashan

@JozoSlejko Thank you for the feedback!  We are investigating this and will get back to you shortly.

@JozoSlejko WATM is an older reference to what is now called ATM.
WATM = Windows Azure Traffic Manager
ATM = Azure Traffic Manager
I have assigned the issue to the content author to evaluate and update as appropriate.
Regards,
Mike

change is in process: https://github.com/MicrosoftDocs/azure-docs-pr/pull/49804

PR merged

#please-close


Docs: Enable continuous documentation build

We want to be able to build and publish documentation (API docs for Metadata API and ngclient at least) as part of our continuous integration.
This bug is about choosing the tools, integrating with the TUF build system and filing any remaining issues as bugs.
Some notes:

Sphinx seems the "obvious" choice as the docs build tool
Using a service like ReadTheDocs also seems like a good choice (but integrating that can be a different issue)
the default sphinx setup generates a lot of files/directories -- we might not want all of it (examples include Makefile and make.bat in root dir: these are not really required. Even the configuration file probably does not need to be in root dir)
Need to decide what to do with the existing .rst and .md documentation in docs/ -- do we want to include some/all of that? We could start with just the API docs

I've done a quick test and sphinx mostly works:

pip install sphinx (also sphinx-rtd-theme to see default RTD style)
create a configuration file (see sphinx-quickstart)
Add extensions = ['sphinx.ext.napoleon'] to conf.py to get support for google style docstrings and html_theme = 'sphinx_rtd_theme' if using RTD theme
make html

The only major issue I've seen is that __init__() docstring is not included (this seems to be a sphinx peculiarity: autoclass_content = 'both' might work)

I think we should start fresh with API docs for new code. As a separate item we can do a review of the material in docs/ to determine what's worth keeping and translating to the new docs format.
Some items in docs are out of date and some of them duplicate better maintained documentation elsewhere, I'm happy to own reviewing those and making recommendations.

See this in-toto PR for prior art https://github.com/in-toto/in-toto/pull/341 which publishes here https://in-toto.readthedocs.io/en/latest/


[HIVEMALL-149] Add tiny script for updating resources/ddl/define-*

What changes were proposed in this pull request?
Add a script for updating resources/ddl/define-*
What type of PR is it?
Improvement
What is the Jira issue?
https://issues.apache.org/jira/browse/HIVEMALL-149
How to use this feature?
./bin/add_define.sh

Coverage increased (+0.0007%) to 41.109% when pulling 01005d78133e383c907fdb148faaf6dce1fbbdd0 on takuti:HIVEMALL-149-define into 7bb5d047dcce7e97336d4b73bb3bd078f2a6fc8a on apache:master.

@myui updated with README

Coverage increased (+0.3%) to 41.433% when pulling a84ba873d821fec27f720e3143193fb8e3adf0fb on takuti:HIVEMALL-149-define into 7bb5d047dcce7e97336d4b73bb3bd078f2a6fc8a on apache:master.

Coverage increased (+0.0007%) to 41.109% when pulling a84ba873d821fec27f720e3143193fb8e3adf0fb on takuti:HIVEMALL-149-define into 7bb5d047dcce7e97336d4b73bb3bd078f2a6fc8a on apache:master.


small fix for the code in the context menu example

the code in the example was not displayed correctly

just a little trick you can do, if you install doxygen and graphviz, you can run doxygen from your D++ dir and it'll generate local docs in the docs dir. you can then check locally that a PR looks fine before submitting it


Grape::Entity breaks requesting a collection with a query scope will only handle arrays

Grape::Entity breaks Grape::API when requesting a collection with a query scope
Using entity on a collection with a query scope is throwing an error
the following works without issue
  resource :posts do
    get do
      @posts = Post.all
      present @posts, :with => PostEntity
    end
  end

while
  resource :posts do
    get do
      @posts = Post.order('published_at DESC')
      present @posts, :with => PostEntity
    end
  end

throws the following error
undefined local variable or method `published_at' for #<ActiveRecord::Relation:0x000001010b15b0>
     # ./spec/api/posts_api_spec.rb:12:in `block (3 levels) in <top (required)>'

With the following framework trace
activerecord (3.1.1) lib/active_record/relation.rb:459:in `method_missing'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/entity.rb:145:in `value_for'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/entity.rb:124:in `block in serializable_hash'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/entity.rb:123:in `each'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/entity.rb:123:in `inject'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/entity.rb:123:in `serializable_hash'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/middleware/base.rb:115:in `encode_json'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/middleware/formatter.rb:79:in `call'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/middleware/formatter.rb:79:in `block in after'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/middleware/formatter.rb:78:in `collect'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/middleware/formatter.rb:78:in `after'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/middleware/base.rb:26:in `call!'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/middleware/base.rb:19:in `call'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/middleware/base.rb:25:in `call!'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/middleware/base.rb:19:in `call'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/middleware/error.rb:44:in `block in call!'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/middleware/error.rb:43:in `catch'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/middleware/error.rb:43:in `call!'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/middleware/base.rb:19:in `call'
rack-mount (0.8.3) lib/rack/mount/route_set.rb:152:in `block in call'
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:96:in `block in recognize'
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:68:in `optimized_each'
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:95:in `recognize'
rack-mount (0.8.3) lib/rack/mount/route_set.rb:141:in `call'
/[...]/bundler/gems/grape-12e44781d7e8/lib/grape/api.rb:33:in `call'
rack-mount (0.8.3) lib/rack/mount/prefix.rb:26:in `call'
rack-mount (0.8.3) lib/rack/mount/route_set.rb:152:in `block in call'
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:96:in `block in recognize'
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:75:in `optimized_each'
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:95:in `recognize'
rack-mount (0.8.3) lib/rack/mount/route_set.rb:141:in `call'
actionpack (3.1.1) lib/action_dispatch/routing/route_set.rb:532:in `call'
airbrake (3.0.4) lib/airbrake/rack.rb:27:in `call'
sass (3.1.10) lib/sass/plugin/rack.rb:54:in `call'
warden (1.0.6) lib/warden/manager.rb:35:in `block in call'
warden (1.0.6) lib/warden/manager.rb:34:in `catch'
warden (1.0.6) lib/warden/manager.rb:34:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
rack (1.3.5) lib/rack/etag.rb:23:in `call'
rack (1.3.5) lib/rack/conditionalget.rb:25:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/head.rb:14:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/flash.rb:243:in `call'
rack (1.3.5) lib/rack/session/abstract/id.rb:195:in `context'
rack (1.3.5) lib/rack/session/abstract/id.rb:190:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/cookies.rb:331:in `call'
activerecord (3.1.1) lib/active_record/query_cache.rb:62:in `call'
activerecord (3.1.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:477:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (3.1.1) lib/active_support/callbacks.rb:392:in `_run_call_callbacks'
activesupport (3.1.1) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.1.1) lib/action_dispatch/middleware/callbacks.rb:28:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/reloader.rb:68:in `call'
rack (1.3.5) lib/rack/sendfile.rb:101:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/remote_ip.rb:48:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/show_exceptions.rb:47:in `call'
railties (3.1.1) lib/rails/rack/logger.rb:13:in `call'
rack (1.3.5) lib/rack/methodoverride.rb:24:in `call'
rack (1.3.5) lib/rack/runtime.rb:17:in `call'
activesupport (3.1.1) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.3.5) lib/rack/lock.rb:15:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/static.rb:53:in `call'
airbrake (3.0.4) lib/airbrake/user_informer.rb:12:in `call'
railties (3.1.1) lib/rails/engine.rb:456:in `call'
railties (3.1.1) lib/rails/rack/content_length.rb:16:in `call'
railties (3.1.1) lib/rails/rack/log_tailer.rb:14:in `call'
rack (1.3.5) lib/rack/handler/webrick.rb:59:in `service'
/[...]/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service'
/[...]/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run'
/[...]/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'

and a simplified version of the app setup I am using
# app/models/post.rb

# == Schema Information
#
# Table name: lessons
#
#  id           :integer         not null, primary key
#  published_at :datetime
#  title        :string(255)
#  body         :text
#  created_at   :datetime
#  updated_at   :datetime

class Post < ActiveRecord::Base
end

# app/api/posts_api.rb

class PostsApi < Grape::API
  represent Post, :with => PostEntity
  prefix "api"

  resource :posts do
    get do
      @posts = Post.order('published_at DESC') #vs Post.all
      present @posts, :with => PostEntity
    end
  end

end

# app/entities/posts_entity.rb

class PostEntity < Grape::Entity
  expose :title, :body, :published_at
end

# config/routes.rb

mount PostsApi => "/"

# config/application.rb

module myApp
  class Application < Rails::Application
    ...
    config.autoload_paths += %W(#{Rails.root}/api, #{Rails.root}/entities)
    ...

I took some time to inspect the code for #lib/grape/entity
I see that represent expects an array of objects or a single object
    # This convenience method allows you to instantiate one or more entities by
    # passing either a singular or collection of objects. Each object will be
    # initialized with the same options. If an array of objects is passed in,
    # an array of entities will be returned. If a single object is passed in,
    # a single entity will be returned.
    #
    # @param objects [Object or Array] One or more objects to be represented.
    # @param options [Hash] Options that will be passed through to each entity
    #   representation.
    def self.represent(objects, options = {})
      if objects.is_a?(Array)
        objects.map{|o| self.new(o, {:collection => true}.merge(options))}
      else
        self.new(objects, options)
      end
    end

Would it be reasonable to add a condition to map an ActiveRecord::Relation?

I'd caution against checking whether the object is an ActiveRecord::Relation – why not do the check for Enumerable? That would, hopefully, allow compatibility with other ORMs.

same w/ mongoid #76

The problem with checking for Enumerable is that a Hash is also an Enumerable and a hash should not have the same behavior mapped to it. I'm open to suggestions but not entirely sure what to do to solve the issue reliably for all cases.

OK, I think I know what needs to be done. This will solve the problem in ActiveRecord and should solve the problem in any well-implemented ORM. I'm documenting this here because I don't have time to make the change and test it right now:
Grape should do a respond_to?(:to_ary) on the incoming object and call it if it exists. #to_ary should only exist on objects that can be considered an array, not objects that can be converted to an array (so Hashes, which do respond to #to_a, do not respond to #to_ary).
objects = objects.to_ary if objects.respond_to?(:to_ary)

If someone sends a pull with tests before I get to it, I will accept. This should fix #76 as well.

This should be fixed now.


Provide different soft-wrapping rules for CJK languages

Text:
文字文字 English 文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字

1.2.0-beta0:

When mixing English and Chinese(or Japanese) with whitespace, Chinese(or Japanese) sentence can be break, instead of break in whitespace.
Browser:

文字文字 English 文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字

/cc @as-cii

It looks like it is only lines that contain both CJK and non-CJK. If I shrink the window even further, the all CJK line wraps as expected:

The problem here lies in how soft-wrapping changes depending on the language. #9162 only addressed the rendering part of it, which was causing issues because of the amount of space characters were occupying. The way word-wrapping works as of now is that we will soft-wrap if we manage to match a space before the hypothetical hard-wrap position: if we do, we break the line in two, otherwise we perform an hard-wrap at the desired position.
An hypothetical solution to this will need to take into account the language, because as far as I know, each language has its own soft-wrapping rules. There's a good article on Wikipedia which explains this in greater detail.
@nathansobo: our current solution was a great leap compared to the past, but I feel like I could put some effort into polishing this following the aforementioned rules. What do you think?

Unicode provides Unicode Line Breaking Algorithm.

@mandel59 Thanks for the link! Know any JS reference implementations?

I found https://github.com/devongovett/linebreak

https://github.com/devongovett/linebreak seems good!

Currently, this bug is making this editor essentially useless for editing CJK markdown documents, HTML and such, which naturally involve a small number of spaces and long CJK strings jumbled together. Atom often tries to break lines at the second column!

And editing markdown is one of the fields Atom should be exceptionally good at.
So is it possible to add a mode to suppress per-word soft wrapping altogether (even for English words)? That should quickly fix this problem.
While word processors such as Word definitely need complex wrapping algorithm suggested here, I doubt editors like Atom need this kind of sophisticated line-breaking algorithm. The goal of Atom is not to replace Word or InDesign.
At least in Japan, most popular domestic editors (such as Hidemaru) do not respect line-breaking rules at all by default. They simply break lines everywhere, even in the middle of an English word. The users of such editors don't care if commas and closing brackets come at the beginning of a line. As a native speaker of Japanese, I'd say that's the preferred behavior when I feel like using Atom. Seeing split English words is much more tolerable than seeing soft-warp happening at the second column.

@as-cii Seems like we could detect CJK characters in our soft-wrap code and just break at the preferred wrap boundary instead of at whitespace if there are any in the line. Thoughts?

@nathansobo: interesting, using Unicode's standard line breaking algorithm seemed quite tempting to me, although I am not sure how long it could take to implement it or to integrate an existing package (e.g line-break) with Atom.
I guess that detecting whether the character at the preferred wrap boundary is CJK could be fine. Opening a PR for this :soon:.


Fixes build errors on case sensitive filesystems

Looks like there were some case typos in some CMakeLists.txt files that cause build errors on case sensitive file systems.
With this fix, I was able to build development on a raspberry pi directly ( raspbian wheezy ) .

Clearly this isn't going to happen...


No license

Can you consider adding a OSS license to this project. I would like to make an adjustment to it for my own needs, but without license, I won't do it.
Thanks in advance
~InDieTasten

License is ISC
https://github.com/iaincollins/docker-deploy-webhook/blob/b2661bbd00bb5a25730e7f2ff1e267deefd71831/package.json#L11

I forgot about package.json having license info too. I'm always just looking for a LICENSE txt or md file. #5 Seems to be adding such a file that I expected to be there first.

Yeah it should really have a LICENSE file to spell it out more explicitly, have merged that in now, thanks for the PR!


Can we have option to yii migrate/up without user input?

In my gilab-ci I need to run functional, and in perspective appliance Codeception tests.
Also I have deploy.sh script in production.
Now I can't run migrate/up before tests, without expect script:
expect -c 'spawn php /www/yii migrate/up; expect "yes" {send -- "yes\r"}; expect "successfully" {send -- "\r"}'
Can we have '-y' option to migrate without asking user input?
https://github.com/yiisoft/yii2/blob/master/framework/console/controllers/BaseMigrateController.php#L181
I can implement it if you tell me what is correct way to do that.
Additional info

Q
A

Yii version
2.0.12

PHP version
7.1

Operating system
Doesn't matter, Linux

https://github.com/yiisoft/yii2/blob/master/framework/console/Controller.php#L51-L54


Use emojis for "spr status" output

Use emojis for "spr status" output

Added user configuration to turn emoji status on/off

neat, thanks for the cleanup!


META-INF/proguard/okhttp3.pro ERROR

Hi
I came across with the next problem. Not sure if it is a bug or lack of knowledge from my side.
More than one file was found with OS independent path 'META-INF/proguard/okhttp3.pro'
Here there is link to stackoverflow where you can see all the step done in order to fix it but there are more.
https://stackoverflow.com/questions/51838974/more-than-one-file-was-found-with-os-independent-path-meta-inf-proguard-okhttp3?noredirect=1#comment90634425_51838974
Anyone know a solution?

Solutions go to Stack Overflow.


AGPL Licensed standard-error library

My organization and others such as Google will not allow use of libraries that have a transient dependencies on libraries licensed via the AGPL.
Google's Policy on AGPL
https://opensource.google/docs/using/agpl-policy/#:~:text=WARNING%3A Code licensed under the,NOT be used at Google.&text=Using AGPL software requires that,be licensed under the AGPL.
The standard-error library falls into this category.
https://github.com/moll/js-standard-error/blob/master/LICENSE
Which means we cannot use any libraries that use archetype.
Also filed an issue in the standard-error project
https://github.com/moll/js-standard-error/issues/4

Fixed in v0.12.0, we removed standard-error as a dependency.


Add Support for Image Display in ntfy iOS App

Hi,
Currently, the ntfy iOS app does not support displaying images in notifications or in the app itself when the payload includes an image URL or attachment. Adding this feature would greatly enhance the user experience by enabling quick and direct viewing of images shared via notifications, such as screenshots or photos.

The native iOS app is missing many features as compared to the web app and Android apps. However, if you use the PWA on iOS, you get all the features of the web app (including image previews) and can still get background notifications like the native app.

What about self hosted? I am really trying to make the pwa to work but it's just a bookmark, I'm on iOS
On click it just redirects on the browser without notifications enabled

The native iOS app is missing many features as compared to the web app and Android apps. However, if you use the PWA on iOS, you get all the features of the web app (including image previews) and can still get background notifications like the native app.

I thought PWA on iOS doesn't allow images in notifications. So the notifications wouldn't have them until you go in and view the list in the app?


Sharing a tree between windows

Hi @Yomguithereal!
I've been using baobab-react for a few months now and I was recently asked for some interesting feature. Lets imagine that I'm writing a rich text-editor that can either be embedded (iframed) in a page or shown in a pop-out window. I was asked that if you start using the embedded editor you should be able to switch to a pop-out view and resume where you left and vice versa.
When you switch to pop-out there are still some elements that are shown in the 'embedded' view and will react to state changes.
Yes, you can serialize the tree and pass it down, deserialize and build a new tree based on that state. And then every time something changes in the store  you have to notify the change to the embedded view.
I was not a fan of this idea so what I tried was to expose the state tree in the window scope and have the pop-out access that tree instead of having its own new tree. This looks like
let parentStateTree;

if (!isEmbedded()) { // it is a pop-out
  try {
    parentStateTree = window.opener.StateTree;
  } catch(e) {}
}

const StateTree = parentStateTree || new Baobab({...});
if (isEmbedded()) {
  window.StateTree = StateTree;
}
export default StateTree;

Besides that I just needed to change two lines of baobab-react to have two different interfaces listen to the same store. Pretty awesome surprise.
Now, those two lines are related to this
What I had to do was:
function root(tree, Component, BaobabClass = Baobab) {
  if (!(tree instanceof BaobabClass))
...

This was necessary because, even though the tree was an instance of a Baobab class, the instance was created in a different window and therefore with a different reference to 'baobab'.
I really liked how easy it was to accomplish this and if you think this is of benefit for someone else I'm happy to submit a PR with this change.
Sorry if the message ended up too long, I thought some context was necessary 😄

Hum, intuitively I'd say it's usually dangerous to make different context access the same references but why not. Ideally, the baobab library should offer some kind of way to detect baobab instances and whatnot using something similar as Array.isArray (which solves the same kind of issues) rather than relying on instanceof indeed. But I guess your fix should also work. What do you think?

I agree. Something similar to Array.isArray would be nice. We can start a conversation there. In the meantime, should we get my change in here?

I think we can do better: we can drop the baobab dependency and require this as a peer dependency and rely on this internal property here:
https://github.com/Yomguithereal/baobab/blob/master/src/baobab.js#L111
Which actually was made to tackle this kind of issues.

Do you mean doing something like
function root(tree, Component) {
  if (!tree || tree.toString() !== '[object Baobab]')
...

or maybe
function root(tree, Component) {
  if (!tree || tree.toString() !== (new Baobab()).toString())
...

to not hardcode the string in there.


macOS: prevent native window drag by top region when titlebar hidden

Currently macos-titlebar-style = hidden doesn't prevent the native window drag gesture in the top region of the window- in the original PR it did, but there were issues with how it went about it so it was removed (see c6bbdfb). I figured out how to safely and simply remove the gesture, and as a bonus it opens up potential future enhancements.
The native window drag region is driven ultimately by the window's contentLayoutRect, so we can just override it in TerminalWindow to return a rect the size of the full window, disabling the gesture without causing any side effects by altering the responder chain.
This makes macos-titlebar-style = hidden a much nicer experience. The window can still be resized, managed by the OS and third party window managers, and dragged by the edges, but the native drag gesture in the titlebar region is fully avoided.
Future work
We may consider adjusting this to produce a contentLayoutRect that doesn't include the padding area of the terminal grid(s), so that the window can be dragged from a larger region around the edges (and not just the resize region).

Just wanted to chime in and say that this is actually a feature to me. I was pleasantly surprised that I didn't have to hunt for the window edge to drag it.


Use keycloak groups to define workspaces

As architect I would like to be able to use keycloak to define basic workspace information.

@vvcb Following your message this morning I did have a look into whether or not we could get the mapping list directly from keycloak in the claims without having to query keycloaks API, but the answer to that was simply no, it does not have a mapper for that capability and because of the way that the API's now work it might be counter to performance design in keycloak itself in general now. As a result I fell back to the idea of using Keycloaks API's. This took a lot of figuring out as keycloaks documentation is either missing or out of date and had to figure a lot of it manually.
So in keycloak i've created a group at the top level called jupyter-workspaces. This group is just a container for the other groups so that we can try to keep the realm relatively clean. To clean things up a little i've gotten rid of the groups claim which was actually referring to the roles and instead created new claims: realm_groups and realm_roles.

The child groups underneath jupyter-workspaces have the following attributes:

workspace.xlscsde.nhs.uk/environment
workspace.xlscsde.nhs.uk/startDate
workspace.xlscsde.nhs.uk/endDate
workspace.xlscsde.nhs.uk/description

This is rendered on the page as you probably would expect and the display name is now the name of the group.

you'll note that i've tried to keep the conventions of the attribute names in line with naming convensions used in kubernetes annotations and labels. This again is to allow us to use attributes for these roles for other things in future if we so desire.
One thing to keep in mind is that the attributes on the groups are not actually designed for this purpose. They are designed to be merged in with the user's own attributes, however in this case there would be collisions on the naming if we were to do that.
The kubespawnerOverride for now refers to the config section custom.environments.{environment} to pickup details about the image etc, we can potentially extend the attributes above to encompass this:
such as:

kubespawner.xlscsde.nhs.uk/imageName
kubespawner.xlscsde.nhs.uk/memGuarantee
kubespawner.xlscsde.nhs.uk/memLimit
kubespawner.xlscsde.nhs.uk/cpuGuarantee
kubespawner.xlscsde.nhs.uk/cpuLimit

etc. I've not done this as i'm not sure if we wanted to control it in that manner and what parameters we would want to set here.


Disconnect bookmark api client from service module

packages/modules/bookmark/src/client/bookmarkClient.ts
the api client should only use function from config.
by default the configurator wires up the link to services module.
Create a interface for the Api Client that will be consumed in the bookmark client

It more wrappers upon wrappers but I agree.


Merge feature/utxo-hd into master

[ ] Recreate a mergeable and reasonable git history

This is being addressed by #4352 so let's close this


Floating windows possible if certain actions done at same time

How to reproduce:

Have a low wall placed with no window on it. You'll need two people to reproduce.

Have person one use a welder on the low wall while person two attempts to construct a window on it.

There will be a floating window with no wall underneath it. As far as I can tell it doesn't block atmos, so the game knows there's no wall under it.

A clarification: the easiest way to reproduce is to have the person with the welder start welding, and then the person with the glass build the window.

Not possible anymore since we dont have low walls


Clean Up UI

Resolves #197
Minor improvements in UI

Do you think it would be a good idea to have word wrap on the status bar instead of a scroll?

All the changes lgtm!
One suggestion: should we make the AID box a different color (e.g. blue)?

All the changes lgtm! One suggestion: should we make the AID box a different color (e.g. orange, green)?

After experimenting a bit, I think it's best if we use the consistent DocTrack color scheme for the IDs. Adding more colors could possibly make it more distracting. What do you think?

Do you think it would be a good idea to have word wrap on the status bar instead of a scroll?

Can I clarify with you what scroll you're referring to? Currently the status bar already truncates the string if the width of the window is too small.

Thanks in advance!

Can I clarify with you what scroll you're referring to?

This one!

After experimenting a bit, I think it's best if we use the consistent DocTrack color scheme for the IDs. Adding more colors could possibly make it more distracting. What do you think?

Came to a similar conclusion, I think since DocTrack itself only uses two colours, it might be a bit too drastic for a change

OK, the word wrapping should be fixed now!

I think it'd be a good idea to change the Ui.png here too!

I think it'd be a good idea to change the Ui.png here too!

Okay, I've changed the Ui.png here as well!

LGTM! Thank you for fixing the clear command UI bug


Move all virtualenv related ignore directives out of Python template.

Update

[ x] Template - Update existing .gitignore template

Details
Since there is a dedicated ignore file for virtualenv, let's deduplicate the default entries from the Python template.

This change doesn't make sense

Still no 'venv' on https://www.gitignore.io/api/python, but source code has it, not update?


Update SPIPhysical.scala so channel 0 is sampled in single SPI mode

Changed from channel 1 being sampled for single SPI mode

Can you describe what this PR does a bit more? Is it fixing a bug? Or improving the behavior?

It's a bit of both.
A QSPI model I'm using currently, when set to single SPI mode, responds on channel 0. This then is not being sampled by the device and my SPI reads always return 0.
But intuitively, different modes of SPI samples different amounts of rx input bits.

Quad SPI samples all rx bits ([3:0])
Dual SPI samples lower 2 indexed rx bits([1:0])
The next step for Single SPI should be to sample only the lowest index ([0:0]) but it currently samples [1:1]

Ok, this change makes sense to me. can you sign the CLA?

Ok signed. Thanks

But intuitively, different modes of SPI samples different amounts of rx input bits.

Quad SPI samples all rx bits ([3:0])
Dual SPI samples lower 2 indexed rx bits([1:0])
The next step for Single SPI should be to sample only the lowest index ([0:0]) but it currently samples [1:1]

I don't think this pattern is correct for single SPI mode.
Different from Dual and Quad SPI mode, Single SPI mode operates in full-duplex. So there are two pins, MOSI (Master Out Slave In) and MISO (Master In Slave Out).
The convention here is that MOSI gets mapped to pin(0), and MISO mapped to pin(1). Therefore, on receiving in Single SPI mode, it is correct to receive from rxd_fin(1).
Please check if the QSPI model you are using also follows this convention. Could you provide a link to the device you are using?
Thanks.

Ah sorry about that, I just checked the spec again. It does say that pin1 should be the response data pin.
https://media-www.micron.com/-/media/client/global/documents/products/data-sheet/nor-flash/serial-nor/mt25q/die-rev-a/mt25q_qljs_u_256_aba_0.pdf?rev=59de7fdc073c47fd81ff0533f44733ef
Please feel free to revert this change. Thanks


Fix Tags parameter on CloudFormation create_change_set method.

Coverage remained the same at 92.544% when pulling a0708a70fcc1b265a25fccb01ec1ca67e409a5ce on markchalloner:cf-create-change-sets-tags-fix into 71a054af92a45e2a8b5d7c4fb435841949e1895c on spulec:master.

Coverage remained the same at 92.544% when pulling a0708a70fcc1b265a25fccb01ec1ca67e409a5ce on markchalloner:cf-create-change-sets-tags-fix into 71a054af92a45e2a8b5d7c4fb435841949e1895c on spulec:master.

Coverage remained the same at 92.544% when pulling a0708a70fcc1b265a25fccb01ec1ca67e409a5ce on markchalloner:cf-create-change-sets-tags-fix into 71a054af92a45e2a8b5d7c4fb435841949e1895c on spulec:master.

Thanks!


Add features: gradio app & local chatbot support

host gradio app on hugging face space
support local chatbot to replace gpt via fastchat RESTful API server

LGTM!


Remove Google.Chrome 122.0.6261.112 to Google.Chrome.EXE 122.0.6261.112

Microsoft Reviewers: Open in CodeFlow

URL: https://dl.google.com/release2/chrome/mwp3sugf7kfbi5o3pqm2tgvekm_122.0.6261.112/122.0.6261.112_chrome_installer.exe
Status code: 200
(Automated message - build 612)


fix: moved @fiatconnect/fiatconnect-types to dependencies

was a dev dep before, which is incorrect because there are enums there which are needed in the generated js files

https://github.com/fiatconnect/mock-provider/pull/4/files#r846500094


Dev compilation instructions not working

Following the instructions to build project locally (after forking), I'm getting this build error which looks like a missing file and or missing step in the instructions.  Not familiar with Pods, any ideas?

I got this issue when I tried building from source a few weeks ago as well, would love to hear a solution on this! Not really a strong iOS developer so not sure where to start, but I couldnt find any good leads from a quick google search.

This was after running pod install and opening the workspace file?
https://github.com/aaronpk/Overland-iOS?tab=readme-ov-file#development-setup
One thing that kept tripping me up when using Cocoapods was forgetting to open the xcworkspace file instead of the xcproject file. Make sure you open Overland.xcworkspace

Turns out the dev setup instructions don't mention the pod install step so for us SwiftPM types we tend to forget that ;-) PR submitted


Merge DICOM

Create two folders: FHIR and DICOM.
Each folder has one solution for FHIR and DICOM Anonymization respectively.

/azp run

/azp run


dispatch() causes freeze to nested HSM

Issue

This is the structure of my states
The IdleState from StandingHSM runs, but when I call dispatch in the IdleState, the game just freezes.
Here is how I initialize the root HSM
extends CharacterBody2D

@export var speed := 200.0
@export var hsm: LimboHSM
@export var standing: LimboState
@export var crouching: LimboState

func _ready() -> void:
	initialize_state()

func initialize_state():
	hsm.add_transition(standing, crouching, "crouch_start")
	hsm.add_transition(crouching, standing, "crouch_end")
	hsm.initialize(self)
	hsm.set_active(true)

Standing HSM
extends LimboHSM

@export var idle: LimboState
@export var walking: LimboState
@export var sprinting: LimboState

func _setup():
	initialize_state()

func initialize_state():
	add_transition(idle, walking, "walk_start")
	add_transition(walking, idle, "walk_end")
	add_transition(ANYSTATE, sprinting, "sprint_start")
	add_transition(sprinting, idle, "sprint_end")

## Code from standing/idle_state.gd
func _update(delta: float) -> void:
	var input_dir := Input.get_vector("move_left", "move_right", "move_up", "move_down")
	if input_dir.length() > 0:
		get_root().dispatch("walk_start") ## Causes freeze
		return
	agent.velocity = Vector2.ZERO
	agent.move_and_slide()

I have tried dispatch(), get_root().dispatch(), it freezes the game anyways, it doesn't help the fact that there is no error log in the editor.
I have also tried running the project in v4.2.1, it still is the same

System Info

Godot 4.2.2
Windows 11

Reproduction Steps

Clone: https://github.com/niceWizzard/LimboAI_dispatch_freeze
Run the game
If you were to press WASD (movement input), game freezes

I was just about to release 1.0.2 that should fix this. Check https://github.com/limbonaut/limboai/pull/93


update SDK to latest Cloud 2.0 API spec

Get the latest Cloud 2.0 spec from managed-service. This includes support for a new "provisioned_vcpus" property on the UsageLimits object.

I switched the target branch to api-cloud-20 after hard resetting it to main, and then squash merged.


Ignore unknown Properties from config file when parsing

Motivation
As Functions evolve, we will be adding new properties/fields to the FunctionConfig. There will be fields present in the config files that won't make sense for previous admin tool installation. This especially happens when submitting pulsar functions using newer client to run over kubernetes with an older installation of pulsar. This pr will mark the unknown fields to be ignored to get over that problem
Modifications
Describe the modifications you've done.
Result
After your change, what will change.

run cpp tests

run integration tests

cherry-picked
5ac1322 in branch-2.1


use ESLint config to determine parse options

https://github.com/eslint/eslint/blob/master/lib/config.js
Instead of relying fully on [UAJSG] to determine parsing goal, could also use ESLint config to get a parse goal.
If a file is marked sourceType: module by ESLint config, it will be assumed to be a module without disambiguation.
If it is marked script, disambiguation must be used as this should default to script for files outside ESLint's purview (i.e. node_modules, etc.) and thus can't be considered an explicit parse goal.
For packages including jsnext:main, this is also ideal as the other parse options (parser, experimentalObjectRestSpread, jsx, etc.) can be leveraged from their (hopefully included and existing) .eslintrc.*.

I still think this is a good idea, but I don't want it to hold up 2.0.


”Sasca Montană”, ”Bogodinț”, ”Potoc”, ”Sasca Română”, ”Slatina-Nera” are listed in the drop-down menu

Description:
When user writes ”Sasca Montană”, ”Bogodinț”, ”Potoc”, ”Sasca Română”, ”Slatina-Nera” the locations appear in the drop-down menu next to the comune and the county witch is a part according to the law.
Precondition:
The website is up an running.

Step 1
Write in the search bar "Sasca Montană"

Expected results
The location appears in the drop-down menu as "Sat Sasca Montană, CARAȘ-SEVERIN(Sasca Montană)".

Step 2
Press "x" button.

Expected results
The location was deleted from the search bar.

Step 3
Write in the search bar "Bogodinț"

Expected results
The location appears in the drop-down menu as "Sat Bogodinț, CARAȘ-SEVERIN(Sasca Montană)".

Step 4
Press "x" button.

Expected results
The location was deleted from the search bar.

Step 5
Write in the search bar "Potoc"

Expected results
The location appears in the drop-down menu as "Sat Potoc, CARAȘ-SEVERIN(Sasca Montană)".

Step 6
Press "x" button.

Expected results
The location was deleted from the search bar.

Step 7
Write in the search bar "Sasca Română"

Expected results
The location appears in the drop-down menu as "Sat Sasca Română, CARAȘ-SEVERIN(Sasca Montană)".

Step 8
Press "x" button.

Expected results
The location was deleted from the search bar.

Step 9
Write in the search bar "Slatina-Nera"

Expected results
The location appears in the drop-down menu as "Sat Slatina-Nera, CARAȘ-SEVERIN(Sasca Montană)".


[EN] update idempotence

Describe your changes
The last sentence was ambiguous: "If the parameters are the same, an idempotent operation won't affect the application it calls."
it's not clear who calls who, and who is not affected.
I changed it to:
"If the parameters are the same, executing an idempotent operation several times will have no additional effect."
Do you think we should add an example like adding zero to a number or the elevator call button that you can click any number of times?
Related issue number or link (ex: resolves #issue-number)
https://github.com/cncf/glossary/pull/2212#issuecomment-1638194216
Checklist before opening this PR (put x in the checkboxes)

[x] This PR does not contain plagiarism

don’t copy other people’s work unless you are quoting and contributing it to them.

[x] I have signed off on all commits

signing off (ex: git commit -s) is to affirm that commits comply DCO. If you are working locally, you could add an alias to your gitconfig by running git config --global alias.ci "commit -s".

Thanks, @guillaumebernard84. To see where this is in the review pipeline and follow progress, please have a look at the project board.


Services sync dialogue UI: update color and layout

The current service sync dialogue uses purple in the progress bar and OK button text.
Colour update
The progress bar should be updated to the blue specified in the design guidelines
Layout update

Apply padding of 20px top, right, bottom and left.
Align all internal elements left.
Apply a fixed, increased height to the dialogue box to prevent the element from changing height and 'flickering' when the sync details change from single line to multiple line.

Outreachy
This issue can be used for an Outreachy application for the project Custom UI components for ODK-X mobile apps
Multiple people can work on this issue simultaneously.
You do not need to be assigned to this issue to work on it for an Outreachy application

I would like to work on this issue.

@jmlengineering I have assigned the issue to you

@wbrunette I also want to work on this issue. Please assign me this project. I will surely resolve this issue.

@AnshuKumari197 unless the issue says it's a "placeholder issue" or "an open issue for multiple people" we generally do not assign multiple people. We are going to give @jmlengineering some time to complete the issue before we even think about re-assigning.

I have lost a link to the resources, is there a how to for setting up the environment?

@jmlengineering check the README file.

Hi, I would like to work on this issue

If this is still open, I'd also like to jump on it

Hello @wbrunette, can I work on this issue?

It's fine by me.
On Sun, Oct 9, 2022 at 12:51 PM Augusta2 @.***> wrote:

Hello @wbrunette https://github.com/wbrunette, can I work on this issue?
—
Reply to this email directly, view it on GitHub
https://github.com/odk-x/tool-suite-X/issues/331#issuecomment-1272582642,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AWQJHZ5EONDLEJXVDJ7DVCDWCLZY7ANCNFSM5OLFLHFA
.
You are receiving this because you were mentioned.Message ID:
@.***>

I'd love to jump on this, can I be assigned to this issue @maprehensive

It's fine by me.
…

Thanks @jmlengineering - I will unassign you and open this up for Outreachy participants to work on.

@BlueSkiez-dev @Cveman1 @G-ann @Augusta2 Go for it!

@maprehensive I'd like to work on this

@maprehensive
Services sync dialogue UI update :

I used auto-layout for the sync dialogue and put its resizing properties to fixed width and height  .The contents in the auto-layout resizing properties are also set to fixed width and height. This would to prevent the element from changing height and 'flickering' when the sync details change from single line to multiple line
I used changed the color of the progress bar to the recommended blue.
I increased the height of the progress bar to 8px to enable visibility.

Hi again @maprehensive
I’ve updated the colour of the progress bar as specified in the design guidelines and improved the layout to meet the acceptance criteria.

For the dialogue;

I applied padding of 20px to all sides within the dialogue.
Aligned its content to the left
I increased and fixed the height of the text in the sync details to stop the 'flickering'. This would prevent the height of the dialogue from changing rapidly as it currently does.
I adjusted the layout and spacing of the App's content using the 8-point grid system as indicated in the design guidelines.

Other updates;

I used my initial iteration of the Services logo, to see it in action (let me know if this is okay).
You might also notice I improved the microcopies of the labels to make the sync feedback clearer and easy to understand for almost anyone. This is to make ODK-X accessible to non-tech-savvy users in resource-constrained environments.
Also, I figured that simply improving the UX texts of the sync details made the texts concise and solved the problem of flickering.
I also used percentages to inform users of the wait to the completion time of syncing, to improve the UX.
I updated the OK button text to 'DONE'. It is clearer and more inclusive.
The dialogue now has a rounder corner of about 8 px to make it easier on the eyes and less cognitive effort. Sharp corners have been known to be a sign of danger or lack of safety.

View my iteration in action here:
https://user-images.githubusercontent.com/80982139/197083393-3fdbc880-5fdb-4797-b74c-062a49114d26.mp4
Thanks. What do you think?

@maprehensive  Kindly review my redesign for feedback and approval. Thank you!

https://user-images.githubusercontent.com/115473782/197557409-8f0e2c84-85f1-4206-aaed-331efaeb1efd.mp4

Hi @Redeem-Grimm-Satosh, @maprehensive, I have updated and redesigned the sync UI to meet the Material Design Guidelines here;

Guidelines

24px padding on all sides.
The content within the dialogue is aligned to the left.
Fixed the height of the content to avoid the flickering during syncing.

See it in context;

Thanks for the update @Cveman1!

Feature implemented already

Feature implemented already

Is there a way for me to see the implemented ones?

@Cveman1 Looks great! Question - why is "Hide sync details" blue and "Show sync details" not blue?

Hi @Redeem-Grimm-Satoshi, kindly check the update I've made. The button labels are also in all CAPs

@Cveman1 Changes implemented, thanks!

@Redeem-Grimm-Satoshi @Cveman1 until an issue has code written and a PR, we should keep it in the Design or Develop columns. It makes the process clearer.

@maprehensive okay sure

@Cveman1 Changes implemented, Looks good.. thanks!

Hi @Redeem-Grimm-Satoshi, please check the title of the modal 'Syncing table and for...' should be aligned with the loading bar and 'hide/show details' button below.
Please check

PR https://github.com/odk-x/services/pull/256 raised, needs updating

Reviewed on outreach-2023 branch and it looks good. I am ok to move to deployment.


Pressing enter in scientific mode opens navigation instead of displaying the result

In scientific mode, after pressing the Enter button, navigation menu opens instead of displaying the result.
Steps To Reproduce

Go to Scientific mode.
Click on C.
Enter 2+2 on keyboard.
Press Enter on keyboard.

Expected behavior
Result is displayed.
Actual behavior
Navigation menu is opened.
Device and Application Information

OS Build: 10.0.17134.0
Architecture: X64
Application Version: 10.1910.0.0
Region: en-US
Dev Version Installed: -

Requested Assignment
I'm just reporting this problem.  I don't want to fix it.

This is your friendly Microsoft Issue Bot. I've seen this issue come in and have gone to tell a human about it.

This problem also occurs in Programmer Mode.
When you use MOUSE to enter numbers and press ENTER, it will display the result correctly.
But when you use KEYBOARD to enter numbers and press ENTER, it will open the navigation menu.
Please fix it as soon as possible! It is bothering most programmers.
Thank you guys!

Thanks for the detailed bug report! Unfortunately, I am not able to reproduce the problem (i.e., navigation menu does not open when I hit ENTER). The steps to reproduce seem straightforward enough, but perhaps there is something minor that was left out that could help here?
The intended behavior is that when you enter any mode, focus moves to the display area explicitly to prevent enter from opening the navigation menu, so if the menu is opening on ENTER, that definitely would be a bug. You can visualize that focus is moving to the right place if you use the arrow keys to navigate the menu and use the enter key to select a mode:

#262 describes a similar issue with the history button, but that one is by design due to accessibility reasons.

No, nothing was left out. Did you click on C using mouse?
I visualized the focus, and it seems that the focus shifts to navigation menu after the C button label changes to CE when I start typing on keyboard.
Here are some steps:

Click on C. Use arrow keys to verify that the focus was on C, and then use arrow keys to get the focus back to C.
Enter a number using keyboard. The label will change to CE and the focus will move to navigation menu.
I see a workaround now - the problem doesn't occur when i press Esc instead of clicking on C, however, it is still very annoying.
It started happening a couple of weeks ago, I think that's when my calculator was updated to a new version but I'm not really sure.

Is there any workaround that we can reproduce the error, even we didn't have the version that mention in the Issue. My application version is 10.1905.28.0 and its seems working properly.

Not that I know of. Also, I don't think that the application version is the problem. I have a friend who also has the 10.1910.0.0 version and he can't reproduce the issue. His OS build is different though.
However, when he executed the following steps:

Click on C. Use arrow keys to verify that the focus was on C, and then use arrow keys to get the focus back to C.
Enter a number using keyboard. The label will change to CE and the focus will move to navigation menu.

the focus didn't move to the navigation menu, but it moved to the backspace button. I don't know if that counts as a workaround to reproduce the error.
The problem wouldn't occur if the focus never moved from C/CE to other buttons, so perhaps that's the solution? To force the focus to stay on C/CE, if that's feasible?

Actually, perhaps the application version is the problem, i.e. the problem never reproduces with other versions, but is not sufficient to have that application version in order to reproduce the issue. Something else is also necessary, and I don't know what.

BTW, I also use the OS version 17134.1130

BTW, I also use the OS version 17134.1130

Not that I know of. Also, I don't think that the application version is the problem. I have a friend who also has the 10.1910.0.0 version and he can't reproduce the issue. His OS build is different though.
However, when he executed the following steps:

Click on C. Use arrow keys to verify that the focus was on C, and then use arrow keys to get the focus back to C.
Enter a number using keyboard. The label will change to CE and the focus will move to navigation menu.

the focus didn't move to the navigation menu, but it moved to the backspace button. I don't know if that counts as a workaround to reproduce the error.
The problem wouldn't occur if the focus didn't move from C/CE to other buttons when typing on keyboard, so perhaps that's the solution? To force the focus to stay on C/CE, if that's feasible?

I can't repro the original bug, but I do repro focus moving to backspace. I agree that focus should stay on c/ce, which may also fix the original bug.

I can replicate this issue on a machine running Win10 1803 (10.0.17134.1069) but cannot replicate on a 1903 (10.0.18362.30) machine.  Both have the same version of the calculator.  Upgrading my users as a fix for now.

Forgive me for not understanding, is there a fix for this? I'm a user still having this exact issue in the version mentioned.

Forgive me for not understanding, is there a fix for this? I'm a user still having this exact issue in the version mentioned.

Hi, which version of Calculator are you using? This should be fixed in the newer versions (10.2003.0.0) or higher.

Forgive me for not understanding, is there a fix for this? I'm a user still having this exact issue in the version mentioned.

Hi, which version of Calculator are you using? This should be fixed in the newer versions (10.2003.0.0) or higher.

I'm still on Calculator 10.1910.0.0. Thank you for indicating it was fixed in 2003.0.0


Fix typo #2196

Sorry, fix typo in #2196.

Thanks, great work!
I think that all real problems have been solved.
Now that the behavior of rollback has been changed the following will now work.

interdependence by out/in side nested require_dependencies

https://github.com/padrino/padrino-framework/pull/2198/files#diff-e23dff4287877d1a539d30176e00f494R80
please, review for #2199

not remove constants that are newly commited in nested require_dependencies #2193

https://github.com/padrino/padrino-framework/pull/2193/files#diff-e23dff4287877d1a539d30176e00f494R69

Previously it could not be solved like #2198
FYI
With this change(rollback), I could not think of a big problem that many people would be in trouble.
I think that problems will only occur in special edge cases.
Strictly because the behavior of rollback has been changed, the following can be considered.

Incomplete Storage.rollback at hot load
Remove constant(defined klass) at hot load

Both are cases where there are a nested require_dependencies described in incomplete dependency state codes.
Writing a test is too hard/bad and it is a code that does not complete exec. In the first place, I don't think that I roll back cleanly to the state before hot loading.


Feature Proposal: Support for a tabular data format for protoset? (csv, tsv) etc.?

I think having the item protoset in a tabular format such as .csv would make it easier to edit than a json file like for example balancing items, or seeing how the stats compare and be easier for non-technical people. I know you have the "Protoset Editor" which is a tabular format, but I think users using something like Excel, Libre etc. would be easier and one less thing to maintain.
Probably still want to store it as json/dict, but be editable as csv :thinking:

I love csv, Godot supports it too (example code below)
var opened_csv_file = FileAccess.open(database_excel_sheet_path, FileAccess.READ)
var csv_row = opened_csv_file.get_line()
print (csv_row)
var current_row_index = 1
while opened_csv_file.eof_reached() == false:
	csv_row = opened_csv_file.get_line()
	if (csv_row.length() == 0):
		break

	var password_raw: String = csv_row.get_slice("|", csv_header_fields.password_index).strip_edges()

That said, I understand why this is made in JSON (different properties for each item). Personally in my use-case, all items have the same fields, so csv fits, but I recognize it doesn't for most users. To have the protoset editor support csv directly is quite a big feature request, so if this isn't planned or implemented, I suggest for your use-case of balancing, to use a JSON to CSV converter (and vice versa ofc)
Otherwise, might as well have items not as a Dictionary but create a custom class for each, with the properties (ID -> int, description -> String, icon_path -> String, and the csv properties for each item)

To have the protoset editor support csv directly is quite a big feature request

I'm not suggesting that at all, I think he built that because godot 3 didn't support JSON and I think I read he was scrapping it for v3 gloot anyway.
I think I am suggesting being able to have the protoset in CSV or JSON (as I think there are pros and cons of each filetype). I don't know what the implementation details would be...

I suggest for your use-case of balancing, to use a JSON to CSV converter (and vice versa ofc)

Yeah, possibly I read that is a thing. However it might be annoying constantly having to convert between file types.
I potentially should have opened this as a discussion :shrug:


bypass-checks fails when cors is needed

https://github.com/sindresorhus/eslint-plugin-unicorn/pull/654 (or any pull there)
Access to fetch at 'https://codecov.io/gh/sindresorhus/eslint-plugin-unicorn/compare/b2838fdff7ecdc71008e049c9b1ad57da11aa224...2abde3bbf93d00305d0e85701c4b7be383fa9ed7' from origin 'https://github.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

refined-github.js:4104 ❌ Refined GitHub → bypass-checks → TypeError: Failed to fetch

Maybe it just needs this?
set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

We are not talking about that rule, right?

Null :)

no-cors

fetchDom does not take another parameter

It should just be part of it: if url.origin !== location.origin, add no-cors

It should just be part of it: if url.origin !== location.origin, add no-cors

Of where? Fetchdom?


using the HAPROXY_SSL_CERT environmental variable

Using mesosphere community edition.
Started up the marathon-lb via the universe install.  Enabled HTTPS and then set the HAPROXY_SSL_CERT label on the application and redeployed it.
I am using a combined SSL certificate file, then pasting in the HAPROXY_SSL_CERT variable.  When the container starts, it says it cannot load the /etc/ssl/cert.pem file.  Per the docs, its supposed to import/create the file from that key.  If i remove the key, the container starts no issue, but with a self signed cert.  So i would think its trying to create the file, but the only error is the one saying it cant load it.
stdout:
06:11:32,056 marathon_lb: writing temp file /tmp/tmp21nn7h7p that will replace /marathon-lb/domain2backend.map
2017-02-23 06:11:32,056 marathon_lb: writing temp file /tmp/tmpd5qqugly that will replace /marathon-lb/app2backend.map
2017-02-23 06:11:32,056 marathon_lb: writing temp file /tmp/tmp4j5oxgx1 that will replace /marathon-lb/haproxy.cfg
2017-02-23 06:11:32,057 marathon_lb: checking config with command: ['haproxy', '-f', '/tmp/tmp4j5oxgx1', '-c']
[ALERT] 053/061132 (156) : parsing [/tmp/tmp4j5oxgx1:70] : 'bind *:443' : unable to load SSL private key from PEM file '/etc/ssl/cert.pem'.
[ALERT] 053/061132 (156) : Error(s) found in configuration file : /tmp/tmp4j5oxgx1
[ALERT] 053/061132 (156) : Proxy 'marathon_https_in': no SSL certificate specified for bind '*:443' at [/tmp/tmp4j5oxgx1:70] (use 'crt').
[ALERT] 053/061132 (156) : Fatal errors found in configuration.
2017-02-23 06:11:32,066 marathon_lb: haproxy returned non-zero when checking config
2017-02-23 06:11:32,066 marathon_lb: skipping reload: config/map not valid
2017-02-23 06:11:32,066 marathon_lb: updating tasks finished, took 0.054769277572631836 seconds
2017-02-23 06:11:36,963 marathon_lb: received event of type event_stream_detached

Application json(removed cert cipher text):
{
  "id": "/marathon-lb",
  "cmd": null,
  "cpus": 6,
  "mem": 6000,
  "disk": 0,
  "instances": 2,
  "acceptedResourceRoles": [
    "slave_public"
  ],
  "container": {
    "type": "DOCKER",
    "volumes": [],
    "docker": {
      "image": "mesosphere/marathon-lb:v1.5.0",
      "network": "HOST",
      "portMappings": null,
      "privileged": true,
      "parameters": [],
      "forcePullImage": false
    }
  },
  "env": {
    "HAPROXY_GLOBAL_DEFAULT_OPTIONS": "redispatch,http-server-close,dontlognull",
    "HAPROXY_SYSCTL_PARAMS": "net.ipv4.tcp_tw_reuse=1 net.ipv4.tcp_fin_timeout=30 net.ipv4.tcp_max_syn_backlog=10240 net.ipv4.tcp_max_tw_buckets=400000 net.ipv4.tcp_max_orphans=60000 net.core.somaxconn=10000",
    "HAPROXY_SSL_CERT": "-----BEGIN PRIVATE KEY----- -----END PRIVATE KEY----- -----BEGIN CERTIFICATE-----  -----END CERTIFICATE-----"
  },
  "healthChecks": [
    {
      "path": "/_haproxy_health_check",
      "protocol": "HTTP",
      "portIndex": 2,
      "gracePeriodSeconds": 60,
      "intervalSeconds": 5,
      "timeoutSeconds": 2,
      "maxConsecutiveFailures": 2,
      "ignoreHttp1xx": false
    }
  ],
  "labels": {
    "DCOS_PACKAGE_RELEASE": "16",
    "DCOS_PACKAGE_SOURCE": "https://universe.mesosphere.com/repo",
    "DCOS_PACKAGE_METADATA": "eyJwYWNrYWdpbmdWZXJzaW9uIjoiMi4wIiwibmFtZSI6Im1hcmF0aG9uLWxiIiwidmVyc2lvbiI6IjEuNS4wIiwibWFpbnRhaW5lciI6InN1cHBvcnRAbWVzb3NwaGVyZS5pbyIsImRlc2NyaXB0aW9uIjoiSEFQcm94eSBjb25maWd1cmVkIHVzaW5nIE1hcmF0aG9uIHN0YXRlIiwidGFncyI6WyJsb2FkYmFsYW5jZXIiLCJzZXJ2aWNlLWRpc2NvdmVyeSIsInJldmVyc2UtcHJveHkiLCJwcm94eSIsImhhcHJveHkiXSwic2VsZWN0ZWQiOmZhbHNlLCJzY20iOiJodHRwczovL2dpdGh1Yi5jb20vbWVzb3NwaGVyZS9tYXJhdGhvbi1sYiIsImZyYW1ld29yayI6ZmFsc2UsInByZUluc3RhbGxOb3RlcyI6IldlIHJlY29tbWVuZCBhdCBsZWFzdCAyIENQVXMgYW5kIDFHaUIgb2YgUkFNIGZvciBlYWNoIE1hcmF0aG9uLUxCIGluc3RhbmNlLiBcblxuKk5PVEUqOiBgYGBFbnRlcnByaXNlIEVkaXRpb25gYGAgREMvT1MgcmVxdWlyZXMgc2V0dGluZyB1cCB0aGUgU2VydmljZSBBY2NvdW50IGluIGFsbCBzZWN1cml0eSBtb2Rlcy4gXG5Gb2xsb3cgdGhlc2UgaW5zdHJ1Y3Rpb25zIHRvIHNldHVwIGEgU2VydmljZSBBY2NvdW50OiBodHRwczovL2RvY3MubWVzb3NwaGVyZS5jb20vMS44L2FkbWluaXN0cmF0aW9uL2lkLWFuZC1hY2Nlc3MtbWd0L3NlcnZpY2UtYXV0aC9tbGItYXV0aC8iLCJwb3N0SW5zdGFsbE5vdGVzIjoiTWFyYXRob24tbGIgREMvT1MgU2VydmljZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkIVxuU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tZXNvc3BoZXJlL21hcmF0aG9uLWxiIGZvciBkb2N1bWVudGF0aW9uLiIsInBvc3RVbmluc3RhbGxOb3RlcyI6Ik1hcmF0aG9uLWxiIERDL09TIFNlcnZpY2UgaGFzIGJlZW4gdW5pbnN0YWxsZWQgYW5kIHdpbGwgbm8gbG9uZ2VyIHJ1bi4iLCJsaWNlbnNlcyI6W3sibmFtZSI6IkFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL21lc29zcGhlcmUvbWFyYXRob24vYmxvYi9tYXN0ZXIvTElDRU5TRSJ9LHsibmFtZSI6IkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiIsInVybCI6Imh0dHA6Ly93d3cuaGFwcm94eS5vcmcvZG93bmxvYWQvMS42L2RvYy9MSUNFTlNFIn1dLCJpbWFnZXMiOnsiaWNvbi1zbWFsbCI6Imh0dHBzOi8vZG93bmxvYWRzLm1lc29zcGhlcmUuY29tL3VuaXZlcnNlL2Fzc2V0cy9pY29uLXNlcnZpY2UtbWFyYXRob25sYi1zbWFsbC5wbmciLCJpY29uLW1lZGl1bSI6Imh0dHBzOi8vZG93bmxvYWRzLm1lc29zcGhlcmUuY29tL3VuaXZlcnNlL2Fzc2V0cy9pY29uLXNlcnZpY2UtbWFyYXRob25sYi1tZWRpdW0ucG5nIiwiaWNvbi1sYXJnZSI6Imh0dHBzOi8vZG93bmxvYWRzLm1lc29zcGhlcmUuY29tL3VuaXZlcnNlL2Fzc2V0cy9pY29uLXNlcnZpY2UtbWFyYXRob25sYi1sYXJnZS5wbmcifX0=",
    "DCOS_PACKAGE_REGISTRY_VERSION": "2.0",
    "DCOS_PACKAGE_VERSION": "1.5.0",
    "DCOS_PACKAGE_NAME": "marathon-lb",
    "DCOS_PACKAGE_IS_FRAMEWORK": "false"
  },
  "portDefinitions": [
    {
      "port": 80,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 443,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 9090,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 9091,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10000,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10001,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10002,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10003,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10004,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10005,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10006,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10007,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10008,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10009,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10010,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10011,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10012,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10013,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10014,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10015,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10016,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10017,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10018,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10019,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10020,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10021,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10022,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10023,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10024,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10025,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10026,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10027,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10028,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10029,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10030,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10031,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10032,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10033,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10034,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10035,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10036,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10037,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10038,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10039,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10040,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10041,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10042,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10043,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10044,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10045,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10046,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10047,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10048,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10049,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10050,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10051,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10052,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10053,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10054,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10055,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10056,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10057,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10058,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10059,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10060,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10061,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10062,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10063,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10064,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10065,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10066,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10067,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10068,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10069,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10070,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10071,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10072,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10073,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10074,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10075,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10076,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10077,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10078,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10079,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10080,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10081,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10082,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10083,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10084,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10085,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10086,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10087,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10088,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10089,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10090,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10091,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10092,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10093,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10094,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10095,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10096,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10097,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10098,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10099,
      "protocol": "tcp",
      "labels": {}
    },
    {
      "port": 10100,
      "protocol": "tcp",
      "labels": {}
    }
  ],
  "args": [
    "sse",
    "-m",
    "http://marathon.mesos:8080",
    "--health-check",
    "--haproxy-map",
    "--group",
    "external"
  ],
  "upgradeStrategy": {
    "minimumHealthCapacity": 0.5,
    "maximumOverCapacity": 0.2
  },
  "requirePorts": true
}

I can't see the cert (obv.), but I'm guessing it's not formatted correctly since there's no newlines (\n) in there.

Do i need to add \n to various areas of the cert?
Pretend this is the cert, where would i add those?  ( i only ask because we have tried, but might be missing the mark ):
-----BEGIN PRIVATE KEY-----
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJjjjjjjjjjjjjjjjjjjjjJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasssssssssssssssssssssssssssssssssssssssssssssssdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddfffffffffffffffffffffffffffffffffffffffffffffffffffjjjjjjjjjjjjjjjjjjjjjKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFfffffffffffffffffffssssssssssssssssssssssssssssssssssssssdddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeee
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJjjjjjjjjjjjjjjjjjjjjJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasssssssssssssssssssssssssssssssssssssssssssssssdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddfffffffffffffffffffffffffffffffffffffffffffffffffffjjjjjjjjjjjjjjjjjjjjjKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFfffffffffffffffffffssssssssssssssssssssssssssssssssssssssdddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeee
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJjjjjjjjjjjjjjjjjjjjjJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasssssssssssssssssssssssssssssssssssssssssssssssdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddfffffffffffffffffffffffffffffffffffffffffffffffffffjjjjjjjjjjjjjjjjjjjjjKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFfffffffffffffffffffssssssssssssssssssssssssssssssssssssssdddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeee-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJjjjjjjjjjjjjjjjjjjjjJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasssssssssssssssssssssssssssssssssssssssssssssssdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddfffffffffffffffffffffffffffffffffffffffffffffffffffjjjjjjjjjjjjjjjjjjjjjKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFfffffffffffffffffffssssssssssssssssssssssssssssssssssssssdddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeee
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJjjjjjjjjjjjjjjjjjjjjJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasssssssssssssssssssssssssssssssssssssssssssssssdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddfffffffffffffffffffffffffffffffffffffffffffffffffffjjjjjjjjjjjjjjjjjjjjjKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFfffffffffffffffffffssssssssssssssssssssssssssssssssssssssdddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeee
-----END CERTIFICATE-----

also do equal signs pose any issue?
Thanks!

Try using GNU sed:
$ sed ':a;N;$!ba;s/\n/\\n/g' key.pem
...

That worked, Thank you VERY much!

@brndnmtthws Add it in documentation in a TIP session.


revisit current root Error logic

The current rama::error code was heavily inspired from Axum if I remember correctly.
However, it is a bit shortcoming and converting into or from it is not always as easy.
We might need to go a bit more complex here, while still keeping it essentially as easy as possible.
A re-study of anyhow and friends might help here.

The first approach was to more or less follow the approach of anyhow, minus the backtracing. This can be seen in https://github.com/plabayo/rama/pull/156.
However... This is a mess, very invasive PR and was still pretty much as awkward, if not more...
It could have been see as a lot of wasted hours, except that I did learn from it:

the awkward feeling comes from having an Error that is really not an std::error::Error.

this is fine for anyhow as its purpose is to be used as an easy to use high level ib
it is not fine for frameworks such as rama that operate on lower levels and higher levels alike,
because as soon as you also need to interact with third party crates you might need to easily be seen as a regular std error (boxed or not)

combine this with the fact that you have giant stacks of generics, like rama has, and you can get very crazy loco errors due to something as inocent like From<E>... Yihaa, Damn

In https://github.com/plabayo/rama/pull/157 I'm going to implement tonight a new approach based on the original code, combined with the lessons learned from the mess of today:

I really do not need an opaque Error type, and it does more harm then good, due to its awkwardness that comes from limitations because of auto trait impelmentations induced with From<T> for T...

This can be used to hide magic, or extra data like backtrace (e.g. what anyhow does)
we however do not need it

Instead we can just work with BoxError, and also as extra give a Result<T, BoxError> and Result::<T, BoxError>::Ok
We can then also provide ErrorExt with methods: ::context, ::with_context, ::with_backtrace, ::backtrace, and ::chain

::backtrace will will work using the backtrace crate, and we should also support custom errors that can expose backtrace... Anyway, all without weird magic

We can also provide error! macro that easily can work with Into<Error> expr, but also strings and template strings, easier to use, but all just exposed as BoxError in the result

The end result will be that everything will just be a BoxError, which is not awkward, with all utilities added around it, without having to have an awkward wrapper type that is both an error and not an error. And this way we improved the main situation without getting into the mess of earlier today.
Fin.


Add a management command for running get_company_updates manually

Description of change
A management command datahub/dnb_api/management/commands/get_latest_dnb_company_updates.py was added which allows for manual runs of the get_company_updates celery task.
Checklist

[X] Has a new newsfragment been created? Check changelog/README.md for instructions
[ ] Do any added or updated endpoints appear in the API documentation? See docs/Maintaining the API documentation.md for more details
[ ] Have any relevant search models been updated?
[ ] Have any relevant fixtures (fixtures/test_data.yaml) been updated?
[ ] Have any relevant select-/prefetch-related field lists in the views and search apps been updated?
[ ] Has the admin site been updated (for new models, fields etc.)?
[ ] Has the README been updated (if needed)?

Some minor comments (none of which are too important), but I am getting an error running ./manage.py help get_latest_dnb_company_updates: TypeError: unsupported operand type(s) for %: 'tuple' and 'dict'

Good spot - one of my help values is accidentally a tuple.


scroll-up-bar.min.js on a CDN?

is scroll-up-bar.min.js available or is going to be available on a CDN like https://cdnjs.com ? it would be cool ;)
thanks for the great work here! ;)

sure.
https://cdn.rawgit.com/eduardomb/scroll-up-bar/0.3.0/dist/scroll-up-bar.min.js

lovely!


Updaters cannot login to Dynect

How to use gem with such account then?
[5] pry(main)> dyn = Dyn::Traffic::Client.new("customent", 'name', 'passwd')
Dyn::Exceptions::RequestFailed: Request failed: ERROR ILLEGAL_OPERATION BLL - login: Updaters cannot login to Dynect
INFO  BLL - login: Login failed

This is FAD ... the "users" of type update and only permitted to issue dynamic updates they do not have login permissions.
This is not an issue with this gem, nor with the API. It is inherent to the platform.

How do I perform dynamic updates then?

There is documentation here:
https://help.dyn.com/managing-dynamic-updates/
Including how to write your own remote access api client. https://help.dyn.com/remote-access-api/
Dynamic updates are done through the remote access api, and not through the dynect traffic api.


Error variable in ValidationResult enumeration

As mentioned in #4 here is the implementation.

Current coverage is 100% (diff: 100%)

Merging #5 into develop will not change coverage

@@           develop    #5   diff @@
====================================
  Files            6     6
  Lines           58    62     +4
  Methods          0     0
  Messages         0     0
  Branches         0     0
====================================
+ Hits            58    62     +4
  Misses           0     0
  Partials         0     0

Powered by Codecov. Last update df88dfc...9616d8d

Thank you for the contribution! Sorry for the late response!


[Change Request] table 37 "Sales Line" - procedure GetFAPostingGroup

Hello, can you please change the lokal procedure GetFAPostingGroup to global?
procedure GetFAPostingGroup()
    var
        LocalGLAcc: Record "G/L Account";
        FASetup: Record "FA Setup";
        FAPostingGr: Record "FA Posting Group";
        FADeprBook: Record "FA Depreciation Book";
        ShouldExit: Boolean;
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeGetFAPostingGroup(Rec, IsHandled);
        if IsHandled then
            exit;

        if (Type <> Type::"Fixed Asset") or ("No." = '') then
            exit;

        if "Depreciation Book Code" = '' then begin
            FASetup.Get();
            "Depreciation Book Code" := FASetup."Default Depr. Book";
            if not FADeprBook.Get("No.", "Depreciation Book Code") then
                "Depreciation Book Code" := '';

            ShouldExit := "Depreciation Book Code" = '';
            OnGetGetFAPostingGroupOnBeforeExit(Rec, ShouldExit);
            if ShouldExit then
                exit;
        end;

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.
Build ID: .


Remove app version from search

Task/Issue URL: https://app.asana.com/0/361428290920652/649057775699177
Description:
Remove tappv parameter from app searches
Steps to test this PR:

Run the app and watch network traffic
Submit a search
Ensure the tappv parameter is no longer on our urls

Internal references:
Software Engineering Expectations
Technical Design Template

Thanks for the review @brindy!


Inline Lity (pop-up) and Youtube Video with Specific Start Time

TLDR: How do you make youtube video URLs with specific start time to work on pop-up/inline Lity?
Portion of my code:

<a href="<?php esc_url($video_url); ?>" data-lity="">IMG
Sample $video_url values that worked:
https://youtu.be/A_WzVVndUCY
https://www.youtube.com/embed/A_WzVVndUCY
https://www.youtube.com/watch?v=A_WzVVndUCY?autoplay=0&rel=0&showinfo=0&autohide=1&modestbranding=1
Sample $video_url values that did NOT work:
https://youtu.be/A_WzVVndUCY?t=181
https://youtu.be/A_WzVVndUCY?start=181
https://www.youtube.com/embed/A_WzVVndUCY?start=181
https://www.youtube.com/embed/A_WzVVndUCY?start=181;rel=0&showinfo=0
https://www.youtube.com/embed/A_WzVVndUCY?start=181&end=201;rel=0&showinfo=0
https://youtu.be/A_WzVVndUCY?t=181&autoplay=0&rel=0&showinfo=0&autohide=1&modestbranding=1
The ones that did not work only worked when I entered them in the browser address bar. Just to make sure, I did a var_dump to check the value of the variable ($video_url).
This is the image of the video with a var_dump expression before it:

This is the pop-up/inline Lity but it doesn't start at the specified start time:

Was this ever fixed? Running into same issue now.


[Key Vault] Address architect feedback

Description
This addresses another round of feedback for azure-keyvault-keys, which all has to do with type hints.
All SDK Contribution checklist:

[x] The pull request does not introduce [breaking changes]
[x] CHANGELOG is updated for new features, bug fixes or other significant changes.
[x] I have read the contribution guidelines.

General Guidelines and Best Practices

[x] Title of the pull request is clear and informative.
[x] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, see this page.

Testing Guidelines

N/A Pull request includes test coverage for the included changes.

API changes have been detected in azure-keyvault-keys. You can review API changes here


Deleting objects in reparationContext

Hi,
I am using
- (BOOL)persistentStoreEnsemble:(CDEPersistentStoreEnsemble *)ensemble shouldSaveMergedChangesInManagedObjectContext:(NSManagedObjectContext *)savingContext reparationManagedObjectContext:(NSManagedObjectContext *)reparationContext

to de-duplicate and merge objects before they make it to Core Data store.
Merge looks as following (sourceObject is a duplicate object, and mergedObject is the object that I will retain in database after de-duplication):
I find all objects in database matching certain value, e.g. Category with name Groceries. Then I choose the object that I would like to keep in database and start merging other objects with it, after merge completed, I delete all duplicates.
NSManagedObject *retainedObject = [self retainedObjectFromDuplicateObjects:similarObjects];

NSParameterAssert(retainedObject);

// remove retained object from duplicates
NSMutableArray *duplicateObjects = [similarObjects mutableCopy];

[duplicateObjects removeObject:retainedObject];

[duplicateObjects enumerateObjectsUsingBlock:^(NSManagedObject *duplicateObject, __unused NSUInteger idx, __unused BOOL *stop) {
    [mergeResolver mergeObject:duplicateObject intoObject:retainedObject];
}];

[duplicateObjects MR_deleteEntitiesInContext:reparationContext];

[entityDescription.attributesByName enumerateKeysAndObjectsUsingBlock:^(NSString *key, __unused NSAttributeDescription *attr, __unused BOOL *stop) {
    id oldValue = [mergedObject valueForKey:key];
    id newValue = [sourceObject valueForKey:key];

    // because CoreData produces change even when we set the same value
    // it's a good practice to at least check equality with isEqual:
    // before using setter
    if(![oldValue isEqual:newValue]) {
        [mergedObject setValue:newValue forKey:key];
    }
}];

[entityDescription.relationshipsByName enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSRelationshipDescription *relation, __unused BOOL *stop) {
    if(relation.isToMany) { // to-many
        if(relation.isOrdered) {
            // ... not used
        } else {
            NSSet *oldRelatedObjects = [mergedObject valueForKey:key];
            NSSet *newRelatedObjects = [sourceObject valueForKey:key];
            NSMutableSet *combinedRelatedObjects = [[NSMutableSet alloc] init];

            [combinedRelatedObjects unionSet:oldRelatedObjects];
            [combinedRelatedObjects unionSet:newRelatedObjects];

            // reset relationship to avoid any delete rules to trigger
            [sourceObject setValue:[NSSet set] forKey:key];

            if(![oldRelatedObjects isEqualToSet:combinedRelatedObjects]) {
                [mergedObject setValue:[combinedRelatedObjects copy] forKey:key];
            }
        }
    } else { // to-one
        NSManagedObject *oldRelatedObject = [mergedObject valueForKey:key];
        NSManagedObject *newRelatedObject = [sourceObject valueForKey:key];

        // reset relationship to avoid any delete rules to trigger
        [sourceObject setValue:nil forKey:key];

        if(oldRelatedObject != newRelatedObject) {
            [mergedObject setValue:newRelatedObject forKey:key];
        }
    }
}];

All of it happens in reparation context using performBlockAndWait.
However what happens is that all relationships in duplicated objects are being deleted too (as a part CASCADE deletion rule I suppose), even though I copy all of relationships over to the single object (mergedObject) that I would like to keep in database after de-duplication and nullify the relationship on duplicates.

I have a feeling that Ensembles picks up deletions but does not save changes and so instead all of objects go through revision as being deleted.

Is it possible you have cascade rules that are causing the deletions?

@drewmccormack I have CASCADE deletion rule set for optional to-many relationship.
Category <-> Expenses.
However when I merge Category objects together, I move all of Expenses over to the single Category and set empty set on relationship in duplicate Categories. Am I being naive that setting empty NSSet on relationship doesn't cause delete rules to fire?

It does not seem that processPendingChanges does anything...
Before FRC receives "delete" event, I see the following in console:
CoreData: warning: An NSManagedObjectContext delegate overrode fault handling behavior to silently delete the object with ID '0xd000000000240002 x-coredata://97993C27-2D56-4BF2-9B9F-269D9A3C4402/Expense/p9' and substitute nil/0 for all property values instead of throwing.
Looking at updatedObjects, deletedObjects of reparationContext, everything is alright and my merge updated relationships properly. Moreover inverse relationships are correct too. "DidSave" from Ensembles returns notification with proper "deleted" and "updated" keys. Something tells me I access stale object somewhere... :-)

Are you accidentally taking objects in the savingContext and using them in the reparationContext? You can take the objectIDs, but can’t use the objects directly. You would have to use objectWithID: to get the objects again in the reparationContext.
If you are accidentally accessing an object in the wrong place, the newish Core Data debug launch arguments may find it for you.
Drew

On 05 Jul 2016, at 21:44, Andrei Mihailov<EMAIL_ADDRESS>wrote:
It does not seem that processPendingChanges does anything...
Before FRC receives "delete" event, I see the following in console:
CoreData: warning: An NSManagedObjectContext delegate overrode fault handling behavior to silently delete the object with ID '0xd000000000240002 x-coredata://97993C27-2D56-4BF2-9B9F-269D9A3C4402/Expense/p9' and substitute nil/0 for all property values instead of throwing.
Looking at updatedObjects, deletedObjects of reparationContext, everything is alright and my merge updated relationships properly. Moreover inverse relationships are correct too. "DidSave" from Ensembles returns notification with proper "deleted" and "updated" keys. Something tells me I access stale object somewhere... :-)
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub https://github.com/drewmccormack/ensembles/issues/235#issuecomment-230581832, or mute the thread https://github.com/notifications/unsubscribe/AAEuAEhAi1Aajn2QvBgn3uvzP3yQkUZ3ks5qSrQbgaJpZM4JFJ3q.

I use objectIDs only, It could be I picked up object ID that was removed during reparation. All notifications from ensembles seem fine, however after merge sometimes objects remain in strange state, such as category on one of repaired expenses is suddenly nil (required relationship...).
Out of curiosity I ran:
po [object hasPersistentChangedValues]
NO

po [object validateForUpdate:nil]
NO

But all I do is merge changes from ensemble:
- (void)persistentStoreEnsemble:(CDEPersistentStoreEnsemble *)ensemble didSaveMergeChangesWithNotification:(NSNotification *)notification {
    if(ensemble != self.ensemble) {
        return;
    }

    [self.savingContext performBlockAndWait:^{
        [self.savingContext mergeChangesFromContextDidSaveNotification:notification];
    }];

    [self.context performBlockAndWait:^{
        [self.context mergeChangesFromContextDidSaveNotification:notification];
    }];

I don't know if that's coincidence, but moving deduplication in -didSaveMergeChangesWithNotification: did the trick for me. Leaves me wonder...

I wouldn't be surprises if the problem is the background saving context. I pulled that out of my app because I saw some very odd behavior at times.
Deduping in the did-save or completion block should work fine.

Thanks for trying to help me.
My last guess is that I observe NSManagedObjectContextDidSaveNotification/WillSaveNotification on root context quite a lot. I may be wrong but it looks to me that I merge changes while Ensembles is repairing stuff and then I end up with unsaved root context, which when saved, fires deletion of objects that are kind of stuck in some state when they are not really valid for save and have been changed in persistent store but never refreshed because of wrong merge.
That's why when I end up with empty category on my model and if I restart the app, everything is fine. I am not sure what alternative I can use to catch up with ensembles. The book mentions CDEMonitoredManagedObjectContextXXXSaveNotifications but they don't contain information regarding changes which I need to do the proper update.
I pulled out all the pieces that were processing objects upon didSave and things are back to normal. However, I still do merge things in didSave therefore I have to get rid of those too and replace them with equivalent CDE notifications...

Ah, right, yes. What I do is just check if the saving context is one I know about, and otherwise return. For example, I check if the PSC is the one on my main context, and if not, I do not merge the changes.

I had a genius piece of code... apparently merging everything into saving context. I have no idea how all of that worked before.
NSManagedObjectContext *context = [stack savingContext];
[context MR_observeContextDidSave:context.parentContext];

Thanks for all your help! Such a shame though that it turned out to be my own mistake :/ Ensembles still work!


You should never create an App object yourself

https://github.com/JoaquimLey/bus-eta/blob/26ce1a7f4b2dff12c6efa2292531035e70bfc4ae/app/src/main/java/com/joaquimley/buseta/App.java#L22

This is the case where the app instance is null.

Try to use the App you instantiate... and you will see what happens! Study instead to be stubborn.

Why are you being so aggressive @ech0s7r? Have you read the whole app class? Have you noticed that I'm binding the sIntance on the onCreate()?
https://github.com/JoaquimLey/bus-eta/blob/26ce1a7f4b2dff12c6efa2292531035e70bfc4ae/app/src/main/java/com/joaquimley/buseta/App.java#L17
So the case where the instance is null is a very edgy one but should be handled nonetheless.
So don't be so condescending, but thanks for your input 💪.

Please, as already suggested, test your App when sInstance is null and see what happens. The getApplicationContext() will return of course null. It's totally wrong to instantiate the application class object as you did.
Please read documentation about Application class.


[#1675][0.9] fix(test): Fix tests which may be flaky on different machines…

… (#1676)
What changes were proposed in this pull request?
Fix tests which may be flaky on different machines.
Why are the changes needed?
Fix: https://github.com/apache/incubator-uniffle/issues/1675.
Does this PR introduce any user-facing change?
No.
How was this patch tested?
Unnecessary.

What changes were proposed in this pull request?
(Please outline the changes and how this PR fixes the issue.)
Why are the changes needed?
(Please clarify why the changes are needed. For instance,

If you propose a new API, clarify the use case for a new API.
If you fix a bug, describe the bug.)

Fix: # (issue)
Does this PR introduce any user-facing change?
(Please list the user-facing changes introduced by your change, including

Change in user-facing APIs.
Addition or removal of property keys.)

No.
How was this patch tested?
(Please test your changes, and provide instructions on how to test it:

If you add a feature or fix a bug, add a test to cover your changes.
If you fix a flaky test, repeat it for many times to prove it works.)

You don't need to raise a pull request. You can commit directly.

Is this a good practise?

You don't need to raise a pull request. You can commit directly.

Is this a good practise?

Spark uses this practice. If there is conflicts, let the contributor raise a pull request to the branch.

You don't need to raise a pull request. You can commit directly.

Is this a good practise?

Spark uses this practice. If there are conflicts, let the contributor raises a pull request to the branch.

Got it.