Days and Months names are translated all lowercase in French

First I am surprised that the code to display Formated DateTimes is duplicated between
Orchard.Localization\Providers\LocalizationDateTimeFormatProvider.cs
and
Orchard.Framework\Localization\Services\CultureDateTimeFormatProvider.cs
????
then looking to the code we see that English renders a Capitalized first letter, but loading the french translation ( 1 month old), I get all the days and months as lower case.
public string[] DayNames {
get {
return T("Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday").Text.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries);
}
}
public string[] MonthNames {
get {
return T("January, February, March, April, May, June, July, August, September, October, November, December").Text.Split(new string[] {", "}, StringSplitOptions.RemoveEmptyEntries);
}
}
I will hack my file...no time to go to the full translation engine.

Ok, when trying to hack the Fr-fr file I found that the Uppercase are here, so ????
Then I discovered this
[OrchardFeature("Orchard.Localization.DateTimeFormat")]
[OrchardSuppressDependency("Orchard.Localization.Services.CultureDateTimeFormatProvider")]
related to the 2 implementations of date formating previous remark.
And it is very strange and I don't understand the reason why month and day names and should be translated differently when we enable or not the Localisation feature ?????
In my case it is not enabled because I don't need different languages as French and my site is set to use Fr-fr as default culture.
So code goes for using the .Net implementation (normally the best ?), Could the bug be inside Windows 10 ??? ...
#Should I change my Issue title for ' Their should be only one code for translating names of days and months ????

The French translations of Days and Months names are not in lower case in Orchard.Localization\Providers\LocalizationDateTimeFormatProvider.cs :
https://crowdin.com/translate/orchard-cms/325/enus-fr#q=LocalizationDateTimeFormatProvider
The translations from CultureDateTimeFormatProvider are missing because it comes from variables that are in System.Globalization.DateTimeFormatInfo (ex : DateTimeFormat.MonthNames) and the tool can not detect it has to be translated (cc @BenedekFarkas )
And in the end, it seems to be a little more complex because some shapes that display Datetimes seem to use IDateLocalizationServices and IDateFormatter implemented by @DanielStolt in which Date formats are deducted and I don't know how they can be translated.

Antoine,
It is no so complicated. It has been complicated.
Thanks but the problem is : why 2 translations systems for Months and Days names.
It should not change when enabling or not the localization features: if when not enabled orchard  translates something, it should provide the same result when enabled ? It seems evident, isn't it ?

Another point, isn't this another bug, why is it not publisheddateTimeUtc which ise rendered ??? What is the usage of this date if never used ???
    [Shape]
    public IHtmlString PublishedState(dynamic Display, DateTime createdDateTimeUtc, DateTime? publisheddateTimeUtc) {
        if (!publisheddateTimeUtc.HasValue) {
            return T("Draft");
        }

        return Display.DateTime(DateTimeUtc: createdDateTimeUtc);
    }

The feature Orchard.Localization.DateTimeFormat should normally not be enabled at all. The only purpose of this feature is when you want to do translation (PO) based localization of the date/time formats, instead of relying on System.Globalization. But I think in most cases this is not necessary, so you should leave the feature disabled, which will instead use the normal CultureDateTimeFormatProvider implementation.

This should be documented and It should return the same results as the 'normal CultureDateTimeFormatProvider ' when enabled.

Many things in Orchard should be documented. :) Feel free to document it and submit a PR.
Since it's a different implementation for a different purpose it should not always return the same results (otherwise what would be the point?). You should only need the feature when you actually want it to return something different. It is up to the translation files what will be returned.
If the current translation file for French is wrong, then I agree that we should fix it. I'm actually not sure where they are stored though..?

Orchard committe should engage a long term action on doc.
Concerning my pb, I think that Microsoft is providing a bad solution. In french and spanish and certainly other languages they decided that these languages don't use upper case first letter for day and month name. Since the origin of the company. Si the English version display Monday and the French lundi. They only return lowercase strings. They have only one call which bring back the 'Microsoft decided official version'. It Is vert limited considering languages as french and spanish.
We more often use dates with upper char in first place for days and months in french.
It would have been easier to adopt the same rules as in English because converting a whole formatted string to lowercase is easier.
Orchard should fox this pb either using your solution either providing 2 kind of api for names and adapted core shapes.
Envoyé à partir de mon sanyo phc 25

De : Daniel<EMAIL_ADDRESS>Envoyé : 12/01/2016 19:29
À<EMAIL_ADDRESS>Cc<EMAIL_ADDRESS>Objet : Re: [Orchard] Days and Months names are translated all lowercase in French (#6275)
Many things in Orchard should be documented. :) Feel free to document it and submit a PR.
Since it's a different implementation for a different purpose it should not always return the same results (otherwise what would be the point?). You should only need the feature when you actually want it to return something different. It is up to the translation files what will be returned.
If the current translation file for French is wrong, then I agree that we should fix it. I'm actually not sure where they are stored though..?

Reply to this email directly or view it on GitHub:
https://github.com/OrchardCMS/Orchard/issues/6275#issuecomment-171003419

The rule in French is lowercase for days of the week and month names. Look it up.

I don't believe the .NET Framework implementation is wrong at all, I am pretty sure lowercase names is the official standard for French, but then again I am not French so I have less authority I suppose.
Regardless of that - Orchard's deliberate goal in the area is:

Use the .NET Framework localizations of date/time formats and names by default.
If anybody wants different translations, they can enable the Orchard.Localization.DateTimeFormat feature and provide their own PO file.
Or they can substitute their own implementation and return whatever formats and names they want.

I don't believe Orchard should be changed in this regard. I think this is the absolute best strategy to use, and covers the absolute majority of cases.
In your case, you are free to use either of the two mechanisms to override the default behavior.

Example on my website where the format is wrong while the culture is fr-FR :
http://antoinegriffard.com
"jeudi, octobre 8, 2015" should be "jeudi 8 octobre 2015"
Because the long date pattern in French is :  "dddd d MMMM yyyy" not "dddd, MMMM dd, yyyy"
see https://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.longdatepattern(v=vs.110).aspx

@agriffard do you have the Orchard.Localization.DateTimeFormat enabled?

@Bertrand: Which french grammar rule are you invoking, from which century. French owns hundred rules and is in permanent change since 1990. If Microsoft was aware of all this the Word Spellchecker would not be so catastrophic.
And we are not interested here in bringing perfect grammar rules, but fact is that someone would prefer to have french dates displayed with capitalized first letter of Months and days whatever the order of all the formatted date string.

I'm aware of the evolution of the language, thank you very much, but I haven't found a single source claiming that the rule is to capitalize. It doesn't matter anyways as Daniel has given you ways to implement your deviation from the rule.

@DanielStolt The "Date/Time Format Translation" feature was enabled but even if I disable it, the format is still incorrect. Same with "Localization" feature

@Bertrand : Deviation of the rule, you 're funny :)

@agriffard In that case the format string provided by `System.Globalization.DateTimeFormatInfo" is not what you want. There's not much we can (or should) do about that in Orchard core?

@agriffard I checked and there must be something wrong. The LongDatePattern returned by System.Globalization.DateTimeFormatInfo for "fr-FR" is dddd d MMMM yyyy, so if you disable the feature Orchard.Localization.DateTimeFormat this is the format you should be seeing.
Can you see anywhere in the code path where something might be overriding this?

@agriffard Here is what I see on fresh site if I change to "fr-FR" culture:

So the only things I can think of are either you did not really disable the feature, or you have some other custom code in your site somewhere that overrides the formatting, or you are running on a really old version of Orchard.


Copy/paste not working across workflows

Describe the Bug with repro steps

copy an action from a workflow
try to paste it in another workflow
The paste works, but only once..
when you try copying another action from the different workflow, it does not copy to clipboard and pastes the previously copied action instead

What type of Logic App Is this happening in?
Standard (Portal)
Are you using new designer or old designer
New Designer
Did you refer to the TSG before filing this issue? https://aka.ms/lauxtsg
Yes
Workflow JSON
No response
Screenshots or Videos
No response
Browser
Chrome
Additional context
No response

Should be noted from teh video, the problem is not when pasting in another workflow but when posting in a different tab. Which workflow it's being pasted to does not play a role.

this is happening because we're storing the copy-paste in local storage which doesn't seem to hot update in azure portal requiring the page to be refreshed before an operation can be pasted on another tab. This fix might need to wait until we move this logic to clipboard api

@Eric-B-Wu I did some digging last night, it appears that localstorage isn't what we're actually using. Portal actually fakes localstorage using indexeddb and might have a caching layer in the middle. We're definitely going to need to find another way to store this in portal. The good news though is that this opens up some possibilities with some other things since indexeddb doesn't have a limit on size/space....


Sway Ref: Style Guide single use variables

Description
Closes #4661
Checklist

[x] I have linked to any relevant issues.
[ ] I have commented my code, particularly in hard-to-understand areas.
[x] I have updated the documentation where relevant (API docs, the reference, and the Sway book).
[ ] I have added tests that prove my fix is effective or that my feature works.
[ ] I have added (or requested a maintainer to add) the necessary Breaking* or New Feature labels where relevant.
[x] I have done my best to ensure that my PR adheres to the Fuel Labs Code Review Standards.
[x] I have requested a review from the relevant team or maintainers.

How did I double approve 🤔


VisionEval Installer (and Installer-Builder) now available

This is not strictly an "issue" - more of an "add on".
I've created an offline build process that constructs a standalone VisionEval installer that can work on all platforms where you can install R 3.5.1.  You can look at the build process at https://github.com/jrawbits/VisionEval-install  (there is a pretty extensive ReadMe aimed at developers).  You can use the install builder to (1) create an independent local runtime environment to try VisionEval in a "pristine" state on your local machine, (2) package complete installers as .zip files that can be transported offline to any machine where you can install R (note that R and VisionEval can be installed without administrator privileges) -0 just unzip and configure, or (3) perform an "online" installation that draws the packages from an online VisionEval-specific repository (built by the installer-builder) , enabling VisionEval to be installed on any machine that can host R 3.5.1 and has an internet connection. For a look at what an end user would see resulting from the installer-builder, I've got a temporary home page for the  VisionEval installation at https://visioneval.jeremyraw.com.
All of that is a work in progress, but I'm hoping to stabilize it over the next week or so.  Trying it out and giving me feedback (you can post issues in return on the VisionEval-install repository) will be much appreciated.

The best place to get the installer is https://visioneval.org/category/3download.html


⚠ universalis has degraded performance

In ada6f8c, universalis (https://universalis.app/) experienced degraded performance:

HTTP code: 200
Response time: 23613 ms

Resolved: universalis performance has improved in 3ceddfb.


EVEREST-1287 Change affinity default settings

Affinity default settings
Problem:
EVEREST-1287
Affinity was set to none by default. Only for EKS it was set to kubernetes.io/hostname
Traced back the git history - this condition for EKS was implemented in January 2023, but the reasoning wasn't really clear.
Checked it with @gen1us2k, who fortunately can remember the reasons:

EKS was the main focus
The setting caused the db clusters never came up in a single node k8s cluster.

Not sure, what was the reason which cased the db clusters never came up back then, but checked it now - all 3 types can come up with the affinity settings set by default in a single-node kind cluster.
So the condition was deleted and the setting is applied by default.
Any thoughts/feedback is appreciated.
CHECKLIST
Jira

[ ] Is the Jira ticket created and referenced properly?

Tests

[ ] Is an Integration test/test case added for the new feature/change?
[ ] Are unit tests added where appropriate?

I may be missing something here, but, by setting the affinity topology key to kubernetes.io/hostname, aren't we asking the scheduler to schedule all pods on the same node? Which seems like the opposite of what the original ticket describes - having to schedule pods across different availability zones 🤔

@mayankshah1607 thing that might be confusing here is that the Affinity key actually refers to AntiAffinity under the hood (PXC, PSMDB, PG)
As I understood, setting AntiAffinity to kubernetes.io/hostname configures the scheduler to not set pods to the same node within the same availability zone. As the ticket says, the problem is

if that node goes down the whole DB cluster can go down

so the idea is at least to schedule pods to different nodes by default.
If the user wants further improvements like spreading across different zones, they should be able to configure the topology to something else, e.g. kubernetes.io/zone, but it's out of scope for this ticket.

Affinity key actually refers to AntiAffinity under the hood

Okay, I see. Then it makes sense 😅 Thanks for explaining!


Header not formating for "# [text]" but only "#[text]"

It seems that header text with a space in between the "#" and the actual text does not get formatted

https://github.com/chjj/marked/pull/671

See #981


azure front door fallback

Description
We now have fallback for frontdoor service. We directly call cluster in case of failure of FrontDoor service failure. I am using here opossum for CircuitBreaker pattern to fallback for different url.
Circuit Breaker gives us :

fail fast
ootb fallback mechanism

Tested
@codyborn there are no tests for the function "handleGetBlindedMessageSig" directly. Should I create some or tests case somewhere else ?
Backwards compatibility
It is compatible
Extra info
@codyborn we still need to add fallbackUrl to the configuration. Should this be done after merge or before?

Nice!
For tests, we can add them to the index.test.ts which tests getBlindedMessageSig.
We should update the config before deploying; however we should also make the fallback URL optional since not all signers will have one.

@codyborn I've upgraded the code so it handles one circuit breaker per signer. Do you have any idea why do tests fail? I am not sure if this is on me.


Pass JWT lifetime into email rendering template somehow

In https://github.com/sillsdev/languageforge-lexbox/pull/603#pullrequestreview-1905164876 Kevin suggested passing the token lifetime into the email template in order to render an appropriate number of days (currently the text hardcodes 3 days). That's slightly more complicated than it appears at first glance, because we'll have to get the JWT out of the URL passed to the template and then parse it to extract the expiration date. Also, it's possible that we may choose to give some JWTs might have a lifetime in hours, so we might want the text in en.json to be able to handle time specified in either days or hours. (I doubt we'll be sending emails with an expiration time of N minutes, outside of E2E tests, and in E2E tests we'd want the expiration warning text to be the same as that of the regular text).
This issue is to track that remaining work that didn't make it into #603.

FYI no need to parse the JWT, we can just return the lifetime of the JWT out of the function that generates it and pass that value into the render code.

Yeah, I see how to do that by modifying the parameters, e.g. public record ForgotPasswordEmail(string Name, string ResetUrl) would become public record ForgotPasswordEmail(string Name, string ResetUrl, int expirationDays).


Gift tastes are inconsistent between item and NPC lookup

Looking up a Daffodil incorrectly says Jodi likes them (she actually hates them). Looking up Jodi correctly doesn't show Daffodil as a liked item.
Reported via private message on Nexus mods.

Fixed in the upcoming 1.5 release via 7a9e1a8e3f0e4c417be1f743f0657ff3bfc5ea6e and 7741be0ef0389365d1f5f2c49923c8b05c82e4bc. (Turns out Jodi both likes and hates Daffodils specifically, and the gift taste logic didn't properly handle precedence in this case.)


Use embeded CheckSuite and HeadCommit field for CheckSuiteEvent

Connects https://github.com/google/go-github/issues/1131
The check_suite object from github's check_suite event also includes head_commit, which is not present in the check_suite object.
The CheckSuiteEvent also uses CheckSuite as one of its fields in the struct which does not has the head_commit, and therefore is not parsed during json parsing in the current CheckSuiteEvent, hence head_commit data is unavailable from the CheckSuiteEvent struct.
~To also parse the head_commit, CheckSuiteEvent should use an embeded field for CheckSuite with HeadCommit, so that all the details are received from the github api.~
To also parse the head_commit,
add the missing field HeadCommit in the CheckSuite struct with a comment stating that the field is only populated by a webhook event.
type CheckSuite struct {
	ID           *int64         `json:"id,omitempty"`
	NodeID       *string        `json:"node_id,omitempty"`
	HeadBranch   *string        `json:"head_branch,omitempty"`
	HeadSHA      *string        `json:"head_sha,omitempty"`
	URL          *string        `json:"url,omitempty"`
	BeforeSHA    *string        `json:"before,omitempty"`
	AfterSHA     *string        `json:"after,omitempty"`
	Status       *string        `json:"status,omitempty"`
	Conclusion   *string        `json:"conclusion,omitempty"`
	App          *App           `json:"app,omitempty"`
	Repository   *Repository    `json:"repository,omitempty"`
	PullRequests []*PullRequest `json:"pull_requests,omitempty"`

	// The following fields are only populated by Webhook events.
	HeadCommit *Commit `json:"head_commit,omitempty"`
}

~This would remove a function from github-accessors.go~
This would add a new accessor function for head_commit .
// GetHeadCommit returns the HeadCommit field.
func (c *CheckSuite) GetHeadCommit() *Commit {
	if c == nil {
		return nil
	}
	return c.HeadCommit
}

Hey google/Go-Github,
I have signed the agreement.
Thanks and regards
Ranbir Singh
On Sun, 10 Mar 2019 at 15:32, googlebot<EMAIL_ADDRESS>wrote:

Thanks for your pull request. It looks like this may be your first
contribution to a Google open source project (if not, look below for help).
Before we can look at your pull request, you'll need to sign a Contributor
License Agreement (CLA).
📝 Please visit https://cla.developers.google.com/
https://cla.developers.google.com/ to sign.
Once you've signed (or fixed any issues), please reply here (e.g. I
signed it!) and we'll verify it.
What to do if you already signed the CLA Individual signers

It's possible we don't have your GitHub username or you're using a
different email address on your commit. Check your existing CLA data
https://cla.developers.google.com/clas and verify that your email is
set on your git commits
https://help.github.com/articles/setting-your-email-in-git/.

Corporate signers

Your company has a Point of Contact who decides which employees are
authorized to participate. Ask your POC to be added to the group of
authorized contributors. If you don't know who your Point of Contact is,
direct the Google project maintainer to go/cla#troubleshoot (Public
version https://opensource.google.com/docs/cla/#troubleshoot).
The email used to register you as an authorized contributor must be
the email used for the Git commit. Check your existing CLA data
https://cla.developers.google.com/clas and verify that your email is
set on your git commits
https://help.github.com/articles/setting-your-email-in-git/.
The email used to register you as an authorized contributor must
also be attached to your GitHub account
https://github.com/settings/emails.

ℹ Googlers: Go here
https://goto.google.com/prinfo/https%3A%2F%2Fgithub.com%2Fgoogle%2Fgo-github%2Fpull%2F1132
for more info.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/google/go-github/pull/1132#issuecomment-471273641,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AMu6MDN5g3rnlk7CixVagzBRUXDpffFsks5vVNg9gaJpZM4bnLIE
.

@gmlewis , have updated the changes,
Please review.
Thanks

@gauntface , @gmlewis , can i squash the commits now ?


Error while starting kosmos shell or do( jsx generate)

Can not do jsx generate or start kosmos shell  kosmos -p  on unstable branch

This error happened because /sandbox/cfg/jumpscale_config.toml was deleted by accident.I have discussed the issue with @abom and we reached to the point that this file is so important and can not be removed so we can not consider this as an issue in the meantime else it was reproducible with other people


dart:js callbacks don't fire in the correct zone

when converting functions, dart:js should use zone.run to ensure the callbacks are run in the correct zone**. Otherwise the zone affinity is lost, which can lead to subtle bugs.
** if performance is a concern, it could do the same trick that dart:html event streams do and skip zone.run if Zone.current == Zone.ROOT_ZONE

We chatted about this. @jacob314 and I think the right fix is to use https://github.com/angular/zone.js, and restore the Dart zone from the JS side. Here's a sketch ... it's a mix of Dart and JS code, but hopefully makes sense. I think this would be a Dart API we'd expose from a package or something.
/// Uses zone.js to save and restore the Dart [Zone] when entering and existing JS code.
useZonesWithJsInterop() {
  if (!zone_js_included()) {
    throw 'please include https://github.com/angular/zone.js to use this feature';
  }

  var dartZone = Zone.current;

  // BEGIN JS CODE. This uses zone.js APIs.
  // Can be done from Dart with JS interop, this is just easier to write.
  zone.fork({
    _savedDartZone: dartZone,
    beforeTask: function() {
      set_dart_zone(this._savedDartZone);
    },
    afterTask: function() {
      set_dart_zone(this._savedDartZone.parent);
    }
  });
}

What's the status of this?  It seems useful to control the zone that a JS-interop library is operating under.

I went ahead and created a zone_js facade using package:js but it's unclear to me how the code posted above should work with the latest apis.
fork() takes a ZoneSpec, which looks like this (in zone_js.dart):
 external factory ZoneSpec(
      {String name,
      dynamic /*JSMap of <String,dynamic>*/ properties,
      Func4<ZoneDelegate, ZoneInterface, ZoneInterface, ZoneSpec, ZoneInterface> onFork,
      Function /*(parentZoneDelegate: ZoneDelegate, currentZone: Zone, targetZone: Zone, delegate: Function, source: string) => Function*/ onIntercept,
      Function /*(parentZoneDelegate: ZoneDelegate, currentZone: Zone, targetZone: Zone, delegate: Function, applyThis: any, applyArgs: any[], source: string) => any*/ onInvoke,
      Func4<ZoneDelegate, ZoneInterface, ZoneInterface, dynamic, bool> onHandleError,
      Func4<ZoneDelegate, ZoneInterface, ZoneInterface, Task, Task> onScheduleTask,
      Function /*(parentZoneDelegate: ZoneDelegate, currentZone: Zone, targetZone: Zone, task: Task, applyThis: any, applyArgs: any) => any*/ onInvokeTask,
      Func4<ZoneDelegate, ZoneInterface, ZoneInterface, Task, dynamic> onCancelTask,
      VoidFunc4<ZoneDelegate, ZoneInterface, ZoneInterface, HasTaskState> onHasTask});

@jmesserly Is the intention of your code snippet to fork a new JS zone that is effectively a child of the Dart zone?

I wrote this a long time ago but I think the idea was to make Dart zones be children of JS zones. The JS zone is first on the stack (it has to be, because browsers only understand JS code natively). So for example, when a DOM event fires, JS zones can restore the correct Dart zone.


Update SDK

I've updated the rpc url format and the instructions for running. I'm able to get the app running but have not seen it send a request to the rpc.

The example should work once the npm package is updated :)

The latest privy version seems to handle rpcConfig differently so I pinned the privy/react version


Native calls infrastructure

For practical higher level languages, it will be necessary to have native functions to access system services, work with native data types, etc. This would also be useful for pre-compiled functions for performance gains. These native functions will all have their arguments structured in the same way. Consider the typical add fn
@add = (<+ a b> (a b))
It is used with the expression
& @add ~ (#123 (#20 R))
Where R is the wire that the result is written to. The general form of the right hand of the expression is
(x1 (x2 (x3 ... (xN Result) ... )))
Result is usually a wire, but can be any term that can interact with a native value.
This pull request implements the functionality to properly handle arg lists structured like this and allows native calls to be easily written. An example of the add function is included at the bottom of the fns.rs file.
There are two areas of complexity. Handling VR* nodes in the arg position. And handling LAM nodes in the arg positions.
VR* nodes
A native function is different from a normal HVMC net in that any VR* node in an arg position can only ever be written from the other end and the native call cannot be completed until it is. This is similar to an OP2 node whose P1 port contains a VR* pointer. When an OP2 node is reduced, creates an OP1 node that stores the first arg and the operation. This works for binary operations, but native calls have to solve this problem in the general case for any number of args. This requires the original pointer to the native fn being kept somewhere along with the all the args that have already been seen. One option is to push the fn pointer and args list pointer to the bottom of the reduction stack in the hope that when they reach to top, another reduction will have written the needed value. This works, but could lead to a worker thread spinning if the stack is empty.
This PR stores the fn pointer and the args list pointer in a node on the heap. And then writes a new kind of pointer to the arg position. The new pointer has an RDX tag and points to the fn/args pair on the heap. In the atomic_linker_pri function, when an RDX pointer is seen at the target location, the new value is written as usual. Also, the deferred reduction is read from the heap and pushed to the reduction stack. The addition of a new tag value could be offset by eliminating the OP2 and OP1 tags and implementing native calls for each of the binary numeric operation, as I did with the add function.
LAM, TUP, and DUP nodes
I'm referring to them all as LAM nodes, since they're handled the same. This is by far the bulk of the code. It could be argued that this is not needed, but what it gives is worth it. For instance, any number of args can be given at any args position and the native function is called for each of them. If lists are encoded as LAM nodes, this gives a parallel automatic parallel mapping function over all the values. If two lists are given, one in each arg position, then you either have an automatic parallel zipper function over the lists, or the native function applied to a Cartesian product of the args. And that works automatically for any number of args. Here are some examples:
@main = R   & @add ~ ((#12 #123) (#10 R)) // -> (#22 #133)
@main = R   & @add ~ (#123 ((#20 #10) R)) // -> (#143 #133)
@main = R   & @add ~ ((#12 #123) ((#20 @a) R)) // -> (#32 #133)
@main = R   & @add ~ ((#12 #123) ({1 #20 @a} R)) // -> ((#32 #22) (#143 #133))
@main = R   & @add ~ ({1 #20 @a} ((#12 #123) R)) // -> ((#32 #143) (#22 #133))
Finish
One other cool thing falls out of all this. You can apply multiple functions to the same list of arguments
@main = R & (#8 (#9 R)) ~ {1 @add @add} // -> {1 #17 #17}

First of all, thanks for taking the time to work on this :)
I haven't fully read through it all yet, but I'm thinking that we may have had similar ideas at similar times – as part of #60, Ref nodes can now store arbitrary payload information, allowing for the kinds of native calls you describe. (You can see an example of this here.)

Very cool. Gonna have to start over learning how HVM works. :)

The core is still the same, so hopefully you shouldn’t have to start over entirely ;)

I expect so. This is some of the most intellectually stimulating work I've done in a long time. Super fun. So different from everything else.


Model generator based on short-hand schema

Using a schema shorthand from a really forced hybrid of Yaml and Python syntax, I've created a LESS-esque solution for Sails model generation.  The syntax is as followed:

@mixin is a mixin, a reusable abstraction of functionality designed to be shared between multiple tables.  (Should be generated in a subfolder in the models folder)
table:(mixinA,mixinB) indicates that a table will be a composition of multiple mixins
property:primitive is a property that utilizes a Waterline primitive.
property:{tableA} is a property that is the owner of a one-to-one relationship with another table
property:[tableB] is a property that is the owner of a one-to-many relationship with another table
property:<tableC> is a property that is the owner of a many-to-many relationship with another table
# is a comment.

Working HTML code example:
<html>
<body>
<textarea style="width: 50%; height: 100%;" name="schema">
@taggable
    tags:[tag]

@trackable
    createdBy:{account}

@modal
    status:integer
    type:integer
@social
    comments:[comments]

# Account
account:(modal,social)
    username:[email]
    passphrase:string
    homeLocation:[location]
    cellPhone:[phone]
    createdOn:datetime

# Location information
location:(modal)
    street:string
    city:string
    state:string
    country:string
    zip:string
    lat:float
    long:float
    radius:float
    polymap:json

# Phone information
phone:(modal)
    number:string

# E-mail information
email:(modal)
    address:string

# Schedule information
schedule
    startsOn:datetime   # The datetime the schedule starts
    endsOn:datetime     # The datetime the schedule ends
    duration:integer    # How many seconds the schedule lasts when it is started (If endsOn is null)
    hours:array     # Which hours the schedule is active for
    minutes:array       # Which minutes the schedule is active for
    weekdays:array      # Which week days the schedule is active for
    weeks:array     # Which weeks of the year the schedule is active for
    monthdays:array     # Which days of the month the schedule is active for
    months:array        # Which months the schedule is active for

# Tags in use
tag:(trackable)
    name:string

# General comment
comment:(trackable)
    body:text
    rating:integer
</textarea>
</body>
<script>
    var schema = document.getElementsByName('schema')[0].value.split("\n");
    var map = {};
    var currentTarget = null;

    function extract(line) {
        var indicators = /@/,
            result = {},
            parts = line.split(':');

        result.target = parts[0].replace(indicators, '').trim();

        if(parts.length > 1) {
            // Additional properties have been specified
            var properties = parts[1];
            var type = null;
            var position = properties.indexOf('#');
            if(position > -1) {
                // Remove comments
                properties = properties.substr(0, properties - 1);
            }

            var mixins = properties.match(/\(([^\)]+)\)/);
            if(mixins && mixins.length == 2) {
                // Dealing with mixins
                properties = mixins[1].split(',');
                type = 'mixins';
            } else {
                // Analyze for attribute relationships
                var oneToOne = properties.match(/{([^}]+)}/);
                var oneToMany = properties.match(/\[([^\]]+)\]/);
                var manyToMany = properties.match(/<([^>]+)>/);
                if(oneToOne && oneToOne.length == 2) {
                    properties = oneToOne[1];
                    type = 'oneToOne';
                } else if(oneToMany && oneToMany.length == 2) {
                    properties = oneToMany[1];
                    type = 'oneToMany';
                } else if(manyToMany && manyToMany.length == 2) {
                    properties = manyToMany[1];
                    type = 'manyToMany';
                } else {
                    type = 'none';
                }
            }
            result.type = type;
            result.value = properties;
        }

        return result;
    }

    for(var i in schema) {
        var line = schema[i];
        var symbol = line.charAt(0);

        if(symbol == '@') {
            // Mixin capture
            var entry = extract(line);
            //console.log(['mixin', extract(line)]);
            var currentTarget = entry.target;
            map[currentTarget] = {
                mixins: entry.value,
                attributes: {}
            }
        } else if(symbol == "#" || symbol == '') {
            // Comment or empty line
            continue;
        } else if(symbol.match(/\s/) !== null) {
            // Attribute capture
            //console.log(['attribute', extract(line)]);
            var entry = extract(line);
            map[currentTarget].attributes[entry.target] = {
                relation: entry.type,
                type: entry.value
            }
        } else {
            // Table capture
            //console.log(['table', extract(line)]);
            var entry = extract(line);
            var currentTarget = entry.target;
            map[currentTarget] = {
                mixins: entry.value,
                attributes: {}
            }
        }
    }

    console.log(map);
</script>
</html>

I'd imagine the command for Sails could be:
sails generate < schema.txt

I haven't provided the actual Sails-specific code generation itself, but the map this code spits out can be easily analyzed to do that.

https://www.npmjs.com/package/sails-generate-models


Where can i download Cascade-Mask-RCNN pretrained on COCO.

This is an exciting job！I want to find out the performance using Cascade-Mask-RCNN. But due to the Limitations of computing resources, I can not do it at this time. So, Where can i download Cascade-Mask-RCNN pretrained on COCO, Thanks.

We currently do not have models trained on Cascade-Mask-RCNN. However, you can find ones using RetinaNet and Mask R-CNN.
We will consider adding Cascade-Mask-RCNN as our baseline, thanks.


Modifier -> SwiftUI -> Gestures: onLongTouchGesture(minimumDuration:perform:onTouchingChanged:)

Doc: https://developer.apple.com/documentation/swiftui/view/onlongtouchgesture(minimumduration:perform:ontouchingchanged:)

[ ] Swift implementation
[ ] Elixir implementation

Blocked by TVos task

Blocked by https://github.com/rust-lang/rust/pull/103503#issuecomment-1519196211
FYI @Bajix


APEXCORE-515 Providing principal for token refresh

@gauravgopi123 please see

@pradeepdalvi @vrozov please see

Looks good to me. Please squash commits.

@vrozov thanks for your input, it led me to look at the login part again

squashed


Fail if cask source already exists.

[x] Have you followed the guidelines in our Contributing document?
[x] Have you checked to ensure there aren't other open Pull Requests for the same change?
[x] Have you added an explanation of what your changes do and why you'd like us to include them?
[ ] Have you written new tests for your changes? Here's an example.
[ ] Have you successfully run brew tests with your changes locally?

Fail if the app which is to be installed already exists. Otherwise the application bundle will stay inside the Caskroom despite the installation completing successfully.
Fixes https://github.com/caskroom/homebrew-cask/issues/23377.

@Homebrew/cask

@jawshooah or @vitorgalvao, would be great to get this reviewed.


fix: numpy returns handles more name, type cases

Addresses #173 . I'm not particularly good and regexes, so definitely feel free to take this as more of a demonstration of the issue. Happy to make any tweaks / changes :)

@pawamoy, alright, I think assert_element_equal should be checking all the attributes now. Happy to make any other useful changes

I'm waiting for an answer at https://github.com/numpy/numpydoc/issues/463. Numpydoc maintainers don't particularly like the : and : int syntax. If we can't find a better alternative, we'll go ahead with it :slightly_smiling_face:

Lets wait a few more days, and then proceed to merge. I don't think the discussion on numpydoc will yield immediate results anyway. I'm OK with driving changes rather than waiting for them :slightly_smiling_face:

Merging, thanks again @machow !


Notes not saved on quit in newer versions

I was running an older version of tomboy-ng, 0.36b, without problems, on Manjaro. Then I realized I'd missed many updates and upgraded to 0.40, gtk2 version.
In version 0.40, if I edit a note and quit right away, the edits are not saved and I get four notifications saying, "Failed to auto save" (I would sometimes get a single notification saying this with 0.36b, but notes always saved nonetheless). In 0.40 I have to wait about ten seconds, for the edits to save, before I quit, although I still get the four "failed to autosave" notifications.
I tried versions 0.39 and 0.37, as well as the qt version of 0.40, but they all had the same problem.
So I reverted to 0.36b and notes save on quit, as expected.

This is not much of a test as it is a secondary OS with few notes, but I tested a short note on Artix (which started its life as the OpenRC version of Manjaro back in the day) with 0.40 and had no problems with the save running either E or XFCE.
How large are the notes you are saving and how many notes? Desktop Environment? Those things might help Davo track this down.

Yeah, this is a nasty problem indeed. Anything you can provide to help me replicate it will be very, very gratefully received.
I tested on my system by opening a new note, pasting in 100K of text and immediately closing -ng. One reopening, it was all there. I tested by (immediately) closing the note and (immediately) closing the application. All good in both cases.
I take it by 'quit' you don't mean closing the whole computer down ?  (That should be OK too but not absolutely certain, all systems will give an app only so long to do what it needs to do.)
As aguador suggests, maybe the desktop is more important here than the distro, what is your desktop please ? And version of Manjaro ?  I might need to build a replica ....
Also be nice to know where you are saving your notes, its not to a shared or on-line drive perhaps ?  Wild guess, you are not using some particularly slow drive ? And encrypted drive ?
Nothing worth mentioning has changed in the file saving model for quite some time so, there is, IMHO, a risk of this problem showing up even in the older version of tomboy-ng. We need to get to the bottom of it !
Davo

Hi, thanks for the follow up.
Yes, when I say quit, I mean quitting the program (ctrl-Q).
I have 287 notes. Most of them are not very long, but a few are. (I have noticed that for a while that with long notes, typing starts to get slow.)
I'm using the Mate desktop. My hard drive is encrypted (but it's an SSD, so it's not slow and I have no issues with other programs). The notes are saved locally, in my /home partition. I'm not sure what you mean by what version of Manjaro, since it's rolling release. This is a system I set up a long time ago (not long after Manjaro first came into existence) and I've just been rolling ever since--which remarkably few problems. The hardware is pretty old (it's an old ThinkPad).
One thing I notice is that if I make a change to a note an * appears next to the note name, in the title bar of the window for the note, to indicate a change has been made. After about ten seconds the note saves and the * goes away. This is the same in 0.36b, as well as in the newer versions. But in the newer versions, if I don't wait until that autosave happens, and quit while the * is still thre then the note is not saved on quit. Whereas in 0.36b, as I described, if I quit immediately, while the * still shows that the note has not been autosaved, the note still saves on quit, as expected.
Any thoughts? Any more information that would be useful?

OK, you have answered very well but I am not sure I can see any hints about what is happening.
I will build a Manjaro, if its rolling, I will should up same condition as you. I too use Mate.
Yes, that * indicates content is unsaved. Its done on a timer, while someone is typing, they don't want file i/o happening. As you said, it all slows down as a note gets "too long", its dependent on hardware and he degree of markup in the note. But for its purpose, "notes" rather than "manuscripts" its usually OK. I test on an old, Atom powered E-Machine !
When you close the app down, it should keep itself open until after it has finished all the saving necessary. How that is not working for you, I really don't know. But we need to find out !
I will build my version of your system, see if I can replicate the problem. If I don't, it may come down to me sending you a special version that logs the process, that will be revealing !
I will get back to you !
Davo

Thanks for pursuing this problem. That's disappointing that there's no Mate Edition of Manjaro anymore. It looks like they dropped it just a few months ago. One of the reasons I originally came to Manjaro was because it was an early supporter of Mate.

It was quite easy to add Mate to an XFCe Manjaro, in fact it looked quite good. But I could not live without apt !
But no progress here. My mock up of your system works perfectly. Sigh ...
So, here is a test binary that will drop, to the console, some data about whats happening as you quit -ng.
I suggest you unzip this file, it contains one binary called "tomboy-ng", do not install it, just drop it somewhere convenient and run it from the command line. Make sure your existing one is stopped first, else it will take over.
Do your trick please, open a new note, paste in a heap of content and click quit immediately.
The process should leave 8 lines of text, each showing the method it was called from, the time (to the millisecond) and, in some cases, the note title. If you could copy and paste those line here, I may become a bit wiser !
tomboy-ng-test.zip

I ran the test version of ng twice.  But it saved the note. Then I ran the test version again and made a slight edit to the new note, quit immediately, and the edits were not saved.
Here's the output from the terminal. Because I have several notes I leave open, that open when I launch tomboy-ng, I edited to output just to change the name of those existing notes (so the output says instead note1, note2, etc.). But the new note I created can be seen as: "New Note 2024-10-15 00:01:38.032."
Run 1:

TMainForm.FormClose request close 00:01:43.706 form=note1
TMainForm.FormClose request close 00:01:43.727 form=note2
TMainForm.FormClose request close 00:01:43.748 form=note3
TMainForm.FormClose request close 00:01:43.769 form=note4
TMainForm.FormClose request close 00:01:43.789 form=note5
TMainForm.FormClose delay 0
TEditBoxForm.FormDestroy called 00:01:43.810 form=* New Note 2024-10-15 00:01:38.032
TEditBoxForm.SaveStringList called 00:01:43.911 form=New Note 2024-10-15 00:01:38.032
TEditBoxForm.SaveStringList launched thread 00:01:43.911 form=New Note 2024-10-15 00:01:38.032
TEditBoxForm.FormDestroy finished 00:01:43.911 form=New Note 2024-10-15 00:01:38.032
TSaveThread.Execute called 00:01:43.911
TSaveThread.Execute finished 00:01:43.912
TEditBoxForm.FormDestroy called 00:01:43.920 form=* note5
TEditBoxForm.SaveStringList called 00:01:43.935 form=note5
TEditBoxForm.SaveStringList launched thread 00:01:43.935 form=note5
TEditBoxForm.FormDestroy finished 00:01:43.936 form=note5
TSaveThread.Execute called 00:01:43.936
TEditBoxForm.FormDestroy called 00:01:43.940 form=note4
TEditBoxForm.FormDestroy finished 00:01:44.136 form=note4
TEditBoxForm.FormDestroy called 00:01:44.139 form=note3
TEditBoxForm.FormDestroy finished 00:01:44.190 form=note3
TEditBoxForm.FormDestroy called 00:01:44.194 form=note2
TEditBoxForm.FormDestroy finished 00:01:44.237 form=note2
TEditBoxForm.FormDestroy called 00:01:44.242 form=note1
TEditBoxForm.FormDestroy finished 00:01:44.308 form=note1

Run 2:

TMainForm.FormClose request close 00:03:24.285 form=note1
TMainForm.FormClose request close 00:03:24.306 form=note2
TMainForm.FormClose request close 00:03:24.326 form=note3
TMainForm.FormClose request close 00:03:24.348 form=note4
TMainForm.FormClose request close 00:03:24.368 form=* New Note 2024-10-15 00:01:38.032
TMainForm.FormClose request close 00:03:24.389 form=note5
TMainForm.FormClose delay 0
TEditBoxForm.FormDestroy called 00:03:24.409 form=note5
TEditBoxForm.SaveStringList called 00:03:24.411 form=note5
TEditBoxForm.SaveStringList launched thread 00:03:24.411 form=note5
TEditBoxForm.FormDestroy finished 00:03:24.411 form=note5
TSaveThread.Execute called 00:03:24.411
TSaveThread.Execute finished 00:03:24.413
TEditBoxForm.FormDestroy called 00:03:24.421 form=* New Note 2024-10-15 00:01:38.032
TEditBoxForm.SaveStringList called 00:03:24.428 form=New Note 2024-10-15 00:01:38.032
TSaveThread.Execute called 00:03:24.429
TEditBoxForm.SaveStringList launched thread 00:03:24.429 form=New Note 2024-10-15 00:01:38.032
TEditBoxForm.FormDestroy finished 00:03:24.429 form=New Note 2024-10-15 00:01:38.032
TEditBoxForm.FormDestroy called 00:03:24.436 form=note4
TEditBoxForm.FormDestroy finished 00:03:24.846 form=note4
TEditBoxForm.FormDestroy called 00:03:24.851 form=note3
TEditBoxForm.FormDestroy finished 00:03:24.894 form=note3
TEditBoxForm.FormDestroy called 00:03:24.901 form=note2
TEditBoxForm.FormDestroy finished 00:03:24.956 form=note2
TEditBoxForm.FormDestroy called 00:03:24.961 form=note1
TEditBoxForm.FormDestroy finished 00:03:25.023 form=note1

By the way, the problem with edits to notes not being saved on quit is not related specifically to notes that have a very large amount of content. It was a fairly short note that I first noticed the problem with.
Also, I don't know if this matters, but as I said, I do tend to leave a few note windows open when I quit that reopen on launch. Including one that is a fairly long note. Maybe that is part of the necessary conditions to trigger this problem? Curiously, while I was quitting and restarting to run this test, that long note got corrupted and I had to recover it from the backup folder.

I do tend to leave a few note windows open when I quit that reopen on launch.

Woops, thats something I missed !  I have deliberately but unintentionally been avoiding what (probably) I needed to look at.  I rarely shut -ng down in normal use and, when developing, I carefully close down most if not all notes before closing the app.
I'll look through your data and see if it points to my new theory but might need to send you another test case. But I suspect I might be able to replicate the problem with the "lots of notes trick" !
Thanks, your help here is appreciated ! Will get back to you.
Davo

I'm glad you were able to duplicate the problem! Hopefully that will help resolve it.
Some further notes. I don't really have a lot of notes left open, just five. But I suspected the problem might be the one long note (1300 words) that I left open, since that was the note that got corrupted when I was running your test binary.
So I tried it again and indeed that was causing the problem. If I close the one long note and leave the other four notes open, then an edit to one of the shorter notes saves on immediate quit. But if I have five notes open, including the longer note, then the edit does not save on quit.
Experimenting further, if I have only the long note open, or the long note and one other note, edits save on quit. But once I had three notes open, including the long note, then edits did not save on immediate quit.
So guess perhaps it's just some total amount of text between the notes and over that threshold, the failure to save on quit occurs?

I think it relates more to the number of notes being saved rather than the size. I have had a bit of time to dig into it and believe that due to a couple of separate issues, each introduced in to code at different times. When a note save is delayed because another note is already being saved its setup to keep trying, but if a third one joins the queue, they can fight over who gets to go first and block any remainder.
I do like to save sequentially to play safe. Its slower but thats only a factor when Quitting IMHO.
I have been testing my fix, have a 100 notes open at once now and all are saved with no errors !
Fun Fact, its dead easy to open 100 notes all at once. Quit and they will all return, every time !  Its quite tedious closing, one by one, all of those notes by hand !
  But as I have made quite a few changes to the save system, and its critical, I need to test extensively before anyone else sees it.  When I am a bit happier, I'll let you have a sneak preview !
Davo

OK, attached (if its not too big) is a new pacman package, gtk2, 64 bit, think thats what you are using ?
I have tested to death (and testing on a Mac is, often, a near death experience), Linux (all sorts), Windows and Mac. Seems OK. Certainly safer that 0.40.
I will probably push this out as a full release before long given this problem you experienced could hit anyone. Its really quite nasty.
Please install this package, if you do see any problem, please let me know, remove it quickly and get back to your 0.39 !
As well as your problem, it does fix some more obscure problems you are unlikely to notice (unless you create PDF's in Chinese ?).  Multiselect notes in the search window and its right click menu is new ....
Thanks for your help and understanding here, this was, as I said, a nasty problem !
Davo
Ah, damm, github insists I zip it, so, please unzip then do the usual pacman thing ....
tomboy-ng-0.40b-gtk2-1-x86_64.pkg.tar.zst.zip

Hi, sorry I dropped the ball on this. I had to go out of town to deal with some family things. Anyway, I installed the latest package and it seems to be fine. Opened a bunch of notes, made some edits, immediately quit, and the edits were saved each time. I wouldn't say I exstensively tested it. But the same conditions that triggered the problem before, which were easy to reproduce, do not now.

Thanks, I cannot break it either.  I think I had better rush out a new release, its quite a serious bug !
Thanks for your help.
Davo

Hi, version 0.41 of tomboy-ng is now available. I believe it solves the issue you reported here.
Thanks for your input.
Davo


Bug 1214135 - Put parsers into their own modules

https://bugzilla.mozilla.org/show_bug.cgi?id=1214135

We might end up doing this for Gecko, but it will be done in a different manner than in this PR.  Closing.


Adding FabulArt project in projects showcase [2nd attempt]

Showcase addition

Name: FabulArt
Description: We are the leading luxury NFTs brand on Cardano Blockchain. We offer exclusive events and fine digital art such as our worldwide-known Roleggs collection: 2000 unique and 3D interactive Fabergè-inspired Eggs.
Link: https://fabul.art
Tags:

nft

@rdlrt @katomm may we ask what's the average approval time? We just want to be sure the pull request is fine this time :)

@rdlrt @katomm may we ask what's the average approval time? We just want to be sure the pull request is fine this time :)

Yes, PR structure (syntaxially) is fine this time (y) .
Typically unanimous approvals are pretty quick (within few days), but judging NFT/marketplace projects is a very opinionated topic, please check out the discussion here. The lesser the claims on showcase description (eg: first of ABC, leading DEF, etc), the less is hesitation with approval. Note that there are over 20 independent community approvers - not affiliated to any federation entities - who could potentially approve a PR, while the PR itself just needs 3 🙂
For me personally - what stops me from approving PR to have approvals (and yes, these are very difficult to judge - and might depend on perspective, hence the linked discussion):

It has to have enough community reputation.
The GitHub account must have a history/or already be known in the Cardano community.

Besides, for quality on showcase entry:

site performance makes it difficult to browse swiftly

@rdlrt @katomm may we ask what's the average approval time? We just want to be sure the pull request is fine this time :)

Yes, PR structure (syntaxially) is fine this time 👍🏻 .
Typically unanimous approvals are pretty quick (within few days), but judging NFT/marketplace projects is a very opinionated topic, please check out the discussion here. The lesser the claims on showcase description (eg: first of ABC, leading DEF, etc), the less is hesitation with approval. Note that there are over 20 independent community approvers - not affiliated to any federation entities - who could potentially approve a PR, while the PR itself just needs 3 🙂
For me personally - what stops me from approving PR to have approvals (and yes, these are very difficult to judge - and might depend on perspective, hence the linked discussion):
* It has to have enough community reputation.

* The GitHub account must have a history/or already be known in the Cardano community.

Besides, for quality on showcase entry:
* site performance makes it difficult to browse swiftly

Hello rdlrt, thanks for your answer!
For the community reputation you may check our Twitter account or our Discord, we have already an amazing community.
Regarding the GitHub account, the account I'm using doesn't have much interaction with Cardano codebase but I've given a hand on the Cardano Telegram Devs Group about stateful smart contracts last October :)
For the last point, are you having problems browsing our website? If so, please let me know which pages don't load properly, we'll fix them asap!

Hello @rdlrt @katomm, is there any other approver that we could tag to get the approving reviews needed? Thank you!

Sorry, I can only refer again to #243.

Sorry, I can only refer again to #243.

Hey @katomm , I've read the discussion. It's correct that you want projects that showcase what you can do on Cardano. In fact we are the first luxury NFTs project on Cardano. Considering that some famous style brands are going to do that, it would be cool to show that you can adopt Cardano for this purpose.
Maybe we can change the project image with a cool HD render of a luxury Roleggs?
For example this one: https://fabul.art/wp-content/uploads/elementor/thumbs/Rend_01-pcqi3447xvza1tcozr0qcl2itfool8ot531ipusafg.png

Closing due to not enough approvals for a long time. Please note that showcase projects need to provide a unique value from existing showcase items, feel free to join the discussion here: #243


[FR]: Make it possible to export more than 150 lines of a clients / service log

Describe your idea
Currently it is possible to see / download the last 150 lines of the clients / service logs.
However if possible it would be nice to export more, if not all of them.
Building on this we could also think about combining this with the possibility to specify the logs to export from a specified time fram or even define the number of logs one would like to actually export

[x] Discuss
[x] Design
[ ] Build

Considered Alternatives?
--
Additional Context
--
Acknowledgment

[X] I looked through the feature requests/enhancements planned for this project before submitting a new idea

Finished with https://github.com/stereum-dev/ethereum-node/pull/1618


mock() not working with coroutines

    @get:Rule
    val dispatcherRule = CoroutineTestRule()

    private val validator: Validator = mock()

    private val viewModel = MainViewModel(validator)

    @Test
    fun `test user data retrieved successfully`() = dispatcherRule.runBlockingTest {
        viewModel.getData()
    }

The above piece of code doesn't work. But the below one does.
    @get:Rule
    val dispatcherRule = CoroutineTestRule()

    private lateinit var viewModel: MainViewModel

    @Mock
    lateinit var validator: Validator

    @Before
    fun setUp() {
        MockitoAnnotations.openMocks(this)
        viewModel = MainViewModel(validator)
    }

    @Test
    fun `test user data retrieved successfully`() = dispatcherRule.runBlockingTest {
        viewModel.getData()
    }

I feel that the first one is much cleaner. Any reason why it's not working? I tried to find out why it's failing but no luck.
Some more information, which might be needed to debug further.
ViewModel class
fun getData() {
        viewModelScope.launch {
            uiState.value = "Loading"
            if (!validator.validate()) {
                uiState.value = "Error"
                return@launch
            }
            delay(1500)
            uiState.value = "Success"
        }
    }

    init {
        viewModelScope
    }

viewModelScope extension variable
public val ViewModel.viewModelScope: CoroutineScope
    get() {
        val scope: CoroutineScope? = this.getTag(JOB_KEY)
        if (scope != null) {
            return scope
        }
        return setTagIfAbsent(
            JOB_KEY,
            CloseableCoroutineScope(SupervisorJob() + Dispatchers.Main.immediate)
        )
    }

Found the problem. I was trying to access the viewModelScope in the init block. While the rule was switching the thread in starting.

I could solve this with switching dispatcher is init block of CoroutineTestRule.
create viewmodel by lazy.

Both the solutions have the code smell. Would love to know if there is any better way to solve this.

Closing per the above comment, as I feel like this is more related to the specific use case rather than a general mockito-kotlin question.


Example for setting DNS identity is faulty

1st example in this section:
https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/deployment/implement-security-certificates-production-environment#using--2
is currently this:
Set-NAVWebServerInstanceConfiguration -WebServerInstance  -KeyName DnsIdentity -KeyValue <true
Should be this:
Set-NAVWebServerInstanceConfiguration -WebServerInstance  -KeyName DnsIdentity -KeyValue

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

ID: 69ed5ffa-3ca0-0393-01d5-9d682719a6bd
Version Independent ID: 709be381-ff65-c38b-34c0-b1c0dd9ef687
Content: Using Security Certificates with Business Central On-Premises - Business Central
Content Source: dev-itpro/deployment/implement-security-certificates-production-environment.md
Service: dynamics365-business-central
GitHub Login: @jswymer
Microsoft Alias: solsen

Thanks for the feedback! We've fixed the issues, and the updated article will be published soon.


Add Apache 2 License File

Add Apache License to the project. Here is where it can be found: https://www.apache.org/licenses/LICENSE-2.0

If it is possible , can i try to do this ?

Hi @Abh1shekShinde, this issue was closed by #154 Let us know if you have any questions. Thanks for your interest.


Add gitpod config

this commit adds support for Gitpod.io, a free automated
dev environment that makes contributing and generally working on GitHub
projects much easier. It allows anyone to start a ready-to-code dev
environment for any branch, issue and pull request with a single click.

GitPod demo commit. Seems to be working as expected.


Check node references when adding an edge to a graph

When adding an edge object with references to nodes in another graph, and those node ID's are also present in the new graph, the new graph should reject to query those nodes and throw a respective error.

DONE


[MINOR][DOCS] Fix a HTML/Markdown syntax error in sql-migration-guide.md

What changes were proposed in this pull request?
This PR fixes the below HTML/Markdown syntax error in sql-migration-guide.md

Why are the changes needed?
docfix
Does this PR introduce any user-facing change?
no
How was this patch tested?

Was this patch authored or co-authored using generative AI tooling?
no

Merged to master and 3.5


Putting the English names in parenthesis

This is Fahd.
The list of languages here is indeed the list given to us as the top 7 NYS languages required by the https://www.ny.gov/language-access-policy. I believe it covers the ones you have listed; I do not know if the translation of Chinese actually is Mandarin or Cantonese, but Steven (cc'ed) would know. Also, Italian isn't on the list based on the page above.
NYC has a larger set which includes right-to-left languages, so we decided to aim for that on the second version of the app: https://www1.nyc.gov/site/planning/about/language-access.page
Your idea for putting the English names in parenthesis is a good one. @Boskin, Michael (HEALTH) would you mind putting this in as an enhancement issue? It should be easy since it's content only.

I will add design for this in a few minutes

My Language.docx
On the settings menu, for all languages besides English, please make sure that the English translation "My Language" appears in parenthesis (see first image in attachment).
On the language selection menu, please make sure the English translation of all non-English languages is in parenthesis. See the "Espanol (Spanish)" line as an example in the attachment.

Looks good to me. Assigning to @floridemai since he's been dealing with most of the translation issues and this is close to that. Please reassign as needed.

 I do not see this in Build 40. Awaiting confirmation on which build this is going into.

@kevin-sheldon I was expecting a new build yesterday but there wasn't one. I've made a new build just now, 41, which should include this.

Looks good to me. Thank you!

Looks great guys!! Closing.


 Might not be useful at all https://developer.apple.com/wwdc24/10118?time=1027

Doesn't seem to work


[Feature]: io_uring support

Description of new feature
io uring is really much faster. hope gnet can port it asap too.
Scenarios for new feature
performance
Breaking changes or not?
No
Code snippets (optional)
No response
Alternatives for new feature
None.
Additional context (optional)
None.

io_uring support is on our roadmap. It may be implemented someday, but there is no specific guarantee for that.
epoll should suffice to support the most cases, thus io_uring shouldn't be so pressing at this point. Are you experiencing some performance bottlenecks currently?

@panjf2000 sry for late reply.
my only perf bottleneck is without io_uring.
this benchmark is like an eyesore, it makes my gnet implementation looks terrible.
https://github.com/y001j/uringnet

@panjf2000 can u pls help with standardizing the example for use with tls? it's already there but there doesnt seem to have support or example on how to use it.
please support it with examples for https / tcp connection:
https://github.com/gnet-io/tls
can u take a look into this? i'm trying to upgrade redhub to use v2 and tls:
https://github.com/sprappcom/redhub/blob/main/redhub.go

I think #565 is still WIP.

Duplicate issue, move to #327

🤖 Non-English text detected, translating...

Duplicate issue, move to #327


Modules missing for desktop preview in recent alphas

Could not determine the dependencies of task ':myProject:configureDesktopPreview'.
> Could not resolve all task dependencies for configuration ':myProject:detachedConfiguration4'.

     Searched in the following locations:
       - https://repo.maven.apache.org/maven2/org/jetbrains/compose/preview-rpc/1.2.0-alpha01-dev755/preview-rpc-1.2.0-alpha01-dev755.pom

https://repo.maven.apache.org/maven2/org/jetbrains/compose/preview-rpc/ has dev620 as most recent
I believe this repo is not configurable via project settings
IntelliJ IDEA 2022.1.4 (Ultimate Edition)
Build #IU-221.6008.13, built on July 19, 2022

repositories {
    maven(url="https://maven.pkg.jetbrains.space/public/p/compose/dev/")
}

repositories {
    maven(url="https://maven.pkg.jetbrains.space/public/p/compose/dev/")
}

I have this repo configured already, problem is that preview-rpc repo hardcoded somewhere in IDE plugin

That was my project configuration problem.
preview-rpc should be successfully resolved from https://maven.pkg.jetbrains.space/public/p/compose/dev/

Please check the following ticket on YouTrack for follow-ups to this issue. GitHub issues will be closed in the coming weeks.


Switch to Node.js v4.x installation

Also added build-essential to the list of installed packages. Lots of modules on npm need building during installation so I can't see any reason not to include this by default.
Closes #3

LGTM


Bugfix 3186 second

As mentioned in bugfix 3186 (http://code.opencv.org/issues/3186)
Tried to incorporate remarks made in last pull request, which got merged but then reverted back due to breaking stuff down. (https://github.com/Itseez/opencv/pull/1376)

I would like to be able to fix this bug. I'll check it out myself, but does anyone know what part of the PR actually broke the build?

Not really sure what you are going to fix? This is a PR from 2013 which has since then been solved as far as I know...

This bug was never fixed. The PR was reverted, and the problem still occurs. I was able to update the patch to fix it, though, and will submit a new PR when I have time.

@lopsided98 Thanks! Looks like this fix is available in master branch (see #6313). Could you try it?


Fix deployment for new versions

Every time a new version is pushed the deployment workflow correctly creates the docs for the tag but then pushes the additional changes in the docs to a new branch called with the tag name.
In addition to that, the links in the generated Markdown pages need to be reverted to the name of the intended branch, otherwise, they will point to a specific version: it's not that big of a problem since when a new version is published it is from the master branch, but it's better to keep it right in case anything breaks in the future. This could be easily done with a script

Edit: this is probably caused by the latest-tag workflow, which is currently creating docs too. This generation is redundant, since the docs are also triggered by tags push, and so can be removed altogether.


Explore Internet Computer blockchain implementation

Explore Internet Computer blockchain implementation.

Following is an overview of Internet Computer blockchain implementation, as of version release-2023-07-12_23-01 (July 2023).
General Structure
Internet Computer, a.k.a. Internet Computer Protocol (ICP), is a general-purpose blockchain system developed by the DFINITY Foundation. ICP replica node implementation is written in the Rust programming language. There are abstract interfaces (traits) for almost all components. Some parts of the code are implemented in async Rust, using the tokio framework; though, native threads are also used with std::thread, threadpool, and scoped_threadpool. The components mostly interact by calling each others trait methods. To deal with concurrency, the code widely uses traditional synchronization primitives, such as mutexes and reader-writer locks behind reference-counting pointers. It also makes use of async channels from tokio::sync, as well as sync channels from std::sync::mpsc and crossbeam_channel.
The general architecture of the ICP replica implementation is centered around the notion of artifact pool. The artifact pool is essentially a collection of artifacts of certain kind produced by the local replica or received from peer nodes. Generic artifacts are represented with the Artifact type. The ArtifactAttribute type represents the value that is used in the P2P layer to determine whether an artifact is interesting to a replica; the ArtifactId type is used to uniquely identify an artifact; ArtifactTag is used to indicate an artifact type. These types enumerate all kinds of artifacts. There is also the ArtifactKind trait, which is mostly a convenience to pass around a collection of types specific to a concrete kind of artifact; the ic_types::artifact_kind module implements this trait for all kinds or artifacts. Advert type parameterized with ArtifactKind represents pieces of GossipAdvert, artifact advert, which is sent to peers and indicates that the node has a certain artifact in its artifact pool.
Every artifact pool is split into two sections: one for validated and one for not yet validated, "unvalidated" artifacts. All artifact pools implement the MutablePool and ValidatedPoolReader traits. MutablePool allows inserting and removing unvalidated message artifacts, as well as applying a set of pool-specific change actions given a source of local time. ValidatedPoolReader is supposed to provide read-only access to the validated section of the artifact pool.
The ArtifactManager trait implemented by ArtifactManagerImpl coordinates the pools for different artifact kinds. It does that through instances of the ArtifactManagerBackend trait implemented by ArtifactClientHandle, which acts as a thin translation layer between the generic and pool-specific artifact types. ArtifactManagerImpl implements the ArtifactManager trait by simply dispatching the method calls to the corresponding ArtifactManagerBackend, depending on the artifact kind.
ArtifactClientHandle combines a sending side of a crossbeam channel for sending new messages to insert into the corresponding pool and instances of the ArtifactClient and TimeSource traits. It implements the on_artifact method of ArtifactManagerBackend by time-stamping the message using the TimeSource and sending it to the channel; all other methods are simply delegated to the ArtifactClient.
The channels used in instances of ArtifactClientHandle come from the run_artifact_processor function, which creates an unbounded crossbeam channel and spawns a native thread for receiving and processing messages from that channel. The thread runs the  process_messages function, which tries to receive a batch of messages from the channel, updates the TimeSource by calling the update_time method of SysTimeSource, processes the messages by calling the process_changes method of the supplied instance of ArtifactProcessor, and calls the supplied send_advert function for each of the returned artifact adverts. Note that this is the only place in the core code where SysTimeSource::update_time is called.
ArtifactProcessor is implemented for generic instances of the MutablePool trait by the Processor type in the ic_artifact_manager::processors module. It wraps the artifact pool, protected by a reference-counted reader-writer lock, together with an instance of the ChangeSetProducer trait. Artifacts are processed by inserting them into the MutablePool, producing change actions with the ChangeSetProducer, applying the change actions back to the MutablePool, and returning the resulting artifact adverts. A similar implementation of ArtifactProcessor exists for the ingress pool, which manages signed messages received from the end user. There is also an implementation of ArtifactProcessor for StateSync, which coordinates certifying checkpoints of the replicated state and fetching it from peers.
ChangeSetProducer is implemented by the components serving corresponding artifact pools, e.g. by ConsensusImpl. Its on_state_change method inspects the artifact pool passed by a read-only reference and returns a set of pool-specific change actions. Those actions are supposed to be applied back to the pool with the apply_changes method of MutablePool. The change actions are pool-specific, e.g. they can instruct the pool to add/remove/move artifacts to/from/between the pool sections or purge certain artifacts from the pool based on some attributes.
Most of the top-level components are created in the construct_ic_stack function, which is invoked from replica's main function. In particular, construct_ic_stack creates the following important components:

TimeSource implemented by SysTimeSource, which is the source of local time for the core components;
ConsensusPool implemented by ConsensusPoolImpl, which maintains the consensus artifacts;
StateManager implemented by StateManagerImpl, which is responsible for certifying the replicated state and fetching it from peer nodes;
MessageRouting implemented by MessageRoutingImpl which is responsible for delivering finalized batches for deterministic processing.

To create the consensus and communication components, construct_ic_stack invokes the setup_consensus_and_p2p function, which creates and sets up the following components:

further artifact pools, which maintain other kinds of artifacts, by invoking the init_artifact_pools function;
ArtifactManager implemented by ArtifactManagerImpl, which provides an interface between the gossip layer and the artifact pools, by calling the setup_artifact_manager function;
Transport implemented by TransportImpl, which is provides peer-to-peer connectivity with peer nodes, by calling the create_transport function;
the gossip layer by calling the start_p2p function.

Communication
IPC replica nodes communicate with each other through a gossip layer built on top of a transport layer based on mutually-authenticated TLS streams over TCP connections (optionally HTTP/2). It keeps the number of open connections low: the overlay topology defines which nodes connect directly to each other. The gossip protocol follows an advertise-request-response communication pattern and promises its clients eventual/bounded delivery of artifacts from artifact pools. Gossip layer clients take control of artifact retention and prioritization.
Transport Layer
The peer-to-peer connectivity layer is based on the "fire and forget" principle, i.e. no delivery guarantees. It is represented by the Transport trait, which has the following methods:

set_event_handler for setting an instance of TransportEventHandler, which is invoked to handle inbound messages;
start_connection and stop_connection for initiating and dropping a connection to the specified peer;
send for enqueuing a message to be sent to the specified peer;
clear_send_queues for purging any messages queued for the specified peer.

TransportEventHandler is a type alias for a tower service with TransportEvent as the request, unit as the response, and Infallible as the error types. TransportEvent enumerates PeerUp(NodeId), PeerDown(NodeId), and Message(TransportMessage) variants, where TransportMessage is a peer ID combined with TransportPayload, a newtype for a vector of bytes.
The Transport trait is implemented by the TransportImpl type. The create_transport function creates an instance of Transport. TransportImpl maintains, among other things, a set of peers allowed to connect to the node (allowed_clients) and a map from the peer ID to an instance of the PeerState structure (peer_map), both protected with tokio asynchronous reader-writer locks. The peer map is populated in the start_peer_connection method, which is called from the implementation of the start_connection method of Transport. Whether the local node dials the peer or waits for an incoming connection from it is determined in the connection_role function by comparing the peer IDs.
Inbound messages are passed to TransportEventHandler that was set with the set_event_handler method; outbound messages are enqueued to a send queue that is a part of PeerState maintained for the corresponding peer in the peer map. The send queue is represented with the SendQueue trait, which is implemented by the SendQueueImpl type. The implementation is based on a bounded tokio MPSC channel. If the channel is full then any attempt to enqueue another message to the queue returns the message back to the caller.
The create_connected_state function is invoked once a connection with a remote peer is established, either when accepting an incoming connection or establishing an outgoing connection. It spawns tokio tasks for reading from and writing to the connection stream by calling the spawn_read_task and spawn_write_task functions, respectively. The read task reads messages from the connection stream one at a time and passes them to the TransportEventHandler in a loop; the write task dequeues messages from the send queue one at a time, serializes them, and writes the payload to the connection stream. Thus there is back pressure (flow control) applied by the transport layer for each connection, which throttles/suspends the flow of messages to match the pace of TransportEventHandler, but it may cause outbound messages to get dropped if the sender-side queues become full.
Gossip Layer
The gossip layer is represented by the Gossip trait, which defines the following types and methods:

GossipAdvert, GossipChunkRequest, GossipChunk, GossipRetransmissionRequest types of an artifact advert, a request for and a chunk of an artifact, and a request to retransmit a range of artifact adverts, respectively;
on_gossip_advert, on_chunk_request, on_gossip_chunk, on_gossip_retransmission_request methods for handling an artifact advert, a request for and a chunk of an artifact, and a request to retransmit a range of artifact adverts, received from another peer, respectively;
broadcast_advert method for broadcasting an artifact advert to other peers;
on_peer_up and on_peer_down methods for notifying the gossip layer about connected and disconnected peers;
on_gossip_timer method to be called regularly for triggering internal events.

The Gossip trait is implemented by the GossipImpl type. GossipImpl uses the supplied instance of Transport as a transport layer, ArtifactManager to manage artifacts, and ConsensusPoolCache with RegistryClient to determine node's membership and the topology. It maintains, among other things, an instance of the DownloadPrioritizer trait implemented by the DownloadPrioritizerImpl type for tracking adverts received from other peers and prioritizing downloads, an instance of PeerContextMap for keeping track of context associated with each remote peer, and an instance of the ArtifactDownloadList trait implemented by ArtifactDownloadListImpl for tracking artifacts being downloaded.
DownloadPrioritizerImpl uses the get_priority_function method of ArtifactManager to obtain ArtifactPriorityFn, which returns a Priority value for the specified artifact determining its priority. PeerContextMap maps from the node ID to an instance of PeerContext, which keeps track of artifact chunks requested from the peer, the time when the peer was last found disconnected, and the time of the last processed retransmission request from the peer. ArtifactDownloadListImpl maintains an instance of the ArtifactTracker type for each artifact being downloaded, which uses an instance of the Chunkable trait obtained from the get_chunk_tracker method of ArtifactManager to reconstruct the artifact being downloaded from the received chunks.
The Gossip trait is implemented by GossipImpl as follows:

The on_gossip_advert method checks if the ArtifactManager already has the advertised artifact, then calls the on_advert method, which registers the advert within DownloadPrioritizer, and then calls the download_next method, which starts downloading the highest-priority artifact chunks from the peer by sending chunk requests returned by the download_next_compute_work method.
The on_chunk_request method attemps to get the requested validated artifact chunk from the ArtifactManager and send it to the peer.
The on_gossip_chunk method calls the on_chunk method to handle the received artifact chunk and then the download_next method, which, as described earlier, starts downloading the next highest-priority artifact chunks from the peer.
The on_gossip_retransmission_request method calls the on_retransmission_request method, which checks if the request should be throttled, clears the send queue for the remote peer in the transport layer, gets adverts for the requested range of artifacts from the ArtifactManager, and sends them to the remote peer.
The broadcast_advert method calls the get_current_peer_ids method, which returns a list of the neighbor peers, and sends the advert to those peers.
The on_peer_up method calls the peer_connection_up method, which clears the send queue for the remote peer in the transport layer if the peer was already connected, and calls the send_retransmission_request method, which sends a retransmission request to the peer using an artifact filter returned by the get_filter method of ArtifactManager.
The on_peer_down methods calls peer_connection_down method, which updates the disconnect time in the instance of PeerContext for the corresponding peer.
The on_gossip_timer method calls the on_timer method, which uses the get_timer_tasks method to check if it is time to perform certain tasks and then performs the required periodic tasks, such as updating the priority functions in the DownloadPrioritizer and pruning the ArtifactDownloadList, sending retransmission requests, refreshing the topology, processing timed-out requests, processing timed-out artifacts, and starting downloading the highest-priority artifact chunks from the neighbor peers.

Inbound messages received by the transport layer are handled with the AsyncTransportEventHandlerImpl, which implements the tower  service as required by Trasnport. AsyncTransportEventHandlerImpl creates separate instances of FlowWorker for each type of gossip message and another one for other transport events. The implementation of the call method dispatches the transport event to the corresponding FlowWorker to execute the method of Gossip responsible for handling that type of event.
FlowWorker coordinates processing of events with bounded concurrency; to that end, it creates a native thread pool and a tokio semaphore. The async execute method of FlowWorker executes the supplied message processing function on the thread pool, after having acquired a permit from the semaphore. This async method can actually block on the thread pool if the number of threads in the thread pool is lower than the initial number of permits in the semaphore, which is the case in the current code with the default configuration since P2P_PER_FLOW_THREADS equals 1. Therefore, the supplied message processing functions should avoid blocking.
The AdvertBroadcaster trait defines an interface to send artifact adverts through the gossip layer, which is implemented by the AdvertBroadcasterImpl type. AdvertBroadcasterImpl sends adverts to the supplied sending handle of a bounded tokio channel. The start_advert_broadcast_task function spawns a tokio task that receives gossip adverts from the supplied receive handle of the channel and passes them to the broadcast_advert method of Gossip, each one in a separate blocking tokio task. This does not preserve the order of broadcast adverts.
Consensus Protocol Implementation
The overall consensus protocol logic is represented by the ConsensusImpl type, which maintains a number of sub-components and  implements the ChangeSetProducer trait by delegating the invocation of the on_state_change method to each sub-component in the round-robin fashion using the RoundRobin type. RoundRobin provides the call_next method, which, on every invocation, calls the next function in the given list of calls, according to the round-robin schedule, and returns as soon as a call returns a non-empty result or if all calls return an empty result. The consensus logic is executed sequentially, from the  corresponding artifact processor thread loop.
There are the following consensus sub-components:

Notary, which notarizes block proposals;
Finalizer, which finalizes the canonical proposal of a round;
RandomBeaconMaker, which creates random beacon shares;
RandomTapeMaker, which contributes to producing on-chain pseudo-randomness;
CatchUpPackageMaker, which creates catch-up packages;
BlockMaker, which creates new block proposals;
Validator, which performs validation of all types of consensus artifacts in the round-robin fashion;
ShareAggregator, which aggregates shares of random beacons, notarizations, and finalizations;
Purger, which removes old artifacts from the consensus pool and old replicated states from the state manager.

The consensus pool, which is served by ConsensusImpl, is an artifact pool implemented by the ConsensusPoolImpl type. Its validated section is backed by persistent storage, whereas the unvalidated section is in-memory. It implements the ConsensusPool, MutablePool, and ValidatedPoolReader traits.  ConsensusPool provides access to the validated and unvalidated pool sections, as well as to the inner consensus cache. The pool sections implement the consensus_pool::PoolSection trait; the cache implements the ConsensusPoolCache and ConsensusBlockCache traits. The PoolReader type is a wrapper around the consensus pool and its cache that provides convenient methods to obtain particular artifacts/messages from the pool; it is passed to on_state_change methods of the consensus sub-components.
The ConsensusClient type implements the ArtifactClient trait. It depends on the implementation of the ValidatedPoolReader trait for the consensus pool and an instance of the PriorityFnAndFilterProducer trait implemented for the consensus pool by the ConsensusGossipImpl type.
Tracing and Controlling Execution
The ICP replica implementation uses structured logging based on the slog crate. It extensively collects numerous metrics using the prometheus crate. The node can be configured for testing purposes to exhibit certain malicious behavior by setting some flags in MaliciousBehaviour section of the node Config. The core components use the supplied instance of the TimeSource implemented by SysTimeSource, as an abstraction of the local clock.


Change github_deploy_key.enc to new value from 'doctr configure'.

The script did not complete, however; it ended with
================== You should now do the following ==================

1. Commit the file github_deploy_key.enc.

Traceback (most recent call last):
  File "/Users/efiring/anaconda/envs/test/bin/doctr", line 11, in <module>
    sys.exit(main())
  File "/Users/efiring/anaconda/envs/test/lib/python3.5/site-packages/doctr/__main__.py", line 393, in main
    return process_args(get_parser(config=config))
  File "/Users/efiring/anaconda/envs/test/lib/python3.5/site-packages/doctr/__main__.py", line 211, in process_args
    return args.func(args, parser)
  File "/Users/efiring/anaconda/envs/test/lib/python3.5/site-packages/doctr/__main__.py", line 379, in configure
    """.format(options=options, N=N)))
KeyError: 'deploy_directory'

We need to check of doctr successfully added the key and we need to commit github_deploy_key.enc too.

The key was added:
The following SSH key was added to the TEOS-10/python-gsw repository by efiring:

Doctr deploy key for pushing to gh-pages from Travis
5e:22:66:d1:2c:60:b3:a9:58:4d:17:c6:e9:62:13:b2

If you believe this key was added in error, you can remove the key and disable
access at the following location:

https://github.com/TEOS-10/python-gsw/settings/keys

we need to commit github_deploy_key.enc too.

Sorry I meant update the secret in .travis.yml. See https://github.com/TEOS-10/python-gsw/blob/master/.travis.yml#L7

But where does that come from?

I guess that b/c the command fail you mat not have seen it.

But where does that come from?

@efiring the doctr failure is fixed and we can retry this as when the new release is up.
See https://github.com/drdoctr/doctr/issues/179


🌱 Bump CAPI to v1.5.1

What this PR does / why we need it:
Uplifts CAPI to latest stable patch release

/test all

/test-centos-e2e-integration-main
/test-ubuntu-integration-main

/test-centos-e2e-integration-main
/test-ubuntu-integration-main

/test-centos-e2e-integration-main
/test-ubuntu-integration-main

/assign @kashifest


ch03: notebook updates

Updates to 03-dict-set/03-dict-set.ipynb to include 2nd edition updates (executed using Python 3.10)
Minor updates to 03-dict-set/README.md to target script in 03-dict-set/

Added this content to https://github.com/fluentpython/example-code-2e/pull/28


Error adding 3rd node, fresh install

On a fresh install of a 3rd Raspberry Pi running Ubuntu 20.04.2 I got this error:
ubuntu@ubuntu:~$ microk8s join <IP_ADDRESS>:25000/e3f8cf6fd52188d27fb2e134e4451b4f
Contacting cluster at <IP_ADDRESS>
Waiting for this node to finish joining the cluster. ..
Traceback (most recent call last):
  File "/snap/microk8s/2049/scripts/cluster/join.py", line 967, in <module>
    join_dqlite(connection_parts)
  File "/snap/microk8s/2049/scripts/cluster/join.py", line 900, in join_dqlite
    update_dqlite(info["cluster_cert"], info["cluster_key"], info["voters"], hostname_override)
  File "/snap/microk8s/2049/scripts/cluster/join.py", line 856, in update_dqlite
    restart_all_services()
  File "/snap/microk8s/2049/scripts/cluster/join.py", line 784, in restart_all_services
    stderr=subprocess.DEVNULL,
  File "/snap/microk8s/2049/usr/lib/python3.5/subprocess.py", line 581, in check_call    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/snap/microk8s/2049/microk8s-stop.wrapper']' returned non-zero exit status 1

I am unable to start microk8s successfully
Inspect report: inspection-report-20210228_031910.tar.gz
The master node does show that one under datastore master nodes: with my 2nd one.

I've since ran the inspect, logged out of the machine, logged back and in microk8s status shows the cluster running correctly and in high-availability from the 3rd node. Not sure if it is helpful to figure out what happened during the cluster join or not so I grabbed another inspect (it's possible it was working during the first one and I was in some sort of race condition between checking status and the inspect command)
inspection-report-20210228_032916.tar.gz

Its strange, since i dont see other nodes from the inspect tarball.  It looks like it didn't join successfully.
If you run microk8s status on node3, do you see all the nodes?

Yeah, status on node3 does show all the nodes (node3 is <IP_ADDRESS>):
ubuntu@ubuntu:~$ microk8s status
microk8s is running
high-availability: yes
  datastore master nodes: <IP_ADDRESS>:19001 <IP_ADDRESS>:19001 <IP_ADDRESS>:19001
  datastore standby nodes: none
addons:
  enabled:
    ha-cluster           # Configure high availability on the current node
  disabled:
    dashboard            # The Kubernetes dashboard
    dns                  # CoreDNS
    helm                 # Helm 2 - the package manager for Kubernetes
    helm3                # Helm 3 - Kubernetes package manager
    host-access          # Allow Pods connecting to Host services smoothly
    ingress              # Ingress controller for external access
    linkerd              # Linkerd is a service mesh for Kubernetes and other frameworks
    metallb              # Loadbalancer for your Kubernetes cluster
    metrics-server       # K8s Metrics Server for API access to service metrics
    portainer            # Portainer UI for your Kubernetes cluster
    prometheus           # Prometheus operator for monitoring and logging
    rbac                 # Role-Based Access Control for authorisation
    registry             # Private image registry exposed on localhost:32000
    storage              # Storage class; allocates storage from host directory
    traefik              # traefik Ingress controller for external access

What about microk8s kubectl get no?

ubuntu@ubuntu:~$ microk8s kubectl get no
NAME     STATUS   ROLES    AGE   VERSION
ubuntu   Ready    <none>   19h   v1.20.2-34+c6851e88267786

kubectl shows 1 node on each of the machines. I also took these inspects from them (named):
master-inspection-report-20210228_225700.tar.gz
node2-inspection-report-20210228_225710.tar.gz
node3-inspection-report-20210228_225702.tar.gz

I think i know what's happening.  All you nodes hostname are ubuntu. Is it right?
Each node must have a unique name.  And each node's hostname must be resolvable from eacch node.
For example, you have these hostnames.
node1, node2 and node3.
Add each of the node's hostname to /etc/hosts of each node prior to joining.
Can you try that?  I think that may have caused the issue during cluster formation.

Making each node's hostname unique (ty!) allowed the install to get a little further and add a second node & see it in microk8s kubectl get no. After adding the 3rd node (k8snode2) they all dropped and won't microk8s start anymore. I did get the same error during the first join (of k8snode3):
ubuntu@k8snode3:~$ microk8s join <IP_ADDRESS>:25000/0ae26ad82350bf4aba56a235dbe7c980
Contacting cluster at <IP_ADDRESS>
Waiting for this node to finish joining the cluster. ..
Traceback (most recent call last):
  File "/snap/microk8s/2049/scripts/cluster/join.py", line 967, in <module>
    join_dqlite(connection_parts)
  File "/snap/microk8s/2049/scripts/cluster/join.py", line 900, in join_dqlite
    update_dqlite(info["cluster_cert"], info["cluster_key"], info["voters"], hostname_override)
  File "/snap/microk8s/2049/scripts/cluster/join.py", line 856, in update_dqlite
    restart_all_services()
  File "/snap/microk8s/2049/scripts/cluster/join.py", line 784, in restart_all_services
    stderr=subprocess.DEVNULL,
  File "/snap/microk8s/2049/usr/lib/python3.5/subprocess.py", line 581, in check_call    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/snap/microk8s/2049/microk8s-stop.wrapper']' returned non-zero exit status 1

k8snode2-inspection-report-20210301_045040.tar.gz
k8snode3-inspection-report-20210301_045042.tar.gz
k8snode1-inspection-report-20210301_045325.tar.gz
Although I did set up the /etc/hosts and the hostname on the machines my gateway is still displaying them all as hostname ubuntu, although I'm not sure that matters? I'm using auto DHCP name server on a Unifi UDM Pro.

Question, did you do redo the whole setup?  And you issued snap remove microk8s --purge?

I did not use the --purge option, so I went ahead and reinstalled on used sudo snap remove microk8s --purge on 2 of the machines. There seemed to be an issue on one of the machines after a fresh install:
ubuntu@k8snode2:~$ sudo snap install microk8s --classic --channel=1.20/stable
Run configure hook of "microk8s" snap if present                                    -microk8s (1.20/stable) v1.20.2 from Canonical✓ installed
ubuntu@k8snode2:~$ microk8s status
microk8s is not running. Use microk8s inspect for a deeper inspection.
ubuntu@k8snode2:~$ microk8s start
Started.
ubuntu@k8snode2:~$ microk8s status
^CTraceback (most recent call last):
  File "/snap/microk8s/2049/scripts/wrappers/status.py", line 231, in <module>
    enabled, disabled = get_status(available_addons, isReady)
  File "/snap/microk8s/2049/scripts/wrappers/status.py", line 157, in get_status
    kube_output = kubectl_get("all")
  File "/snap/microk8s/2049/scripts/wrappers/common/utils.py", line 166, in kubectl_get
    return run("kubectl", kubeconfig, "get", cmd, "--all-namespaces", die=False)
  File "/snap/microk8s/2049/scripts/wrappers/common/utils.py", line 35, in run
    args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env
  File "/snap/microk8s/2049/usr/lib/python3.5/subprocess.py", line 695, in run
    stdout, stderr = process.communicate(input, timeout=timeout)
  File "/snap/microk8s/2049/usr/lib/python3.5/subprocess.py", line 1072, in communicate
    stdout, stderr = self._communicate(input, endtime, timeout)
  File "/snap/microk8s/2049/usr/lib/python3.5/subprocess.py", line 1715, in _communicate
    ready = selector.select(timeout)
  File "/snap/microk8s/2049/usr/lib/python3.5/selectors.py", line 376, in select
    fd_event_list = self._poll.poll(timeout)

I'm going to flash the drives with a fresh install of ubuntu server, verify unique hostnames, and try again today at some point.

Let me know how it goes.  Usually fresh starting a MicroK8s node can take sometime.
I usually i do microk8s status --wait-ready.
The error you get above is because you cancelled the status command. ^C

Ok, I think I am up and running. I may have been adding new nodes too quickly before too, I waited until I could verify each new node was up before running microk8s add-node and adding running that on the next machine.
I think this topic can be closed unless there may be docs to update somewhere?

Thanks @jonshaffer for the information provided.
I will go ahead and close this.
Feel free to log an issue should you face one.


feat: dotnet plugin

add plugin for dotnet sdk versions 6, 7, and 8

Of course! I really like the project :)

Hey @aooohan Just had to add a new env var to support tools like ef-core :)


add --production flag and clean cache

@PhilipGough Could you review this as well ?

@sebastienblanc
This looks good to me. Not sure if the failing Travis is an issue?

No Travis does not make a lot of sense here
On Thu, Jul 21, 2016 at 11:42 AM, Philip Gough<EMAIL_ADDRESS>wrote:

@sebastienblanc https://github.com/sebastienblanc
This looks good to me. Not sure if the failing Travis is an issue?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/feedhenry-raincatcher/raincatcher-cli/pull/3#issuecomment-234206331,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAUdHXXn2zXtXlH_A6Jf6yNnMqBs7DS0ks5qXz8UgaJpZM4JRmpB
.