feat: "Add conditions" modal

What

implemented a modal for selecting discount condition type

@kasperkristensen @pKorsholm @zakariaelas - I think this one is ready for merge since the features we discussed in the comments are out of scope for this PR and are being implemented in other PRs.


DHT: iterative find bugfixes and better logging

closest peer is only considered when already contacted and not known to be bad
don't add bad peers to active
discard peers that went bad from active
reset closest and previous closest if they go bad during search
fix sorting on search round
improved and unified some of value/node find debug logging into a common one

Coverage decreased (-0.2%) to 69.685% when pulling f2c823e1d453ecd11419c2bf93cb9ddf8ccb549c on dht_bug into cc829a7bf4683a9f5efeb76457e47f30afac2915 on master.


When you go to blueberry and ride in a vehicle and go to the bridge it gives you glossy effects

I hope you fix it because it's annoying

I found the bug and deleted it


Updating UI on routeChangeStart

Bug report
Describe the bug
I am sorry for being vague here, I don't fully understand this, and it's hard to create a minimal reproducible example. I tried asking this on spectrum chat but had difficulties formulating this clearly.
I want to update a UI as soon as routeChangeStart event happens, I tried to do this globally using redux state as well as locally in single component using local state.
What I noticed is this: When you navigating to the page for the first time, as in page is not yet cached, then there's a gap between next.js-route-change-to-render and (React tree reconciliation: Completed Root) events and this gap is an opportunity for Ui to be updated, which works well, however when you try to navigate to same page later, the gap between rendering and rendered is non existent, so any UI updates are blocked, and UI will be updated only after route change completed, below are some screenshots from performance tab where this is visible.
It's almost like it would be nice to have event that fires just before routeChangeStart to update UI.
Example of UI to be updated is menu tabs, to set active menu item
This is not noticable in small app though, but I wasn't able to pinpoint if there's anything we have in our app that is reacting to routeChange that could cause this.
To Reproduce
Steps to reproduce the behavior, please provide code snippets or a repository:

const MobileMenuTab = ({ tab, router }: IProps) => {
  const [newPathname, setPathname] = useState(router.pathname)
  useEffect(() => {
    const handleRouteChange = url => {
      setPathname(url);
      console.log('App is changing to: ', url)
    }

    Router.events.on('routeChangeStart', handleRouteChange)
    return () => {
      Router.events.off('routeChangeStart', handleRouteChange)
    }
  }, [])

  const isActiveTab = newPathname === tab.url;
  console.log(tab.url, isActiveTab)
  const { url, title, icon, iconActive, onClick } = tab;
  const styles = componentStyles(isActiveTab);
  const iconToUse = isActiveTab ? iconActive : icon;

  return (
    <Link href={url} as={url} passHref>
      <A style={styles.wrapper} onClick={() => {}} >
      <Box>
          <Box style={styles.iconWrap}>{iconToUse}</Box>
        </Box>
        <Box style={styles.title}>{title}</Box>
      </A>
    </Link>
  );
};

export default withRouter(MobileMenuTab);

Expected behavior
Ui should be updated as soon as routeChangeStart is fired
Screenshots
This is when you visit route for the first time in this session:

This is when you visit route any subsequent number of times:

System information

OS: macOS
Browser (if applies) Chrome latest
Version of Next.js: 9.0.4

Additional context
Add any other context about the problem here.

Anyone has any tips/ideas ? :( even when showing NProgress.start(); it doesn't appear immediately when routeChangeStart starts

Updating the UI on route transition out isn't really possible -- we immediately start rendering the new React tree.
You should be able to use Router.events.on('routeChangeStart', ...) to register an NProgress (sync) action though.
This will work more readily when React's concurrent mode is out, such that two trees can be rendered simultaneously.
tl;dr be sure your routeChangeStart handler is synchronous!

Thanks @Timer, will be waiting for react concurrent mode then


OGG File not loading

Describe your problem here.
So the engine can't load a specific ogg file I use, I'm pretty sure it is the ogg file itself since I tried other ones and they work just fine. Of the various comments the only thing I've heard about close enough is an "unsupported ogg file", it doesnt make sense and I really want to fix this.
AND NO, I didn't rename the file, I actually converted a mp4 to ogg with a program but this messes with me.

Are you modding a build from source or with Lua?
Lua
What is your build target?
Windows x64
Did you edit anything in this build? If so, mention or summarize your changes.
No response

upload the ogg

Describe your problem here.
So the engine can't load a specific ogg file I use, I'm pretty sure it is the ogg file itself since I tried other ones and they work just fine. Of the various comments the only thing I've heard about close enough is an "unsupported ogg file", it doesnt make sense and I really want to fix this.
AND NO, I didn't rename the file, I actually converted a mp4 to ogg with a program but this messes with me.

Are you modding a build from source or with Lua?
Lua
What is your build target?
Windows x64
Did you edit anything in this build? If so, mention or summarize your changes.
No response

I think it's just an unsupported ogg file, what I would do is record the audio and upload it to youtube or something, and then use 4k video downloader (not sponsoring) to download the vid as ogg and export as Vorbis not the other one.

Try listening to it. Will anything play?

Convert it again, most online converters should work

never though of that, but thank you

It's a pretty common issue I guess haxe is just really picky about the format??? Thankfully online tools seem to work

Iirc this can happen if your audio file's sample rate over 44.1KHz, you can check it by right clicking on the file and clicking properties and going to the details tab.


percent is unclear and its documentation is wrong

https://github.com/terkelg/math-toolbox/blob/master/src/percent.js

@param  {integer} number - The number to check.
It has no parameter {integer}
The error is here as well: https://terkelg.github.io/math-toolbox/#percent

https://github.com/terkelg/math-toolbox/blob/master/test/percent.test.js
it('Expect 125 of 100 to be 1', () =>
Isn't 125 125% of 100?
What does the function do?

Thanks for flagging the issue. Appreciate that, I'll look at it.
The function returns a percentage in a more code friendly way.
I find percentage is entered in the range 0-1 most of the time.
This is a function to convert and clamp a percentage to that range.
Thanks

A better name could be percentToDecimal. And then add a percent function too.

Probably percent01Clamped for current version? And percent01 separately? percentToDecimal doesn't address clamping and  percentToDecimalClamped is too long

I think percent01Clampedis a bit too long, since it's a function I use often. Maybe percent01 and percent01Unclamped. Maybe combine them into the same function and add clamping as a parameter.

Fixed in v1.12.0 b8c7153


Add dprint code formatter

The primary reason for choosing dprint was performance - check out the video at https://dprint.dev/overview/ to see just how fast format on save can be.
This PR adds a new rush fmt command that will run dprint fmt against the entire monorepo, but that's probably the slowest way to run dprint, since rush and node add a lot of unnecessary startup overhead.  In fact, on my machine running rush fmt is at least 10x slower than just running ./tools/build/node_modules/dprint/dprint fmt from the root of the repo.  In fact, dprint fmt was able format every file in the repo in under a second!
Either way, I recommend just setting up your editor of choice to run dprint fmt on save and never worry about formatting again.  I've added dprint as a recommended VSCode extension and setup format-on-save in the VSCode workspace settings, although you'll want to make sure editor.defaultFormatter is not set differently in your user settings as that will override the workspace.
As for the actual formatting, I've tried to configure dprint to match our existing formatting as much as possible - we can always choose more opinionated settings if folks are OK with more initial churn.  Let's get all the arguing about style rules out of our system now and not look back.
Still to do/open questions:

[ ] Run dprint check in CI
[ ] Do we want a dprint check pre-commit hook?
[ ] Add a .git-blame-ignore-revs file to hide the formatting from git blame.

Need to do that in a separate PR since this will be squashed.
Shouldn't we split the install/configure and actual formatting into two PRs if we're going to hide this from blame?

Have you checked yet to see if the dprint formatted code conflicts with any of our formatting-related lint rules?
Ideally we could remove all such rules and let the formatter worry about formatting and the linter worry about code.

This is blocked by https://github.com/swc-project/swc/issues/9688


Store msgs to permit access to other props in widgets

Description
Changes the vuex store to store messages instead of just payload.
This permits things  like {{ msg.topic }} in the template node.
NOTE: a lot of changes were necessary to achieve the msg binding so here is a demo flow for verification purposes
https://github.com/flowforge/flowforge-nr-dashboard/assets/44235289/8975d108-e551-4b58-88b0-9039f51edc70
[{"id":"9bce894162358cce","type":"ui-markdown","z":"fe471bfa726693b8","group":"c2d8732cdea594f6","name":"","order":0,"width":0,"height":0,"content":"# Markdown Content\n\nitem | desc | value\n---- | ---- | -----\n1    | msg.payload | {{ msg.payload }}    \n","x":290,"y":780,"wires":[[]]},{"id":"00daa95ffa128a89","type":"group","z":"fe471bfa726693b8","name":"Switch","style":{"label":true},"nodes":["4fd33051adf7f462","9eb0b8946929f64c","93b35cd496465d66","c250b0c288d99888"],"x":14,"y":599,"w":352,"h":142},{"id":"4fd33051adf7f462","type":"ui-switch","z":"fe471bfa726693b8","g":"00daa95ffa128a89","name":"","label":"switch","group":"cdf7cdd21bad0fcb","order":0,"width":"3","height":"1","passthru":true,"topic":"topic","topicType":"msg","style":"","className":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","x":270,"y":660,"wires":[["9eb0b8946929f64c"]]},{"id":"9eb0b8946929f64c","type":"debug","z":"fe471bfa726693b8","g":"00daa95ffa128a89","name":"switch","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":270,"y":700,"wires":[]},{"id":"93b35cd496465d66","type":"inject","z":"fe471bfa726693b8","g":"00daa95ffa128a89","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":110,"y":640,"wires":[["4fd33051adf7f462"]]},{"id":"c250b0c288d99888","type":"inject","z":"fe471bfa726693b8","g":"00daa95ffa128a89","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"false","payloadType":"bool","x":110,"y":680,"wires":[["4fd33051adf7f462"]]},{"id":"cdf7cdd21bad0fcb","type":"ui-group","name":"Group1","page":"7ce6b829c3c8af6f","width":"6","height":"1","order":"","disp":true},{"id":"7ce6b829c3c8af6f","type":"ui-page","name":"Page1","ui":"1aacf481afdc27d2","path":"/","layout":"grid","theme":"e4899b50e1678008"},{"id":"1aacf481afdc27d2","type":"ui-base","name":"UI","path":"/ui"},{"id":"e4899b50e1678008","type":"ui-theme","name":"light","colors":{"surface":"#ffffff","primary":"#0094ce","bgPage":"#eeeeee","groupBg":"#ffffff","groupOutline":"#cccccc"}},{"id":"f80f149eb2ed3f96","type":"group","z":"fe471bfa726693b8","name":"Chart + button","style":{"label":true},"nodes":["1cbafe1ccc49c810","b7cba2e9513ad6c6","d595c38062720d4e","79159c570194a3ec","b8a944ae09590362","0c17d8a6aff3ee57"],"x":24,"y":239,"w":542,"h":122},{"id":"1cbafe1ccc49c810","type":"random","z":"fe471bfa726693b8","g":"f80f149eb2ed3f96","name":"","low":"19.1","high":"25.5","inte":"false","property":"payload.x","x":320,"y":280,"wires":[["79159c570194a3ec"]]},{"id":"b7cba2e9513ad6c6","type":"inject","z":"fe471bfa726693b8","g":"f80f149eb2ed3f96","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"temperature","payload":"{}","payloadType":"json","x":140,"y":280,"wires":[["1cbafe1ccc49c810"]]},{"id":"d595c38062720d4e","type":"ui-button","z":"fe471bfa726693b8","g":"f80f149eb2ed3f96","group":"cdf7cdd21bad0fcb","name":"","label":"add point","order":0,"width":"2","height":"1","passthru":false,"tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"","payloadType":"date","topic":"add point","topicType":"str","x":140,"y":320,"wires":[["b8a944ae09590362","1cbafe1ccc49c810"]]},{"id":"79159c570194a3ec","type":"random","z":"fe471bfa726693b8","g":"f80f149eb2ed3f96","name":"","low":"1","high":"3","inte":"true","property":"payload.y","x":460,"y":280,"wires":[["0c17d8a6aff3ee57"]]},{"id":"b8a944ae09590362","type":"debug","z":"fe471bfa726693b8","g":"f80f149eb2ed3f96","name":"button","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":290,"y":320,"wires":[]},{"id":"0c17d8a6aff3ee57","type":"ui-chart","z":"fe471bfa726693b8","g":"f80f149eb2ed3f96","group":"cdf7cdd21bad0fcb","name":"","label":"chart","order":9007199254740991,"chartType":"scatter","xAxisType":"linear","width":"6","height":"2","x":490,"y":320,"wires":[[]]},{"id":"5246a4e8ee6215c3","type":"group","z":"fe471bfa726693b8","name":"Slider","style":{"label":true},"nodes":["1ad4bb6c632655d6","65cf4b057165608c","2c42e4310163b0c8","69760cd1e2a7aaf5"],"x":434,"y":599,"w":272,"h":202},{"id":"1ad4bb6c632655d6","type":"ui-slider","z":"fe471bfa726693b8","g":"5246a4e8ee6215c3","group":"cdf7cdd21bad0fcb","name":"","label":"slider","tooltip":"","order":0,"width":0,"height":0,"passthru":true,"outs":"all","topic":"topic","topicType":"msg","min":0,"max":10,"step":1,"x":590,"y":720,"wires":[["65cf4b057165608c"]]},{"id":"65cf4b057165608c","type":"debug","z":"fe471bfa726693b8","g":"5246a4e8ee6215c3","name":"slider","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":610,"y":760,"wires":[]},{"id":"2c42e4310163b0c8","type":"inject","z":"fe471bfa726693b8","g":"5246a4e8ee6215c3","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":540,"y":640,"wires":[["69760cd1e2a7aaf5"]]},{"id":"69760cd1e2a7aaf5","type":"random","z":"fe471bfa726693b8","g":"5246a4e8ee6215c3","name":"","low":1,"high":10,"inte":"true","property":"payload","x":550,"y":680,"wires":[["1ad4bb6c632655d6"]]},{"id":"cbab5da27e09ebe8","type":"group","z":"fe471bfa726693b8","name":"Text","style":{"label":true},"nodes":["8cdf95d8f25a4030","14b0063a71f2a3c1","0062adb95b78074a","f2030beed4083021"],"x":14,"y":19,"w":252,"h":182},{"id":"8cdf95d8f25a4030","type":"ui-text","z":"fe471bfa726693b8","g":"cbab5da27e09ebe8","group":"cdf7cdd21bad0fcb","order":0,"width":"6","height":"1","name":"","label":"Time Stamp Text El","format":"{{msg.payload}}","layout":"row-spread","className":"","style":false,"font":"","fontSize":16,"color":"#000000","x":150,"y":160,"wires":[]},{"id":"14b0063a71f2a3c1","type":"mqtt in","z":"fe471bfa726693b8","g":"cbab5da27e09ebe8","name":"","topic":"machine/1/oee","qos":"2","datatype":"auto-detect","broker":"08d119cd7e80b635","nl":false,"rap":true,"rh":0,"inputs":0,"x":120,"y":60,"wires":[["f2030beed4083021"]]},{"id":"0062adb95b78074a","type":"inject","z":"fe471bfa726693b8","g":"cbab5da27e09ebe8","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":120,"y":100,"wires":[["f2030beed4083021"]]},{"id":"f2030beed4083021","type":"junction","z":"fe471bfa726693b8","g":"cbab5da27e09ebe8","x":240,"y":80,"wires":[["8cdf95d8f25a4030"]]},{"id":"08d119cd7e80b635","type":"mqtt-broker","d":true,"name":"AWS-MQTT3","broker":"a2fiytzgiloyh2-ats.iot.ap-northeast-1.amazonaws.com","port":"8883","tls":"66dba7889a4788e8","clientid":"","autoConnect":true,"usetls":true,"protocolVersion":"4","keepalive":"55","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"66dba7889a4788e8","type":"tls-config","name":"ADMIN-TLS","cert":"","key":"","ca":"","certname":"cd0ab18b227d65cb53eba230e2439e43177bb1f67c71a839fc1e6ef81fe82929-certificate.pem.crt.log","keyname":"cd0ab18b227d65cb53eba230e2439e43177bb1f67c71a839fc1e6ef81fe82929-private.pem.key.log","caname":"AmazonRootCA1.pem.log","servername":"","verifyservercert":true,"alpnprotocol":""},{"id":"8f9759d54bd7a0c4","type":"group","z":"fe471bfa726693b8","name":"Dropdown","style":{"label":true},"nodes":["03b49a63cf7f77fb","22ac432bc619ad09","b308f6d063da4d33","fb92befe718753f6","17bd1343190b7d0c","0356542853424efd"],"x":294,"y":19,"w":460,"h":204},{"id":"03b49a63cf7f77fb","type":"inject","z":"fe471bfa726693b8","g":"8f9759d54bd7a0c4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"select 1","payload":"\"1\"","payloadType":"json","x":460,"y":60,"wires":[["22ac432bc619ad09"]]},{"id":"22ac432bc619ad09","type":"ui-dropdown","z":"fe471bfa726693b8","g":"8f9759d54bd7a0c4","group":"cdf7cdd21bad0fcb","name":"","label":"Select Option:","tooltip":"","order":0,"width":0,"height":0,"passthru":true,"multiple":true,"options":[{"label":"one","value":"1","type":"str"},{"label":"two","value":"2","type":"str"}],"payload":"","topic":"topic","topicType":"msg","className":"","x":638,"y":122,"wires":[["0356542853424efd"]]},{"id":"b308f6d063da4d33","type":"inject","z":"fe471bfa726693b8","g":"8f9759d54bd7a0c4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"select 2","payload":"\"2\"","payloadType":"json","x":460,"y":100,"wires":[["22ac432bc619ad09"]]},{"id":"fb92befe718753f6","type":"inject","z":"fe471bfa726693b8","g":"8f9759d54bd7a0c4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"select both","payload":"[\"1\",\"2\"]","payloadType":"json","x":430,"y":140,"wires":[["22ac432bc619ad09"]]},{"id":"17bd1343190b7d0c","type":"inject","z":"fe471bfa726693b8","g":"8f9759d54bd7a0c4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"clear selection","payload":"[]","payloadType":"json","x":440,"y":180,"wires":[["22ac432bc619ad09"]]},{"id":"0356542853424efd","type":"debug","z":"fe471bfa726693b8","g":"8f9759d54bd7a0c4","name":"Dropdown","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":638,"y":182,"wires":[]},{"id":"63d015ce98088d01","type":"group","z":"fe471bfa726693b8","name":"Templates","style":{"label":true},"nodes":["c750dbbbbdce1627","462f92cdc150ff3f","2ce6f4e1082148a3","06a0980fca828707","e1c07bb9d9ae3c7b","3ed2fda197b36951","c6fa998f9faf8ba3","39b9947560fb38bd"],"x":14,"y":379,"w":692,"h":202},{"id":"c750dbbbbdce1627","type":"inject","z":"fe471bfa726693b8","g":"63d015ce98088d01","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"a timestamp","payload":"","payloadType":"date","x":160,"y":420,"wires":[["462f92cdc150ff3f"]]},{"id":"462f92cdc150ff3f","type":"ui-template","z":"fe471bfa726693b8","g":"63d015ce98088d01","group":"cdf7cdd21bad0fcb","name":"Template 1","order":0,"width":0,"height":0,"format":"\n<v-container class=\"pt-2\">\n\n    <v-card title=\"Template 1\" variant=\"tonal\" :subtitle=\"msg?.topic || ''\">\n        <v-card-text>\n            <v-chip prepend-icon=\"$vuetify\" variant=\"outlined\">\n                {{ msg?.payload }}\n            </v-chip>\n        </v-card-text>\n        \n        <v-card-actions>\n            <v-btn variant=\"outlined\" @click=\"send({payload:'abc'})\">send 'abc'</v-btn>\n        </v-card-actions>\n    </v-card>\n    \n</v-container>\n","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":true,"templateScope":"local","className":"","x":370,"y":500,"wires":[["39b9947560fb38bd"]]},{"id":"2ce6f4e1082148a3","type":"inject","z":"fe471bfa726693b8","g":"63d015ce98088d01","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"an object","payload":"{\"greeting\": \"hello\"}","payloadType":"json","x":180,"y":460,"wires":[["462f92cdc150ff3f"]]},{"id":"06a0980fca828707","type":"inject","z":"fe471bfa726693b8","g":"63d015ce98088d01","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"a number","payload":"123","payloadType":"num","x":130,"y":500,"wires":[["462f92cdc150ff3f"]]},{"id":"e1c07bb9d9ae3c7b","type":"inject","z":"fe471bfa726693b8","g":"63d015ce98088d01","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"a boolean","payload":"true","payloadType":"bool","x":130,"y":540,"wires":[["462f92cdc150ff3f"]]},{"id":"3ed2fda197b36951","type":"ui-template","z":"fe471bfa726693b8","g":"63d015ce98088d01","group":"cdf7cdd21bad0fcb","name":"Template 2","order":0,"width":0,"height":0,"format":"<v-container class=\"pt-1\">\n    <v-card title=\"Template 2\" variant=\"outlined\">\n        <v-card-text>\n            <v-form @submit.prevent=\"submit\">\n                <legend>Enter your name</legend>\n                <v-text-field label=\"First\" name=\"first\" />\n                <v-text-field label=\"Last\" name=\"last\" />\n                <div class=\"d-flex justify-center py-1\">\n                    <v-btn class=\"py-2\" type=\"submit\">submit form</v-btn>\n                    <v-btn class=\"py-2\" @click=\"send({payload:123})\">send 123</v-btn>\n                </div>\n            </v-form>\n        </v-card-text>\n    </v-card>\n</v-container>\n","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":true,"templateScope":"local","className":"","x":590,"y":460,"wires":[["c6fa998f9faf8ba3"]]},{"id":"c6fa998f9faf8ba3","type":"debug","z":"fe471bfa726693b8","g":"63d015ce98088d01","name":"Template 2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":590,"y":500,"wires":[]},{"id":"39b9947560fb38bd","type":"debug","z":"fe471bfa726693b8","g":"63d015ce98088d01","name":"Template 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":370,"y":540,"wires":[]},{"id":"c2d8732cdea594f6","type":"ui-group","name":"Group 2","page":"7ce6b829c3c8af6f","width":"6","height":"1","order":"","disp":true}]

Related Issue(s)
Part of #51
Checklist

[x] I have read the contribution guidelines
[ ] Suitable unit/system level tests have been added and they pass
[ ] Documentation has been updated

[ ] Upgrade instructions
[ ] Configuration details
[ ] Concepts

[ ] Changes flowforge.yml?

[ ] Issue/PR raised on flowforge/helm to update ConfigMap Template
[ ] Issue/PR raised on flowforge/CloudProject to update values for Staging/Production

Labels

[ ] Backport needed? -> add the backport label
[ ] Includes a DB migration? -> add the area:migration label

issue #102 discovered while working on this

so good Steve - so good


Add location info of AssetEntity.

During the writing process, fixed a save asset bug on androidQ devices,

Because location needs to get the original file in androidQ,
Therefore, the method of obtaining the original file in iOS has also been completed.


Feature/upload queue query filters

Changes

Changes response of findByStatus function in casesModel.js
Replaces findByStatus with two functions: findByStatusUser & findByStatusAll
findByStatusUser used to get case upload queue data for users
findByStatusAll used to get all pending cases for admins to review
Corresponding endpoints written to call each function

Clearly document the motivation and what changed

[x] a clear rationale for the feature (user story)
[ ] a screen shot showing either the intended state or completed state of the feature
[x] additional context about changes made in the PR

Atomic, well named commits

[x] name is specfic to feature changes or additions
[x] commits have descriptive messages regarding what changed in the code

Appropriately scoped

[x] focused on a single problem
[x] small enough/ easy to review

Adequately reviewed

[ ] sent to multiple reviewers
[ ] reviewed by at least two people
[ ] cross team review if necessary
[ ] ensure there is at least one piece of feedback from each reviewer

Code is clear and maintainable

[x] consistently formatted

[x] has config files to enforce linting and formatting

[ ] NO LOGS OR PRINT STATEMENTS

[ ] code is idiomatic/best practice

[ ] No failing unit test

Looks good


Add Maven parameters

Characteristics

Issue Type: feature
Tool/Service/Component: botsing-1.0.2
Reporter: @xdevroey, @pderakhshanfar, @luandrea

Description
The Botsing Maven plugin shall have the following parameters:

[x] project_cp the project dependencies with a default value set to the Maven project classpath.
[x] crash_log the log file with the stack trace to consider.
[x] target_frame the target frame.

Other parameters from the default configuration file shall be:

[ ] population the size of the population that evolves during the search with a default value of 100
[ ] search_budget the search budget in seconds with a default value of 1800
[ ] global_timeout the global timeout in seconds, after which the execution stops if the search is stuck with a default value of 1800 (the timeout is only reached if the search does not improve after 1800 seconds)
[ ] test_dir the directory where the tests are generated with a default value of crashreproduction-tests
[ ] random_seed the seed used to initialize the random number generator. This value allows to have deterministic behavior and should be set when performing evaluations

For those parameters, the Botsing class uses a -Dproperty_name=value syntax (for instance, -Dpopulation=100). The Maven plugin shall follow the same syntax when calling the Botsing.parseCommandLine method.
Help on issue template
Preview to follow the link or open file .github/ISSUE_DOC.md

All this parameters has been added in botsing-maven 1.0.5-SNAPSHOT


87-White bar from footer removed

Adjusted to footer be always in the bottom...
Adjust ONE color to GlobalStyles
Remove responsiveness for later... very different in footer and header.

@rmc3408  Did you try to zoom in and zoom out? it is having weird results for me


Can't run example.

Following all of the steps from the README I arrive at the following result:
  File "/home/lyubentodorov/.local/lib/python3.9/site-packages/treeshaker/treeshaker.py", line 96, in process_module
    raise ImportError('could not import target module %s'
ImportError: could not import target module mypkg.target

I'm not much of a python guy, but the following works in the same virtual environment:
import mypkg
// OR
from mypkg import target

Otherwise this seems like an exceptionally useful package if it does what I think it does. What I want to do is this:
I have a small python script that drags in one smallish dependency. I want to threeshake my dependencies to reduce the size of my final dependency package (I pack them in a zip to use on a container with limited resource).

Thanks for trying out the tool!
At a high level, I think treeshaker could be a good fit for what you're trying to do. There is one caveat I should mention which is that if your dependencies include packages that use C extensions, treeshaker currently has no mechanisms to re-compile those (your treeshaken code can still depend on these C extension-containing dependencies via the requirements.txt file that treeshaker will generate, but you likely won't be able to treeshake those dependencies to make them smaller).
I'd be happy to help try to get to bottom of what's going wrong here. I couldn't reproduce the error you're seeing when I ran the commands in the demo section of the README:
git clone https://github.com/sclabs/treeshaker.git
cd treeshaker
# virtualenv venv  # to make sure I'm using a python3.9 venv, I changed this command to the line below
python3.9 -m venv venv
source venv/bin/activate
pip install . ./examples/mypkg ./examples/otherpkg ./examples/externaldep ./examples/otherdep
treeshaker --config examples/treeshaker.cfg

but I am hopeful that we can still figure this out.
I will preface this by saying that Python's dependency management and where Python looks for modules to import can get pretty complicated, so if there are questions or things that just don't make sense I'd be happy to try to explain.
Just in case these turn out to be useful:
After running the pip install step with the virtualenv active (installing both treeshaker and the target package), if I check what's in the virtualenv by running pip freeze I see:
(venv)$ pip freeze
altgraph==0.17
click==7.1.2
externaldep==0.0.1
fire==0.4.0
modulegraph==0.18
mypkg==0.0.1
otherdep==0.0.1
otherpkg==0.0.1
pip-tools==5.5.0
requirements-parser==0.2.0
six==1.15.0
termcolor==1.1.0
treeshaker==0.0.3

It might be worth running pip freeze just to confirm that treeshaker and mypkg are definitely in the same environment.
Another angle on this is you can confirm where Python is loading the treeshaker module from. If you run python from the repo root (basically what the README example assumes), Python should find treeshaker right there in the git checkout (because the current working directory is the first place Python looks for a package during import):
(venv)$ python
>>> from treeshaker import treeshaker
>>> treeshaker.__file__
'.../git/treeshaker/treeshaker/treeshaker.py'

If I try the same thing, but running python from a different directory (in this example I copy examples/ from the git repo to a different location and run python from there):
$ mkdir ../treeshaker-examples
$ cp -r examples ../treeshaker-examples/examples
$ cd ../treeshaker-examples
$ python3.9 -m venv venv
$ source venv/bin/activate
(venv)$ pip install treeshaker ./examples/mypkg ./examples/otherpkg ./examples/externaldep ./examples/otherdep
(venv)$ python
>>> from treeshaker import treeshaker
>>> treeshaker.__file__
'.../git/treeshaker-examples/venv/lib/python3.9/site-packages/treeshaker/treeshaker.py'

I'm just mentioning this because in your output I see that the treeshaker.py module file is being loaded from ~/.local/lib/python3.9/site-packages which might not be a virtualenv (unless you named your virtualenv .local).
Technically, we're invoking treeshaker by calling the treeshaker entry point executable script directly on the command line (rather than importing it from Python), so we can also check where this executable is (it should also be inside the virtualenv):
(venv)$ which treeshaker
.../git/treeshaker/venv/bin/treeshaker

This workflow does feel a bit weird: I'm basically recommending that users create a new virtual environment specifically for the purposes of treeshaking, into which both the treeshaking tool and the package we want to treeshake are installed together.
One other thing I can think of at the moment that might help us debug this: treeshaker depends on modulegraph to build a graph of dependencies between modules. If it turns out that treeshaker and mypkg really are in the same virtualenv, we can take a closer look at what exactly modulegraph is finding. For example, if I tell modulegraph to look for treeshaker and mypkg, it finds the __init__.py files of both of these packages in the virtualenv they are installed in:
(venv)$ python
>>> from modulegraph.find_modules import find_modules, parse_mf_results
>>> mg = find_modules(includes=('treeshaker', 'mypkg'))
>>> modules, extensions = parse_mf_results(mg)
>>> [module.filename for module in modules if 'treeshaker' in module.filename or 'mypkg' in module.filename]
['.../git/treeshaker-examples/venv/lib/python3.9/site-packages/mypkg/__init__.py', '.../git/treeshaker-examples/venv/lib/python3.9/site-packages/treeshaker/__init__.py']

Additionally, the first few lines of stdout I see when running the treeshaker step (which should be printed before you reach the line where you experience the crash) are:
(venv)$ treeshaker --config examples/treeshaker.cfg
parsed 20 requirements from requirements.txt
constructing module import graph
found 738 nodes in the module import graph

If you're seeing different numbers of nodes, etc. that could be a hint as to what modules modulegraph is finding.

Thanks for the quick response!
I keep forgetting about python's beautiful module system. Now removing my global treeshaker version and running the one in the venv:
$ which treeshaker
/home/lyubentodorov/Projects/treeshaker/venv/bin/treeshaker

and the output of treeshaker now:
$ treeshaker --config examples/treeshaker.cfg

parsed 20 requirements from requirements.txt
constructing module import graph
found 665 nodes in the module import graph
found 3 modules imported from target packages
found 2 modules imported from 1 external requirements

Now onto my situation:
$ tree -I venv
.
├── build_target
│   └── __init__.py
├── requirements.txt
├── treeshaker.cfg
└── validator
    ├── setup.py
    └── validator
        ├── __init__.py
        └── validate.py

3 directories, 6 files

I've made my own package (or at least attempted to), following the structure of your mypkg. It has an empty __init__.py and a setup.py. This is my requirements.txt:
attrs==20.3.0
jsonschema==3.2.0
openapi-spec-validator==0.2.9 # root dependency
pyrsistent==0.17.3
PyYAML==5.4.1
six==1.15.0

Now I do the following:
$ python3.9 -m venv venv
$ pip install -r requirements.txt
$ pip install --no-cache-dir ./validator  # another mistake was installing 'validator' instead of my own package
$ pip install treeshaker

My threeshaker.cfg is the following:
[targets]
validator.validate

[target]
requirements_file=requirements.txt

# I want all of my dependencies to be 'packed', to my understanding, maybe this doesn't make sense
target_packages=
    validator
    openapi_spec_validator
    attrs
    jsonschema
    openapi-spec-validator
    pyrsistent
    PyYAML
    six

add_init_py=True

readme=<outdir>.md

post_build_commands=
    ls
    echo "built output in <outdir>/"

[target:validator.validate]
outdir=build_target

I've noticed that treeshaker breaks when readme=<outdir>.md is missing.
And this is my script (from validator.validate):
import os, sys
from openapi_spec_validator import validate_spec
from openapi_spec_validator.loaders import ExtendedSafeLoader
# guessing treeshaker builds the graph from only these imports ^

def validate_wrapper():

    try:
        import yaml
    except ImportError:
        import pathlib
        p = pathlib.Path(__file__).parent.absolute()
        sys.path.insert(0, os.path.join(p, "yaml.zip"))
        import yaml # here the yaml dependency is loaded from a separate pre-existing zip

    spec_path = './default.yaml'
    if len(sys.argv) > 1:
        spec_path = str(sys.argv[1])

    def load_yaml(path):
        try:
            with open(path) as fh:
                return yaml.load(fh, Loader = ExtendedSafeLoader)
        except IOError as err:
            raise SystemExit(err)

    spec_yaml = load_yaml(spec_path)

    validate_spec(spec_yaml)

I've managed to produce a satisfyingly small output of 350K compared to 6.5M which I get by running pip install -t .... However I'm unsure if what I've done is really functional or how I can use the output I get.
Naively trying (running it as a script):
$ python build_target/validate.py ...

Traceback (most recent call last):
  File "/home/lyubentodorov/Projects/oapi_validator/package/build_target/validate.py", line 2, in <module>
    from .openapi_spec_validator import validate_spec
ImportError: attempted relative import with no known parent package

and then trying to import it as a module:
$ cd build_target
$ python
>>> from validator import validate
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/lyubentodorov/Projects/oapi_validator/package/venv/lib/python3.9/site-packages/validator/validate.py", line 2, in <module>
    from openapi_spec_validator import validate_spec
  File "/home/lyubentodorov/Projects/oapi_validator/package/build_target/openapi_spec_validator.py", line 2, in <module>
    from .shortcuts import (
ImportError: attempted relative import with no known parent package
>>>

It appears that it does indeed register validator as a package? but setting up the validate module fails. shortcuts.py exists in build_target.
To me it doesn't matter if I run my code as a script or import it as a module externally.
I'm kind of getting lost in python's module system.
My biggest mistakes here were not treating python's module namespacing properly.

Sorry to be so slow in getting back to this.
Just for testing, I made some minor changes to your validator/validate.py:
import sys

import yaml
from openapi_spec_validator import validate_spec
from openapi_spec_validator.loaders import ExtendedSafeLoader

def validate_wrapper():
    spec_path = "./default.yaml"
    if len(sys.argv) > 1:
        spec_path = str(sys.argv[1])

    def load_yaml(path):
        try:
            with open(path) as fh:
                return yaml.load(fh, Loader=ExtendedSafeLoader)
        except IOError as err:
            raise SystemExit(err)

    spec_yaml = load_yaml(spec_path)

    validate_spec(spec_yaml)

if __name__ == '__main__':
    validate_wrapper()

You might have some custom yaml package in a zipfile that you require for your specialized use case, but just to get off the ground (and so that I could try reproducing what you have since I don't have your yaml.zip) I used the implementation of yaml.load() provided by the PyYAML package (which is already listed in your dependencies).
I also added the line validator==0.0.1 (or whatever version you specified in validator's setup.py) to requirements.txt. The requirements.txt file used by treeshaker is expected to contain both target modules and dependencies.
Finally, I modified the target_packages option under the [target] section of treeshaker.cfg so that instead of listing PyYAML it lists yaml. Similarly, you don't need to list openapi-spec-validator, you only need openapi_spec_validator. This is quite confusing, but it is because some packages have a certain name that they are known by on the Python package index (PyYAML, openapi-spec-validator) but use a different name for the actual package (import yaml, import openapi_spec_validator). This is not explained in the treeshaker README, but the target_packages option is supposed to list the names of the actual packages, not the names they go by on the package index.
Running treeshaker after these changes creates the following script at build_target/validate.py:
import sys

import .yaml
from .openapi_spec_validator import validate_spec
from .loaders import ExtendedSafeLoader

def validate_wrapper():
    spec_path = "./default..yaml"
    if len(sys.argv) > 1:
        spec_path = str(sys.argv[1])

    def load_.yaml(path):
        try:
            with open(path) as fh:
                return .yaml.load(fh, Loader=ExtendedSafeLoader)
        except IOError as err:
            raise SystemExit(err)

    spec_.yaml = load_.yaml(spec_path)

    validate_spec(spec_.yaml)

if __name__ == '__main__':
    validate_wrapper()

Unfortunately, this contains syntax errors (like def load_.yaml(path):) which are due to treeshaker's import rewriting being way too shortsighted. treeshaker copies the yaml module to build_target/yaml.py and then attempts to rewrite imports that look like import yaml to import .yaml(turning them into a relative import pointing to build_target/yaml.py, a module in the same package as all the other copied files, ensuring that the import works even when the PyYAML package is not installed). treeshaker's current import rewriting logic simply replaces all occurrences of yaml with .yaml (by just doing str.replace() on the entire contents of the module's source code file), which is clearly not a good idea as shown by the mangled output above, because it replaces function names and other identifiers that contain "yaml".
There are at least three ways I can think of that I could use to improve the import rewriting:

Parse the AST of the module, change the names of the modules only in import statements, and then convert the edited AST back to code with a Python package like astor. Doing the rewriting at the AST level would allow us to rename yaml to .yaml only within import statements and direct references to the imported module, and not anywhere else in the file.
Rename the modules by manipulating sys.modules, a dict that maps module names as strings to imported modules. Basically I would need to add lines like sys.modules[old_name] = __import__(new_name) to the modules copied over by treeshaker. Existing import statements would then work without issues. There are some details to pay attention to here: the module loaded by __import__(new_name) may import other modules in turn, so I would need to make sure that those imported modules have keys set in sys.modules before any lines like import <old_name>. One solution to this could be to track the dependency tree (treeshaker already constructs this tree using modulegraph as part of its normal operation) and add sys.modules[old_name] = __import__(new_name) statements for all immediate children of each node on the dependency tree to the top of the module source file corresponding to that node.
Make treeshaker copy modules while retaining the nested folder structure of the package. Currently, treeshaker copies all modules into the destination folder with no nesting or subpackages of any kind. However, if a module like jsonschema.validators is in the dependency graph, we can copy it to build_target/jsonschema/validators.py and add``build_target/jsonschema/init.pyas well. Then, end users can addbuild_target/to theirsys.pathand an import statement likeimport jsonschema.validators` will work work without any rewriting.

(2) is probably easiest to implement relative to the logic already in treeshaker. In any case, I don't think there's a quick fix for this.

Thank you and sorry for wasting your time, I've fixed my problem by just shedding some python crates that come with python's default installation. I could open a PR to the README to add some information summarising my mistakes and misconseptions about this package.


Suggestion: In a transient simulation, based on the first time step, can I define a "box of interest"?

Hello!
In my simulations I often need to define a "box of interest", i.e. any particle which ends up outside this box will be removed from the simulation. I was wondering if there was a way to specify this using this package?
For example for a dam break simulation:

I would like any particle leaving the red box to leave the simulation.
I could properly do this using a package to find the bounding box, then a manual check each time step if any particles has left the domain.
I thought it might be of use for others as well, so that is why I suggest it :)
Kind regards

I would suggest implementing that internally in your package, for example creating a property for each particle that carries that information and skipping computations among particles that are outside the box in the mapped function.

Thank you for the feedback! 😊


Incorrect behaviour for triggering workflow with missing input

Expected behaviour

When triggering a workflow, if the required inputs of the workflow are missing, the action should throw an error.

Current behaviour

When triggering a workflow, if the required inputs of the workflow are missing, the action did not throw any error

Action version: 1.3.0

I'll look into this. This is true too, Bug: "message": "No ref found for: main" --> Should fail

Confirm that this fails. Copy and paste from a test pipeline. Closing:
curl: (22) The requested URL returned error: 422
api failed:
path: workflows/deploy.yml/dispatches
response: {
  "message": "No ref found for: fail",
  "documentation_url": "https://docs.github.com/rest/reference/actions#create-a-workflow-dispatch-event"
}


Add proper tagging functionality

Features added

Tags on Petition and ArchivedPetition
Radio button on the search form to specify what to search for
Filter search results by tags (only petitions for now)
Admin Site Settings (Admin::Site) page to manage allowed tags
Only allow tags on petitions that are in the site settings
Don't reload search parameters when filtering or selecting scope
Show correct count on scope select box for filtered petitions
Make tags case insensitive when searching. TAG 1 == tag 1. However display the original case for the user to select. Therefore if an admin sets an allowed tag to be HMRC, it will display as HMRC.

Features/Niceties not added (yet)

Filtering signature search results by tags. Thought this could be a separate ticket/PR.
Adding JS tags autocompletion instead of displaying all tags at once
Removing scopes with 0 results. Not sure if we want to do this?

Technical details

Introduce Taggable module to enable tag scopes on models that implement a tags column
Introduce an AdminTagsValidation module to validate tags against allowed tags in admin site settings.
Handle Signature searching on the Admin::SignaturesController
Simplify Admin::PetitionsController to pass search params straight through to Browseable module.
Simplify Admin::SearchController to pass params straight to Admin::PetitionsController or Admin::SignaturesController
Add TagFilter class to Browseable module in order to manage filtering of search results
Search and filtering order in Browseable is now search -> filter results -> add scope

Closing in favour of #608 where the intarray extension is use to store tag IDs.


fix : _SUCCESS is not a Parquet file (too small length: 0)

fix the read parquet problem when parquet file are multi partitions, the error is _SUCCESS is not a Parquet file (too small length: 0)

Looks good, thanks

Wow, you really reply to me, it's so surprising!
another thing, I want to know how to release the latest version, and update
the maven repo concurrently, thanks a lot!
Gary Frost<EMAIL_ADDRESS>于2020年11月4日周三 下午9:40写道：

Merged #391 https://github.com/51zero/eel-sdk/pull/391 into master.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/51zero/eel-sdk/pull/391#event-3957637890, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AFNW46XEPZ5M3WKLFPQ7WOLSOFKVNANCNFSM4TKA3T7Q
.

Releasing to mvn central is something I will need to do (it requires various access tokens).  I can look to complete a release soon if you require it.  Alternatively if you don't need the release on Maven central repo then you could just build locally and create a local artefact.

yes, I want use it now, could you please complete a release, thanks a lot !
Gary Frost<EMAIL_ADDRESS>于2020年11月5日周四 下午5:57写道：

Releasing to mvn central is something I will need to do (it requires
various access tokens). I can look to complete a release soon if you
require it. Alternatively if you don't need the release on Maven central
repo then you could just build locally and create a local artefact.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/51zero/eel-sdk/pull/391#issuecomment-722271409, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AFNW46UAIDQC25S33USQIPDSOJZHXANCNFSM4TKA3T7Q
.

hi, Gary Frost. there is something I consult you. I want to use parquet
function only, but when I add eel-core_2.11 dependency to my pom.xml file,
the compile jar size increase from 60M to 120M. Execute me, what can I do
to reduce the size?  thanks a lot !
在 2020年11月5日星期四，高雅喆 @.***> 写道：

yes, I want use it now, could you please complete a release, thanks a lot !
Gary Frost @.***> 于2020年11月5日周四 下午5:57写道：

Releasing to mvn central is something I will need to do (it requires
various access tokens). I can look to complete a release soon if you
require it. Alternatively if you don't need the release on Maven central
repo then you could just build locally and create a local artefact.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/51zero/eel-sdk/pull/391#issuecomment-722271409, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AFNW46UAIDQC25S33USQIPDSOJZHXANCNFSM4TKA3T7Q
.


Add version: Ombrelin.PlexRichPresence version 2.0.2-beta

Result: Installation Failed

Manifest
Add/Remove Programs

Name
PLEX Rich Presence
OBS Studio, Obsidian, Microsoft OneDrive

Version
2.0.2-beta
28.1.0, 1.0.0, 22.196.0918.0001

Publisher
Arsene Lapostolet
OBS Project, Obsidian, Microsoft Corporation

ProductCode

OBS Studio, bd400747-f0c1-5638-a859-982036102edf, OneDriveSetup.exe

Auto-updated by vedantmgoyal2009/winget-pkgs-automation in workflow run 3190
Microsoft Reviewers: Open in CodeFlow

@wingetbot run


What Is Working

Quick-reference "What Is Working?" documentation page.

@CedricGuillemet Yes, this is supposed to be a sort of less precise "quick reference" option complementary to more detailed enumerations like https://github.com/BabylonJS/ThePirateCove/issues/177. @bghgary has a vision for the docs, but he can describe it better than I can.

I incorporated this into the readme.


created freedompraise.json

Fixes Issue

Changes proposed

Check List (Check all the applicable boxes)

[ ] My code follows the code style of this project.
[ ] My change requires changes to the documentation.
[ ] I have updated the documentation accordingly.
[ ] All new and existing tests passed.
[ ] This PR does not contain plagiarized content.
[ ] The title of my pull request is a short description of the requested changes.

Screenshots

Note to reviewers

Hey @freedompraise, do you need any help in making the requested changes? Feel free to let us know. :)
You can use the command line to resolve merge conflicts following these steps.

Step 1: From your project repository, check out a new branch and test the changes.

git checkout -b freedompraise-main main
git pull https://github.com/freedompraise/LinkFree.git main

Step 2: Merge the changes and update on GitHub.

git checkout main
git merge --no-ff freedompraise-main
git push origin main

It looks like GitHub Actions are running in your fork, please disable these to avoid these generated files.
Also it is better to make changes in a branch, so I will close pull request, you can follow our quickstart guide here and create a new pull request https://linkfree.eddiehub.io/docs/quickstart


Add "Composer ready" milestone

Hmmm. I'm a bit inclined to pick drupal-project as the milestone. The composer templatge brought its innovations into the drupal namespace, along with some related work for drupal.org packaging.

Yeah we could put this in back with the introduction of drupal-composer/drupal-project. I feel like getting Composer in core was a major milestone, but my view is biased because I worked on that. 😄   Folks were managing sites with Composer using the third-party components successfully for years before 8.8.0 came out, though.
You could put in both dates, but if two dots is too many for Composer, then just the earlier date is fine.


Mysql docker performance

As measured when running a query inside the docker container to mysql we see a network latency of 0.281ms compared to 0.085ms on dedicated server.

Assigning to @wimvdputten. He's been testing out some changes that don't use a bind mound for the MySQL service but simply allocate it on the shared virtual disk, which greatly increases performance.
Downside is that MySQL files can not easily be included in local backups, but most of us exclude these from backups already anyway.


Wavelength batching within amplitudes_for_fields

Currently, the amplitudes_for_fields doesn't support wavelength batching. We add that functionality, along with a few additional tests for both single wavelength and multiwavelength cases.

(cc @mfschubert )


Google Plus Api 'Person' Class Bug

Hi there.
Google Plus API response value seems to have changed
Please check this part
Goole Plus API ->  /v1/people/me
{  ....   "emails": [     {       "value"<EMAIL_ADDRESS>      "type": "ACCOUNT"     }   ],  .... }
I think the name of 'type' has changed
account -> ACCOUNT

it is already updated in code:
#119
But we need to request a new release from team. Or you can build it locally

it is already updated in code:
#119
But we need to request a new release from team. Or you can build it locally

@iserb You can use the build from jitpack: https://jitpack.io/#spring-social/spring-social-google/1.1.3
Works for me!

it is already updated in code:
#119
But we need to request a new release from team. Or you can build it locally

@iserb You can use the build from jitpack: https://jitpack.io/#spring-social/spring-social-google/1.1.3
Works for me!

Thank you so much, looks like it works perfect!


Implement Proper Error Handling

Per the discussion in #3, simply using unwrap() on all Results and Options isn't good practice or very sustainable, in terms of code-debt.
Currently, our preferred error-handling system is to use our own Error struct by using match statements to manually unwrap values and wrap external errors in our custom Error type.
This results in overly verbose statements and (occaisionally) repeated code for error wrapping.
We can reduce the necessity of said unwrappings by replacing them with the try! macro.
This can be done by implementing the FromError trait for our custom error type.
Additonally, per the error docs, error messages should be handled by the Display trait.
As such, it is probably best to remove the desc field from our Error struct and handle error messages via an implementation of the Display trait.
However, in that scenario, our Error struct is then only a custom implementation of the standard Error trait described in the the error chaining RFC and later expanded upon in the error documentation above.
Taking this into consideration, it's probably best to replace our Error struct with an Error enum (as seen in libraries such as rustc-serialize).
This is in our best interest because it removes the redundant and unnecessary Error struct, allows for easier error message handling (by simply adding a string::String parameter to the enum values which require it), and for simpler internal error representation and generation.
Tasks

[ ] Replace all instances of unwrap in the code
[x] Implement FromError for error types used in conjunction with the try! macro
[x] Use try! macro where possible to avoid verbose match trees
[x] Replace Error struct with the ErrorKind enum

Work on this issue is being done on the error_handling branch.

Silly Github, I said "not close #15".

Closed by #24


Upgrade Animation Options to take start, end, and stop properties

I'm always wanting to animate an object hiding, and then remove it when the animation is complete, so it doesn't keep getting click events, etc. For example, lets say I create a layer with a hidden state:
var imageLayer = new Layer({
  x: 0,
  y: 0,
  width: 100,
  height: 100,
  opacity: 0
});
imageLayer.states.add({
  showing: {
    opacity: 1
  },
  hidden: {
    opacity: 0
  }
});

I want to animate to the hidden state and then after that animation is complete, display: none;, or visibility: hidden; it.  Normally, I would need to do something like this:
imageLayer.on(Events.StateDidSwitch, function (from, to) {
   if (to === 'hidden') { imageLayer.visible = false; }
});

and probably also:
imageLayer.on(Events.StateWillSwitch, function (from, to) {
   if (to === 'showing') { imageLayer.visible = true; }
});

This is code I have to write pretty much every time I hide something. Instead, why not  upgrade animation objects to take start, end, and stop callback functions to match up with the events, allowing stuff like:
imageLayer.states.switch('hidden', {
   end: function () { imageLayer.visible = false; },
}, false);

I could see this being pretty useful wherever takes an animation options object (animate(), states.animationOptions, etc.)

@koenbok Please don't forget about this with all the fancy new additions :). I butt up against it every time I make a Framer prototype.

What about I add a start, pause, end option to every animation where you can pass callbacks.
myLayer.addState("hidden", {opacity:0, finished: ((layer) -> layer.visibility = 0)})

Or maybe I'll call it onStart, onStop, onEnd or onAnimationStart, onAnimationStop, onAnimationEnd.

Looks good to me!

Looks like this bug is preventing me from using the technique I mentioned while I wait for these animationOption upgrades: https://github.com/koenbok/Framer/issues/173

For any observers, here's a workaround for #173, so you can using the technique I wrote above to set visibility before/after animating, just add this coffee script as the first line: return if to is from in your Events.StateDidSwitch handler. So that would make my JS look like so:
var setVisibilityWhenAnimating = function (layer, showStateName, hideStateName) {
  if (!showStateName) {
    showStateName = 'showing';
  }

  if (!hideStateName) {
    hideStateName = 'hidden';
  }

  layer.on(Events.StateWillSwitch, function (from, to) {
    if (to === showStateName) {
      layer.visible = true;
    }
  });
  layer.on(Events.StateDidSwitch, function (from, to) {
    if (to === from) { return; }
    if (to === hideStateName) {
      layer.visible = false;
    }
  });
};

I discovered another, even better use case for adding onAnimationEnd, etc., and that is to perform an action before/after a specific instance of a state change or animation, as opposed to all of a certain type.
Lets say in one case I want to take an action foo() after a specific state change to state bar. If I do the following:
layer.once Events.AnimationEnd, ->
    foo()

layer.states.switch `bar`

Then I can run into the issue where the animation of that same layer from elsewhere will trigger that callback first, at the wrong point in time.

This will be solved in the new Animation and states API proposed in #378. Any property that isn't animatable will be set when the animation ends so
layer.animate
   opacity: 0
   visible: true

Will first animate to opacity 0 and the make the layer invisible. For the reverse, you should do
layer.visible = true
layer.animate
   opacity: 1

Then I can run into the issue where the animation of that same layer from elsewhere will trigger that callback first, at the wrong point in time.

For this you can use layer.once Events.StateDidSwitch, ->
I'm going to close this one now, but please feel free to keep commenting or open a new issue if you have any more suggestions

I tried this.
However it seems that CSS display property is still block.
layer.animate
   opacity: 0
   visible: false


Master

Animation Properties Override Fixes

Yeah I see what you need here.
I'll do the fix

Please try with the latest version
should be good now


We changed the reference of Services class.

I tried to overwrite Router with application/Config/Services.php, but CodeIgniter.php refers to CodeIgniter\Config\Servces.
Therefore, I made this PR.
sample: application/Config/Services.php
class Services extends CoreServices
{

	public static function router(\CodeIgniter\Router\RouteCollectionInterface $routes = null, $getShared = true)
	{
		if ($getShared)
		{
			return self::getSharedInstance('router', $routes);
		}

		if (empty($routes))
		{
			$routes = self::routes(true);
		}

		return new \App\Core\Router\Router($routes);
	}
}

Looks good. Thanks1

Merged thanks!!

I'm currently getting an error with a fresh download that I think is caused by this merge. The error is:
Fatal error: Cannot use Config\Services as Services because the name is already in use in .../system/CodeIgniter.php on line 38

@daylightstudio Weird, I'm not seeing that. Did a git clone, went to the folder and ran php serve.php and fired up the browser to localhost:8080 and it all worked as expected on the welcome page.

OK. Let me have some other folks at work test it out to see if they can replicate. I wasn't seeing anyone else complaining about the issue either so let me dig into it further and I'll report back what I'm able to find out. What version of PHP 7 are you running just for comparison? I was testing it on a basic MAMP installation with PHP 7.10.

That was tested under a MAMP 7.0.15 release.

FYI, I upgraded to the latest version of MAMP that has the 7.0.15 version and the problem went away. Not sure if it was a PHP/MAMP version or something else, but my issue has been resolved.

Good to know! Very strange issue, though.

In WAMP I use PHP 7.0.10 and i get the same message:
Fatal error: Cannot use Config\Services as Services because the name is already in use in C:\wamp64\www\CodeIgniter4\system\CodeIgniter.php on line 38


FormBuilderCheckbox change color Not work

I have an app in dark mode, when I add FormBuilderCheckbox I can't find the option to change the color of the box only
checkColor,activeColor

This still an issue?


error install nest on Ubuntu 16

pip install nest/
Processing ./nest
Requirement already satisfied: pybind11>=2.3 in ~/anaconda3/envs/torchbeast/lib/python3.7/site-packages (from nest==0.0.3) (2.6.2)
Building wheels for collected packages: nest
Building wheel for nest (setup.py) ... error
ERROR: Command errored out with exit status 1:
command:~/anaconda3/envs/torchbeast/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-req-build-xjc52l4k/setup.py'"'"'; file='"'"'/tmp/pip-req-build-xjc52l4k/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-ty9pec67
cwd: /tmp/pip-req-build-xjc52l4k/
Complete output (227 lines):
running bdist_wheel
running build
running build_ext
building 'nest' extension
creating build
creating build/temp.linux-x86_64-3.7
creating build/temp.linux-x86_64-3.7/nest
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
In file included from nest/nest_pybind.cc:21:0:
nest/nest.h:29:22: error: parameter packs not expanded with ‘...’:
using Ts::operator()...;
^
nest/nest.h:29:22: note:         ‘Ts’
nest/nest.h:29:23: error: expected ‘;’ before ‘...’ token
using Ts::operator()...;
^
nest/nest.h:29:23: error: expected unqualified-id before ‘...’ token
nest/nest.h:32:37: error: expected constructor, destructor, or type conversion before ‘;’ token
overloaded(Ts...)->overloaded<Ts...>;
^
nest/nest.h:38:12: error: ‘variant’ in namespace ‘std’ does not name a template type
std::variant<T, std::vector, std::map<std::string, Nest>>;
^
nest/nest.h:58:16: error: expected ‘)’ before ‘v’
Nest(value_t v) : value(std::move(v)) {}

FYI: it is a gcc version problem, which need to be compatible with C++17


Update google-cloud-pubsub to 1.123.12

About this PR
📦 Updates com.google.cloud:google-cloud-pubsub from 1.107.0 to 1.123.12
📜 GitHub Release Notes - Version Diff
Usage
✅ Please merge!
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

⚙ Adjust future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "com.google.cloud", artifactId = "google-cloud-pubsub" } ]

Or, add this to slow down future updates of this dependency:
dependencyOverrides = [{
  pullRequests = { frequency = "30 days" },
  dependency = { groupId = "com.google.cloud", artifactId = "google-cloud-pubsub" }
}]

labels: library-update, early-semver-minor, semver-spec-minor, commit-count:1

Superseded by #342.


ldap_connect support multiple urls

I read the comment here: http://php.net/manual/zh/function.ldap-connect.php
ldap_connect support multiple urls separated by space, so i supposed, there is no need to use LdapServerPool get available server, just pass then all, the ldap-ext will choose a server that worked.

The main reason I implemented that was so that I could both easily determine what server name the connection ends up on and easily control the initial connection timeout settings. If both of those can be accomplished without the need for that class then I wouldn't be opposed to just passing a list of URIs separated by spaces.
It seems like it is possible to get the current LDAP server with ldap_get_option($ds, LDAP_OPT_HOST_NAME, $hostname);. But based on some digging around it appears that the LDAP_OPT_TIMEOUT option has been broke in multiple versions of the OpenLDAP library. Perhaps it is fixed in newer releases?

I'm not clear about timeout broken, but i find something from php official documents， ldap_connect($host) does not open a connection. It checks whether the given parameters are plausibe and can be used to open a connection as soon as one is needed,ldap_bind($ds,$user,$pwd)timeout can set byldap_set_option($ds, LDAP_OPT_NETWORK_TIMEOUT, $timeout);`

Yeah, I see conflicting examples of this in different bug reports, such as: https://bugs.php.net/bug.php?id=69574. I'll have to test different versions to simulate a timeout. If I can get it working reliably then I'll just use that method.
The docs also say that you can't specify a port in the URI string, which is not correct based on my testing. Some of the LDAP docs really need some updating.

ldap-ext source code:  https://github.com/php/php-src/blob/master/ext/ldap/ldap.c
		int rc = LDAP_SUCCESS;
		char	*url = host;
		if (!ldap_is_ldap_url(url)) {
			int	urllen = hostlen + sizeof( "ldap://:65535" );

			if (port <= 0 || port > 65535) {
				php_error_docref(NULL, E_WARNING, "invalid port number: " ZEND_LONG_FMT, port);
				RETURN_FALSE;
			}

			url = emalloc(urllen);
			snprintf( url, urllen, "ldap://%s:" ZEND_LONG_FMT, host ? host : "", port );
		}

#ifdef LDAP_API_FEATURE_X_OPENLDAP
		/* ldap_init() is deprecated, use ldap_initialize() instead.
		 */
		rc = ldap_initialize(&ldap, url);
#else /* ! LDAP_API_FEATURE_X_OPENLDAP */
		/* ldap_init does not support URLs.
		 * We must try the original host and port information.
		 */
		ldap = ldap_init(host, port);
		if (ldap == NULL) {
			efree(ld);
			php_error_docref(NULL, E_WARNING, "Could not create session handle");
			RETURN_FALSE;
		}
#endif /* ! LDAP_API_FEATURE_X_OPENLDAP */

only define LDAP_API_FEATURE_X_OPENLDAP can use ldap urls

So basically that means the use of a URI was a OpenLDAP library specific option. I think they should just remove that statement from the docs.
But anyway, I did get around to some testing of LDAP_OPT_NETWORK_TIMEOUT. This option seems to behave...oddly. Setting it to 1 seems to cause a timeout in 2 seconds or so, setting it to 5 causes a timeout in 10 seconds...etc. I think something is ultimately botched in the LDAP extension with how it handles setting the timeout. I wonder if perhaps the order of the if/elif constant checks are reversed for the logic, or something else is going on. See here: https://github.com/php/php-src/blob/master/ext/ldap/ldap.c#L2350 . I can futz with the extension a bit and recompile to see if iI can get it to behave as expected. But until I get some reliable timeout setting it seems like the server pool class is the best method to take at the moment. Unless you see different results?

I test with LDAP_OPT_TIMEOUT and LDAP_OPT_NETWORK_TIMEOUT, LDAP_OTP_TIMEOUT works fine,   but what value set for LDAP_OPT_NETWORK_TIMEOUT cause timeout after 20sec.  Maybe ldap-ext has bug for timeout setting or the timeout setting depends on other condition which we don't known at prement. Just keep the server pool implement for now.

Even with LDAP_OPT_TIMEOUT and LDAP_OPT_NETWORK_TIMEOUT I don't get accurate timeout values for an unavailable server, on Ubunutu anyways with OpenLDAP 2.4.42. Closing this unless we can somehow get it to provide an accurate timeout setting.
On a separate note, it would be nice if I had a "retry" mechanism for the connection somewhere. I could potentially catch a LdapConnectionException and do an auto-retry of the connection; probably somewhere in the operation invoker class would make sense. This could potentially help if while executing operations the active LDAP server goes down.


Transfer + Sale could be merged to one row in collection activity?

https://kodadot.xyz/ahk/collection/u-2024/activity
if someone buy NFTs, why it needed to show Sale and Transfer with same credentials? would be possible to duplicate it?

Why duplicate it? I would remove the transfer when the sale event happens. It's clear the person now owns the nft. That's what the "from, to" columns are.

continue in #8226


Tasks set to run on folder open run twice

Issue Type: Bug
VS Code version: Code - Insiders 1.36.0-insider (6520c22b83c0b6f168ba7de3309ffab42281e905, 2019-06-19T05:19:10.147Z)
OS version: Windows_NT x64 10.0.18908

System Info

Item
Value

CPUs
Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz (12 x 3300)

GPU Status
2d_canvas: enabledflash_3d: enabledflash_stage3d: enabledflash_stage3d_baseline: enabledgpu_compositing: enabledmultiple_raster_threads: enabled_onnative_gpu_memory_buffers: disabled_softwareoop_rasterization: disabled_offprotected_video_decode: unavailable_offrasterization: enabledskia_deferred_display_list: disabled_offskia_renderer: disabled_offsurface_synchronization: enabled_onvideo_decode: enabledviz_display_compositor: disabled_offwebgl: enabledwebgl2: enabled

Load (avg)
undefined

Memory (System)
15.91GB (5.05GB free)

Process Argv
--folder-uri file:///c%3A/Users/Kamen/Code/Stanga/Stylitics/stylitics-closet-essentials.sn77.net.git

Screen Reader
no

VM
0%

Extensions: none

Steps to Reproduce:

Set up a project with a tasks.json as below (can be an empty project with nothing else)
From the command palette, execute Tasks: Allow Automatic Tasks in Folder
Reload project

Expected behaviour after project restart: each task with "runOn": "folderOpen" is started once.
Actual behaviour after project restart: each task with "runOn": "folderOpen" is started twice.
{
	"version": "2.0.0",
	"tasks": [
		{
			"label": "My Task",
			"promptOnClose": false,
			"command": "echo hello",
			"type": "shell",
			"args": [],
			"problemMatcher": [
				"$tsc"
			],
			"presentation": {
				"reveal": "always",
				"panel": "shared"
			},
			"group": "build",
			"runOptions": {
				"runOn": "folderOpen"
			}
		}
	]
}

Does this issue occur when all extensions are disabled?: Yes
I also notice high CPU usage from a conhost.exe process spawned from VSCode; this might or might not be related.

Could not reproduce the issue

On the latest insiders I can reproduce it.

Thank you for catching this @kamenminkov!

@alexr00 Thanks for confirming! :)

Seems like it's fixed in today's insider build, awesome!

Thank you for verifying it too.


feat(masthead-v2): release recent improvements

Description
Integrate latest updates to the main branch into feat/masthead-v2. This includes some fixes we want to apply to the v2 masthead.
To QA
Visit https://ibmdotcom-webcomponents.s3.us-east.cloud-object-storage.appdomain.cloud/deploy-previews/9609/index.html?path=/story/components-masthead--with-v-2-data and verify there are no visual or functional regressions to the masthead as compared to the live site (i.e. https://www.ibm.com)

Looks good to me.

@kennylam looks like your account is blocking the DCO check?

recheck

We're safe to release this now that we can make tagged releases for masthead v2 🎉
@andy-blum @IgnacioBecerra @KiBeta  can you give this a review? It gets feat/masthead-v2 up to date with all the changes that have landed in main since they diverged. The most important thing is to verify the v2 masthead still works in the deploy preview (https://ibmdotcom-webcomponents.s3.us-east.cloud-object-storage.appdomain.cloud/deploy-previews/9609/index.html?path=/story/components-masthead--with-v-2-data).
It also looks like we're blocked by the DCO Assistant since some of @kennylam's commits aren't associated with his GH account. Anybody have ideas for how to resolve that?


How do I format the config.json?

Sorry I have been trying to get my own instance of this bot running but I can't seem to figure out how the json is to be formated. May I have some help plz.

{
    "token": ""
}


ToSql for serde_json::value deserializes incorrectly for strings

Reproducible example:
    let db = Connection::open_in_memory().unwrap();
    db.execute(
        "CREATE TABLE IF NOT EXISTS 'users' (`name` VARCHAR(100));",
        (),
    )
    .unwrap();
    db.execute("INSERT INTO 'users' (name) VALUES ('Alice');", ())
        .unwrap();
    db.execute("INSERT INTO 'users' (name) VALUES ('\"Bob\"');", ())
        .unwrap(); // notice the extra quotes

    let alice = serde_json::to_value::<String>("Alice".into()).unwrap();
    let bob = serde_json::to_value::<String>("Bob".into()).unwrap();

    let mut stmt = db.prepare("SELECT * FROM users WHERE name=?").unwrap();
    let alice_exists = stmt.exists(rusqlite::params_from_iter([alice])).unwrap();
    let bob_exists = stmt.exists(rusqlite::params_from_iter([bob])).unwrap();

    assert_eq!(alice_exists, true); // panics due to failed assertion but shouldn't
    assert_eq!(bob_exists, false); // same, should be false but it yields true

This is because serde_json::to_string used here, actually yields a string in JSON syntax which is required to be quoted. The de serialized string should not contain quotes.
The example might not look very useful as it's been reduced for the sake of brevity however the bug was discovered when trying to serialize structs into SQL parameters via serde. This makes it impossible to use params_from_iter in WHERE clauses because the query will look for the quoted string as well as adding extra quotes on INSERT statements.

See #1280 and #882.
'Alice' is not a valid JSON value (see json_valid)
Maybe you should use json_quote:
SELECT * FROM users WHERE name=json_quote(?);

Or json_extract
sqlite> SELECT json_extract('"Bob"', '$');
Bob
sqlite> SELECT json_extract('Alice', '$');
Runtime error: malformed JSON

Or ->>
sqlite> SELECT '"Bob"' ->> '$';
Bob
sqlite> SELECT 'Alice' ->> '$';
Runtime error: malformed JSON


fixes #96 by expecting a 201 response code

fixes #96

I'm not sure about this fix.
APIv1: https://www.docusign.com/p/RESTAPIGuide/RESTAPIGuide.htm#REST API References/Add Recipients to an Envelope.htm%3FTocPath%3DREST%2520API%2520References|_____78
the status_code is supposed to be 200
APiv2: https://docs.docusign.com/esign/restapi/Envelopes/EnvelopeRecipients/create/
201
In fact pydocusign was written for apiv1, and is not yet compatible with v2. But, some docstring link the apiv2 documentation.

Oh, you're right... that is a problem.  Given the pending deprecation of the v1 API, what is the strategy/timeline for supporting v2?

We should migrate to the v2, that's sure. But right now I don't have time for that. If you do, feel free to propose a pull request :)

Ok, little update: the old api reference (https://www.docusign.com/p/RESTAPIGuide/RESTAPIGuide.htm) seems to be apiv2 compliant, but the status_code mentioned for the endpoint "Add one or more recipients to an envelope" is wrong.
I prepare a PR to mention only the new api reference (https://docs.docusign.com/esign/), and I will integrated your fix.

closing in favor of #100


Support TSX / HTML

This is the current color when using TSX

It seems like this isn't an issue anymore?

I am not sure if it is a design choice or otherwise, but HTML has no discernible syntax highlighting on any of the tags or otherwise.


Error on torrent file upload when using http and udp tracker toegether.

I'm trying to upload .torrent file with http:// and udp:// tracker URL and have following error:
PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function Scrapeer\socket_create() in /php/libs/scraper.php:442
Stack trace:
#0 /php/libs/scraper.php(425): Scrapeer\Scraper->udp_create_connection()
#1 /php/libs/scraper.php(398): Scrapeer\Scraper->prepare_udp()
#2 /php/libs/scraper.php(174): Scrapeer\Scraper->scrape_udp()
#3 /php/libs/scraper.php(101): Scrapeer\Scraper->try_scrape()
#4 /php/upload.php(53): Scrapeer\Scraper->scrape()
#5 /en/upload/upload.php(218): upload()
#6 {main}
  thrown in /php/libs/scraper.php on line 442
This problem not appears when using separate .torrent file for http:// and separate for udp:// URL.
Regards.

What

What version of PHP are you using? Have you created a torrents folder in the root directory?

Looks like change php to 7.0 solves the problem.
Thank you!

I'm sorry but I made mistake while creating .torrent file.
After change to php 7.0 error still exist:
PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function Scrapeer\socket_create() in /php/libs/scraper.php:442 Stack trace: #0 /php/libs/scraper.php(425): Scrapeer\Scraper->udp_create_connection('c5et1k3pncit8sk...', 8000) #1 /php/libs/scraper.php(398): Scrapeer\Scraper->prepare_udp('c5et1k3pncit8sk...', 8000) #2 /php/libs/scraper.php(174): Scrapeer\Scraper->scrape_udp(Array, 'c5et1k3pncit8sk...', 8000, false) #3 /php/libs/scraper.php(101): Scrapeer\Scraper->try_scrape('udp', 'c5et1k3pncit8sk...', 8000, '', false) #4 /php/upload.php(53): Scrapeer\Scraper->scrape(Array, Array) #5 /en/upload/upload.php(218): upload() #6 {main}   thrown in /php/libs/scraper.php on line 442
Of course torrents folder in the root directory is created.
Regards.


Added alerting-dashboard-plugin to manifest 1.2.0.

Description
Adding alerting-dashboard-plugin to manifest 1.2.0.
Issues Resolved
issue118
Check List

[x] Commits are signed per the DCO using --signoff

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Rebase this on top of #876, I think this is an unrelated failure.

Codecov Report

Merging #874 (ad0cd46) into main (60a2962) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main     #874   +/-   ##
=======================================
  Coverage   91.21%   91.21%
=======================================
  Files          88       88
  Lines        2379     2379
=======================================
  Hits         2170     2170
  Misses        209      209

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 60a2962...ad0cd46. Read the comment docs.

Closing this PR in favor of PR 886.


[Feature] Report a problem with the platform

Is your feature request related to a problem? Please describe.
We should have a way for the users to report a problem with the platform, like a bug, crash, suggestion!
We were talking about that on one of the meetings and we will use Google Forms for that. Maybe an embedded iframe would be best so we don't go away from our website!
This here is the form link https://docs.google.com/forms/d/e/1FAIpQLScnl6D3lyoAX-N4CysnAjfy_gj_8EmukGjCFO9gtCePjRtmsA/viewform
Describe the solution you'd like
I think an icon button in the navigation or the footer should be the best solution since we would need that on all of the pages.
A popup should then comeup with an input inside which you can use to send the message you have. This MUI Popover component seems like a good option.

Describe alternatives you've considered
For other solutions we should work with the design team.
Additional context
We still haven't figured out a way of where will that feedback be sent, so that will come at a later point, but it will be good for the frontend to be ready.

@dimitur2204  great idea. I would like to elaborate a bit on it. I believe it will be good to have a basic feedback classification.
Type of feedback: Problem / Bug ; Feature request ; General feedback
Text: Plain text area up to XXX chars.
The system should send a mail with with the following information:
to:  based on the type of feedback we can have different email to send the feedback to
subject:
url of the feedback
Timestamp and IP address of sender
type of feedback
feedback text

@dimitur2204 great idea. I would like to elaborate a bit on it. I believe it will be good to have a basic feedback classification. Type of feedback: Problem / Bug ; Feature request ; General feedback Text: Plain text area up to XXX chars. The system should send a mail with with the following information: to: based on the type of feedback we can have different email to send the feedback to subject: url of the feedback Timestamp and IP address of sender type of feedback feedback text

Those are some good ideas. I think we should take that to the design team, but in the meantime I will create something I believe is sufficient.

@swolf86 @Juicebgs
This is what I have done currently on desktop. Does not work well on mobile though. If you have any good ideas for mobile would be good

Nice work, shouldn't reporting a problem positioned / linked to a specific page so we can understand on which page is the issue

Nice work, shouldn't reporting a problem positioned / linked to a specific page so we can understand on which page is the issue

That is a good idea, but what are you thinking? A new field for the page you are talking about?
Also people can specify that in the input

The feedback tool can send the current page where the problem has been reported as part of the data.
@dimitur2204 I think we need to add some text like Send to the report too CTA button.

The feedback tool can send the current page where the problem has been reported as part of the data.
I was thinking the same thing.

@dimitur2204 I think we need to add some text like Send to the report too CTA button.
Do you mean the Send button on the form or the button in the navigation?

Like the idea, but I believe reporting a problem should not be part of the main nav at root level.
Also the way you got it is not self-explanatory enough – currently it is just a warning sign, not a report a problem sign.
Instead I would put this link in the footer within a small textual button that has red border with rounded corners around it. Popup/modal would be viewport centered.

Now that we settled on Google Forms the question I have is where should we put that button? I see what @kabaivanov has suggested, but would that be sufficient for and will people find it that way?
If there are any other suggestions, maybe at the end of a donation flow, but we have a "Write us" button there which leads to the contact page.
If anyone has ideas about that they will be all welcome @swolf86 @kachar @Juicebgs

We have added feedback and report this campaign at the end of the campaign not the best presentation but not in the best way I guess.

Now let's formulate the problem:
As a ... what happen .. so that ...
After this we can ideate on solution
Have we received any feedback on problems so far ?
I have to say the google form is confusing me as it asks for ideas not report problems?

@podkrepi-bg/pm Can you help us figue out the expectations here? We wonder if it should be "report a problem" or "share an idea" form or a generic form which asks the user to pick the topic of contact.

I like "Feedback". We can take a look how Userway have managed the task for inspiration:

The form should be minimalistic, I would add just type of feedback - idea / problem / other .


Migrate googlespreadsheet_service template

Purpose

Migrate the googlespreadsheet_service template to be compatible with the latest module-googlespreadsheet connector.

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


Carousel prev/next slide navigation with keyboard arrows keys doesn't work

The relative code is implemented, but pressing the left or arrow key when the component has the keyboard focus nothing happens.

@mgiulio Do you have data-keyboard="true" set? http://thednp.github.io/bootstrap.native/#exampleCarousel. Keyboard navigation is not turned on by default.

Oops, missed that one! I was assuming keyboard navigation was on by default as in BS. Sorry:)

No problem, we all do that sometimes. :wink:

Could you tell me how should i enable carousel-slide for touch displays , carousel slider using mobile left/right swipe ? by just using vanilla javascript? i have searched a lot but am unable to find a solution for this issue ..

This feature is planned to be added into the original BS4 plugin so we will implement that too.


Warning with Gtk version

using PyPlot

sys:1: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
/usr/lib/python3.5/site-packages/matplotlib/backends/backend_gtk3agg.py:18: UserWarning: The Gtk3Agg backend is known to not work on Python 3.x with pycairo. Try installing cairocffi.
"The Gtk3Agg backend is known to not work on Python 3.x with pycairo. "

Dup of #181.


ailia-1.2.4-xc7.a Missing

Hi,
File ailia-1.2.4-xc7.a is missing, can you guide me to get it.
Thanks

Please download trial version of ailia SDK from here.
https://ailia.jp/en/


Nested forms

Hello! I am looking at ActiveAdmin as a candidate to be used in my next project, I like it a lot.
However in all the examples, the edit form only edits the attributes of the given model. Is it possible to somehow edit associated models like Contacts on Person page (contact belongs_to person)?
I have seen some support for this in Formtastic, but I have no idea if it is possible in ActiveAdmin - how to make "add contact" button on Person page etc...
Thanks in advance for the reply!
Jakub Cerny

@MeetDom: did you create an issue for this (can't find it)?
@pcreux: is the feature implemented in the last version of AA?

@michaek +1 same problem, resolved?

This one is such a vague issue that I don't think it should be reopened.
Regarding nested has_one: the most recent activity on https://github.com/gregbell/active_admin/issues/459#issuecomment-2551862 suggests that you just need to build a record on the association before trying to use it in the form. I haven't tested it, but there seems to be consensus on that.

I encountered @Zamyatin-AA 's issue: when doing an f.has_many in my edit form, existing relationships in my has_many, :through were getting duplicated. I needed to add a hidden field with the id of the join table and update the accepted attributes to get this problem to go away. Thought I'd report in case anyone else stumbles on this issue!

Sorry for gravedigging, but I came upon this thread trying to learn how to build a nested form and it's extremely helpful.
In the latest build of ActiveAdmin, f.buttons has been deprecated and removed. You will need to use f.actions instead. Hope this helps!


Add CD (content delivery) support for HoneyGain

I don't know aobut the code but it would be nice to also have an option to toggle it in the config as there are more and more supported countries.

+1 if you can 🙂

they dont support it in Linux everyone.
says
Content Delivery on Honeygain Docker container
Currently Content Delivery is not available on our Docker containers, however, we might introduce it in the future.
for more info visit https://support.honeygain.com/hc/en-us/articles/360018979919-How-to-run-Honeygain-on-Docker-Linux-


Update win-spice / win-virtio

Motivation for this change
Packages are fairly out of date, supporting only Windows 8.1. And I believe https://people.redhat.com/~vrozenfe/qxlwddm/qxlwddm-0.11.zip is not accessible any longer.
Things done

[x] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
21.11 Release Notes (or backporting 21.05 Relase notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 131865 at 06575905 run on aarch64-linux 1

2 packages built successfully:

win-spice
win-virtio

6 suggestions:

warning: missing-phase-hooks
installPhase should probably contain runHook preInstall and runHook postInstall.
Near pkgs/applications/virtualization/driver/win-virtio/default.nix:17:3:
   |
17 |   installPhase =
   |   ^

warning: license-missing
Package is missing a license.
Near pkgs/applications/virtualization/driver/win-virtio/default.nix:30:3:
   |
30 |   meta = with lib; {
   |   ^

warning: missing-phase-hooks
buildPhase should probably contain runHook preBuild and runHook postBuild.
Near pkgs/applications/virtualization/driver/win-spice/default.nix:39:3:
   |
39 |   buildPhase = ''
   |   ^

warning: missing-phase-hooks
installPhase should probably contain runHook preInstall and runHook postInstall.
Near pkgs/applications/virtualization/driver/win-spice/default.nix:52:3:
   |
52 |   installPhase =
   |   ^

warning: name-and-version
Did you mean to pass pname instead of name to mkDerivation?
Near pkgs/applications/virtualization/driver/win-spice/default.nix:34:3:
   |
34 |   name = "win-spice-0.21";
   |   ^

Near pkgs/applications/virtualization/driver/win-spice/default.nix:35:3:
   |
35 |   version = "0.21";
   |   ^

warning: missing-phase-hooks
buildPhase should probably contain runHook preBuild and runHook postBuild.
Near pkgs/applications/virtualization/driver/win-virtio/default.nix:13:3:
   |
13 |   buildPhase = ''
   |   ^

This addresses both #131797 and #131796. Seemed sensible to include both commits in the same PR due to the relationship between the packages.


feat(contrib/drivers/pgsql): add array type varchar[] and text[] converting to Go []string support

@ninjashixuan Please add associated unit testing case for your commit in package contrib/drivers/pgsql.

@gqcn Oops, I forgot to add the test cases earlier. they're in now.

https://github.com/ninjashixuan/gf/blob/baad29c1cc1774762a4a0e8ecc94a18f7175efb3/contrib/drivers/pgsql/pgsql_convert.go#L124-L130
This shouldn't return the pg.StringArray. Instead, return []string(result). This way, gconv.Strings skips an extra layer of reflection and assignment， reducing some performance overhead. I won’t submit a separate PR for this minor change.
@gqcn


input_size based rules for anndata_import tool

The current 200G was used as a temporary hack to import a large dataset

@pavanvidem is there something wrong with the latest merge?
I think you need this formula as part of a rule isn't it?
https://github.com/usegalaxy-eu/infrastructure-playbook/blob/master/files/galaxy/tpv/tools.yml#L536

@pavanvidem is there something wrong with the latest merge?
I think you need this formula as part of a rule isn't it?
https://github.com/usegalaxy-eu/infrastructure-playbook/blob/master/files/galaxy/tpv/tools.yml#L536

I also think so. Fixed it.

@pavanvidem is there something wrong with the latest merge?
I think you need this formula as part of a rule isn't it?
https://github.com/usegalaxy-eu/infrastructure-playbook/blob/master/files/galaxy/tpv/tools.yml#L536

I am not sure if I understood it right but based on the new commit that @pavanvidem submitted and that I asked to revert, no you do not need the formula as part of a rule. Check out this example.
  toolshed.g2.bx.psu.edu/repos/iuc/rnaquast/rna_quast/.*:
    cores: 12
    mem: 40 * input_size  # this line has been added to show the point

(.venv) $ tpv dry-run --job-conf job_conf.yml --tool toolshed.g2.bx.psu.edu/repos/iuc/rnaquast/rna_quast/.* --input-size 1
!!python/object:galaxy.jobs.JobDestination
converted: false
env:
- {name: GALAXY_MEMORY_MB, value: '40960'}
id: condor_tpv
legacy: false
params: {description: rna_quast, docker_memory: 40.0G, metadata_strategy: extended,
  request_cpus: '12', request_memory: 40.0G, submit_request_gpus: '0', tmp_dir: true}
resubmit: []
runner: condor
shell: null
tags: null
url: null
(.venv) $ tpv dry-run --job-conf job_conf.yml --tool toolshed.g2.bx.psu.edu/repos/iuc/rnaquast/rna_quast/.* --input-size 2
!!python/object:galaxy.jobs.JobDestination
converted: false
env:
- {name: GALAXY_MEMORY_MB, value: '81920'}
id: condor_tpv
legacy: false
params: {description: rna_quast, docker_memory: 80.0G, metadata_strategy: extended,
  request_cpus: '12', request_memory: 80.0G, submit_request_gpus: '0', tmp_dir: true}
resubmit: []
runner: condor
shell: null
tags: null
url: null


Feature request: Need to open pipe-delimited CSV files

Never mind. Found out solution from discussion on another issue: "Using with other formats than a csv path? #20"


Implemented getnewargs for both InterfaceID and LinkID

Fixes #251
I indeed up implementing the first solution mentioned in the issue #251:

Probably the safest and the one with least refactoring would be to cast again the type as a str and then the new introduced types InterfaceID and LinkID are used only internally when building the formatted str. As we deprecate storehouse completely and if there's any other benefit to avoid this cast then we can explore other ideas. @Ktmi let me know if you have any suggestion or other ideas.

I also tried to maintain as they are,and only performing a cast to str on as_dict or when id was used but there were additional references that kept showing up, it was difficult to ensure correctness, and then we'd have to keep converting to str in multiple places, which would defeat the purpose of the cached pre-computed id

@viniarck Rather than modifying how we use the InterfaceID and LinkID types, we can modify them to be pickleable by adding in either a __getnewargs__() or __getnewargs_ex__() method to the class definition. Since the InterfaceID type already contains the individual switch and port numbers, we can reuse these with the getnewargs() method. For LinkID, we can have it store the args in a tuple or set, until they are needed for the pickle-ing process. See the python docs for more details.

@viniarck Rather than modifying how we use the InterfaceID and LinkID types, we can modify them to be pickleable by adding in either a __getnewargs__() or __getnewargs_ex__() method to the class definition. Since the InterfaceID type already contains the individual switch and port numbers, we can reuse these with the getnewargs() method. For LinkID, we can have it store the args in a tuple or set, until they are needed for the pickle-ing process. See the python docs for more details.

Great idea, @Ktmi, seems cleaner. I've pushed this new commit 57f35a7 implemeting __getnewargs__ for both InterfaceID and LinkID, the same example still works, no other side effects observed. In this upcoming release when we officially deprecate storehouse then we can also get rid of this change here.

Looks good. to me, just need to make the linter happy with the call to super in LinkID.__init__. Although I think it would make more sense to have the endpoints of the LinkID stored in a tuple, to represent them as a collection of endpoints. If we decide to decompose the LinkID into its two InterfaceIDs or we want to check if an InterfaceID is within a LinkID, having it in some collection makes more sense.

Morning. @italovalcy @Ktmi I've ust fixed the linter error. Yes, let's also store as a tuple. I've pushed a new forced commit squashing the previous ones. I've also updated the title to reflect accordingly. Could you do a second pass review?

Thanks, guys.