Is there a supported method for converting DynamoDB Stream old/new images into Entities?

I found issue #58 and the corresponding PR #59 which mentions "streams" and a way to get the entity metadata from either a passed in name or looking for __en on the object passed in.
I'm working on implementing DynamoDB Streams and you can specify if you want the old/new/both records. I was hoping there might be an easy way to "hydrate" these into TypeDORM entities and it seems like it could be accomplished using the EntityTransformer but it's not "public". I haven't tried it but it looks like I might be able to reach in and grab it:
import {EntityTransformer} from '@typedorm/core/esm/src/classes/transformer/entity-transformer';

But I'm guessing this isn't supported in any way. I was wondering if it would be possible to either expose it and/or provide helper functions for consuming a DynamoDB stream (a la dynamodb-streams-processor).
Obviously the developer would still need to do something like:
import {getEntityDefinition, magicNewProcessor} from '@typedorm/common';

export const handler = (event: DynamoDBStreamEvent) => {
    const records = magicNewProcessor(event.Records);

    for(const record of records) {
        switch(getEntityDefinition(record.NewImage).target) {
            case UserEntity:
                // Logic for create/edit/delete of UserEntity
                break;
            ....
    }
};

Additionally I'm interested in how other people might be dealing with streams in their code. I know I could grab the PK/SK out of the payload and then fetch the item using TypeDORM but that would result in an extra read and doesn't solve working with the OldImage (if "StreamViewType": "NEW_AND_OLD_IMAGES")

Here is my poor man's "user-land" implementation. I wanted to share it in case anyone else found it useful.
NOTE: I don't know if this will handle transforms, I'm using class-transformer like it's used in EntityTransformer.fromDynamoEntity but I could be missing something. Also it currently doesn't handle defaults which might be the desired behavior (at least for the OldImage).
import processor from 'dynamodb-streams-processor';
import {EntityInstance, getEntityDefinition, MetadataManager} from '@typedorm/common';
import {defaultConnection} from '@/services/database/db';
import {plainToClassFromExist} from 'class-transformer';

const hydrateEntity = (image: Record<string, any>): EntityInstance => {
	const entityName = image.__en;
	if(!entityName) {
		throw new Error('Could not find entity name');
	}

	// Need to call to populate the metadata manager
	const entityManager = defaultConnection.entityManager;

	const entityDefinition = getEntityDefinition(entityName);
	if(!entityDefinition) {
		throw new Error('Could not find entity definition');
	}

	const allAttributes = [];

	// Get all attributes of our target and all its parents
	let ref = entityDefinition.target;
	while(ref) {
		const attributes = MetadataManager.metadataStorage.getRawAttributesForEntity(ref);
		if(attributes.length > 0) {
			allAttributes.push(...attributes);
		}
		// Step up the prototype chain
		ref = Object.getPrototypeOf(ref);
	}

	// Only keep the attributes that we found in metadata (remove PK/SK/__en/etc)
	const filteredImage = allAttributes.reduce((acc, attr) => {
		if(image[attr.name] !== undefined) {
			acc[attr.name] = image[attr.name];
		}
		return acc;
	}, {} as Record<string, any>);

	const reflectedConstructor = Reflect.construct(Object, [], entityDefinition.target);
	const transformedEntity = plainToClassFromExist(
		reflectedConstructor,
		filteredImage
	);
	return transformedEntity;
}

const getEntityName = (record: any): string | null => {
	if(record.eventName === 'INSERT' || record.eventName === 'MODIFY') {
		return record.dynamodb?.NewImage?.__en ?? null;
	} else if(record.eventName === 'REMOVE') {
		return record.dynamodb?.OldImage?.__en ?? null;
	}
	return null;
}

export const handler = async (event) => {
	const records = processor(event.Records);
	for(const record of records) {
		const entityName = getEntityName(record);
		if(entityName) {
			const newImage = record.dynamodb?.NewImage ? hydrateEntity(record.dynamodb.NewImage) : null;
			const oldImage = record.dynamodb?.NewImage ? hydrateEntity(record.dynamodb.OldImage) : null;

			switch(entityName) {
				case 'user':
					console.log('user', record, newImage);
					break;
				default:
					console.log('Unknown entity: ' + entityName, record, oldImage, newImage);
			}
		} else {
			console.log('Unknown record', record);
		}
	}
};


POC: Allows anchor in props table

It's a recurring problem when answering questions about the data grid. We need to pinpoint some props, but the most precise URL we can provide is: https://mui.com/x/api/data-grid/data-grid/#props
The proposed solution is to let appear an anchor link on hover of the first cell

The rows are slightly highlighted when targeted or hover
https://deploy-preview-35543--material-ui.netlify.app/material-ui/api/autocomplete/#props-onHighlightChange
Known CSS issues to fix:

[ ] do not impact other cells' styling
[ ] Have the SVG logo correctly centered

Closing this page get a full revamp #37405


About Extending Sunbird

@kochhar @vrayulu
Can you please add the required information to the file :
https://github.com/project-sunbird/sunbird-commons/blob/master/ingredients/developer-docs/extend_sunbird_overview.md

closing this issue.


[warning] Can't open /dev/input/event2 (are you in the input group?): EACCES Permission denied

When starting waybar I get a number of warnings of the form:
[warning] Can't open /dev/input/event2 (are you in the input group?): EACCES Permission denied
A group named input does not exist on this distro and I'd like to avoid creating one - where can I change things so waybar either does not check for input group membership or checks for membership of a group that does exist?

The error means that you can't access the device. Waybar (or better: the keyboard state module) does not really check your group memberships. The error message is just a hint, the part "(are you in the input group?)" is just a string literal, which apparently isn't accurate in all situations. :)
What's the permissions/group on the device node mentioned, /dev/input/event2?

The permissions are root:root, which explains it


Don't use spinner, colored output and emojis when output is redirected

According to this SO thread, we can just use process.stdout.isTTY.

For now, this should be an improvement wrt to processing redirected output: https://github.com/VIISON/scs-commander/pull/12
But yes, isTTY would be – non-proper TTY outputs like IDEs or automated build environments don't usually handle control characters well (e.g., deleted previous characters to delete the spinner)


conver to/from IRI (RFC3987)

as I found w3c
A URL is can be a URI (RFC3986) or IRI (RFC3987)
how about add two interfaces to convert to to/from IRI?

@rny the library already covers IRI with the support of punycode for the Host component, what else do you have in mind ?

modern browser can handle IRI in link href or address bar. The browser can convert the link to punycode automatically before requesting the http server. So what i want to do is to generate links like that (to make the html code readable):
/dir1/引き割り.html
instead of
/dir1/%E5%BC%95%E3%81%8D%E5%89%B2%E3%82%8A.html
this page has more details https://www.w3.org/International/articles/idn-and-iri/#iritechnical

I see your point I believe this a job for the Formatter.
converting the URI into an IRI should be done by the formatter. Since any given IRI will be de facto transform into an URI by the URI constructor. You can submit a PR for it I'll be happy to review it.

after spending one hour trying to add
    const PATH_AS_UNICODE = 1;
    const PATH_AS_ASCII = 2;

I found this is too hard for me. I am not quite understand the source code. sorry, I gave up.
Now I used a wrong workaround to generate the IRI path by rawurldecode() the path. I think it is safe for me to do it because the my path slug already filtered those reserved chars.
By the way, I found a small bug below
the document says about
$path->getDecoded();

but this method is not existed.

@rny I'll try to see If I can add this functionnality in v5 . I'm currently working on it. The typo is because the method was schedule to land on v4.2 but I removed it and now it will land in v5. I'll make the correction when I have time

This issue is resolve in the uri manipulations package


Feature/get post annotation

GET & POST annotation
Related: https://github.com/mmoreram/ControllerExtraBundle/issues/54

Pls tag & :shipit: :dancer:

@rogergros Great implementation.
Could you please add some documentation?

Sorry, annotation added @mmoreram :)

Thanks @rogergros. Checking & Merging :+1:


Windows Action Output Inconsistent

The output from running a windows-cmd or windows-script action has duplicate content, and is inconsistent with that used for other actions.
For example, running st2 run core.windows_cmd cmd='ping <IP_ADDRESS>' host='x.x.x.x' password='xxxxx' returns this:
$ st2 execution get 5ab01b573cac1c492f99067a
id: 5ab01b573cac1c492f99067a
status: succeeded (3s elapsed)
parameters:
  cmd: ping <IP_ADDRESS>
  host: <IP_ADDRESS>
  password: '********'
result:
  exit_code: 0
  result: "
Pinging <IP_ADDRESS> with 32 bytes of data:
Reply from <IP_ADDRESS>: bytes=32 time<1ms TTL=64
Reply from <IP_ADDRESS>: bytes=32 time<1ms TTL=64
Reply from <IP_ADDRESS>: bytes=32 time<1ms TTL=64
Reply from <IP_ADDRESS>: bytes=32 time<1ms TTL=64

Ping statistics for <IP_ADDRESS>:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms
"
  stderr: ''
  stdout: "
Pinging <IP_ADDRESS> with 32 bytes of data:
Reply from <IP_ADDRESS>: bytes=32 time<1ms TTL=64
Reply from <IP_ADDRESS>: bytes=32 time<1ms TTL=64
Reply from <IP_ADDRESS>: bytes=32 time<1ms TTL=64
Reply from <IP_ADDRESS>: bytes=32 time<1ms TTL=64

Ping statistics for <IP_ADDRESS>:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms
"

Note that the output is duplicated in the stdout and result field. It also does not return succeeded or failed fields.
Expected behavior: return output formatted similarly to core.local, e.g.:
lhill@st2demo004:~$ st2 run core.local cmd=id
.
id: 5ab059da3cac1c492f990695
status: succeeded
parameters:
  cmd: id
result:
  failed: false
  return_code: 0
  stderr: ''
  stdout: uid=706(stanley) gid=706(stanley) groups=706(stanley),1001(sudoers)
  succeeded: true
lhill@st2demo004:~$

Some of the problematic code is around here, e.g.:
        result = stdout

        output = {
            'stdout': stdout,
            'stderr': stderr,
            'exit_code': exit_code,
            'result': result
        }

        if error:
            output['error'] = error

        status = LIVEACTION_STATUS_SUCCEEDED if exit_code == 0 else LIVEACTION_STATUS_FAILED
        return (status, output, None)

It seems wrong to map stdout to result, but then to also return stdout as a separate field.

Closed via #4047.


Nextjs 14.2 Full RSC method with two spaces - Sometimes  pages do not load content

Describe the issue you're facing
I'm following the guide in the storyblok-react README for Nextjs with full react server components with one main difference - I am trying to use two storyblok spaces in the same app.
I can see that my setup is fetching the correct story data for each page but the <StoryblokComponent blok={data.story.component}/>  occasionally does not return anything other than

 (instead of the whole component I wrote for that story type).
This is only happening in my deployed environment with Netlify, not on my local development server, and I'm not sure why.
When the issue happens I get a page that only has my header and footer per my layout.tsx, no page contents as would be rendered with my components.
The issue is happening for random pages per build, not the same pages consistently. It changes from build to build.
Sometimes I see no errors in my server logs, sometimes I see component individual_resource_blog does not exist or component worklet-individual does not exist or similar, which should not happen because the page types complained about are in their respective component mappings.
Reproduction
https://github.com/esilver-automox/storyblok-react-test
Steps to reproduce
Deploy the code with Netlify
Navigate to /worklets and click on an item from the list (or see mine at https://issue-test.netlify.app/worklets)
Most pages show up, some do not.
Navigate to /blog and click on a blog from the list (or see mine at https://issue-test.netlify.app/blog)
Most pages show up, some do not.
View ALL pages working in local dev server (npm run dev) regardless of whether they show up or not when deployed
Bonus - deploy again and see different pages rendering/not rendering
System Info
System:
    OS: macOS 15.0.1
    CPU: (11) arm64 Apple M3 Pro
    Memory: 57.52 MB / 18.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 20.15.0 - ~/.nvm/versions/node/v20.15.0/bin/node
    npm: 10.7.0 - ~/.nvm/versions/node/v20.15.0/bin/npm
  Browsers:
    Chrome: 129.0.6668.101
    Safari: 18.0.1

Used Package Manager
npm
Error logs (Optional)

no error logs from my local server (everything works fine there)
no console logs from browser at time of issue
Validations

[X] Follow our Code of Conduct

ho @esilver-automox, we just released version 4.0.0 with some changes for RSC, can you please use this (follow the README for some breaking changes) and get back to this issue when you have the new implementation? Thank you!

@esilver-automox for RSC we have only this method https://github.com/storyblok/storyblok-react?tab=readme-ov-file#nextjs-using-app-router which gives you full RSC and Live Editing
So if you are following this correctly, the error you see component worklet-individual does not exist could be related to something else, I think this needs an investigation

@negprof the imports from storyblok rsc module are correct, so probably what is not working is the imports of your own components inside your app, please understand that the code that I provided is just a demo and you can find a working implementation in the playground app in playground-next13-live-editing

@edodusi using the new method I am seeing component does not exist and blank page contents for every component locally (except for my worklets-main component somehow).
I just pushed to my repo, so please check it out - this does not require deployment to reproduce, just npm run dev and navigate to localhost:3000/worklets and select any item or navigate to localhost:3000/blog and see nothing but the header and footer.

@negprof in your code I see that you are mixing implementations because in fetchData in app/page.js you are using a custom call.
Can you start from the playground code in this repo?

@edodusi , i upgraded to 4.0.0 and there is no 'StoryblokComponent' on the rsc package. Only on the normal react package, which are not working with the latest example in my case.
But i make it work with the 'StoryblokServerComponent' from the rsc package. I have to use it on my Client Components too. Its a little confusing

@Jeykom you have to always use StoryblokServerComponents when you Serena RSC. I will make the docs more clear.

ok, i found the problem :D
in your readme, you have the following part:
"To try this setup, take a look at the Next 13 Live Editing Playground in this repo."
this leads to:
'https://github.com/arorachakit/storyblok-react/tree/main/playground-next13-live-editing'
which is a outdated example :D

@negprof in your code I see that you are mixing implementations because in fetchData in app/page.js you are using a custom call.
Can you start from the playground code in this repo?

With the repo, everything works, i need for production next:revalidate: x seconds. How can I implement this into the storyblokApi? I needed to implement this, because before 4.0, next revalidate didn´t work, and my cache was stale so i made my own cv call and fetch.

@negprof in your code I see that you are mixing implementations because in fetchData in app/page.js you are using a custom call.
Can you start from the playground code in this repo?

Everything is working well with the example repository, but for production, I need next:revalidate: x seconds. How can I integrate this into the storyblokApi? I had to implement a custom cache validation before version 4.0 because next:revalidate wasn’t available, leading to stale cache issues, so I created a custom cv call and fetch. Any guidance on transitioning to the built-in next:revalidate would be appreciated.

@negprof you can use 'export const revalidate = 60' on page/layout layer

@negprof you can use 'export const revalidate = 3600' on page/layout layer

I wrote something like this, need to test it on vercel:
`export async function fetchData() {
let cacheParams;
let preview = process.env.SB_SSR;
let sbParams = { version: preview };
if (preview === 'published')   {
    cacheParams = {
        cache: 'force-cache',
        next: { revalidate: 720 }
    }
}

if (preview === 'draft')   {
    cacheParams = {
        cache: 'no-cache',
        next: { revalidate: 0 }
    }
}

const storyblokApi = getStoryblokApi();
return storyblokApi.get(`cdn/stories/home`, sbParams, cacheParams);

}`

@negprof you can use 'export const revalidate = 3600' on page/layout layer

@negprof to extra clarify - your approach looks good generally. You have the extra layer of the Next.js cache, and using the no-cache and revalidate: 0 in draft, but activating it in production is definitely a great practice 👍
We're going to work on more in-depth docs for "caching" in general, as we know it can be a bit confusing as there are multiple layers and approaches. Also @edodusi just released the v4 of this SDK with solid foundations for RSC, but rest assured that proper Docs will follow soon

@negprof to extra clarify - your approach looks good generally. You have the extra layer of the Next.js cache, and using the no-cache and revalidate: 0 in draft, but activating it in production is definitely a great practice 👍
We're going to work on more in-depth docs for "caching" in general, as we know it can be a bit confusing as there are multiple layers and approaches. Also @edodusi just released the v4 of this SDK with solid foundations for RSC, but rest assured that proper Docs will follow soon

hey @edodusi and @alexjoverm , I refactored our project from the custom call to your provided storyblokApi way. This time everything works fine including with the next cache. We already rocking 4.0 in production. Thank you!

I'm having the same problem as @negprof - and it is because we're using custom data fetching but removing our custom data fetching isn't an option as it would be a major rewrite.
I can't figure out why this would/should matter, as it didn't before. Is there anything I can try to debug/resolve the issue besides being forced to adopt apiPlugin?

@negprof I'm glad to read this! If you have any other issue please open a new one here, we will be ready to discuss and investigate!
@brightonmike I think your issue deserves a bit more investigation on our side, would you mind opening a new issue with some code snippets and steps for reproduction? We will try to figure out the best solution, if we can improve the SDK we will totally release a new version. Thank you!

@negprof I'm glad to read this! If you have any other issue please open a new one here, we will be ready to discuss and investigate!
@brightonmike I think your issue deserves a bit more investigation on our side, would you mind opening a new issue with some code snippets and steps for reproduction? We will try to figure out the best solution, if we can improve the SDK we will totally release a new version. Thank you!

I've very quickly thrown together a crude representation here: https://codesandbox.io/p/devbox/wl76rz
If you uncomment line 74 it works, but this is strange as we're effectively needing to run the method twice.
We use GraphQL because many of our projects are complex and it's crucial to be able to only retrieve the data we need.

@brightonmike I see your code, that brings to my attention another topic (highlighted also by @negprof): the need to use the SDK to bootstrap the Storyblok client and then the flexibility to call custom REST or GraphQL APIs, like you did.
I will investigate the best way to extend the JS Client to allow custom calls using the same instance, that should solve your issues. In the meantime, I think the quicker workaround is adding getStoryblokApi() before every API call (like you did in line 74 - there is a singleton so it should not duplicate instances).
I will keep you posted, for the moment thanks for reporting this.

@edodusi I am trying to follow the updated instructions in the readme for Nextjs with app router and full RSC but it seems like StoryblokBridgeLoader is no longer exported by @storyblok/react/rsc. Is there a different component that I should be using there?

Any news on this one lol? How can you do release and produce this kind of regression.

Thank you @edodusi I am following the updated instructions now, not sure how I got to that fork. Using the updated instructions, I am seeing "Component {component name} does not exist" in my server for almost all of my page types and blank pages in my browser. I believe I am doing everything correctly per the instructions. Would you be able to look at https://github.com/esilver-automox/storyblok-react-test and tell me what I'm doing wrong?

@esilver-automox this is most likely because you are using custom fetch calls instead of the method provided by the SDK (like .get())
Do you have any specific reason why you are using custom fetch calls?

@esilver-automox this is most likely because you are using custom fetch calls instead of the methods provided by the SDK (like .get())
Do you have any specific reason why you are using custom fetch calls?

because with two spaces in my project I was originally getting a lot of unreasonable 404s. I think the .get() method was getting confused with the two storyblok inits I had in the project.

@esilver-automox it could have been. Have you also tried with v4 and the two spaces, but using only the .get() method?

@edodusi I have tried with v4 and using only the .get() method, and for one of my spaces most pages return 404

@esilver-automox seems to me that this issue cannot be solved in our current SDK, which is designed to work with a single space. The most reliable solution would be to work with a custom approach, fetching directly from the API.
Do you have a specific reason why you need to use two spaces?

@edodusi we are using two spaces because each space has a distinct set of content editors and we didn't want that to overlap

@esilver-automox thank you, I can now understand your challenge, but I believe your case is quite uncommon. Our SDKs are designed to work with a single space, so in this scenario, I would recommend using custom roles and permissions in a single space.
Of course, you have the freedom to implement custom code to handle your case if you would like. However, I think at least for the moment, we cannot work to implement this feature in the SDK. If things change, we will surely let everybody know.


Feature Request: Support Multiple Values Files

Hello!
Is it possible to pass multiple values files?
for instance if I have a chart with multiple values files for different environments, is there a way to use readme-generator to add all of them into my README?
an example:
values.prod.yaml:
## @section general
## @param user username for app
user: this

## @section production
## @param ca_type ca type
ca_type: acme

values.staging.yaml:
## @section general
## @param user username for app
user: this

## @section staging
## @param tls_provider ca type
ca_type: self_signed

If its not already possible, it would be very useful if You can add it. I'm using this tool for other stuff too like Ansible roles: defaults/main.yaml and vars/main.yaml. I believe this feature will add more use cases to this tool.

Hi @yaskinny, sorry for my very late response.
Using different values files is not possible right now and to be honest I am not sure how does it fit. Should all files use the same parameters section? What should be the behaviour if we have the same param with different  content for the same section in different files?
I think running readme-generator several times with different config files (to set the paramsSectionTitle for each file) could fit your particular needs.


When using this type schema tools always thinks that schema is not up-to-date

Then I create entity with you uuid type, for every use Doctrine schema tools generates this king of "update" SQL:
ALTER TABLE table ALTER id_table TYPE UUID;
ALTER TABLE table ALTER id_table DROP DEFAULT;

@marijn or @WouterSioen, would either of you mind taking a look at this? Thanks!

Yeah, this is a bug in Doctrine itself if I'm not mistaken.

I think it's this one: http://www.doctrine-project.org/jira/browse/DBAL-63

That looks like it was resolved in November 2010. Is it still an issue in Doctrine?

Not sure. What is the version of Doctrine you're on @jkuchar?

Normally, the SQL Comment hint should fix this issue. @jkuchar what kind of database are you using this on?

Guys! I‘m sorry, my mistake. I was trying to override doctrine guid type with uuid which went wrong.

glad you found it :+1:


TxBuilder and FormBuilder Lifecycle Methods can return data

Description
Usecase is to access data from the tx context outside of the form component ie.) help a redirect with data from the tx receipt or form value.
Details

return transaction receipt and form state into a lifecycle
do this on:

onPollSuccess

Might need to send ethersTx from here:
https://github.com/HausDAO/monorepo/blob/develop/libs/tx-builder/src/utils/txBuilderUtils.ts
and form values from here:
https://github.com/HausDAO/monorepo/blob/develop/libs/form-builder/src/components/FormBuilder.tsx
currently in formbuilder:
       onPollSuccess() {
            setStatus(StatusMsg.PollSuccess);
            setIsLoading(false);
            successToast({
              title: StatusMsg.PollSuccess,
              description: 'Transaction cycle complete.',
            });
            onSuccess?.();
          },

something like:
onSuccess?.({formValues, ethersTx});

Instead, I added the entire lifecycleFns that can be included on TX call. This is a breaking change. I've updated our monorepo app.


Docs/How to use: Setup error: Unhandled Rejection (ReferenceError): Home is not defined

Just running through the initial walk through: https://nextjs.org/docs#setup
Pretty sure the code for ./pages/index.js should be
export default Index as Home is not defined (or, the function name should be Home()?)

You are right, we'll fix this.

Fixed


[Idea] Filter nodes

When having a lot of markdown files with lots of links, things can get messy and the overview the graph adds declines.
More often than not, you're interested in the relations of the current file.
It would be cool to be able to filter node and only show nodes that are connected to the current file by N edges (where N is configurable in the graph view).
That way you can remove most clutter in the graph by setting N to e.g. 1.

I think this falls into a place where there is substantial overlap with issue requests.
maybe a project roadmap?
PR #50 appears to start this for #38 Adjacency Graph & for IS #7
IS #63 custom search subset is IS #47 link to Sections
IS #17 Color Coding
I came to "Filter Nodes" to check on searching unlinked .md files in the folder/tree; and, perused.
Interesting to consider a file/tree [hierarchy] view w/ linking representations.
hope this isn't too brief of a consolidation of thought; a bit of a tangent from current endeavor.

@deconDarts absolutely, many requests are now overlapping and or could use some broader vision.
#50 and #38 are more of implementation details.
#63, #47 and #48 indeed would be nice to handle them at once.
Not sure what and how to do it though, I will have a look around other issues and PRs that happened during my absence and will try to come up with a plan.


Support spack.config.cjs

Describe the bug
I put  "type": "module" in my package.json, and tried to use spack but it gives the first error message.
If I specify the --config option with spack it gives the second error message.
Error messages
1st error:
spack.config.js is treated as an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which declares all .js files in that package scope as ES modules.
Instead rename spack.config.js to end in .cjs,
change the requiring code to use dynamic import() which is available in all CommonJS modules,
or change "type": "module" to "type": "commonjs" in
 /mnt/data/projects/elemental-loader/pkg/package.json to treat all .js files as CommonJS (using .mjs for all ES modules instead).

2nd error:
/mnt/data/projects/elemental-loader/pkg/node_modules/.pnpm/@swc+core@1.2.133/node_modules/@swc/core/spack.js:55
                throw new Error(`Error occurred while loading config file at ${config}: ${e}`);
                      ^

Error: Error occurred while loading config file at spack.config.cjs: Error: Cannot find module 'spack.config.cjs'
Require stack:
- /mnt/data/projects/elemental-loader/pkg/node_modules/.pnpm/@swc+core<EMAIL_ADDRESS>
Input code
Multiple typescript files

Config
{
  "jsc": {
    "parser": {
      "syntax": "typescript",
      "dynamicImport": true,
      "functionBind": false,
      "decorators": true,
      "topLevelAwait": true,
      "importMeta": true
    },
    "target": "es5",
    "loose": false
  },
  "module": {
    "type": "es6",
    "strict": false,
    "strictMode": true,
    "lazy": false,
    "noInterop": false
  }
}

Playground link
No response
Expected behavior
The configuration file to be parsed and a bundled js file to be produced.
Actual behavior
Gives errors about spack config file having the .cjs extension even with the --config flag.
Version
1.2.133
Additional context
No response

This is due to we don't have full native esm support yet. https://github.com/swc-project/swc/discussions/3097#discussioncomment-1855849

The second error is because swc requires an absolute path when specifying a file with --config. As a workaround, you can do something like spack foo.ts --config "$PWD/spack.config.cjs"


Low memory version of single linkage clustering

Currently in scipy single linkage clustering on vector data starts by calling pdist to generate the full distance matrix, and then runs an MST calculation on that. While this is efficient it is very memory intensive for large datasets. It is relatively straightforward to to calculate the MST generating distances only as they are needed through the algorithm, allowing efficient computation without filling memory. It would be beneficial if such an option was available in scipy.
Reproducing code example:
import numpy as np
import scipy.cluster.hierarchy

data = np.random.normal(size=(64000,2))
tree = scipy.cluster.hierarchy.linkage(data, method='single')

Error message:
On my mac laptop this simply freezes the whole machine. On Linux a MemoryError with no traceback results. If the (lack of) error is not reproducible on your machine simply make data a larger array.
Scipy/Numpy/Python version information:
1.0.0 1.11.3 sys.version_info(major=3, minor=5, micro=4, releaselevel='final', serial=0)

This is both a defect (no MemoryError on macOS) and an enhancement request. Discussion with @lmcinnes at the SciPy'18 sprint - changing to his single linkage implementation seems feasible. Does require a Cython interface to the distance functions in spatial though (separate issue to be opened), so cannot easily be integrated right now.

Actually, it turned out that it's rather easy to combine scipy's qhull bindings with scipy's MST code to implement single-linkage Euclidean clustering in N log N time and linear memory. I have a proof of concept in https://github.com/Mortal/singlelinkage - it easily handles 64000 points in 2d per the reproduction of @lmcinnes. It uses the edges of the Delaunay triangulation to limit the size of the input to the MST algorithm.
I would be happy to implement this into the scipy library as a replacement for the current Euclidean single-linkage implementation. Any pointers where to start?

@Mortal it is first best to put your proposal to the mailing list to see if there is support for it

This looks like a good implementation. The biggest catches are that it only works for Euclidean distance, and since it relies on Delaunay triangulation it only works well for low dimensional data (Delaunay in high dimensions becomes expensive very quickly).
Since we ultimately just want the MST, and assuming we use Prims algorithm for that, it is easy enough to only generate the distances required for each step of Prims (i.e. distances from the last added point to all remaining points) which is linear in memory and quadratic in time complexity.
If we are only interested in low(ish) dimensional data then Dual-tree Boruvka will scale better than Delaunay triangulation with dimension, and assuming we use Ball-Trees from scipy, it should support a wide range of distances beyond just Euclidean. Unfortunately Dual-tree Boruvka is rather more complicated to implement than the solution using Delaunay triangulation. Let's see what the mailing list thinks of things ...


ale_lint_on_text_changed doesn't work

By default, ale should lint on text changed, but in my situation, it only checks when I open a file or save a file (:w). And after I fix a error, the hint of the error in that line doesn't disappear.

 Current Filetype: python
Available Linters: ['flake8', 'mypy', 'prospector', 'pycodestyle', 'pyflakes', 'pylint', 'pyls']
  Enabled Linters: ['pylint']
 Linter Variables:

let g:ale_python_pylint_executable = 'pylint'
let g:ale_python_pylint_options = ''
let g:ale_python_pylint_use_global = 0
 Global Variables:

let g:ale_echo_cursor = 1
let g:ale_echo_msg_error_str = 'Error'
let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
let g:ale_echo_msg_warning_str = 'Warning'
let g:ale_enabled = 1
let g:ale_fix_on_save = 1
let g:ale_fixers = {'python': ['autopep8']}
let g:ale_keep_list_window_open = 0
let g:ale_lint_delay = 200
let g:ale_lint_on_enter = 1
let g:ale_lint_on_save = 1
let g:ale_lint_on_text_changed = 'always'
let g:ale_linter_aliases = {}
let g:ale_linters = {'python': ['pylint']}
let g:ale_open_list = 0
let g:ale_set_highlights = 1
let g:ale_set_loclist = 1
let g:ale_set_quickfix = 0
let g:ale_set_signs = 1
let g:ale_sign_column_always = 0
let g:ale_sign_error = '>>'
let g:ale_sign_offset = 1000000
let g:ale_sign_warning = '--'
let g:ale_statusline_format = ['%d error(s)', '%d warning(s)', 'OK']
let g:ale_warn_about_trailing_whitespace = 1
  Command History:

pylint doesn't run when text is changed, because it can't. Look for the !! markers in the README and the note.

Get it. Thanks for the reply.


Are there any samples??

Are there any samples?? :)

There are no open projects using this package, sorry.
As you can see, it's last update was almost 2 years ago.
I'd recommend you to choose something more fresh or be ready to dive into sources )


About APK Call Graph

when i use the command
androguard cg sample_apk.apk
to create a call graph from an apk, it gives a .gml file
and i notice that some method's name is masked with letter a/b/c in the .gml file
such as <analysis.MethodAnalysis Lt;->a(Ljava/lang/String; I)Z [access_flags=private static] @ 0x1c7c4>
there are 't' and 'a' in the node
i wonder how to get rid of such things
or what can i do to prevent this situation?

Are you using the pypi version?

yes exactly---- Replied Message @.>Date05/12/2023 16:19 @.><EMAIL_ADDRESS>[androguard/androguard] About APK Call Graph (Issue #933)
Are you using the pypi version?
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: @.>
[
{
@.": "http://schema.org",
@.": "EmailMessage",
"potentialAction": {
@.": "ViewAction",
"target": "https://github.com/androguard/androguard/issues/933#issuecomment-1545363973",
"url": "https://github.com/androguard/androguard/issues/933#issuecomment-1545363973",
"name": "View Issue"
},
"description": "View this Issue on GitHub",
"publisher": {
@.***": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
}
]

Are you using the pypi version?

yes
so what version should i use ?
thanks

@Rook1eHan the apk was most probably obfuscated and it resulted to this. This is often the case with obfuscated apks


Specify MAX_NEW_TOKENS for ktransformers server

max_new_tokens = 1000 by default, and this can be specified in ktransformers.local_chat through --max_new_tokens, but not the server.
Please add the --max_new_tokens option to the ktransformers server so we can specify longer output context lengths, and add more generation options (like input context, etc).

Apologies for the inconvenience. If you’re building from source, you can modify the max_new_tokens parameter in ktransformers/server/backend/args.py. We will include this update in the next Docker release.

I just encountered this limitation. It would be even better if the REST API honored the maximum context length and maximum number of generation tokens.


Dynamically Adjusting Spam Blocker

As the memory pool fills up to more than one
block height the limitfreerelay and minrelaytxfee
are dynamically adjusted to gradually choke off low fee spam.
The minrelaytxfee is used as an upper bounds and is gradually increased from zero to the minrelaytxfee value as the choking is invoked.  limitfreerelay is also gradually choked off but will not go below 5.
If/when the spamming ends and the memory pool begins to fall in size the choke is also gradually removed.
Spam transaction are never accepted into the memory pool and therefore not
relayed stopping the spam from traversing the network, saving CPU , memory and bandwidth.
Currently it will reach maximum choke after a 3 block height in the memory pool but even then
some free transactions will still get through.
Awaiting comments...

I really like this concept. I want to keep substandard txfee transactions in my mempool. I want to give good actors a chance to participate in the network. It's up to the miners to decide at which fee the market clears. "spam" attacks from bad actors seem pretty easy to detect, through the abnormal increase in mempool size. This obviously still drops good actors, but a much better start than manually adjusting minrelay up and down.  Unfortunately, I have a feeling a majority of the nodes that raised their minrealy will probably now leave them there indefinitely which prevents good actors from participating.

You call it "spam" but all I see is "low fee" as what you are blocking.
A user sending a valid low fee transaction should not be having problems getting his transaction accepted just because the network is busy.
I feel this approach misses the advantage of distributed computing where thousands of nodes each have a part of the pool.  It assumes there is only one pool and we need to protect it.  But thats not how it works. The actual capacity of the bitcoin network for unconfirmed transactions is many many times one block.
The goal should be to avoid losing transactions, not to block ones that you programatically think is "spam".

The current solution, and the improvement Jonathan is working on, for mempool eviction solves this problem in a proper distributed computing (i.e. massive redundancy) way that scales much better and doesn't discriminate.

On 09/10/2015 2:15 PM, TomZ wrote:

You call it "spam" but all I see is "low fee" as what you are blocking.

I think that all this code is doing is automating those two features
that are already in the code.  With the benefit that it "almost"
completely stops the movement of spam (or low fee) transactions through
the network.  I don't see how any spammer would bother making the
attempt...there is nowhere for their transactions to go.

A user sending a valid low fee transaction should not be having
problems getting his transaction accepted just because the network is
busy.

As far as how many blocks height the mempool can be, that is easily
configurable.  I made it purposly aggressive to test it out, but we
could easily leave 10 or 20 blocks full.

I feel this approach misses the advantage of distributed computing
where thousands of nodes each have a part of the pool. It assumes
there is only one pool and we need to protect it. But thats not how it
works. The actual capacity of the bitcoin network for unconfirmed
transactions is many many times one block.

I think if everynode used this approach we wouldn't have any spammers to
deal with and wouldn't have to worry about what gets in out of the mempool.

The goal should be to avoid losing transactions, not to block ones
that you programatically think is "spam".

Actually I think more free transactions are able to get through with
this approach.  No low fee or free transactions are stopped at all until
we get a full memory pool (or wherever we decide the choke should
be)...whereas now in the current code, we have a default values  of
minrelaytxfee = 0.00001501
that can prevent free transactions from getting into the mempool before
it's even full.

—
Reply to this email directly or view it on GitHub
https://github.com/bitcoinxt/bitcoinxt/pull/84#issuecomment-146987784.

I added slightly better logging for anyone that wants to run this and
see it in action.  I've been running it for 4 days now and haven't seen
the memory pool got higher than 5MB.  Mostly it's cylcing around 2.5 to
4MB during this low fee spam attack.
Also, my intention here is not to replace the work that's already been
done with pruning the mempool but rather to create an additional first
hurdle that the spammers have to get over.  I see both approaches as
complimentary and necessary safeguards.
You said that " I have a feeling a majority of the nodes that raised
their minrealy will probably now leave them there indefinitely which
prevents good actors from participating"...however the way this code is
written is that the minrelay always stays at zero "until" the memory
pool is full, no matter what value has been set in the config file.
On 09/10/2015 1:22 PM, Ryan Romanchuk wrote:

I really like this concept. I /want/ to keep substandard txfee
transactions in my mempool. I want to give good actors a chance to
participate in the network. It's up to the miners to decide at which
fee the market clears. "spam" attacks from bad actors seem pretty easy
to detect, through the abnormal increase in mempool size. This
obviously still drops good actors, but a much better start than
manually adjusting minrelay up and down. Unfortunately, I have a
feeling a majority of the nodes that raised their minrealy will
probably now leave them there indefinitely which prevents good actors
from participating.
—
Reply to this email directly or view it on GitHub
https://github.com/bitcoinxt/bitcoinxt/pull/84#issuecomment-146977766.

I think design decisions like this are best debated on the mailing list rather than github. Github is best used for discussing specifics of code changes rather than the overarching design, IMO.
I'll reply on the list, please follow me there.

I'll close this out for now...Doesn't seem like much interest and it looks like the Core team is getting close to merging their own version.


Resolves #334 - Implementing Serializer::with_recursion_limit

I do not have enough samples to be sure, but you are right, I suspect that 255 might not be sufficient.

Is there any advantage to using a small integer? The value is stored right next to a Vec. The u8 will probably make the Deserializer bigger by a pointer size. So we can just use usize.

Fine by me.

Usize seems fine. But we will need to check benchmarks before merging because such a change would affect even users who do not change the recursion limit.

@dtolnay How do you check this? Do you have benchmarks at hand?

Changing u8 to usize:
                                DOM                STRUCT
======= serde_json ======= parse|stringify === parse|stringify ===
data/canada.json          13.1ms    12.5ms     4.7ms     7.7ms
data/citm_catalog.json     7.6ms     1.5ms     2.3ms     1.0ms
data/twitter.json          2.7ms     0.8ms     1.3ms     0.7ms

======= json-rust ======== parse|stringify === parse|stringify ===
data/canada.json           9.0ms     4.5ms
data/citm_catalog.json     4.7ms     1.0ms
data/twitter.json          1.6ms     0.6ms

==== rustc_serialize ===== parse|stringify === parse|stringify ===
data/canada.json          21.9ms    47.6ms    26.9ms    64.9ms
data/citm_catalog.json    17.0ms     4.2ms    21.4ms     2.9ms
data/twitter.json          7.8ms     1.7ms     9.9ms     1.6ms

which looks like a 0.1ms improvement on canada.json and citm_catalog.json.
So, I'd go ahead with usize, if that's ok with you, @dtolnay.

Yes let's go with usize. Thanks for taking care of that!

@dtolnay Ready when you are :)

I think the remaining things to figure out here are:

Naming convention for builder methods. In the standard library, typically with_ functions are constructors like Vec::with_capacity, and builder methods do not use a with_ prefix. Maybe fn recursion_limit would be more idiomatic.
Self by value or &mut. In https://github.com/rust-lang-nursery/api-guidelines/issues/81 we observed that self-by-value builders are almost never ideal. If this is one of the exceptions, how do we justify it? In your use case, would you always be invoking this on the same line as the Deserializer constructor?
How to reconcile with an eventual serde_json::Format. I would feel more comfortable if we make more progress on https://github.com/serde-rs/serde/issues/644 before merging this. That issue will involve some data structure that describes JSON as a format, including whether to use indentation when serializing and presumably the recursion limit for deserializing. It may turn out to be a better API to treat that data structure as a builder for serde_json::Deserializer, rather than having builder methods directly on Deserializer.

Naming conventions: recursion_limit is fine by me.
&mut: fine by me, too.
fair enough, I'll open a PR that just increases the default limit and wait until there is consensus on  serde-rs/serde#644

Could you check on the failing test case?

@dtolnay Ah, I hadn't seen that test. Fixed.

Of course, I realize that this since the default value of 1024 actually blows up Rust's stack, the patch may be problematic.

Yes, the whole point of the recursion limit is to limit the ability of untrusted JSON input to crash your program. 😿 Are you able to get by for now with a fork of serde_json that exposes this setting? I can try to get things moving on https://github.com/serde-rs/serde/issues/644 again.

Let's continue to track this in #334.


Unhandled error in lazy lookup plugin

Flexget Version: 2.1.2
Python Version: 2.7.6
Installation method: pip
OS and version: Ubuntu 14.04.4 LTS
Link to crash log: http://pastebin.com/tffgSmUQ
My config: https://github.com/effemmeffe/flexget

Have you reset the trakt db tables since we fixed #1241 and #1219?

No.
Done it now and launched an execution, will update when finished.

Problem solved by resetting the db, you can close.
@chillyrobot: flexget database reset-plugin api_trakt


Unbreak installs

Build should not be run on a postinstall hook but on prepublish.

👍 , sounds good.


[Query] empty tag shown on boomtable

Dear,
we are currently trying to setup a boomtable based on an influxdb.
the first row shown on the table is in fact an unexisting value (tag is empty). see pic below.
I checked the influx table : all data are present with the flag.
I'm maybe wrong the regex part on the pattern selection...?
thanks for your help!

you mean, you are not expecting that empty row??
Could you inspect query output using Query Inspector option in metics if the original query returns expected values? My wild guess is that your query returns some data without that tag value.

thanks for your quick reply.
Indeed... the query returns the data without that tag...strange...
but definitely on my side ;)
thanks a lot!

Thanks. Feel free to close if no more assistance required.

thanks!


subs errorThe operation couldn’t be completed. No APNS token specified before fetching FCM Token

Description
I get the following error when subscribing to version 10.16.0 Cloud messaging. This error does not occur in 10.11.0 and you can subscribe. Is there a problem in 10.16.0?
Reproducing the issue
I get the following error when subscribing to version 10.16.0 Cloud messaging. This error does not occur in 10.11.0 and you can subscribe. Is there a problem in 10.16.0?
Firebase SDK Version
10.16.0
Xcode Version
15
Installation Method
Swift Package Manager
Firebase Product(s)
Messaging
Targeted Platforms
iOS
Relevant Log Output
No response
If using Swift Package Manager, the project's Package.resolved

Expand Package.resolved snippet

Replace this line with the contents of your Package.resolved.

If using CocoaPods, the project's Podfile.lock

Expand Podfile.lock snippet

Replace this line with the contents of your Podfile.lock!

@H0neyHunter FCM has only had minor changes in the version range and none of them would explain the issue you're seeing.

It’s definitely version-related. There is no issue with version 10.11.0, and furthermore, there is no issue with versions lower than 10.16.0.

@H0neyHunter FCM has only had minor changes in the version range and none of them would explain the issue you're seeing.

It’s definitely version-related. There is no issue with version 10.11.0, and furthermore, there is no issue with versions lower than 10.16.0.

problem solution: FirebaseAppDelegateProxyEnabled true

i still this issue,
oh no erro to subscribe to topic Error Domain=com.google.fcm Code=505 "No APNS token specified before fetching FCM Token" UserInfo={NSLocalizedFailureReason=No APNS token specified before fetching FCM Token}  Firebase registration token: Optional("dZv17moOFkY7sjURK1RBdo:APA91bEGorkt69KE2X80rkqvXv-ZcR0BNErdwadhvmIo7_IMD4gpY8ELcIVbquZ5MPz4cR1kmpN5Yx_Wm1W8Zhj1AMTy4OG03OC7ad6FOO8PUvUyX-SOwPHOQQxRpUFdNRqb0s_gK2rm") 2023-11-24 08:57:30.282690-0500 Tailored[8823:3717372] 10.17.0 - [FirebaseMessaging][I-FCM002010] The subscription operation failed due to an error getting the FCM token: Error Domain=com.google.fcm Code=505 "No APNS token specified before fetching FCM Token" UserInfo={NSLocalizedFailureReason=No APNS token specified before fetching FCM Token}.
` final class AppDelegate: NSObject, UIApplicationDelegate {
let gcmMessageIDKey = "gcm.message_id"
lazy var synchronizationService = SynchronizationService()
let networkService = NetworkMonitorService.shared // Use the shared instance
var cancellables: Set = []
lazy var networkMonitor = NWPathMonitor()
var timer: Timer?
@Published var isConnected: Bool = false
//    private var backgroundTaskIdentifier: UIBackgroundTaskIdentifier = .invalid
// Set this property to control internet simulation
    var simulateNoInternet: Bool = true

func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil ) -> Bool {

    configureFirebase()
    setupNetworkMonitoring()

    return true
}
func registerForRemoteNotifications() {
       UIApplication.shared.registerForRemoteNotifications()
   }

func configureFirebase() {
    FirebaseApp.configure()

    // [START set_messaging_delegate]
       Messaging.messaging().delegate = self
       // [END set_messaging_delegate]
    // Register for remote notifications. This shows a permission dialog on first run, to
       // show the dialog at a more appropriate time move this registration accordingly.
       // [START register_for_notifications]

       UNUserNotificationCenter.current().delegate = self
    let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]

    UNUserNotificationCenter.current()
        .requestAuthorization(options: authOptions) { _, _ in

            }
    registerForRemoteNotifications()
    // [END register_for_notifications]

    Messaging.messaging().subscribe(toTopic: "tailored") { error in
        if let err = error {
            print("oh no erro to subscribe to topic \(err) ")
        } else {
            print("Subscribed to tailored topic")
        }

    }
}

func setupNetworkMonitoring() {
       networkService.$isConnected
           .sink { [weak self] isConnected in
               self?.handleNetworkStatusChange(isConnected)
           }
           .store(in: &cancellables)
   }

   func handleNetworkStatusChange(_ isConnected: Bool) {
       print("Network status updated: \(isConnected ? "Connected" : "Disconnected")")
       if isConnected {
           BackEndFirebaseService.backgroundSync()
           self.synchronizationService.synchronizeWithFirebase()
       }
   }

func application(_ application: UIApplication,
                 didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
  // If you are receiving a notification message while your app is in the background,
  // this callback will not be fired till the user taps on the notification launching the application.
  // TODO: Handle data of notification

  // With swizzling disabled you must let Messaging know about the message, for Analytics
  // Messaging.messaging().appDidReceiveMessage(userInfo)

  // Print message ID.
  if let messageID = userInfo[gcmMessageIDKey] {
    print("Message ID: \(messageID)")
  }

  // Print full message.
  print(userInfo)
}

// [START receive_message]
func application(_ application: UIApplication,
                 didReceiveRemoteNotification userInfo: [AnyHashable: Any]) async
  -> UIBackgroundFetchResult {
  // If you are receiving a notification message while your app is in the background,
  // this callback will not be fired till the user taps on the notification launching the application.
  // TODO: Handle data of notification

  // With swizzling disabled you must let Messaging know about the message, for Analytics
  // Messaging.messaging().appDidReceiveMessage(userInfo)

  // Print message ID.
  if let messageID = userInfo[gcmMessageIDKey] {
    print("Message ID: \(messageID)")
  }

  // Print full message.
  print(userInfo)

  return UIBackgroundFetchResult.newData
}

// [END receive_message]

func application(_ application: UIApplication,
                   didFailToRegisterForRemoteNotificationsWithError error: Error) {
    print("Unable to register for remote notifications: \(error.localizedDescription)")
  }

  // This function is added here only for debugging purposes, and can be removed if swizzling is enabled.
  // If swizzling is disabled then this function must be implemented so that the APNs token can be paired to
  // the FCM registration token.
  func application(_ application: UIApplication,
                   didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    print("APNs token retrieved: \(deviceToken)")

    // With swizzling disabled you must set the APNs token here.
    // Messaging.messaging().apnsToken = deviceToken
  }

func fetchFCMToken() {
    Messaging.messaging().token { (token, error) in
        if let error = error {
            print("Error fetching FCM token: \(error.localizedDescription)")
        } else if let token = token {
            print("FCM token: \(token)")
        }
    }
}

} `
` extension AppDelegate: UNUserNotificationCenterDelegate {
// Receive displayed notifications for iOS 10 devices.
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification) async
-> UNNotificationPresentationOptions {
let userInfo = notification.request.content.userInfo
// With swizzling disabled you must let Messaging know about the message, for Analytics

//     Messaging.messaging().appDidReceiveMessage(userInfo)
// ...

// Print full message.
    // Print message ID.
       if let messageID = userInfo[gcmMessageIDKey] {
         print("Message ID: \(messageID)")
       }
    print("whats this \(userInfo)")

// Change this to your preferred presentation option
    return [[.banner, .sound,.badge,.list]]

}
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse) async {
let userInfo = response.notification.request.content.userInfo
  // ...

  // With swizzling disabled you must let Messaging know about the message, for Analytics

//       Messaging.messaging().appDidReceiveMessage(userInfo)
print ("user info is : (userInfo)")
// Print full message.
if let messageID = userInfo[gcmMessageIDKey] {
print("Message ID: (messageID)")
}
}
}`
`extension AppDelegate: MessagingDelegate {
// [START refresh_token]
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
print("Firebase registration token: (String(describing: fcmToken))")
  let dataDict: [String: String] = ["token": fcmToken ?? ""]
  NotificationCenter.default.post(
    name: Notification.Name("FCMToken"),
    object: nil,
    userInfo: dataDict
  )
  // TODO: If necessary send token to application server.
  // Note: This callback is fired at each app startup and whenever a new token is generated.
}
// [END refresh_token]

func application(application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  Messaging.messaging().apnsToken = deviceToken
    print("did it register? \(deviceToken)")
}

}`
`@main
struct sastrerApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
@StateObject var sessionService = SessionServiceImpl()
@StateObject var launchScreenManager = LaunchScreenManager()
@StateObject var model = Model()
@State var text = ""

let persistenController = TailorPersistentController.shared

var body: some Scene {
    WindowGroup {
        ZStack {
            switch sessionService.state {
            case .loggedIn:
                if launchScreenManager.state != .completed {
                    LaunchScreenView()
                        .onAppear {
                            DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                                withAnimation(.easeOut(duration: 0.5)) {
                                    launchScreenManager.dismiss()
                                }
                            }
                        }
                } else {
                    ContentView(text: $text)
                }
            case .loggedOut:
                if launchScreenManager.state != .completed {
                    LaunchScreenView()
                        .onAppear {
                            DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                                withAnimation(.easeOut(duration: 0.5)) {
                                    launchScreenManager.dismiss()
                                }
                            }
                        }
                } else {
                    ModalView()
                }
            case .loading:
                LaunchScreenView()
            }
        }
        .environmentObject(sessionService)
        .environmentObject(model)
        .environmentObject(persistenController)
        .environmentObject(launchScreenManager)
    }
}

}`


Fix test_other_with_assets_new_style w/Sphinx 4.0

Make the test work with Sphinx 4.0.x. (It was skipped when testing with 4.0.2)
Fix the typo so that the regression file is actually found - it threw FileNotFoundError once the condition was corrected.

Good spot, thanks for fixing this!


v3.0 Release Schedule - Details

Goals
The UI will be rewritten in React + TypeScript + Apollo Client.
The backend will be rewritten with Apollo Server + TypeScript.
The data layer will use SQLite instead of Mongo to facilitate simpler deploys.
Progress
You can track progress on the master branch. The latest stable version will remain available on the v2.x branch.

UI

[x] skeleton
[x] channels
[x] devices
[x] push alerts
[x] takeovers

Requested Features

[ ] tags
[ ] variable page zoom
[ ] CORS access warning
[x] configuration UI
[ ] authentication
[ ] force clear page cache
[ ] variable channel timing

Backend

[x] skeleton
[x] device scanning
[x] GraphQL resolvers
[x] data layer interface
[x] X-Frame-Options proxy
[ ] rotation timer
[x] switch from mdns to multicast-dns
[x] patch protobuf vulnerability upstream (tracking in https://github.com/superhawk610/node-castv2/issues/1)

Data Layer

[x] skeleton
[x] sandbox mode w/ seeds

Misc

[ ] README rewrite
[x] common location for config/sqlite files (~/.multicast)

Nice one, I just noticed this branch when updating our local deployment of multicast.
Is there any chance you could migrate from mdns to multicast-dns for picking up the Chromecasts?
The latter is a pure JS solution and doesn't require any dependencies to be built.  I've been looking at running multicast in a Docker container (provided I can get the mDNS stuff passed through) and it would make building images much easier.

It would be almost poetic if I could get it to work 😁 I've never loved mdns since it causes that lengthy error message on startup and I always prefer pure JS solutions as well. I'll look into it and see how doable it will be, thanks!

Switched to multicast-dns in 0d0269488cc2bb741daeb60cf8ddde5feb34341e. Scans are a bit faster and goodbye annoying error message on startup! :tada:

Nice one! Can't wait for the new release!

Are there any plans to allow sending push alerts directly via HTTP POST or GET, and not just through the web page?

@redfive2012 The new version is switching to a GraphQL API, which will include a playground and allow you to query against it directly.

Hello, any news about v3 release?
I'm using v2 and just love it, really nice work!

Glad you're enjoying it :)
I'm away from home (and thus away from any Chromecasts for testing 😢) for the next couple weeks and I've just started a new job, so this project has remained on the backburner, but I am still actively developing, if not as quickly as I'd like.
My original goal for v3 was to rewrite the core codebase and implement every feature requested over v2's lifespan, but I think I may tie off a release for 3.0 without any new features (just way more stable!) and then save new features for minor 3.1+ releases.
I'll post on this thread when I have something usable worth testing for v3, hopefully soon!

Any status update on 3.0?  Still active? anything I can help with?

Hey all! Since my last post I've moved across the country and gotten settled into a new job, but I still haven't had the time I want to dedicate to getting this project into a good state to push an official release. I just merged the last major missing pieces for 3.0 to master, but there are definitely some bugs yet to be worked out and some unit tests yet to be written.
If you want to help get 3.0 in good shape for an official release, it would be super helpful if you could clone master and give it a shot on your local setup. I'm pushing an updated README in the next half hour or so to provide instructions on getting up and running, but it should be pretty straightforward. If you run into any issue or find any missing functionality, please open an issue and assign me. Thanks for your help!

I'm getting trouble trying to build this.  getting parcel not found.

Here's a couple troubleshooting tips, let me know if the issue persists
Make sure you're on the master branch
git clone git@github.com:superhawk610/multicast.git
cd multicast
git checkout master

Make sure yarn is installed
npm instal --global yarn

Make sure to install dependencies
cd client && yarn
cd ../server && yarn

Finally got around to testing this out, and the UI is great - tried it in Docker first, but couldn't get any devices to show up - probably need to mess around with the ports for mDNS etc.
Running it on my local (linux) PC it sees the device i'm testing with on my network, but when I try and connect to it I get client errored: Unsupported protocol version: undefined in the log and it doesn't show the screen.

I'm also getting an error, but I see no devices I'm getting: Oops! We
encountered an error. Network error: Failed to fetch, I filed it under
issues.
On Sat, Jun 13, 2020, 9:13 AM Jonty Sewell<EMAIL_ADDRESS>wrote:

Finally got around to testing this out, and the UI is great - tried it in
Docker first, but couldn't get any devices to show up - probably need to
mess around with the ports for mDNS etc.
Running it on my local (linux) PC it sees the device i'm testing with on
my network, but when I try and connect to it I get client errored:
Unsupported protocol version: undefined in the log and it doesn't show
the screen.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/superhawk610/multicast/issues/53#issuecomment-643622130,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABRPFSJUFTXBDCP5WPD6JYLRWN3QBANCNFSM4G37LEYQ
.


Kubeflow Slack invite

The official Kubeflow Slack invite has expired. Could someone please provide a new link? Thank you!

Done: https://github.com/kubeflow/website/pull/3210

Not sure if we should create a new issue or just comment on this one so I will do both. Consider closing #3226 once the invite link is updated.

Thank you for reporting! New link is https://join.slack.com/t/kubeflow/shared_invite/zt-17rs5ttas-bhCYiDwi1e25yGok_HZN2A, I will update website with new link later.


Object with polymorphic types

I think GSON used for serializa and deserializa the objects we want to save using Hawk, got a problem with the polymorphic types.
Using Jackson there is no problem
Is there a way to let us change GSON used for parsing with other like Jackson?
Thanks.

Parser interface is public for implementation, you can implements parser and create a jackson parser and set it
.setParser(new JacksonParser());

Let me know if it does work for you

I created an issue about parser in general. We can follow up in there. #210


runtime:getStackTrace should be isolated

Tracking Issue for https://github.com/ballerina-platform/ballerina-spec/issues/743

This is already isolated in current master https://github.com/ballerina-platform/ballerina-lang/blob/acdad3149a8f595d09ce170462ae75ea2cc0c800/langlib/lang.runtime/src/main/ballerina/runtime.bal#L65


rebased PR#308 to allow other databases in the format 'role@db' for mongodb_user

Rebased an squashed @sharon-tickell changes to allow the mongodb_user provider to accept roles for other databases in the format 'role@db' from pull request #308.
I was able to grant roles using the old () and the new format (@).

@bastelfreak The Travis jobs seem broken caused by ruby errors during bundle. Can you please have a look at them?

@pecharmin can you take a look at the failing spec tests?

I'll review the spec tests and provide an update.

hey, any news on this?

@achevalet we cannot merge this because the tests fail. If you want you can check the code and provides fixes for it.

ok, I will try to find spare time to fix it.

Recently I spent time on getting some of the acceptance tests working again. It'd be great if you could write an acceptance tests for this. That'd give me a lot more confidence to merge it.

Could you rebase this on master? looks like you included some changes from master as well.

@bastelfreak @ekohl rebased/squashed to master; CI tests succeeded; please review

@pecharmin Any chance of acceptance tests as well as the unit tests?

I'll second the request for acceptance tests.

Hi, can this get merged?

@craig it would be aweseome to get acceptance tests for this. Are you able to provide them?

Thanks to @thde who added acceptance tests for the new user management in https://github.com/voxpupuli/puppet-mongodb/pull/547
I would like to extend the acceptance tests by checking the assigned databases and permissions.

Ready for review; closes #308 and #547 when merged.

@ekohl Could you please have a review on this PR to get it upstream? Thanks :)

Fixes #460

Any news on this? Would highly appreciate it :)


WebApp:az webapp up

This is autogenerated. Please review and update as needed.
Describe the bug
Command Name
az webapp up
Errors:
('Connection aborted.', OSError("(10054, 'WSAECONNRESET')",))
Traceback (most recent call last):
pip-unpacked-wheel-ce49rpvu\urllib3\contrib\pyopenssl.py, ln 331, in _send_until_done
Temp\pip-unpacked-wheel-o9ys4f_j\OpenSSL\SSL.py, ln 1737, in send
Temp\pip-unpacked-wheel-o9ys4f_j\OpenSSL\SSL.py, ln 1639, in _raise_ssl_error
OpenSSL.SSL.SysCallError: (10054, 'WSAECONNRESET')

...

Temp\pip-unpacked-wheel-kwr6xmq7\requests\sessions.py, ln 646, in send
Temp\pip-unpacked-wheel-kwr6xmq7\requests\adapters.py, ln 498, in send
requests.exceptions.ConnectionError: ('Connection aborted.', OSError("(10054, 'WSAECONNRESET')",))

To Reproduce:
Steps to reproduce the behavior. Note that argument values have been redacted, as they may contain sensitive information.

Put any pre-requisite steps here...
az webapp up --name {} --sku {} --resource-group {}

Expected Behavior
Environment Summary
Windows-10-10.0.18362-SP0
Python 3.6.8
Installer: MSI

azure-cli 2.18.0 *

Extensions:
hack 0.4.3

Additional Context

route to appropriate team

@MansiLad I am unable to repro this issue. Please retry this with CLI version 2.22.0 . If you still face the issue  share -debug logs

closing due to lack of response. Please file a new issue if this is still a problem.


Allow functions to return static params directly

Allow functions to return static params directly
Prevent splatting in flatten

Perfect, thank you!
Tests on nightly fail due to the upstream issue, but it's independent from this PR.


Shell Sort [CPP]

https://en.wikipedia.org/wiki/Shellsort

Please add related labels and assign me to this issue.


Another dependency resolution bug

I found another dependency resolution bug in conda-build, which is related to https://github.com/conda/conda-build/pull/291, but I think harder to fix.
The issue can be seen on L2676-L2676 of the first travis build, where you start seeing py3 to build the dependencies properly. I can reproduce this issue locally. The problem is that we're trying to build the py33 mdtraj package. It depends on scripttest, of which a py27 version has been built, but not a py33 version. So ideally, before contining  with the py33 mdtraj build, it should build scripttest.
But the mechanism that conda-build uses to do this is actually quite brittle, and it fails. Basically, because of the existance of the scripttest py27 package, the SAT solver fails. This gives a different error message than when the py27 package doesn't exist. conda-build tries to explicitly parse the error message, but since it's different, it doesn't work.

IMO, unfortunately, the issue is not trivial to resolve. Really, the right way to do it is to build the packages in topological order.

Fixed by #91


Unreal Engine updates when?

Dear Caio,
Everyone has been enjoying using your plugin, even going beyond 4.27. However, we would like you to FINALLY give us all updates for the plugin so we won't have a hassle in using it on newer versions of Unreal Engine. The sooner you can answer us if you can even hear us, the better.
Thank you for your time.
Yours Truly,
Herogon

Hi,
I am not working on the plug-in for a lot of time, I actually work on that
just as hobby, but if you want the source code, I think the repository link
is on the description of the plug-in in the store, the repository is
public. If you don't find the link you can tell me and send to you.
On Fri, May 31, 2024, 12:27 HerogonStudios @.***> wrote:

Dear Caio,
Everyone has been enjoying using your plugin, even going beyond 4.27.
However, we would like you to FINALLY give us all updates for the plugin so
we won't have a hassle in using it on newer versions of Unreal Engine. The
sooner you can answer us if you can even hear us, the better.
Thank you for your time.
Yours Truly,
Herogon
—
Reply to this email directly, view it on GitHub
https://github.com/caiofelipempe/UnrealEnginePluginDevelopment-4.27/issues/1,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AEA6TXHBSSSBZRRNZW7CZVLZFCJFVAVCNFSM6AAAAABITAQ7DOVHI2DSMVQWIX3LMV43ASLTON2WKOZSGMZDQMBZGE4TMNI
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

The link:
https://github.com/caiofelipempe/UnrealEnginePluginDevelopment-4.27
On Fri, May 31, 2024, 13:25 Felipe Moura @.***> wrote:

Hi,
I am not working on the plug-in for a lot of time, I actually work on that
just as hobby, but if you want the source code, I think the repository link
is on the description of the plug-in in the store, the repository is
public. If you don't find the link you can tell me and send to you.
On Fri, May 31, 2024, 12:27 HerogonStudios @.***>
wrote:

Dear Caio,
Everyone has been enjoying using your plugin, even going beyond 4.27.
However, we would like you to FINALLY give us all updates for the plugin so
we won't have a hassle in using it on newer versions of Unreal Engine. The
sooner you can answer us if you can even hear us, the better.
Thank you for your time.
Yours Truly,
Herogon
—
Reply to this email directly, view it on GitHub
https://github.com/caiofelipempe/UnrealEnginePluginDevelopment-4.27/issues/1,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AEA6TXHBSSSBZRRNZW7CZVLZFCJFVAVCNFSM6AAAAABITAQ7DOVHI2DSMVQWIX3LMV43ASLTON2WKOZSGMZDQMBZGE4TMNI
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***
com>


Hello World! This is My Introduction

https://rahmat-blog.netlify.app/p/hello-world/
Selamat datang di blog pribadiku

Good


Added query strings to search for spell levels, classes, and the school

This is based on an abandoned PR that I'm closing in favor of an issue.

[x] levels
[ ] classes
[x] school

I'm going to skip classes for now since you can get class spells with /api/classes/warlock/spells


Add WIP profile

This adds a (rough) attempt of a first profile. Thanks Tiago for all the help! There are some shortcuts here, particularly with certain graphemes like w and glottal stops (both would probably need separate language profiles). I'll continue to improve this (I'll most likely add a number of specific rules for certain words as per Tiago's suggestion), but I'm curious what you think.

I see quite a few consistency issues. E.g., - is obvioulsy a morpheme marker, so I'd write +, not just NULL, but also oo is u:, but ee is e e, this all needs more thorough checking, also specifically: what does h mean in the data, in combination with other sounds? So it is important to also bear in mind the systemic aspect of the sound system. If they use a systematic transcription, it is important to be also systematic in rendering it.

Thanks for the review and the comments. See my comment below concerning -; the authors regard this as a pronunciation unit (a 'lax' understanding of syllable?). It is not applied consistently throughout the data. ee was a mistake, h is very heterogeneously used throughout the data. Generally, the more towards the end of a word (or sometimes syllable), the more guttural it is. However, this can't be applied consistently for all the languages in question since they also differ quite a bit with respect to this. I would not think that the data was collected with a 'systematic transcription' in mind.

no, it means: superscript_glottalstop and k without space, this is the
feature "pre-glottalized" in CLTS.

Don't they present individual sound inventories in the data? And
pronunciation guidelines? What would also help is to look at existing
languages from later sources, to see how they are transcribed today?

Nobody can pronounce glottal stop k as a single segment, and these
languages do not seem to have tiny prefixes with sub-syllabic
representation, something like k- kə-, ka-, so my experience says:
go for single-sound units, not individual ones. And of course, looking
at cognates helps as well.

Don't they present individual sound inventories in the data? And pronunciation guidelines? What would also help is to look at existing languages from later sources, to see how they are transcribed today?

No, unfortunately, they only remark minor things with respect to the Salishan languages. I will do as you suggested and check modern transcriptions for these languages for which I can find some.

Nobody can pronounce glottal stop k as a single segment, and these languages do not seem to have tiny prefixes with sub-syllabic representation, something like k- kə-, ka-, so my experience says: go for single-sound units, not individual ones. And of course, looking at cognates helps as well.

Good point, thanks!


” The Biggest Star “: The default value of vx and vy needs for uniformity

Describe the bug
” The Biggest Star “: The default value of vx and vy needs for uniformity
Steps to reproduce the behavior

Navigate to https://arcade.makecode.com/--skillmap#star
Start last tutorial Here Comes Trouble
Go to step2, 4, 5 and observe the default value of vx and vy for block "set star to projectile from audience vx 0 vy -50"

Actual behavior
The default value of vx and vy needs for uniformity.
Step2: The default value is: vx: 50, vy:50
Step4: The default value is: vx: 0, vy:50
Step5: Content is to "replace -50", but default value of block is: vy: 50
Toolbox: The default value is: vx: 0, vy:-50
Expect behavior
The default value of vx and vy should be uniform
Screenshot

Additional context
1.OS: Windows11
2.arcade version: 1.12.30
3.Microsoft MakeCode version: 8.5.41

Thanks.  I've fixed the instructions and they'll be uploaded with my next PR


Feature/add toast notifications

Summary of Changes
Removed modal screens, added "calintamas/react-native-toast-message" and toast notifications upon QR scan or credential offer / proof request
Related Issues
https://github.com/sicpa-dlab/aries-mobile-agent-react-native/issues/20
Pull Request Checklist
This is just a reminder about the most common mistakes. Please make sure that you tick all appropriate boxes. But please read our contribution guide at least once; it will save you a few review cycles!
If an item doesn't apply to your pull request, check it anyway to make it apparent that there's nothing to do.

[x] All commits contain a DCO Signed-off-by line (we use the DCO GitHub app to enforce this).
[x] Updated LICENSE-3RD-PARTY.md for any added dependencies or vendored components.
[x] Run prettier: npm run style-format
[x] Updated documentation for changed code and new or modified features.

If you have any questions to any of the points above, just submit and ask! This checklist is here to help you, not to deter you from contributing!
PR template adapted from the Python attrs project.

Nice work, these look great!


Fixed typo.  "commute must" -> "must commute".

Those words don't commute.
Minor text edit, so not that big a deal.

Those words don't commute.

Lol! Thanks for the fix.


Upgrade issues from 8.2.0 to 8.4.0 (illegal_argument_exception)

A few questions before you begin:

Is this an issue related to the Serilog core project or one of the sinks or
community projects.
This issue list is intended for Serilog Elasticsearch Sink issues. If this issue relates to another sink or to the code project,
please log on the related repository.  Please use Gitter chat and Stack Overflow  for discussions and questions.

This is related to either Serilog.Formatting.Elasticsearch OR Serilog.Sinks.Elasticsearch
Does this issue relate to a new feature or an existing bug?

[X] Bug
[ ] New Feature

What version of Serilog.Sinks.Elasticsearch is affected?  Please list the related NuGet package.
8.4.0
Serilog.Sinks.Elasticsearch 8.4.0
Serilog.Formatting.Elasticsearch 8.4.0
What is the target framework and operating system? See target frameworks & net standard matrix.

[X] netCore 3.1
[ ] netCore 1.0
[ ] 4.7
[ ] 4.6.x
[ ] 4.5.x

Please describe the current behavior?
We upgraded our nuget packages from 8.2.0 to 8.4.0 and the seriloging to ES stopped working.
We now receive this message in our console:
2020-09-25T14:54:58.8381985Z Failed to store event with template 'XXXX' into Elasticsearch. Elasticsearch reports for index logstash-2020.09.25 the following: {"type":"illegal_argument_exception","reason":"Rejecting mapping update to [logstash-2020.09.25] as the final mapping would have more than 1 type: [_doc, logevent]"}
We have multiple services that utilize this logging setup and it works just fine with 8.2.0 but does not with 8.4.0.
No code changes on our side.  We are hitting a local Elasticsearch instance running on windows.
elasticsearch 7.9.2
Please describe the expected behavior?
I would expect it to continue logging to elastic search as it was with 8.2.0.
If the current behavior is a bug, please provide the steps to reproduce the issue and if possible a minimal demo of the problem
We have our logging configured through the appsettings.json file.
Using the configuration below, we can reproduce by just upgrading libraries from 8.2.0 to 8.4.0.  No changes otherwise.
"Serilog": {
"Using": [ "Serilog.Sinks.Console" ],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Information"
}
},
"WriteTo": [
{
"Name": "Elasticsearch",
"Args": {
"numberOfShards": 2,
"numberOfReplicas": 1,
"nodeUris": "http://host.docker.internal:9200",
"overwriteTemplate": true,
"detectElasticsearchVersion": true,
"autoRegisterTemplate": true,
"autoRegisterTemplateVersion": "ESv7",
"customFormatter": "Serilog.Formatting.Elasticsearch.ElasticsearchJsonFormatter, Serilog.Formatting.Elasticsearch"
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId", "WithExceptionDetails" ],
"Properties": {
"Application": "my-api"
}
}

@estateretailsolutions I'm sure that I introduced the bug here:
https://github.com/serilog/serilog-sinks-elasticsearch/pull/356/files#diff-cb61ceb2dfe8091b1abe76e3c275d6d0R73
The logic is reversed is should override the version if it's set, in our case it's using this builder that's setting the doctype to logevent
https://github.com/serilog/serilog-sinks-elasticsearch/blob/dev/src/Serilog.Sinks.Elasticsearch/LoggerConfigurationElasticSearchExtensions.cs#L154
A quick fix would be to set the type to _doc
    <add key="serilog:write-to:Elasticsearch.typeName" value="_doc" />

That said we should fix the issue above, I'll create a PR

Great thank you for the quick fix.  I ended up adding it to our appsettings.json and it worked fine.
"WriteTo": [
{
"Name": "Elasticsearch",
"Args": {
...
"typeName": "_doc"
}
}

I created a new 8.4.1 package that has this fix in it. Thanks for reporting the issue and @orjan thanks for fixing!


Support RedShift SUPER type

RedShift has a SUPER type, typically used to store JSON.
See https://docs.aws.amazon.com/redshift/latest/dg/r_SUPER_type.html
Currently connector-x panics in https://github.com/sfu-db/connector-x/blob/f1d4e5f985f107f4c1cd52a10f668e9ee0be182e/connectorx/src/sources/postgres/typesystem.rs#L103.

Having the same issue -

PanicException: not implemented: super

Is there a plan to support SUPER (JSON) type?


Remove bind ^I rl_complete for macos

Checklist

[ ] Closing issues: #issue
[X] Mark this if you consider it ready to merge
[ ] I've added tests (optional)
[ ] I wrote some documentation

Description
tab works now, can type b. (Sequoia 15.1). Reject if this breaks it on your mac.

In my case this makes  do nothing on macOS

in my case i got this:
$ python3 -c "import readline; print(readline.__doc__)"
Importing this module enables command line editing using libedit readline.

i think we can close this PR now, please confirm on master


Use NanoTime in more places

#4364 added the NanoTime util. This PR uses that in a few places that seem helpful.

I think everything here is technically correct.
However, I think the purpose of this class is to try to be more expressive, to be able to interact with time durations in a more natural high level way, rather than deal with the arithmetic and comparisons at a low level. I don't think the subtract and compareTo methods are helping at all, and might even make things worse because (at least for me) compareTo can be pretty opaque and I have to remind myself about how the operands relate to the sign.
A higher level utility method, like hasElapased(Duration) can be done more efficiently, so fewer Duration objects are needed to be constructed, and can make things much more readable. A reset() method could also be added to make it easy to reuse the timer.
Also, we don't need both OpTimer and NanoTime, and NanoTime could be renamed.

Converted this PR to draft for now. I think these suggestions are good and I can open up a new PR to incorporate them at somepoint.


gorm v2.0 Adaptation

gormbulk.BulkInsert(db, sliceValue, 3000)  can't use "gorm.io/gorm" db ???

Duplicate of #49 and #54. Gorm v2 already supports bulk update so no need for this package to work with Gorm v2.