Support for incrementally computed signals, pursue history instead of dirty flags

We use signia comprehensively for managing state in our website editing tool. It's great and follows the API laid out by many other signals libraries except one incredibly useful tool called "Incrementally computed signals".
Their documentation provides the best explanation but rather than using an "is_dirty" flag, you can keep a history buffer so a computed value can be updated by iterating through the changes to the signal rather than having to re-compute from scratch.
Additionally,  you can control the size of buffer to keep depending on how often the computation is listened to. If the computation is listened to always, its more efficient than is_dirty b/c of the incremental nature. If it's never listened to, it only takes up to a fixed size of changes so it is memory bounded and if it is listened to somewhat frequently, it balances the tradeoffs of loosing your place by throwing away the computation every time and keeping a huge amount of history to always be able to re-compute the value from the patches. It's a dangerous but incredibly powerful tool for dealing with intensive computed values.
Pulling from their documentation
Let's say you have a list of names const names = ['Steve', 'Alex', 'Lu', 'Jamie', 'Mitja'] and we want to compute the reverse of each value. In the current proposal, the best we could do is to simply re-compute the whole list every time. Basically computed = names.map(name => name.split('').reverse().join('')) Depending on the size of that list and the computational intensity of inner map function that can be incredibly costly. Think about 10,000 items and computing the hamming distance against some fixed value. Making the entire collection dirty is incredibly wasteful if we only change a few items at a time.
Let's say we're able to capture the changes to the original signal with something more granular like immer. So now rather than just "something changed" we're getting "patch" which specifies exactly what change:
import { Patch, produceWithPatches, enablePatches } from 'immer'
import { Atom, atom } from 'signia'

enablePatches()

class ImmerAtom<T> {
    // The second Atom type parameter is the type of the diff
    readonly atom: Atom<T, Patch[]>
    constructor(name: string, initialValue: T) {
        this.atom = atom(name, initialValue, {
            // In order to store diffs, we need to provide the `historyLength` argument
            // to the atom constructor. Otherwise it will not allocate a history buffer.
            historyLength: 10,
        })
    }

    update(fn: (draft: T) => void) {
        const [nextValue, patches] = produceWithPatches(this.atom.value, fn)
        this.atom.set(nextValue, patches)
    }
}

Now we can implement our own algorithm to selectively apply the patches we generated to the output of our signal.
import { Draft } from 'immer'
import { RESET_VALUE, withDiff } from 'signia'

function map<T, U>(source: ImmerAtom<T[]>, fn: (value: T) => U): Computed<U[], Patch[]> {
    return computed(
        source.atom.name + ':mapped',
        (prev, lastComputedEpoch) => {
            // we need to check whether this is the first time we're running
            if (isUninitialized(prev)) {
                // if so, just map over the array and return it
                return source.atom.value.map(fn)
            }

            // this is not the first time we're running, so we need to calculate the diff of the source atom
            const diffs = source.atom.getDiffSince(lastComputedEpoch)
            // if there is not enough history to calculate the diff, this will be the RESET_VALUE constant
            if (diffs === RESET_VALUE) {
                // in which case we need to start over
                return source.atom.value.map(fn)
            }

            // we have diffs and a previous value
            const [next, patches] = produceWithPatches(prev, (draft) => {
                // apply the upstream diffs while generating a new set of downstream diffs
                for (const patch of diffs.flat()) {
                    const index = patch.path[0]
                    if (typeof index !== 'number') {
                        // this will be array length changes
                        draft[patch.path[0] as 'length'] = patch.value as number
                        continue
                    }
                    if (patch.op === 'add') {
                        if (patch.path.length === 1) {
                            // this is a new item in the array, we need to splice it in and call the map function on it
                            draft.splice(patch.path[0] as number, 0, fn(patch.value) as Draft<U>)
                        } else {
                            // one of the existing items in the array has changed deeply
                            // let's call the map function on the new value
                            draft[index] = fn(source.atom.value[index]) as Draft<U>
                        }
                    } else if (patch.op === 'replace') {
                        // one of the existing items in the array has been fully replaced
                        draft[index] = fn(patch.value) as Draft<U>
                    } else if (patch.op === 'remove') {
                        next.splice(index, 1)
                    }
                }
            })

            // withDiff is a helper function that returns a special value that tells Signia to use the
            // provided value and diff
            return withDiff(next, patches)
        },
        {
            historyLength: 10,
        }
    )
}

Now we can see the results of making a single update:
const names = new ImmerAtom('names', ['Steve', 'Alex', 'Lu', 'Jamie', 'Mitja'])

let numReverseCalls = 0
const reversedNames = map(names, (name) => {
    numReverseCalls++
    return name.split('').reverse().join('')
})

console.log(reversedNames.value) // [ 'evetS', 'xelA', 'uL', 'eimaJ', 'ajtiM' ]
console.log(numReverseCalls) // 5

// Then later we update the array to include "David" at the end

names.update((draft) => {
    draft.push('David')
})

console.log(reversedNames.value) // [ 'evetS', 'xelA', 'uL', 'eimaJ', 'ajtiM', 'divaD' ]
console.log(numReverseCalls) // 6

// Then we update
names.update((draft) => {
    draft[0] = 'Sunil'
})

console.log(reversedNames.value) // [ 'linuS', 'xelA', 'uL', 'eimaJ', 'ajtiM', 'divaD' ]
console.log(numReverseCalls) // 7

// Then we remove
names.update((draft) => {
    draft.pop()
})

console.log(reversedNames.value) // [ 'linuS', 'xelA', 'uL', 'eimaJ', 'ajtiM' ]
console.log(numReverseCalls) // 7

In short, the time complexity of the computed value can be bounded to the time complexity of the updating the original signal. With the proposal as it is today, the time complexity of the computed value is bounded by whatever a full re-computation takes.
The current proposal is almost exactly the same as what signia provides with no history length. Basically every change returns a RESET_VALUE which triggers a full re-computation.

Worth noting history has a significant runtime memory cost, and unbounded history is a recipe for disaster for many use cases.

I confirm that managing history very quickly explodes memory. I tried it with a 1 dimensional reactive list of boolean values, and it very quickly starts to make the browser slow when (X*Y) cells * 60 (attempted) fps -- was trying to visualize history in https://game-of-life.nullvoxpopuli.com/ :sweat_smile: -- I eventually decided to cap history at 20 steps backwards -- which is still very slow, but not as slow (infinitely increasingly more and more slow and unboundary history can be) - this is a tradeoff -- As far as the proposal is concerned, I think it possible to implement in userland though. Could do some import.meta.env.DEV guarding or something like that.


Cleaning: remove client field from httpModule struct

In that case maybe just do?:
func NewHttpModule(client *http.Client) *httpModule {
	return NewHttpModuleWithDo(client.Do)
}

Done

Thanks.


Bus spins around its front wheel center in planning simulator

Checklist

[X] I've read the contribution guidelines.
[X] I've searched other issues and no duplicate issues were found.
[X] I'm convinced that this is not my fault but a bug.

Description
I am testing Autoware planning simulator with a bus (from https://github.com/autowarefoundation/itri_bus_sensor_kit and https://github.com/autowarefoundation/cbus_vehicle_launch).
When turning, the bus seems to spin around its front wheel center:
Screencast from 02-20-2023 10_57_55 AM.webm
I have never observed such behavior with a simulated car, but I guess the vehicle is small enough for the issue not to be visible.
Is it a limitation from the planning simulator? Is there any way to improve the vehicle motion?
Expected behavior
The simulated bus moves like a bus
Actual behavior
Nice drifting skills
Steps to reproduce
$ ros2 launch autoware_launch planning_simulator.launch.xml vehicle_model:=cbus_vehicle sensor_model:=itri_bus_sensor_kit map_path:=$AUTOWARE_DATA/sample-map-planning/
Versions
No response
Possible causes
No response
Additional context
No response

Actually, the 3D mesh is not placed properly on base_link in the vehicle.xacro file:


io_uring_prep_timeout count

What exactly is count in io_uring_prep_timeout?
static inline void io_uring_prep_timeout(struct io_uring_sqe *sqe,
                     struct __kernel_timespec *ts,
                     unsigned count, unsigned flags)
{
    io_uring_prep_rw(IORING_OP_TIMEOUT, sqe, -1, ts, 1, count);
    sqe->timeout_flags = flags;
}

Is it count of ts? Is it index of ts? Wait for something if IOSQE_IO_LINK is used? In test there are 0 value used for count, its not clear.

Apart from working as a normal timeout, IORING_OP_TIMEOUT also fires after count requests completed (i.e. new count CQEs appeared) after the timeout's submission. If count is 0 this is disabled. Don't know what was the use case, but that's how it is.

The history:

https://github.com/axboe/liburing/issues/4
https://github.com/axboe/liburing/issues/18

The (only) usage:

https://github.com/axboe/liburing/blob/master/src/queue.c#L245

The future:

<EMAIL_ADDRESS>

O i c, For normal timeout (sleep, ttl) I had the count set to 1 thinking it was number of ts and I was getting weird behaviorism for months now. It would work, then not work, not knowing what was causing this weird behavior!
Anyways... some of these function could sure use documentation. As an outsider using these function would have no clue what they mean/do.

It's documented here: https://github.com/axboe/liburing/blob/master/man/io_uring_enter.2#L309
I don't know if io_uring_prep_timeout is documented, but you'd better look for the document of io_uring_enter, since it's updated more often.

As Carter says, the 'count' is documented in the man pages shipped with liburing. liburing doesn't have a set of full man pages yet just for itself, hopefully that'll happen at some point...

I had read the IORING_OP_TIMEOUT docs though it wasn't clear to me, sorry.
I think timeout is a really useful feature to have and has many use-case.
How about if the function was split into io_uring_prep_timeout & io_uring_prep_timer? This way 2 feature can be separated and it could lessen the confusion for future users


CASMINST-5269 - Adding embedded repo to be active on images

Summary and Scope
Adding the embedded repo
Issues and Related PRs
List and characterize relationship to Jira/Github issues and other pull requests. Be sure to list dependencies.

Resolves CASMINST-5269
Merge with/before/after [CSM Branch]https://github.com/Cray-HPE/csm-config/pull/73

Testing
List the environments in which these changes were tested.
Tested on:

TBD

Test description:
How were the changes tested and success verified? If schema changes were part of this change, how were those handled in your upgrade/downgrade testing?

Were the install/upgrade-based validation checks/tests run (goss tests/install-validation doc)?
Were continuous integration tests run? If not, why?
Was upgrade tested? If not, why?
Was downgrade tested? If not, why?
Were new tests (or test issues/Jiras) created for this change?

Risks and Mitigations
Are there known issues with these changes? Any other special considerations?
Pull Request Checklist

[ ] Version number(s) incremented, if applicable
[ ] Copyrights updated
[ ] License file intact
[ ] Target branch correct
[ ] CHANGELOG.md updated
[ ] Testing is appropriate and complete, if applicable
[ ] HPC Product Announcement prepared, if applicable

Needs a release/1.3 PR.


Draft: [do not merge] Canary

Release the contents of #15 under tag canary
You should be able to install with yarn install -E '@madatdata/core@canary' (the-E is optional, I think it will just make it resolve to 0.0.10-0, which is the current release of the canary tag).
I haven't tried this myself yet, and this code is mostly untested outside of unit tests. YMMV.

Published as v0.0.10


Not able to install on Mac book M1

I am trying to install fastp tool on my Mac M1. So far, I have tried all these options
download osx-64_fastp-0.23.4-h5712c04_2.tar.bz2
then,
conda install osx-64_fastp-0.23.4-h5712c04_2.tar.bz2
The fastp file is not showing the directory.
Alternatively, I have also install via conda directly,
conda install bioconda::fastp
conda install bioconda/label/cf201901::fastp

which however threw the following error
PackagesNotFoundError: The following packages are not available from current channels:

bioconda::fastp

I am trying to install fastp tool on my Mac M1. So far, I have tried all these options download osx-64_fastp-0.23.4-h5712c04_2.tar.bz2 then, conda install osx-64_fastp-0.23.4-h5712c04_2.tar.bz2 The fastp file is not showing the directory. Alternatively, I have also install via conda directly,
conda install bioconda::fastp
conda install bioconda/label/cf201901::fastp

which however threw the following error PackagesNotFoundError: The following packages are not available from current channels:

bioconda::fastp
we have NOT got a Apple Silicon for test, but we believe that our code could run on it, could you try but the binary from source code?

Might be a different problem but I was having the same error message with conda trying to install fastp. I ran:
conda config --add channels defaults
conda config --add channels bioconda
conda config --add channels conda-forge
conda config --set channel_priority flexible

And this seemed to fix the problem I was having.
conda create -n fastp_test -c bioconda fastp=0.23.4
and
conda create -n fastp_test bioconda::fastp=0.23.4
worked and installed fastp successfully

@annajbott Thanks for sharing the steps. Unfortunately, none of these steps worked for me.
After running all config add, I tried.
conda create -n fastp_test -c bioconda fastp=0.23.4
which threw me the old error,

@KimBioInfoStudio Sorry for the delayed response,
I have tried the step 1, step 2, step 3. It did not work for me, this is the error for step 1:
autogen.sh: line 3: autoreconf: command not found
clang: error: unsupported option '-print-multi-os-directory'
clang: error: no input files

----------------------------------------------------------------
Initialized build system. For a common configuration please run:
----------------------------------------------------------------

./configure --prefix=/usr --libdir=/usr/lib


KOGITO-6572: [DMN Editor] Styling regression

Style regression was caused by the change of https://github.com/kiegroup/kogito-editors-java/pull/181

The (build) kogito-tooling-stunner-editors check has failed. Please check the logs.


samples: coaps_server: Fix platforms to build coap_server test on

We incorrectly had an arch_whitelist constraint set to 'qemu_x86' which should
have been a platform_whitelist, so fix that and add arduino_101
frdm_k64f to the platform_whitelist as targets that we can test this on.
Signed-off-by: Kumar Gala<EMAIL_ADDRESS>

duh, I remember fixing those, there is another one:
mbedtls_dtlsserver/sample.yaml.
At some point I must have overriden my own branch with an old state and lost a few fixes :(

Yeah, the mbedtls_dtlsserver/sample.yaml I was going to open a bug on since its more involved to fix because of code bit rot.  Was going to see if Jukka would fix it up.


[stable/nextcloud] remove use of removed template from NOTES.txt.

Also remove use of unused variable nextcloudPort

What this PR does / why we need it:
Fixes #14177
Special notes for your reviewer:
@chrisingenhaag @billimek small fix for a big problem
Checklist

[x] DCO signed
[x] Chart Version bumped
[x] Variables are documented in the README.md
[x] Title of the PR starts with chart name (e.g. [stable/chart])

/lgtm


Change sqllocalizedextensions extension compile mode to nls file MessageFormat.

This PR changes the compilation of sqllocalizedextensions from using bundle metadata header files to using file message mode as seen in:
https://github.com/microsoft/vscode-extension-samples/tree/main/i18n-sample
The main changes are:

changing the localize call to use file message mode instead of loading message bundle in affected extensions (the reason for doing this is explained below)

removing the bundleMetadataFiles call, nls json filter and adding createAdditionalLanguageFiles call in the compile-extension process in gulpfile.extensions.js (This creates language specific nls files for every localized file with or without the translated resources)

Adds in a gulp task to manually import  i18n resource files from language folders and into the extension while also generating a localized package nls file for each language. (Currently the compilation process can only handle the src and out folder, and there is no way to delete individual files in the extension folder right now.) Any changes to package.nls.json or the resources in the i18n folder will be pushed into the extensions as a PR.

Adding an exclusion for gitignore to handle bundled language resources inside the extension.

This change, in conjunction with updated XLF and i18n resources, will allow for these extensions to be localized in ADS.
The reason for these changes are due to the design of vscode-nls:
From my research into vscode-nls, when using loadMessageBundle, vscode-nls first tries to look into the extension cache that was created when installing the language pack, which only includes extensions that were bundled with ADS.
If it cannot find the cached extension file, vscode-nls then checks if ADS is running in language pack mode, if it does, it immediately loads in the default language, rather than looking in the extension files for any bundled language files (which I've tested by adding a create bundle call in the compilation process). It only looks for the bundled files if ADS is not in language pack mode.
I've tested Agent and Schema Compare with this compilation format and so far the extensions work without issue in both English and German even without language resources included.
For Schema Compare, I added the language resources and the strings were successfully translated in German as shown in the screenshots below and it also works in English mode as well:

If this requires a bump in the extension number, please let me know so I can add it.

Pull Request Test Coverage Report for Build 965277526

12 of 26 (46.15%)  changed or added relevant lines in 26 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage decreased (-0.002%) to 42.973%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

extensions/agent/src/data/alertData.ts
0
1
0.0%

extensions/agent/src/data/jobData.ts
0
1
0.0%

extensions/agent/src/data/notebookData.ts
0
1
0.0%

extensions/agent/src/data/proxyData.ts
0
1
0.0%

extensions/agent/src/dialogs/alertDialog.ts
0
1
0.0%

extensions/agent/src/dialogs/jobDialog.ts
0
1
0.0%

extensions/agent/src/dialogs/notebookDialog.ts
0
1
0.0%

extensions/agent/src/dialogs/operatorDialog.ts
0
1
0.0%

extensions/agent/src/dialogs/pickScheduleDialog.ts
0
1
0.0%

extensions/agent/src/dialogs/proxyDialog.ts
0
1
0.0%

Totals

Change from base Build 963349969:
-0.002%

Covered Lines:
26333

Relevant Lines:
55640

💛  - Coveralls

@Charles-Gagnon Arc is currently not an extension listed under the sqlopsextension and is webpacked. The localization issue happens when the extension is not webpacked.
As a correction, its not just bundled extensions that are recognized, It seems that if an extension is webpacked and is recognized by the language pack, it will get added to the language pack cache, otherwise it won't. Currently the language pack does not have Arc as one of the translated extensions, but it will be as part of a refresh.

"language package cache" - what is this exactly? Are you saying it's added to the core language bundles for ADS?
Would webpacking the other extensions also solve this issue? Because that's generally something we should be doing anyways - and so if that saves us a step here then I say we do that instead.

@Charles-Gagnon when you install a language pack, a folder appears in AppData/Roaming/azuredatastudio/clp that contains a folder representing the cached files of the lang pack, this folder is used by vscode-nls to try and find language resources when localizing in langpack/bundle mode. This folder is generated by vs/base/node/languagePacks.js.
I will attempt to add webpack.config.files to the other extensions and see if that changes anything.

Update: as an experiment I added a webpack config to schema-compare and it successfully localized as it was added to the appdata cache, I'll close this PR and focus on adding webpack if possible to extensions


Warn on use of AccessControl on AWS::S3::Bucket

Is this feature request related to a new rule or cfn-lint capabilities?
No response
Describe the feature you'd like to request
Warn people that are using AccessControl on AWS::S3::Bucket as this property is deprecated for all new buckets.
Describe the solution you'd like
A new rule to warn users that are using AccessControl on an AWS::S3::Bucket
Additional context
[This property is obsolete and not recommended for most use cases]
A canned access control list (ACL) that grants predefined permissions to the bucket. For more information about canned ACLs, see Canned ACL in the Amazon S3 User Guide.
S3 buckets are created with ACLs disabled by default.  Therefore, unless you explicitly set the OwnershipControls property [link] to enable ACLs, your resource will fail to deploy with any value other than Private.   Use cases requiring ACLs are uncommon.
Nearly all access control configurations can be more successfully achieved with bucket policies [link to AWS::S3::BucketPolicy].  For examples of common policy configurations, including S3 Server Access Logs buckets and more, please see https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html.
Is this something that you'd be interested in working on?

[X] 👋 I may be able to implement this feature request

Would this feature include a breaking change?

[X] ⚠ This feature might incur a breaking change

I think this makes sense, but since cfn-lint is about templates being valid / well written, I propose we don't warn if OwnershipControls is set to a value that supports ACLs.
For existing buckets/ stacks you can have ACLs without setting ownership controls, but I consider "can create from scratch" as a property of a well-written template

@benbridts are you thinking this would be better as an Informational rule?


Fix visual appearance of review screens

Right now, the "Edit" button is styled float: right which makes it very far away from the text you are editing. float: left with a margin-right: 1em looks a bit better, but if the text is multi-line the margin shifts to the left which is a bit weird.

I suspect someone can play around with this and make it better than it is now.

There may be other fixes...another option is highlighting the row that the edit button will act on on button hover (not mobile friendly), or adding visible border around the row that is always enabled.

Could you provide a url of a short interview that can reproduce your screenshot? I would like to download it and play with the Edit button.
I don't have a good test interview. When I tried to run al_question_test.yml, I got an error AttributeError: module 'docassemble.base.functions' has no attribute 'set_task_counter'. The version number is 2.0.12, commit 681d389.

Note that we're closer to the desired product from fresh Weaver interviews than I think their "observation" interview was.
This is the output for people variables that the weaver recognizes. The edit button takes you to a separate page with the full table of info for them. Maybe we want to show users more info on the review screen there.

There were some good upstream changes that address this. Closing for now.


Prefer using string slices over owned Strings

The API often asks for owned String objects when a string slice (&str) would suffice. Accepting string slices will significantly reduce allocations.

@Stebalien thanks.


Language Support

There is no language support, no? i can make a pull request for this feature.
Greetings

That would be great, thanks!

That would be really awesome.

Sorry, guys.
I'm out of time these months

@jopereyral Any progress on this? :)


Must the mrb_sys_fail() function raise an exception

Normal return of control from the mrb_sys_fail() function has unexpected results.
Example: double free, malloc with huge size used as error integer
The following is an example of an actual crash:
% cat crash.rb
def SystemCallError._sys_fail(*a)
  nil
end

File.readlink("/404")

% bin/mruby crash.rb
zsh: segmentation fault (core dumped)  bin/mruby crash.rb

As a point of reference
As far as I can tell, the script shown does not crash mruby 3.1.0-rc2.
It crashes after commit a4f740ff9ab8f42fd242eb34290821624d0d8b94 + 1a9991f16575b922746e6e656d7e05e5812bbda9.
The reason for the crash in the example taken is that RSTR_EMBEDDABLE_P(len = -1) is true before str_init_embed(), resulting in an illegal write (buffer over run).
Last but not least, even mruby 3.1.0-rc2 can return control normally from a call to mrb_sys_fail().
Therefore, it is still possible for subsequent processing to cause unexpected results.


Seperated the Cluster Module from AWS Workspace.

Separated the Intel Cluster From AWS Databricks Workspace

@shreejam21 do you also need to delete the example/databricks-workspace-cluster
folder?

I thought we have one example for workspace and cluster in all three repos - just to showcase how both modules can used together

I thought we have one example for workspace and cluster in all three repos - just to showcase how both modules can used together

Got it, I like it and it makes sense. But for now let's comment out the code block below since the "source" does not exist anymore. We'll update it to the cluster module and uncomment when available.
https://github.com/intel/terraform-intel-aws-databricks/blob/5dd0ecb0a40769efc456bf9ebc81283028355059/examples/databricks-workspace-cluster/main.tf#L12-L25


TeamsInfo.GetMemberAsync failing with error "MethodNotAllowed"

Github issues should be used for bugs and feature requests. Use Stack Overflow for general "how-to" questions.
Version
4.15.2
4.16.1
Describe the bug
When trying to get the user info when testing using teams
Exception being thrown when invoking
member = await TeamsInfo.GetMemberAsync(stepContext.Context, activity.From.Id, cancellationToken);
Exception
Operation returned an invalid status code 'MethodNotAllowed'
Upgraded to 4.16.1
Still same error
Tried using var members = await TeamsInfo.GetPagedMembersAsync(stepContext.Context, null, null, cancellationToken);
But this gave the below error
Operation returned an invalid status code 'NotImplemented'
To Reproduce
Exception when using the code above
Expected behavior
This should work.
Screenshots
App insights error

Additional context

@devbynight - A 500 type error in App Insights typically means there was an error in the bot, itself. So, this actually aligns with the 'MethodNotAllowed' error you are receiving in the bot. As to why you are receiving this error, can you elaborate on the details?
Did you encounter this while running one of the BotBuilder samples or are you trying to implement the functionality yourself? If a sample, which one? And did you make any changes to the code? Can you post the relevant code you are using?

Also, with respect to your original post, I think we'll focus on the v4.16.1 GetPagedMembersAsync method since GetMembersAsync has a deprecated dependency and is marked as obselete.

This is not from the samples.
I am using GetMemberAsync and not GetMembersAsync
member = await TeamsInfo.GetMemberAsync(stepContext.Context, stepContext.Context.Activity.From.Id, cancellationToken);
This is a skill bot that we have. We have added this as a skill to a root bot
When I chat with the root bot, the skill bot throws exception at this line
But if I chat directly to the skill bot via teams it works.
I'm sure this was working some time back

I am using GetMemberAsync and not GetMembersAsync
member = await TeamsInfo.GetMemberAsync(stepContext.Context, stepContext.Context.Activity.From.Id, cancellationToken);

If you are, in fact, trying to use GetMembersAsync, then I am unable to help you. As I mentioned, this method is deprecated and marked as obsolete because of a deprecated dependency. Your use of it is failing, and will continue to fail, because of this.
The solution is to use the newer GetPagedMembersAsync method available in the same library.
As a solution already exists to your issue and there is no alternative workaround, I am going to close this issue as resolved.

@stevkan - I'm not using GetMembersAsync. I'm using GetMemberAsync
GetMemberAsync is not deprecated.
Documentation

@devbynight - It looks like the docs were not properly updated to reflect the change in the code. I apologize for the confusion and will notify the docs team to make the appropriate changes.
As you can see in the botbuilder-dotnet Teams library, the GetMembersAsync method is, in fact, deprecated and marked as obsolete with the suggestion to use GetPagedMembersAsync, instead.
The same is true for the botbuilder-js Teams library (see getMembers

@stevkan - Again, I am not using GetMembersAsync
I am using GetMemberAsync

Okay...so, first off, my apologies. Your initial post referenced using GetPagedMembersAsync and I think my brain simply glommed onto the plural version of every method after that. 😬 I'm on track now.
Our sample 57.teams-conversation-bot makes use of the same GetMemberAsync method (reference sample code here) which yours appears to be structured similarly.
A primary difference I'm seeing between the two is the method in the sample lives in the activity handler (TeamsConversationBot) class. Given you're passing stepContext.Context as a method parameter in your code, it looks like you are perhaps trying to call the method from within a dialog...? If that is true, can you use the sample referenced above as a guide to move the call back to the activity handler and try again?

@stevkan - That's alright.
This is still not working in the context of a skill bot.
Alternative solution - I replaced usage of GetMemberAsync  with a Graph API call to get the user details, by passing the AadObjectId obtained from the Activity context.


hide menu in tablet mode or lower

This should be hidden behind a hamburger menu in the navbar.

Menu now hides, but the navbar burger does not expand.


Upgrade azure-arm-rest package in Azurefilecopyv6

Task name:
Description:
Documentation changes required: (Y/N)
Added unit tests: (Y/N)
Attached related issue: (Y/N)
Checklist:

[ ] Task version was bumped - please check instruction how to do it
[ ] Checked that applied changes work as expected

/azp run

/azp run

/azp run

Hi folks @Deekshitha981 @manolerazvan , As a long-time user of this task (v5 especially), I'm bit concerned about this PR change, considering this task is extremely critical for us, especially with a series of high-priority releases coming up. (haven't seen any integration tests for this task, even months after the release of the new version)
Given the recent breakdown of this task and the growing backlog of unresolved issues within this repository, our confidence in moving forward is slightly shaken. The quality of recent commits, combined with pilling up of issues, is not aligned with the level of service we used to get from Microsoft over the years.
I sincerely hope Microsoft is planning to invest more on these area to avoid further outages.


Emulator worker.js is named as 379.bundle.js in gh-pages branch

Description
I happen to find there is  a new file in gh-pages branch.
I checked the commit log, it's the original service worker js
NetworkLogConverter.worker.bundle.worker.js → 379.bundle.js
We should keep it's old filename I think.
Or some filename to tell what it's doing. Current filename is confusing

I'm really not sure why it's named like that in the gh-pages branch. When running with webpack dev server, the name is a bit ugly but at least it's obvious what it is:

Maybe it's a dev vs prod build difference?
(this was caused by #3230, for reference. Since it doesn't need to bundle the js file for inlineing, it doesn't get a manually assigned bundle name I think)

it's named by chunk name rule [id].js, and its id was 379, and curretnly 378.
So there are 2 solution for this:

add webpack config { optimization: { chunkIds: 'named' } }
set a chunk name when importing service worker new Worker(/* webpackChunkName: emulator.worker" */ ... )


Make json serialisation methods static inline

Previous switch from nlohmann-namespaced adl_serializer(...) method to putting the from_json/to_json in the same namespace as the json types can fall afoul of "Unused function from_json" warnings/errors when compiling with flags -Wunused-function or -Wall.
This change makes the definitions static inline to avoid such errors as it is quite common if e.g. logging to only ever use the to_json methods.

I understand that the warnings by the compiler are not necessarily helpful in this case since the functions are generated and cannot be eliminated individually just because some of theme are not used.
But I have a few questions to help me better understand the provided solution:

Did you test if this works with all major compilers? It seems like this may only hide the error in gcc but not in clang?

CC explicitly does not warn for unused static inline functions for
-Wunused-function. [...]
Clang does warn for static inline functions that are unused.

(Source)

From my understanding the compiler is not wrong when he is complaining that the function is unused. Did you consider to explicitly disable the warning with the [[maybe_unused]] attribute instead of implicitly hiding it with the inline keyword?

I am trying to imagine if there is a situation where one is actually interested in these warnings and it would be a problem if they don't occur. Do you think that's a valid scenario as well?

Bear with me if my questions indicate that I may not have fully grasped the issue yet. The inline keyword is new to me and I had to do some research first, which lead me to the above questions.

This is a generated header, from some point of view like a system header.
As such, it should not cause any warnings in user code.
This is usually archived by including such headers from a directory specified as -isystem. Then there will be no warnings.
But the user needs to take care of that, specifying -isystem correctly.
From that point of view, we have nothing to do.
On the other hand, I think having an inline on functions that are implemented in a header that is not a template is correct. Otherwise, we could end up with multiple implementations of the same function if the header is included more than once. And therefore should be done. But I do not think we need the static keyword in this context.
On the other hand, for the template classes, we should not need the inline since templates should be inline per definition.
So yes, I think some things can be done with that code to make it look better, and this PR works in the right direction.
Can we give it a try, inline for free functions and no inline for templates?
And if there are warnings, our tests should cover them ... in an optimal world.
This needs of course not be done in the context of this PR, because I do not want to add a lot of work to @mutagene . So maybe a follow-up ticket could be nice ...

Hi @mutagene , I would like to get that change in
But do you have the possibility to check if that would work,
no static and just inline for the free functions and no inline for template functions?
Would be awesome if you could, since you also seem to have code that triggers problems, in case there are some.

Sorry for the delay. I'm really grateful for your thoughtful feedback and I'm sorry I haven't had time to respond properly. I'll take a look soon.

Hi @mutagene , we recently added some fix to the generator. That speaks for a new release.
Do you think this PR has a chance to receive some updates the next time?
Because if it does, we could well wait to have this improvement onboard.

Thank you!
I added some suggestions since I think the static inline is redundant, and the static can be removed.
Klick through them if you want or leave it; we will take that in the future. It's more of a cosmetic fix.

Yes, I completely agree.

@jothepro , can you please glance over the PR and merge it if you think it's OK?
(I would appreciate a second pair of 👀 since I added changes myself)

I plan to do a full review tomorrow. 👍


Customize FB avatar resolution

Default resolution is 50x50, too low. We could customize FBSocialProvider.GetContacts() when calling FB.API ("/me/friends?fields=id,name,picture,...")
The picture field can set the desired resolution:
50x50: picture.type(small)
100x100: picture.type(normal)
200x200: picture.type(large)

@rsodre, we created ticket for this feature here: https://trello.com/c/OJHbHN4O/245-new-multiple-resolution-for-facebook-avatar

@rsodre  Hi,
I didn't find good solution to implement this future in right way, if you got some ideas, We will appreciate for your contribute


How are we meant to use the new versions system?

I apologize if this is the wrong place to bring this up, but I'm not sure where else to raise the issue. In a nutshell, I'm not sure I understand how best to use the new versioning system.
I'd like to be able to install the latest version of Lua (5.3.4) and have it appear as /usr/local/bin/lua with luarocks at /usr/local/bin/luarocks. But that doesn't appear possible any longer. I suppose that I can make the symlinks myself or rig some way for scripts that assume /usr/bin/env lua to find lua-5.3@, but that feels cludgy and clumsy. So, without assuming that the new Homebrew system is at fault, I just want to understand how you all intend for it to be used. What is the right way for end-users who just want to use one version (the newest or any other) of a program to simplify things?
Another way of putting my question is why not let users determine which version of a package gets installed with the default executable names? Only one at a time can be default, but why can't each user decide for themselves which one?
TIA

This is a good place to bring this up and the right conversation to have. Our current system is still very much under discussion and negotiation. Currently there's two types of keg-only formulae:

Those that can exist side-by-side with all other versions
Those that cannot exist side-by-side

For 1 you have stuff like GCC and Lua 5.3 where the executables and libraries are suffixed so they don't clash. Lua is in violation of our docs here because it requires patched to do so so I'll update this shortly.
For 2 you have things like MySQL which don't exist to have multiple versions installed at once and don't support prefixing. These are installed as keg_only :versioned_formula.
What I'm still debating is: should everything be 2 (without exception), should almost everything be 2 (with the exception of things like GCC that can be easily invoked as CC=gcc6 or should we just decide everything on a case-by-case basis?

I'm not sure I follow. Sorry if this question is me not getting it. If everything is (or becomes) like 2, where does that leave things like Lua 5.3? There's very little point (as I see it) in allowing users to install Lua 5.3, but forcing it to be keg only.
Also, unless I'm missing it, you didn't answer part of my question: would brew ever consider allowing users to install non-default versions (e.g., Lua 5.3 right now), but with default names (e.g., the binaries are lua and luarocks)?

There's very little point (as I see it) in allowing users to install Lua 5.3, but forcing it to be keg only.

That's the mentality we're hoping to change through better tooling. Keg only things just mean you need to add an extra location to your PATH. Longer term brew switch or a similar tool may allow you to specify that they should always be linked to /usr/local/bin but we need to avoid our dependency system exploding on that before then.

would brew ever consider allowing users to install non-default versions (e.g., Lua 5.3 right now), but with default names (e.g., the binaries are lua and luarocks)?

Yes but with the choice of either:

default names and being keg only
suffixed names and being linked into /usr/local/bin

That's the mentality we're hoping to change through better tooling. Keg only things just mean you need to add an extra location to your PATH.

Ah, that does make sense. Now I half-wish that lua-5.3 was keg only—provided it was called lua.

Longer term brew switch or a similar tool may allow you to specify that they should always be linked to /usr/local/bin but we need to avoid our dependency system exploding on that before then.

Ok. That sounds reasonable. (At the moment brew switch doesn't seem able to handle or find things like lua-5.3 at all. Am I correct about that or just using it wrong? The documentation for it is pretty terse.)

Now I half-wish that lua-5.3 was keg only—provided it was called lua.

I opened https://github.com/Homebrew/homebrew-core/pull/9472 to try this out.

At the moment brew switch doesn't seem able to handle or find things like lua-5.3 at all. Am I correct about that

You are correct.

Closing this as the discussion is mostly over but thanks for the 💭s.


introduction guide

Description
It would be great to have an intro on first launch with like 1 - 2 - 3 steps to explain how to get started with Homarrr instead of being with only the first service and the blank default config.
We probably can detect that it's the first time a user visits the app if they don't have the theme cookie (the cookie that saves the selected theme)
The content of the intro pages could even be linked with markdown files in the docs ! (We have a markdown parser in the app irrc)
Mantine's stepper can be used
https://mantine.dev/core/stepper/

Priority
Medium (Would be very useful)
Please tick the boxes

[X] You've read the docs
[X] You've checked for duplicate issues

We probably can detect that it's the first time a user visits the app if they don't have the theme cookie (the cookie that saves the selected theme)

So people who clear the cookies on exit (or connect with a new device) would end up having the wizard showing every single times?!
Creating a empty file in the config folder once the wizard is done, would be a more flexible choice.

We probably can detect that it's the first time a user visits the app if they don't have the theme cookie (the cookie that saves the selected theme)

So people who clear the cookies on exit (or connect with a new device) would end up having the wizard showing every single times?!
Creating a empty file in the config folder once the wizard is done, would be a more flexible choice.

I think I will make it so the wizard shows each time you load the page if there are no services. The service will walk you through adding your first service. This would make it automatically disable itself.
What do you think about that ?

@ajnart Why not make it a thing in config? tutorialCompleted = true/false

Some kind of onboarding will be part of 0.14.0


Connection timed out : getsockopt + Internal Exception : java.lang.IndexOutOfBoundsException

Hello , I'm trying to play Minecraft with friends via World Host , but when they try to connect to the server they get one of two errors : " Connection timed out : getsockopt " , or " Internal Exception : java.lang.IndexOutOfBoundsException "

I'm trying to host the world on my Steam Deck using the DeckCraft modpack , which comes with World Host preinstalled .
Minecraft Version 1.21
World Host Version 0.4.14
Mod settings -
URL/Server: world-host.jemnetworks.com
Reconnection Toasts: Yes
Use Short IP: No
Share Button: Yes
Allow Friend Requests: Yes
Security: Secure
Enable Friends: No
UPnP: No
Version Check Popup: Yes
Allow Friend Requests: Yes
Popup Friends Online: Yes
Whitelist Joins: No
Reconnection Toasts: Yes
Online Status Location: Right

Please upload logs.

Friends logs - https://mclo.gs/YtOJLBe
My logs - https://mclo.gs/s2VFcKx
In my logs it states that Polytone and Sodium aren't compatible with eachother , however the game opens and runs perfectly , other than World Host not working .

Try disabling UPnP in your settings.

We have already tried disabling UPnP , but to no effect .


2.2.0

Summary

Introduce opts.string.
Fix bug where boolean options were not added to the parsed options object when not in argv.
Rewrite tests with testmatrix.

Add several more tests (total: 53).
Improve description of every test.

Improve documentation.

Add parsing options to explain getopts behavior in different scenarios.
Rewrite portions of the existing docs.

Close #35, #36, #37.

Codecov Report

Merging #38 into master will not change coverage.
The diff coverage is 100%.

@@          Coverage Diff          @@
##           master    #38   +/-   ##
=====================================
  Coverage     100%   100%
=====================================
  Files           1      1
  Lines          84     90    +6
=====================================
+ Hits           84     90    +6

Impacted Files
Coverage Δ

index.js
100% <100%> (ø)
:arrow_up:

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 f8b4b8e...d1fbdcf. Read the comment docs.

The CI is failing because I decided it would be cool to use the upcoming (13.0.0) version of nyc which at the time of this writing does not support Node.js v4. I'll switch back to their stable latest version to fix the error.


Cannot convert Handwriting recognition model to tflite model

1. System information

OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Windows 10
TensorFlow installation (pip package or built from source): pip install "tensorflow<2.11"
TensorFlow library (version, if pip package or github SHA, if built from source): 2.10.1
Python 3.10

2. Code
Used the code from the tutorial on this page:
https://colab.research.google.com/github/keras-team/keras-io/blob/master/examples/vision/ipynb/handwriting_recognition.ipynb
And at the end tried converting the prediction model to a TF Lite model using following code:
converter = tf.lite.TFLiteConverter.from_keras_model(prediction_model)
tflite_float_model = converter.convert()

And then I get the following error:
error_log_1.txt
Which basically says that I need to set supported_ops flags. First of all, is there any way I can prevent that? I don't understand what function in the code is using select TensorFlow core operators, I don't want to be using any select TensorFlow core operators since it makes it creates other problems.
And then when I do set these flags:
converter = tf.lite.TFLiteConverter.from_keras_model(prediction_model)
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS]
converter._experimental_lower_tensor_list_ops = False
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_float_model = converter.convert()

Then I get the following messages, which i'm not sure if these are indicating if something's gone wrong or not:
error_log_2.txt
And export the model and import it in my android project using these instructions: https://www.tensorflow.org/lite/guide/ops_select
On Android I then convert the model file to byte buffer and try to pass it to TF Lite Interpreter as follows:
val fileDescriptor = context.assets.openFd(filename)
val inputStream = FileInputStream(fileDescriptor.fileDescriptor)
val fileChannel = inputStream.channel
val startOffset = fileDescriptor.startOffset
val declaredLength = fileDescriptor.declaredLength
val byteBuffer = fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength)
val interpreter = org.tensorflow.lite.Interpreter(byteBuffer)

I then get a IllegalArgumentException with following message:
"Model ByteBuffer should be either a MappedByteBuffer of the model file, or a direct ByteBuffer using ByteOrder.nativeOrder() which contains bytes of model content."
I think there is something wrong with the exported TF Lite model file.
Best solution would probably be to avoid using select TF operators, would really like to avoid it if possible.
Would appreciate your help!

Hi @mehti98 !
It seems you have sorted out the original select ops issue from your side .
For second error on bytebuffer Can you make the necessary changes  according to this  example file and let us know.
 val byteBuffer = ByteBuffer.allocateDirect(modelInputSize)
 byteBuffer.order(ByteOrder.nativeOrder())

Thank you!

Hi @mohantym ,
where does this modelInputSize come from?
As I mentioned the exception is thrown at line 64 in the example file you've sent, whilst initializing the Interpreter object:
val interpreter = Interpreter(model)
so I'm not able to get the modelInputSize.
But maybe you meant to modify the convertFileToByteBuffer method which converts the model file to byte buffer. I modified the method accordingly to:
fun convertFileToByteBuffer(assetManager: AssetManager, filename: String): ByteBuffer {
        val fileDescriptor = assetManager.openFd(filename)
        val inputStream = FileInputStream(fileDescriptor.fileDescriptor)
        val fileChannel = inputStream.channel
        val startOffset = fileDescriptor.startOffset
        val declaredLength = fileDescriptor.declaredLength
        val mappedByteBuffer = fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength)
        val byteBuffer = ByteBuffer.allocate(mappedByteBuffer.capacity())
        byteBuffer.order(ByteOrder.nativeOrder())
        return byteBuffer
    }

But I'm still getting an exception:
java.lang.Exception: java.lang.IllegalArgumentException: Model ByteBuffer should be either a MappedByteBuffer of the model file, or a direct ByteBuffer using ByteOrder.nativeOrder() which contains bytes of model content.

Ok @mehti98 !
Thanks for the update.
@sachinprasadhs
Could you look at this issue.
Thank you!

Hi @mohantym , @sachinprasadhs
Is there any update on this?
Just to add, I just need a hand-recognition model for TF Lite to implement in my Android App, so if you guys have any suggestions, for example if i can download an already trained model and can just download and use it, it would also be just enough
Thank you!

@mohantym @sachinprasadhs
I modified the convertFileToByteBuffer method accordingly:
val inputStream = assetManager.open(filename)
val output = ByteArrayOutputStream()
inputStream.copyTo(output, 1024)
val file = output.toByteArray()
val bb = ByteBuffer.allocateDirect(file.size)
bb.order(ByteOrder.nativeOrder())
bb.put(file)
return bb

AND updated the TF Lite dependencies to the following:
"org.tensorflow:tensorflow-lite:2.11.0"
"org.tensorflow:tensorflow-lite-select-tf-ops:2.11.0"

And finally managed to initialize the TF Lite interpreter!
I then ran the interpreter with an input of a bitmap image converted to ByteBuffer, but the output I get is really weird. The output tensor shape is [1,32,81] , an array of floats, which is really weird, I was just expecting the predicted text as output??
Maybe I need to decode this?
Can you please help me out? I have attached the model image

Hi @mehti98
We have to decode the predictions to get the output text by
# A utility function to decode the output of the network
def decode_batch_predictions(pred):
    input_len = np.ones(pred.shape[0]) * pred.shape[1]
    # Use greedy search. For complex tasks, you can use beam search
    results = keras.backend.ctc_decode(pred, input_length=input_len, greedy=True)[0][0][
        :, :max_length
    ]
    # Iterate over the results and get back the text
    output_text = []
    for res in results:
        print(res)
        res = tf.strings.reduce_join(num_to_char(res)).numpy().decode("utf-8")
        output_text.append(res)
    return output_text

You may find this notebook to be useful in this regard and let us know if it helps.
Thanks.


feat: allow setting traits after setup

This PR forwards the setTrait and setTraits functions from Flagsmith to the Flagsmith helper. Otherwise, there is no way of setting traits after the setup function is called (which must happen synchronously in a component, so we can't wait for requests to finish before setup).
Also includes a potentially-breaking bug fix: The types for useFlags, useTraits and useFlagsmithLoading previously referenced FlagsmithHelper (i.e. FlagsmithHelper<string, string> because those are the defaults) instead of FlagsmithHelper<F, T>, so it was impossible to pass a FlagsmithHelper<F, T> to it. By making the functions fully generic, this problem is avoided.
Unfortunately, this is a (slightly) breaking change, because for consistency, the first type parameter for useTraits changed from T to F.

Closed in favor of #75 and #76.


Bugfix: Government page not showing officers

Specifically, if someone didn't have an account, they didn't show up.
Now the relevant query uses a left join against the user accounts
table, so it should always succeed in fetching a member.

Hey Alex, could you take a look at this real quick? The constitution test from Travis is failing, and I can't fix it. The UPSTREAM_URL in tests/static/test_constitution.py doesn't seem to be valid, but I can't figure out the suitable replacement.

Hey @dkong1796 I have no idea what's going on in this test. Specifically, the value of UPSTREAM_URL doesn't make sense to either Henry or I. There's no "constitution.pdf" file in the root of the repo, and that URL pattern doesn't even work to access files in the root of the repo that DO exist. Could you take a look (and maybe tell us what that test is trying to do?) Thanks!
P.S. For the record, we now generate a PDF automatically whenever changes are made to the RuddockConstitution  repo. Then someone has to upload the PDF to that manually. More details in the readme of the constitution repo.

@HenrySwanson, lgtm. Thanks for the fix.
(Overriding the tests to approve the merge because this test has nothing to do with Henry's change and has evidently been failing on every PR for a few months.)

When I wrote the test, these things were true:

The RuddockConstitution repo had the constitution pdf checked in as part of the repo, at the UPSTREAM_URL path.
The constitution pdf was checked into the Ruddock Website repo, and the version on the server was updated by doing a git pull origin master to pull in the latest master branch.

I wrote the test to detect when the constitution version in RuddockConstitution had changed, but the version checked into the RuddockWebsite repo was not updated. However, I couldn't get travis to continuously test all the time (you have to push commits for it to run tests), so it only triggered if people were actively working on the website code. Since you seem to be doing something different now, feel free to delete the test or something.


Charts are shifting from wrong side

Charts are shifting from left to right, which is uncommon.
All scopes, performance monitors, ... are moving charts from right to left (add new value to the right)

Hi,
This has already been implemented in v1.1.1-beta. From the menu via view->graph_direction this setting can be changed.
In case you have any doubts, let me know.

I have just tried the master branch expecting it to be the latest version, so if it is fixed, then it can be closed.
I just don't understand the configuration ability at all.
In all LTR languages, X axes has bigger values on the right so time goes from left (old) to right (new)
To my knowledge, in RTL languages like Arabic or Hebrew, dispite they are writing in the direction from the right to the left, they also dipicts "X" axes lower values on the left and bigger values on the right.
I'm just curious if there is any nationality understanding it differently.
If so, it should be easy to detect this from LANG (or similar) environemnt variable so there is no need to configure it at all.

My bad, I was working on a different branch so forgot to update it.
And having newer on left and newer on right is actually just personal. It doesn't have any serious reason as such : )


Shaperglot

Please consider making shaperglot an additional analysis engine, which will add opentype features needed to the plugins recommendations :)
Cc @simoncozens

Can you elaborate? Shaperglot doesn't define or recommend any specific opentype features or feature code for a given language, and I don't think I'd want to do that in TalkingLeaves since Glyphs already does a pretty good job of auto-generating features as long as the user follows the right naming conventions for their unencoded glyphs.
What I'm hoping I can do with Shaperglot is use the shaping checks to infer a list of unencoded glyph names that follow Glyphs naming conventions, so that the user can add those glyphs to their project. Then Glyphs can auto-generate the feature code. I've been poking around in Shaperglot and I'm not yet sure whether this is possible.

What I'm hoping I can do with Shaperglot is use the shaping checks to infer a list of unencoded glyph names that follow Glyphs naming conventions, so that the user can add those glyphs to their project.

I don't think that's possible. I'm not even sure it makes much sense.
Shaperglot tests that a font behaves correctly for the languages you're testing. It doesn't care about glyph names, encoded or unencoded. Its checks are more about the behaviour level. For example, to support Aghem, Hyperglot will tell you that you need a SMALL LETTER I WITH STROKE and also that you need a COMBINING MACRON ACCENT. But having those two codepoints covered in your font is not sufficient for support. To actually support the language properly you need to ensure that, when the input sequence is U+2068 U+0304, you either replace the SMALL LETTER I WITH STROKE with a dotless version and that your font has the correct anchors to make the combining macron accent combine, or replace the two glyphs a single precomposed glyph which does all that. That's what shaperglot tests for - but it doesn't necessarily care how you do it, or what your glyphs are called; it just makes sure that you do something to support that case.
And  I believe that these somethings that you have to do - inserting anchors, handling soft-dotting, etc. - are beyond the scope of Glyphs' automatic feature code generation, so I'm not sure that generating a list of magic glyph names would help.

Shaperglot doesn't need to know or care about glyph names or feature code, because it's checking language support. TalkingLeaves is a tool that helps the user build a glyph set that supports their target languages. It's not a QA tool, and maybe I need to clarify this better in the documentation and the GUI.
In TalkingLeaves, if the user selects Aghem it currently looks like this, with only encoded glyphs in the "Missing" column:

Glyphs does automatically generate feature code to handle soft-dotting for Aghem, if you simply add an istroke.dotless glyph. So, in TalkingLeaves, I'd like to include such unencoded glyphs in another column, and add them to the user's current project when they click a button. I think that would be very useful in scenarios as straightforward as this one. It may not be possible to rely on Glyphs automatic feature code for everything.
I think to get this working, I won't be able to infer unencoded glyph names from Shaperglot alone, but the checks might be useful in learning what languages need unencoded glyphs, and some hints as to what they are. I'll probably have to somewhat-manually put that together with Glyphs' naming conventions, which aren't documented as far as I know.

What I'm hoping I can do with Shaperglot is use the shaping checks to infer a list of unencoded glyph names that follow Glyphs naming conventions, so that the user can add those glyphs to their project.

I don't think that's possible. I'm not even sure it makes much sense.

@simoncozens It makes sense to me, and it seems like it is indeed possible with Shaperglot, so now I'm wondering if I didn't explain the problem very well in the first place.
If you're interested, I expanded on the problem and how I can (probably) solve it via the Shaperglot API here: https://github.com/justinpenner/TalkingLeaves/issues/16#issuecomment-2080079079. I have only a minimal understanding of shaping and Arabic script, so any feedback you might have on #16 would be greatly appreciated.


Ability to refer to a point in time of A/V

Description
Ability to refer to a point in time. Standard syntax for addressing points.  Want to say this chord at this point.  SMPTE time codes. Might also need sample level access on audio files -- this 10 sample window.  Frequency content of the window.  SMPTE, Samples and Time.  HTML5 video not great at supporting sample accuracy, get nearest key frame based on time.  Could annotate with sample accuracy, but just works as metadata.
Variation(s)

References between multiple representations: image, audio, video, music notation.
As a student, I want to cite a particular time range of a video for my paper.
Segmentation of video, audio by time.  Play range of time from video/audio
Variation:  Limiting client to playing a certain range (e.g. avoid students being distracted by whole movie when you want them to see a segment for a course)

Additional Background
Related IIIF: Image API Region, info.json, # Fragment on Canvases
Media fragments support NPT, SMPTE (https://www.w3.org/TR/media-frags/#naming-time) and note no problem combining t=123.45&xywh=1,2,3,4 (https://www.w3.org/TR/media-frags/#processing-name-value-lists )
Media fragment spec does not specify mandatory or canonical order of parameters. If using in IIIF we’d probably want to mandate (or at least recommend a canonical order) to avoid the creation of duplicate URIs for the same thing.
Film folks need frame specific references. Can build a more advanced player that supports it.  Frames would need to be relative to original scan of the film. Transcoding gets … "exciting".
e.g. freeze on a frame where the original physical film has a scratch.
SMPTE allows reference to a frame in the format:   hh:mm:ss:ff
eg: 00:01:30:02  is the third frame in 1 minute 30 seconds. (SMPTE spec is closed, but https://en.wikipedia.org/wiki/SMPTE_timecode describes)
Source: BL workshop notes
Interest: 100%

By @thehabes
When referring to Audio pieces within the manifest, it was easy for our annotations to be somewhere "on" a piece of audio.   We stored audio resources as an oa:Annotation and made the resource of that annotation the actual mp3 audio file, which made it very easy to connection annotations and annotation lists to.
It would be nice if a/v resources could fit into the specs this way.  Making them an annotation was a  way to cheat.  If something existed like sc:Sound that worked like an sc:Canvas in the specs, it would work rather smoothly (see the example below on way we did this to make it work).
So the main point of discussion that comes from this is how exactly would an audio/video resource be described and treated?  What would be a proper motivation and @type?  What's the consistent and proper way to talk about how an annotation is "on" a resource with the dimension of time (and remember, time is probably an interval not an exact moment).
Ex:
//The audio resource
{
"@id": "/some/audioResource",
"@type": "oa:Annotation", //this was the hacky part, we would like this to be sc:Sound or something
"label": "sound file",
"motivation": "performance", //what should this be?
"resource": {
"@id": "media/audio/audioFile.mp3",
"@type": "dctypes:Sound",
"format": "audio/mpeg"
}
}
{
"@id": /some/audio/annotation/ID,
"@type": "oa:Annotation",
"label": "first five seconds",
"on":[ "/some/audioResource#t=0,5.00"]
}
For the variation aspect of this, we box an area of a sheet music canvas when the notes are playing.  So when the first five seconds of the music notes are boxed by this annotation, all we had to do was let this annotation know it was "on" two resources at once:
{
"@id": /some/audio/annotation/ID,
"@type": "oa:Annotation",
"label": "first five seconds",
"on":[ "/some/audioResource#t=0,5.00", "/some/music/sheet#xywh=546,485,186,382"]
}
So when the canvas was loaded to the screen, so was the music.  Since both resources were active, when this annotation was hit, it knew to be drawn to the screen given the dimensions during a specific TIME interval the music was playing.  If the canvas is clicked on, the annotation knows to load the audio to a specific time.  If the audio is loaded to a specific time, it knows to make a specific drawn annotation active, and in this way we connected audio, time and drawn visuals.

I don't follow the use case @thehabes is describing.  Is it to annotate Audio at a certain time range, or is it to annotate (a certain time range of) audio onto a canvas (at a certain time range)?
Either are possible, but we should distinguish the different axes.

I think this one was a little of both, so maybe it should be refined....
{
"@id": "/some/audioResource",
"@type": "oa:Annotation", //this was the hacky part, we would like this to be sc:Sound or something
"label": "sound file",
"motivation": "performance", //what should this be?
"resource": {
"@id": "media/audio/audioFile.mp3",
"@type": "dctypes:Sound",
"format": "audio/mpeg"
}
}
{
"@id": /some/audio/annotation/ID,
"@type": "oa:Annotation",
"label": "first five seconds",
"on":[ "/some/audioResource#t=0,5.00"]
}
This resource and annotation represent annotating audio at a certain time range (which could also just be a certain point int time).  In this case, I am trying to say something about the first 5 seconds of this audio resource (although all I have here is a label).
The canvas drawing is introduced in the next iteration of the same annotation...
{
"@id": /some/audio/annotation/ID,
"@type": "oa:Annotation",
"label": "first five seconds",
"on":[ "/some/audioResource#t=0,5.00", "/some/music/sheet#xywh=546,485,186,382"]
}
I am trying to say something about the first 5 seconds of this audio resource, and during those five seconds, I know to draw this box onto the canvas, which is a variation of the use case.  However, the knowledge ahead of time that we wanted to do such a thing determined how we referred to time with an annotation, and maybe that knowledge can help here.  I definitely understand splitting them up.

Yup. It would be good to stick to clear descriptions of the use cases at this stage, and then discuss solutions, rather than jumping to solutions for half-understood (by the group) problems.
Use case 1:

I am trying to say something about the first 5 seconds of this audio content

Use Case 2:

During those five seconds, draw something

The conversation seems to be around selectors; I think the use cases overlap there. If the title of the issue were "Refer to a point in time of A/V resource" it would be clear this is the case. I think there may be multiple applications of the solution of this issue, but I don't think the solution is forking as much as the discussion, which may result in a cookbook full of ways to use the selector in different cases.
Too many details
The resource is defined (following a IIIF-y container scheme):
{
    "@id": "http://example.org/av/005",
    "@type": "av:Audio",             // parallel sc:Canvas.
    "label": "sound file",
    "motivation": "performance",// IIIF A/V can pick what this is
    "duration": 45.09,        // IIIF A/V may require this, like sc:Canvas.height
    "recordings": [{            // parallel .images
        "resource": {                // It could just be this in the simplest case...
            "@id": "http://example.org/audio/audioFile.mp3",
            "@type": "dctypes:Sound",
            "format": "audio/mpeg"
        }]
    }
}

and then you just need a selector to point to it:
{
     "@id": "http://example.org/annotation/1250",
     "@type": "oa:Annotation",
     "label": "five seconds",
     "description": "The first 5 seconds pointed at by the last 5",
     "on": "http://example.org/av/005#t=0,5",
     "resource":  "http://example.org/av/005#t=40.09,45.09"
}

When on is used it means oa:hasTarget, but the #t= selector is just a shortcut for OAC Fragment Selectors, so resource (which is oa:hasBody in context), is just as willing to accept a fragment. (note: OAC has a context that calls on and resource simply target and body, respectively.)
This example is probably nonsense (annotating a resource onto itself), but I have a real use case that draws measures onto manuscripts and connects those regions to the audio fragments. In that case, I use an array "on" :  [ "MS#xywh=546,485,186,382", "music#t=5.53,10.2" ] since the intent is not to point from one to the other, but to align the two. Best practice may emerge to suggest these are both resources, or that a specific motivation should be used, but I think this supports the intent of OAC.

To the original intent of the post, I would consider the various A/V resources as independent from the IIIF Manifest, which is intended to arrange images. Because annotations can link resources together reliably, what may be most important is a well-described and annotatable resource, like sc:Canvas that standardizes the resource to enable reliable annotation, even when the underlying resource is lost or changed.

References between multiple representations: image, audio, video, music notation.
With good resources for each, an XPath selector for MEI and an xywh region in a canvas could be annotated onto a t for an audio resource and a t, xywh of a video without ruffling any feathers.

As a student, I want to cite a particular time range of a video for my paper.
This gets into the more interesting bits about how to encapsulate the video—that may be a long discussion. IIIF ignores image format and resolution by forcing a ratio no matter what. The t= in audio marking makes the same dodge around specific resolution or versions. In video, there may be a need for a hybrid or divergent description of objects, since most online resources for exhibit will be compressed videos (I assume in ignorance), and t+xywh is enough, but a specific reference to a direct frame is more similar to a measure or note reference in MEI, so perhaps a resource that produces the video is different from the one that describes the film.

This does indeed, as Rob suggests, create multiple use cases under this issue. If this issue is proliferating stories, they may be best captured somewhere else. Insofar as it asks for clear protocol on how to refer to a fragment, I think the simple answer is "Use a selector." This answer defers the definition of what resource this selector may target. Integration with Mirador or similar viewers may ultimately drive that answer.

Earlier comments in this issue point to need for canonical form of selector values, e.g. use t=5 and not t=5.00.

Previous comment intended to say we should have a canonical "no trailing zeros", and not to limit to integer seconds. To give perhaps a better example, use t=5.123 and not t=5.1230.

I think it's useful to think about point+duration here as the way to define this.
I'd love to be able to say "I want this moment, with duration 0, as a JPEG."


Indicator for block is modified is blue, it should be orange

Version: elemental 4.0.x-dev with SS 4.3.x

This icon should be orange, not blue. Looks like this changed in b91056b8

It should be blue for unsaved changes: https://invis.io/N5MVKR392DS#/307488190_Unsaved_Changes
Is it showing blue when it shouldn't?

Oh ok, the designs must have changed. All good!

Ok I think there are still some inconsistencies.
Published block state:
When it has unsaved changes:

When you save it (inline):

Block is modified now, refresh the page:

The last screenshot is what we originally had in the designs for a "modified" state. If the designs have changed so that this should now be blue, we should update it here as well so it's consistent.
I also noticed that when you save a block inline then refresh the page it triggers the change tracker warning - at this point you've saved the changes, so it probably shouldn't. This is a different issue though.

cc @clarkepaul

When you save it in-line and it doesn't change from blue that's a bug. Everything else is okay I think. Once it's saved it should go orange to indicate a draft version? I can't remember the difference between orange filled and orange outline now 😖

Originally the orange circle without fill was "draft" which indicates it hasn't been published yet, and "modified" is the filled circle, meaning published and subsequently modified

The blue indicator shouldn't show if the block is saved. We needed a way to indicate which block(s) have unsaved changes so they can be reviewed and saved before navigating away. The draft and modified indicators should stay as they are and hopefully aren't affected. This blue indicator is only for blocks at this stage, most other things don't require multi-item editing so it usually clearer what is being saved. Looks like a bug with "When you save it (inline)" unfortunately.

Fix at #538


Feature: Include fallback with all

fixes #70

I'm not able to see the withFallback() function.

@denisdulici sorry about that, missed function is added

I decided to include fallback during data load by default.


Heat transfer class

Proposed changes
This is a first draft for implementing a HeatTransferProblem class to the fenicsx branch.
I noticed a few things needed changing.
For instance, the DirichletBC and Source classes were designed for hydrogen concentrations.
Instead of modifying these classes to make them accept a temperature (which is what we do in the main branch), I propose to make other classes for temperature and put the shared functionality in a base class.
For instance, Source would be replaced by ParticleSource and a new class HeatSource is created. They both inherit from SourceBase.
Similarily, DirichletBC is replaced by FixedConcentration and FixedTemperature and they inherit from DirichletBCBase.
Usage is shown here
Types of changes
What types of changes does your code introduce to FESTIM?

[ ] Bugfix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] Code refactoring
[ ] Documentation Update (if none of the other choices apply)
[ ] New tests

Checklist

[x] Black formatted
[x] Unit tests pass locally with my changes
[x] I have added tests that prove my fix is effective or that my feature works
[ ] I have added necessary documentation (if appropriate)

@jhdark and I reviewed this PR and discussed how to refactor things later. Merging this!