kubeadm: upgrade ha from 1.13 to 1.14

Place holder for kubeadm upgrade HA of kubernetes/kubeadm/issues/1422
/assign @neolit123

/sig cluster-lifecycle

/language en

@yagonobre I changed the base of this PR to dev-1.14 instead of release-1.4.

Thanks @zacharysarah, I'll update in a bit

/priority important-soon

@yagonobre just nuke your local branch and do:
git fetch <upstream-remote> dev-1.14:kubeadm-doc

the checkout that new branch add the change and force push.

Thanks @neolit123 I was trying to rebase without success.
/remove-language zh

/remove-language ja
/remove-language ko
/remove-language zh

i will close this PR and send a new one because we are doing pair review with @fabriziopandini currently.

closing because we are going to merge HA upgrade with regular upgrade.
/close


Fallback to -f best when merger is outdated

Fixed #5661.

Added meaningful message, restored check_version and added can_merge as more convenient place for merge-capable checks.


creating a vault target with a trailing slash causes inconsistent behavior

Targeting a vault with a trailing slash aka safe target http://<IP_ADDRESS>:8200/ dev results in read operations working, but write operations failing.

Same problem as #106, but at the request level.
→  DEBUG=1 safe set secret/x test=test
Request:
GET //v1/secret/x HTTP/1.1
Host: localhost:8201
X-Vault-Token: <TOKEN>

----------------
Response:
HTTP/1.1 404 Not Found
Content-Length: 14
Cache-Control: no-store
Content-Type: application/json
Date: Wed, 27 Sep 2017 18:22:21 GMT

{"errors":[]}

----------------
test: test
Request:
POST //v1/secret/x HTTP/1.1
Host: localhost:8201
X-Vault-Token: <TOKEN>

{"test":"test"}
----------------
Response:
HTTP/1.1 404 Not Found
Content-Length: 14
Cache-Control: no-store
Content-Type: application/json
Date: Wed, 27 Sep 2017 18:22:21 GMT

{"errors":[]}

----------------
!! API 404 Not Found


Thread-safety for the client Cache()

Based on a mattermost conversation. I wanted to use the Cache() from multiple threads so I could make an awaitable wrapper around the Tiled client.
sqlite3 does support thread-safety if it's built into the underlying sqlite library. So this PR has the cache check if the sqlite3 library supports thread-safety, and if it does then allows writes from other threads.
https://docs.python.org/3/library/sqlite3.html#sqlite3.threadsafety
Even still, I'm not sure how parallel writes get handled, so I also included a thread lock forcing parallel writes to wait until previous writes are done. Might be overkill but I don't have a way to check this easily so figured I'd err on the side of caution.

Thanks @padraic-shafer, makes sense. I went with a full IntEnum since we're using those values in at least two places.

This demonstrates that, with this PR, we will cache (small) data responses. In main, we cannot because the request is made from a dask worker running on a different thread than the Cache and its SQLite connection were instantiated on.
from tiled.client.cache import Cache
from tiled.client import from_profile

cache = Cache("main.db")
c = from_profile('demo', cache=cache)
c['generated']['tiny_image'][:]

$ sqlite3 main.db 'select cache_key, size from responses;'
https://tiled-demo.blueskyproject.io/api/v1/metadata/?include_data_sources=false|361
https://tiled-demo.blueskyproject.io/api/v1/metadata/generated?include_data_sources=false|397
https://tiled-demo.blueskyproject.io/api/v1/metadata/generated/tiny_image?include_data_sources=false|517

Now with this PR branch and the cache filename pr_662.db, notice the /array/block/... response cached.
$ sqlite3 pr_662.db 'select cache_key, size from responses;'
https://tiled-demo.blueskyproject.io/api/v1/metadata/?include_data_sources=false|361
https://tiled-demo.blueskyproject.io/api/v1/metadata/generated?include_data_sources=false|397
https://tiled-demo.blueskyproject.io/api/v1/metadata/generated/tiny_image?include_data_sources=false|517
https://tiled-demo.blueskyproject.io/api/v1/array/block/generated/tiny_image?block=0%2C0&expected_shape=50%2C50|20000

Awesome! Thanks again @canismarko.


GEODE-2668: Add new command class for destroy gateway-receivers

New DUnit and unit tests for command and function classes
Use new cluster configuration service instead of XmlEntity

This PR replaces PR#1706, which has conflicts with the current develop branch that prevent clean precheckin runs.
Thank you for submitting a contribution to Apache Geode.
In order to streamline the review of the contribution we ask you
to ensure the following steps have been taken:
For all changes:

[X] Is there a JIRA ticket associated with this PR? Is it referenced in the commit message?

[X] Has your PR been rebased against the latest commit within the target branch (typically develop)?

[X] Is your initial contribution a single, squashed commit?

[X] Does gradlew build run cleanly?

[X] Have you written or updated unit tests to verify your changes?

[ ] If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under ASF 2.0?

Note:
Please ensure that once the PR is submitted, you check travis-ci for build issues and
submit an update to your PR as soon as possible. If you need help, please send an
email to<EMAIL_ADDRESS>

precheckin is green

I merged develop into the branch to ensure that recent cluster config changes where sync'd up.
Precheckin was green prior to the merge.


Update content about prefix

Category

[x] Content fix
[ ] New article

Related issues

not related to an issue number

What's in this Pull Request?
Clarfication about don't support wildcard operator (*) as prefix.

Hey @wobba, can you help confirm if this change is correct? I'm not this familiar with KQL...

The previous statement is correct, but the proposed change is easier to read. They do mean the same but it's not clear in the original text that suffix points to the terms and not the wildcard.


Add sonar cloud checks before merging a PR

Sonar scan should run for each PR that is raised and merging should be blocked until this scan is completed

Integrated Sonar cloud + added a rule and it's working as expected, so closing this


Metabase question: Summarize all chemical treatments within a Pest Management Plan area

[ ] Do not action until #1010    is complete.
[ ] Upload the Pest Management Plan boundaries (attached)
[ ] enable users to choose a timeframe and a list of multiple jurisdictions, and a boundary area to summarize chemical treatments for all species
[ ] output should provide a summary of all companies and their service licences that applied herbicide AND summarize the Pesticide Product Name, Active Ingredient, PCP Registration Number, Quantity Used (kg), size of treated area (Ha) and List of methods of application - see attached for example of what people have to fill out to report annually to MOE.
[ ] should also provide an output in excel of all treatment records for the query (so we can review and fix any errors before we submit the report to MOE)https://app.zenhub.com/files/296689811/f6a30be9-29cb-4ea8-b2fd-1aea2daa3951/download

Yeah... The link is broken @CrystalChadburn :(


Simple test with api.requests take 20-30 seconds

Following the test instructions on https://python-responder.org/en/latest/testing.html#building-and-testing-with-responder, the test takes 20-30 seconds.
If you don't provide a domain name, Responder's version Requests makes the hostname ; and then tries to resolve it.  Since that's (hopefully!) not a real host, it fails to resolve and the developer has to wait for a timeout.

The problem is with the ; here: https://github.com/taoufik07/responder/blob/master/responder/api.py#L317

One workaround is to start a session explicitly:
with api.session("http://somejunk") as session:
    # uses session as your requests client

Note that this will also run your startup event hooks.


[AnomalyDetector] Increase SDK version to resolve the release issues about last version

Description
The last version packages were published through wrong release pipeline, so there are some release issues. We need to bump up the SDK version quickly and get things back on the right track.
There is no code change except version.
All SDK Contribution checklist:

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

General Guidelines and Best Practices

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

Testing Guidelines

[ ] Pull request includes test coverage for the included changes.

The CI failure is a known issue and unrelated to this change.


should asfreq return future dates as well?

The last date I will obtain is 2011-11-30, but if I want to use this data to calculate returns I do not want to lose data for December and get a MTD return as last datapoint.
So I was wondering if it makes sense that in this case, ts.asfreq(MonthEnd())[-1] returns NaN with date 2012-12-31, while ts.asfreq(MonthEnd())[-1] returns the value of 2011-12-12 with date 2012-12-31.
Any good reason why this should not be the case?
What do you think?

so i assume you want something like this:
from pandas.io.data import get_data_yahoo
px = get_data_yahoo('SPY', '10/1/2011')['Close']

px = data['Close']

offset = datetools.MonthEnd()
start = offset.rollback(px.index[0])
end = offset.rollforward(px.index[-1])
rng = DateRange(start, end, offset=offset)

daily_return = px / px.shift(1) - 1
daily_index = (1 + daily_return).cumprod()

monthly_index = daily_index.reindex(rng, method='pad').fillna(1)

monthly_return = monthly_index / monthly_index.shift(1) - 1

I'm not sure what's the right API for this in asfreq. WIll have to think about it


How to build one of these Vue projects?

Thank you so much for these high quality tutorial.
Would you please teach me how to build one of these Vue projects? Say, "S03-Task-5".
I tried 'npm run build', but no folder named 'dist' generated.
It seems these projects no need to build, I can simply open the index.html.

Hi!
Thanks for enjoying the tutorials and sorry for the late reply :)
As you said, in our case you won't need to build the folder, because the structure is the classic html + css + js.
We are using npm only to launch a local server, ideally once your project is ready to go online you can use FileZilla or similar FTP  clients to directly upload files.
Hope it helps!

Hi !
It's great to hear from you.
Yes, for a time I wondered if no need npm to build this project, what's the
purpose of using it. After trial and I guess it's for launch a local
server.
Thank you again for your previous time and your instructive explain!
Best regards,
張思偉 Janet Zhang
數據新聞產品開發專員 News Room Developer
E/<EMAIL_ADDRESS>M/ 852 5372 2819
W/ www.hk01.com
[image: HK01] http://www.hk01.com/
香港01有限公司 HK01 Company Limited
香港荃灣沙咀道6號嘉達環球中心11樓
11/F, The Octagon, No. 6 Sha Tsui Road, Tsuen Wan, N.T. HK
[image: HK01-ANDROID]
https://play.google.com/store/apps/details?id=com.hk01.news_app [image:
HK01-IOS] https://appsto.re/hk/2dQPab.i
fmorini<EMAIL_ADDRESS>於 2020年8月18日 週二 上午1:06寫道：

Hi!
Thanks for enjoying the tutorials and sorry for the late reply :)
As you said, in our case you won't need to build the folder, because the
structure is the classic html + css + js.
We are using npm only to launch a local server, ideally once your project
is ready to go online you can use FileZilla or similar FTP clients to
directly upload files.
Hope it helps!
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/more-ginger/scrollytelling-beginners/issues/2#issuecomment-674999861,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AN5V7T3GL7RSG5O2EG5V6DLSBFPRZANCNFSM4PZRIIQA
.


Add sizelimit to mount for image modifying

mount didn't work for me on Ubuntu 18.04 LTS and was complaining about overlapping loop device. Added sizelimit to mitigate the issue.

Maybe add sizelimit as an optional note. On some images it worked and on some it didn't.

I think we need to confirm the problem before updating the docs, could you share some logs of when you are experiencing this error? e.g output of mount with -v, fdisk -l on you image and possibly dmesg.


fix: dynamically added filefields

This introduced a bug. I am debugging now.

@lukasvinclav There's an issue with the fileInputUpdatePath implementation that prevents it from working with file inputs that exist when the page initially loads.
Currently, the MutationObserver only watches for newly added elements (childList mutations) and attaches the change event handler to file inputs after they're dynamically added to the DOM. However, this means any file inputs that are part of the initial page HTML are missed completely.
Suggested Fix
We should modify the function to:

Immediately attach handlers to existing file inputs when the function is called
Keep the MutationObserver for handling dynamically added inputs

Here's how the code could be restructured:
const fileInputUpdatePath = () => {
  const handleFileInput = (input) => {
    input.addEventListener("change", (e) => {
      const parts = e.target.value.split("\\");
      const placeholder = input.parentNode.parentNode.parentNode.querySelector(
        "input[type=text]"
      );
      placeholder.setAttribute("value", parts[parts.length - 1]);
    });
  };

  // Handle existing inputs
  document.querySelectorAll("input[type=file]").forEach(handleFileInput);

  // Watch for new inputs
  const observer = new MutationObserver((mutations) => {
    for (const mutation of mutations) {
      if (mutation.type === "childList") {
        document.querySelectorAll("input[type=file]").forEach(handleFileInput);
      }
    }
  });

  observer.observe(document.body, {
    childList: true,
    subtree: true,
  });
};

Please create a new issue with the description.

Cool:
#855 and #856


Refactoring for Side-Effects and Well-Definedness

(see also #71 and #73)
Currently, the mechanism for handling side-effects is pretty broken and requires an alternative approach.  The paper KRML190 is helpful in providing a rough template, though it does not cover the limitations with Boogie's inability to handle method calls.  To address this, we need a translation mechanism which breaks expressions down into a "block" sequence S1 ; .. ; Sn ; e:

(n == 0)  In this case, we have now side-effects and we can translate while loops as normal.
(n > 0) In this case, we have one or more side-effects and we must break while loops down into unstructured control-flow.

In doing this, side-effect semantics must be preserved using conditional control-flow.  A key challenge also lies in the handling of assertion checks, as these must be correctly intermixed.

List of responsibilities:

(Data Types)
(Lambdas)
(Side Effects)
(Well-Formedness)
(Well-Definedness)
(Function Prototypes)
(Heap)
(Type Tests)
(Misc).  Name mangling, local variables
(Framing).

IDEA: Can we adopt ideas from WebAssembly to avoid unstructured control-flow whilst keeping the required flexibility?

I think the key question is what could an intermediate language do for me?

(Data Types) Provide a set of useful data types
(Control Flow) Provide semi-structured control-flow

Another question is: do we really need to pull out method invocations or can we thread them like functions?

One possible intermediate language would be:

(Data Types) Provides a basic compound data types which is slightly higher level than the Boogie dictionary.  It would allow us to define the domain more precisely.  For example, using an integer range (0 .. length) or using a finite set (e.g. f, g, etc).  It handles appropriate boxing / unboxing.
(Semi-structured Control Flow) This would follow web assembly in providing a generic loop construct.
(Functions) This would handle the translation of function's containing imperative code, including generating prototypes, precondition checks, etc.

It would also handle assignments to parameters, and local variable declarations.  It wouldn't handle lambda's, or the breaking down of expressions with side-effects.  Something I'm unsure about is whether it should support a heap, or whether that should be handled as it currently is.


Set Github token for documentation generation in Github Action

This PR sets GITHUB_OAUTH_KEY as an environment variable so https://github.com/databricks/koalas/blob/master/dev/gendoc.py can generate documentation without hitting API call limit

Codecov Report

Merging #1369 into master will decrease coverage by 2.13%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #1369      +/-   ##
==========================================
- Coverage   95.22%   93.08%   -2.14%
==========================================
  Files          34       34
  Lines        7705     7742      +37
==========================================
- Hits         7337     7207     -130
- Misses        368      535     +167

Impacted Files
Coverage Δ

databricks/koalas/usage_logging/__init__.py
26.12% <0.00%> (-69.37%)
:arrow_down:

databricks/koalas/usage_logging/usage_logger.py
50.00% <0.00%> (-50.00%)
:arrow_down:

databricks/koalas/missing/series.py
70.58% <0.00%> (-29.42%)
:arrow_down:

databricks/koalas/missing/frame.py
81.25% <0.00%> (-18.75%)
:arrow_down:

databricks/koalas/missing/indexes.py
88.09% <0.00%> (-11.91%)
:arrow_down:

databricks/koalas/__init__.py
91.48% <0.00%> (-2.13%)
:arrow_down:

databricks/conftest.py
94.33% <0.00%> (-1.89%)
:arrow_down:

databricks/koalas/frame.py
96.15% <0.00%> (-0.59%)
:arrow_down:

databricks/koalas/generic.py
97.13% <0.00%> (-0.41%)
:arrow_down:

databricks/koalas/plot.py
94.04% <0.00%> (-0.24%)
: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 3d7427f...4e520a7. Read the comment docs.


<IP_ADDRESS> is blocked by my ISP, www.google.com works fine

The installer is pinging <IP_ADDRESS> to check internet connectivity.
However, my ISP appears to be blocking that address for DNS purposes.
$ ping -q -w 10 -c 1 <IP_ADDRESS>
PING <IP_ADDRESS> (<IP_ADDRESS>) 56(84) bytes of data.

--- <IP_ADDRESS> ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2074ms
pipe 3

Changing the script to www.google.com as a workaround works:
$ ping -q -w 10 -c 1 www.google.com
PING www.google.com (<IP_ADDRESS>) 56(84) bytes of data.

--- www.google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 16.286/16.286/16.286/0.000 ms

Yikes. This is the first I've heard of an isp blocking <IP_ADDRESS>. Usually it's a user choice to rid themselves of Google's watchful eye.
Thinking out loud, since I think there's a more significant change that needs to happen here -
I honestly wonder if we need this check at all, since it's very possible for this particular test to pass while fetching package lists or packages from apt will fail due to firewall constraints.
It might be worth instead running an apt update and checking the status, since we almost always do that later in the script without error trapping anyway.

My guess is that Exetel blocked to this due to potential performance concerns.  (Australia to North America or Europe is laggy) . I don't agree with with it, but I'm entirely happy with their service aside from this particular quirk.
If I recall correctly I ran into the same issue installing the Blinkt! Python stuff as well.

just my 2 pence

what about pinging <IP_ADDRESS>?
That's a much better one to ping is it not?

@Pyroseza will give that a try and see how many complaints I get, thanks 😆

Lol! Nice one Phil, can't believe it's been open this long! Should not have any issues with <IP_ADDRESS>, after all it's CloudFlare 🤣

Well- yeah- when CloudFlare is down the internet is technically down too 🙄

Heya folks,  I've got to complain about the opposite problem.  My ISP in Chile uses <IP_ADDRESS> for some of their internal stuff despite being notified that that's not an acceptable practice, but the end result is that it is blocked.  I've had to give up on using Cloudflare's DNS service (their CDN works fine), but <IP_ADDRESS> and <IP_ADDRESS> are our only options.

Apparently this is a difficult problem!
In the long term, better exception handling might be the sensible alternative to trying to check connectivity beforehand- since even a working connection might not indicate that apt, or any other commands will work.
In the short term, perhaps a test that fails over from <IP_ADDRESS> to <IP_ADDRESS> and fails outright if neither respond would satisfy most cases.

Something like the following should- in theory- satisfy both cases:
check_network() {
        sudo ping -q -w 10 -c 1 <IP_ADDRESS> | grep "received, 0" &> /dev/null
        if [ $? -eq 0 ]; then
                return 0
        else
                sudo ping -q -w 10 -c 1 <IP_ADDRESS> | grep "received, 0" &> /dev/null
                if [ $? -eq 0 ]; then
                        return 0
                fi
        fi
        return 1
}

Maybe pinging github.com?  If that doesn't work, it indicates either no DNS, or no connectivity to the site you'll be pulling from; either way that would be a fatal error, right?


KAFKA-10792 (2.5 backport): Prevent source task shutdown from blocking herder thread (#9669)

Backports the changes from #9669.
Changes the WorkerSourceTask class to only call SourceTask::stop from the task thread when the task is actually stopped (via Source:task::close just before WorkerTask::run completes), and only if an attempt has been made to start the task (which will not be the case if it was created in the paused state and then shut down before being started). This prevents SourceTask::stop from being indirectly invoked on the herder's thread, which can have adverse effects if the task is unable to shut down promptly.
Unit tests are tweaked where necessary to account for this new logic, which covers some edge cases mentioned in PR #5020 that were unaddressed up until now.
The existing integration tests for blocking connectors added later in 2.6 are backported here to provide cases for blocking source and sink tasks. Full coverage of every source/sink task method is intentionally omitted from these expanded tests in order to avoid inflating test runtime (each one adds an extra 5 seconds at minimum) and because the tests that are added here were sufficient to reproduce the bug with source task shutdown.
Committer Checklist (excluded from commit message)

[ ] Verify design and implementation
[ ] Verify test coverage and CI build status
[ ] Verify documentation (including upgrade notes)

I'm trying to get the builds to run properly, but I did pull locally and the build of that local branch does pass.

I'm trying to get the builds to run properly, but I did pull locally and the build of that local branch does pass.

There seem to be environmental build issues; the builds are failing with "JDK" unknown and "maven" unknown.
I'm going to go ahead and merge this PR to the 2.5 branch.

There seem to be environmental build issues; the builds are failing with "JDK" unknown and "maven" unknown.
I'm going to go ahead and merge this PR to the 2.5 branch.

Thanks Randall!

Thanks Randall!


slideTo, slideNext() ignores "effect" parameter?

With "fade" set as the effect parameter, slideTo seems to ignore it.
How do we programmatically go to the next slide using the fade effect?
Thank you!

Are you sure about that? Check the demo http://www.idangero.us/swiper/demos/16-effect-fade.html . Does it ignore effect when you click on arrows?

Ah, thank you! After hearing it should work, I can reproduce it only if I have my slide content wrapper with the swiper-no-swiping class.
I'm using the swiper as a non-user swipeable cross fader (multi step form). Disabling swiping prevents programmatic swiping at all, so I have wrapped the inside of my slides in a swiper-no-swiping class, so that I can programmatically slide through the slides only.

...

Any suggestions?

Do you have a live example or JSFiddle?

Hey Vladimir,
I just tried to reproduce it on jsfiddle, and could not.
I noticed something interesting though... the transition only happens on
the first slide. The next transitions work fine.
This likely meant the initial transforms were simply wrong because the
swiper is initialized while hidden. Passing true to the update function
as described in the docs solved the problem.
Thank you for walking through this with me.
The library is a game changer.


Unexpected behavior with respect to If-Match headers

Am running into an issue trying to do a simple update or delete with a v3 server.  It's a little difficult to track down due to the error coming back from the server.  The behavior is such that if I have a model that has one or more navigation properties that point to a single other model, it seems to want the "If-Match" header in update and delete requests.  If there are no such nav properties, it does not want that header in there.
For a single request, I can do something like a BeforeRequest handler to add the header conditionally, but even if I come up with sound logic for a single request, it appears that when this is encountered in a batched request, then there isn't a hook to add that header, and from what I can tell, the code that conditionally adds such a header in BatchWriter is never triggered.  Namely because it does not think that the EntityCollectionRequiresOptimisticConcurrencyCheck.
I figure I'm missing some setting or other nuance that would make this work, but I've tried several to no avail.  I'm using the typed approach, which classes that are pieces of the full class up on the server (i.e. just the fields I care about working with.)  No issues with retrieving data so far, nor with inserting new records.
I'm sure you'll need more information, just wasn't sure what all to throw in here just yet so please let me know.

Here's a simple example of what I'm trying to do.
The Project model from the Data Service has many more fields than this, including those aforementioned navigation properties.
public class Project {
    public long Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}
...
var client = new ODataClient(settings);

var project = await client
    .For<Project>()
    .Filter(x => x.Name == "Whatever")
    .FindEntryAsync();

var result = await client
    .For<Project>()
    .Key(project)
    .Set(new { Description = "Modified description" })
    .UpdateEntryAsync();

The Update won't work unless I override the BeforeRequest handler to add the "If-Match" header.

Anyone? :)
This is becoming an issue for us as we are moving into the world of doing updates using this library.  Does anyone else have this problem, where they are talking to a v3 service, the metadata doesn't mention anything about attributes contributing to optimistic concurrency, but clearly something on the server side is automatically treating navigation properties as such, so there are etags generated and the code in the client that conditionally adds If-Match is not doing so since there isn't anything explicit in the metadata about needing to.

I have  same problem?  I have to add somehow If-Match header?


WIP: bindings generated with Clang.jl

This basically uses the setup from https://github.com/trixi-framework/p4est-bindings-clang-jl.
Whenever we recognize something new in the source code related to this process, we should leave notes prefixed by # TODO: Clang.
Closes #31, closes #39
Closes #29, closes #33, closes #41
Open questions and TODOs

[ ] Make it explicit what we are using from P4est_jll

P4est_jll since we export it
libp4est
Done in #53
Update generator scripts in dev accordingly

[x] Naming scheme: Most objects are pointers by default, also in p4est. Thus, we write p4est for the pointer and p4est_obj = unsafe_load(p4est).
[x] ~Build binaries for OpenMPI_jll.jl in P4est_jll.jl?~

We decided not to do this at the moment

[x] How do we want to support different versions of the libp4est library (P4est_jll, local builds)? How do we want to support possibly different (pre-generated) bindings, e.g., to support different versions of p4est?

With Preferences.jl (similar to the new version of MPI.jl)? Seems like the best choice right now
With environment variables checked during the build stage (status quo)?
Something else?
We need to be able to use a local built of p4est (load a custom libp4est.so with user-specified path)

[x] Do not store the p4est header files in dev but set up artifacts to download the correct files instead - with the option to use a set of header files specified by the user when generating new bindings
[ ] Get rid of the old stuff in deps (deps_disabled) and keep only the files relevant for the new setup
[x] Update CI system

Setup in https://github.com/trixi-framework/P4est.jl/blob/main/.github/workflows/ci.yml
We need to run tests on 3 major platforms, different versions of Julia, different configuration options (P4est_jll, local built of p4est, and different bindings (later))

[x] Fix Documenter
[x] https://github.com/trixi-framework/p4est-bindings-clang-jl/issues/3
[x] Update docs (README.md) and news

A simple usage example
Description of basic translation rules
How to use P4est.jl on a cluster

Set MPI.jl to local MPI installation
Use local built of p4est

[ ] Fix macro stuff
Instead of using const MPI_SUCCESS = C_NULL at the beginning of module LibP4est, we should have the correct definitions using stuff from MPI.jl
[ ] Update required CI checks
[ ] Merge this PR
[ ] Make a breaking release ~or a new package?~

According to juliahub.com, Trixi.jl (and Trixi2Vtk.jl) are the only dependents of P4est.jl, so creating a breaking release should be fine. The only advantage of a new package would be that both could be used in parallel if others don't update.

Enhancements that can be made after this PR are collected in https://github.com/trixi-framework/P4est.jl/issues/54.

I did test d4fe920 on JURECA, and I specifically followed https://github.com/trixi-framework/P4est.jl/tree/d4fe920948d75c598ce76d7a6ce501390fc86039#using-a-custom-version-of-mpi-andor-p4est to use a custom MPI implementation (OpenMPI). Overall, it seems to work! A few things I noted:
Precompilation fail after changing MPI implementations
After changing the MPI implementation used by MPI.jl with using MPIPreferences; MPIPreferences.use_system_binary(),

I tried to add the Preferences.jl package to set the correct path to libmpi. However, the addition of Preferences.jl to the local environment caused a precompilation run that ultimately failed:

With using P4est I found out that libp4est could not be found:

However, as it turns out, this later had no negative effects. Thus the question is if this is really a bug or just something that needs to be done in a different order or something that a user should be made aware of in the docs.
Error upon changing the preferences
While still in the same session as above, I was brave enough to ignore the warnings/failed precompilation. Like a strong-willed and fearless RSE, I changed the preferences, just to be greeted with a bunch of (undecipherable) warnings and another error:

At this point, my high spirits left me and doubt started to creep into the back of my mind. I thus quit the Julia session and restarted it, just to try out using P4est, MPI and to be greeted by the welcome message of... nothing. After that, everything seemed to work. However, again, this seems like either we are doing something out of order (or not the way it is supposed to be done); otherwise we should warn users about the warnings and to be steadfast and proceed without regard for life or liberty.
Add info on parallel testing of P4est.jl
I thought it might be useful to verify that P4est really worked with this newfangled MPI implementation, and I thus tried to run an MWE that does really show the use of MPI in P4est. Since there was no example at hand in the docs that fit the bill, I came up with my own based on the "serial" example shown. I share it here with the suggestion to include it (or an adapted version of it) in the docs for the next fearless hero(ine) to wander the realms of custom MPI implementations:
Running
using P4est, MPI; MPI.Init()

connectivity = p4est_connectivity_new_periodic()
p4est = p4est_new_ext(MPI.COMM_WORLD, connectivity, 0, 2, 0, 0, C_NULL, C_NULL)
p4est_obj = unsafe_load(p4est)
connectivity_obj = unsafe_load(p4est_obj.connectivity)

MPI.Barrier(MPI.COMM_WORLD)
rank = MPI.Comm_rank(MPI.COMM_WORLD)
println("rank $rank: local/global num quadrants = ", p4est_obj.local_num_quadrants, "/", p4est_obj.global_num_quadrants)

with, e.g., 3 MPI ranks should give an output similar to
Into p4est_new with min quadrants 0 level 2 uniform 0
New p4est with 1 trees on 3 processors
Initial level 2 potential global quadrants 16 per tree 16
Into p4est_new with min quadrants 0 level 2 uniform 0
New p4est with 1 trees on 3 processors
Initial level 2 potential global quadrants 16 per tree 16
Into p4est_new with min quadrants 0 level 2 uniform 0
New p4est with 1 trees on 3 processors
Initial level 2 potential global quadrants 16 per tree 16
Done p4est_new with 16 total quadrants
Done p4est_new with 16 total quadrants
Done p4est_new with 16 total quadrants
rank 0: local/global num quadrants = 5/16
rank 1: local/global num quadrants = 5/16
rank 2: local/global num quadrants = 6/16

I don't know how to disable the noise that p4est makes, but this might be configurable somehow? The last three lines are really the only relevant here, since they show that the mesh was indeed divided between the 3 ranks.

At this point, my high spirits left me and doubt started to creep into the back of my mind. I thus quit the Julia session and restarted it, just to try out using P4est, MPI and to be greeted by the welcome message of... nothing. After that, everything seemed to work. However, again, this seems like either we are doing something out of order (or not the way it is supposed to be done); otherwise we should warn users about the warnings and to be steadfast and proceed without regard for life or liberty.

Thanks a lot for your tests, @sloede! I summarized the complete installation instructions again in ee38609, including the step of restarting the Julia REPL. I hope this should work for everyone.
I do not know whether we are doing something not the way it is supposed to. I just tried to follow the documentation of MPIPreferences.jl and Preferences.jl. Maybe we can ask someone involved in these packages to take a look?

Since there was no example at hand in the docs that fit the bill, I came up with my own based on the "serial" example shown. I share it here with the suggestion to include it (or an adapted version of it) in the docs for the next fearless hero(ine) to wander the realms of custom MPI implementations

Done in 6e66745

I don't know how to disable the noise that p4est makes, but this might be configurable somehow?

I added a description to the README.md in 43ce8d7

Since there was no example at hand in the docs that fit the bill, I came up with my own based on the "serial" example shown. I share it here with the suggestion to include it (or an adapted version of it) in the docs for the next fearless hero(ine) to wander the realms of custom MPI implementations

Done in 6e66745

Great, thanks! However, I wonder how you executed in the REPL in parallel? It might be easier to provide an example that can just be copy-pasted into a file as well (that's at least what I did).

It might be easier to provide an example that can just be copy-pasted into a file as well (that's at least what I did).

Done in fac22b8

I think this can be merged 🎉. The horrible code coverage is expected 😬

Thanks a lot for your review, @sloede :partying_face:


directories referenced

Podman benchmark (chapter 3) is looking for /etc/podman; /etc/sysconfig/podman; /etc/default/podman directories, but those are not present, at least in my kali linux installation. I did not find those mentioned in the documentation either.
Are these used directories?

No, would you be interested in opening a PR to remove them?


How do I invoke VSTS-team-Calendar data through the REST API interface（如何通过REST API接口调用VSTS-team-Calendar数据）

I need the data in vsts-team-calendar for secondary development（我需要vsts-team-calendar中的数据用于二次开发）

@1871495799, there's no api for this but will look into how we can give access to the data in a controlled way.

We're closing old issues so we can get back to actively maintaining the extension. Feel free to reopen if this is still an issue for you.

收到 ，谢谢

Hi @1871495799 , my Chinese is not top-notch but translate says "received, ok". Feel free to comment in English.


Data processing issue with Azure Sentinel Template: Guided Investigation - Process Alerts.ipynb

error found in "Show these related alerts on a graph" and "Browse List of Related Alerts" sections when processing data for displaying.  Various errors were displayed.  Here is the top and bottom part of the output.
AttributeError                            Traceback (most recent call last)
 in
2
3 if related_alerts is not None and not related_alerts.empty:
----> 4     rel_alert_graph = security_alert_graph.add_related_alerts(related_alerts=related_alerts,
global rel_alert_graph = undefined
global security_alert_graph.add_related_alerts = <function add_related_alerts at 0x7f0c8f505820>
global related_alerts =                                  TenantId                    TimeGenerated
0    xxxxxxxx-xxxx-4e32-xxxx-9bc4bxxx075e 2021-10-26 10:30:18.562000+00:00
1    xxxxxxxx-xxxx-4e32-xxxx-9bc4bxxx075e 2021-10-26 10:30:18.333000+00:00
......
......
entity_type_name = 'url'
raw_entity = {'$id': '13', 'Url': 'https://on-d.oss-cn-shenzhen.aliyuncs.com/download/北京市网上税务局(自然人版)_01210003296.exe', 'Type': 'url'}
450
451         raise TypeError("Could not find a suitable type for {}".format(entity_type))
/anaconda/envs/azureml_py38/lib/python3.8/site-packages/msticpy/datamodel/entities/url.py in init(self=Url(Type=url), src_entity={'$id': '13', 'Type': 'url', 'Url': 'https://on-d.oss-cn-shenzhen.aliyuncs.com/downlo...�然人版)_01210003296.exe'}, **kwargs={})
31         """
32         super().init(src_entity=src_entity, **kwargs)
---> 33         if self.Url:
self.Url = undefined
34             self.dict.update(url_components(self.Url))
35
/anaconda/envs/azureml_py38/lib/python3.8/site-packages/msticpy/datamodel/entities/entity.py in getattr(self=Url(Type=url), name='Url')
196         if name in self._entity_schema:
197             return None
--> 198         raise AttributeError(f"{name} is not a valid attribute.")
global AttributeError = undefined
199
200     def iter(self):
AttributeError: Url is not a valid attribute.

We've updated the Url entity since this version so it no longer tries to access it's URL property.
We're also planning to update these notebooks in the next couple of months (this one was written aeons ago) so I'll try to check this one out and see that it works properly with up-to-date versions of msticpy.
Thanks for reporting the issue,

Leaving open for tracking


[Feature request]: next dev --turbo support

Which project is this feature request for?
@serwist/next
Describe the feature you'd like to request
It would be awesome to have a version of Serwist that works with turbopack.
Describe the solution you'd like
https://turbo.build/pack/docs/features/customizing-turbopack#webpack-loaders-for-nextjs
Describe alternatives you've considered
Webpack 😄

It would be awesome to have a version of Serwist that works with turbopack.

I agree! However, it seems to be not really feasible at the moment. Since Turbopack isn't configurable through plugins yet, our only options to provide rudimentary support for Turbopack would be to either introduce a post-build script that the user runs manually, which would only work for next build --turbo (which doesn't seem to be a thing yet?) and would be really limited, for we are not able to access things the likes of webpack config, fully resolved Next.js config, etc., or write a Turbopack loader as suggested, but I'm not really sure as to when this loader is run. If it runs after the build script is done with static files such as ".next/static/chunks/**/*.js" then we can make it work. Otherwise, we may as well just wait for Turbopack's plugin support. I hope you understand the situation...

@leerob, any updates on when Turbopack will support plugins?

Hey! It supports some today: https://nextjs.org/docs/app/api-reference/next-config-js/turbo#webpack-loaders

@leerob, thanks for the response. My understanding of loaders vs plugins is that loaders only allow you to transform a single file whereas plugins allow customization over build process. See more here). I think the next serwist plugin requires more customization over the build process than just modifying single files.

I agree! However, it seems to be not really feasible at the moment.
Since Turbopack isn't configurable through plugins yet,

Turbopack stated their development roadmap recently.
For this issue I'd propose to use the label "backlog"


Move NAPARI_OCTREE and NAPARI_ASYNC to settings

🚀 Feature
We should move the current NAPARI_OCTREE and NAPARI_ASYNC env vars to our settings. Adjusting these may require restarts.
They will probably go in an experimental/ developer section. We should also merge in the custom config stuff that was done for async into our settings

Remove config.py logic https://github.com/napari/napari/blob/102a7e8f845893c874d2b86f9371d41130100b89/napari/utils/config.py

Set NAPARI_OCTREE=1 to enabled octree rendering with defaults.2) Set NAPARI_OCTREE=/tmp/config.json use a config file.

@sofroniewn do we want to support this behavior or move everything to the settings?

It seems we will also remove config.py logic @sofroniewn https://github.com/napari/napari/blob/102a7e8f845893c874d2b86f9371d41130100b89/napari/utils/config.py ?
@sofroniewn do we want to support this behavior or move everything to the settings?

In the long run it would definitely be nice to remove the custom config. I don't think we really have a good sense of which of all the settings are essential though. I'd probably try and preserve as much of the existing functionality as we can, but I don't want us to get stuck in some deep rabbit hole for some edge case or special property that isn't as important.
It would also be nice to keep all this stuff inside an experimental tab inside the settings so that it was accessible, but clear that it might change before it is finalized.
If in the first PR though we could try leaving the custom config but just add two checkboxes for NAPARI_OCTREE and NAPARI_ASYNC. If we get that working then maybe in follow-up PRs we remove the custom config?

If in the first PR though we could try leaving the custom config but just add two checkboxes for NAPARI_OCTREE and NAPARI_ASYNC. If we get that working then maybe in follow-up PRs we remove the custom config?

Sounds good 👍🏼


Better error when Rx5 is missing

A rough overview of what the better error might look like will be helpful to get started


Some of the pngs removed in f7b48676bed0b6da81fe5b6e55d05832e77c11d2 are still referenced in our views

Commit f7b48676bed0b6da81fe5b6e55d05832e77c11d2 deleted toolbar pngs.
$ for name in $(git show f7b48676bed0b6da81fe5b6e55d05832e77c11d2 | \
   grep ^diff | \
   awk '{print $3}' | \
   sed 's!a/public/images/toolbars/!!'|sort); do
       git grep image_path.*toolbars/$name;
done
app/controllers/application_controller/compare.rb:                         <img src=\"#{ActionController::Base.helpers.image_path('toolbars/delete.png')}\"
app/views/layouts/_classify_table.html.haml:                = image_tag(image_path('toolbars/delete.png'), :alt   => t)
app/views/layouts/_policy_sim.html.haml:                = image_tag(image_path('toolbars/delete.png'), :alt => t)
app/views/miq_ae_customization/_field_value_entry.html.haml:            = link_to(image_tag(image_path('toolbars/delete.png'), :border => "0", :alt => (t = _("Click to delete this entry"))),
app/views/miq_ae_customization/_field_value_entry.html.haml:          = image_tag(image_path('toolbars/delete.png'), :class => "rollover small")
app/views/ops/_ap_form_nteventlog.html.haml:                = image_tag(image_path('toolbars/delete.png'), :class => "rollover small")
app/views/ops/_ap_form_registry.html.haml:                = image_tag(image_path('toolbars/delete.png'))
app/views/ops/_diagnostics_savedreports.html.haml:            = image_tag(image_path('toolbars/delete.png'), :class => "rollover small")
app/views/ops/_ldap_forest_entries.html.haml:                      = image_tag(image_path('toolbars/delete.png'))
app/views/ops/_ldap_server_entry.html.haml:        = image_tag(image_path('toolbars/delete.png'), :class => "rollover small")
app/views/miq_policy/_form_expression.html.haml:    = link_to(image_tag(image_path('toolbars/edit.png'), :border => "0", :alt => (t = _("Edit this Expression"))),
app/views/miq_policy/_form_scope.html.haml:    = link_to(image_tag(image_path('toolbars/edit.png'), :border => "0", :alt => (t = _("Edit this Scope"))),
app/views/report/_form_filter.html.haml:      = link_to(image_tag(image_path('toolbars/edit.png'), :class => "rollover small", :alt => _("Edit this Expression")),
app/views/report/_form_filter.html.haml:          = link_to(image_tag(image_path('toolbars/edit.png'), :class => "rollover small", :alt => _("Edit this Expression")),
app/views/miq_ae_tools/_import_export.html.haml:    = image_submit_tag(image_path('toolbars/export.png'),
app/views/miq_ae_customization/_field_value_entry.html.haml:        = image_submit_tag(image_path('toolbars/import.png'),
app/views/miq_ae_customization/_field_value_entry.html.haml:        = image_submit_tag(image_path('toolbars/import.png'),
app/views/ops/_ap_form_nteventlog.html.haml:          %td= image_tag(image_path('toolbars/import.png'), :class => "rollover small")
app/views/ops/_ap_form_nteventlog.html.haml:            = image_submit_tag(image_path('toolbars/import.png'),
app/views/ops/_ap_form_nteventlog.html.haml:                = image_submit_tag(image_path('toolbars/import.png'),
app/views/ops/_ap_form_registry.html.haml:            = image_submit_tag(image_path('toolbars/import.png'),
app/views/ops/_ap_form_registry.html.haml:                = image_submit_tag(image_path('toolbars/import.png'),
app/views/ops/_ldap_forest_entries.html.haml:              = image_submit_tag(image_path('toolbars/import.png'),
app/views/ops/_ldap_forest_entries.html.haml:                = image_submit_tag(image_path('toolbars/import.png'),
app/views/miq_ae_customization/_field_value_entry.html.haml:        = image_tag(image_path('toolbars/new.png'), :class => "rollover small")
app/views/ops/_ap_form_registry.html.haml:            = image_tag(image_path('toolbars/new.png'), :class => "rollover small")
app/views/ops/_ldap_forest_entries.html.haml:              = image_tag(image_path('toolbars/new.png'))
app/views/ops/_ldap_server_entry.html.haml:        = image_tag(image_path('toolbars/new.png'), :class => "rollover small")
app/views/catalog/_sandt_tree_show.html.haml:              = link_to(image_tag(image_path('toolbars/remove.png'),
app/views/miq_ae_tools/_import_export.html.haml:  = link_to(image_tag(image_path('toolbars/reset.png'),
app/controllers/application_controller/filter.rb:        page << "$('#adv_search_img').prop('src', '#{ActionController::Base.helpers.image_path('toolbars/squashed-false.png')}')"
app/controllers/application_controller/filter.rb:        page << "$('#adv_search_img').prop('src', '#{ActionController::Base.helpers.image_path('toolbars/squashed-true.png')}')"

Rendering the above views results into error like the following:
ActionController::RoutingError (No route matches [GET] "/images/toolbars/edit.png"):

@epwinchell

@mzazrivec Most the the images in that list were put back and are in: /images/toolbars/


Do you have any plan to implement bzpopmax ?

Best way to get support into this lib is to open up a MR for it to get into the codebase.

I see the following sorted set commands that were added in redis5 are missing:

BZPOPMAX
BZPOPMIN
ZPOPMAX
ZPOPMIN

I plan to implement them around the beginning of November, if no one beats me to it ;)

This should be resolved via #1037

This should be resolved via #1037

There have been merged in


Cannot select again last selected notebook after tag selection

When we select a notebook, then a tag => notebook selection seems to be unselect, since the selected color disappear.
But on ly the item is unselected, not the node => so if we click again on the notebook, it's not selected.
To fix: unselect the item AND the node.

fixed


add Github Issue Template

This PR is about to improve the documentation regarding reporting issues. It contains of 2 parts basically:
More and more people are reporting user questions here, so therefore improve the Contributing guidelines, so people know how to write good bug reports.
Create an ISSUE_TEMPLATE.md file, that will be used as template, when a new issue is created. This works as a basic questionnaire to ask for relevent information from the reporter and also make sure, people read the contribution guidelines. (since this is a PR from my private repository, you can see how this works here)

Comments on how to improve the situation are welcome.

Looks like YCM's issue template, which is designed to scare away questions. Too bureaucratic, IMO: too long, too wordy, too many questions.

;)
I don't use YCM and did not look at their issue tracker, but rather let me inspire from git for windows. And yes, part of the motiviation is to have user report better (and do not ask user questions).


Question regarding completion-signatures-for vs completion_signatures_of_t

What is the difference between these two types in the spec?
I'm going under the assumption that they are defined separately because completion_signatures_of_t relies on get_completion_signatures which checks the return type of the member function with the same name, and completion-signatures-for is supposed to be used as a return type for that member function.
If the above is correct, should completion-signatures-for use the same logic as get_completion_signatures, but without the member function check?

As far as I can tell, completion-signatures-for is only used as the return type for basic-sender's get_completion_signatures member function. Each basic-sender type will have different completion signatures, so one way of implementing it is one additional static function in the impls-for struct as in stdexec: https://github.com/NVIDIA/stdexec/blob/main/include/stdexec/__detail/__then.hpp#L74.
Calculating the completion signatures involves lots of tricky metaprogramming, so by specifying it like this they can keep some complexity out of the standard.
It looks like the order in which those things depend on each other is: completion_signatures_of_t -> get_completion_signatures -> completion-signatures-for.


adapt lushootseed keyboard for writing a version of cyrillic?

Would it be possible to add a key to write the extra sound used in Esperanto? I'm trying to create a keyboard using the Cyrillic layout here because there isn't an existing keyboard available. Esperanto has 6 extra letters (ĉ/ĝ/ĥ/ĵ/ŝ/ŭ), but also lacks q, w, x, & y so they could be repurposed. All other letters are used. Semicolon could be used for one too, as in the original layout. On the Russian keyboard Ш/ш ( ʃ ) is "{/[" & Чч "+/=".
I was thinking of using this mapping:
EDIT:
I just installed the Esperanto keyboard to check the mapping:
x is mapped to ĉ = xevalo - ĉevalo
w is mapped to  ĝ = qanwo - ŝanĝo
y is mapped to  ŭ = antay - antaŭ
q is mapped to  ŝ = marqi - marŝi
[ is mapped to   ĵ  = bova[o - bovaĵo
] is mapped to  ĥ = e]oqanwo xiu[ayde - eĥoŝanĝo ĉiuĵaŭde
Do I need to change anything Else to have it show up as something other than "EN"?
Esperanto's IME is 'epo' I think.
The "input components" could be:
// to show 'EO'
{
"name": "Esperanto",
"type": "ime",
"id": "esperanto_klavaro_xkb",
"description": "Esperanto keyboard - klavaro por Esperanto", // user visible description
"language": "eo", // The primary language this IME is used for
"layouts": ["epo"]
}
OR
// to show 'RU'
{
"name": "Есперанто",
"type": "ime",
"id": "Esperanto",
"description": "Cirila por Esperanto",
"language": "ru",
"layouts": ["ru"]
}
@bderrly

ideally I'd like to be able to map the keyboard the same as the Esperanto keyboard as shown in my first comment.

I think you're on the right track. You probably want to set the language to "ru". Then you will need to make a lookup table like that used in the Lushootseed layout to override the the output for different keys. This is not something I'm going to have the time to do but feel free to experiment with it.


Provide a C Wrapper

Some clients require a C wrapper for SVG Native Viewer.

Now I'm working with a preliminary wrapper for C clients.
At present, graphic context (or canvas) which C clients can manage by themselves is only Cairo. For the people who write C programs but want to use Skia or Qt backend, the wrapper should help the management of graphic contexts and provide more simple-minded functions, like, svg_to_png() ?

@mpsuzuki @moazin I think the easiest solution for std::map would be to create a wrapper for std::map similar to https://stackoverflow.com/a/29861747
void* get_svg_native_color_map();
void insert_to_svg_native_color_map(void* color_map, const char* key_string, float* rgb_color);

Dirk, do you have an estimate when we have a C API wrapper in master?

I should add other ports (e.g. GDI+ and Cairo) into C API wrapper...

@lemzwerg I confirmed current C wrapper needs more work. You can find the current code tries to dynamic_cast from void pointer to a pointer to the renderer class, and causes a compile error. I confirmed same error in SKIA port on GNU/Linux. Some tweaks for C API are needed...

I my C-API branch, I used a pointer to a structure SVGNative_Hive, which includes both of the renderer and document

@mpsuzuki I am open to another approach. What ever API is easier to use for clients that need the C wrapper.
@lemzwerg I don't know how much more time I need. If/When @mpsuzuki has a working wrapper for all rendering libs we can use that one.

@moazin @lemzwerg We landed the C wrapper. It would be great if you could take a look and provide feedback.
IMO (with the exception of #84 that @mpsuzuki is working on) this is the last remaining peace for a stable ABI.
Unless you raise concerns with the interface we can move to a stable major version soon.
Here the header with the documentation: https://github.com/adobe/svg-native-viewer/blob/master/svgnative/include/SVGNativeCWrapper.h
Here the example app: https://github.com/adobe/svg-native-viewer/blob/master/svgnative/example/testC/TestMain.cpp

Thanks a lot, it looks great!
Some comments.

There is a typo in SVGNativeCWrapper.h: s/negetive/negative/
What about having a header file svgnative.h instead of the long name?  Or maybe SVGnative.h.
I think it would make sense to actually use a C compiler for testing the wrapper interface.  Sometimes, there are subtle differences of what's allowed and what not.

@lemzwerg Indeed, I would try to rewrite TestC.cpp into TestC.c.

@lemzwerg I drafted a PR #86 to replace testC/TestMain.cpp by testC/TestMain.c. I replaced a few types for the length of data, from int to size_t. If it's not good for the consistency, please let me know, I would replace them to int.

Yes, size_t is the right thing.

Closing as fixed now. Thank you everyone for the help and participation!


Microsoft Entra (ME-ID) groups, Administrator Roles, and App Roles Clarification

Description
In the 'Scopes' section, can clarification be provided to these statements:

A CLIENT app is configured with the User.Read scope (https://graph.microsoft.com/User.Read) in the Azure portal.
A SERVER app is configured with the GroupMember.Read.All scope (https://graph.microsoft.com/GroupMember.Read.All) in the Azure portal.

Are these Delegated or Application permissions?
https://learn.microsoft.com/en-us/aspnet/core/blazor/security/webassembly/microsoft-entra-id-groups-and-roles?view=aspnetcore-7.0#scopes
Page URL
https://learn.microsoft.com/en-us/aspnet/core/blazor/security/webassembly/microsoft-entra-id-groups-and-roles?view=aspnetcore-7.0
Content source URL
https://github.com/dotnet/AspNetCore.Docs/blob/main/aspnetcore/blazor/security/webassembly/microsoft-entra-id-groups-and-roles.md
Document ID
4088c5ca-39c2-9bed-ebc5-683d3441b615
Article author
guardrex

Hello @philip-reed ... IIRC either will work depending on how you want to set up the permissions. Typically, one wouldn't want the users to have more permission than they need (i.e., least privilege), so the GroupMember.Read.All permission would typically only be granted to the app, not the users. Truly tho, I'm not a security expert, and I don't recall further details on it. We cross-link the Graph permissions doc and try to let them (the experts on it) cover as much as they can for us ...
https://learn.microsoft.com/en-us/graph/permissions-reference
I'll research it further and add remarks to the topic on this subject, but I'm a buried in .NET 8 work at the moment. I'll get back to this as soon as I can, but it might not be until 24Q1.

No worries, thank you for responding so quickly.
IMO the cross-linking often adds some confusion, especially if there is anything ambiguous or contradictory.
For example, the documentation page cross-links off to the following:
https://learn.microsoft.com/en-us/aspnet/core/blazor/security/webassembly/graph-api?pivots=graph-sdk-4&view=aspnetcore-7.0
Where there is a statement:

After adding the Microsoft Graph API scopes in the ME-ID area of the Azure portal

But this page doesn't know which page I came from or what scopes are already added, are these the same API Scopes from the previous page? In a Hosted Blazor scenario, is this talking about the client or the server App Registration?
I'm not asking for answers on the above, these are just bits of the documentation I found ambiguous, and I had to go over them more than I expected to try and clarify what was being said.  But that could just be my tired brain on a Friday.

For the Client app, I believe it will be delegated permission for Graph in the portal. Users will be assigned whatever Graph permissions that they're supposed to have, and Graph calls made on their behalf only give them access for their least privileged access.
For the Server app, I vaguely recall that it's application permission for GroupMember.Read.All to read the Azure App Roles ... maybe 🤔😄. It's been several years, so I'm a bit fuzzy on it. I wish I would've said a bit more on that one when I was writing this up.
I'll need to get back to this due to the high priority .NET 8 work. I suggest in the meantime that you try the guidance confirming that the Client app (if you're working with a hosted WASM solution) has Graph delegated permission, which I think is added by default with an app registration. If you're going to work with the Azure App Roles ...
https://learn.microsoft.com/en-us/aspnet/core/blazor/security/webassembly/microsoft-entra-id-groups-and-roles?view=aspnetcore-7.0#app-roles
Try it without giving the Server app anything further than its default User.Read delegated Graph permission. That's provided by Azure when the Server app is registered. See if that works first.
If it turns out later that GroupMember.Read.All for the Server app is required via application permission for Graph (and I'm referring to when you're only adopting the Azure App Roles guidance), then I'd like to chat with Jean-Marc, who knows quite a bit more than I do, to confirm that application permission is correct in that scenario.


Story 001 yarong

This code has all been reviewed as it was committed to yarong so this is just a RI

PR is added to the queue for testing as 1. task. (aaa8872)

PR is added to the queue for testing as 2. task. (aaa8872)

Test (Success) 48893799 build is completed (aaa8872)
See https://github.com/ThaliTester/TestResults/tree/48893799aaa8872_Story_001_yarong_yaronyg/ for the logs

Test (Success) 48893799 build is completed (aaa8872)
See https://github.com/ThaliTester/TestResults/tree/48893799aaa8872_Story_001_yarong_yaronyg/ for the logs

Test 48893799aaa8872(aaa8872) has failed
See https://github.com/ThaliTester/TestResults/tree/48893799aaa8872_Story_001_yarong_yaronyg/ for the fail logs


create or replace trigger is not working

Version
1.13.0
What happened?
create or replace syntax is not supported
https://play.sqlc.dev/p/17df8d91cece0346e3a8169c77c69129250156ce0cd31055631fcf8357c4b37c
Relevant log output
No response
Database schema
No response
SQL queries
No response
Configuration
No response
Playground URL
https://play.sqlc.dev/p/17df8d91cece0346e3a8169c77c69129250156ce0cd31055631fcf8357c4b37c
What operating system are you using?
No response
What database engines are you using?
No response
What type of code are you generating?
No response

The CREATE OR REPLACE TRIGGER syntax was added in PostgreSQL 14. The parser sqlc uses is still based on PostgreSQL 13.
https://github.com/pganalyze/libpg_query/issues/127

Duplicate of https://github.com/kyleconroy/sqlc/issues/1246


Jupyter notebook as part of languages.yml

Preliminary Steps
Please confirm you have...

[x] reviewed How Linguist Works,
[x] reviewed the Troubleshooting docs,
[x] considered implementing an override,
[x] verified an issue has not already been logged for your issue (linguist issues).

Problem Description
What is the premise behind the design principle of counting the language of a repo as jupyter notebook when the written code is in Python? Thanks. :)

I think the original PR that started the addition is a good place to start: https://github.com/github/linguist/pull/2746

I will give it a look, thanks. :)


⚠ Bofrost.at has degraded performance

In c926bf3, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 1012 ms

Resolved: Bofrost.at performance has improved in 34d50e7 after 29 minutes.


Also show/determine windows

This is a feature request. Maybe it doesn't fit, but I thought it would, so let me know.
I had a hanging window on my mac (some 3rd party payment authorisation when renewing my Apple ID) I couldn't get rid of. When I clicked on the window, the app-name in the menu didn't change. So I couldn't find out what process the window belonged to, so I couldn't kill it.
Wouldn't it be nice if there also was a checkbox "windows". And maybe also an option to select a window to determine the process (a bit like "Select element" in the web browser's developer tools).
In the end I used this python3 script from stackexchange to determine the window, but it could be easier...

This doesn't really fit within the intended functionality of Sloth but thanks for bringing up the idea.


Fix missing escape of | in table.

Fixes a typo in the Cache task where there is a missing escape in the table for '|'

@woehrl01 : Thanks for your contribution! The author(s) have been notified to review your proposed change.


live-lock on 4-core SMP platform during the tests/lib/spsc_pbuf/

Describe the bug
tests/lib/spsc_pbuf/ test hangs due to live-lock on RISC-V 4-core SMP platform.
Most of the times the live-lock happens on sched_spinlock in the form when CPU0 always wins
the contention for this spinlock while the other cores continue to spin on it.
To workaround this issue the additional delay could be added to k_spin_unlock: 15 divisions on zero was enough for me to resolve the live-lock:
static inline void cpu_relax(void)
{
	int dummy;
	__asm__ volatile ("div %0, %0, zero" : "=r" (dummy));
	fence();
}

The other way to resolve this live-lock is to "halt" and then "resume" the execution via the OpenOCD
To Reproduce
Steps to reproduce the behavior:

west build -p -b riscv_scr_custom tests/lib/spsc_pbuf/
flash the riscv_scr_custom board and run the  tests/lib/spsc_pbuf/
Observe the test execution stops after awhile. To kick the test further the "halt" + "resume" OpenOCD commands may be used, the test may eventually pass successfully if being kicked this way.

Expected behavior
tests/lib/spsc_pbuf/ passes on all platforms, no live-locks happen due to spinlock acquisition unfairness
Impact
Zephyr kernel could live-lock on some real-life multi-core SMP platforms due to spinlock acquisition unfairness
Logs and console output
*** Booting Zephyr OS build zephyr-v3.4.0-112-gdd2ccd3a3650 ***
Running TESTSUITE test_spsc_pbuf
===================================================================
START - test_0cpy
 PASS - test_0cpy in 0.001 seconds
===================================================================
START - test_0cpy_corner1
 PASS - test_0cpy_corner1 in 0.001 seconds
===================================================================
START - test_0cpy_corner2
 PASS - test_0cpy_corner2 in 0.001 seconds
===================================================================
START - test_0cpy_discard
 PASS - test_0cpy_discard in 0.001 seconds
===================================================================
START - test_0cpy_smaller
 PASS - test_0cpy_smaller in 0.001 seconds
===================================================================
START - test_largest_alloc
 PASS - test_largest_alloc in 0.001 seconds
===================================================================
START - test_spsc_pbuf_ut
 PASS - test_spsc_pbuf_ut in 0.001 seconds
===================================================================
START - test_spsc_pbuf_ut_cache
 PASS - test_spsc_pbuf_ut_cache in 0.001 seconds
===================================================================
START - test_stress
Reading from an interrupt, writing from a thread
66% remaining:0 ms mss
Ztress execution report:
         context 0:
                 - executed:37475, preempted:0
                 - ticks initial:4, optimized:4
         context 1:
                 - executed:18692, preempted:1
                 - ticks initial:4, optimized:4
        Average CPU load:18%, measurements:150
Writes:28041 failures: 0
Writing from an interrupt, reading from a thread
100% remaining:0 ms mss
Ztress execution report:
         context 0:
                 - executed:36937, preempted:0
                 - ticks initial:4, optimized:4
         context 1:
                 - executed:18407, preempted:2
                 - ticks initial:4, optimized:4
        Average CPU load:19%, measurements:150
Writes:72147 failures: 11357
 PASS - test_stress in 30.081 seconds
===================================================================
START - test_stress_0cpy
1% remaining:7000 mss

Environment (please complete the following information):

OS: Linux
Zephyr SDK v.0.16.1
zephyr-v3.4.0

Additional context
Current Zephyr spinlock implementation is based on single atomic variable and doesn't guarantee locking fairness across multiple CPUs. So such live-locks are expected in certain conditions. One of the solutions is to use different spinlock implementation which guarantee locking order and lock acquisition fairness, e.g. in Linux such issues are addressed with Ticket Spinlocks: https://lwn.net/Articles/267968/
Ticket spinlocks proposal for Zephyr could be found here: https://github.com/zephyrproject-rtos/zephyr/pull/61541

Why can't you just put that delay in arch_spin_relax(), which is there for exactly this purpose?

Also, is there an understanding of what lock is being contended so as to produce the failure?  A single core winning every time is not normally the same thing as "live lock" (in fact sometimes that's desirable for performance reasons due to cache residency concerns!).   Are we 100% sure this isn't a bug in the test or spsc_pbuf?  Is something expecting (or promising) some kind of "fairness" that spinlocks aren't ever really going to provide?  Maybe there's a different IPC abstraction that would work better?

Why can't you just put that delay in arch_spin_relax(), which is there for exactly this purpose?

Hi @andyross , currently arch_spin_relax is used for relaxing the CPUs which are spinning, and not the CPU which just released the spinlock. So it will not help out-of-the-box. I made some experiments and in order to workaround this issue added the additional delay  to k_spin_unlock: 15 divisions on zero was enough for me to resolve the live-lock:
static inline void cpu_relax(void)
{
	int dummy;
	__asm__ volatile ("div %0, %0, zero" : "=r" (dummy));
	fence();
}

So, you are right, this may work. But it doesn't look efficient to always relax this way.

Wait.... You need backoff on the locking thread?  Now you have me really confused.  I don't see how you get that without code doing the equivalent of a synchronous "unlock();lock()" (e.g. to "let the other threads run" or whatever).    Any non-trivial amount of code (I mean, seriously, like a dozen instructions even) between the two should be letting another CPU in to get the lock.
And that's 100% an abuse.  Spinlocks aren't semaphores, you don't use them for telling someone else something, they only protect critical state.
Let's find this thing.  I can almost guarantee that there's a root cause to this bug that doesn't involve the spinlock internals.

Also, is there an understanding of what lock is being contended so as to produce the failure? A single core winning every time is not normally the same thing as "live lock" (in fact sometimes that's desirable for performance reasons due to cache residency concerns!). Are we 100% sure this isn't a bug in the test or spsc_pbuf? Is something expecting (or promising) some kind of "fairness" that spinlocks aren't ever really going to provide? Maybe there's a different IPC abstraction that would work better?

Most of the times (about 90% of time) the sched_spinlock was the source of a live-lock, but sometimes it was a spinlock in timing subsystem. sched_spinlock is one hot synchronization element in the kernel. I believe the behavior of how multiple CPUs may contend for such "hot" spinlocks is HW-specific (CPU pipelines, caches, memory latency, NUMA, etc).
The live-lock with the "simple" spinlock implementation is expected for some HW configurations. This is a known problem and it was addressed in e.g. Linux long time ago.

Do you have backtraces?  You can't get a live lock with just the lock itself, you need some code in a loop spinning on it.  Neither the scheduler nor the timer behave like that: they get into the critical section, do their work, and get back out, with presumptively-non-trivial app code interspersed.  More to the point: neither of these things should be caring about fairness at all.  We need to find that loop, because without it this is all voodoo.
Among other things: are we sure this isn't a memory ordering bug somewhere else causing a broken or double-locked lock?  Did you try stuffing extra barriers into the spinlock paths instead?

Also: what are the platforms that show the issue, so I can try to reproduce?  FWIW: the behavior of spinlocks is essentially identical in qemu and other emulators, so this should show up there too.  It's possible to hack at the qemu_x86_64 configuration to enable more cores, though I haven't done it in a long time.

Just to clarify from above: point me to the place(s) in code where you can say "CPU A just released this lock , but it's going to grab it again  before CPU B gets a chance, and then it's going to loop back around via ".
That documents the live lock.  But... again I can't find any spots like that in the scheduler or timeout subsystems.  It's just not how they behave, they don't have loops with unbounded exit conditions that locking might extend, everything that happens is done on finite stuff.

@andyross ,
The backtraces are looking more or less the same as the one presented in the bug description. The test just stops during the test_stress_0cpy and when I look at the debugger (after awhile, you may take a few minutes nap or check immediately)
I always see the same picture: one of the CPUs is owning the sched_spinlock, while the others are spinning on it.
Next comes the funny thing. The debugger uses "halt" and "resume" OpenOCD commands, and when I push resume, the live-lock is getting resolved. And the test is running further until it locks again. The test could even pass successfully if "kicked" this way with "halt" + "resume".
I will try to get access to the system and reconstruct the conditions when the issue had been reproducing (we live with Ticket Spinlocks internally for a few months already) and will provide you with call stacks showing the live-lock on sched_spinlock.
The platform I used was a 4-core RISC-V SMP system with multi-level caches, kind of bigLITTLE (2 big cores, 2 smaller ones), it's not yet upstreamed, but we are working on it.
And the tests/lib/spsc_pbuf/ is the single test from the entire tests/ folder which shows such behavior. There is nothing special in it, it is focused on a pipe-like IPC, but it applies a "right" kind of pressure to the system.
I'll prepare a spinlock test to verify the fairness of spinlock acquisition. Let's see how it will work with different spinlock implementations and make conclusions.
Again, I believe there is no bug in the kernel, this kind of behavior is just expected in some conditions. The most representative example is NUMA. When some CPU just has much faster/shorter access to the memory and will always win the contention. A lot of this behavior depends on caches and branch prediction, we just can't expect such effects to be applicable exclusively to NUMA systems.

I always see the same picture: one of the CPUs is owning the sched_spinlock, while the others are spinning on it.

So... just to be nitpicky: that's a sufficient description of a deadlock, not a live lock.   And indeed, changing the order of operations (e.g. with a fairness patch to spinlocks) can be sufficient to resolve either without actually fixing the root cause.

Again, I believe there is no bug in the kernel, this kind of behavior is just expected in some conditions.

Repeating: that's... not really correct.  You can only get a lockup if there's a cycle between two contexts waiting on each other to progress.  The kernel should 100% be tolerant of arbitrary unfairness in locking.  It doesn't matter if CPU0 "always wins", because it will only ever hammer the lock for finite time before going back to app code (or the idle thread, or whatever).  You can only get a lockup if CPU0's work is unbounded, and if we have that in the kernel it's a bug.
FWIW: knowing that this is on new hardware (and complicated hardware), and only on that new hardware, my bet is that we have a memory ordering issue instead that's left a stuck lock from the perspective of one CPU, and that adding extra atomic operations is just pushing it out of the reorder window.  Alternatively you've found an equivalent issue with e.g. the bespoke spinlock on the thread.switch_handle field, either within the kernel (see kernel/include/kswap.h) or the arch layer that writes it.  Maybe sprinkle memory fences around and see if something turns up?

The deadlock wouldn't be resolved with relaxing the last-owner CPU, right? So in my case "holding" such CPU for awhile out of spinlock helps other CPUs to detect the free spinlock until the "lucky CPU" grabs it again.
I understand what you are saying, we shouldn't swipe the potential bug in the kernel under the carpet using the fair spinlocks as a WAR for this bug. For sure we should look and optimize the kernel if some flaw is really there. But at the same time this is not a justification for standing out of spinlock acquisition fairness, because, as you say, the kernel should be tolerant to how the HW behaves in relation to memory access. Let's say there is just a certain level of unfairness the HW can sustain without live-locking (NUMA) and SW can't really control the "portion" of unfairness. We either should have predictable behavior, or there will be always a probability of a live-lock. This is not an invention of mine, this is a known fundamental problem, please see https://lwn.net/Articles/267968/
Bringing in the Ticket Spinlocks doesn't mean we replace the original spinlocks with them, since it's disabled by default. We just provide a solution for users with specific kind of HW, the way they did it with Linux. The kernel works with basic spinlocks by default and we are still able to reproduce and debug the potential SW issue.

Let's say there is just a certain level of unfairness the HW can sustain without live-locking (NUMA)

Again, you keep saying that[1], but that's not correct.  Unfairness and "live lock" are different things.  Live lock requires a cycle of dependency: CPU A can't finish it's work until CPU B does something, but CPU B doesn't get to run because of unfairness.  And I'm saying that almost always (and in the kernel, always always!), that kind of dependency in spinning code represents a bug that needs to be fixed[2], you don't magically make it better with fairness.
[1] And also citing that LWN article, which I promise you I've read.  Pretty sure I read it 15 years ago when it was new, too.  It's not about live lock conditions, it's about performance.  And I 100% agree that there are regimes where spinlock fairness can impact performance.  But there are regimes where fair spinlocks are a net loss too, and IMHO Zephyr sits more in the latter than the former.  I'm not saying no, I'm saying not like this.
And I'm also saying that the circumstances argue strongly that this is a hardware interaction with e.g. a missing or incorrectly-applied barrier and not a logic bug.
[2] Because we're an RTOS, obviously.  Literally everything the kernel does needs to represent finite/bounded work guaranteed to finish before whatever time metric the app has decided is its latency tolerance.

Repeating: that's... not really correct.  You can only get a lockup if
there's a cycle between two contexts waiting on each other to
progress. The kernel should 100% be tolerant of arbitrary unfairness in
locking.  It doesn't matter if CPU0 "always wins", because it will only
ever hammer the lock for finite time before going back to app code (or
the idle thread, or whatever).

This is true of Linux as well. Yet, user space apps may experience fairness
issues because of the kernel space spinlock implementation.

Because we're an RTOS, obviously.  Literally everything the kernel does
needs to represent finite/bounded work guaranteed to finish before whatever time metric the app has decided is its
latency tolerance.

Predictability goes a long way towards that. Unfair spinlocks opens the way
for jitters and unpredictability, two things that are unwelcome in an RTOS.
 The implementation
is described in the comments. The straight-line lock/unlock instruction
sequence is slightly slower than the dec based locks on modern x86 CPUs,
however the difference is quite small on Core2 and Opteron when working out of
cache, and becomes almost insignificant even on P4 when the lock misses cache.
trylock is more significantly slower, but they are relatively rare.

On an 8 core (2 socket) Opteron, spinlock unfairness is extremely noticable,
with a userspace test having a difference of up to 2x runtime per thread, and
some threads are starved or "unfairly" granted the lock up to 1 000 000 (!)
times. After this patch, all threads appear to finish at exactly the same
time.

Zephyr is not immune to such issues either. And when apps are made into
kernel threads then spinlock usage may induce active starvation above
simple unfairness.
The quoted hardware above isn't particularly embedded-like, but such issues
were present a long time ago. And strange hardware is likely to come about
in the embedded world more than ever before.
So why such resistance towards a generic solution that has proven itself
elsewhere?
You keep mentioning performance issues.  Can you substantiate that?
The Linux community is full of performance freaks so I really doubt they'd kept the ticket implementation if that
was significant. In fact, I don't see how the performance could be
measurably different in the uncontended case. And not having an LL/SC
sequence in the contended loop would definitely improve the contended
case for not having to lock the affected cache line over and over (at least
on ARM64, most likely on RISCV too).
And, if I recall correctly, predictability is more important than performance
for an RTOS.
AS to the size increase... I tried the philosopher sample on qemu_riscv64_smp
and the difference is around 0.1% of the total size which is not worth writing
home about. If we duplicate the smartness from the Linux implementation
(like packing both indexes in the same word) then we'd get back most of
the memory usage increase.

we live with Ticket Spinlocks internally for a few months already

Good to know. We'll simply do the same and recommend it to our customers
over the upstream version as well. The tradeoff is definitely in favor of this.

This is going in circles.  The putative live lock condition is unsubstantiated, period.  Show me where it is and I'll fix it.  Don't demand we merge an extremely impactful (and frankly quite risky) feature to fix a bug we can't actually find, and that shows up only one test on one non-public hardware platform.
I'm not saying no to ticket spinlocks.  I'm just saying we aren't going to replace the existing spinlocks on what amounts to a hunch.

Sorry, realized I missed one bit I should have replied to:

The deadlock wouldn't be resolved with relaxing the last-owner CPU, right?

No, it absolutely could be.  Putting that relaxation step in doesn't change the logic of the behavior, but it changes the ordering of operations and the sizes of the various critical windows needed to exercise things like races and deadlocks.  It doesn't "fix" the bug, but it might make it a million times (or more) less likely.
I really think we have two separate things being conflated here:

This bug, which I'm increasingly convinced isn't about spinlock fairness at all, and...
A much less contentious discussion about how to measure/review/deploy a nifty new feature for locking fairness.

Some numbers from today's main. It isn't a problem limited to 1 out-of-tree platform, but I would agree with Andy that it is more of a question of fairness.
qemu_x86_64:
CPU0 acquired spinlock 0 times, expected 1000
CPU1 acquired spinlock 2000 times, expected 1000

qemu_riscv64_smp:
CPU0 acquired spinlock 275 times, expected 1000
CPU1 acquired spinlock 1725 times, expected 1000

qemu_cortex_a53_smp:
CPU0 acquired spinlock 1599 times, expected 1000
CPU1 acquired spinlock 401 times, expected 1000

Hi @cfriedt , could you please clarify:  is it with ticket spinlocks, or without? You've just run the fairness_test "as is" from the review branch, right?

Hi @cfriedt , could you please clarify:  is it with ticket spinlocks, or without? You've just run the fairness_test "as is" from the review branch, right?

That is without ticket spinlocks

Fixed with #61541


Draft Project Idea: Impact Calculator 🌱

What is a Draft Project Idea?
A Draft Project Idea is a concept for a project within the Optimism ecosystem that is generally considered valuable but has not yet been fleshed out into a clearly defined product. Draft Project Ideas may be converted into Ecosystem Project Ideas as they are explored further and more thoroughly specified.

Summary
The Impact Calculator is designed to streamline the evaluation of projects in the Optimism RetroPGF voting process by quantifying their impact through various metrics. This tool is expected to transition the grantmaking process from individual project evaluation to a more strategic overview, helping to maintain and improve the ROI of grant allocations.
The idea for this project is to built a simple prototype to test out the idea.

You can find a Figma mock up with some more detailed descriptions here
Dive deeper into impact vectors by checking out Carl's post on levels of the game and Ecosystem Impact Vectors, or play around with OpenSource Observer.
If you're interesting in tackling this project idea, come join this Telegram group

Possible Features

Impact Vector Selection: Allows users to choose from various impact vectors with descriptions and creator names, search functionality, and options to view detailed pages or add vectors to a ballot.
Ballot View: A ballot system where users can select or deselect impact vectors and edit their configurations. This includes a graphical representation of the distribution of funds among projects.
Detailed View: Each impact vector has a detailed view, including a name, description, creator, and a link to GitHub. Users can visualize the impact vector and configure it.
Configuration Option: Users can set a scale or weight to deterimine how flat or skewed the eventual distribution of tokens to projects should be.

Hello OPtimists 🙂
We (@Billy19191 and @wit03) are both from the RetroPGF Hub. In the latest round of RetroPGF, there have been several complaints about evaluating and defining "Impact = Profit". This is a crucial point for badgeholders when evaluating each individual or project application. During round 3, one of the badgeholders came up with the idea of building a metric garden framework for evaluation purposes, which we think is awesome. We can enhance this approach by upgrading it to an "Impact Calculator". Our goal is to solve the impact problem so this idea matches our goal and we are interested in making this happen!

Love this initiative! This effort was very much on my mind when I wrote this post on What builders can learn from RetroPGF 3.
Concretely, it includes a lot of distribution visualizations and analysis of which types of impact metrics were correlated with higher token rewards.
There's a Jupyter Notebook and CSV files that people can use if they want to take this analysis further.

The Buidl Guidl is working on building out the Impact Calculator prototype front end so we can help test the idea. You can follow along with our progress here: https://github.com/BuidlGuidl/impact-calculator


Task is created in WinXP but not in Win7

Hi there,
I've developed a tool to create scheduled tasks with WinXP in mind, but ended up that when I needed to use it in Win7, I receive an error.
The exception message is: (47,4):EndBondary:, triggered when I call TaskService.RootFolder.RegisterTaskDefinition(string, TaskDefinition, TaskCreation, string, string, TaskLogonType, string).
I have to use that overload of RegisterTaskDefinition() since I need the created task to run under a specific username even when the user is not logged in.
I even tried to set Trigger.EndBoundary explicitly to DateTime.MaxValue, but the error persists.
As an additional information, the issue happens when either a WeeklyTrigger or DailyTrigger is used.
Using Microsoft.Win32.TaskScheduler.dll v. <IP_ADDRESS>.
Can anyone please help me with that? I have no idea what is going on.
Originally posted: 2011-06-13T08:38:09

I think I will need to see more of your code to help troubleshoot. I personally have used the EndBoundary property of many different kinds of tasks under both XP and Win7 with success. Please create an issue and post your code that both creates the trigger and registers the task. If you are passing around a TaskDefinition, please also include that code in case there is a persistance error.
Originally posted: 2011-06-13T12:29:37

Thanks for the answer, dahall. I added the issue as you suggested, but as for now I figured out a workaround. I simply set Trigger.EndBoundary = new DateTime(2099, 12, 31) and the problem is gone.
Not the most elegant solution, I know, specially because it can be visible in the scheduled task editor, but at least I can get it to work for now. Hopefully the scheduled task won't be necessary in 2100 :-)
Originally posted: 2011-06-13T12:35:09

Under Win7, whenever you assign a value DeleteExpiredTaskAfter you must also assign a value to EndBoundary. I also noticed your use of Repetition.Duration without specifying Repetition.Interval. The DailyTrigger will already repeat each day based on the specified DaysInterval. I think that line may be extraneous. Also, if you only need to run the trigger once, just use the TimeTrigger. The following code works:
using (TaskService taskService = new TaskService())
{
TaskDefinition task = taskService.NewTask();
   task.Triggers.Add(new DailyTrigger { EndBoundary = DateTime.Now + TimeSpan.FromDays(7) });
   task.Actions.Add(new ExecAction("notepad.exe", String.Empty, @"C:\Windows"));

   // Ensures the task is marked with 'delete the task if it is not scheduled to run again'
   task.Settings.DeleteExpiredTaskAfter = TimeSpan.FromMinutes(1);

   // We want that the task is executed under a specific user even when the user is not logged in
   taskService.RootFolder.RegisterTaskDefinition("Test Task", task, TaskCreation.CreateOrUpdate, "username", "password", TaskLogonType.Password, null);
}

Originally posted: 2011-06-13T14:37:58

Setting Repetition.Duration is necessary to avoid the following exception in Windows XP: System.ArgumentException: Trigger.Repetition.Interval must be less than Trigger.Repetition.Duration under Task Scheduler 1.0.
Any ideas how to avoid that without setting Repetition.Duration only?
Originally posted: 2011-06-14T08:18:34

You're right about that problem under V1 and version 1.6.1 of the library. It is corrected in the 1.6.2 release that is forthcoming. Under 1.6.1, your addition of that line is an appropriate work-around.
Originally posted: 2011-06-14T14:27:15


Removed Wait from library

@badrishc Any reason for not merging this?

Oh, that's just because the feature was merged to a different PR which went to master: https://github.com/microsoft/CRA/pull/23
:)

I see, thanks for clarifying.


Support loading models from multiple locations

Model files adds up real fast, and my internal disk is near full after pulling a few 72b models. It would be great if OLLAMA_MODELS can be a colon separated string with multiple paths. Then the pull and run command should automatically decide which folder to put new models to and allow overwritting with a switch.

Also: once this is implemented, an mv command to move models around would be useful too.

If this were implemented, it would be convenient if some paths could be read-only, e.g. for site-wide locations where an administrator pre-installed models.


Release Google.Cloud.Dialogflow.Cx.V3 version 2.19.0

Changes in this release:
New features

Add properties for nested resource name references (commit 15eec4d)

Created release for Google.Cloud.Dialogflow.Cx.V3-2.19.0


doom upgrade failure with persp-mode.el

I ran doom upgrade and it fails to complete the upgrade due to an error with persp-mode.el
What did you expect to happen?
Upgrade to complete successfully.
What actually happened?
❯ ~/.emacs.d/bin/doom -d upgrade
- DEBUG=1
> Preparing to upgrade Doom Emacs and its packages...
✓ Doom is already up-to-date!
Doom is up-to-date!
> Synchronizing your config with Doom Emacs...
  > Regenerating envvars file at "~/.emacs.d/.local/env"
    ✓ Successfully generated "~/.emacs.d/.local/env"
  > Installing packages...
    - No packages need to be installed
  > (Re)building packages...
    ✓ No packages need rebuilding
  > Updating recipe repos...
  > Updating packages (this may take a while)...
    > In repository "persp-mode.el", HEAD (on branch "remove-byte-compile") is ahead of branch "master"

         1) Abort
         2) Fast-forward branch "master" to HEAD

      How to proceed? (1, 2) 2
    > In repository "persp-mode.el", HEAD (on branch "remove-byte-compile") is ahead of branch "master"

         1) Abort
         2) Fast-forward branch "master" to HEAD

      How to proceed? (1, 2) 2
    > In repository "persp-mode.el", HEAD (on branch "remove-byte-compile") is ahead of branch "master"

         1) Abort
         2) Fast-forward branch "master" to HEAD

      How to proceed? (1, 2) 2
    > In repository "persp-mode.el", HEAD (on branch "remove-byte-compile") is ahead of branch "master"

         1) Abort
         2) Fast-forward branch "master" to HEAD

      How to proceed? (1, 2) 1

! Aborted

      ! Script was abruptly aborted! Run 'doom sync' to repair inconsistencies

Additional details:
❯ ~/.emacs.d/bin/doom version
Doom v2.0.9 (HEAD -> develop 9929883bf 2020-10-19 01:25:47 -0400)

❯ emacs --version
GNU Emacs 27.1
Copyright (C) 2020 Free Software Foundation, Inc.
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GNU Emacs
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.

System information:

❯ ~/.emacs.d/bin/doom info
((system
  (type . gnu/linux)
  (config . "x86_64-pc-linux-gnu")
  (shell . "/usr/bin/zsh")
  (uname . "Linux 5.8.0-23-generic #24-Ubuntu SMP Fri Oct 9 16:32:13 UTC 2020 x86_64")
  (path "~/.nix-profile/bin" "~/anaconda3/condabin" "~/.pyenv/plugins/pyenv-virtualenv/shims" "~/.pyenv/shims" "~/.pyenv/bin" "~/go/bin" "/snap/bin" "~/.cargo/bin" "/usr/local/sbin" "/usr/local/bin" "/usr/sbin" "/usr/bin" "/sbin" "/bin" "/usr/games" "/usr/local/games" "/snap/bin" "/snap/emacs/current/usr/libexec/emacs/27.1/x86_64-pc-linux-gnu"))
 (emacs
  (dir . "~/.emacs.d/")
  (version . "27.1")
  (build . "Aug 26, 2020")
  (buildopts . "--prefix= --prefix=/snap/emacs/current/usr --with-xwidgets --with-x-toolkit=gtk3 --without-xaw3d --with-modules --with-cairo 'CFLAGS= -isystem/build/emacs/parts/emacs/install/usr/include -O2' 'CPPFLAGS= -isystem/build/emacs/parts/emacs/install/usr/include' 'LDFLAGS= -L/build/emacs/parts/emacs/install/lib -L/build/emacs/parts/emacs/install/usr/lib -L/build/emacs/parts/emacs/install/lib/x86_64-linux-gnu -L/build/emacs/parts/emacs/install/usr/lib/x86_64-linux-gnu'")
  (features . "XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND GPM DBUS GSETTINGS GLIB NOTIFY INOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES THREADS XWIDGETS LIBSYSTEMD JSON PDUMPER LCMS2 GMP")
  (traits batch envvar-file))
 (doom
  (dir . "~/.doom.d/")
  (version . "2.0.9")
  (build . "HEAD -> develop 9929883bf 2020-10-19 01:25:47 -0400")
  (elc-files . 0)
  (modules :completion company ivy :ui doom doom-dashboard doom-quit hl-todo ligatures modeline ophints (popup +defaults) vc-gutter vi-tilde-fringe workspaces :editor evil file-templates fold snippets :emacs dired electric ibuffer undo vc :checkers syntax :tools (eval +overlay) lookup lsp magit :os (tty +osc) :lang cc emacs-lisp (go +lsp) json markdown org python rst rust sh yaml :config (default +bindings +smartparens))
  (packages (wakatime-mode))
  (unpin "n/a")
  (elpa "n/a")))

Duplicate of #4038. See https://github.com/hlissner/doom-emacs/issues/4038#issuecomment-704121797

Thanks @hlissner. I confirm that the workaround mentioned by the comment in #4038 helped.