RFC: Curriculum Enhancement - OSSU-created Course Syllabus/READMEs

Problem:
The OSSU curriculum provides a listing of courses and a link to the course homepage, but this is often not sufficient information to complete the course, and students often remain unaware of resources that can help them succeed.
Duration:
6 weeks; January 11, 2022. (Extended due to various overlapping holiday seasons worldwide.)
Background:
Some students have voiced concerns that the course material is not convenient to access and/or doesn't tell the full story of how to complete the course. A few examples:

In the beginning course of the program, Python for Everybody, OSSU links to the course creator's Py4E homepage, which contains links to several different versions of the course. People are commonly confused as to which version of the course should be chosen, how to get started, and why some versions are asking for money when OSSU is supposed to be free. There exists insider knowledge stating that the course should be taken directly on py4e.com, but this is not communicated unless people ask in the Discord channel.
In another early course, How To Code, OSSU links directly to an EdX enrollment landing page which asks for payment to go Verified. The course paywalls a portion of the course content, confusing people into believing that they are missing out on a substantial portion of the course. There exists insider knowledge stating that the paywalled content can be ignored safely, but this is not communicated unless people ask in the Discord channel.
In a core course, Operating Systems - Three Easy Pieces (OSTEP), OSSU links to the course creator's course homepage. While informative, this page is not easy to navigate, and it is easy for people to miss the step-by-step list of assignments and the supporting material which assists with those assignments. Further, at least one unofficial source links to the course creator's textbook homepage, which resides at the same website and is easy to mistake for the course homepage. It is less easy to navigate, and confusingly contains some (but not all) of the material for the course.

In each of these circumstances, completion of the courses is made more difficult due to lack of information about how to use the materials available. Such problems could be mitigated by the development of a course README or syllabus for each class in the OSSU curriculum.
Some of this is currently mitigated by the existence of the OSSU Discord, and indeed the individual Discord course channels hold pinned posts conveying much of this information. However, in my view we should not assume that:

all OSSU curriculum users are on the OSSU Discord,
all OSSU Discord users are aware of information in the pinned posts, or
the subset of OSSU Discord users that are aware of pinned posts are actively checking the pinned posts for information crucial to the successful completion of the course.

Further, there is precedent around the notion that the OSSU Github page should be the one, true official repository of OSSU course information. For that to be the case, in-group knowledge gained by current students should be communicated to the community-at-large via the official channels. This enables those official channels to stand alone.
The OSSU curriculum page provides high-level information about every course in the curriculum, similar to a university's course catalog. It is probably not the appropriate place to communicate a lot of course-specific information.
The solution I am proposing involves creating a place for OSSU to communicate course-specific information, similar to a university's course syllabus. The OSSU curriculum page could then link to the syllabus for each course. Such a page could also be considered a README for the course.
Advantages would include:

It provides a central location to contain and maintain course information.
It standardizes the course - allowing students to know exactly what work must be completed to finish the course, and where to find all the relevant resources.
It can improve student experience, positively impacting student outcomes and program retention.
It provides for the archival and persistence of inside information. As students complete a course, they tend to hang around the Discord for a few weeks, then either leave OSSU entirely or concentrate their attention on another course. In either instance they take their valuable inside information with them. In popular courses some of this knowledge is perpetuated; in many later courses with few users, much of this inside information is likely lost until rediscovered by another student.
It provides consistency of information, so that the information provided to anybody who asks represents the best information known to all in OSSU.

Potential disadvantages would include:

The mere existence of a syllabus/README does not guarantee that people will willingly use it. We can mitigate this by making the pages a) lean, b) useful, and c) easy to navigate. Once they are developed, we can reconfigure the OSSU course page to link to the README instead of directly to the course, ensuring that all new users at least see it once.
This will permanently increase the amount of development and maintenance time on the curriculum as a whole. Approximately 30 README pages will need to be created and maintained. We should crowd-source this effort by creating a standard template and encouraging people to make PRs during and after their time in the courses.

Proposal:
Provide a README file comprising a course syllabus for each course in the OSSU curriculum.
In order to maximize added value, each syllabus should prioritize, in the following order:

leanness -- the syllabus should contain only the information needed to aid in course completion, with only minimum narrative. Instructions should be terse and easy to follow -- "go here, do this".
usefulness -- the syllabus should contain all of the information needed to succeed in the course, along with any supporting documentation or alternate sources.
ease of navigation -- course material should be laid out in a linear, easy-to-follow manner. Lists and tables should be utilized wherever appropriate.

The syllabus should include the following information at a minimum:

A statement of course objectives, to provide motivation for completing the course. This should be no longer than 2 sentences.
A statement of course outcomes, or a listing of the specific competencies in CS2013 the course is thought to cover/satisfy.
A list of immediate prerequisites and a statement of the expected duration of effort.
A Getting Started section, which shall contain:

A link to the website, "start" page, or lander where the course resides.
"Turn-by-turn" directions for new student onboarding: choosing which section of the course to sign up for, how to sign up, whether or not payment information is required, and anything else required to enroll.
Include any assurances that the complete course is available for free, or any time durations users should understand before starting ("free access expires in 6 weeks, so don't sign up until you're ready to work", etc.)
A short list of 1-2 alternate locations for accessing course content (if applicable) with a clear statement that these locations are OPTIONAL.

A Course Materials section, which shall contain either:

A link to the Course Materials page of the course website, or
A list of all lessons in the course, with a link to each individual lesson or the beginning of each chapter/section.
Also, a list of any Supplementary Materials (course videos, recitation sections, optional lectures, etc.) This could include a short, 1-line note motivating why a student may want to use these supplements ("recitation videos provide guided homework practice!", etc.)

An Assignments section, which shall contain either:

A link to the Assignments page of the course website, or
A list of all assignments in the course, with a link to each individual assignment.

(Stretch Goal) A Roadmap To Completion checklist section, which could optionally replace the lessons list in "Course Materials" and the assignment list in "Assignments". It may look like:

"Perform the steps in Getting Started"
"View and take notes on Lessons 1.1-1.4"
"Complete Homework 1, located --here--, as discussed in --this-- recitation video"
"View and take notes on Lessons 2.1-2.5"
etc.
"Complete Final Exam and submit for approval"

Alternatives:

Keep the status quo. This alternative involves the least effort in the short-term, but students will continue to experience the highest level of confusion while using OSSU course materials.
Expand the OSSU curriculum page to contain a subset of this information. I feel this is the worst option because the curriculum page serves as a course catalog, and it is already monolithic. Further, it is the official "landing page" for new users of the program. Adding more information on this page would likely make this page even less useful.

Credit to @johnwesely for bringing this to my attention and inspiring this RFC, and for his work on an initial syllabus mockup for review & comment

I wrote up this sample ReadMe this morning for OSTEP. It is missing several of the requirements listed above and might be a little on the fat side. However, because this course is not a MOOC and is ultimately student directed, it may be best to have a more robust readme.

I support this RFC. I recall that the link for Py4E course was changed from py4e.com to py4e.com/lessons to reduce confusion and funnel students toward the website version of the course. There are still questions regarding where to take this course, so clearly greater reinforcement is needed.
I do not think it should be assumed that users on the OSSU Discord regularly/thoroughly review the content of the CS GitHub page. I imagine that there are a subset of Discord members who have never seen the GitHub page prior to joining the server. I agree that the GitHub pages should be stand alone official sources for course information, however, the Discord server should strive to mirror the course specific content when possible. Dedicating a pinned message for each course to mirror and point to the suggested READMEs should suffice. This is more of a server suggestion rather than a suggested amendment to your RFC.
I would also like to see a Code of Conduct section added to each README that specifies any pertinent information regarding what can/can't be shared for each course.
Great write up for OSTEP John! I agree that more MOOCish courses should be leaner in their syllabus write ups.

I like this, there's a strong case laid out for how this will benefit OSSUnians. My concern is already anticipated in the writeup:

Approximately 30 README pages will need to be created and maintained.

If we have 30 syllabi written up I'm not very concerned about the maintenance (famous last words!). But I am concerned that the proposal could be accepted but few syllabi are written.
Might I make a proposal? The comments and upvotes so far suggest that community members like the idea. Let us proceed as if that is a valid indication of community acceptance. Let's create a syllabi branch. In that branch, each course in the curriculum should have a link to its syllabus. When the branch has complete syllabi for 1/2 of the courses, we'll consider the RFC accepted and merge the branch in to main.
Thoughts?

That sounds like letting great be the enemy of the good. Each syllabus that is added would add value to the curriculum. Why only merge if at least half the courses get syllabi?

letting great be the enemy of the good

I wouldn't categorize "We said we'd do X and couldn't achieve half of X" as being good...

I'd like to propose a different course of action.
We could (and should) prioritize the high-traffic introductory courses. Basically, everything in Intro to Programming, Intro to Math, and Core Programming. Doing so is going to help the most people the fastest, and we can get quick feedback on whether or not course syllabi are helpful/used. If they don't seem to make a difference, we can abandon the concept without spending the time implementing all of them. At the same time, it's not going to take us covering half the courses to get half the signal we need.

That works for me. We'll create a syllabi branch, populate it with a syllabus for the courses in Intro to CS, Core Programming and Core Math (essentially the curriculum through Math for CS). We already have a page for OSTEP. Once those are written up, we'll consider the RFC accepted and merge the branch in to main. Then over the next 1/2 year or so we can judge the reception to the change. If it's not working out (when asked, students don't indicate that they are using them; contributors are not interested in writing additional syallbi) we can roll back; if the template needs changing a new RFC can introduce it.
 In fact, when I first saw this RFC I thought, "Didn't we say we would do this awhile back?" (Speaks to both why I think this is a good idea, and why I want to have a number of syllabi complete before committing ourselves to a long term effort)

I actually saw that after I did my write up. Spam's writeup is much better than mine, and is probably a better choice OSTEP.

Just came here to say that I recently started my "computer science" with OSSU, and didn't know that Discord had pinned and useful resources.
I think that at least a link to in the README and an explanation that would be already so useful :)

V

#990

Propose withdrawal of this RFC for lack of support.
Comment Period: 2 weeks, thru 27 July 2022

It's worth noting that we already have the first course page. spamegg argued convincingly that we shouldn't lose the very helpful information that was collated on OSTEP (referenced above).
So the seal is broken. I do not think that this should compel contributors to make a coursepage for every course. But contributors should feel free to create a course page if they feel the information necessary to succeed in a course is not easily found.

This is not a community priority at this time. Withdrawing RFC as proposed.


Fixed Notebooks

Are the changes to the NHS app validation notebook correct? They seem to be undoing the remove of of OD withdrawals?

I found out that Abdu made these changes, details here:

It looks like the changes you have submitted here are reversing the change Abdu made, plus reverting the threshold back from 25 to 20. Shall we jump on a call at some point and check?


Add JSON-focused filtering to JSON-import dialog

The JSON-import dialog currently permits a user to select non-JSON files.

Merged into develop


password ending with @

I used a randomized password wich ended on @. Is there a way to push the app with authentication on?
Like: couchapp push http://user:asdf@@<IP_ADDRESS>:5984/helloworld
Curl has a -u option where I can specify user and password outside the url.

Hi @holymoly
How about encode asdf@ as asdf%40?
So just push with http://user:asdf%40@<IP_ADDRESS>:5984/helloworld.
I do not test it yet... please let us known if it works or not :smile_cat:

Nope,
 2016-05-04 20:12:16 [CRITICAL] {'msg': '', 'status_int': 401, 'response': <couchapp.client.CouchdbResponse object at 0x109f90d90>}

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/couchapp/dispatch.py", line 45, in dispatch
    return _dispatch(args)
  File "/usr/local/lib/python2.7/site-packages/couchapp/dispatch.py", line 92, in _dispatch
    return fun(conf, conf.app_dir, *args, **opts)
  File "/usr/local/lib/python2.7/site-packages/couchapp/commands.py", line 72, in push
    dbs = conf.get_dbs(dest)
  File "/usr/local/lib/python2.7/site-packages/couchapp/config.py", line 159, in get_dbs
    return [Database(dburl, use_proxy=use_proxy) for dburl in dburls]
  File "/usr/local/lib/python2.7/site-packages/couchapp/client.py", line 227, in __init__
    self.res.head()
  File "/usr/local/lib/python2.7/site-packages/restkit/resource.py", line 122, in head
    params_dict=params_dict, **params)
  File "/usr/local/lib/python2.7/site-packages/couchapp/client.py", line 142, in request
    raise Unauthorized(e)
Unauthorized: {'msg': '', 'status_int': 401, 'response': <couchapp.client.CouchdbResponse object at 0x109f90d90>}

Hmm... This will work currently..
└─[iblis@imfsa]% couchapp push -d http://test:foo\@@localhost:5984/test

But I think that provide cli option like curl does will be more resonable.

thanks


FUSETOOLS2-536 - provide completion for open-api in Camel K modeline

filters on json, yaml and yml files as a first iteration. We don' tknow
yet what is the precise filter for Open APi spec v2.

If we don't know what the Open APi spec v2 holds yet -- is this premature?

If we don't know what the Open APi spec v2 holds yet -- is this premature?

there is for sure json/yaml files. I don't know if there are other formats and how to filter more based on content. At least, it provides completion to known potential files.


adding a simple parallel sleep and fix validation with pytorch

I was trying to run the resnet example and I notice that we were missing the network field.
This may not be necessary with other work in place but figured I'd open something up.
I also added a lightweight example just for testing purposes.

/lgtm
/approve


DOC: stats: Convert chisquare example to notebook

Reference issue
--
What does this implement/fix?
This PR moves the narrative example from the chisquare hypothesis test docstring to a markdown-based notebook.
cc @mdhaber

Great. I'll merge when I see those changes and that CI is green. Thank you!

If you are happy with how this looks, I'll be sending the others soon. I am guessing one PR per example sounds more reasonable, so I may send in several at a time but please don't feel pressured to review them all quickly, take your time 😄 Thanks!

I am guessing one PR per example sounds more reasonable,

Normally, that would be my preference, but actually, these seem straightworward enough to include all in one go if you prefer.

Great. I'll pull the ones I have together and submit soon.

Great. I'll go ahead and merge this one. Two other little things I noticed to keep in mind.
https://output.circle-artifacts.com/output/job/2262f2c8-1c2f-4b7f-b157-f7c24f76fb58/artifacts/0/html/tutorial/stats.html shows

I think that if the function-specific examples are shown in that TOC, they should be at a lower level (more indentation).
Also, in

Both before and now, it's not immediately obvious what the link is for. Is there a way for it to render here like "Extended example: Chi-square test" here even if the page title is just "Chi-Square Test"?

Makes sense. I can fix those in the follow-up, if that's ok with you.


WIP: src/Cedar/WinUi: remove unused functions

[src/Cedar/WinUi.c:7240]: (style) The function 'CbInsertStr' is never used.
[src/Cedar/WinUi.c:9271]: (style) The function 'CheckTextLen' is never used.
[src/Cedar/WinUi.c:9252]: (style) The function 'CheckTextSize' is never used.
[src/Cedar/WinUi.c:8936]: (style) The function 'DialogCreateEx' is never used.
[src/Cedar/WinUi.c:2155]: (style) The function 'EndFreeInfoDlg' is never used.
[src/Cedar/WinUi.c:2171]: (style) The function 'ExecuteHamcoreExe' is never used.
[src/Cedar/WinUi.c:9885]: (style) The function 'FormatTextA' is never used.
[src/Cedar/WinUi.c:9323]: (style) The function 'GetFontSize' is never used.
[src/Cedar/WinUi.c:9841]: (style) The function 'GetMonitorSize' is never used.
[src/Cedar/WinUi.c:9759]: (style) The function 'GetWindowClientRect' is never used.
[src/Cedar/WinUi.c:1134]: (style) The function 'GetWizardPageIndex' is never used.
[src/Cedar/WinUi.c:3964]: (style) The function 'IpClear' is never used.
[src/Cedar/WinUi.c:6851]: (style) The function 'LbAddStr' is never used.
[src/Cedar/WinUi.c:6824]: (style) The function 'LbFindStr' is never used.
[src/Cedar/WinUi.c:7064]: (style) The function 'LbGetSelect' is never used.
[src/Cedar/WinUi.c:6812]: (style) The function 'LbGetStr' is never used.
[src/Cedar/WinUi.c:6900]: (style) The function 'LbInsertStr' is never used.
[src/Cedar/WinUi.c:7012]: (style) The function 'LbSetHeight' is never used.
[src/Cedar/WinUi.c:3652]: (style) The function 'LedDrawRect' is never used.
[src/Cedar/WinUi.c:6000]: (style) The function 'LvGetMaskedNum' is never used.
[src/Cedar/WinUi.c:6037]: (style) The function 'LvSearchStr_' is never used.
[src/Cedar/WinUi.c:5703]: (style) The function 'LvSetItemImage' is never used.
[src/Cedar/WinUi.c:5831]: (style) The function 'LvShow' is never used.
[src/Cedar/WinUi.c:10155]: (style) The function 'NoTop' is never used.
[src/Cedar/WinUi.c:10047]: (style) The function 'NoticeSettingChange' is never used.
[src/Cedar/WinUi.c:7854]: (style) The function 'PkcsUtil' is never used.
[src/Cedar/WinUi.c:8968]: (style) The function 'SetBitmap' is never used.
[src/Cedar/WinUi.c:4539]: (style) The function 'SetMenuItemEnable' is never used.
[src/Cedar/WinUi.c:9918]: (style) The function 'SetTextEx' is never used.
[src/Cedar/WinUi.c:9940]: (style) The function 'SetTextExA' is never used.
[src/Cedar/WinUi.c:11272]: (style) The function 'SetWinUiTitle' is never used.
[src/Cedar/WinUi.c:2132]: (style) The function 'StartFreeInfoDlg' is never used.
[src/Cedar/WinUi.c:3920]: (style) The function 'UiTest' is never used.
[src/Cedar/WinUi.c:1558]: (style) The function 'WinConnectEx2' is never used.
[src/Cedar/WinUi.c:10803]: (style) The function 'WinUiDebug' is never used.
[src/Cedar/WinUi.c:6908]: (style) The function 'CbInsertStr9xA' is never used.
[src/Cedar/WinUi.c:2096]: (style) The function 'FreeInfoThread' is never used.
[src/Cedar/WinUi.c:9644]: (style) The function 'GetTextSize' is never used.
[src/Cedar/WinUi.c:2833]: (style) The function 'GetWindowAndControlSizeResizeScale' is never used.
[src/Cedar/WinUi.c:2001]: (style) The function 'IsRegistedToDontShowFreeEditionDialog' is never used.
[src/Cedar/WinUi.c:6606]: (style) The function 'LbAddStrA' is never used.
[src/Cedar/WinUi.c:6739]: (style) The function 'LbGetSelectIndex' is never used.
[src/Cedar/WinUi.c:6627]: (style) The function 'LbInsertStrA' is never used.
[src/Cedar/WinUi.c:7593]: (style) The function 'PkcsUtilProc' is never used.
[src/Cedar/WinUi.c:6598]: (style) The function 'LbSelect' is never used.
[src/Cedar/WinUi.c:7421]: (style) The function 'PkcsUtilErase' is never used.
[src/Cedar/WinUi.c:7349]: (style) The function 'PkcsUtilWrite' is never used.
[src/Cedar/WinUi.c:2059]: (style) The function 'ShowFreeInfoDialog' is never used.
[src/Cedar/WinUi.c:2013]: (style) The function 'FreeInfoDialogProc' is never used.
[src/Cedar/WinUi.c:6558]: (style) The function 'LbFindData' is never used.
[src/Cedar/WinUi.c:6534]: (style) The function 'LbSelectIndex' is never used.
[src/Cedar/WinUi.c:6488]: (style) The function 'LbGetData' is never used.
[src/Cedar/WinUi.c:6464]: (style) The function 'LbNum' is never used.
[src/Cedar/WinUi.c:2001]: (style) The function 'RegistToDontShowFreeEditionDialog' is never used.
Changes proposed in this pull request:

remove unused functions (identified by cppcheck)

Your great patch is much appreciated. We are considering to apply your patch into the SoftEther VPN main tree.
SoftEther VPN Patch Acceptance Policy:
http://www.softether.org/5-download/src/9.patch
You have two options which are described on the above policy.
Could you please choose either option 1 or 2, and specify it clearly on the reply?

one

PRELIMINARY DECLARATION FOR FUTURE SWITCH TO A NON-GPL LICENSE
I hereby agree in advance that my work will be licensed automatically under the Apache License or a similar BSD/MIT-like open-source license in case the SoftEther VPN Project adopts such a license in future.

I broken app veyor accidently, need time to fix


how to add reverse proxy？

how to add reverse proxy, some countries cannot be accessed directly

Sure, you can add a forward or reverse proxy, but that is beyond this project's scope.
"npm run build" builds the website's distribution files, which you can host on a server to set up the desired proxy.


Clicking on edge overwrites cluster number of cases info

Easy fix, deleted "click" event for vertical edges in beadplot.js


Can't create multiple client-side connections to the same server-channel

I was trying to fixup some code that uses multiple SockJS instances to use WebSocketMultiplex instead.
But it seems that there is an built-in assumption that I can not open more than one simultaneous channel with the same name.
I.e.
   var newsChannelForBob = multiplexer.channel('news');
   var newsChannelForAnn = multiplexer.channel('news');

The second call overwrites the first call's instance in 'channels' registry. This leads to problems down the line.
I think that when I write similar code using 'SockJS' directly this works fine and I simply get two independent socket instances each openening a independent websockets connection to the server, connecting to the same websocket url.
If I am correct (not really 100% sure, as not an expert on websockets) then WebSocketMultiplex isn't really what it purports to be. I.e. a transparant replacement for directly using SockJS.
Is this a problem with WebSocketMultiplex? Or is it rather a bug in my understanding / use of the websocket API?
Is there a way to open multiple independent client side channels to the same server-side 'service'?
I would rather avoid implementing my own multiplexer if possible :-)

This is an ancient issue, but for anyone who's finds themselves here it'd be nice to find a solution. So use a constraint in your request payload to describe the nature of your request to the service, and the same key on the response payload. Written using ES6 syntax:

/* server */

// require stuff, etc.

var searchChannel = mplexer.registerChannel("/search");
searchChannel.on("connection", conn => {
    conn.on("data", req => {
       var {api,id} = req;
       delete req.id;
       delete req.api;
       // assuming you have some apis written here
       service.get("api/"+api)
           .then( res => conn.write(JSON.stringify(merge({},res,{id: id}))) );
    });
});

/* client - Search.js */

import merge from 'object-assign';
import multiplex from './path/to/client/multiplex.js';

var searches = {};
var searchChannel  = multiplex.channel("/search");
searchChannel.on("message",msg => {
    let data = msg.data, id = data.id;
    delete data.id;
    searches[id] && searches[id].emit("response",data);
});

var s = 0;

function Search(api,query){
    searchStreams[s] = this;
    this.id = s;
    this.listeners = {};
    this.api = api;
    this.query = query;

    s++;
}
Search.prototype = {
    find(constraints){
        searchChannel.send(merge({},(constraints || this.query),{id: this.id,api: this.api});
    },
    emit(eventType,payload){
       let eventHandler = "on" + eventType;
       this[eventHandler] && this[eventHandler](payload);
       (this.listeners[eventType] || []).forEach( listener => listener(payload) );
    },
    on(eventType,handler){
       (this.listeners[eventType] || (this.listeners[eventType] = [])).push(handler);
    }
};

export default Search;

/* client  - app.js */

import Search from './path/to/Search.js'

var search1 = new Search("people");

search1.onresponse = function(res){
     console.log(res);
};
search1.on("response",function(res){
    console.log(res[0].name);
});

// with default constraints, say you have a query you're going to be repeating
var search2 = new Search("pets",{legs: 4, color: "brown"});
search2.onresponse = function(res){
    console.log(res[0]);
};

search1.find({gender: "female", status:["single","separated"], smoker: 0});
....
// logs [
   {name: "Becka Spradlin", dist: 2.7, imgUrl: "yourserver.com/images/8jn83.jpg"}),
   {name: "Nell Donahue", dist: 4.3, imgUrl: "yourserver.com/images/ajh7j0sj.jpg"}
   ...
]
// logs "Becka Spradlin"

search2.find();
...
// logs {name: "Alfonse", species: "canine", breed: "labradoodle"}

I think the registration channel is a very stupid design! Are you kidding? Every time the client opens a channel, it needs to register a namespace on the server side corresponding to the channel change? What if some clients open one and some clients open more than one?


Gnome 3.16 support

Please add 3.16 support

It throws an error about Shell.KeyBindingMode being undefined. It's because it was renamed to Shell.ActionMode.
Modifying the line 62 of extension.js removes the error. You only need to replace Shell.KeyBindingMode.NORMAL by Shell.ActionMode.NORMAL

can you test with the current master? (run make install)

tested it, should work now


Id may be reused, and all transactions could be replayed to empty the signer account

Once a fund is claimed, the fund[Id] entry is destroyed.
Anyone can replay the send() and claim() transactions using the same Id, especially the previous recipient. The old transactions will be valid for the reused Id.
The recipient can initiate a cycle of send() and withdraw() replaying the 2 first legitimate transactions and empty the signer account.
You should use a nonce attached to each signer to avoid replay attack, and include the nonce in the signatures in send() and claim(). See EIP1077
A nonce is also a solution for #13 and #14 since it changes the structure of the signed data and prevent replay attack.

I get what you are saying and it is not how the contract is working. Even if the id is reused for a new claim (which I also think needs to be changed), it will remain as an invalid claim unless the claim has the same signer.

Ok I get it. you're right, reusing id is not a security issue.

did we decide we can close this one out? Please do if so. If not, let's figure out next steps. Thanks dudes! Please hit me up on telegram to talk directly too.

I think that this issue can be closed.


Workaround for GROOVY-8936 (NPE in Exception)

When MissingPropertyException is constructed with the "type" parameter
being "null" (for example restoring a serialized pipeline step with this
exception, but the class isn't available anymore), trying to access the
pipeline stage view will lead to a NullPointerException, because
GROOVY-8936 isn't fixed in the Groovy version shipped with Jenkins.
The problem is fixed in beta versions of Groovy 3.0, but it will probably take a long time for this to arrive in Jenkins. (See https://github.com/apache/groovy/pull/844)
I can provide details on how this happens if someone is interested.
Pinging @jglick since he provided the fix to Groovy

As an aside: The test I added will start failing whenever this starts depending on a fixed Groovy version. Maybe that should be documented 😅

I think this is ok, but please document if the test will fail. Don't want nasty surprises.

Now with two tests: One against the broken Groovy class (with documentation) and one against a local class which is broken in the same way.


Fixes date attributes not returning in UTC

My timezone is -3, so I couldn't even run it locally because the test
was expecting it to be -1.

yay my first iOS PR

Thanks for the PR! The tests were indeed incorrect in assuming a timezone. I think however that this is purely a test issue and should not be fixed in the DateFormatter. IMHO the DateFormatter should just return an NSDate from the String, without doing any timezone modifications.
What are your thoughts on this?

Whatever you prefer. I'll change it later.

Ok, done. Ready for review :smile:

I appreciate the work you put in, put I think this can be resolved in an easier way:
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
XCTAssertEqual(json["data"]["attributes"]["dateAttribute"].stringValue, dateFormatter.stringFromDate(foo.dateAttribute!), "Serialized date is not equal.")

I any case, I think we should split the serialization tests into separate tests for each kind of attribute. That way we can also test using different date formats.


Design & UI

User story
As an User i want to have as least distraction as possible to make a quick decision.
Notes / Links / Further Description
Adobe XD Link
ToDos

[x]  First draw
[x]  Logo
[x]  Build "functionality"
[x]  Get ready for review
[x]  Implement changes

issue closed


Cannot create any content on BookStack

Attempted Debugging

[X] I have read the debugging page

Searched GitHub Issues

[X] I have searched GitHub for the issue.

Describe the Scenario
After I emptied my Recycle Bin I started having the following issue:
When was trying to create a new book when I got an error, checked on laravel.log and found:
[2024-08-20 17:55:52] production.ERROR: A non-numeric value encountered {"userId":1,"exception":"[object] (ErrorException(code: 0): A non-numeric value encountered at /var/www/bookstack/app/Http/Controller.php:168)
https://github.com/user-attachments/assets/7b8e9a83-6e43-42be-a7c2-a08f414cde18
Exact BookStack Version
v24.05.3
Log Content
laravel.log
Hosting Environment
Ubuntu 24.04
PHP 8.3.6
Apache 2.4.58
MySQL 8.0.39

Found the issue, when changing the storage settings to be secure and increase the upload size, there was an alphabetic character in the upload size, that broke the whole thing.


Fix

Fix for Issue #9

@CodeBradley you mentioned, that you are extending the code to fit your needs.
If you think others can benefit from your changes, we are always happy to receive PullRequests.

:package:
i just released v.0.1.5 so you can install from PyPi: https://pypi.python.org/pypi/python-uptimerobot/0.1.5


NET 6

Will you be upgrading this repo to NET6 when it is released?

Yes, will try to get that out within a week of the release of net6.

Nice, I am ready to give your scheduler a try for my app.


Perform try_X after X_timeout times out

Fixes the following problem reported by @leodasvacas:
https://discordapp.com/channels/569610676205781012/569610676205781015/581517999773712398

bors r+


initial commit of cometbft test utility

Summary
Added a crate to launch cometbft as a subprocess.
Background
PR https://github.com/astriaorg/astria/pull/327 runs tests against the output of cometbft. It manually adds magic hex strings that are then processed with functions it defines. This is not optimal because there is no easy way to reproduce the strings nor can the code be run against actual responses from cometbft.
This utility allows launching cometbft as a subprocess in tests with its rpc server bound to a random port 0. The launcher returns successfully if it was able to find the TCP port on which cometbft is serving requests.
Changes

Added a cometbft-launcher crate
Added a step in the rust test job to install cometbft v0.37.2

Testing

For now only the functionality of the crate is tested using a blackbox test.

Related Issues
This is useful in PR https://github.com/astriaorg/astria/pull/327.

Status on this: I need to actually use this lib in a test so it does not just sit there and bitrot. Moving to draft until then

This is potentially useful, but is sitting idle for close to a year now.
Mothballing this for the time being. Will revisit at a later date.


[QUESTION] How can I use this package to use in my WCF client?

I am using a SOAP webservice with standard WCF tooling in  Visual Studio.
On my machine that is in Active Directory, passing the Windows Credentials, it works properly, but when I send my app to other PC that is no in AD, the auth fail.
The SOAP webservice, use Kerberos protocol to authenticate users, I was trying to use this in standard SOAP client, but I didn't find a way.
How can I achieve that?

This isn't a client library. It's a server side token validator.

@SteveSyfuhs thanks


Sometimes the whole body gets covered in blood

Often, but not always the whole body of the enemy gets covered by the skingore when shot once. This doesn't happen when running the game in the editor, only in the build version.

I use the following settings when adding the damage:
AddDamage(impactPoint, 0.05F, 1F);
What might be the issue? Do I need to set some build settings before building to avoid this happening?
Thanks

I think that depends on device graphics hardware.
I have 2 devices on Android. And first one have such problems and other one doesn't.


⚠ ClamAV has degraded performance

In 8d97e4e, ClamAV (https://spamassassin.apache.org/) experienced degraded performance:

HTTP code: 200
Response time: 212 ms

Resolved: ClamAV performance has improved in 3d98b7e after 5 minutes.


Local coverage reporting

Context

Adding tests as you develop code is critical.
Being able to see the coverage of those tests is instrumental to knowing what tests are missing and to feeling motivated to write tests.
Being able to get quick feedback on coverage locally (rather than waiting for travis + codecov) can be a huge productivity boost for writing tests to achieve more coverage

Solution
https://github.com/mapbox/cpp#code-coverage describes how to use clang++ and llvm-cov to instrument the code and view code coverage locally.
For the best results this requires:

llvm-cov 4.0.0
the same version of clang++ as llvm-cov to compile the code (so also clang++ 4.0.0)

https://github.com/mapbox/node-cpp-skel/blob/master/scripts/coverage.sh is an example of scripting the recompile of code and automatic reporting of coverage.

This depends on #12 being in place.

Solved by #27


Pex passes --use-feature 2020-resolver to all versions of Pip for Python 2.

This is a bug since Pip dropped support for naming this feature (because they made it the default) in 22.3: https://pip.pypa.io/en/stable/news/#v22-3
The resulting error is:
option --use-feature: invalid choice: '2020-resolver' (choose from 'fast-deps', 'truststore', 'no-binary-enable-wheel-cache')

Actually - this is mysterious. All the PipVersions > vendored (20.3.4) are eagerly disallowed for use by Python 2.7 via interpreter constraints:
https://github.com/pantsbuild/pex/blob/e6c03a4f862e6b7dca13404c254d3623c8020c40/pex/pip/version.py#L137-L211

No mystery:
https://github.com/pantsbuild/pex/blob/c34770b1fca458182d02ca79d54733b57394ae0a/pex/pip/tool.py#L264-L269
So we only pass this for Python 2.7 and Python 2.7 only uses Pip 20.3.4.


Multi arm bandit or A/B testing?

I was curious if this was a feature set that is either supported, or planned to be supported in the future.

@robertleeplummerjr - yes, we built it as a proof of concept on a private repo of Mojito JS Delivery. We aren't really using MAB tests for our clients because we find it's easier for us to report on straight traffic splits and check for SRM. But if it's of interest to the community, we'd be happy to build this out a bit further and share how it works.
At a high-level, our proof of concept works by sharing the test results with mojito-js-delivery's CI Pipeline. E.g.:

Publish the test @ 50-50 split
Collect data & publish the results / MAB split via JSON (e.g. { 'a': 0.23782, 'b': 0.76218})
The CI pipeline runs regularly, and sets the splits according to the results / MAB split
The CI pipeline publishes the new traffic splits

The complexity lies in:

Providing a standard API between XYZ storage target (e.g. are we using Snowplow/GA/something else) and the CI pipeline
Cookie and persistence implications when using hash-based assignment and ITP protections. But for MAB, maybe it's not as bad that some users could get re-assigned to the better-performing treatment.

It's not an out-of-the-box solution either. You'd need to have the chops to expose your tests results to Mojito's CI pipeline. Though it only took us a few hours to script this up (with intimate knowledge):

I feel compelled to point out that the stationarity assumption, which is required by many MAB algorithms (such as the popular Thompson sampling bandit), hardly ever holds in online practice. Violation of this assumption makes the bandit susceptible to Simpson's paradox, resulting in the bandit converging on suboptimal arms in practice more often than the theory suggests.

Oh, and technically speaking, AB testing is already a solution to the MAB problem. :-D
It's called "epsilon first". We first spend a fixed amount of time/sample (i.e. epsilon) fully exploring (e.g. randomly sampling arms) and then commit to fully exploiting the most likely optimal arm for the remainder of the sample (e.g. we ship the winning variation). In cases where the sample is not limited (e.g. there is no fixed limit or budget to the sample) this solution can actually be quite efficient.


fix(versions): update Activiti/example-runtime-bundle versions into master

UpdateBot pushed maven dependency: org.activiti.cloud.rb:activiti-cloud-runtime-bundle-dependencies to: 7.1.161

UpdateBot commands:
updatebot push-version --kind maven org.activiti.cloud.rb:activiti-cloud-runtime-bundle-dependencies 7.1.161


Moved addUrlFilters in bootstrap to avoid the cache issue (task #8604)

Since we are using the caching features of Routing Middleware we must define the URL filters in  application bootstrap() as filters are not part of the cached data.

Codecov Report

Merging #729 into master will not change coverage.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master     #729   +/-   ##
=========================================
  Coverage     35.34%   35.34%
  Complexity     1284     1284
=========================================
  Files           109      109
  Lines          4252     4252
=========================================
  Hits           1503     1503
  Misses         2749     2749

Continue to review full report at Codecov.

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


ROX-13432: Cleaning up unused code copied/pasted from topology demo

Cleaning up the copy/paste code for the PF Topology network graph. You shouldn't see the edge connector arrows (to create new edges) and the rest of the graph should look/behave the same as it did before. I only removed the parts of the code that are not using and are not going to be using as part of MVP.

merging bc the tests are unrelated to the changes


Best pattern for "interval with timeout" with bluebird

I'm writing some code to do polling for a resource every N ms which should timeout after M seconds. I want the whole thing to be promise based using Bluebird as much as possible. The solution I've come up with so far uses node's interval, cancellable bluebird promises and bluebird's timeout function.
I'm wondering if there's a better way to do timing out intervals with bluebird?
var Promise = require('bluebird');

function poll() {
  var interval;

  return new Promise(function(resolve, reject) {
    // This interval never resolves. Actual implementation could resolve.
    interval = setInterval(function() {
      console.log('Polling...')
    }, 1000).unref();
  })
    .cancellable()
    .catch(function(e) {
      console.log('poll error:', e.name);
      clearInterval(interval);
      // Bubble up error
      throw e;
    });
}

function pollOrTimeout() {
  return poll()
    .then(function() {
      return Promise.resolve('finished');
    })
    .timeout(5000)
    .catch(Promise.TimeoutError, function(e) {
      return Promise.resolve('timed out');
    })
    .catch(function(e) {
      console.log('Got some other error');
      throw e;
    });
}

return pollOrTimeout()
  .then(function(result) {
    console.log('Result:', result);
  });

Output:
Polling...
Polling...
Polling...
Polling...
poll error: TimeoutError
Result: timed out

I know this is not directly related to bluebird and more of a support question so thanks in advance for your help.

Questions about usage should be posted on Stack Overflow](http://stackoverflow.com/tags/bluebird) or mailing list

Posted here if anyone is interested: http://stackoverflow.com/questions/33222421/what-is-a-good-pattern-for-interval-with-timeout-using-promises


adds StartupTask

Codecov Report

Merging #15 into master will not change coverage.
The diff coverage is 0%.

@@         Coverage Diff          @@
##           master   #15   +/-   ##
====================================
  Coverage       0%    0%
====================================
  Files          12    17    +5
  Lines         260   325   +65
  Branches        7    11    +4
====================================
- Misses        260   325   +65

Impacted Files
Coverage Δ

...main/scala/akka/contrib/d3/utils/StartupTask.scala
0% <0%> (ø)

...re/src/main/scala/akka/contrib/d3/DomainLike.scala
0% <0%> (ø)
:white_check_mark:

...ain/scala/akka/contrib/d3/utils/StartupTasks.scala
0% <0%> (ø)

...ka/contrib/d3/utils/LocalStartupTaskProvider.scala
0% <0%> (ø)

...akka/contrib/d3/utils/SystemSingletonManager.scala
0% <0%> (ø)

.../d3/cluster/utils/ClusterStartupTaskProvider.scala
0% <0%> (ø)

... and 1 more

Continue to review full report at Codecov.

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


fix: remove resource request from step template

Signed-off-by: ankitm123<EMAIL_ADDRESS>

/approve


Timestamp

@koresar
The failed unit test made me thinking. Despite we lost the validation functionality this actually means that you could overwrite the timestamp and set it something in the future or in the past, which would actually violate the "rule of good bookkeeping". Also could mean that a persisted balance could be breaken, by setting a debit into very past.    Didn't thought of it before.
Implicitly allowing to set the timestamp arbitrary is probably not good.
Maybe add an timestamp attribute to Entry.ts and use it when creating each transaction, thus avoiding diverging timestamps by milliseconds and then in the line before we push the transaction into the transactint array assign the Entry timestamp to the transaction timestamp.

Maybe use current date operator?
https://docs.mongodb.com/manual/reference/operator/update/currentDate/

Maybe use current date operator?
https://docs.mongodb.com/manual/reference/operator/update/currentDate/

Totally makes sense.
Also, I think I removed mongoose validation too early.
On the other hand, we allow overwriting the entire model! This also can be
damaging to the data consistency.
Should we remove this feature as well?
On Sun, 2 Jan 2022, 10:16 Uzlopak, @.***> wrote:

Maybe use current date operator?
https://docs.mongodb.com/manual/reference/operator/update/currentDate/
—
Reply to this email directly, view it on GitHub
https://github.com/flash-oss/medici/issues/43#issuecomment-1003634549,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAMMELY6MBWOJKHYUYAFO7LUT6DLRANCNFSM5LC4M43Q
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
You are receiving this because you were mentioned.Message ID:
@.***>

Saw your commits. Let's mark this as resolved now.
PS: we need to think of not allowing changing ledger schema.


Adding ETH as collateral and borrow token

Adding test cases for creditlines with ETH as borrow and collateral token

Codecov Report

Merging #123 (b03cbf9) into master (b298185) will decrease coverage by 36.72%.
The diff coverage is n/a.

@@             Coverage Diff             @@
##           master     #123       +/-   ##
===========================================
- Coverage   78.48%   41.76%   -36.73%
===========================================
  Files          16       16
  Lines        1678     1863      +185
  Branches      310      365       +55
===========================================
- Hits         1317      778      -539
- Misses        361     1085      +724

Impacted Files
Coverage Δ

contracts/yield/CompoundYield.sol
74.32% <ø> (-8.11%)
:arrow_down:

contracts/Pool/Pool.sol
9.74% <0.00%> (-84.75%)
:arrow_down:

contracts/Pool/Repayments.sol
7.90% <0.00%> (-79.67%)
:arrow_down:

contracts/Pool/Extension.sol
14.49% <0.00%> (-69.57%)
:arrow_down:

contracts/yield/YearnYield.sol
13.69% <0.00%> (-68.50%)
:arrow_down:

contracts/yield/NoYield.sol
23.80% <0.00%> (-54.77%)
:arrow_down:

contracts/SavingsAccount/SavingsAccountUtil.sol
37.20% <0.00%> (-48.84%)
:arrow_down:

contracts/yield/AaveYield.sol
20.00% <0.00%> (-25.27%)
:arrow_down:

contracts/CreditLine/CreditLine.sol
64.83% <0.00%> (-18.89%)
:arrow_down:

contracts/SavingsAccount/SavingsAccount.sol
52.71% <0.00%> (-13.96%)
:arrow_down:

... and 3 more

Continue to review full report at Codecov.

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

 Seems fine.

ETH is no longer being used as collateral/borrow token instead WETH is being used


Use Ruff instead of Black/isort/Flake8

I've replaced Black, isort, and Flake8 by Ruff.
Ruff's config enables all linters except those that (a) would require manual changes to the code (which we can enable and resolve separately) or (b) conflict with Ruff's formatter. Regarding (b), I exclude the minimum set of rules such that the following statement in the docs holds:

When an incompatible lint rule or setting is enabled, ruff format will emit a warning. If your ruff format is free of warnings, you're good to go!

I went for pinning Ruff's version because every release may change Ruff's expectations, so IMO we should update Ruff deliberately and resolve errors in the process. WDYT?
Closes #15 as a side-effect of removing Black.

I think this PR is ready for a review now (after a few iterations :wink:).

@sisp looks good to me! Thank you!


Incorrect error with axiom dataset list for bad deployment alias

When using an alias to that is no longer valid the axiom dataset list
command returns an error of the form:
$ AXIOM_DEPLOYMENT=bogus-no-longer-valid-env axiom dataset list
Error: cannot decode response with unknown content type

This can be cross-checked with axiom auth status which will show valid and non-valid auth tokens by alias

What does is no longer valid mean in this context? It doesn't exist in the ~/.axiom.toml?


Add logos for some apps

Taking a few logos from #107

mpv
Neovim
Thunderbird
Tor
VS Codium

:tada: :+1:

What are your thoughts about a release?
I believe this is ready for release.
Do you want to trigger it, shall I trigger it, or wait?
I'm not sure about your timezone.
Author:     hasecilu<EMAIL_ADDRESS>AuthorDate: Sun Nov 19 23:59:10 2023 -0600

Red zone = -6
Ah, so at is rather early in the morning now. :-) I'm at +1.

Yes

What are your thoughts about a release?
I believe this is ready for release.
Do you want to trigger it, shall I trigger it, or wait?

I also think it's ready

I'm not sure about your timezone.
Ah, so at is rather early in the morning now. :-) I'm at +1.

Yes, I'm at -6, Mexico City =)
I let you make the big release 🎉

Working on it. Just fixing the copyright entry in the file...


Touch and swipe drag not working on mobile

BUG REPORT TEMPLATE
Vue.js version and component version

swiper": "^6.3.2",\
vue-awesome-swiper": "^4.1.1",
Vue 2

Reproduction Link
Anything in the demo page, when viewed with Chrome "device toolbar" (Ctrl+Shift+m).
Steps to reproduce
Make view to mobile with "device toolbar" or (Ctrl+Shift+m),
Do a swipe touch. Left click then drag to left or right.
What is Expected?
It should slide to next slide.
What is actually happening?
No slide is happening at all

@flamendless can't reproduce this issue. Provide a reproduction repo

I've found out that the issue is only available when using the chrome debug tool. In actual mobile devices it works

It's a common issue of Chrome Dev Tools. Try using something more sophisticated for mobile testing, e.g. BrowserStack


corporate:  Add activity view for plan ledger entries.

Adds an activity view that shows the LicenseLedger entries for a CustomerPlan.
Notes:

The url pattern for the new view is currently: /activity/plan_ledger/<plan_id>/. We could alternatively use something more similar to the realm and user activity views, e.g., /user_activity/<user_profile_id>/.
Expands the shared activity table HTML to have a section between the title and the chart for some useful header information.

Adds the plan name and next invoice date to the new plan ledger view.
Revises the title for the user activity view to use this header area for the user's email and realm name, and shows the user full name as the title.
Though currently all of implemented header entries use strings, added the ability to use Markup so that we can add links in the header area, for example adding a link to a realm's audit logs via the realm activity page when we have that implemented.
It should be pretty straightforward to add and/or remove information from the header area of these views moving forward.

In both the remote and Cloud support views, there's a link to the new license ledger view in the current plan details section.

Currently, implemented as "License ledger entries" text as a link, but we could consider using an icon link like we did for linking to Stripe. Maybe next to the plan name?

Screenshots and screen captures:

Plan ledger view - Zulip Standard

Plan ledger view - Legacy plan

Support view - remote realm

Support view - Cloud realm

User activity view - Iago

Before
After

Self-review checklist

[ ] Self-reviewed the changes for clarity and maintainability
(variable names, code reuse, readability, etc.).

Communicate decisions, questions, and potential concerns.

[ ] Explains differences from previous plans (e.g., issue description).
[ ] Highlights technical choices and bugs encountered.
[ ] Calls out remaining decisions and concerns.
[ ] Automated tests verify logic where appropriate.

Individual commits are ready for review (see commit discipline).

[ ] Each commit is a coherent idea.
[ ] Commit message(s) explain reasoning and motivation for changes.

Completed manual review and testing of the following:

[ ] Visual appearance of the changes.
[ ] Responsiveness and internationalization.
[ ] Strings and tooltips.
[ ] End-to-end functionality of buttons, interactions and flows.
[ ] Corner cases, error conditions, and easily imagined bugs.

Looks great, merged, thanks @laurynmm! The one feature I could see us adding is some indicator of the plan.invoiced_through; that will almost always be clear from the date, but we may find it could be helpful when debugging. And maybe repeating the last audit log update date on this page might be helpful -- since that would be the thing you'd check to see how current we can expect the license ledger entries to be. Hard to know how much it would matter in practice, given one will likely still have the other tab open.

we could consider using an icon link like we did for linking to Stripe. Maybe next to the plan name?

Yeah maybe we could do an icon like :spiral_notepad: for the license ledger and something like :wood: for the audit log could be reasonable? Not sure how best to distinguish those two things.


ipv6 addresses for targets throws error

Get http://fe80::f816:3eff:fee5:a2eb:10255/metrics: dial tcp: too many colons in address fe80::f816:3eff:fee5:a2eb:10255

Are ipv6 addresses supported?

They should be … and that URL should be http://[fe80::f816:3eff:fee5:a2eb]:10255/metrics. How is this address configured? SD (which kind)?

A new kind ;) Kubernetes discovery in PR - so need to wrap ipv6 addresses in [...]. OK let me add that in - thanks.

Yup, see also https://en.wikipedia.org/wiki/IPv6_address#Literal_IPv6_addresses_in_network_resource_identifiers

@juliusv Thanks!

We are running Kubernetes and Prometheus on Rackspace and for some reason, they sometimes assign ipv4, sometimes ipv6 addresses.
The example prometheus configuration for kubernetes suggests to use the kubernetes-service-endpoints job which does autodiscovery on services that should be scraped. At this point it is not possible to add any bracket for the ipv6 address and we also don´t know in advance which address will actually be used by prometheus.
From my perspective it would be good if prometheus would be smart enough to detect if an ip is ipv4 or ipv6.
Thoughts?

Are you seeing ipv6 addresses not wrapped in [..] properly? That is a bug if so - could you open a separate issue for that please?

@jimmidyson No, they are not wrapped at all - will open an issue for that


[$250] Android - Secondary Log in - An endless spinner when trying validate the secondary login

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action Performed:

Log in to NewDot with any account
Log into OldDot with the same account and add a Secondary Login from Account Settings
Open validate secondary log in email Verify secondary email for Expensify and copy the last part of the URL, i.e. /v/16/WSSWMNNM (Everything after the /v/)
In a text box - Formulate the URL by using the path obtained from step 3 http://staging.new.expensify.com/v/
Navigate to the compiled link

Expected Result:
You should redirected to LHN with no error message displayed
Actual Result:
An endless spinner when trying validate the secondary login
Workaround:
unknown
Platform:

Where is this issue occurring?

Android

Version Number: v1.2.17-4
Reproducible in staging?: y
Reproducible in production?: y
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos:
https://user-images.githubusercontent.com/43996225/196486373-783326ea-e485-4c84-8db4-43078c1d7b6c.mp4
Expensify/Expensify Issue URL:
Issue reported by: Applause internal team
Slack conversation:
View all open jobs on GitHub

Weird, where did we get these reproduction steps from? Do we support validating a secondary login on NewDot?

@neil-marcellini This is from the regression steps https://expensify.testrail.io/index.php?/tests/view/2893709&group_by=cases:section_id&group_order=asc&group_id=229043

Okay got it thanks for clarifying. I'm able to reproduce the issue. I'm also able to reproduce the issue on iOS. I can't reproduce on Web so maybe it has something to do with the small screen width? I'll send it external because if it's limited to certain platforms then it's probably a front end issue.
https://user-images.githubusercontent.com/26260477/197080855-aed861a4-3531-40f7-b8b5-2008781e7e68.mov

I can't reproduce the issue on iOS or web. This error seems to be isolated to Android only.

Waitng for proposals

Proposal (Updated)
@thesahindia, you are right, I can also reproduce it in Safari.
I still believe that it's caused by the different triple-click behavior of browsers
At this time, behavior of default action of triple-click isn't specified the W3C spec
Other repos also experience similar issues:
https://github.com/facebook/lexical/issues/2660
https://github.com/ckeditor/ckeditor4/issues/484
https://github.com/ckeditor/ckeditor4/issues/3118
I've resolved glitches in my previous solution by changing the onClick event to onMouseDown and adding preventDefault if the subsequent click is more than two.
https://github.com/Expensify/App/blob/73922083c9bc4f2b1f050406b6e3b24c6ba98fc7/src/pages/home/report/ReportActionItemMessage/index.web.js#L10-L40
These changes will be implemented for the web and desktop only.
Complete comparison:
https://github.com/Expensify/App/commit/73922083c9bc4f2b1f050406b6e3b24c6ba98fc7
No more flickering:
https://user-images.githubusercontent.com/11847279/198174311-e405f8b6-6ac9-4d6f-909c-0b350869832a.mp4

Proposal
Root cause:
<FullScreenLoadingIndicator /> is not dismissed before calling Navigation.navigate(ROUTES.HOME); in validateLogin
Solution
Adding Navigation.goBack(); before navigating to home will resolve the issue.
diff --git a/src/libs/actions/User.js b/src/libs/actions/User.js
index c1f11e3610..8d549fb099 100644
--- a/src/libs/actions/User.js
+++ b/src/libs/actions/User.js
@@ -220,6 +220,7 @@ function validateLogin(accountID, validateCode) {
         accountID,
         validateCode,
     }, {optimisticData});
+    Navigation.goBack();
     Navigation.navigate(ROUTES.HOME);
 }

Another solution is also to pop the navigation when the user logged in or logged out:
diff --git a/src/libs/Navigation/Navigation.js b/src/libs/Navigation/Navigation.js
index e937e50159..9bfd819e12 100644
--- a/src/libs/Navigation/Navigation.js
+++ b/src/libs/Navigation/Navigation.js
@@ -64,7 +64,6 @@ function openDrawer() {
     if (!canNavigate('openDrawer')) {
         return;
     }
-
     navigationRef.current.dispatch(DrawerActions.openDrawer());
     Keyboard.dismiss();
 }
@@ -140,15 +139,14 @@ function navigate(route = ROUTES.HOME) {
     }

     if (route === ROUTES.HOME) {
+        // If we're navigating to the signIn page, pop whatever screen is on top
+        // since it's guaranteed that the sign in page will be underneath (since it's the initial route).
+        // Also, if we're coming from a link to validate login (pendingRoute is not null), we want to pop the loading screen.
+        navigationRef.current.dispatch(StackActions.pop());
         if (isLoggedIn && pendingRoute === null) {
             openDrawer();
             return;
         }
-
-        // If we're navigating to the signIn page while logged out, pop whatever screen is on top
-        // since it's guaranteed that the sign in page will be underneath (since it's the initial route).
-        // Also, if we're coming from a link to validate login (pendingRoute is not null), we want to pop the loading screen.
-        navigationRef.current.dispatch(StackActions.pop());
         return;
     }

The second solution might affect another part since Navigation.navigate(ROUTES.HOME) is used in multiple places.

@wildan-m, thanks for your proposal!
Moving navigationRef.current.dispatch(StackActions.pop()); would result in it being called every time user is navigating back to root.
Calling Navigation.goBack() in validateLogin would actually work. But this feels like a workaround.
The proposal should answer the question of why is this happening?
Why ValidateLoginPage is displayed on top, even when navigating away from it?

Still working on proposals above. Bump @wildan-m for the questions in the previous comment.

Proposal (Updated)
Root Cause
ValidateLoginPage and MainDrawer is <RootStack.Navigator> screen and Navigation.navigate(ROUTES.HOME) is directly open the drawer when the user is logged in:
https://github.com/Expensify/App/blob/a2eda4d48f8ab94912af0f9af90bb75c8359f1e8/src/libs/Navigation/Navigation.js#L142-L147
I think we can't directly trigger openDrawer when the parent navigator is a Stack navigator
I've tried it here:
https://snack.expo.dev/@muhliswildan/nesting-navigators-|-react-navigation
Solution
We can replace the dispatch with  navigationRef.current.dispatch(StackActions.replace(SCREENS.HOME)) if it comes from ValidateLogin page.
git diff src/libs/Navigation/Navigation.js
diff --git a/src/libs/Navigation/Navigation.js b/src/libs/Navigation/Navigation.js
index e937e50159..dbe4665bda 100644
--- a/src/libs/Navigation/Navigation.js
+++ b/src/libs/Navigation/Navigation.js
@@ -6,6 +6,7 @@ import Onyx from 'react-native-onyx';
 import Log from '../Log';
 import linkTo from './linkTo';
 import ROUTES from '../../ROUTES';
+import SCREENS from '../../SCREENS';
 import DeprecatedCustomActions from './DeprecatedCustomActions';
 import ONYXKEYS from '../../ONYXKEYS';
 import linkingConfig from './linkingConfig';
@@ -141,6 +142,11 @@ function navigate(route = ROUTES.HOME) {

     if (route === ROUTES.HOME) {
         if (isLoggedIn && pendingRoute === null) {
+            if(navigationRef.current?.getCurrentRoute()?.name === "ValidateLogin")
+            {
+                navigationRef.current.dispatch(StackActions.replace(SCREENS.HOME));
+                return;
+            }
             openDrawer();
             return;
         }

cc: @eVoloshchak @tgolen

Thanks for the updated proposal.

ValidateLoginPage and MainDrawer is <RootStack.Navigator> screen and Navigation.navigate(ROUTES.HOME) is directly open the drawer when the user is logged in:

Sorry, I'm not really following this. It kind of looks like words are missing or the grammar is wrong enough that I'm not understanding the reason. Can you try to reword this, please?

I think we can't directly trigger openDrawer when the parent navigator is a Stack navigator

This sounds like a good guess, but let's make sure that's the problem. Also, if this is indeed the root cause of the problem, can the fix be something that looks at the parent navigator to see if it's a stack navigator or not? I don't like how the proposal only references the ValidateLogin route, since it sounds like it could apply to any route where the parent navigator is a stack navigator.

Proposal (Updated)
@tgolen

Sorry, I'm not really following this. It kind of looks like words are missing or the grammar is wrong enough that I'm not understanding the reason. Can you try to reword this, please?

Please have a look at this hierarchy
https://github.com/Expensify/App/blob/4f92e57bb4fa08339527f8082f207f81628492d8/src/libs/Navigation/AppNavigator/AuthScreens.js#L162-L199
MainDrawer and ValidateLogin are RootStack navigator screens.
ValidatLoginPage will call this function
https://github.com/Expensify/App/blob/91acada3b65af8c465febe6853bcc7d37995f0f4/src/pages/ValidateLoginPage.js#L23
which will dispatch the screen with the home screen:
https://github.com/Expensify/App/blob/91acada3b65af8c465febe6853bcc7d37995f0f4/src/libs/actions/User.js#L226
But this navigate function directly opens the drawer
https://github.com/Expensify/App/blob/91acada3b65af8c465febe6853bcc7d37995f0f4/src/libs/Navigation/Navigation.js#L142-L146
Since ValidateLoginPage is a stack navigator screen and MainDrawer is a child of StackNavigator, openDrawer will not work. The MainDrawer is not loaded/stacked yet.

can the fix be something that looks at the parent navigator to see if it's a stack navigator or not?

I've tweaked the code to include all of the root routes. Please have a look:
git diff src/libs/Navigation/Navigation.js
diff --git a/src/libs/Navigation/Navigation.js b/src/libs/Navigation/Navigation.js
index e937e50159..06e71d173c 100644
--- a/src/libs/Navigation/Navigation.js
+++ b/src/libs/Navigation/Navigation.js
@@ -6,6 +6,7 @@ import Onyx from 'react-native-onyx';
 import Log from '../Log';
 import linkTo from './linkTo';
 import ROUTES from '../../ROUTES';
+import SCREENS from '../../SCREENS';
 import DeprecatedCustomActions from './DeprecatedCustomActions';
 import ONYXKEYS from '../../ONYXKEYS';
 import linkingConfig from './linkingConfig';
@@ -141,6 +142,13 @@ function navigate(route = ROUTES.HOME) {

     if (route === ROUTES.HOME) {
         if (isLoggedIn && pendingRoute === null) {
+            const rootRoutes = navigationRef.current.getRootState().routeNames;
+            if(rootRoutes.indexOf(navigationRef.current.getCurrentRoute()?.name) !== -1)
+            {
+                navigationRef.current.dispatch(StackActions.popToTop(SCREENS.HOME));
+                Keyboard.dismiss();
+                return;
+            }
             openDrawer();
             return;
         }

Ah, great. Thank you for the more thorough proposal! I think the solution is looking better and I like how it's a bit more generalized now. I was talking with @marcaaron about this issue and he has a lot of knowledge about the navigators, so I think getting his perspective on this proposal would be ideal.

Really appreciate the investigation here so far. However, since validating a secondary login has a workaround (can validate via OldDot) and since we are actively discussing deprecating the use of the drawer navigator. I'm not sure we should invest anymore time or energy into short term fixes that are difficult to understand and create a high barrier to entry for our internal engineers and contributors.

Not overdue, the discussion is in progress on whether to use the drawer navigator

Not overdue

Based on @marcaaron's latest assessment of the issue I think we are good to close this issue. If anyone disagrees please reopen the issue.

@davidcardoza Issue is reproducible in Web, mWeb and Desktop as well. Are these navigation issues are on Hold now?

I'll lean on @marcaaron's expertise here because I am not sure if we're still actively looking to deprecate the use of the drawer navigator, which would potentially make this not a priority.

I'm pretty sure our plan is still to deprecate the drawer navigator. This is all being handled in https://github.com/Expensify/App/issues/11768 so I will keep this closed.


Feature: Updates to our Engineering Ladder

There's more context than can/should fit into this PR description (please refer to the accompanying Google doc for more detail!).
At a high level, we’ve decided to update the language of our engineering ladder in order to make it a more useful tool for all of us.
This PR includes a few changes to the ladder's content:

The descriptions for each level have been clarified for greater specificity.
Senior Engineer is now explicitly two levels, with corresponding criteria.

There are also a few changes to general formatting/structure of this document:

A tl;dr section, extracted from the previous ladder iteration, to capture a "one-liner" for the scope and impact of each level.
The ladder is now organized by "capability" and formatted in a way to clearly show the progression through each level.

There are a few TODOs here that I don't think are blocking this merge, but still should be addressed.
I recommend viewing the rich diff version of these changes, as they'll be pretty indecipherable otherwise!

For anyone else reviewing, I'd highly recommend using GitHub's "hide whitespace changes" option:


Board Review: Azure Communication Services (SPOOL) Number Management GA

Service name: ACS Number Management
Key contact for this review:  Adrian Tang (adtang)
Link to previous API version:
The following is the list of the most recent GA'ed APIViews.
Java
Python
C#
Javascript
Description of the material to be reviewed/changed:
ACS Number Management is the service in which customer purchases and manage phone numbers. The next set of available features is for the customers to determine the list of eligible countries, available cities (or we
Champion scenarios that briefly explain how developers will use your API:
Hero scenarios section here.
Languages for this review.
C#, Java, Javascript,
Artifacts per language.
API Views for official review. This include diffs with the master branch version.
Java
C#
Javascript
Python
For reference, below are the API Views from the internal review.
API Views from internal review.
Java
C#
Javascript
Python

#Scheduled

Scheduled for 9/13 2p-4p PDT

Recording (MS INTERNAL ONLY)


IllegalAccessError from ThreeLetterTimeZoneID with JDK 16

Description of the problem / feature request:
> Task :compileJava FAILED
/private/var/folders/jf/29g0fz_16w9_3y2db8ylkl540000gn/T/junit1380605189140352106/src/main/java/test/TimeZoneJava16.java:7: error: An unhandled exception was thrown by the Error Prone static analysis plugin.
        return TimeZone.getTimeZone("PST");
                                   ^
     Please report this at https://github.com/google/error-prone/issues/new and include the following:

     error-prone version: 2.5.1
     BugPattern: ThreeLetterTimeZoneID
     Stack Trace:
     java.lang.IllegalAccessError: class com.google.errorprone.VisitorState (in unnamed module @0x51b6b93c) cannot access class com.sun.tools.javac.model.JavacElements (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.model to unnamed module @0x51b6b93c
  	at com.google.errorprone.VisitorState.getElements(VisitorState.java:244)
  	at com.google.errorprone.bugpatterns.ThreeLetterTimeZoneID.matchMethodInvocation(ThreeLetterTimeZoneID.java:79)
  	at com.google.errorprone.scanner.ErrorProneScanner.processMatchers(ErrorProneScanner.java:450)

Bugs: what's the simplest, easiest way to reproduce this bug? Please provide a minimal example if possible.
See https://github.com/tbroyer/gradle-errorprone-plugin/pull/58
--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED fixes it.
Could there be an automated way of finding out all those cases? From the unit tests exercising all the bug patterns maybe?
What version of Error Prone are you using?
2.5.1
Have you found anything relevant by searching the web?
Related to #1157

Playing with grep reveals that this could be the only missing bit; also --add-exports might be enough:
$ git grep -h  '^import com.sun.*' |grep -o 'com.sun.[a-z.]*' |sort -u
com.sun.source.doctree.
com.sun.source.tree.
com.sun.source.util.
com.sun.tools.javac.api.
com.sun.tools.javac.code.
com.sun.tools.javac.comp.
com.sun.tools.javac.file.
com.sun.tools.javac.main.
com.sun.tools.javac.model.
com.sun.tools.javac.parser.
com.sun.tools.javac.processing.
com.sun.tools.javac.tree.
com.sun.tools.javac.util.

(where com.sun.source.{doctree,tree,util} are already exported: https://docs.oracle.com/en/java/javase/16/docs/api/jdk.compiler/module-summary.html)
BTW, how about sorting the options in the docs to make comparison easier? :wink:
I also note that the doc suggests both --add-opens and -add-exports for com.sun.tools.javac.code. IIUC, --add-opens is a superset of --add-exports so --add-opens alone would be enough.


push live

Docs Build status updates of commit 4620d62:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

AdaptiveCards/content/designer.png
:white_check_mark:Succeeded

AdaptiveCards/getting-started/flow.md
:white_check_mark:Succeeded

AdaptiveCards/sdk/designer.md
:white_check_mark:Succeeded

AdaptiveCards/sdk/rendering-cards/javascript/fabric.md
:white_check_mark:Succeeded

AdaptiveCards/sdk/rendering-cards/javascript/getting-started.md
:white_check_mark:Succeeded

AdaptiveCards/sdk/rendering-cards/react-native/getting-started.md
:white_check_mark:Succeeded

AdaptiveCards/sdk/rendering-cards/toc.yml
:white_check_mark:Succeeded

AdaptiveCards/toc.yml
:white_check_mark:Succeeded

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

Docs Build status updates of commit 4cb3bc8:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

AdaptiveCards/content/designer.png
:white_check_mark:Succeeded

AdaptiveCards/getting-started/flow.md
:white_check_mark:Succeeded

AdaptiveCards/sdk/designer.md
:white_check_mark:Succeeded

AdaptiveCards/sdk/rendering-cards/javascript/fabric.md
:white_check_mark:Succeeded

AdaptiveCards/sdk/rendering-cards/javascript/getting-started.md
:white_check_mark:Succeeded

AdaptiveCards/sdk/rendering-cards/react-native/getting-started.md
:white_check_mark:Succeeded

AdaptiveCards/sdk/rendering-cards/toc.yml
:white_check_mark:Succeeded

AdaptiveCards/toc.yml
:white_check_mark:Succeeded

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


Revert #173

This PR reverts #173 which is most likely the cause for broken fallback avatars across the unavatar service.
Fixes #174

Thanks for this. Ideally I want to disable the helmet rule that create the problem rather than downgrade all the project

@Kikobeats I unfortunately don't know enough about the project internals to do that.

@driesvints no problem, but I need more info. You mentioned:

This also seems to have broken avatar fallbacks on https://laravel.io

Can you share an error trace?

I think this is the thing causing the error:

You should see these in the console:

Please check https://github.com/microlinkhq/unavatar/pull/176 🙂

Thanks @Kikobeats


[11.x] Add implodeOf and joinOf collection methods

This PR adds two new collection methods: implodeOf and joinOf. These are identical to implode and join but return a new Stringable instance.
This means you can use a nice fluent syntax when you need to break a string into a collection and then join it back together and continue with other string operations, for example:
Str::of($value)
    ->explode(' ')
    ->reject(fn ($word) => in_array($word, $block))
    ->implodeOf(' ')
    ->limit(100);

I think you could maybe just use tap here. Not sure I love these method names.


Demangler Plugins

Provide a generic API for users to add their own name demanglers to be run during analysis.  This can currently be done after the fact, but it would be nice if it could be integrated.
We should provide two api's, Demangle() and DemangleToType()
The DemangleToType() api will return a BNType object containing a type tree for the given type, Demangle() will simply return a string.

Example workaround:
import subprocess
for func in bv.functions:
    if func.name.startswith("__T") or func.name.startswith("_T"):
        func.name = subprocess.check_output(["/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-demangle", "-compact", func.name])


[FEATURE] Add support for modern image formats (AVIF, JXL and WebP)

Support for modern image formats is a great way to improve the speed of a website.
The Hugo Clarity theme has a great way of dealing with new image formats like AVIF, JXL or WebP.

If you reference an image such as sample.jpg in your post, Hugo Clarity will check to see if the same image (based on filename) exists in the modern formats of WebP, AVIF or JXL. If it does, these will be presented to browsers as alternative options. Browsers that can support these formats will load them, while browsers that do not will fall-back to the default image.
This process works for images with the file extensions jpg, jpeg, png, and gif.

Implemented this way would have no disadvantages even for old browsers that don't support modern image formats.
Then we can use ImageMagick to batch convert all JPG and PNG files in our image folder.
magick mogrify -format avif -depth 10 -define heic:speed=2 *.jpg

magick mogrify -format avif -depth 10 -define heic:speed=2 *.png

WebP is supported on almost all modern browsers, AVIF is not supported on Safari and JXL is not supported on almost any browsers. It does not make much sense to use a "fallback" strategy in this situation. I suggest only using the WebP format for better image performance.
Instead of creating a custom pipeline, I think it might be possible to use some API service (either self-host or online-provider) which can convert images to WebP format. The resources.GetRemote can be used to call the API and insert the converted image on the fly.
Reference:
https://caniuse.com/webp
https://caniuse.com/avif
https://caniuse.com/jpegxl
https://gohugo.io/templates/data-templates/#get-remote-data

https://gohugo.io/content-management/image-processing/#target-format
Well it turns out Hugo can do the conversion directly!

Hi, thanks for the reply.
I used WebP for many years in my WordPress blog because of the hype made by Google. However, it's not a good image format. It's based on the old VP8 codec, while AVIF is based on VP10/AV1.
In most cases WebP is even worse than JPG when MozJPEG encoder is used. You can see the tests on the link below.
https://siipo.la/blog/is-webp-really-better-than-jpeg
JXL has poor support, but AVIF is supported by most browser. AVIF has better compression, so it's better suited to websites, while JXL will be for high quality photography.

Hugo doesn't convert images to AVIF, that's why the Clarity and HBS themes adopted this solution.
https://github.com/razonyang/hugo-theme-bootstrap/issues/470

WebP is supported on almost all modern browsers, AVIF is not supported on Safari and JXL is not supported on almost any browsers. It does not make much sense to use a "fallback" strategy in this situation. I suggest only using the WebP format for better image performance.
Instead of creating a custom pipeline, I think it might be possible to use some API service (either self-host or online-provider) which can convert images to WebP format. The resources.GetRemote can be used to call the API and insert the converted image on the fly.
Reference: https://caniuse.com/webp https://caniuse.com/avif https://caniuse.com/jpegxl https://gohugo.io/templates/data-templates/#get-remote-data

BTW IOS16 supports avif in Safari.


question about list returned by si.processes()

Hi Sebastian,
Happy New Year & hope you are well.
The process object returned under si.processes().list contains a 'pcpu' (percent CPU utilization) field. How should I interpret this number on a multi-core machine?
I here have in mind the difference between the top command's Irix (the default, I think) and Solaris modes. In the former, %CPU is not divided by the number of cores; in the latter it is.
As always, thanks for your help.
Cordially,
Paul

Hi Paul,
as I use a pscommand with the pcpu option to determine this value, it is the % of how many a single core is used. This means: if you have e.g. a 4 core machine, the max is 400% (100% each).
Hope that helps.


Multiple outputs in island mode are broken

Describe the bug
Follow up from the PR where I mentioned this
In island mode a cell with multiple outputs initially renders correctly, but then on app load something goes wrong.
Example:

then on load

The worker is sending down the full data, but somehow on refresh it breaks.
Worker message object:
{ message: '{"op": "cell-op", "data": {"cell_id": "Hbol", "output": {"channel": "output", "mimetype": "text/plain", "data": "None, 1, 2, 3, 4, 5", "timestamp":<PHONE_NUMBER>.747}, "console": null, "status": "idle", "stale_inputs": null, "timestamp":<PHONE_NUMBER>.747}}' }

Environment
island dev
Code to reproduce
in demo/html
diff --git a/frontend/islands/__demo__/index.html b/frontend/islands/__demo__/index.html
index 0ed22e6b..8f859100 100644
--- a/frontend/islands/__demo__/index.html
+++ b/frontend/islands/__demo__/index.html
@@ -28,6 +28,14 @@
     </style>
   </head>
   <body>
+    <marimo-island data-app-id="main" data-cell-id="1234">
+        <marimo-cell-output>
+        <marimo-json-output data-json-data="["text/plain:null", "text/plain:1", "text/plain:2", "text/plain:3", "text/plain:4", "text/plain:5"]"></marimo-json-output>
+        </marimo-cell-output>
+        <marimo-cell-code hidden="">
+        None%2C%201%2C%202%2C%203%2C%204%2C%205
+        </marimo-cell-code>
+    </marimo-island>
     <marimo-island data-app-id="main" data-cell-id="Hbol">
       <marimo-cell-output> </marimo-cell-output>
       <marimo-cell-code hidden> import%20marimo%20as%20mo </marimo-cell-code>

Or just generator.add_code("None, 1, 2, 3, 4"),

Closed by https://github.com/marimo-team/marimo/pull/1238


Sync the doc change in https://github.com/mosn/htnn/pull/745 to Chinese version

Description
No response
Use Scenes
Ensure the Chinese doc is up-to-date.
Advice
No response

@spacewander I want to try this. Can you assign it to me?

@spacewander I want to try this. Can you assign it to me?

Great! Done.


Reduce API cost of superfluous scans (too many on old content, too early on new content)

Currently we're scanning 3 news sites (BBC, NYT, Daily Mail), and this is consuming ~7500 Google Search API calls per day:

That's maybe ~2500 calls per day per site, or ~$4500 per site per year in API costs 💸 . That's a fair bit of cash, and there's already interest to add at least 4 other sites (Washpo, Telegraph, Sun, and ABC for Dave Earley in Australia). Reducing costs would be good.
API cost-saving opportunities
Content that's been missing a long time
Usually, only a small amount of content is very delayed getting into Google Search results, but when content is delayed, we can expend a lot of quota scanning it. For instance, for content that's missing 1 hour, we can use up to 30 API calls just scanning the content every 2 minutes. However, as the length of time the content is missing increases, the chances that it will suddenly appear become lower, as does our interest in being precise about exactly how long it was missing for. Once content has been missing an hour, a reasonable time between checks to see if it's still missing might be 10 minutes or more. This reasonable time between checks increases the longer the content has been missing. With this update, content missing for 1 hour will take fewer than 12 API calls (reducing cost by 60%), and missing for 2 hours fewer than 15 in total (reducing cost by 75% - do note though that most content is usually not this slow to get into Google Search results!).
Reducing scans on the majority of content that's only delayed a short time
When things are working well, most News articles don't take a long time getting into Google Search - perhaps less than 3 minutes. I think we'd say anything that took less than 2 minutes would be considered prompt - we're not really interested in establishing delay lower than 2 minutes at this point, so it's probably not worth scanning content less than 2 minutes old - the check is likely to come back 'missing', but it cost us an API call and do we care that it's missing yet?
We scan the sitemap once per minute, so there is a max delay of 1 minute between content being published there and us seeing that it's there. Therefore we can still wait at least 1 more minute after content is first seen in the sitemap before scanning the url.
Resulting check times
For the fastest possible check times - which won't quite happen in practice, as we only run once per minute - the elapsed time at each check is now :
1M, 3M12S, 5M50S, 9M, 12M48S, 17M22S, 22M50S, 29M24S, 37M17S, 46M45S, 58M6S, 1H11M43S, 1H28M4S, 1H47M41S, 2H11M13S, 2H39M28S, 3H13M22S, 3H54M2S

This has been deployed as of 5:35pm. Over the next few days hopefully we'll see if this has reduced consumption at all...

This does look to have helped: the number of API calls per weekday has dropped about 50% from ~7500 to ~3700 (this is while still looking at the same 3 sites; BBC, NYT, Daily Mail).
This graph shows the days before and after deploy of this update:

Last 24 hours:


Fix etherscan link in multiply event

Fix etherscan link in multiply event

Changes 👷♀

add hash to multiply events query

How to test 🧪

Check history for vault 25553 using staging api

Definition of done ✔

[ ] Acceptance criteria for each issue met
[ ] Unit tests written where needed and passing
[ ] End-to-end tests for happy path
[ ] Documentation updated
[ ] Project builds without errors
[ ] Non-functional requirements met
[ ] Code reviewed and functionality tested by the reviewer (locally, Heroku, etc.)
[ ] Feature verified and accepted by Product Owner
[ ] Project deployed to production environment

tested on localhost and on https://oasis-borrow-dp-fix-lin-kvrliz.herokuapp.com/25553
links seem fine for ex for vault 25553 on mainnet there's transaction https://etherscan.io/tx/0xf624bf37abb6bf064f62127396bdb0f51b5677dff46da537635a7c1cb35b2fe0

tested on heroku as multiply


Investigate long running times when using pooled resources that occurred during benchmarking for Simod 3.5.24

During benchmarking using differentiated resources, the Call Center event log processing took about half a day (4-6 hours). When using pooled resources, the same log took about 80 hours.

I can confirm the performance degradation for Academic Credentials (it's a relatively small log to work with) on my laptop:
AC_CRE differentiated: simod optimize --config_path config_differentiated.yml  1601.50s user 1307.30s system 556% cpu 8:42.95 total
AC_CRE pooled:         simod optimize --config_path config_pooled.yml          2352.18s user 1370.86s system 275% cpu 22:28.94 total

It seems the performance degradation comes from pix_framework.discovery.resource_model.discover_resource_model.
This is runtime for two functions from resource model optimizer run with pooled resources:
optimizer._discover_resource_model: 20.360493183135986 s
optimizer._simulate_bps_model: 5.144507169723511 s

The same for differentiated resources:
optimizer._discover_resource_model: 0.4659249782562256 s
optimizer._simulate_bps_model: 5.323170185089111 s

See update in https://github.com/AutomatedProcessImprovement/pix-framework/issues/4


Thank you.(This message is not an issue.)

This message is not an issue.
https://github.com/YoshihiroIto/XamlStylerCui
I was able to develop this with your commit.
Thank you.

you're very welcome :)


Documentation improvement

Loads of gramatical errors in documentation
slighted outdated get started page which doesnt really get you started

Closing issue as repo is being archived.


Certificate Management Protocol (CMP, RFC 4210) extension

Also includes CRMF (RFC 4211) and HTTP transfer (RFC 6712)
CMP and CRMF API is added to libcrypto, and the "cmp" app to the openssl CLI.
Adds extensive man pages and unit tests.  Integration into build scripts.
Squashed version of the CMP patch as of 2018-07-30
last incremental commit 95b69c2413cfa5865982b79c0a62af5cf510c0c6

Checklist

[x] documentation is added or updated
[x] tests are added or updated

Thanks @mattcaswell for your quick comments and questions.
I'll answer them step by step. My changes mentioned here will become visible later (when they have been merged and pushed by @mpeylo .

One .zip file contains build info for OpenSSL v1.0.2 and should not have been part of this PR (like the version switches we already eliminated). I've just removed it.
The other .zip file contains conformance test data for EJBCA and is no longer needed in this form. I had forgotten to remove it; done now.

The figure 640,787 is not actually the number of lines of code, but apparently the code size in bytes.
This PR has around 55,000 lines of code.
Here is a list of the included .c and .h files (apart from those generated automatically) and their sizes produced with wc include/openssl/crmf.h crypto/crmf/crmf_int.h crypto/crmf/crmf_{asn ,lib,pbm}.c include/openssl/cmp.h crypto/cmp/cmp_int.h crypto/cmp/cmp_{asn,ctx,lib,msg,ses,srv,vfy,h ttp}.c  apps/cmp.c test/cmp_{ctx,lib,msg,ses,vfy,internal}_test.c test/cmptestlib.{c,h}:
   130    365   5597 include/openssl/crmf.h
   445   1669  15453 crypto/crmf/crmf_int.h
   266    585  11483 crypto/crmf/crmf_asn.c
   688   1980  21987 crypto/crmf/crmf_lib.c
   226    861   7259 crypto/crmf/crmf_pbm.c
   574   2410  27914 include/openssl/cmp.h
   743   3297  30884 crypto/cmp/cmp_int.h
   395    939  16867 crypto/cmp/cmp_asn.c
  1488   4601  39599 crypto/cmp/cmp_ctx.c
  1743   5802  54509 crypto/cmp/cmp_lib.c
   783   2368  24574 crypto/cmp/cmp_msg.c
   827   2785  28425 crypto/cmp/cmp_ses.c
   650   1917  22078 crypto/cmp/cmp_srv.c
   783   3216  30134 crypto/cmp/cmp_vfy.c
   506   1909  15974 crypto/cmp/cmp_http.c
  4119  14502 140651 apps/cmp.c
    96    227   2708 test/cmp_ctx_test.c
   784   1828  28491 test/cmp_lib_test.c
   451   1006  14482 test/cmp_msg_test.c
   332    767  11184 test/cmp_ses_test.c
   341    910  11701 test/cmp_vfy_test.c
   221    567   7148 test/cmp_internal_test.c
   128    390   3157 test/cmptestlib.c
    34    116   1003 test/cmptestlib.h
 16753  55017 573262 total

A potential split could for instance be done as follows:

CRMF lib
CMP lib
apps/cmp.c
test/

The fact that there is pretty little interference with other parts of OpenSSL was on purpose.
In this way we have been able to develop mostly independently of code evolution in the OpenSSL core libs, apps, and tests.
Moreover, we think/hope that also the reviewing and merging process is smoother if it is clear that existing code will not break by including this code.
Actually, there are a couple of overlaps with existing code:

the primitive HTTP client for far being used only for OCSP has been extended in crypto/cmp/cmp_http.c in terms of stability, error checking and reporting, and the addtion of timeout.
the functions for reading and writing various types of files in apps/ have been extended and partly improved in apps/cmp.c.
the functionality for certificate status checking (including CRL fetching and combining CRL-based checks with classical OCSP and with OCSP stapling, where I still have further improvements in the pipeline) have been significantly extended, also in apps/cmp.c.

I started almost a year ago with carving out these changes because they are of more general interest (this is, for use also independently of CMP). This resulted in a series of rather small PRs (the first one being #4124). Part of them have meanwhile been merged, while others are still open and further ones are yet to be given, which one can see also from the open TODOs I put in apps/cmp.c and crypto/cmp/cmp_http.c (marked as (PR #...)
The dilemma we face here is that the CMP code (mostly in apps/cmp.c) needs these additions and improvements already for productive use, so we cannot remove them from our code until they have been included in OpenSSL and the respective new OpenSSL release has been adopted within our companies and by various external users.
How do you advise us to proceed with this topic?

As recently agreed by email we have started providing the CMPforOpenSSL contribution in small incremental chunks, in PR https://github.com/openssl/openssl/pull/7328.

@mpeylo, I think you can close this PR since it is superseded by PRs #7328, #7646, and further upcoming chunks.

Closing this PR as it as been superseded since long.
Not all CMP contribution chunks have been provided as PR and reviewed/merged yet,
but the plan is to include all parts with OpenSSL version 3.0.
For details on the current state and planning see
https://github.com/mpeylo/cmpossl/wiki#planning-and-current-status-of-the-contribution-chunks


Ensure Vuex and Cache have correct state

both states should be correct following http POST, PUT and DELETE requests

Understand what happens following save and remove resource class methods
The worker thread could handle these requests, update cache and bubble up to be handled by the vuex store?

forgetType is handled by both
this should be done once PR4 merges

Given change in direction, this is now no longer applicable


Add CMake summary

This adds a printout at the end of CMake's configuration that prints out all the user options (anything declared via tvm_option) plus some extra metadata about CMake itself (version, system, etc). This makes it easier to see what CMake is doing without guessing from config files (i.e. is the build release or debug mode, is CUDA on, ...). To avoid spewing in people's build output it's behind a flag but can be enabled with cmake -DSUMMARIZE=1 ... or turning the config option on.

LGTM, this is on by default in CI?

It is now with https://github.com/apache/tvm/pull/9696/commits/e680e69d77ea9ed05d46fce701518578e21b45b0 (test run)

@driazati Great I feel like this will come in handy when debugging CI problems.


Upgrade jszip to its latest version to date. This version does not have any vulnerability found by Snyk so far

Snyk found a Denial of Service vulnerability in jszip: https://security.snyk.io/vuln/SNYK-JS-JSZIP-1251497
There is no version of exceljs so far upgrading to a safe version of jszip. This pull request is meant to solve that.
Test plan
Run npm install and npm test after upgrading. All tests passed.

@Siemienik thanks! Is there a release planned, or is it possible to quickly get a patch including this upgrade?

Only @guyonroche has permission to release.

@ValerioSevilla see #2351 .


Update run.py with a comment

Hi, this is a new PR :)

Qovery can create a Preview Environment for this PR.
To trigger its creation, please post a comment with one of the following command.

Command
Blueprint environment

/qovery  preview 86ee5b5d-335b-41c3-a47d-7aba1238a06b
dss-env

/qovery  preview f3c7f817-38a4-453a-b53b-2e240fe49048
blueprint

/qovery  preview {all|UUID1,UUID2,...}
To preview multiple environments

This comment has been generated from Qovery AI :robot:.
Below, a word from its wisdom :

You are going to thank you later if it contains tests

/qovery preview f3c7f817-38a4-453a-b53b-2e240fe49048


Use Robocopy and 7zip (or maybe RecursiveExtractor?) to speed up cache updates.

This'll require something that closes the child processes when the main form closes if the user closes it before it's done. Something here might help:
https://stackoverflow.com/questions/3342941/kill-child-process-when-parent-process-is-killed

For now this won't be used as there have been major performance improvements already by extracting only manifests and moving the resulting folder instead of copying it. Might use this eventually if it's still too slow.

Or, maybe RecursiveExtractor's library could work: https://github.com/microsoft/RecursiveExtractor
This is under the MIT license, so it should be fine. Hopefully it can be used.

Update: just found this SO answer that mentions counting the compressed file size rather than using the file index, which apparently can speed things up: https://stackoverflow.com/a/61901480
From this link:
https://stackoverflow.com/questions/61889156/system-io-compression-counting-the-number-of-files-using-zipfilearchive-is-ver

Maybe I should try multi-threading with an option to turn it off if needed as well as a choice for the user to pick how many threads are used at a time maximum, or maybe not if it works just fine in a single-core VM?


Bessel function use in the definition of the incident field

Hello,
I'm trying to define an incident acoustic field with a directivity function  :
from scipy.special import j1
k = 2.
R = 0.1
@bempp.api.complex_callable
def p_inc_callable(x, n, domain_index, result):
    r = np.sqrt(np.power(x[0],2)+np.power(x[1],2)+np.power(x[2]-1,2))
    rho = np.sqrt(np.power(x[0],2) + np.power(x[1],2))
    val = k * R * rho / r
    d = j1(val) / val
    theta = np.arcsin(rho / r)
    result[0] = (np.exp(-1j * k * r) / r) * directivity * np.cos(rho / r)

I got the following error :
TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Untyped global name 'j1': Cannot determine Numba type of <class 'numpy.ufunc'>

File "../../tmp/ipykernel_4292/2670867267.py", line 62:
<source missing, REPL/exec in use?>

Thank your for your help. It works fine.


Added a generator for UK National Insurance numbers

Hi,
I've been using the Object Hydrator for a while, and I've added a few generators, so I thought I'd submit them for review and inclusion :-)
This is a generator for a UK National Insurance number.

Looks like the build is failing due to the NUnit reference:
Could not locate the assembly "nunit.framework, Version=<IP_ADDRESS>, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL"
Is this an issue with appveyor?

 But I think I'm going to quit using it. I just built a new machine so I'm going to get my environment set up tonight and try a build and catch up on these PRs.

Merged into 1-3Pre. Thank You!