A couple errors on running the app

Hi,
I'm trying to run this app to backup some conversations, however i get this error;
`util ❯ python conversationScraper.py
Traceback (most recent call last):
  File "conversationScraper.py", line 2, in <module>
    import configparser
  File "/usr/local/lib/python2.7/site-packages/configparser.py", line 12, in <module>
    from backports.configparser import (
  File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/backports/configparser/__init__.py", line 132, in <module>
    import io
  File "/Users/hugodrax/Documents/Source/conversation-analyzer/src/util/io.py", line 5, in <module>
    from pandas import read_csv
  File "/usr/local/lib/python2.7/site-packages/pandas/__init__.py", line 22, in <module>
    from pandas.compat.numpy import *
  File "/usr/local/lib/python2.7/site-packages/pandas/compat/__init__.py", line 350, in <module>
    from dateutil import parser as _date_parser
  File "/usr/local/lib/python2.7/site-packages/dateutil/parser.py", line 37, in <module>
    from io import StringIO
ImportError: cannot import name StringIO`

so, then i simply do 'mv io.py io.py.bak' and 'mv io.pyc io.pyc.bak' and then it runs again, but now i get this error;
`util ❯ python conversationScraper.py
Traceback (most recent call last):
  File "conversationScraper.py", line 12, in <module>
    from util import logger
ImportError: No module named util`

i am running python 2.7, and it returns this version
Python 2.7.12

First wanted to point out that I used python 3.x for the code, so I am not sure how the code will behave with your python version. If you encounter more problems, you might want to try to install and run with a 3.x version.
For your second error, I apologize, my fault. You want to modify/correct this line to actually include the util folder.
sys.path.append(dirname(__file__)+"\\..")

Otherwise you might simply try to run the command from outside the util folder, in src.
I will shortly update the code with a fixed version.

Hey, thanks for the reply man!
I didn't realize it was for python3, so, i'm doing this now;
scraper@ubuntu:~/source/conversation-analyzer/src/util$ python3 conversationScraper.py
Traceback (most recent call last):
  File "conversationScraper.py", line 12, in <module>
    from util import logger
ImportError: No module named 'util'
scraper@ubuntu:~/source/conversation-analyzer/src/util$ cd ..
scraper@ubuntu:~/source/conversation-analyzer/src$ python3 ./util/conversationScraper.py
Traceback (most recent call last):
  File "./util/conversationScraper.py", line 12, in <module>
    from util import logger
ImportError: No module named 'util'
scraper@ubuntu:~/source/conversation-analyzer/src$

Okay, I have progressed much farther, by changing the include to
sys.path.append('/home/scraper/source/conversation-analyzer/src/')
and, now i have the output
scraper@ubuntu:~/source/conversation-analyzer/src/stats$ ls -lt
total 588
-rw-rw-r-- 1 scraper scraper  19541 Sep  1 22:27 wordsSaidJustByXXXXXXXXX.txt
-rw-rw-r-- 1 scraper scraper  21783 Sep  1 22:27 wordsSaidJustByXXXXXXXXX.txt
-rw-rw-r-- 1 scraper scraper 516431 Sep  1 22:27 wordcount.txt

so, i try and run
scraper@ubuntu:~/source/conversation-analyzer/src/test$ python3 basicTests.py
Traceback (most recent call last):
  File "basicTests.py", line 11, in <module>
    from model.conversationDataframe import ConversationDataframe
ImportError: No module named 'model'

and
scraper@ubuntu:~/source/conversation-analyzer/src/test$ python3 testConvStats.py
Traceback (most recent call last):
  File "testConvStats.py", line 9, in <module>
    from model.conversationDataframe import ConversationDataframe
  File "/home/scraper/source/conversation-analyzer/src/model/conversationDataframe.py", line 11, in <module>
    from stats.convStatsDataframe import ConvStatsDataframe
ImportError: No module named 'stats.convStatsDataframe'; 'stats' is not a package

and
scraper@ubuntu:~/source/conversation-analyzer/src/test$ python3 testPlotting.py
Traceback (most recent call last):
  File "testPlotting.py", line 10, in <module>
    from model.conversationDataframe import ConversationDataframe
  File "/home/scraper/source/conversation-analyzer/src/model/conversationDataframe.py", line 11, in <module>
    from stats.convStatsDataframe import ConvStatsDataframe
ImportError: No module named 'stats.convStatsDataframe'; 'stats' is not a package

any ideas on what needs to change? I should have all modules installed now and most of the files seem to work, these are the two errors i get left between any of them when trying to run.
thanks very much!

I think I have somewhat fixed it. I ended up having to rename the 'stats' directory to 'stats2' and then include stats2 in the files in question, and now I've got it generating statistics, as well as most of the tests working too.

Hi @flewid ,
glad you manage to make it work, and sorry for the troubles. All the stats part was still a WIP, but I am planning of improving it, integrating your comments and most likely putting a ipython notebook to better and easily interface with stats and plotting.

oh that sounds great, I will let you know if i discover anything else :)


[py2py3] Persistency pickle dump requires a string object (not bytes)

Impact of the bug
WMCore in general
Describe the bug
With the fix made with a new version of rucio-clients, it now exposed another string/bytes problem in the Persistency module:
======================================================================
ERROR: testOnWorkerNodes (WMCore_t.WMSpec_t.Steps_t.Executors_t.LogArch_t.otherLogArchiveTexst)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/dmwm/wmcore_unittest/WMCore/test/python/WMCore_t/WMSpec_t/Steps_t/Executors_t/LogArch_t.py", line 288, in setUp
    taskMaker.processWorkload()
  File "/home/dmwm/wmcore_unittest/WMCore/src/python/WMCore/WMSpec/Makers/TaskMaker.py", line 127, in processWorkload
    sandboxCreator.makeSandbox(self.workdir, self.workload)
  File "/home/dmwm/wmcore_unittest/WMCore/src/python/WMCore/WMRuntime/SandboxCreator.py", line 138, in makeSandbox
    workload.save(workloadFile)
  File "/home/dmwm/wmcore_unittest/WMCore/src/python/WMCore/WMSpec/Persistency.py", line 49, in save
    pickle.dump(self.data, handle)
TypeError: write() argument must be str, not bytes

----------------------------------------------------------------------

How to reproduce it
nosetests test/python/WMCore_t/WMSpec_t/Steps_t/Executors_t/LogArch_t.py

Expected behavior
Fix this functionality for our python3 services, while keeping it compatible with the python2 stack.
Additional context and error message
Can be reproduced starting in 1.4.9.pre6

@mapellidario Dario, I do not want to push yet another issue into your plate, but given that you have completely mastered these unicode/string/bytes thing, you're probably the best candidate to work on this issue. I have the feeling this will fix many unit tests as well.

I had already put my eyes on this issue, :smirk:

As written in #10570, I would rather postpone this. I would follow #10422 and make sure that this isue is fixed by the PR that will close #10544 . If I try to fix this, I encounter a lot of problems that appear from slice1 to slice 13. I would rather fix them in a gradual way following the schedule that we have in place. I hope this is ok with all of you, especially @amaltaro !

Dario, if I understood you right, you are suggesting to fix those ad-hoc classes  (Configuration, Credential and DataStructs), then fix slices 1 all the way to 12. And only then work on this issue, which should be part of the slice 13. Is that correct?

Yes! That would be my plan! thanks!

This has been fixed by #10585, thanks Alan for the fix and for checking the status of my PR!


Build failure: tectonic

Steps To Reproduce
Steps to reproduce the behavior:

nix shell nixpkgs#tectonic on x86_64-darwin

Build log
https://gist.github.com/HungryJoe/c12df677b81b73b26f33ca9afffaa617
Notify maintainers
@lluchs @doronbehar
Metadata
Please run nix-shell -p nix-info --run "nix-info -m" and paste the result.
[user@system:~]$ nix-shell -p nix-info --run "nix-info -m"
 - system: `"x86_64-darwin"`
 - host os: `Darwin 22.6.0, macOS 10.16`
 - multi-user?: `yes`
 - sandbox: `no`
 - version: `nix-env (Nix) 2.13.3`
 - channels(root): `"nixpkgs"`
 - channels(user): `"nixpkgs-23.05-darwin-23.05-darwin"`
 - nixpkgs: `/nix/var/nix/profiles/per-user/root/channels/nixpkgs`

Please note that the above macOS version contradicts the rest of my system, which claims I'm on macOS 13.6.1.
Priorities
Add a :+1: reaction to issues you find important.

This was fixed in #269786. It should be available in nixpkgs-unstable soon :)


Error 0x80070643: Failed to execute MSI package

Microsoft PowerToys version
PowerToysSetup-0.68.1-x64
Installation method
GitHub
Running as admin
Yes
Area(s) with issue?
General
Steps to reproduce
First I couldn't update PowerToysSetup-0.68.1-x64 to PowerToysUserSetup-0.72.0-x64, had
Error 0x80070003: Failed to initialize package from related bundle id: {51efee50-0959-4cb6-8958-e1c1ba33fbdf}
(I also couldn't uninstall it)
I did a reinstallation of windows 11 keeping programs and documents but it did not change anything!
Then I used the search software "Everything" to find and remove all traces of PowerToysSetup-0.68.1-x64, and I cleaned the registry and the system with ccleaner and Advanced SystemCare Pro. I then tried to install PowerToysUserSetup-0.72.0-x64, and there I got: Error 0x80070643: Failed to execute MSI package.
Then I tried to install it through Microsoft Store, but again an error.
There must have been a part of the PowerToysSetup-0.68.1-x64 installation that I could not remove.
✔ Expected Behavior
I can no longer uninstall or update PowerToysSetup-0.68.1-x64.
I would like to remove all traces of PowerToysSetup-0.68.1-x64 to install PowerToysUserSetup-0.72.0-x64
❌ Actual Behavior
The mistakes I told you
Do you have a tool to remove all traces of PowerToysSetup-0.68.1-x64 ? (as some antivitus have this kind of uninstaller)
How do I remove all traces of PowerToysSetup-0.68.1-x64 to install PowerToysUserSetup-0.72.0-x64?
THANKS
Other Software
No response

PowerToysSetup-0.68.1-x64 to PowerToysUserSetup-0.72.0-x64 This should have been done in 2 steps initially:

Remove PowerToysSetup-0.68.1-x64 manually
Install PowerToysUserSetup-0.72.0-x64

Because PowerToysSetup-0.68.1-x64 is per-machine installation of PowerToys and PowerToysUserSetup-0.72.0-x64 is for current user (note the User in name).
Let's try fixing your problem now :)
How are you trying to remove PowerToysSetup-0.68.1-x64? What happens if you download PowerToysSetup-0.68.1-x64 from github and trying to run it manually? /needinfo

I was the one who installed PowerToys 0.68.1-x64 and downloaded from
Github. Unable to uninstall it: Error 2203.
Then impossible to Update to PowerToys 0.72.0-x64: ̈Error 0x80070003:
Failed to initialize package from related bundle id:
{51efee50-0959-4cb6-8958-e1c1ba33fbdf}
I did a reinstallation of windows 11 keeping programs and documents but it
did not change anything!
Then I used ccleaner, Advanced SystemCare Pro, jv16, Reg organizer,
"Everything" to find and remove all traces of PowerToys0.68.1
I then tried to install PowerToys 0.72.0-x64, and there I got: Error
0x80070643: Failed to execute MSI package.
Then I tried to install it through Microsoft Store, but again an error.
a part of the PowerToys0.68.1-x64 installation that I could not remove and
The PowerToys0.68.1-x64 msi cache no longer exists.
Either you have a tool to erase PowerToys COMPLETELY, or tell me how to
extract msi from an exe to put it back in the installer cache
Thanks
Merci
Le jeu. 17 août 2023 à 11:34, Stefan Markovic @.***> a
écrit :

PowerToysSetup-0.68.1-x64 to PowerToysUserSetup-0.72.0-x64 This should
have been done in 2 steps initially:

Remove PowerToysSetup-0.68.1-x64 manually
Install PowerToysUserSetup-0.72.0-x64

Because PowerToysSetup-0.68.1-x64 is per-machine installation of PowerToys
and PowerToysUserSetup-0.72.0-x64 is for current user (note the User in
name).
Let's try fixing your problem now :)
How are you trying to remove PowerToysSetup-0.68.1-x64? What happens if
you download PowerToysSetup-0.68.1-x64 from github and trying to run it
manually? /needinfo
—
Reply to this email directly, view it on GitHub
https://github.com/microsoft/PowerToys/issues/27948#issuecomment-1682128903,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AEXNG2N3OPYTMGM3IBQWM3LXVX6VPANCNFSM6AAAAAA3MZ7ZGM
.
You are receiving this because you authored the thread.Message ID:
@.***>

You can find steps how to extract msi from exe here https://learn.microsoft.com/en-us/windows/powertoys/install#extracting-the-msi-from-the-bundle
Let me know if you need some help with this /needinfo

thanks
Le jeu. 17 août 2023 à 14:57, Stefan Markovic @.***> a
écrit :

You can find steps how to extract msi from exe here
https://learn.microsoft.com/en-us/windows/powertoys/install#extracting-the-msi-from-the-bundle
Let me know if you need some help with this /needinfo
—
Reply to this email directly, view it on GitHub
https://github.com/microsoft/PowerToys/issues/27948#issuecomment-1682435422,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AEXNG2O4N3YQIXLLWQYSOO3XVYWM7ANCNFSM6AAAAAA3MZ7ZGM
.
You are receiving this because you authored the thread.Message ID:
@.***>


fix(karma): fix unit tests across the all supported browsers

Current coverage is 79.61% (diff: 100%)

Merging #1322 into development will decrease coverage by 4.16%

@@           development      #1322   diff @@
=============================================
  Files               53         53
  Lines             1652       1653     +1
  Methods              7          7
  Messages             0          0
  Branches           228        228
=============================================
- Hits              1384       1316    -68
- Misses             189        261    +72
+ Partials            79         76     -3

Powered by Codecov. Last update 8daa4be...25f8726


Bug "Parallax Jumps On Load #628" not fixed using Firefox and Chromium in Ubuntu 14.10

Bug #628 not fixed using Firefox and Chromium in Ubuntu 14.10.

the js file in bin/ has the fix, but the js file in dist/ doesn't. replaced and fixed

ooh, it a dirty fix, is supposed that the dist/ folder is for production. The core team should take a closer look in the way they're fixing all bugs.

I'm not sure what this means, but the one is dist/ is always related to the latest release, while bin/ is the daily build

That means that the fix is not on release files yet?

It was fixed in v0.95.3


Push notification after iPhone goes online

First, thanks for your work. I appreciate it realy.
I have an iPhone 15.
Most of my notifications comes in at night but then my phone is offline. Netxt mornig I reconect my phone to Internet. All notifications are available on gotify, but there is no push notification on my phone. If phone is online when notifications happen, everything works like expected.
Before you changed to secntfy, push notifications came when phone goes online again.
It would be great, if that feature would be possible to implement in future.

Hi, it's not a feature it's the APN service from apple that work so, I only transmit the message to the apple service and they hold it so long they want on there servers until device is online...
Maybe the reason of that is the encryption of the message and they can't read it and analyze the messages...
I don't know it's not my part sorry

Just thinking loud after some research, maybe you already doing it:
https://developer.apple.com/documentation/usernotifications/sending-notification-requests-to-apns
apns-expiration
May this be a possible solution?

Ok I will take a look later if I set this parameter.

so I updated now the API. The expiration time is now set to 3 days (before it was 1 day)
I hope it works


Filename problem

Hello and thanks for sharing your work in this plugin.
We are facing a problem:

File unswipableAndroidStatusBarPlugin.js has the first letter lowercase.
But in plugin.xml file is named as UnswipableAndroidStatusBarPlugin...

We are using Meteor and have downloaded code to fix it, not sure it only that framework is affected.
Regards.

Thanks I've fixed the problem. Please uninstall the plugin and install it again.

Thanks a lot.


Create tiles from hdf5 image data

Copied from Slack:
pete [12:29 PM]

Check out clodius/tiles/mrmatrix.py
also check out this file: https://github.com/higlass/clodius/blob/pkerpedjiev/tsv-to-mrmatrix/scripts/tsv-to-mrmatrix.py
it’s brand new but I used it on a 87K x 87K matrix

pete [12:33 PM]

it loads a dense matrix as a tsv file into an hdf5 file and then creates a data pyramid

pete   [1 month ago]

you should be able to test it out using higlass-python

pete   [1 month ago]
import higlass
import higlass.client as hgc
import higlass.tilesets as hgti

f = h5py.File('../blah.h5', 'r')

ts1 = hgti.mmatrix('../blah.h5')

tr1 = hgc.Track('heatmap',
                position='center',
                height=400,
                tileset=ts1)

view1 = hgc.View([tr1])
(display, server, viewconf) = higlass.display([view1])

pete   [1 month ago]

https://github.com/higlass/higlass-python

pete [12:33 PM]

in particular take a look at the coarsen function which takes an hdf5 array and creates the downsampled layers
the 120 lines of code should be pretty straightforward. Let me know if you have any issues.

This is essentially what we do now in vitessce-data.


UX for property managers to request approval

The following changes will only affect the partner's portal experience of a partner and not a super administrator.

On a new or draft listing, a partner should see the request approval button reflected in the Figma below
If clicked, it should open a modal confirming that they would like to request approval
On submit, the status on the listing should change to a pending status (reflected in the pill) and throw a toast
When in the pending status, the edit button should not be available in this state
Signing in as an administrator, the only visible change is the status update to pending
Notes: These changes should not include any backend work beyond updating the status of the listing on modal submit. Further functionality will be implemented in later tickets.

Figma

QA Notes
When listings approval is on:

When a partner submits a listing for approval, they get a modal asking them to confirm. When submitted, the status of the listing changes to pending approval.

When the feature is both on or off:

Now using the ui-seeds Tag component in order to be able to match the pill designs for listings approval (the CSS overrides worked great!) - I updated to the new seeds Tag everywhere we were consuming UIC Tag in partners so that it stays visually consistent (locations below).
-- Listing form pages (Tag is the listing status
-- Application table pages (Tag is also the listing status)
-- Individual application form (Tag is the submission status of the application)
-- Application flagged set resolution page (Tag is the resolution status of the set)
-- User edit form (Tag is the confirmed status of the user) - (previously this was a Tag size that was inaccessible / we no longer support it, so now it's a little bigger)

Check out the new pill visually in the places it was updated.
Ensure if you have the environment variable on that as a partner/jurisdictional admin when you create a draft listing and submit it for approval that a modal pops that matches the designs. On submit the status should change to pending approval.

@emilyjablonski -- I didn't see the modal or UX from the designs, wondering if I need a different link?
Private Zenhub Image

@sarahlazarich it's in the Figma linked above, I tagged you on the modal

I see the designs from the modal in Figma! But when I go https://bloom-partners-listings-approval.netlify.app/, I can create + publish a listing directly, and the new UX doesn't seem to be reflected

@sarahlazarich Just want to confirm that you're testing as a partner?

Update: Em and I are having issues logging in / QAing in this env, emily is troubleshooting


Remove provider user email from banner

This is not a nav item in the design, and causes a nav item overflow
issue with long email addresses due to the new slimmer banner.
Provider user email is replaced with a link to the provider applications
view as per the prototype design.
Context
With the new banner long emails cause a mis-alignment of nav items, which was identified on QA in product review.
The default Dev email is not long enough for this to have been an issue.
Emails are not part of the header designs on the prototype so given this they are removed in this PR.
Changes proposed in this pull request
Before:

After:

Guidance to review

is there a reason we shouldn't do this?

Link to Trello card

follow up to: https://trello.com/c/st1Mq1h6/2005-build-implement-the-new-header-for-manage-applications

Things to check

[x] This code doesn't rely on migrations in the same Pull Request
[x] If this code includes a migration adding or changing columns, it also backfills existing records for consistency
[x] API release notes have been updated if necessary
[x] New environment variables have been added to the Azure config

@duncanjbrown this is the plan (if you fancy whipping up an MVP version of this quick):


This component does not work under vitejs 4 project using vuejs 2 and vuetify 2

Expected Behavior
Display the component on the scree
Actual Behavior
throw an error:
dex.vue:154 [Vue warn]: Failed to resolve async component: () =>
import(
/* webpackChunkName: "chunk~name" */ "/src/js/components/Example.vue?t=1684501206938"
)
Reason: TypeError: (0 , import_vue.camelize) is not a function
w
Steps to Reproduce the Problem

Install  version 2 of the plugin
Following the example with the readme for v2
run npm run dev for vitejs project

Specifications

OS:mac Monterey
Browser: Chrome
Browser version: last version
Package version: 2
Vuetify version: 2

Closing due to no activity.
Feel free to re-open if you can produce a reproductible repo.


Disable dependabot for forks

It is useless to activate it for forks, as it will use the CI for nothing

Thinks are moving on that https://github.com/dependabot/dependabot-core/issues/2804


dependencies broken

I've tried to build mvc-todo like this:
git clone https://github.com/tonyday567/mvc-todo.git
cd mvc-todo
cabal sandbox init
cabal install --dependencies-only --ghcjs

which gives me
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: mvc-todo-0.0.1 (user goal)
trying: lens-4.9.1 (dependency of mvc-todo-0.0.1)
next goal: kan-extensions (dependency of lens-4.9.1)
rejecting: kan-extensions-4.2.1, 4.2, 4.1.1, <IP_ADDRESS>, 4.1, 4.0.3, 4.0.2,
4.0.1, 4.0, 3.7, 3.6.2, 3.6, 3.5.1, 3.5, 3.4, 3.1.2, 3.1.1, <IP_ADDRESS>, <IP_ADDRESS>,
3.1, 3.0, 2.7, 2.6, 2.5, <IP_ADDRESS>, 2.4, 2.3, 2.2, 2.1.2, 2.1, 2.0.2, 2.0.1,
<IP_ADDRESS>, <IP_ADDRESS>, <IP_ADDRESS>, 2.0.0, 1.9.0, 1.8.0, 0.5.1, 0.5.0, 0.2.2, 0.2.1,
0.2, 0.1.2, 0.1.1, 0.1 (global constraint requires ==4.2.2)
Dependency tree exhaustively searched.

Note: when using a sandbox, all packages are required to have consistent
dependencies. Try reinstalling/unregistering the offending packages or
recreating the sandbox.

$ ghcjs --version
The Glorious Glasgow Haskell Compilation System for JavaScript, version 0.1.0 (GHC 7.10.1)

I'm guessing that you need to run a cabal update.  You can also try editing/deleting the cabal.config file.  It's a combination of the stackage nightly build and the list of packages that ghcjs globally installs (the ghcjs-boot --dev build anyways).

After running cabal update, I get

System/Random/MWC.hs:449:3:
    Could not deduce (Control.Monad.Primitive.PrimBase m)
      arising from a use of ‘unsafePrimToIO’
    from the context (PrimMonad m)
      bound by the type signature for
                 withSystemRandom :: PrimMonad m =>
                                     (Gen (PrimState m) -> m a) -> IO a
      at System/Random/MWC.hs:(438,21)-(440,54)
    Possible fix:
      add (Control.Monad.Primitive.PrimBase m) to the context of
        the type signature for
          withSystemRandom :: PrimMonad m =>
                              (Gen (PrimState m) -> m a) -> IO a
    In the expression: unsafePrimToIO
    In a stmt of a 'do' block:
      unsafePrimToIO $ initialize (I.fromList seed) >>= act
    In the expression:
      do { seed <- acquireSeedSystem
                   `E.catch` \ (_ :: E.IOException) -> do { ... };
           unsafePrimToIO $ initialize (I.fromList seed) >>= act }

ok, that's due to this: https://github.com/ghcjs/ghcjs-boot/issues/21
re-running ghcjs-boot should fix that.

ah, that might work, unf i cannot upgrade atm, i'm using ghcjs on nixos and there's no compiling version of ghcjs atm so i'm sticking to the one i have installed

Cool.  If you just want to try it quickly, delete the cabal.config file.


provide functions for turning parameters into domain dimensions

During the construction of a polyhedral model, it is not uncommon
for a statement instance set to be constructed from a description
in terms of the parameters at the point of the statement (including
the outer loop iterators) and a list of outer loop iterators
that will become the set dimensions of the instance set.
Prior to this PR, the only way of transforming
a description in terms of the parameters into one where
some of these parameters are reinterpreted as the set or domain dimensions,
is to call isl_*_move_dims.  However, the use of these functions
is discouraged.
This PR introduces functions for reinterpreting parameters
as set or domain dimensions.  The expected flow is that
the constraints are first formulated in terms of the parameter,
then an isl_multi_id object (a new type introduced in this PR)
is created that specifies which parameters should no longer
be considered parameters but should instead become part
of the instance set description.  This isl_multi_id object can
then be used to lift isl_set and isl_aff objects to refer
to the instance set.
The naming of the functions is meant to suggest that
the parameters are set free, i.e., that they are no longer
tied to a fixed (but unknown) value.
Suggestions for better names are welcome.
A potential application of these functions is available
in TC's test/unbind branch.

Sven, this looks very interesting. I did not have time to look in detail, but would like to go through this. I especially want to understand why you need a multi_id and a id_list is not sufficient. Hope to get to this later tonight.

5da2fe996686acadbb27388bffcbae9d77f7f900: typo "These functions"

430ec6a67b0653c4acf45ec52dc543c127794582: says "Conceptually, this declaration belongs to ISL_DECLARE_MULTI_DROP_DIMS," as if ISL_DECLARE_MULTI_DROP_DIMS already existed.  But the commit introduces this macro.  Not sure what was meant by this.

430ec6a67b0653c4acf45ec52dc543c127794582: why do we need dummy functions on space-less multis?
are these functions exposed?
why do we return the object without erroring when dropping dims from a multi without domain?  if we had tried to drop dimensions from a zero-dimensional domain, it would have complained presumably

430ec6a67b0653c4acf45ec52dc543c127794582: "make isl_multi_*_intersect_explicit_domain_product as (possibly) unused"  did you mean "mark"?

On Mon, Jun 11, 2018 at 03:43:43AM -0700, ftynse wrote:

430ec6a67b0653c4acf45ec52dc543c127794582: says "Conceptually, this declaration belongs to ISL_DECLARE_MULTI_DROP_DIMS," as if ISL_DECLARE_MULTI_DROP_DIMS already existed.  But the commit introduces this macro.  Not sure what was meant by this.

It's a typo.  It should be ISL_DECLARE_MULTI_DIMS.  Thanks,
skimo

On Mon, Jun 11, 2018 at 03:44:31AM -0700, ftynse wrote:

430ec6a67b0653c4acf45ec52dc543c127794582: why do we need dummy functions on space-less multis?

Do you mean e421e96fe8af6caf8d97e9ee8c5704693cb00953?
If so, then these functions are needed for the generic multi functions.

are these functions exposed?

They are not part of the public API, if that is what you mean.

why do we return the object without erroring when dropping dims from a multi without domain?  if we had tried to drop dimensions from a zero-dimensional domain, it would have complained presumably

The base expression doesn't keep track of a space, so nothing can go wrong
at this level.  The multi-expression takes care of any errors.
skimo

On Mon, Jun 11, 2018 at 03:44:36AM -0700, ftynse wrote:

430ec6a67b0653c4acf45ec52dc543c127794582: "make isl_multi_*_intersect_explicit_domain_product as (possibly) unused"  did you mean "mark"?

Yes.  Thanks,
skimo

On Mon, Jun 11, 2018 at 03:46:02AM -0700, ftynse wrote:

ftynse commented on this pull request.

@@ -2520,6 +2533,9 @@ Besides sets and relation, C also supports various types of functions.
Each of these types is derived from the value type (see L</"Values">)
or from one of two primitive function types
through the application of zero or more type constructors.
+As a special case, a multiple expression can also be derived
+from an identifier (see L</"Identifiers">) although the result
+is not really a function.

A multi_id cannot be converted to a multi_aff.

@@ -12,6 +12,9 @@ typedef struct isl_id isl_id;

ISL_DECLARE_EXPORTED_LIST_TYPE(id)
+struct __isl_export isl_multi_id;
isl_multi_id is introduced directly as exported
previous PRs seemed to export everything in separate commits to simplify upstreaming

It's because the functions on this type get exported automatically
(perhaps that was a mistake, but here we are).
Also, the main reason that I do the exports in a separate step
is that we have no C++ bindings in mainline.  Once we have those
again, it's not unreasonable to export functions immediately as they
are introduced.
skimo

On Mon, Jun 11, 2018 at 10:47:17AM +0000, ftynse wrote:

ftynse commented on this pull request.
ae7ec7f1a2243e8fe2198a86b633e8aa2a76267b: it looks like the function existed already, and its implementation was shorter.  If you prefer it this way, okay, but the commit message looks incorrect.

This is the version that is more likely to graduate to mainline.
Would it help if I remove the old version in a separate commit?
skimo

On Mon, Jun 11, 2018 at 03:48:02AM -0700, ftynse wrote:

ftynse commented on this pull request.

@@ -1937,6 +1937,74 @@ __isl_give isl_space *isl_space_named_set_from_params_id(
return space;
}

+/* Insert a domain tuple in "space" corresponding to the set space "domain".

In particular, if "space" is a parameter space, then the result

is the set space "domain".  If "space" is a set space, then the result

but the parameters are kept from "space"?  so the resulting space is not really the same as "domain"?

I'll update it to

In particular, if "space" is a parameter space, then the result
is the set space "domain" combined with the parameters of "space".

skimo

On Mon, Jun 11, 2018 at 03:50:54AM -0700, ftynse wrote:

ftynse commented on this pull request.

is_params = isl_space_is_params(space);
if (is_params < 0) {

isl_space_free(domain);

space = isl_space_free(space);

} else if (is_params) {

isl_space_free(space);

space = domain;

} else {

space = isl_space_map_from_domain_and_range(domain, space);

}
return space;
+}

+/* Internal function that introduces a domain in "space"

corresponding to the tuple space of "tuple".

This seems to be the first place in the codebase where "tuple space" is used.
I don't fully understand what it refers to.  Probably worth documenting.  Is it
just the (set) space of the multi_id?

Yeah, although the space of the multi_id could in theory be a map space.
I'll just use "range space" then.  I'm not really happy about it
(especially in case we're dealing with a set space), but it's what I use
in the user documentation.
skimo

On Mon, Jun 11, 2018 at 03:51:44AM -0700, ftynse wrote:

ftynse commented on this pull request.

is a map space with the original space as range.

Parameters that correspond to the identifiers in "tuple" are removed.

For pretty-printing purposes, the identifiers of the set dimensions

of the introduced domain are set to the identifiers in "tuple".

*/
+__isl_give isl_space *isl_space_insert_domain_from_unbound_params(
__isl_take isl_space *space, __isl_keep isl_multi_id *tuple)
+{
int i, n;
isl_space *tuple_space;

if (!space || !tuple)

return isl_space_free(space);

n = isl_multi_id_size(tuple);
for (i = n - 1; i >= 0; --i) {

Why do we need to iterate in the inverse order here?

It's not strictly needed.  It's a (heuristic) micro-optimization.
I added this to the comment:

The parameters are removed in reverse order (under the assumption
that they appear in the same order in "multi") because
it is slightly more efficient to remove parameters at the end.

skimo

On 11/06/2018 13:12, skimo-openhub wrote:

On Mon, Jun 11, 2018 at 10:47:17AM +0000, ftynse wrote:

ftynse commented on this pull request.
ae7ec7f1a2243e8fe2198a86b633e8aa2a76267b: it looks like the function
existed already, and its implementation was shorter. If you prefer it
this way, okay, but the commit message looks incorrect.

This is the version that is more likely to graduate to mainline.
Would it help if I remove the old version in a separate commit?

Commit message says "add isl_id_read_from_str".  If you change that, the
commit itself is fine as it is.

—
You are receiving this because your review was requested.
Reply to this email directly, view it on GitHub
https://github.com/nicolasvasilache/isl/pull/141#issuecomment-396207639,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABcTa8z78H_50dAp-Frcw2341b-bz3Kdks5t7lCQgaJpZM4UcXfU.

On 11/06/2018 13:59, skimo-openhub wrote:

On Mon, Jun 11, 2018 at 03:50:54AM -0700, ftynse wrote:

This seems to be the first place in the codebase where "tuple space"
is used.
I don't fully understand what it refers to. Probably worth
documenting. Is it
just the (set) space of the multi_id?

Yeah, although the space of the multi_id could in theory be a map space.

A map space or a wrapped map space?

I'll just use "range space" then. I'm not really happy about it
(especially in case we're dealing with a set space), but it's what I use
in the user documentation.

I was mostly wondering about the reason behind the new term. Usually,
less terms are better as long as you don't have to overload their
meaning.  Range space would work for me here, I think.  Tuple space
sounds confusing with tuple id in the likes of isl_space_set_tuple_id.

skimo
—
You are receiving this because your review was requested
Reply to this email directly, view it on GitHub
https://github.com/nicolasvasilache/isl/pull/141#issuecomment-396218650,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABcTazC1baZ2quyPdbaJ_iAShv2-hXbDks5t7luSgaJpZM4UcXfU.

On Mon, Jun 11, 2018 at 01:36:30PM +0000, ftynse wrote:

On 11/06/2018 13:59, skimo-openhub wrote:

On Mon, Jun 11, 2018 at 03:50:54AM -0700, ftynse wrote:

This seems to be the first place in the codebase where "tuple space"
is used.
I don't fully understand what it refers to. Probably worth
documenting. Is it
just the (set) space of the multi_id?

Yeah, although the space of the multi_id could in theory be a map space.

A map space or a wrapped map space?

A map space.  (For a wrapped map, it wouldn't be an issue.)
skimo

This is the main review (cc @tobig)
So the multi_id thing is a essentially a list of ids that is living in some space as opposed to an id_list which does not have an associated space.  The parameters of the space may or may not contain the the ids of the space.  The idea seems to work, I mostly have conceptual questions here.
I'm not fully convinced it makes sense to have in a multi_id that are not parameters of the space where the multi_id lives.   Especially when it comes to transforming a parametric set into a non-parametric one.  It creates room for tricky to catch naming errors, e.g., unbinding the non-existent parameter because of typo in its name silently creates an unconstrained dimension.  Is there a use case for this feature?

A multi_val is a constant function and can be converted to a multi_aff.
A multi_id cannot be converted to a multi_aff.

It almost feels like you are forcing the multi abstraction on something that is not really a multiple expression.  Or maybe the existing multi_* just have too many other functions that they outgrew the "list in a space" abstraction and became something more, like a vector-valued function.  Thinking that multi_vals are as special as multi_id helps, but they are not really as special because they have, e.g., arithmetic.  I understand it's code and API reuse, but it somehow feels artificial.  No formal objection though.

It looks like the first dozen of commits are transforming opt-out C macro mixins into opt-in, making multi_* only use opt-in behavior.  This looks like a goal by itself.  Does this mean that other macro-generics will go in the same direction later?
In these commits, I wonder about the chosen granularity of implementation files.  Is it necessary, for example, to separate functions multi_*_zero from multi_*_nan from multi_arith?  Conceptually, zeros may be a part of arithmetic and so can be NaNs.  Are there use cases where one is necessary but not the others?

My proposition for names is isl_set_unbind_params and isl_set_unbind_params_to_domain, with a "unbind" as a verb. It's shorter, and also isl_set_from_* looks like a constructor while unbinding is essentially re-interpreting an existing set.  In C++ interface, it would look as mySet.unbind_params(myMultiId) as opposed to mySet.from_unbound_params(myMultiId) which contrasts with isl::set::from(myUnionSet) and looks confusing as to how exactly myMultiId is used in construction.
Actually, one C++ interface improvement here could be an initializer-list function with syntax mySet.unbind_params({"N", "M"}).

Is there a plan to make unbinding progressive?  That is, instead of only transforming a parametric space into a set space or a set space into a map space, to append unbound dimensions to the domain (whether empty or not).
Similarly, is there a plan to add a function to bind some dimensions to parameters.  In this case, the former functionality can be achieved by binding all dimensions back and then unbinding them again and managed by the caller.

On Mon, Jun 11, 2018 at 02:27:28PM +0000, ftynse wrote:

This is the main review (cc @tobig)
So the multi_id thing is a essentially a list of ids that is living in some space as opposed to an id_list which does not have an associated space.  The parameters of the space may or may not contain the the ids of the space.  The idea seems to work, I mostly have conceptual questions here.
I'm not fully convinced it makes sense to have in a multi_id that are not parameters of the space where the multi_id lives.   Especially when it comes to transforming a parametric set into a non-parametric one.  It creates room for tricky to catch naming errors, e.g., unbinding the non-existent parameter because of typo in its name silently creates an unconstrained dimension.  Is there a use case for this feature?

Automatic parameter alignment does the same.
If you apply a binary operation on sets and one of them
has a parameter with the wrong name, then it will just be instantiated
without any constraints.
I get the feeling the automatic parameter alignment is generally considered
a good thing and there are even calls to do it on more object types.
I could make it fail if a parameter is missing, but then I think users will
just add calls to insert all the required parameters right before the unbind call.
(I know I do that on isl_aff operations, which do not perfrom
automatic parameter alignment.)
So, I think this is a case of DWIM'ing.

A multi_val is a constant function and can be converted to a multi_aff.
A multi_id cannot be converted to a multi_aff.

It almost feels like you are forcing the multi abstraction on something that is not really a multiple expression.  Or maybe the existing multi_* just have too many other functions that they outgrew the "list in a space" abstraction and became something more, like a vector-valued function.  Thinking that multi_vals are as special as multi_id helps, but they are not really as special because they have, e.g., arithmetic.  I understand it's code and API reuse, but it somehow feels artificial.  No formal objection though.

I agree that it's not a perfect match, but I still think it sort
of works out and it's better than any alternative I could think of.

It looks like the first dozen of commits are transforming opt-out C macro mixins into opt-in, making multi_* only use opt-in behavior.  This looks like a goal by itself.  Does this mean that other macro-generics will go in the same direction later?

Yes, but only at the point where it is needed.

In these commits, I wonder about the chosen granularity of implementation files.  Is it necessary, for example, to separate functions multi_*_zero from multi_*_nan from multi_arith?  Conceptually, zeros may be a part of arithmetic and so can be NaNs.  Are there use cases where one is necessary but not the others?

I don't know what other multi expressions (if any) will be added later,
so it's difficult to say.  Zero is certainly special because
it needs to construct a canonical zero object.  In particular,
isl_multi_union_pw_aff_zero only works in the zero-dimensional case
and it was arguably a mistake to introduce it in the first place.

My proposition for names is isl_set_unbind_params and isl_set_unbind_params_to_domain, with a "unbind" as a verb. It's shorter, and also isl_set_from_* looks like a constructor while unbinding is essentially re-interpreting an existing set.  In C++ interface, it would look as mySet.unbind_params(myMultiId) as opposed to mySet.from_unbound_params(myMultiId) which contrasts with isl::set::from(myUnionSet) and looks confusing as to how exactly myMultiId is used in construction.

What name would you propose for isl_set_insert_domain_from_unbound_params?
skimo

Automatic parameter alignment does the same.
...

Ok, this makes sense in context of automatic alignment.

What name would you propose for isl_set_insert_domain_from_unbound_params?

isl_set_unbind_params_to_domain or isl_set_unbind_params_insert_domain


Create a tutorial that shows how to query multiple reaches in parallel.

Create a tutorial for the PO.DAAC cookbook that demonstrates how to query multiple reaches in parallel.

Thanks Nikki! I can take care of all the logistics of formatting the tutorial & putting it in the Cookbook & documentation, but I will need your help on the process/code to actually do this.

Started template for tutorial on a 'Hydrocron_example' branch of the tutorials repo here: https://github.com/podaac/tutorials/blob/Hydrocron_example/notebooks/datasets/Hydrocron_SWOT_timeseries_examples.ipynb

For using FTS to obtain reach IDs, I'm stuck on getting the results from the next page of responses, there's a cap of 100 results per page and thus far 30 minutes of Googling has not yielded working results... would appreciate insight if you already know how to do this when you work on it next week, Nikki!

Can you share the command you are using to query FTS by reach ID? Then I can play around with it!

Savannah_reaches = requests.get("https://fts.podaac.earthdata.nasa.gov/rivers/reach/732520")
pprint.pprint(Savannah_reaches.json(), compact=True, width=60, depth=2)
This is only a partial result from page 1, how do we also append from the rest of the pages in the response?
IDs = list(Savannah_reaches.json()['results'].keys())

@cassienickles - I have updated the notebook with a rough sketch of using Dask to query Hydrocron by reach id in parallel (which were retrieved from FTS by river name).
You can ignore the "Shuffle" warnings for now. I also couldn't figure out how to filter out missing data on the Dask DataFrame but was able to do so using a regular Pandas DataFrame. So I would like to explore that more as the plotting library I used works well with Dask.
We could also remove Dask as I am not sure how much it is buying us unless we wanted to try to load in hundreds of reach identifiers which I think I will try doing!!
Here is the final plot that gets created.

Totally open to feedback on any modifications to the tutorial and how to visualize the multiple reach time series!

I like your thought process, Nikki! I added some markdown explanations and made it flow a bit more like a tutorial and committed back to the branch!
One thing I notice right away, the dates are being plotted as strings rather than datetime format so the time series looks pretty wonky. I tried to go in and fix it but I don't know the correct way to do this for dask dataframe. I tried what I usually would for a pandas dataframe:
ddf.time_str = pd.to_datetime(ddf.time_str)
and get an error that the length of values don't match... Thoughts? How do we fix this with a dask dataframe?
I think the benefit of dask would be to load in hundreds of reachIDs, would love to hear the results if you mess around with this.

Ah yes!! That worked, thanks @nikki-t, I didn't realized the difference between dd and pd haha. I committed the latest change.
Great! We'll chat more on this tomorrow.

@cassienickles - I have updated the notebook to a more final form, let me know what you think! Happy to provide more explanation around the different functions or code snippets. We also need to provide a citation for Hydrocron.


Add GitHub action for code quality checks

Adds a new GitHub Actions workflow file to automate code quality checks and build validation.

Workflow Configuration: Introduces go-code-check.yml in the .github/workflows directory, specifying the workflow name as "Go Code Check".
Trigger Events: Configures the workflow to activate on push and pull request events targeting the main branch.
Job Setup: Defines a job that runs on ubuntu-latest, including steps for checking out the code and setting up the Go environment with version 1.21.
Commands Execution: Executes make to build the project and go vet ./... to perform static code analysis.

For more details, open the Copilot Workspace session.

Introduces a GitHub Actions workflow for Go code checks on push and pull request events to the main branch.

Adds a new workflow file .github/workflows/go-code-check.yml with the following features:

Triggers on push and pull request events to the main branch.
Sets up a job that runs on the latest Ubuntu runner.
Checks out the code using actions/checkout@v4.
Sets up Go environment with version 1.21 using actions/setup-go@v5.
Executes make to build the project.
Runs go vet ./... to perform static code analysis.

For more details, open the Copilot Workspace session.

Introduces a GitHub Actions workflow for Go code checks and updates method naming in the project's interface and implementations.

Adds a new GitHub Actions workflow named Go Code Check to run on push and pull request events to the main branch. This workflow sets up Go environment, builds the project, and runs go vet for code analysis.
Renames the New method to Init in the Runner interface and its implementations across NativeSSHRun and defaultRunner structs to align with updated interface requirements. This change ensures consistency in method naming and initialization process across different runners.

For more details, open the Copilot Workspace session.


Assertion failure with annotations

Minimal example:
actor Main
  new create(env: Env) =>
    if \likely\ U32(1) == 1 then
      None
    end

Using annotations on an expression results in an assertion failure:
src/libponyc/ast/ast.c:737: setannotation: Assertion `!hasparent(annotation) && (annotation->annotation_type == NULL)` failed.
Backtrace:
#2  0x0000000000502349 in ponyint_assert_fail (expr=0x50a12c "!hasparent(annotation) && (annotation->annotation_type == NULL)", file=0x509f07 "src/libponyc/ast/ast.c",
    line=743, func=0x50a11e "setannotation") at src/libponyrt/platform/ponyassert.c:60
#3  0x0000000000432ddb in setannotation (ast=0x7ffff0559300, annotation=0x7ffff0490d80, allow_free=true) at src/libponyc/ast/ast.c:742
#4  0x0000000000433022 in ast_setannotation (ast=0x7ffff0559300, annotation=0x7ffff0490d80) at src/libponyc/ast/ast.c:769
#5  0x0000000000431cb0 in duplicate (parent=0x7ffff0524a80, ast=0x7ffff2f47c40) at src/libponyc/ast/ast.c:361
#6  0x0000000000431d1c in duplicate (parent=0x7ffff0524a80, ast=0x7ffff2f495c0) at src/libponyc/ast/ast.c:368
#7  0x0000000000431d1c in duplicate (parent=0x7ffff0524a80, ast=0x7ffff2f49bc0) at src/libponyc/ast/ast.c:368
#8  0x0000000000431c7c in duplicate (parent=0x7ffff0492cc0, ast=0x7ffff2f48a40) at src/libponyc/ast/ast.c:359
#9  0x0000000000431d1c in duplicate (parent=0x7ffff0492cc0, ast=0x7ffff2f49e80) at src/libponyc/ast/ast.c:368
#10 0x0000000000431d1c in duplicate (parent=0x7ffff0492cc0, ast=0x7ffff2f473c0) at src/libponyc/ast/ast.c:368
#11 0x0000000000431d1c in duplicate (parent=0x7ffff0492cc0, ast=0x7ffff2f49d80) at src/libponyc/ast/ast.c:368
#12 0x0000000000431d1c in duplicate (parent=0x7ffff0492cc0, ast=0x7ffff2f4a080) at src/libponyc/ast/ast.c:368
#13 0x0000000000431d1c in duplicate (parent=0x7ffff0492cc0, ast=0x7ffff2f4a7c0) at src/libponyc/ast/ast.c:368
#14 0x0000000000431d1c in duplicate (parent=0x7ffff0492cc0, ast=0x7ffff2f4a780) at src/libponyc/ast/ast.c:368
#15 0x0000000000431c7c in duplicate (parent=0x0, ast=0x7ffff2f4a6c0) at src/libponyc/ast/ast.c:359
#16 0x0000000000431b4c in ast_dup (ast=0x7ffff2f4a6c0) at src/libponyc/ast/ast.c:452
#17 0x00000000004e11f4 in viewpoint_replace (ast=0x7ffff2f4a6c0, target=0x7ffff0534b40, with=0x7ffff0562480) at src/libponyc/type/viewpoint.c:388
#18 0x00000000004e1545 in viewpoint_replacethis (ast=0x7ffff2f4a6c0, with=0x7ffff0562480) at src/libponyc/type/viewpoint.c:396
#19 0x00000000004f2c9a in lookup_nominal (opt=0x7fffffffe258, from=0x7ffff0562480, orig=0x7ffff0562480, type=0x7ffff0562480, name=0x7ffff3527f40 "create", errors=true)
    at src/libponyc/type/lookup.c:161
#20 0x00000000004f20c4 in lookup_base (opt=0x7fffffffe258, from=0x7ffff0562480, orig=0x7ffff0562480, type=0x7ffff0562480, name=0x7ffff3527f40 "create", errors=true)
    at src/libponyc/type/lookup.c:355
#21 0x00000000004f1f37 in lookup (opt=0x7fffffffe258, from=0x7ffff0562480, type=0x7ffff0562480, name=0x7ffff3527f40 "create") at src/libponyc/type/lookup.c:384
#22 0x0000000000485cc6 in genexe (c=0x7fffffffdda8, program=0x7ffff352fd40) at src/libponyc/codegen/genexe.c:382
#23 0x000000000046b47b in codegen (program=0x7ffff352fd40, opt=0x7fffffffe258) at src/libponyc/codegen/codegen.c:1000
#24 0x000000000044b4c3 in generate_passes (program=0x7ffff352fd40, options=0x7fffffffe258) at src/libponyc/pass/pass.c:291
#25 0x000000000043099d in compile_package (path=0x50cd5e ".", opt=0x7fffffffe258, print_program_ast=false, print_package_ast=false) at src/ponyc/main.c:245
#26 0x00000000004307d4 in main (argc=1, argv=0x7fffffffe3c8) at src/ponyc/main.c:367

It looks like the annotation node gets a type assigned to it. It doesn't happen when annotating a type declaration, only when annotating an expression.
According to git bisect, this bug was introduced in f788bb9.

Yep, this assert was introduced in #1649, but the weird behaviour of the annotation being assigned a type may have existed before the assert was present.
Is there any legitimate reason for an annotation node to get a type assigned to it? I think not, but just wanted to confirm with you.

I don't think there is. I tried to look where the annotation was getting a type assigned to it but I couldn't find the location.


I have added the program for the removal of cycle in linked list in c…

…, c++, python and JAVA

🛠 Issue (759)

Issue no #759
👨💻 Changes proposed

Changes proposed in PR:
Added code for the removal of linked list cycle "RemoveCycle"
in Python, C++, C, JAVA
✔ Check List (Check all the applicable boxes)

[✅ ] My code follows the code style of this project.
[✅ ] This PR does not contain plagiarized content.
[✅ ] The title of my pull request is a short description of the requested changes.

📄 I have added the code for Removal of linked list cycle in C, C++,Python, Java

@Kumar-laxmi Please look into my code.


Table Relation Recipient Bank Account

I've tried for the first time to modify a table relation so I've been testing the following in new development:
On Payment Journal the "recipient bank account" should not load the bank accounts from the "vendor no." but the bank accounts from the "Factoring vendor no." if its filled which is a specific field related with vendor table.
So I've changed the default table relation from the field "recipient bank account" to this:

In Yellow are my changes to the standard relation.
Since the behaviour is the same as the standard, my question is: Do the standard relations overwrite changes on already existing relations?

This issue is a question. Please submit your questions on business central community  or on BC development yammer groups.


Version 2 RFC

Hey all!
This library has moved to feathers-ecosystem. Along with that move, I would like to make some updates and improvements. The library is amazing, but hasn't received the adoption I believe it deserves. I have used it in many production apps with a few different patterns and have landed on what I believe to be some nice additions to the library.
Before reading further, you should be familiar with DataLoader (also see this  great video about the source code). You can also checkout the docs directory for some detailed examples of how the current implementation works and its benefits.
First things first, this package should be renamed to feathers-dataloader or feathers-loader. There is already a complimentary (yes, they are complimentary and not competitors) package feathers-batch. So to avoid confusion, this package should be renamed. For the remainder of this blurb, I will refer to the "BatchLoader" as "DataLoader" to reflect this change. Long story short BatchLoader === DataLoader.
The Problem
Using dataloaders requires the developer to instantiate a new class every time they want to use a loader, and these classes require lots of config. This causes the developer to duplicate configuration (mainly local/foreign key relationships), It also causes the developer to know ahead of time which loaders are going to be used in any given request. For example,
const usersLoader = DataLoader.loaderFactory(
  app.service("users"), // service
  "id", // foreignKey
  false // multi
);

const postsLoader = DataLoader.loaderFactory(
  app.service("posts"),
  "user_id",
  false
);

This may not seem painful at first. Its explicit and can offer some great performance benefits. But, as you use more loaders and your loaders get more complicated the problem starts to get unwieldy. Because calls to load() are batched, params must be static. You cannot pass different params to each load. For example,
// A loader to load the post author. We want to load the whole user
const authorsLoader = DataLoader.loaderFactory(
  app.service("users"),
  "id",
  false
);

// A loader to load users onto comments. We don't want the full user and just need
// the name and email
const usersLoader = DataLoader.loaderFactory(
  app.service("users"),
  "id",
  false,
  { query: { $select: ['name', 'email'] } }
);

Bummer, we had to create two loaders because params must be static within the class instance. This problems grows even further when you want to have variable params per load() call. This is not currently possible.
const usersLoader = DataLoader.loaderFactory(
  app.service("users"),
  "id",
  false
);

const query = post.private ? { $select: ['name'] }  : { $select: ['name', 'email', 'bio'] }
const user = await usersLoader.load(1, { query }) // not possible

The Solution
Create a syntax and pattern that makes using dataloaders easier and more approachable. Specifically, dataloaders should be lazily created as needed. This solution introduces two new classes ServiceLoader and LazyLoader.
The ServiceLoader lazily creates DataLoaders for a particular service. It creates a new DataLoader for any given set of id and params. This allows the developer to create one loader for a service, and then use any combination of local/foreign key relationships and params.
const usersLoader = new ServiceLoader(app.service('users'));

const user1 = await usersLoader.load(1) // creates a new DataLoader
const user2 = await usersLoader.load(2) // uses the same DataLoader as above

const user3 = await usersLoader.load(3, { query: { $select: ['name', 'email'] } }) // creates a new DataLoader
const user4 = await usersLoader.load(4, { query: { $select: ['name', 'email'] } }) // uses the same DataLoader

// The service loader allows for multiple local/foreign key relationships in the same loader
const user5 = await usersLoader.load(5) // uses the users' service default "id" key
const user5 = await usersLoader.load({ id: 5 }) // define the foreignKey adhoc (same as above bc "id" is default)
const user5 = await usersLoader.load({ user_id: 5 }) // use any key

// Furthermore, you can use variable params
const query = post.private ? { $select: ['name'] }  : { $select: ['name', 'email', 'bio'] }
const user = await usersLoader.load(1, { query }) // this is now possible!

The LazyLoader is a super simple class that lazily constructs ServiceLoaders.
// use this in app.hooks() before all
const initializeLoader = context => {
  const lazyLoader = new LazyLoader();
  context.loader = lazyLoader.loader;
  // or
  context.params.loader = lazyLoader.loader;
};

// Now the developer does not have to setup any loaders throughout the rest of the request.
const user = await context.loader('users').load(1)  // lazily creates the ServiceLoader and then a DataLoader

This accomplishes a very convenient, natural, service-like interface. The developer really doesn't need to know anything about ServiceLoaders, DataLoaders, etc, etc. If the developer knows how to use a service, they basically know how to use a loader.
// Remove this in your hooks
const user = await app.service('users').get(1);

// Replace it with this
const user = await context.loader('users').load(1);

Thats the general gist! I wanted to make dataloaders as convenient and approachable as possible and I think this mostly accomplishes that. I recently replaced my older implementations of loaders in a production app with this new version and it was a drop in replacement that went really well!
So some things I need feedback on

Should I remove the default key and only allow passing an "id object"?  In an attempt to make this as "service like" as possible, I allowed the load() method to take two different shapes. You can pass just an id, or an "id object".

// Use the service's id that was defined in its options. This makes sense and is convenient.
loader.load(1);

// The developer needs to be able to define the local/foreign key relationship. So they can pass an object with
// exactly one property where the property is the name of the foreign key.
loader.load({ id: 1 });
loader.load({ user_id: 1 });
loader.load({ some_foreign_key: 1 });

// While its "convenient" to just pass the id, it could be a source of confusion, which is what I am aiming
// to avoid...and passing { id: 1 } is not that painful.
// loader.load(1); // remove
loader.load({ id: 1 }); // must always pass "id object"

Is the extra params concept bad? Any other solutions? The ServiceLoader uses a deterministic stringify function to create keys for the underlying cache map. This also means that the developer cannot put functions into the params. I want to keep the experience as service-like as possible, but it is certainly different to split your params into two arguments. For example,

loader.load({ id: 1}, { query: { $select: ['name', 'email'] } });
// under the hood we stringify this
const key = stableStringify([{ id: 1}, { query: { $select: ['name', 'email'] } }]);

// This will throw an error if you pass functions, models, transactions, etc
loader.load({ id: 1}, { query: { $select: ['name', 'email'] }, user, transaction, loaders, etc });

// So instead, the `load` method takes a third argument `extraParams`. These params are not
// strinigified into the key but are passed to the service. This could be error prone...it could
// return different results on each call even though the key is the same. The developer has
// to be aware of this. In 99% of my use cases I haven't had to use it and when I have it works
// as expected, but there is margin for error there.
loader.load({ id: 1}, { query: { $select: ['name', 'email'] } }, { user, transaction, loaders, etc });

Is there another solution where we combine the id object and query into one argument? The above solution works pretty well and makes sense to me, but I feel like someone out there may have a better solution.

Other cached methods. Should they stay or go?. When building this, I actually built in cached get() and find() methods. These have their use cases, but I don't want the classes to be too convoluted.

loader('users').get(1)
loader('users').get(1) // cache hit

loader('users').find()
loader('users').find() // cache hit

I have found use cases for these. The get() method is almost always easily replaced with load(), but there are some cases where you want to throw an error if id not found, or if the request must be a get and not a find (which load does under the hood) for some hooks/auth reason. The cached find() definitely has value because there are cases where you simply don't have a local/foreign key relationship, but can still benefit from caching
// For example, I have a `directions` service that calls the Google directions service,
// which costs money per request. It also does not have a local/foreign key relationship
const directions = context.loader('directions').find({
  query: { origin: result.origin_location, destination: result.destination_location }
})

Bonus thoughts

I want to show an example of the most complicated and the simplest this can be. I want this to be as convenient as possible, but if the developer needs ALL the options...they have to pass theme somewhere. My goal is simplicity, but at the end of the day those options still have to be available.

// Easy Peasy
const user = await context.loader('users').load(1);
// or...depending on where we land on question #1
const user = await context.loader('users').load({ id: 1 });

// Full config
const user = await context
  .loader('users', { matchBaxSize: 20, cache: false }) // you can actually pass low level DataLoader config here
  .load({ id: 1}, { query: { $select: ['name', 'email'] } }, { user, transaction, loaders, etc })

I want to point out that this isn't all about populating/joining. This concept has lots of potential for any service calls throughout a request. For example, validation, data creation, etc.

// Validate the incoming user_id is valid
const validate = async context => {
  const user = await context.loader('users').load(data.user_id);
  if (!user) {
    throw new Error('Invalid User ID')
  }
};

// Populate users onto posts
const withResults = withResult({
  user: (post, context) => context.loader('users').load(post.user_id)
});

app.service('posts').hooks({
  before: {
    create: [validate]
  },
  before: {
    all: [withResults]
  },
})

const data = { user_id: 1, body: '...' };

app.service('users').create(data);
// So we get lots of performance gains here...by using `load()` in the validation,
// the lookups to the user service are batched/cached. Furthermore, the lookups in the
// `withResult` are totally free! We are populating the same user as the user_id we validated.

Loaders are most advantageous when we pass them to nested service calls. The common example would be loading a user and comments onto a post, then passing the loader to the comments that further load the commenter.

// use this in app.hooks() before all
const initializeLoader = context => {
  if (!context.params.loader) {
    const lazyLoader = new LazyLoader();
    context.params.loader = lazyLoader.loader;
  }
};

const user = context.params.loader('users').load(post.user_id)
const comments = context.params.loader('comments').load(post.id, null, { loader: context.params.loader });
// We have already loaded some users, so when passing the loader to the comments service
// which will load on their own user_id, the loader is already primed and gets some for free

This gets really exciting/convenient when considering https://github.com/feathersjs/feathers/issues/2074.
Conclusion
Thanks for reading all this! Any and all feedback is welcome! I would specifically like some feedback on the 3 questions above, but anything else is definitely appreciated too.

I would love some feedback from @marshallswain , @DesignByOnyx, @mrfrase3, @KidkArolis, @fratzinger, @robbyphillips. And of course anyone else! Just pinging ya'll to bring some awareness to this post.

Unfortunately, I don't have much to add as I do population on the client-side. But keep up the good work!

@mrfrase3 This totally works client side too 👍.
Checkout test-feathers-client-joins which is a little test bed and thought experiment on the matter. Its a bit dated, but shows that dataloaders can be used on the client too.

I have created an example app showing how all of this works.

View the Demo. The app is on a free Heroku instance, so it may take a few seconds or you may need to reload the page on cold start.
Checkout the demo source code. Although it's written in React, it is not react specific.
Watch the 5min video of me rambling and say "uhhh" a bunch 🤷

After some further consideration and further use in my own production apps. I have really come around on @daffl suggestion of removing the the extraParams argument and adding a paramWhitelist argument.
I have found myself doing this a lot:
context.params.loader('comments').load(post.id, null, { loader: context.params.loader });
// and/or
context.params.loader('comments').load(post.id, null, { transaction: context.params.transaction });

Note that we have to pass null as the second argument because the "params to stringify" cannot contain functions, classes, etc. So whenever we are dealing with loaders, transactions, or any other function/class things get ugly. Its not SO ugly when you are actually passing some other params like this
context.params.loader('comments').load(post.id, { query: {...} }, { loader: context.params.loader });

But I just hate having to pass null to "skip" arguments. The Dataloader is most advantageous when we pass it along to other service calls, so this problem is in direct opposition to the whole point of using Dataloader.
Instead, I am going to update the code such that it takes some config that is a "whitelist" of params to stringify into the cache key. This would probably be set to ['query'] or maybe ['query', 'user'] by default. So the above code would just be
// the stringified cache key is just the post.id
context.params.loader('comments').load(post.id, { loader: context.params.loader });

// the stringified cache key is the post.id and query
context.params.loader('comments').load(post.id, {
  query: { ...the query },
  loader: context.params.loader
});

// can also pass in a whitelist as third param to override default
context.params.loader('comments').load(post.id, {
  query: { ...the query },
  myParam: { ...my custom param }
  loader: context.params.loader
},
['query', 'myParam']
);

I will like update the ServiceLoader and LazyLoader classes to accept this config as well. Maybe something like this
const serviceLoader = new ServiceLoader({
  whitelist: ['query', 'myParam'],
  ...other dataloader config like maxBatchSize, etc
})

const lazyLoader = new LazyLoader({
  users: {
    whitelist: ['query', 'myParam'],
    ...other dataloader config like maxBatchSize, etc
  },
  comments: {
    whitelist: ['query', 'myParam', 'anotherParam'],
  .  ..other dataloader config like maxBatchSize, etc
  }
})

Another random thought, which I think is quite exciting. I have been thinking of this mainly as a loader is created at the beginning of a service call (probably via app:before:all hook) and then manually passed to all "nested" service calls. That loader lives and dies in the course of that single request and that is an important aspect because it makes a loader different than a cache (which has to be invalidated). That is the most natural way to think of this and what most of my examples and tests reflect. But, there is no reason that multiple service call's can't use the same loader. For example,
const lazyLoader = new LazyLoader();
const loader = lazyLoader.loader;
await Promise.all([
  app.service('users').get(1, { loader }),
  app.service('posts').find({ query: { published: false }, loader }),
  app.service('posts').find({ query: { published: true }, loader }),
]);

There are times when a developer knows that multiple "requests" can share a loader and can manually create one and pass it to all of them. This is going to offer even more performance benefit.
This would also pair well with feathers-batch. Generally, we wouldn't use feathers batch when using a socket client because the benefits just aren't as great as using rest. We also don't use it server side (I don't think it really supports server side use at the moment). But, if server side /batch endpoint created a loader and passed it to all of its services that its running...it would be beneficial to use it via sockets or even server side.

This looks incredible! I use current batch loader all over the place in our production app (thank you very much for it, along with fastJoin it decreased api response times in orders of magnitude). Can't wait to try v2 out when it gets released. However, I'm wary if something of the current functionality could be gone? Also, would it be a drop-in replacement for current version batch loader, so that I could refactor my code gradually? Or at least require some small-ish changes like just changing a require? I can't really refactor everything at once...

@1valdis The underlying BatchLoader class will not change, except possibly be renamed to DataLoader. So the upgrade path should be very easy. All of this new functionality is added via two new classes called ServiceLoader and LazyLoader. Perhaps ContextLoader is actually a better name for LazyLoader.
Currently, the ServiceLoader has a method called loadMany but it is different than the BatchLoader method of the same name. That method actually works like a BatchLoader that is configured to use "multi" (aka [1] config). Previously you could not have oneBatchLoader that handled both "single" and "multi" loading. The ServiceLoader actually has two BatchLoaders under the hood where load(1) and load([1]) both call the "single" loader and loadMany(1) and loadMany([1]) both call the "multi" loader. But I am afraid that will be confusing...so I was considering removing loadMany from the BatchLoader totally because it is really just syntactic sugar over Promise.all(keys.map(key => this.load(key))). My other thought is to change the method names on the ServiceLoader to load and loadMulti. I have also considered changing them to something like hasOne and hasMany to better align with names we use when talking about DB relationships.
Considering your comment about the upgrade path I will not remove loadMany from BatchLoader and will rename loadMany on the ServiceLoader to something else. As someone who has lots of experience with this tool, I would really appreciate any feedback you have on it! I am using it in a production app now and it cleaned up lots of config and works great. I am confident everything works well...but am hung up on naming things. So any input is greatly appreciated!

@DaddyWarbucks as for our usage, we have abstracted batch loader creation into a factory, because, as you've mentioned, it requires quite a few settings to create (I don't say it's a bad thing! I'd rather have something I can easily customize instead of something so dumb it can do only a simple job).
Then, we currently have 58 batch loader factories on top of that one, most of which are just one factory per service, some however doing things like count+groupBy. Each request is wrapped in a transaction so all calls pass it around as well. In total I found 267 calls to .load() method in our codebase, all in fastJoin hooks. The project is over 3 years old but the amount of calls counts up as more functionality is added even now.

We also use additional query like everywhere, and in the very basic factory we spread it like this:
{
  [key]: { $in: getUniqueKeys(keys) },
  ...query,
}

context.params.sequelize and paginate: false are always in there too.
As for the questions asked in the starting post.

I woudn't mind if it only allowed passing an id object. I think most of our usage would be through the object form anyway. It would also simplify TypeScript typing I guess.
I wonder if instead of having the array of "whitelisted" params, you could have users to pass a function to generate the cache key? Remember those getResultsByKey and getUniqueKeys functions you have, they're as convenient as it gets. So you might take inspiration from this and do something like... (excuse me if there's something dumb)// by default
context
  .loader('users', { getCacheKey: stringifyIdAndParams(['query']))
  .load({ id: 1 })
// which is equal to
context
  .loader('users')
  .load({ id: 1 })
// but if we want maximum customization
context
  .loader('users', { getCacheKey: (context) => { /* stringify however you want, called on load call */ } })
  .load({ id: 1 })

Now hypothetically you could pass an id, and a params object containing both query and everything else needed for a service call. With this sorted out to 2 arguments (id and params), you might also have a third optional argument containing batch loader specific options - including overriding getCacheKey. Example:const loader = await context.loader('users', {
  maxBatchSize: 20,
  getCacheKey: stringifyIdAndParams(['query', 'myWhitelistedParam'],
});

// cached key takes id, query, and myWhitelistedParam
const user = await loader.load(
  { id: 1 },
  {
    myWhitelistedParam: 'hello world',
    query: { deletedAt: null },
    transaction: context.params.transaction,
   },
);

// key caching function is overridden so it only takes id and query
const anotherUser = await loader.load(
  { id: 2 },
  {
     myWhitelistedParam: 'hello world',
     query: { deletedAt: null },
     transaction: context.params.transaction,
  },
  {
    getCacheKey: stringifyIdAndParams(['query'],
  }

To me it just feels weird I can't pass params like I usually would and would have to split them. The example above doesn't require splitting things out of params, as well as passing an array each time you call load. You'd only have to do it when you need to specifically override the cache key generator.
No preference really. I don't think I'd use them.
Hopefully that helps :)

I have updated this as per some of our discussions in this thread.

Instead of passing an extraParams argument, the third argument is now a filterParams argument. This can be an array of string properties or a function, with it defaulting to ['query', 'user', 'authentication']. This is similar to how both @daffl  and @1valdis recommended. For example,

// The following would only keep `query`
loader('posts').load(1, { query: { published: true }, myProp: true } });

// The following would keep `query` and `myProp`
loader('posts').load(1, { query: { published: true }, myProp: true } }, ['query', 'myProp']);

// The following would aslo keep `query` and `myProp`
loader('posts').load(1, { query: { published: true }, myProp: true } }, params => {
  return { query: params.query, myProp: query.myProp }
});

The LazyLoader.loader() method has been renamed to LazyLoader.service() to better align with naming conventions. This means most of the examples above would change. The LazyLoader is actually called ContextLoader too. It has always been that way in code, but I called it LazyLoader for some reason in this thread.

const contextLoader = new ContextLoader(context);
contextLoader.service('users').load(1)

The ServiceLoader.loadMany() method has been changed to ServiceLoader.loadMulti(). I have gone back and forth on what to name this method...and there is already a BatchLoader.loadMany() method that does a different thing. The loadMulti() method loads multiple records per id (as per the [!] result type)

Cache clearing has been streamlined. I am still open to some feedback on this

const contextLoader = new ContextLoader(context);

contextLoader.service('users').load(1);
contextLoader.service('users').loadMany(1);
contextLoader.service('users').get(1);
contextLoader.service('users').find();

contextLoader.service('users').clear(); // clears all loader types
contextLoader.service('users').clear(1); // clears all loader types with id = 1
contextLoader.service('users').clear(1, { ...params }); // clears all loader types with id = 1 AND matching params

There were a couple of other little things that changed under the hood. But the most important piece of this new rewrite is the ServiceLoader which will most often be used via a ContextLoader. That basic API of a ServiceLoader looks like this
class ServiceLoader {
  load(idObj, params, filterParams) {
    // Load 1 item per id in idObj
    // Basically a hasOne relationship
  }
  loadMulti(idObj, params, filterParams) {
    // Load N items per id in idObj
    // Basically a hasMany relationship
  }
  get(id, params, filterParams) {
    // Get cached item at id/params
  }
  find(params, filterParams) {
    // Find cached items at params
  }
  clear(idObj, params, filterParams) {
    // If no idObj or params provided, clear all caches
    // If no idObj but params provided, clear all caches matching params
    // Else if idObj and no params, clear all ids and all finds
    // If both passed, clear all matching id/params and all finds
  }
}

I need to add a bunch of tests and types. But I think this is generally complete. I am using a forked version of this in a production application that is also using AsyncLocalStorage to seamlessly pass loaders to services and it is 💯 .

I am using a forked version of this in a production application that is also using AsyncLocalStorage to seamlessly pass loaders to services and it is 💯 .

Sounds great, I'd greatly appreciate the code example 👀

@1valdis See: https://github.com/feathersjs/feathers/issues/2074#issuecomment-897025361 for a quick example of this paired with AsyncLocalStorage


"Enter Reward Code" doesn't accept Enter Key to trigger Redeem

The Issue
Steps to Reproduce

Go to LBRY -> Wallet -> Rewards -> Custom Code -> Enter Code
Enter a code
Press the enter key

Expected Behaviour
This should do the same as clicking the "Redeem"-Button.
Actual Behaviour
Nothing happens.
Suggested Solutions
System Configuration

LBRY Daemon version: 0.30.1
LBRY App version: 0.26.1
LBRY Installation ID: 9VS5gCQN19VnWvMapaPXd7v4oN7fRTZgExbKeKztv1q57hwC2bWZYKiywh6V4s5PkN
Operating system: Mac OS 18.2.0

Anything Else
Screenshots
This is the UI element this issue is about:

Thanks for the issue @julianschacher !
This is an issue with all modals (I think the only other one is with email verification)
I think the issue is that the button type="submit" is not inside of these form elements.

@julianschacher, thanks for opening this issue - great suggestion! Can we send you LBC in appreciation for filling this out?

Will be fixed in https://github.com/lbryio/lbry-desktop/pull/2279

@seanyesmunt Awesome, thank you for your work!
@tzarebczan Thanks for the offer, but I don't think I deserve LBC for opening issue, which isn't a critical bug or something very special.

@julianschacher Everything helps! It was helpful to have this issue created. It allowed us to track and prioritize it. Not sure when we would have fixed this if didn't create the issue!

@seanyesmunt I agree, creating issues is super useful.
But for me (as a developer?) it's something natural to do, just because I want the project/product I use to improve. And if everyone lives with this mindset, you get payed by others reporting issues in projects you work on yourself.
I appreciate the gesture tho and I think it motivates people in general to report issues they find.

I understand where you are coming from. Hope to see you around 🙂


Explore using ProBot to manage auth for Plugins

Feature Suggestion

Following on from the RFC in #1565 it would be good to explore if using https://probot.github.io/ would be a good way of managing the app creation on a per plugin basis.
Can plugins request to create an app in the users organisation with some predefined manifest
Can we get webhooks working as predicted and do we have a nice way to store this information
Can we also get access to a token that we can make requests with independent of the webhooks

IE, can we make a request outside of the webhook context that has the authorization of the application installation?

For context, relatively recently GitHub published a very nice flow chart for help in selecting the authentication type:
https://docs.github.com/en/free-pro-team@latest/developers/apps/about-apps

I would suggest Probot is not the way to go, but agree PAT is not the path forward either.
There may still be use cases where either a GitHub App or an OAuth App may be valuable. I think it boils down to, does a plugin act as if it's Ben accessing GitHub (OAuth App), or does it act as Backstage to get data that Ben may (or may not) regularly have access to (a GitHub App).
There may be use cases for both, where you may want Backstage to respect whether or not Jane Doe can or can't get pull request data for a certain repo.  BUT you may also want plugins that do much broader info, for example calculating organizational statistics or metrics, where a GitHub App is preferred.
Not sure if that helps or complicates it, but I think those are likely the two paths forward now, and the new page GitHub posted above is really great with their new details.

So I guess our thoughts internally is that in order to reduce complexity, the backend auth part of github would be powered by a github app and then that app could be installed into different organisations and different repositories in which it required authorization.
Our idea is that the App should have enough scopes to do everything, but deployments for certain components would be based around ownership of those components.
Internally @ Spotify, every engineer can see deployments for every thing that's running, as well see graphs etc, but deploying through backstage is limited to only people that own that component.
Probot was an idea that we could use it to reduce some of the complexity of creating apps and the API for webhooks which will also need to be support for both local development and when backstage is deployed.
We have also thought about the idea that every plugin could have it's own Github App with it's own scopes, but we thought we'd start somewhere and start simple.

Can close this now, as we have a solution for github apps.


Game logic

Here is prototype of working story with game logic. I made some adjustments (mainly commented code for modules we don't have right now) and bug fixes in other modules to make it work, so there is a lot smaller commits. As soon as new functionalities will be added i will update game logic.

I agree with those changes

I extended logic to handle displaying first chapter of the story and story end. Also i cleaned up index.js to reflect those changes and made adjustments in ChapterDOM. If you accept these changes, branch can be merged into main.


easybutton-build.sh always recompiling nghttp2

In line 250 have code:
  if [ ! -f "nghttp2-$NGHTTP2/lib/.libs/libcurl.a" ]; then
but the correct compare is
  if [ ! -f "nghttp2-$NGHTTP2/lib/.libs/libnghttp2.a" ]; then
With this change, nghttp2 will not be recompiled every time.

thanks!


Add ability to import non-removable disk images on iOS

I’ve already got a 3GB raw hard disk image for QEMU that I want to use with UTM SE, but I can’t use it because I can only import it as a removable drive. I can only set the interface type to USB or None without a crash on startup (wherein QEMU complains that a drive on a non-removable interface has the removable flag set) and if I do it doesn’t even boot into the OS, just the BIOS shell.
I’d like to be able to import a disk image (specifically a raw IMG file, but other formats like qcow2 would be nice as well) as a non-removable drive on iOS. This seems to already be a feature in UTM for macOS, so I don’t know why it’s not in UTM and UTM SE on iOS.

I have the same problem currently, I tried creating the virtual machine in osx and importing it but it didn't work. I want to get Home Assistant working on an iPhone. Has it worked for you to import and get the machine working in UTM Se?

"Import Drive" is supposed to do this. It is a bug that it creates a removable drive.


build_emoji: Guard mutable default with read-only type

Looks great, tagged to merge once CI passes.


Update index.html

Hi, I like to be part of the webring.
I added the webring icon in the footer of my main page.

Do you only have 2 pages on your website? Maybe I can't find how to enter it properly, the projects are all documented offsite, are you planning on adding more content?

Yeah, only three pages, the projects are hosted on github...anyway, it's
not a problem if you don't want to add me to the webring. I was doubtful
too, but today I've decided to make a pull request.
I really don't know if I will add more contents....
Il giorno sab 15 ago 2020 alle 23:26 Devine Lu Linvega <
<EMAIL_ADDRESS>ha scritto:

Do you only have 2 pages on your website? Maybe I can't find how to enter
it properly, the projects are all documented offsite, are you planning on
adding more content?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/XXIIVV/webring/pull/446#issuecomment-674448886, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/ADLBL2FOZOMG7HXR77EBEKLSA34QDANCNFSM4QAOOKHQ
.


How to implement the triple loss?

The README.md wrote:

This repo provides a comprehensive face recognition library for face related analytics & applications, including face alignment (detection, landmark localization, affine transformation, etc.), data processing (e.g., augmentation, data balancing, normalization, etc.), various backbones (e.g., ResNet, IR, IR-SE, ResNeXt, SE-ResNeXt, DenseNet, LightCNN, MobileNet, ShuffleNet, DPN, etc.), various losses (e.g., Softmax, Focal, Center, SphereFace, CosFace, AmSoftmax, ArcFace, Triplet, etc.)

However, we found no triple loss in the repo. Could you tell us how to implement the triple loss?
Thanks.

Same issue @ZhaoJ9014 Any comments ?


add typescript’s clientbase test and code coverage

add typescript’s clientbase test and code coverage

 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.


docs(ECOSYSTEM): add axios-api-versioning (#2020)

Instructions
Please read and follow the instructions before creating and submitting a pull request:

Create an issue explaining the feature. It could save you some effort in case we don't consider it should be included in axios.
If you're fixing a bug, try to commit the failing test/s and the code fixing it in different commits.
Ensure you're following our contributing guide.

⚠👆 Delete the instructions before submitting the pull request 👆⚠
Describe your pull request here.

update code to date


Added doc of Flow Node @KapadiaNaitik


After debug (of extension) file is not editable

VSCode Version: insiders
OS Version: windows 10

Steps to Reproduce:
I start debugging extension. After debug is stopped. I can not fully edit extensions code some commands (keys) like backspace don't work, can insert and add content, but can not remove it.
I have to do Ctrl+P and type file name and "activate" it - then edit mode fixes.
Not sure if it happens only while extensions debug.

@whitecolor This issue does not happen to me. Can you please provide more information that will help us to reproduce it. say,

Is there anything difference in your workspace/set up, any extensions as such
I assume by debugging extension you mean launching the extension you are developing
what do you mean by activate?

Well it stops to reproduce after insiders update, maybe it is gone for me too.

Thank you, closing this.


[hot reload] [hot restart]: Error -32601 received from application: Method not found

Hello,
Since yesterday, Hot Reload and Hot Restart are not working anymore in my project.
I have not changed any dependency, nor changed the Flutter version.
Cleaning the build/ folder (or with the flutter clean command) does not change anything.
Here is the error for an Hot Reload:
An isolate is paused; interface might not update.
Error -32601 received from application: Method not found
Error -32601 received from application: Method not found

And for the Hot Restart:
Error 105 received from application: Isolate must be runnable
Restarted application in 1,302ms.
E/flutter (14433): [ERROR:flutter/shell/common/shell.cc(199)] Dart Error: Unhandled exception:
E/flutter (14433): NoSuchMethodError: No top-level getter '' declared.
E/flutter (14433): Receiver: top-level
E/flutter (14433): Tried calling:
E/flutter (14433): #0      NoSuchMethodError._throwNew (dart:core-patch/errors_patch.dart:202:5)
E/flutter (14433): [ERROR:flutter/runtime/dart_isolate.cc(461)] Could not resolve main entrypoint function.
E/flutter (14433): [ERROR:flutter/shell/common/engine.cc(205)] Could not run the isolate.
E/flutter (14433): [ERROR:flutter/shell/common/engine.cc(137)] Engine not prepare and launch isolate.
E/flutter (14433): [ERROR:flutter/shell/common/shell.cc(199)] Dart Error: Unhandled exception:
E/flutter (14433): NoSuchMethodError: No top-level getter '' declared.
E/flutter (14433): Receiver: top-level
E/flutter (14433): Tried calling:
E/flutter (14433): #0      NoSuchMethodError._throwNew (dart:core-patch/errors_patch.dart:202:5)
E/flutter (14433): [ERROR:flutter/runtime/dart_isolate.cc(461)] Could not resolve main entrypoint function.
E/flutter (14433): [ERROR:flutter/shell/common/engine.cc(205)] Could not run the isolate.
E/flutter (14433): [ERROR:flutter/shell/common/engine.cc(137)] Engine not prepare and launch isolate.
Error -32000 received from application: Could not run configuration in engine.
Error -32000 received from application: Could not run configuration in engine.
Error -32601 received from application: Method not found
Error -32601 received from application: Method not found

Also my flutter doctor:
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.12.13+hotfix.5, on Mac OS X 10.15.2 19C57,
    locale en-FR)

[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[✓] Xcode - develop for iOS and macOS (Xcode 11.3.1)
[!] Android Studio (version 3.5)
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
[✓] IntelliJ IDEA Ultimate Edition (version 2019.3.1)
[✓] VS Code (version 1.41.1)
[✓] Connected device (1 available)

! Doctor found issues in 1 category.

Do you have any idea on how I should fix this?
Thanks :)

@dnfield Unfortunately I am unable to isolate the problem (even if it seems that the problem is less frequent on the dev branch)

If we don't have any way to reproduce this it's unlikely we're going to be able to make any progress on the issue. I would recommend starting with a fork of your current project and removing features until the issue no longer reproduces. At that point, you should have enough information to determine if it is an issue in you project setup or a bug in flutter.
Without this information, the bug is unfortunately not actionable from our end.

Without additional information, we are unfortunately not sure how to resolve this issue. We are therefore reluctantly going to close this bug for now. Please don't hesitate to comment on the bug if you have any more information for us; we will reopen it right away!
Thanks for your contribution.


DCD-678: Adds a better password regex for DB password

Updates master password regex as described here - https://regexr.com/4m291

Does this PR need an ASI bump

Does this PR need an ASI bump

Yup - Please see here for context (https://github.com/atlassian/quickstart-atlassian-confluence/pull/33#issuecomment-537756028)


[SPARK-28521][SQL] Fix error message for built-in functions

What changes were proposed in this pull request?
spark-sql> select cast(1);
19/07/26 00:54:17 ERROR SparkSQLDriver: Failed in [select cast(1)]
java.lang.UnsupportedOperationException: empty.init
	at scala.collection.TraversableLike$class.init(TraversableLike.scala:451)
	at scala.collection.mutable.ArrayOps$ofInt.scala$collection$IndexedSeqOptimized$$super$init(ArrayOps.scala:234)
	at scala.collection.IndexedSeqOptimized$class.init(IndexedSeqOptimized.scala:135)
	at scala.collection.mutable.ArrayOps$ofInt.init(ArrayOps.scala:234)
	at org.apache.spark.sql.catalyst.analysis.FunctionRegistry$$anonfun$7$$anonfun$11.apply(FunctionRegistry.scala:565)
	at org.apache.spark.sql.catalyst.analysis.FunctionRegistry$$anonfun$7$$anonfun$11.apply(FunctionRegistry.scala:558)
	at scala.Option.getOrElse(Option.scala:121)

The reason is parameter types can be Expression, DataType and Option. This PR makes the constructor allow to include the DataType. But we still do not allow Option because Option is usually not available in SQL interface:
spark-sql> SELECT from_unixtime(0, 'yyyy-MM-dd HH:mm:ss', 'timeZoneId');
Error in query: Invalid number of arguments for function from_unixtime. Expected: one of 1 and 2; Found: 3; line 1 pos 7

How was this patch tested?
unit tests

cc @mgaido91

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution-unified/13310/
Test PASSed.

Test build #108210 has started for PR 25261 at commit 32a671c.

Test build #108210 has finished for PR 25261 at commit 32a671c.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/108210/
Test PASSed.

Test build #108438 has started for PR 25261 at commit 94af203.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution-unified/13534/
Test PASSed.

Test build #108438 has finished for PR 25261 at commit 94af203.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/108438/
Test PASSed.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution-unified/13594/
Test PASSed.

Test build #108500 has started for PR 25261 at commit 3c46a84.

Test build #108500 has finished for PR 25261 at commit 3c46a84.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/108500/
Test PASSed.

Merged to master


folie v2

This issue captures a discussion with JC. Dunno how understandable it is.
Goals for the JeeNode side:

support talking to a JeeNode attached via serial (or USB)
support talking to a JeeNode over RF, using a JeeNode attached via serial as bridge
support cascading, i.e., running folie locally that talks to a remote folie that has a local serial port

Goals for the client side:

support interactive terminal use
support connections over the network

For the network connections:

support SSH to get encryption
possibly support telnet for simplicity and ser2net

RF handling:

everything is line-oriented, thus both folie and the mecrisp code ensure that lines are sent as a unit, RF packet == line.
the serial-to-RF bridge understands a simple prefix that is used to distinguish lines that go over RF to a remote mecrisp interpreter from lines that are to/from the bridge node's interpreter
there is a distinction between RF data packets (such as a temperature measurement) and RF interpreter packets that handle a remote mecrisp interpreter input/output
for RF data packets one talks to the local bridge and there is no special support in folie (other than prefix filtering, see below):

when it receives a packet it outputs a line that starts with RF> (RF Data) followed by the packet in hex/base64 followed by some metadata, such as rssi, FEI, etc.
when it is sent a line that starts with RF> it interprets the rest as a packet to be sent using a similar format

the bridge handles ACKs, retransmissions, frequency correction, TX power adjustment

New folie features to support client-side network connections:

add -l option to create an SSH listening socket (do we need a telnet option?)
add -ssh option to connect to a remote folie over ssh (or reuse the -p option and drop telnet support?)
add a !filter <line_prefix> command to tell folie how to filter lines coming in from serial, this could be omitted initially

New folie features to support connecting to a mecrisp interpreter over RF:

add !node <id> command to select which remote node's interpreter to talk to instead of the locally attached one (use !n 0 or !n to switch back to local)o
to talk to a remote interpreter, folie prefixes lines with RF.n>, where n is the node id, so the bridge code can route them
the bridge code prefixes incoming RF packets from a remote interpreter with RF.n> where n is the node id

Node IDs:

the bridge perform hex node ID to RF node ID conversion? This would imply a provisioning protocol such that a new node can register with its hex CPU id and obtain a node ID.
the benefit would be that at the serial port level only the hex ID would be used and the RF-specific node addressing would remain hidden

Oops, wrong repo