Homebrew has disabled<EMAIL_ADDRESS>

Error<EMAIL_ADDRESS>has been disabled because it is not supported upstream! It was disabled on 2024-10-24.

How does one install php without it?

The flag --with-openssl=$(brew --prefix openssl) works for me; that is:
export PHP_CONFIGURE_OPTIONS="--with-openssl=$(brew --prefix openssl)"
asdf install php 8.3.13

… works for me without<EMAIL_ADDRESS>

… works for me without<EMAIL_ADDRESS>
Yeah but if you set PHP_CONFIGURE_OPTIONS yourself, the installer will completely skip the automatic os-based configure options. This is the output of os_based_configure_options on my machine:
--with-gmp=/opt/homebrew/opt/gmp --with-sodium=/opt/homebrew/opt/libsodium --with-freetype-dir=/opt/homebrew/opt/freetype --with-gettext=/opt/homebrew/opt/gettext --with-icu-dir=/opt/homebrew/opt/icu4c@76 --with-webp-dir=/opt/homebrew/opt/webp --with-png-dir=/opt/homebrew/opt/libpng --with-zlib-dir=/opt/homebrew/opt/zlib --with-libzip=/opt/homebrew/opt/libzip --with-readline=/opt/homebrew/opt/readline --with-iconv=/opt/homebrew/opt/libiconv

I don't think most user would want to manage all those options themselves.
I would prefer if this plugin either changed<EMAIL_ADDRESS>to openssl in the install script, or if that's not possible, allow us to override that specific value with an environment variable.

… works for me without<EMAIL_ADDRESS>
Yeah but if you set PHP_CONFIGURE_OPTIONS yourself, the installer will completely skip the automatic os-based configure options. This is the output of os_based_configure_options on my machine:
--with-gmp=/opt/homebrew/opt/gmp --with-sodium=/opt/homebrew/opt/libsodium --with-freetype-dir=/opt/homebrew/opt/freetype --with-gettext=/opt/homebrew/opt/gettext --with-icu-dir=/opt/homebrew/opt/icu4c@76 --with-webp-dir=/opt/homebrew/opt/webp --with-png-dir=/opt/homebrew/opt/libpng --with-zlib-dir=/opt/homebrew/opt/zlib --with-libzip=/opt/homebrew/opt/libzip --with-readline=/opt/homebrew/opt/readline --with-iconv=/opt/homebrew/opt/libiconv

I don't think most users would want to manage and maintain all those options themselves.
I would prefer if this plugin either changed<EMAIL_ADDRESS>to openssl in the install script, or if that's not possible, allow us to override that specific value with an environment variable.

Absolutely! My response should be viewed as a band-aid for folks who just want to install PHP and move on with their lives, nothing more.

https://github.com/asdf-community/asdf-php/blob/master/bin/install#L31
freeze<EMAIL_ADDRESS>by https://github.com/asdf-community/asdf-php/pull/97 ?

Yeah that's the issue. I think the best and easiest solution is to allow overriding the openssl version with an environment variable, or simply merging #154 so we can append the configure options.

Hi!
I am using PHP 8.0 and now openssl was updated to 3.4
But I need to use<EMAIL_ADDRESS>which I manually install to /usr/local/openssl-1.1 (homebrew is situated /opt/homebrew/..)
In terminal, when i type openssl version, I got OpenSSL 1.1.1u  30 May 2023. That`s OK.
If I dump openssl version in my project, Ive got OpenSSL 3.4.0 22 Oct 2024`
Please, can you tell me, if I can run<EMAIL_ADDRESS>under homebrew PHP 8.0 and how?
Many thanks!!

@MikKuba you can edit the install script in ~/.asdf/plugins/php/bin/install. Search for openssl_path= and hardcode the path to your installation folder (it should be the folder that contains bin,include,lib and share subfolders). There are 2 local openssl_path variables you have to override.

Recently I reseted my Macbook (formatted it) and went to install PHP with asdf, I did install Brew and it's requirements and I still received this error:
Warning: fopen(): Unable to find the wrapper "https"
Then after reading this post and concatenating some answers I've used this line to install PHP normally.
export PHP_CONFIGURE_OPTIONS="--with-gmp=/opt/homebrew/opt/gmp --with-sodium=/opt/homebrew/opt/libsodium --with-freetype-dir=/opt/homebrew/opt/freetype --with-gettext=/opt/homebrew/opt/gettext --with-icu-dir=/opt/homebrew/opt/icu4c@76 --with-webp-dir=/opt/homebrew/opt/webp --with-png-dir=/opt/homebrew/opt/libpng --with-zlib-dir=/opt/homebrew/opt/zlib --with-libzip=/opt/homebrew/opt/libzip --with-readline=/opt/homebrew/opt/readline --with-iconv=/opt/homebrew/opt/libiconv --with-openssl=$(brew --prefix openssl)" asdf install php <php.version.here>


why not return error when setting parents if there is a circle error

Several advices:

SetParent, if you set 1 to a, then a == 1, but SetParent is more like AddParent
If there are some potential circle errors, they should be thrown immediately rather than at runtime

I would agree with the first point and it will be improved.
The second one, if we put circle detecting to the function it will reduce the performance significantly.
I suggest using InherCircle manully and adding it to each SetParent call if detecting circle errors is the key step to you.
Thank you!

By the way, thank you for your work


process docu: release team CI Signal Lead updates

Fixes: https://github.com/kubernetes/sig-release/issues/189#issuecomment-398533947
Update README.md and ci-signal-palybook.md post various CI Signal process improvements in 1.11

/assign @tpepper @jberkus @justaugustus @mzee1000 @dims


Regenerate master dashboard

Regenerate master-dashboard.json after rename etcd_disk_backend_commit_duration_seconds to etcd_disk_backend_commit_duration_seconds_bucket in master dashboard.

/assign @jkaniuk

/ok-to-test

@jkaniuk @wojtek-t I send PR to regenerate master-dashboard.json file after https://github.com/kubernetes/perf-tests/pull/1372 merged.
Then i occur an error when make dashboard. I found a issue about attrib() got an unexpected keyword argument 'convert' on import , i found the grafanalib 0.5.5 fix it, so should we upgrade grafanalib 0.5.3 to 0.5.5? If upgrade, i send a commit in this PR or another PR to do it?
# Setting PYTHONPATH to WD is a workaround for https://github.com/weaveworks/grafanalib/issues/58
PYTHONPATH="$PYTHONPATH:/perf-tests/clusterloader2/pkg/prometheus/manifests/dashboards" generate-dashboard  "master-dashboard.dashboard.py" | python3 -m json.tool > "master-dashboard.json"
Traceback (most recent call last):
  File "/usr/local/bin/generate-dashboard", line 8, in <module>
    sys.exit(generate_dashboard_script())
  File "/usr/local/lib/python3.8/site-packages/grafanalib/_gen.py", line 126, in generate_dashboard_script
    run_script(generate_dashboard)
  File "/usr/local/lib/python3.8/site-packages/grafanalib/_gen.py", line 116, in run_script
    sys.exit(f(sys.argv[1:]))
  File "/usr/local/lib/python3.8/site-packages/grafanalib/_gen.py", line 103, in generate_dashboard
    dashboard = load_dashboard(opts.dashboard)
  File "/usr/local/lib/python3.8/site-packages/grafanalib/_gen.py", line 24, in load_dashboard
    module = imp.load_source("dashboard", path)
  File "/usr/local/lib/python3.8/imp.py", line 171, in load_source
    module = _load(spec)
  File "<frozen importlib._bootstrap>", line 702, in _load
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/perf-tests/clusterloader2/pkg/prometheus/manifests/dashboards/master-dashboard.dashboard.py", line 18, in <module>
    from grafanalib import core as g
  File "/usr/local/lib/python3.8/site-packages/grafanalib/core.py", line 449, in <module>
    class Row(object):
  File "/usr/local/lib/python3.8/site-packages/grafanalib/core.py", line 452, in Row
    panels = attr.ib(default=attr.Factory(list), convert=_balance_panels)
TypeError: attrib() got an unexpected keyword argument 'convert'

/lgtm
As for grafanalib 0.5.3 it works fine on my PC.
Requirement already satisfied: grafanalib==0.5.3 in ~/.local/lib/python3.8/site-packages (from -r requirements.txt (line 1)) (0.5.3)

/assign @wojtek-t

As for grafanalib 0.5.3 it works fine on my PC.

The grafanalib depends on the attrs library, and the 19.03 version of this library make generate dashboard fail, if reinstall attrs to 19.02 or 19.01, there are nothing wrong. Does your attrs version less than 19.03, so it works well?

/approve

As for grafanalib 0.5.3 it works fine on my PC.

The grafanalib depends on the attrs library, and the 19.03 version of this library make generate dashboard fail, if reinstall attrs to 19.02 or 19.01, there are nothing wrong. Does your attrs version less than 19.03, so it works well?

Works for me with 19.3.0:
$ make
Requirement already satisfied: grafanalib==0.5.3 in /usr/local/google/home/jkaniuk/.local/lib/python3.8/site-packages (from -r requirements.txt (line 1)) (0.5.3)
Requirement already satisfied: attrs in /usr/lib/python3/dist-packages (from grafanalib==0.5.3->-r requirements.txt (line 1)) (19.3.0)

$ pip3 freeze
grafanalib==0.5.3
attrs==19.3.0


Webhook validation error : invalid signature passed

Hi,
In My test enviroment, I have used the following code to validate the Webhook:
try{
        	 if(!$oApi->utility->verifyWebhookSignature($requestBody, $razorPaySignature, $this->RAZOR_PAY_SECRET_KEY)) {
	            Log::info('Hash validation failed. so terminating the process');
	            die;
        	}
        }
        catch(Exception $e) {
        	Log::info('RazorPay Webhook validation Error: '.$e->getMessage());
        	die;
        }

Where $requestBody is the json encoded request data, $razorPaySignature is the value received form header X-Razorpay-Signature.
But always I'm getting this error : Invalid signature passed.
I'm sure the $this->RAZOR_PAY_SECRET_KEY contains right value.
This is the request JSON:
{
"entity": "event",
"event": "payment.authorized",
"contains": [
"payment"
],
"payload": {
"payment": {
"entity": {
"id": "pay_8Tikb77Pvn10yb",
"entity": "payment",
"amount": 1000,
"currency": "INR",
"status": "authorized",
"order_id": null,
"invoice_id": null,
"international": false,
"method": "netbanking",
"amount_refunded": 0,
"refund_status": null,
"captured": false,
"description": "Purchase Description",
"card_id": null,
"bank": "HDFC",
"wallet": null,
"vpa": null,
"email"<EMAIL_ADDRESS>"contact": "123123456789",
"notes": {
"booking_id": "15666A",
"service": "hotel"
},
"fee": null,
"service_tax": null,
"error_code": null,
"error_description": null,
"created_at":<PHONE_NUMBER>,
"tax": null
}
}
},
"created_at":<PHONE_NUMBER>
}

Which package version are you currently at?

@captn3m0 2.*

@phpnets Can you give us the output of composer show|grep razorpay to give us the exact version?

@captn3m0 the version is 2.0.2

How are you reading the request JSON body?

@captn3m0
I used below both methods both return the same
$requestBody 	   =  json_encode($oRequest->toArray());
OR
$requestBody 	   = $oRequest->getContent();

the $requestBody contains data I described in the question above

Looks like you are trying to verify the webhook signature using the Key Secret. You must use the webhook secret that you have specified while setting up the webhook
Please make sure you are getting the raw request body correctly. Our webhook requests do not contain newlines.

@captn3m0
Yeah, the new key secret was not updated with webhook. Now It is okay.  And could you please clarify that the validation will not return true if it success right? So the try catch is enough to catch the unmatched hash?
```

try{
$oApi->utility->verifyWebhookSignature($requestBody, $razorPaySignature, $this->RAZOR_PAY_SECRET_KEY)
}
catch(Exception $e) {
Log::info('RazorPay Webhook validation Error: '.$e->getMessage());
die;
}

Thank you.

Yes, we throw Razorpay\Errors\SignatureVerificationError in case the signature validation fails. The method will always return null


Order of validation checks in OSB API

In case of async parameter check, this code sends an empty body and it does not send the accept_incomplete parameter in query.
Service Fabrik broker which checks for the mandatory parameters first, will send a Bad Request for the same and hence the test fails as the test expects Unprocessable Entity(422) error.
Is there a defined order of checks the broker has to do? If not, then the test should be enhanced.

+1 spec does not mandate an order

@duglin  Thanks for your input. Would helpful if the fix is incorporated to the tool ASAP, as we have already made our service broker OSB API compliant. Want to use/rely on this tool for our API check.

Hi @subhankarc , from my perspective, there could be other errors rather than missing accept_incomplete parameter for your case. Normally when we check if accept_incomplete parameter misses, we would make sure all other potential errors resolved (all mandatory parameters should be matched in your case), so I suggest you could give more details about how your broker checks the mandatory parameters, thanks!

@zhongyi-zhang @norshtein Is there something we can do to fix this gap?


[Task] shenyu-admin BeanUtil to  Tranfer

Description
refactor BeanUtil copy properties to Transfer
Task List
No response

please assign it  to me


Usage of react native debugger

Currently, React Native Debugger is unable to detect the application when it's running with @nrwl/expo, while working fine when I run a test project using expo cli.
Is there something that I'm missing?
I tested with both ports: 19000 and 19001.
Tested on Linux Mint.

Closing this issue as the port is configured in project.json which has a default 8081.

Could you help a someone new to nx and working on a react native / expo app how to setup debugging? For content, I've also got an api running with npx nx serve api that already auto attacked when it runs.

@itorres-1 just to understand your issue.
The mobile application is running, you can use the default browser debug, but you could not debug on React Native Debugger?
As that was my issue.


add travis badge to the main README

I'm pretty sure in my last PR the Travis build was working. Now it was broken by accepting recent PRs. I think it is best to add the badge on the main README to make sure that the travis build is always passing :)

@0xdabbad00 I think you should also add the travisCI into the PR checks. That way you can make sure that the travis build is working before you merge a specific branch.
https://cl.ly/46b48047512a
You can see how it is configured in one of my repos: https://github.com/algosec/algosec-python/pull/32 (see that travis is passing there...right?)

As you can see the build now is broken as you use python 3.7 https://travis-ci.org/duo-labs/cloudmapper
Python 3.7 is not supported by travis out of the box but there is a way to support it. You can see how I did it here https://github.com/algosec/algosec-python/blob/master/.travis.yml#L9
It also best to try and run your travis tests not only on python 3.7 but on a wider range so it would be supported for more people. It is not the same but you can see how many platform I support there https://github.com/algosec/algosec-python/blob/master/.travis.yml#L2 (py2, py3, pypy, and so forth). No need to support so many, but take it into consideration that python 3.7 is not wide spread yet, so you limit the usage of your package

Thank you.  Travis actually will check the PR's, but when I merged your PR, I had to make an extra commit on it, then there was a merge conflict, and things got ugly, so github said I had to use the command-line to continue, so it bypassed the check.
Thank you for this PR and showing me how to fix this.

:)


Doesn't update inner class objects changes on SaveChanges()

Library version
1.1.1
OS & OS version
Windows 10 x64
Describe the bug
I followed as in the README documentation, got the interested entity, changed an inner List to add a new item in it and then did the await db.SaveChanges(); without success.
To Reproduce
using (var db = await DbFactory.Create<indexDb>())
{
	var discussion = db.Discussions.First(d => d.Id == CurrentDiscussionId);
	discussion.Answers.Add(newAnswer);
	await db.SaveChanges();
}

minimally, a Discussion with is Answers look like this:
public class ViewDiscussion
{
  [Key]
  public string Id { get; set; }
  public List<ViewAnswer> Answers { get; set; } = new();
}
public class ViewAnswer
{
  public string Id { get; set; }
  public short Likes { get; set; } = 0;
  public bool IsMaker { get; set; } = false;
  public string Text { get; set; }
  public DateTime? TimeStamp { get; set; }

  [JsonIgnore]
  public bool IsEditingPossible => IsMaker && (Comments.Count == 0 || (TimeStamp == null ? false :
	  (DateTime.Now - TimeStamp.Value).TotalMinutes <= VConstants.AnswerExpirationMinutes));

  public List<ViewComment> Comments { get; set; } = new();
}
public class ViewComment
{
  public string Id { get; set; }
  public bool IsMaker { get; set; }
  public string Text { get; set; }
}

Exceptions (if any)
None
Expected behavior
The ViewAnswer is added and stored in the IndexedDB

Got what's wrong, it's that IsEditingPossible getter which seems to don't work well as an IndexedDB entity. I made it a function and now everything works :)
As a side question, is there any way to mark a property that shouldn't be considered in the IndexedDB transactions?

On a second text, now it does seem to don't update the Comments list, like in this code:
using (var db = await DbFactory.Create<indexDb>())
{
  var discussion = db.Discussions.First(d => d.Id == CurrentDiscussionId);
  discussion.Answers.First(a => a.Id == answerId).Comments.Add(newComment);
  await db.SaveChanges();
}

Am I doing something wrong?

I may found that deleting, saving, readding and saving the Entity is working :/

I didn't write this library, I just made a few small changes.
This library is not as powerful as Entity Framework. I think that it can't handle nested lists.
You can see how I am using it here: https://github.com/Jinjinov/TheLastTime
I am using it with objects that have only simple members, like bool, int, float, double, string.
My objects don't save a List<> to IndexedDB.
My objects save a foreign key int parentId and then I use that to recreate the nested lists after I load the objects.

@Jinjinov  I see, so I guess it's luck that it can handle at least lists in a remove/save/add/save flow.
Thanks for the elucidation.


Improve existing model

Create a new model to improve the existing model that generates the chance value.

Hello, I would like to improve the model. Is the issue already taken?

I don't think any progress is being made. You can work on it and submit a PR @ClarkGuilty

@ClarkGuilty are you working on it?


Make reaction process

@turbomam We cannot combine the LaboratoryReagent class to be an input because we need to let inlined_as_list: true to list the details, but that is not the case for the has_input slot that takes in just the ids of Biosample and ProcessedSample. LinkML won't let us do both. So I kept the has_reagents slot

@JamesTessmer @anastasiyaprymolenna can you add what migration is needed here... add this to the 1st comment, and update it accordingly ( I think it's limited to no migration, but not 100% sure)
Collections requiring migration:

study_set
biosample_set

Will do, we were talking about that earlier today. I’m planning to update the metabolink/material procssing PRs we worked on with the needed info.


Add colorful shapes instead of placeholder image. (#427)

The shape is randomly generated based on the event name.

Coverage decreased (-0.3%) to 99.741% when pulling 9d77b96942787ec102b99c2953c94652f6911bd6 on 427-banner-image into f10f84a1b121f9cfea462d8d68ecba83c1dd0f49 on dev.

Coverage remained the same at 100.0% when pulling ac41f4a5fdf3ff8c3707f93ade08daf99f8c99e8 on 427-banner-image into f10f84a1b121f9cfea462d8d68ecba83c1dd0f49 on dev.

Coverage remained the same at 100.0% when pulling 4a9b4f04da0e7c5b44a31d0c3a50975ddbf1b294 on 427-banner-image into b8e24c7186a4fea1bbfa198eb29329534dadfa34 on dev.

Coverage remained the same at 100.0% when pulling 88b94478fff16cd4d834d16339b9a886729ea10a on 427-banner-image into 72edc8080439dce92fa1c8f6c1b4d82c733b9091 on dev.

Coverage remained the same at 100.0% when pulling 88b94478fff16cd4d834d16339b9a886729ea10a on 427-banner-image into 72edc8080439dce92fa1c8f6c1b4d82c733b9091 on dev.

Coverage remained the same at 100.0% when pulling 1ef7b00c6ff59454b028b95ca601dd401bebf4c7 on 427-banner-image into 424b4d9603f3582c6986c8c1e73939fa17cdea55 on dev.


Closes #98 - Improved handling of retransformation failures

Please review this PR after #94 has been integrated, as the test utilitites implemented tehre need to be used for updating the AsyncClassTransformer test.


Troubleshoot, why Action is not running

See https://github.com/wemogy/project-management-demo/actions/runs/8011221431/job/21883959309
Maybe a GitHub Action as Docker is the better idea, because then we have everything we need in one place. We already do this here.

@bennetrr for python argparse issue:

The issue lies in how the --only-increase-suffix and --create-tag arguments are parsed in the script. In Python's argparse module, the type=bool conversion does not handle boolean values directly from the command line arguments. Instead, it interprets any non-empty string as True when using type=bool. So, even if you provide --only-increase-suffix false or --create-tag false, they will be interpreted as True.


Add action response modals

With reference to this issue https://github.com/gobrightspot/nova-detached-actions/issues/41
Nova has introduced (in version 3.21.0) custom response modals to actions. This update will allow these responses to work

Wish I'd seen this before looking at it myself!
In my branch I've replaced the transition element with portal in line with the current Nova approach to modals. Not sure on the backwards compatibility of doing this, but I'd imagine it's going to be more future-proof.

@rdarcy1 nice one, I prefer your way

You're welcome to copy the changes into your PR, I didn't want to submit a duplicate.

@rdarcy1 changes made

@eoghanobrien any update here?

@lucidlogic I've left the company that sponsors this open source work, you could try reaching out to them directly to get this merged in.


Improve the grid structure of commands#index

Before
Previously, the commands table was on the same .row as the filter elements, which made its empty state look odd:

Also, the table didn't have much vertical padding between itself and the filter elements:

After
This uses two .rows: one for the filter elements and one for the commands table:

And it adds a little vertical padding between the filter elements and the table:

cool! looks great. 👍


Bypass head price

Feature request by James_Bach
DecoHeads needs a way to bypass the cost for heads. An easy solution would be a global override permission like DecoHeads.free or something, but it might also be nice to be able to do DecoHeads.free.<head-name> so that servers have even more fine control. That would still allow people to give staff/builders the DecoHeads.free.* permissions to allow access to all heads.

Added in 2b50ac3be36f04bfd12257db0562b316c3e58bde.


Quotes npm executable path in version verification

Otherwise, verify fails because
'c:\Program' is not recognized as an internal or external command,
operable program or batch file.

This issue was fixed by https://github.com/workshopper/how-to-npm/pull/112. Thanks for the patch!


[rest] no peer dependencies

"Starting Own Server" section in docs mentions "To get started, make sure you have set up the correct version of Aries Framework JavaScript" with the following command:
npm info "@aries-framework/rest" peerDependencies

But that command doesn't return anything. I wanted to use the extension with the framework, but I was a bit confused about what exact version of framework is compatible? It is the version 0.1.0?

Ah I think we moved away from peer dependencies as you can now also use the rest package as cli, in which case you won't install the node/core packages yourself. We should probably remove this from the README
Are you willing to open a PR for this?
But yes, the current supported version is 0.1.0 (we should probably also add that to the readme!).
@amanji has been working on 0.2.0 support, but not sure on the status of that

Sorry this took a bit of a backseat to work on updates to Bifold. Will continue working on this. @jakubkoci Do you want to coordinate on how to remove the peer dependencies?

Yes It's just an update to the readme. That would be appreciated, thanks!


App crashes on x86 devices

Dear concern,
Thank you for your project. It's perfectly works on arm devices, but when I tried to run this app on x86 device it crashes. May be we need jniLib files for x86 devices also.
How can I/we fixed this?
Thanks again.

please see official doc to compile x86 kernel


Obtain licenses in Github project

You can update your progress on this here. Also check out the latest issues on the ghdata repo. They are discussing the potential process for this.

duplicate of #7


Fix smudge/clean on files that begin with a dash

Fixes #1072. Currently, the filters run a command like this when a tracked file begins with a dash:
$ git-lfs clean -filename
The filename is then misinterpreted as short arguments.
This installs git-lfs clean -- %f instead of git-lfs clean %f, and a similar smudge filter.
A limitation of this patch is that existing installs don't automatically upgrade to the new filters until they run git lfs install --force. It looks like this is consistent with the git lfs clean vs git-lfs clean precedent, but maybe encountering this behavior is realistic enough to justify trying to build some sort of auto-upgrade feature which promotes known older variants of the filter (it looks like the pre-push hook has such a list already).
In any case, this should fix new installs, and allow existing installs to use git lfs install --force to manually apply the fix.

I'm not sure how to reproduce that test failure locally, it passes in my environment:
$ ./test/test-smudge.sh
compile git-lfs for ./test/test-smudge.sh
commands/mancontent_gen.go
Using go1.6
Git LFS: /Users/epriestley/dev/git-lfs/bin/git-lfs
git-lfs/1.1.1 (GitHub; darwin amd64; go 1.6; git fa2ec2f)
git version 2.5.4 (Apple Git-61)
Updated pre-push hook.
Git LFS initialized.

HOME: /Users/epriestley/dev/git-lfs/test/remote/home
TMP: /Users/epriestley/dev/git-lfs/tmp
CREDS: /Users/epriestley/dev/git-lfs/test/remote/creds
lfstest-gitserver:
  LFSTEST_URL=/Users/epriestley/dev/git-lfs/test/remote/url
  LFSTEST_SSL_URL=/Users/epriestley/dev/git-lfs/test/remote/sslurl
  LFSTEST_CERT=/Users/epriestley/dev/git-lfs/test/remote/cert
  LFSTEST_DIR=/Users/epriestley/dev/git-lfs/test/remote
GIT:
filter.lfs.clean git-lfs clean -- %f
filter.lfs.smudge git-lfs smudge -- %f
filter.lfs.required true
credential.helper lfstest
user.name Git LFS Tests
user.email<EMAIL_ADDRESS>
test: smudge ...                                                   OK
test: smudge --info ...                                            OK
test: smudge with temp file ...                                    OK
test: smudge with invalid pointer ...                              OK
test: smudge include/exclude ...                                   OK
test: smudge with skip ...                                         OK
test: smudge clone with include/exclude ...                        OK

Hey, thanks so much for stopping by and contributing all these patches :metal:
This is the first time that the clean/smudge filters have changed. I think it'd be good to have git lfs update or git lfs install (which you should be running after every update) automatically fix the filters, so users don't have to run it with --force. As you can tell, we've already run into this with the content of the pre-push hooks.
Also, that test failure is a wonderful intermittent issue, apparently. Don't worry about it in the context of this PR: https://github.com/github/git-lfs/issues/1086

Ah, thanks for the pointer on the test failure. Spooky! :ghost:


Construct correct Namespace for Classifier2xxAnd4xxDefinition

This PR fixes an issue when a client's namespace is customized via the [CodeGenClient("ClientName")] attribute and the private type Classifier2xxAnd4xx within a client is still generated using the default root namespace leading to compilation issues.
fixes: https://github.com/microsoft/typespec/issues/4619

API change check
API changes are not detected in this pull request.


Susceptibility distortion correction without fieldmaps

Traditionally to perform susceptibility distortion correction (SDC) you need to have some sort of fieldmap data. However, there was some work showing that SDC can be performed without the need to acquire extra data.

Galiphour et. al 2008 proposed using a field distortion average template http://ieeexplore.ieee.org/document/4649099/ Another template can be found here: http://neurovault.org/collections/2426/
@juhuntenburg  investigated non-linear coregistration between EPI and T1w of the same subject http://pubman.mpdl.mpg.de/pubman/item/escidoc:2327525:5/component/escidoc:2327523/master_thesis_huntenburg_4686947.pdf
Wang, @danjonpeterson et al. 2017 further improved and evaluated the non-linear coregistration technique http://journal.frontiersin.org/article/10.3389/fninf.2017.00017/full

It would be great if could add SDC to FMRIPREP that does not require fieldmaps. I would suggest starting, by implementing the approach from Wang et al. on a dataset with fieldmaps  (for example Beast or UH2) and see how that compares. I suspect (judging from @juhuntenburg work) that some amount of regularization and use of priors will be required. Here are some ideas to try:

use 12 DOF (affine) boundary based coregistration as the initial transformation
use a field distortion template as the initial transformation
limit the non-linear coregistration only to the dimension of the phase encoding direction
create a mask of usually distorted areas from the distortion template an limit the coregistration using it

Hi! Something to consider is that, to my knowledge, this has only been shown successfully with DWI data, using the B0 image as a source for the registration step (e.g. in Wang et al. 2017). Based on my own work on 3T BOLD data, which has less anatomical contrast, I wouldn't recommend this as a standard preprocessing step, the results were extremely variable. It has worked really well for me though with 7T BOLD.

@chrisfilo So it seems like the place to do this would be with the reference EPI image, which should have the best contrast we can manage. Should we be re-using any prior registration steps, to keep it as apples-to-apples as possible? I'm not quite sure where we should put this in just yet.

Fieldmap unwarped on bias-corrected anatomical

SyN-unwarped on bias-corrected anatomical

SyN-unwarped on fieldmap unwarped

There are of course differences, but I don't know how to assess, on visual inspection, their severity.
This was run with:
/opt/ants/antsRegistrationSyN.sh -d 3 -f T1_inv.nii.gz -m /data/scratch/uh2/fmriprep_wf/single_subject_s497_wf/func_preproc_ses_1_task_short_run_1_wf/epi_hmc_wf/gen_ref/ref_image.nii.gz -o EPItoT1 -t s

How do you ensure that the deformation is only in the PE direction?

These figures are really hard to spot differences. Could you create set of
animated reportlets via "SimpleBeforeAndAfter" interface in niworkflows?
On Wed, May 10, 2017 at 1:36 PM, Oscar Esteban<EMAIL_ADDRESS>wrote:

How do you ensure that the deformation is only in the PE direction?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/poldracklab/fmriprep/issues/496#issuecomment-300604777,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAOkp9APhIRkaPf22gCcAVG_LP6QG2-1ks5r4h-2gaJpZM4NMxO0
.

@oesteban Haven't the slightest idea. ANTs documentation is almost entirely opaque to me, and I haven't seen any indication in what I have read that suggests ANTs can do this. I was starting from the command given in the Wang et al. supplementary materials.
@chrisfilo Sure.

@chrisfilo Huh. Well, they're at different resolutions, so those figures aren't much help.
 nib-ls /data/scratch/uh2/fmriprep_wf/single_subject_s497_wf/func_preproc_ses_1_task_short_run_1_wf/sdc_unwarp_wf/apply_fov_mask/ref_image_corrected_fixhdr_trans_masked.nii.gz
.../ref_image_corrected_fixhdr_trans_masked.nii.gz float32 [100, 100,  64] 2.20x2.20x2.20   sform

% nib-ls EPItoT1Warped.nii.gz
EPItoT1Warped.nii.gz float64 [186, 256, 256] 0.90x0.90x0.90

I guess I'll need to try to figure out what's going on there.

@effigies: so Wang et al. do not restrict the deformation in the PE axis, that's "interesting" (to be nice)

The approach in Wang et al 2017 didn't restrict the deformation to the
phase-encode direction, but this is something we're planning on looking
into eventually, once we get around to it.
The  -g (or --restrict-deformation)  option on antsRegistration should do
this (with -g 0x1x0 or 0.1x1x0.1)
The way to use this with the ANTS shell scripts (like antsRegistrationSyN.sh)
is to ctrl-C the shell script call and look for the full antsRegistration
call near the beginning of the output. These shell scrips are just wrappers
for antsRegistration. Then you can add the more granular options like -g,
etc. to the full call and run that. I've found the -v (
--write-interval-volumes ) options especially useful for troubleshooting
registrations.
On Wed, May 10, 2017 at 1:54 PM, Chris Markiewicz<EMAIL_ADDRESS>wrote:

@oesteban https://github.com/oesteban Haven't the slightest idea. ANTs
documentation is almost entirely opaque to me, and I haven't seen any
indication in what I have read that suggests ANTs can do this. I was
starting from the command given in the Wang et al. supplementary materials.
@chrisfilo https://github.com/chrisfilo Sure.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/poldracklab/fmriprep/issues/496#issuecomment-300609480,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AOj85BRSRfu9Csm_EIzTvj-6pnu6ptBmks5r4iQVgaJpZM4NMxO0
.

I think that's expected. You might need to reslice one of the images.
On May 10, 2017 2:06 PM, "Chris Markiewicz"<EMAIL_ADDRESS>wrote:

@chrisfilo https://github.com/chrisfilo Huh. Well, they're at different
resolutions, so those figures aren't much help.
nib-ls /data/scratch/uh2/fmriprep_wf/single_subject_s497_wf/func_preproc_ses_1_task_short_run_1_wf/sdc_unwarp_wf/apply_fov_mask/ref_image_corrected_fixhdr_trans_masked.nii.gz
.../ref_image_corrected_fixhdr_trans_masked.nii.gz float32 [100, 100,  64] 2.20x2.20x2.20   sform
% nib-ls EPItoT1Warped.nii.gz
EPItoT1Warped.nii.gz float64 [186, 256, 256] 0.90x0.90x0.90
I guess I'll need to try to figure out what's going on there.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/poldracklab/fmriprep/issues/496#issuecomment-300612553,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAOkp3qD6e8jlUZsZ4qWX-tEgGuNyM1Yks5r4ibIgaJpZM4NMxO0
.

Thanks a lot @danjonpeterson, I was right now looking at the --restrict-deformation option. https://github.com/stnava/ANTs/issues/216

Thanks @danjonpeterson - good to know! BTW have you tried this approach on non-diffusion data?

No, I haven't yet.

Resampled SyN-warped reference image to fieldmap-warped reference image (using -g 0x1x0):
https://imgh.us/report_1.svg
(Before = fieldmap-warped)

Thanks. It would be also good to see:

before/after the SyN-warp (analogous to before after applying fieldmap based distortion correction in current reports)
bbregister T1 coregistration reportlet (so we will see how well the corrected file overlaps with the anatomy)

In general there are some deformations that should not be there. Additionally the signal dropout from the ear canals got miraculously "recovered".

I would have said that the miraculous recover of signal besides the ear canals is probably for the unrestricted deformation, but now I see that @effigies used the -g option. That's very surprising.
Also, if you look at the CC it is not corrected at all. What was the orientation of the input images to ants? It seems like maybe the j axis is not the second.

@oesteban Orientation LPS (inverted T1 is RAS). So j direction should be A/P in either case, which is what the json describes as the phase-encoding direction.
That said, perhaps ANTs cares about where exactly you place the -g flag? I put it at the end of the command, ending up with:
/opt/ants/antsRegistration --dimensionality 3 --float 0 --output '[EPItoT1,EPItoT1Warped.nii.gz]' --interpolation Linear --winsorize-image-intensities '[0.005,0.995]' --use-histogram-matching 0 --initial-moving-transform '[T1_inv.nii.gz,/data/scratch/uh2/fmriprep_wf/single_subject_s497_wf/func_preproc_ses_1_task_short_run_1_wf/epi_hmc_wf/gen_ref/ref_image.nii.gz,1]' --transform 'Rigid[0.1]' --metric 'MI[T1_inv.nii.gz,/data/scratch/uh2/fmriprep_wf/single_subject_s497_wf/func_preproc_ses_1_task_short_run_1_wf/epi_hmc_wf/gen_ref/ref_image.nii.gz,1,32,Regular,0.25]' --convergence '[1000x500x250x100,1e-6,10]' --shrink-factors 8x4x2x1 --smoothing-sigmas 3x2x1x0vox --transform 'Affine[0.1]' --metric 'MI[T1_inv.nii.gz,/data/scratch/uh2/fmriprep_wf/single_subject_s497_wf/func_preproc_ses_1_task_short_run_1_wf/epi_hmc_wf/gen_ref/ref_image.nii.gz,1,32,Regular,0.25]' --convergence '[1000x500x250x100,1e-6,10]' --shrink-factors 8x4x2x1 --smoothing-sigmas 3x2x1x0vox --transform 'SyN[0.1,3,0]' --metric 'CC[T1_inv.nii.gz,/data/scratch/uh2/fmriprep_wf/single_subject_s497_wf/func_preproc_ses_1_task_short_run_1_wf/epi_hmc_wf/gen_ref/ref_image.nii.gz,1,4]' --convergence '[100x70x50x20,1e-6,10]' --shrink-factors 8x4x2x1 --smoothing-sigmas 3x2x1x0vox -g 0x1x0

@chrisfilo
Before: Reference
After: SyN-warped reference

I'll get the surface-overlaid images. I'm assuming you meant just overlay the surfaces, not actually run bbregister...

Surface-overlaid:

I would expect you have to specify the -g parameter per each stage: https://github.com/stnava/ANTs/wiki/Anatomy-of-an-antsRegistration-call - documentation is unclear.
This is actually not horrible, but the CC seems to be pulled into the signal dropout area in orbitofrontal cortex. I've seen similar errors when correcting images using blip up/down without restricting the deformations to the phase encoding direction (which is 3dQwarps default).

But don't we only want -g to apply to the SyN stage? If I'm reading the docs correctly, -g 0x1x0 on the rigid section means we're only allowing translation along the AP axis (or possibly rotation about it?). And I'm not sure what it would mean to restrict the affine transformation to 0x1x0.
Or should we not be performing the Rigid/Affine parts?

You are right, -g should be defined only per stage.
That said, this could be the issue: we want to restrict the warp to the Y direction of the moving image. A way to do this:
Run first the rigid and affine registration levels using the T1 (or inverted T1) as fixed image. Then resample the T1 to the EPI space (possibly we want to keep resolution here, so you'll need to generate a reference image centered at the EPI volume).
Once you have your reference T1 in EPI space, then the Y axis will be aligned with the EPI, and you can run the nonlinear registration.
Sound about right?

I'll give it a try. What could possibly go wrong?

Following @oesteban's advice, I mapped the reference EPI image to T1 using the rigid and affine steps:
antsRegistration --dimensionality 3 --float 0 --output '[Partial,Partial.nii.gz]' --interpolation Linear --winsorize-image-intensities '[0.005,0.995]' --use-histogram-matching 0 --initial-moving-transform '[T1_inv.nii.gz,/data/scratch/uh2/fmriprep_wf/single_subject_s497_wf/func_preproc_ses_1_task_short_run_1_wf/epi_hmc_wf/gen_ref/ref_image.nii.gz,1]' --transform 'Rigid[0.1]' --metric 'MI[T1_inv.nii.gz,/data/scratch/uh2/fmriprep_wf/single_subject_s497_wf/func_preproc_ses_1_task_short_run_1_wf/epi_hmc_wf/gen_ref/ref_image.nii.gz,1,32,Regular,0.25]' --convergence '[1000x500x250x100,1e-6,10]' --shrink-factors 8x4x2x1 --smoothing-sigmas 3x2x1x0vox --transform 'Affine[0.1]' --metric 'MI[T1_inv.nii.gz,/data/scratch/uh2/fmriprep_wf/single_subject_s497_wf/func_preproc_ses_1_task_short_run_1_wf/epi_hmc_wf/gen_ref/ref_image.nii.gz,1,32,Regular,0.25]' --convergence '[1000x500x250x100,1e-6,10]' --shrink-factors 8x4x2x1 --smoothing-sigmas 3x2x1x0vox

I then upsampled the EPI into the T1 resolution:
from nilearn import image as nli
invt1 = nli.load_img('T1_inv.nii.gz')
nli.resample_img(ref_epi_image, target_affine=np.diag(invt1.header.get_zooms())).to_filename('epi_in_t1.nii.gz')

And performed the inverse affine transform to the inverted T1 to get a warp target:
antsApplyTransforms -i T1_inv.nii.gz -o T1_in_EPI.nii.gz --float -r epi_in_t1.nii.gz -t '[Partial0GenericAffine.mat,1]'

Finally, I applied the SyN step:
antsRegistration --dimensionality 3 --float 0 --output '[SyNOnly,SyNOnlyWarped.nii.gz]' --interpolation Linear --winsorize-image-intensities '[0.005,0.995]' --use-histogram-matching 0 --initial-moving-transform '[T1_in_EPI.nii.gz,/data/scratch/uh2/fmriprep_wf/single_subject_s497_wf/func_preproc_ses_1_task_short_run_1_wf/epi_hmc_wf/gen_ref/ref_image.nii.gz,1]' --transform 'SyN[0.1,3,0]' --metric 'CC[T1_in_EPI.nii.gz,/data/scratch/uh2/fmriprep_wf/single_subject_s497_wf/func_preproc_ses_1_task_short_run_1_wf/epi_hmc_wf/gen_ref/ref_image.nii.gz,1,4]' --convergence '[100x70x50x20,1e-6,10]' --shrink-factors 8x4x2x1 --smoothing-sigmas 3x2x1x0vox -g 0x1x0

Anatomical comparison

Before-after warp

Fieldmap vs SyN warp

I would recommend doing the first resampling in the opposite way:
antsRegistration --dimensionality 3 --float 0 --output '[Partial,Partial.nii.gz]' --interpolation Linear --winsorize-image-intensities '[0.005,0.995]' --use-histogram-matching 0 --initial-moving-transform '[T1_inv.nii.gz,/data/scratch/uh2/fmriprep_wf/single_subject_s497_wf/func_preproc_ses_1_task_short_run_1_wf/epi_hmc_wf/gen_ref/ref_image.nii.gz,1]' --transform 'Rigid[0.1]' --metric 'MI[T1_inv.nii.gz,/data/scratch/uh2/fmriprep_wf/single_subject_s497_wf/func_preproc_ses_1_task_short_run_1_wf/epi_hmc_wf/gen_ref/ref_image.nii.gz,1,32,Regular,0.25]' --convergence '[1000x500x250x100,1e-6,10]' --shrink-factors 8x4x2x1 --smoothing-sigmas 3x2x1x0vox --transform 'Affine[0.1]' --metric 'MI[T1_inv.nii.gz,/data/scratch/uh2/fmriprep_wf/single_subject_s497_wf/func_preproc_ses_1_task_short_run_1_wf/epi_hmc_wf/gen_ref/ref_image.nii.gz,1,32,Regular,0.25]' --convergence '[1000x500x250x100,1e-6,10]' --shrink-factors 8x4x2x1 --smoothing-sigmas 3x2x1x0vox

Then use the generated inverse transform and antsApplyTransform to move the T1w into EPI space. Here, I'd recommend to use as reference image an upsampled EPI which resolution is close to the resolution of the T1w image.
Once you have the T1w in the EPI space, then run the SyN registration.
The reason for this convoluted process is that, when you resample the EPI into the T1w space, you are implicitly rotating the axes. Thus the phase encoding direction is not aligned with an axis anymore and the -g flag does not have the expected impact.

What kind of skull stripping was applied to both images?

@chrisfilo The inverted T1 was masked with the ANTs skull stripping from fmriprep. The reference EPI wasn't skull-stripped... I suppose I ought to have done that.
@oesteban I think I did what you're saying I should have.

In the first step you are resampling the EPI into T1w, if I understood correctly, right?

Yes, but only to get the affine transform to move the T1 into alignment with the EPI.

Oh sorry, I can see that: T1_in_EPI.nii.gz and /data/scratch/uh2/fmriprep_wf/single_subject_s497_wf/func_preproc_ses_1_task_short_run_1_wf/epi_hmc_wf/gen_ref/ref_image.nii.gz.
 I'll double check the results, but it seems like the SyN step is not doing any major warping right?

How does the T1_in_EPI.nii.gz look like? It is the T1 with the inverted contrast right?
Here it could help a lot to have not only the CC metric, but also the Mattes metric. To see if this idea may work, you can just replace the CC metric on your SyN command by the Mattes. It'll go a lot faster as well.

What would you like to see T1_in_EPI overlaid on? T1_inv? The reference EPI?
It looks fine. Aligns well with the reference EPI. And yes, it's the inverted contrast.
I'll try the final step with the Mattes metric.

Yes I'd say that for the last before/after plot it'd be clearer to see the
two images involved in the registration. Meaning, the inv T1 and the warped
EPI
On May 12, 2017 09:48, "Chris Markiewicz"<EMAIL_ADDRESS>wrote:

What would you like to see T1_in_EPI overlaid on? T1_inv? The reference
EPI?
It looks fine. Aligns well with the reference EPI. And yes, it's the
inverted contrast.
I'll try the final step with the Mattes metric.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/poldracklab/fmriprep/issues/496#issuecomment-301128125,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAkhxmzzIuGUzIQhwRJdICQNvHVKnWLlks5r5I1GgaJpZM4NMxO0
.

So at the end, do we need to do one more rigid transform from the warped EPI to the original T1, or just apply the Partial0GenericAffine.mat from earlier like so:
/opt/ants/antsApplyTransforms -i EPI_ref.nii.gz -o EPI_final.nii.gz -r T1_inv.nii.gz -t Partial0GenericAffine.mat -t Mattes1Warp.nii.gz

If you want to use this exclusively for fieldmap correction, the answer would be no. You want the EPI in its EPI space but without correction. Maybe I don't understand the question.
If you were referring to my last comment: the before/after plot would have the T1w-inv_in_EPI and the EPI-warped. So the T1w-inv_in_EPI already has the Partial0GenericAffine.mat implicitly applied when you resampled, right?

Mattes metric produced blank images.
Here's the results with skull-stripping. This includes the T1w-inv_in_EPI to EPI-warped comparison.
EPI skull stripping, EPI resampling, and T1 skull-stripping and inversion:
#!/usr/bin/env python
import numpy as np
from nilearn import image as nli

T1_orig = '/data/out/uh2/derivatives/fmriprep/sub-s497/anat/sub-s497_T1w_preproc.nii.gz'
T1_mask = '/data/out/uh2/derivatives/fmriprep/sub-s497/anat/sub-s497_T1w_brainmask.nii.gz'
epi_ref = '/data/scratch/uh2/fmriprep_wf/single_subject_s497_wf/func_preproc_ses_1_task_short_run_1_wf/epi_hmc_wf/gen_ref/ref_image.nii.gz'
epi_mask = '/data/scratch/uh2/fmriprep_wf/single_subject_s497_wf/func_preproc_ses_1_task_short_run_1_wf/epi_hmc_wf/skullstrip_epi/ref_image_corrected_fixhdr_brain.nii.gz'

T1_img = nli.load_img(T1_orig)
mask = nli.load_img(T1_mask).get_data().astype(bool)

# Mask EPI image
masked_epi = nli.math_img('epi * mask', epi=epi_ref, mask=epi_mask).get_data()
epi_ref = nli.new_img_like(epi_ref, masked_epi, copy_header=True)
epi_ref.to_filename('EPI_ref.nii.gz')

# Upsample EPI image
epi_rescaled = nli.resample_img(epi_ref, target_affine=np.diag(T1_img.header.get_zooms()))
epi_rescaled.to_filename('EPI_upsampled.nii.gz')

masked_t1 = T1_img.get_data() * mask

# Calculate scale factors
t1_min, t1_max = np.unique(masked_t1)[[1, -1]]
epi_min, epi_max = np.unique(masked_epi)[[1, -1]]
scale_factor = (epi_max - epi_min) / (t1_max - t1_min)

# Invert, rescale and mask T1 image
t1_inv = nli.new_img_like(T1_img, mask * ((t1_max -T1_img.get_data()) * scale_factor + epi_min), copy_header=True)
t1_inv.to_filename('T1_inv.nii.gz')

Creation of target (Inverted T1 registered to EPI):
#!/bin/bash

/opt/ants/antsRegistration --dimensionality 3 --float 0 --output '[Partial,Partial.nii.gz]' \
    --interpolation Linear --winsorize-image-intensities '[0.005,0.995]' --use-histogram-matching 0 \
    --initial-moving-transform '[T1_inv.nii.gz,EPI_ref.nii.gz,1]' \
    --transform 'Rigid[0.1]' --metric 'MI[T1_inv.nii.gz,EPI_ref.nii.gz,1,32,Regular,0.25]' --convergence '[1000x500x250x100,1e-6,10]' \
        --shrink-factors 8x4x2x1 --smoothing-sigmas 3x2x1x0vox \
    --transform 'Affine[0.1]' --metric 'MI[T1_inv.nii.gz,EPI_ref.nii.gz,1,32,Regular,0.25]' --convergence '[1000x500x250x100,1e-6,10]' \
        --shrink-factors 8x4x2x1 --smoothing-sigmas 3x2x1x0vox

/opt/ants/antsApplyTransforms -i T1_inv.nii.gz -o T1_in_EPI.nii.gz --float -r EPI_upsampled.nii.gz -t '[Partial0GenericAffine.mat,1]'

SyN registration (CC metric):
#!/bin/bash

/opt/ants/antsRegistration --dimensionality 3 --float 0 --output '[CC,CCWarped.nii.gz]' \
    --interpolation Linear --winsorize-image-intensities '[0.005,0.995]' --use-histogram-matching 0 \
    --initial-moving-transform '[T1_in_EPI.nii.gz,EPI_ref.nii.gz,1]' \
    --transform 'SyN[0.1,3,0]' --metric 'CC[T1_in_EPI.nii.gz,EPI_ref.nii.gz,1,4]' --convergence '[100x70x50x20,1e-6,10]' \
        --shrink-factors 8x4x2x1 --smoothing-sigmas 3x2x1x0vox -g 0x1x0

This produces the raw transform:

To compare to the original (inverted) anatomical, we additionally apply the affine transform:

Shown against the original anatomical:

For consistency, here it is shown against the fieldmap-corrected EPI:

It seems that we are seeing overfitting. I highlighted the issues below:

We need to regularize it better. Limit how much deformation can be applied or limit which regions should be affected by the deformation (using average fieldmap template)


MAC address update to endpoint is not reflected in ARP cache

Running with docker containers, a stopped container tears down all interfaces - restarting the container requires new interfaces to be created resulting in different endpoint MACs.
The new MAC address is not being applied to the ARP cache in Felix.
I updated the following code in Felix to test out a quick change to ensure we always set the ARP for a changed IP set.
def set_routes(ip_type, ips, interface, mac=None):
    """
    Set the routes on the interface to be the specified set.

    :param ip_type: Type of IP (IPV4 or IPV6)
    :param set ips: IPs to set up (any not in the set are removed)
    :param str interface: Interface name
    :param str mac|NoneType: MAC address. May not be none unless ips is empty.
    """
    if mac is None and ips:
        raise ValueError("mac must be supplied if ips is not empty")

    current_ips = list_interface_ips(ip_type, interface)
    for ip in (current_ips - ips):
        del_route(ip_type, ip, interface)
    for ip in (ips - current_ips):
        add_route(ip_type, ip, interface, mac)
    if ip_type == futils.IPV4:
        for ip in (ips & current_ips):
            futils.check_call(['arp', '-s', ip, mac, '-i', interface])

I added the final 3 lines and ARP rules are now being updated correctly.  This was a quick change just to test hypothesis that only changed IPs actually get applied - and probably is not the fix you'd actually want?

Looks like it's not far from the right fix though. This is for @plwhite.

I have a fix here, not yet tested - so nobody else pick this up when I am out!

Fix now merged (PR #600).

Reopening as we had to back out the fix in PR #600, which didn't work for IPv6.

Naturally, the area that I broke was a trivial "safe" change to an area with no tests.
I'm going to back off and spend a few happy hours writing endpoint tests to unblock this.

@plwhite did this get merged for good or did it get backed out again?

It's gone in and out several times, but it seems to have stuck this time.


Suggestion: create a Laravel Valet driver

Valet is pretty nice development tool but for now there is no driver compatible with Grav.
https://github.com/laravel/valet/issues/384
It could be nice to create one 😄 !!!

If someone creates one and submits a valid PR, i would be open to merging it.

@jimblue what issue are you facing? It seems to work out of the box for me.

Hey @rhukster @martisj !
Sorry it was my fault, I had a conflict with httpd process.
Grav is working out of the box with Valet !! ✨ ✨ ✨

Maybe a write-up for the Getgrav.org blog???? Never used it myself :)

Yep I could when having a bit more time !


⚠ Bofrost.es has degraded performance

In c04378c, Bofrost.es (https://www.bofrost.es) experienced degraded performance:

HTTP code: 200
Response time: 1626 ms

Resolved: Bofrost.es performance has improved in fd671f8 after 6 minutes.


Fixed transaction inside transaction through a defensive copy. Fixes #65

See https://github.com/mweststrate/mobservable/issues/65

Added tests to verify the bug and solution, and published as 1.1.4.
Thanks!

Thank you!
(sorry, I should have submitted a test too...next time!)


Fix information about Heroku Stacks support

Currently the modified section of the README is confusing (somebody can think that it does not support Heroku-20). This PR aims to fix it.

I confirm that the current README was confusing. @szymon-jez's contribution does help readers :). Thanks

Worth mentioning: Now the origin buildbpack https://github.com/HashNuke/heroku-buildpack-elixir does also support Heroku-20.


Support object model for multiple, named examples

Prerequisites

[X] I have written a descriptive issue title
[X] I have searched existing issues to ensure the feature has not already been requested

🚀 Feature Proposal
Support using named examples via the object definition of examples rather than just an array.
Motivation
If multiple examples are present, this would show a name in the examples drop down menu under 'Responses', rather than just 'example1', 'example2' etc. The summary field would then also show further details on the specific example.
Example
fastify-swagger-ui should support the object format for examples, where you can name individual options:
examples: {
  'first example': {
    value: 'abc',
    summary: 'Brief description of the first example'
  },
  'second example': {
    value: 'def',
    summary: 'Brief description of the second example'
  }
}

Currenrtly if you use this now, you (expectedly) get an error:
Failed building the serialization schema for GET: /api/v1/foo,due to error schema is invalid: data/examples must be array

There is some discussion of this here, but I can't quite grok it. Is the object examples format an OpenAPI 3.1 thing and it's not quite supported by fastify-swagger yet due to some kind of conflict?

I think we only need somebody to do the work.

I dont think that this is related to this package. Everything which is related to how the swagger definition is built has to be done in fastify-swagger

I dont think that this is related to this package. Everything which is related to how the swagger definition is built has to be done in fastify-swagger

Thanks for clarifying. I've gone ahead and opened a help issue instead about this.
I suspect my issue is that I'm defining my response options via JSON schema because that's how I pass them into my fastify routes, and not in the paths endpoint definitions that I send to fastify-swagger, which supports the example object format.
Just not sure what the solution is... do I just duplicate the definitions, one via paths and one via my route definitions and hope that fastify-swagger is smart enough to figure out which one to use?
Will defer to that thread for a discussion...


Add macros to create data objects with Zephyr iterable sections

These macros allow to create the data objects array in a distributed fashion across multiple modules in the firmware.
See Zephyr documentation for iterable sections: https://docs.zephyrproject.org/latest/kernel/iterable_sections/index.html
@towen: I'm wondering if we could add the CMake and linker files (now only mentioned in a comment) to this module, so that they do not have to be copied to every application / module. Creating the PR as draft in order to further evaluate this.

Agreed it would be useful to add the CMake and linker files, perhaps with a Kconfig option e.g. CONFIG_THINGSET_ITERABLE which would pull in the linker section (if there is an overhead for a linker section, maybe there isn't)
But it would be ideal if thingset items can be added as easily as shell commands

Thanks for testing @towen. CMake and linker file stuff can be added later once I'm more clear about a good approach, so I merged this part already (after a rebase).


Kerberos Breaks Build

After Chef-BACH #117 went in my build now breaks with:
================================================================================
Recipe Compile Error in /var/chef/cache/cookbooks/bcpc-hadoop/recipes/configs.rb
================================================================================

NoMethodError
-------------
undefined method `[]' for nil:NilClass

Cookbook Trace:
---------------
  /var/chef/cache/cookbooks/bcpc-hadoop/recipes/configs.rb:76:in `from_file'

Relevant File Content:
----------------------
/var/chef/cache/cookbooks/bcpc-hadoop/recipes/configs.rb:

 69:  %w{zookeeper}.each do |pkg|
 70:    package pkg do
 71:      action :upgrade
 72:    end
 73:  end
 74:
 75:  # Create Keytabs (if kerberos is eanbled)
 76>> if node[:bcpc][:hadoop][:kerberos][:enable] == true then

I suspect a missing default node[:bcpc][:hadoop][:kerberos][:enable]=false is needed?

A key part to triggering this is having an environment file from before #117 merged.

The only default setting for this attribute is in the environment file. So, ofcourse it will break with the environment file from before #117 . A fix and good practice would be to have a nil? check for the attribute OR we could have a default attribute in bcpc-hadoop as suggested above.

I did not see it in the environment, if this is where it should be I can resubmit the PR

A default attribute in bcpc-hadoop should be fine.

Spoke too soon, this is indeed in the environment, issue may be closed


Changing shoe model at runtime

I am working on objectron3d feature and testing sneakers.
I want to change sneakers when i tap a button at runtime, but I could not succeed in this.
Can you help how can i change one sneaker to another at runtime?
regards

I want to change sneakers

Is that you'd like to switch Category from Sneaker to Chair?
Or you'd like to switch the sneaker model to be rendered on the screen?
In the latter case, since the sample app don't have such a feature, will you share the minimum code, please?
From the current description, I can't judge if this issue is related to MediaPipe or not.

"Or you'd like to switch the sneaker model to be rendered on the screen?"
For example I have 2 sneaker model (shoe1.obj.bytes and shoe2.obj.bytes). I want to change sneaker models 1 to 2.

If you're using GlAnimationOverlayCalculator, then model files are loaded only once, so you need to restart CalculatorGraph.
I've not tested, but I guess you can do that by calling CalculatorGraph#Close or CalculatorGraph#WaitUntilDone, and CalculatorGraph#StartRun again.
However, on Unity, I suppose it's usually better to render texture by yourself than to render it with MediaPipe.

"However, on Unity, I suppose it's usually better to render texture by yourself than to render it with MediaPipe."
Could not understand that I am sorry. How can i render texture by myself than to render it?

I've not tested, but I guess you can do that by calling CalculatorGraph#Close or CalculatorGraph#WaitUntilDone, and CalculatorGraph#StartRun again.
Seems to work