[Feature] User Access Control / Multiuser

Here's some ideas for access control that I would like to see, I haven't really looked at the code so I’m not sure how hard this would be.
You'd probably have to create a table that would define users and their permissions to each album then have a php/js script determine what albums should be displayed and that would also limit access based on those permissions. It might also be a good idea to keep some of the session data stored on the server if it isn't already, that way you could compare the session identifier token to the username that the request was being performed as and validate that they match before executing any functions; this would assist to mitigate a malicious user from executing commands/actions as another user.
Superuser
Full access to view/modify all albums and photos
Standard
Per album view control  (who can or can't view album x)
Per album upload control (who can or can't upload to album x)
Per album and photo delete option (who can or can't delete photos from album x)
Read Only
Can only read/view images for explicitly defined albums.

+1

+1

Would be great if everyone could tell a bit about their use-case of this feature: Do you just want multiple users or multiple users with different permissions? What permissions should be adjustable? Are there other potential settings for users?

I would like to give some users permission to view some private albums..

Current state of this issue: I'm currently rewriting parts of the front-end, including the dialog system. The new one will make it easier to display complex settings, which are required for a "User Access Control". Don't expect this feature soon. It requires a lot of changes and Lychee is only a side-project. It's on the roadmap and has a high priority.

@PeterTheOne Public protected albums aren't working for you in this case? How about this: https://github.com/electerious/Lychee/issues/27 ?

#27 would be great yes! But frequent users of my gallery would potentially have to save a lot of links, so it would be nice if they had gallery permissions linked to their user account.

@PeterTheOne A password protected collection would be what you need: https://github.com/electerious/Lychee/issues/254 Could contain all albums for one group and they only need to input the password once.

@electerious also nice but imagine many different parties, holidays, etc. with different guests. Some are family events that I share with my family, some are event with my friends. Some guests are very often the same (need user accounts) but some change for every occasion (could deal with a link/password).

+1 @PeterTheOne
revoking access rights - for any reason - would lead to a new password protectd collection or at least a new password for everybody who still is allowed to view.

My user case:
I have a couple of friends (a pro will have customers) I'd like to share photos with. Not every friend/client shall see every album, so I need a user list, maybe groups (for a group of friends) and per photo/per album-settings to decide who may watch what.
I must admit that I meanwhile moved to piwigo where I found that feature already implemented very well. If you decide to keep lychee as lean as possible piwigo might be a recommendation for those whose needs are not met.
L.B.Q.R.

+1

+1

+1

+1

+1

+1

+1

Re: Would be great if everyone could tell a bit about their use-case of this feature: Do you just want multiple users or multiple users with different permissions? What permissions should be adjustable? Are there other potential settings for users?
My use case would be to have one super user (me), and other users (my wife, parent, etc.) which would have upload rights, and the ability to edit sharing options of their albums.
The super user would have every right on every album.

I simply won't install Lychee until this feature is implemented.
Here is what I would like:

1 super-user ("admin") and an unlimited number of normal users
Super user rights: list/create/edit/delete users, view/create/edit/delete/share albums, upload pictures
Normal user rights = any combination of those six: view, create, edit, delete, upload, share
Per user defaults rights for any new album
Per album view/create/edit/delete/upload/share control
Share options: password or user-based

Re: Would be great if everyone could tell a bit about their use-case of this feature: Do you just want multiple users or multiple users with different permissions? What permissions should be adjustable? Are there other potential settings for users?
We will use Lychee for an internal image library with multiple users (admins). As an addition we like to share some albums to our customers (maybe multiple albums to one customer).

Admin (upload photo, create album, edit metadata) - as it is now, maybe ability for multiple admins
User (visit/download selected albums) - new
Guest (visit/download shared album) - as it is now

At the moment I can share just a single album (not multiple inside the same link) to a customer and have to select every album as invisible to hide them.

Re: Would be great if everyone could tell a bit about their use-case of this feature: Do you just want multiple users or multiple users with different permissions? What permissions should be adjustable? Are there other potential settings for users?
My use case is for storing/archiving (and optionally sharing) family photos. I'd like the ability to have users and grant read or read-write permissions to users on a per album basis. Each user(wife, kids, etc) could create new albums which they would own and be able to share with other users. Anyone with read access should also be able to publicly share an album via emailed link facebook, etc.
If you've ever used ownCloud. I think it's file sharing model is about as good as it gets. Check out its federated sharing feature. Also the ability to grant write access to albums via public link (without creating a new user) is useful as no one wants to have to create new accounts for every extend family member (and then constantly reset their passwords for them). Thats the pie-in-the-sky goal for my installation.

My case in close of the Enoch247 case. I just need to give permission for family members to upload photos, create albums and share the content (optionally too).
One bit more: users can create "private" albums where no one, except the owner can see/share/edit.
Regards

Thanks for all the comments. There aren't any news about this feature, but it still has a high priority and will make it into a version after 3.0. Keep posting your use-cases, they're a big help! :)

+1

Another usecase: upload picture and generate link for one user and this user can accept or deny publishing this picture. Very often needed if you make pictures of events and respect the privacy of the people photographed: they get send a link (needs email input somewhere on admin) and can view and download their picture plus they can decide if they want others to see this picture. Others might be another group, multiple groups, or everyone.
yes, permission systems is something you want to plan from day 1 with your app :)

+1

+1

+1
I don't want some pals deleting pictures.

Is anyone currently working on this feature?
I'm thinking of starting on it this weekend, and wanted to check first if anyone has begun work on it, to avoid multiple implementations of the feature.

I don't know how far Tobias is into this enhancement.
Which functionalities would you add to it? What's your idea behind the whole feature?

Ok, the way I'm thinking of doing it is to do the login stuff mostly like they are now, except having a role assinged in the php session. This role will function like the current Admin and Guest roles work now.
As for user management I'm thinking of adding a menu item in the top-left menu, which will produce a pop-up, in which new users can be created, and current users can be granted read or write privileges to any album. So by selecting a user you get a list of all albums, and beside the name one checkbox for read and one for write.
In album view, under the share menu there will be a similar list of all the users, with read/write checkboxes beside them.
This way it would be easy to either grant a user privileges to any number of albums, or to grant multiple users privileges to any one album.
As for the actual implementaion of the access rights I haven't figured out how I will structure it completely, but I do have some ideas, for which I have to test a few SQL features to avoid having to do too much in php code..
I think the roles I will start with are just the current superuser which has all rights to everything, guest which have read rights to public albums, and visitor which has read and/or write the the albums for which the superuser has granted privileges.
This will result in a system which is not really multi-user per-say, more like single-user with better sharing possibilities. The most obvious use-case being a photographer as the superuser and his/her friends/family/customers as visitors (who will not have to keep multiple links saved somewhere)

Sounds good.
Some thoughts:

Keep the sharing function (in case you don't want to create a new user for just one album)
How would you manage users/album in the popup, when there are a lot of them (e.g. search field)?
Which user can create and delete albums? Which can create users?

I'm interested about Tobias thoughts. I thing it's important to decide which functionality should go into before starting with the implementation. This way we can exclude different opinions and create a stable and useful feature.
To put the feedback from above together:

Super User - has every privileges (view, edit and upload images, create user, delete albums)
User - read/write access to one or multiple albums (can view, edit and upload images)
User - read access to one or multiple albums (can view images)
Guest - can view a single album shared through a link (password protected)
Public - album is accessible to anyone through a link (no password protected, share over social media)

Do you agree with me?

@Aidenir @xxcram Sounds great!

@xxcram Response to your questions:

Absolutely I would not touch the current sharing, my idea yesterday was based on the sharing popup when viewing a single photo. I see now this would not work, so perhaps having a separate button which pops up a modal dialog with the user list.
To start with I don't think I will do a search field, but once the actual access rights code is working that would certainly be good to have.
For this I see it as you put it in the summary: only the superuser has rights to create users and albums and settings read/write privileges to albums/users.

I too am interested in what @electerious thinks about this, since everyone could benefit if the implementation is according to the design he has in mind so he can merge with minimal changes, otherwise I will probably just end up doing it to fit my particular use-case.

I started working on the database schema today.See 2c72b8bf2f74f6d4e35596451f50efb2042a2661.
Since the relationship between users and albums is a many-to-many I figured the best way to structure it is to use a privileges table, with foreign keys to the user and album id as well as a field for read and one for write. This allows to use something like this query when fetching the albums to display:
(SELECT * FROM lychee_albums a
  LEFT JOIN lychee_privileges u2a
  ON a.id = u2a.album_id
  WHERE  u2a.user_id = 1
)
UNION
(SELECT * FROM lychee_albums a
  RIGHT JOIN lychee_privileges u2a
  ON a.id = u2a.album_id
  WHERE  u2a.user_id = 1
)

A junction table is certainly the right table structure for the permissions. I don't understand what that query is supposed to do, though. To get a list of albums the user has access to, just query the privileges table:
select p.album_id
  from lychee_privileges p
 where p.user_id = 1

Or if you want to get the album data in the same query:
select a.*
  from lychee_albums a
  join lychee_privileges p on (a.album_id = p.album_id)
 where p.user_id = 1

(Assuming that there won't be any entries in the privileges table where neither read nor write are granted.)

What I tried to achhive with that query is to let the database do most of the heavy lifting. Instead of getting the ids a user has permissions to and then querying the db again.
The query I posted would do the same as the second one you posted, except that it would get read and write permissions into the result, which I figure can be handy when deciding which buttons to show in the GUI, which now that I think about it would not really be relevant if only the superuser has the rights to edit the album properties... But could be useful in the future at least :smile:

If you want the permissions as well, you can just add them to the above query:
select a.*, p.read, p.write
  from lychee_albums a
  join lychee_privileges p on (a.album_id = p.album_id)
 where p.user_id = 1

Aha ok, as you can probably figure out I'm quite the novice when it comes to SQL.
I have now gotten some of the user management working. Its possible to create and delete users (and login as these users of course), and the dialog for setting their permissions is there, but not functional yet.

The styling is not finilized either, just put it together so it worked. My thinking is that a similar view can be implemented in the album view, where instead of albums the users are listed.
Next up is implementing the access restrictions, and modifying the create user dialog to be able to choose what role new users should get.
If there is anything that looks strange in the commit 39ff762c8adebd469abb5077375da7643f657cb4 please let me know, so I can fix issues as soon as possible.

The styling looks good :)
(I didn't look at the code)

I got some more work done yesterday, and I'm not sure this implementation is the way to go, its clear that the frontend was not made with multi-user access in mind, so to keep the code as neat as @electerious has written it to start with, quite a lot would have to be rewritten. Although since this is a feature I need asap I will continue my work on it.
I got the role into the user-creation yesterday, and removed some of the options in the context menus when logged in as a regular user. For example a regular user is not allowed to set the dropbox link och manage users. I also reinforced this server side.
Furthermore only albums which the user has an entry for in the privileges table is returned when fetching albums.
One point I'm not sure on is whether a regular user should be allowed to edit album attributes such as name and description? Does anyone have an opinion on this? Right now they're not, and they're also not allowed to delete or merge albums

+1
The demo looks great, although I would prefer a "invalid credentials" message (or similar) instead of just showing empty albums after entering a invalid username/password.

@Aidenir - I'm glad to hear there is progress on this feature.  Since your last update in July, how close are you to completing V1?  I'd really like to start using this application but can't until multi-user is part of the build.  Thanks for your efforts.
P.S.  The demo link is broken.

To be honest I stopped working on it after my last update, since other projects were higher priority.
But I'm pretty sure I will look into whats left to do and how to do it this week, when I get some sparetime (working on outages at work :( )
And the demo should be back up again tonight.

The demo looks great, although I would prefer a "invalid credentials" message (or similar) instead of just showing empty albums after entering a invalid username/password.

This issue is fixed now.

P.S. The demo link is broken.

Fixed too.
I will try to resume development of this, but don't hold your breath, I have no idea when it'll work.

Thanks @Aidenir - I've had a chance to look at the demo and things are looking good.  I noticed a few things that I'm sure you're aware of and working on:
Creating a user works but I don't get an option to save the permission type.  It just says 'back'.
A delete option would be good idea where a user can upload photos but not delete them.

Right now the permissions is not implemented (currently working on it ;)), but the idea is that the permissions are saved when they are changed. This will of course generate more traffic to the server, but it make implementation (and usage) way simpler.
Yes upload-only is a good idea... Perhaps "view, upload, delete" would be better than read, write?

oh yes !!! the demo look so great !!!
Where i can get it ?

@Colir Right now the only addition is that multiple users can login. All of them has full admin rights. When/If I finish it I will submit a pull request, meanwhile you can grab my branch "multiuser", however I think it has conflicts with the current master, will try to resolve them soon.

This is the current status of this issue in my branch (will update comment continously):
Design

[x] Design database tables needed

GUI

[x] Add user management
[x] Add user privilege management
[ ] Per album user privilege selections (see earlier comments in this thread)

Security

[ ] Enforce album viewing rights server-side
[x] Enforce album viewing rights client-side
[ ] Enforce album upload rights server-side
[x] Enforce album upload rights client-side
[ ] Enforce album deletion rights server-side
[x] Enforce album deletion rights client-side

Should a normal user have the right to create albums? Adding another option for this would be quite hard, gui-wise, but for my use case I don't care, so unless someone else thinks differently non-admins will not be able to create albums...

Looks like a good plan @Aidenir and looking forward to seeing the next version.  :+1:

ok thanks you very much

Ok, new status update.
Right now I would say my branch qualify as a beta of v1.
Supported:

Create multiple users
Assign either "admin" or "user" role

Admin: all rights to everything
User: can be allowed to view albums, upload photos to albums, and delete photos from albums. Obviously the user must be allowed to view to be able to upload or delete.
User: set view,upload, delete on specific albums.

Not implemented:

Rights on smart albums. These are completely ignored so far.
Modification of album or photo metadata. I haven't even tested this, but I assume all users are allowed to change all metadata right now.
Modification of albums (delete, merge) by role user
Creation of albums as user
Moving photos by role user

The latest version is still available on https://demo.viha.se, as well as in my branch multiuser. New users are:

admin:password
user1:a
user2:a
user3:a

I really appreciate all feedback I can get on this, feel free to try to break the demo site. I have not tested it much. Since I no longer have the need for this function, I will not spend a lot of time on it unless someone else has some input in how the "not implemented" stuff should be designed.

Thanks for the update @Aidenir .  Where are the options to allow users to view, add and delete per album?  I've created an album as the admin and I'm looking to give permission to a new user. Currently the user can only see smart albums.

@moorestudios In the "manage users" in the top left corner, if you click on a user, you can see which albums he are allowed to. My plan is to have a similar view be available in the album view, where it will be possible to choose which users have access to the album, instead of which albums a user has access to.

Hello there !
For my own server, I'm merging your work on top of the latest develop branch. This is still ongoing (at the moment, I just did the merge and I will start heavily testing), but this may be of interest to you, as the version of master you started on is a little old now.
I rebased the sessions feature and now the multiuser is on its way.
Thanks for implementing anyway, this work allowed me to get more familiar with the code of Lychee, I wouldn't have been able to implement what I wanted from scratch.
https://github.com/Cilyan/Lychee/tree/multiuser

@cilyan - I've updated my demo site with your fork and it seems to be broken, at least for me.  Do you have it working on your end?  I can't authenticate any users...

@moorestudios - No, not yet. I stumbled upon some problems with the Session cookie databases, and at the moment there's a problem with the javascript, which I'm trying to debug but I was a little stuck while getting the source maps. I'm still working on it, just had too few time the last past days to push anything solid on Github yet.

@Aidenir Ive downloaded your lychee multi user fork and after connecting to my database it asks to create a user name and password for the install. When I try to create one it keeps saying,
"function not found: Please Check the spelling of the called function"
Are you able to assist me with this?
Thanks in advance

@engle2192 A little late maybe, but I'll try and take a look at it tonight.

I'm seeing the same thing as @engle2192

Seems to be a problem in php/api.php where it is falling into guest access mode while creating the admin user. It is trying to execute the function Settings::setLogin, which doesn't exist in guest Guest.php. I was able to work around it by commenting out lines 66 and 67 and replacing with "if (true){" for creating the admin account, and then setting back afterwards.

@Aidenir there are more problems with your branch;

I've come to understand that the mechanism for "sharing" an album with a regular user involves Settings --> Manage Users --> click the user, and it should open a window with a list of albums and checkboxes corresponding to the permissions granted to that user for that album. Unfortunately, the window is completely empty.

When logging in to a regular user without any albums, it spits out a blank page with a very cryptic error "Cannot execute function. Missing parameters or variables."

Following appears in logs;
[Mon Jan 11 11:34:58.866443 2016] [:error] [pid 5861] [client <IP_ADDRESS>:60960] PHP Notice:  Undefined variable: database in /var/www/html/Lychee/php/modules/Album.php on line 217, referer: http://localhost/Lychee/
[Mon Jan 11 11:34:58.866461 2016] [:error] [pid 5861] [client <IP_ADDRESS>:60960] PHP Notice:  Undefined variable: database in /var/www/html/Lychee/php/modules/Album.php on line 217, referer: http://localhost/Lychee/
[Mon Jan 11 11:34:58.866464 2016] [:error] [pid 5861] [client <IP_ADDRESS>:60960] PHP Notice:  Trying to get property of non-object in /var/www/html/Lychee/php/modules/Album.php on line 217, referer: http://localhost/Lychee/

More problems;
You are using two reserved words as column names in table lychee_privileges. Those reserved words are "read" and "write".

Appears to be a bad query;
MariaDB [lychee]> SELECT a.id, a.title, p.view, p.upload, p.erase FROM lychee_albums a LEFT JOIN lychee_privileges p ON a.id = p.album_id AND p.user_id = 2;
ERROR 1054 (42S22): Unknown column 'p.view' in 'field list'
It appears that the view column was neglected from the table creation.

@Aidenir: I made a pull request to your fork with the database column changes.
Interestingly, the problem with the first admin account creation seems only to be terminal in Chrome. In Firefox, F5 is adequate to get past the problem on the second attempt. Its still a bug, mind you, just not a fatal bug.

@lbdroid I've merged your request, and I'll happily merge any other changes you make.
As I'm sure you noticed life got in the way and all the free time I had to work on this just went out the window, so I'm not sure whether I will finish this implementation. But I will at least look into the bugs reported in this thread and see if I can do anything about them.

Ok, I think I've solved the issue with the initial admin creation in commit  https://github.com/Aidenir/Lychee/commit/fc28037f38f1cf958867cbab310750d8349fe02b
As for a reegular user without any albums, that seems to work OK for me, meaning I only see the smart albums. However the error you added seems like a reasonable on, which I've fixed in https://github.com/Aidenir/Lychee/commit/7df1068cfc552b5351facfee2a47af7a29afbeff
And finally for the album selection for regular users, the window is blank if no albums exists(smart albums are completely separate), otherwise I see the albums I've created.
If you find any more issues please write about them. Otherwise I will probably not do much more here. What I'm missing is basically only selecting privileges for users based on album (now theres only album based on user), and this is not vital for my use-case anymore.

I'm down to just one obvious bug that I'm struggling with. If I leave it for a while without logging out, and refresh it, it goes into a strange mode where it shows basically a grey page with a black line separating the header area from the body. No contents, no buttons. If I clear the applicable cookies, it goes back to the logged out screen and I can log in and use it as normal.

[Tue Jan 12 14:32:42 2016] [error] [client <IP_ADDRESS>] PHP Notice:  Undefined index: role in /data/lychee_image_host/php/api.php on line 66, referer: http://www.stage.ypdine.ca/imagehosting/
[Tue Jan 12 14:32:42 2016] [error] [client <IP_ADDRESS>] 1 160d66a7f00a7882b64c486b83faaf1e  160d66a7f00a7882b64c486b83faaf1e, referer: http://www.stage.ypdine.ca/imagehosting/
[Tue Jan 12 14:32:42 2016] [error] [client <IP_ADDRESS>] PHP Notice:  Undefined index: role in /data/lychee_image_host/php/api.php on line 70, referer: http://www.stage.ypdine.ca/imagehosting/

@lbdroid Yes I'm seen that issue as well, but I haven't been able to find the cause.
How did you get those log lines? Is it when the above issue is present?
If that is the case I think it has something to do with the php session expiring, and a session cookie still being present and active, but since Session::init is not called the php session doesn't contain the required variables (login, role and identifier).

I may be having trouble with your commit https://github.com/Aidenir/Lychee/commit/fc28037f38f1cf958867cbab310750d8349fe02b
After I pulled that one in, it started persistently going into the blank page mode, even after wiping my browser profile.

Do you have any steps to reproducce it? I tried with a fresh pull and a clean database and I can't get the blank page unless I let the php session expire.

Never mind that. Its working fine on my test rig.

Hey everyone, please stop using this issue for commenting a fork. Forks have their own issues. New "unrelated" comments will be deleted. Thanks!

On 12.01.2016, at 21:08, Viktor Hansson<EMAIL_ADDRESS>wrote:
Do you have any steps to reproducce it? I tried with a fresh pull and a clean database and I can't get the blank page unless I let the php session expire.
—
Reply to this email directly or view it on GitHub.

@electerious could you please clarify... while it may be a fork, everything is a fork until it reaches a stage where it can be merged back, and in my mind, that makes it a valid discussion for this forum. That is, unless upstream has no intention of accepting this feature when it is finally ready...?

It's fine to discuss the general direction of forks, but I don't want that this issue turns into a support page. Issues related to the fork (e.g. "It's not working") should be postes in the issues of the fork.

On 12.01.2016, at 21:31, lbdroid<EMAIL_ADDRESS>wrote:
@electerious could you please clarify... while it may be a fork, everything is a fork until it reaches a stage where it can be merged back, and in my mind, that makes it a valid discussion for this forum. That is, unless upstream has no intention of accepting this feature when it is finally ready...?
—
Reply to this email directly or view it on GitHub.

Ok, fair enough.
@Aidenir; could you add an issue tracker to your fork?

@electerious ok sounds reasonable.
@lbdroid done.

What's the status of this? Has @Aidenir run out of time to work on it?
If so, did the approach taken by Aidenir work without drawbacks - should someone else try to manually rebase the multi-user commits to the current Lychee, or were there still issues to resolve?

@Treer: As I needed the multi-user feature for the setup I had in mind, I've tried to get the branch created by @Aidenir updated to a more recent Lychee version (v3.0.9). Didn't have much time to work on it recently, have the website working with some bugs:

Login not auto-forwarding after successful login
Menu button not always reacting
I didn't initially notice that the video support feature was also included in Aidenir's fork. Not sure if this correctly works.

I'm currently trying to get it into a clean/stable state before updating the fork to the latest Lychee version.

I very much like the multiuser features myself, so I started separating @Aidenir's multiuser branch from the video support. My branch https://github.com/caspre24/Lychee/tree/multiuser is now based on v3.0.2 which is quite old.
I hope I find the time to merge with the lastest master the next days. In the meantime this branch might serve as a (hopefully clean) base to get multiuser support into Lychee, as @Treer suggested =)

The Multiuser tree is not longer available.
Is it still in work?

@petrk94 is available again. Seems I deleted it during cleanup of my github account. I found another solution that I find more practical so I won't be developing on Lychee anymore.

@caspre24 what you have found for a solution?
So I can use Lychee as for multiuser?

I'm now using piwigo with a bootstrap-based theme.
I'm not sure, how stable the multiuser-branch is.

Ah i see, I like the interface of lychee. Piwigo doesn't shows nice.
I want to use it as a free web service for photos.
Am 29.10.2016 13:01 schrieb "Carsten Sprung"<EMAIL_ADDRESS>
I'm now using piwigo with a bootstrap-based theme.
I'm not sure, how stable the multiuser-branch is.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/electerious/Lychee/issues/132#issuecomment-257085213,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ASzjjLPUSFc-KcjmLwD7umlc6Dvj1_B5ks5q4yeTgaJpZM4B1K3R
.

Checking in again, after losing track of this issue for some time.
Currently have Lychee v3.1.5 up with basic multiuser implementation.
I have a server hosting a working lychee install based on the latest hash (3df88ba1298c46acadb07fbf6ce2af7fb0d05d5f) and I'm using that to check for further bugs.
Current list of issues I need to look into:

Starring of photo needs to be stored in separate table so it isn't shared between users.
Moving a photo while creating that album, only creates the album without moving the photo to it.
Video support is in this branch, but untested. Will need to be stripped out to a separate branch.
Code cleanup will be needed: debugging prints, adding comments, ...
....

I'm currently further cleaning up and checking for other bugs. If anyone does try my code in the meantime, be sure to report any problems you find.
I only recently learned about @caspre24's code. I might compare my current code against his changes, not sure far along he was..

Hello,
thanks for the informations. I want to use it as a service in a local Free Wifi Community called "Freifunk" in Germany. Thats why mulituser support is necessary.
My current problem is to install it on the server, because it denied the mysql server login and I dont know why this issue happens.

@petrk94 If you're seeing this problem only on my fork. Please create an issue there and I'll take a look at it.

@mvanrompuy I dont have tried your fork, are you developing it by yourself or only sometimes?

We'll I'm trying to get a multi-user install up and running for a family project. So I'm currently implementing it on my own.
Once I'm happy with the implementation I would also be open to other improvements that would be needed to try and merge this feature to master branch. So any input is welcome.

@mvanrompuy
this would be great :) please let us know when you have it done, the multiuser part is really important for me. In 2 weeks I can send you a screenshot of the Lychee issue with mysql, before I dont have internet which is fast enough to use it for working :/

Currently have a fairly stable multi-user branch on my account. Code needs some cleaning up and bugfixes, which I'm working on. If anyone's interested in helping feel free to report issues on my fork after trying out my code.

@mvanrompuy  I would like, but as freelancer I have not enough time. And I can not PHP, only HTML in this case :/

+1

+1 for the multi-user, thanks for working on it

+1

is anyone working on this?

+1

Github has a emoji/reaction function, where you can '+1' ideas without spamming watchers' inboxes. Please use it! Thank you!

is anyone actively working on this?

This issue will be closed because I'm not actively working on Lychee anymore. The repository of Lychee will stay available, but the main development continues under the Lychee Organisation. A fork maintained by the community. Important issues have been migrated. Feel free to re-add your issue(s) when necessary.


[openmm] 7.1rc1

cc: https://github.com/pandegroup/openmm/issues/1718

I don't understand how or why, but these ended up being pushed to the dev channel instead of rc, so I've moved the manually.

And the Windows one ended up in the main channel!  I've fixed it.

I don't understand how or why, but these ended up being pushed to the dev channel instead of rc, so I've moved the manually.

Probably https://github.com/omnia-md/conda-recipes/blob/master/conda-build-all#L260

Ah! upload, if specified, should take precedence. We just have to reorder those if branches.


Adding long Press support on android and iOS

Solve this: https://github.com/okwasniewski/react-native-bottom-tabs/issues/58
Summary:
This PR introduces the handling of long press events on Android for tabs in the ReactBottomNavigationView. While Android's BottomNavigationView does not natively support long press events as a first-class feature (like setOnItemSelectedListener for selection), we have implemented custom logic to detect and handle long presses on individual tabs.
Implementation:
Android
Long Press Handling: We attach OnLongClickListener to each tab using setOnLongClickListener, triggering a callback when a tab is long-pressed.
We use the post {} function to defer the registration of long press listeners until after the view hierarchy has been fully laid out. This ensures that all views for the tabs are fully initialised before attaching the listeners. Attempting to set the listeners earlier may lead to issues, as the views may not yet be available.
iOS

TabItemLongPressModifier: Uses SwiftUIIntrospect to introspect the TabView and add a long press gesture to the tab bar.
LongPressGestureHandler: A custom gesture handler class that processes the long press gesture and identifies the index of the pressed tab based on touch location.
SwiftUIIntrospect Dependency: Added "SwiftUIIntrospect", '~> 1.0' to the podspec to enable the use of introspect.

RN API
Long Press Event Callback for Tabs
With this PR, a new tabLongPress event is introduced for handling long press actions on tabs in Android's BottomNavigationView. This allows developers to subscribe to long press events for both active and inactive tabs, providing more flexibility in user interactions.
When a user long-presses a tab (including the currently active tab), the tabLongPress callback, if subscribed via screenOptions, will be triggered, enabling custom actions in the navigation logic.
screenListeners={{
  tabLongPress: (data) => {
    console.log(
      '### JS Navigator level TabLongPress called',
       data
    );
  },
}}

Testing Plan:
Tested the integration in these 3 ways.
    <Tab.Navigator
      screenListeners={{
        tabLongPress: (data) => {
          console.log(
            '### JS Navigator level TabLongPress called',
            JSON.stringify(data)
          );
        },
      }}
    >
      <Tab.Screen
        name="Article"
        component={Article}
        listeners={{
          tabLongPress: (data) => {
            console.log(
              '### JS Tab level TabLongPress called',
              JSON.stringify(data)
            );
          }
        }}
        options={{
          tabBarBadge: '10',
          tabBarIcon: ({ focused }) =>
            focused
              ? require('../../assets/icons/person_dark.png')
              : require('../../assets/icons/article_dark.png'),
        }}
      />

By adding tabLongPress in screenListeners at Navigator level
By adding tabLongPress in listeners at individual tab level
By adding addListener inside all screens like Article screen.

@okwasniewski Android & iOS implementation are added and tested. You can start reviewing this PR.
Thanks for all your help😌

@okwasniewski
Following changes are done post your review:

Added events section in doc and added tabLongPress.
Incorporated API related changes regarding index in onTabLongPress.
Added example in NativeBottomTab itself.

Thanks again for your feedback!!


configure: Fix default path when enabling MPI.

A minor fixup. Correct showing what the default path is when mpi is installed.

Can one of the admins verify this patch?

@tensorflow-jenkins test this please

Thanks @caisq


Error in event handler for (unknown): TypeError: Cannot read property 'error' of null

Hello,
I will make a reference to this older thread on StackOverflow as that's the only discussion I could find. I was trying to discover what's happening for a long time, but no luck so far.
I am dispatching a function from a component, dispatch(me('hello')).
actions/me has a simple action.
export const me = message => ({
  type: 'ME',
  message,
});

And a simple reducer.
case 'ME':
  return {
    ...state,
    message: action.message,
  };

So far so good. I placed logs just about everywhere and the action gets dispatched, everything works, but.
console.log(dispatch(me('hello'))); will tell us Promise {<pending>}. Wait, what? Yes, this is because the action is dispatched from a content script. Had this been dispatched from a background script, we'd get back undefined as expected. So the question is, how do we fix this issue? Should we let the background script dispatch all actions?

Woops closed by accident.
The reason you’re getting a promise is because dispatching actions against a wrapped store in a content script actually ferries that action to the background script where the single source of truth store lives. All updates to that store on the background get serialized back to the content scripts so the wrapped stores there stay in-sync.
Basically, the promise returned when dispatching from a content script gets resolved when the background script receives the action since that communication mechanism is async. I’m all for standardized/consistent APIs, but I push to keep the returned promise since that can be useful in many cases (especially if there are additional async things that get done in the background because you’re dispatching an alias).

Hi @vhmth, thank you for looking into this! What I am trying to resolve is, what should be done about this, if anything at all? Is it an anti-pattern to dispatch actions from content scripts? If not, that error we keep getting is not very useful as it doesn't identify the reason. In addition to that, it doesn't appear to break any functionality (as long as you don't rely on synchronously returning some value), so it seems unnecessary. I could dispatch actions from the background script only to prevent the error, but is that the recommended way?

@lmenus could you provide a simple example of how you're getting an error? From the description of your issue, it seems like all is good and it's just the return type that's tripping you up. I'm trying to pinpoint the exact problem here, and, often times, a minimal test case is useful.

@vhmth I'll try to create a sample extension in the next few days if description won't be sufficient, though I hope we can do without it! The thread I linked to has this answer which is exactly what happens in my case. Unlike the OP on StackOverflow, my script works properly (error has no impact on the app), hence I believe it could be an issue with react-chrome-redux or me using an anti-pattern.
The actual dispatch type that causes this error is in lib/constants/index.js on line 8.
Then in lib/wrap-store/wrapStore.js on line 61 we get back undefined...
  /**
   * Respond to dispatches from UI components
   */
  var dispatchResponse = function dispatchResponse(request, sender, sendResponse) {
    if (request.type === _constants.DISPATCH_TYPE && request.portName === portName) {
      var action = Object.assign({}, request.payload, {
        _sender: sender
      });

      var dispatchResult = null;

      try {
        dispatchResult = store.dispatch(action); // <- equals undefined
      } catch (e) {
        dispatchResult = Promise.reject(e.message);
        console.error(e);
      }

      dispatchResponder(dispatchResult, sendResponse); // <- send undefined
      return true;
    }
  };

...which causes lib/store/Store.js error on line 203.
  {
    key: 'dispatch',
    value: function dispatch(data) {
      var _this3 = this;

      return new Promise(function (resolve, reject) {
        chrome.runtime.sendMessage(_this3.extensionId, {
          type: _constants.DISPATCH_TYPE,
          portName: _this3.portName,
          payload: data
        }, function (resp) { // <- still undefined :(
          var error = resp.error, // <- Error in event handler for (unknown): TypeError: Cannot read property 'error' of null
              value = resp.value;

          if (error) {
            var bgErr = new Error('' + backgroundErrPrefix + error);

            reject((0, _assignIn2.default)(bgErr, error));
          } else {
            resolve(value && value.payload);
          }
        });
      });
    }

But why does this happen? I logged line 112 in lib/wrap-store/wrapStore.js which is here.
  /**
   * Setup action handler
   */
  chrome.runtime.onMessage.addListener(dispatchResponse);

When everything runs OK, dispatchResponse() would receive the first parameter request that looks like this.
{
  someKey: 'someValue',
  anotherKey: 'anotherValue'
}

When we get the error (when I dispatch an action from content scripts), our request looks like this.
{
  payload: {
    type: "<redux action type>",
    actionKey: 'someActionValue'
  },
  portName: "<port>",
  type: "chromex.dispatch"
}

So we end up with the action object in the payload. Again, I will create a sample test case if this doesn't clarify it, please let me know.


Handle the case where the spec file is not at the top-level of the git repository

Currently rpmautospec assumes every spec file is placed at the top-level of a git repository, see:
https://github.com/fedora-infra/rpmautospec/blob/db1d71fa5df8df791d924d6f664e656613279808/rpmautospec/pkg_history.py#L88  and
https://github.com/fedora-infra/rpmautospec/blob/db1d71fa5df8df791d924d6f664e656613279808/rpmautospec/pkg_history.py#L69-L80
It would be nice if it can also support the case where it's not at the top-level.

Sorry for the late response, but what’s the use case for this?

Closing for inactivity.


JSDoc does not appear to work for ES6 class ctors

Testing #2218
a is not recognised as a number.
"use strict";

class Something {

	/**
	 * @param {number} a
	 */
	constructor(a, b) {
		a.
	}
}

This issue was moved to Microsoft/TypeScript#6646


Fix broken main

#1995
#1994  👈
main

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @kenny-statsig and the rest of your teammates on  Graphite

Merge activity

Sep 10, 7:40 PM EDT: Graphite couldn't merge this PR because it failed for an unknown reason.

🚀 Deployed on https://66e0d8ddb2150441d270a3fb--cozy-fox-0defec.netlify.app


Array of links in _links ?

Hi,
I am fairly new to HAL and I found this plugin pretty useful to get started.
I basically want to achieve this:
{
    "_links": {
      "items": [{
          "href": "/first_item"
      },{
          "href": "/second_item"
      }]
    }
}

as described under Representing Multiple Links With The Same Relation here
How could I do this using halacious ?
in my database this is stored as
items:[
   {
     "name":"first_item",
     "id":"first_item_id"
   },
   {
     "name":"second_item",
     "id":"second_item_id"
    }
]

Thanks

Hi there,
Multiple links with the same rel can be done but not by using the configuration short-hand. You'll have to use a prepare function on the route or a toHal() method on the returned entity. I added a full example to the examples folder, but here's the idea:
    // route definition
    // ...
    plugins: {
        hal: {
            prepare: function (rep, next) {
                var employees = rep.entity.employees;

                // adding multiple links with the same rel will create an array of links in the payload

                // link by route id
                rep.link('mco:employee', rep.route('employee.lookup', employees[0]));

                // or by relative path
                rep.link('mco:employee', '../../employees/'+ employees[1].id);

                // or by absolute path
                rep.link('mco:employee', '/employees/'+ employees[2].id);

                next();
            }
        }
    }

In reality, this use case rarely comes up for me because most, if not all, of my would-be link collections are mapped to their collection resource urls.
So, instead of doing this:
 >> GET /company/100
{
   "_links": {
      "employee": [ { "href": "/employees/100"  }, { "href": "/employees/101" } ]
   }
}

i would do this:
>> GET /company/100
javascript
{
"_links": { "employees": { "href": "/company/100/employees" }}
}
where ```/company/100/employees``` is a query-able collection resource returning a HAL entity with embedded employee items.

Obviously, the first approach makes more sense if you are returning a small fixed set of links.

Thanks @bleupen for your answer :smile:
Makes for sense to me now.
I have only a small set (max of 4) of links, so I would go with the first option.
I also want to reduce number of calls, the second approach increase number of calls.
Thanks again :)


Extract port number from authority before IDNA decode

Description
Before calling .decode("idna") first extract the port number. Attempt to fix issue #4409
If the port is present it can lead to a UnicodeError exception causing net.http.url.parse_authority to incorrectly return False.
The existing test passes because .decode("idna") accepts a port number some of the time:
>>> b"xn--aaa-pla.example:80".decode("idna")
'äaaa.example:80'

However this results in a UnicodeError exception:
>>> b"xn--r8jz45g.xn--zckzah:80".decode("idna")
Traceback (most recent call last):
  File "/usr/lib/python3.6/encodings/punycode.py", line 207, in decode
    res = punycode_decode(input, errors)
  File "/usr/lib/python3.6/encodings/punycode.py", line 194, in punycode_decode
    return insertion_sort(base, extended, errors)
  File "/usr/lib/python3.6/encodings/punycode.py", line 165, in insertion_sort
    bias, errors)
  File "/usr/lib/python3.6/encodings/punycode.py", line 146, in decode_generalized_number
    % extended[extpos])
UnicodeError: Invalid extended code point '8'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/lib/python3.6/encodings/idna.py", line 214, in decode
    result.append(ToUnicode(label))
  File "/usr/lib/python3.6/encodings/idna.py", line 131, in ToUnicode
    result = label1.decode("punycode")
UnicodeError: decoding with 'punycode' codec failed (UnicodeError: Invalid extended code point '8')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeError: decoding with 'idna' codec failed (UnicodeError: decoding with 'punycode' codec failed (UnicodeError: Invalid extended code point '8'))

Checklist

[x] I have updated tests where applicable.
[x] I have added an entry to the CHANGELOG.

This looks good, thanks! 🍰
Could you fix the missing test coverage please? Otherwise this is ready to be merged.

This looks good, thanks! 🍰
Could you fix the missing test coverage please? Otherwise this is ready to be merged.

Thanks, second test added, all checks now pass :-)

Thanks, second test added, all checks now pass :-)

Awesome, thanks! 🍰

Awesome, thanks! 🍰


Dsp 21082 trunk

There are only 5 multi-node tests:
MultiNodeQueryTest: doesn't seem useful, it's like running SingleNodeQueryTest on individual nodes.. I will replace it with read-repair tests..

MultiNodeNativeIndexDDLTest

I see this changed to IndexDDLTest. I noticed we're missing some things like shouldReindexDuringBootstrapWithMV and bootstrapTwoNodesWithZerocopyStreaming to name a few, just curious why?

MultiNodeConsistencyTest: already implemented via CASSANDRA-8272

The test coverage provided by CASSANDRA-8272 seems light compared to what MultiNodeConsistencyTest provides, are we losing test coverage or did I miss it?

MultiNodeConcurrentQueryTest:  DSP-20336 CLOSED

I see this changed to IndexConcurrencyFactorTest, looks good.

MultiNodeAvailabilityTest: already ported via  DSP-20808 CLOSED

Ported over as IndexStatusTest, looks good.

shouldReindexDuringBootstrapWithMV

I will add it back.

bootstrapTwoNodesWithZerocopyStreaming

in oss, index doesn't work with ZCS yet. (https://issues.apache.org/jira/browse/CASSANDRA-15866)

The test coverage provided by CASSANDRA-8272 seems light compared to what MultiNodeConsistencyTest provides, are we losing test coverage or did I miss it?

8272 is agnostic to index implementation and most of the tests are in dtests (https://github.com/apache/cassandra-dtest/commit/68f05b02842ccf4b2859d35a057d3be77d3313ab)

I see now, thanks for explaining, great job here @jasonstack

One last thing. I'm not sure if it's something wrong with my environment, but when I run IndexDDLTest within IDEA it consistently hangs after all the tests run/pass. When I attempt ant test -Dtest.name=IndexDDLTest from the command-line it doesn't actually run the tests, it skips over for some reason. It's only when I run ant testsome... does it work without hanging.

ant test -Dtest.name=IndexDDLTest

I think in-jvm dtest is not under ant test.. probably ant test-jvm-dtest


fixed uncertainy formatter and added tests

Fixes the issues in #451

Codecov Report

Merging #458 (175bd9f) into master (4a125fc) will decrease coverage by 0.01%.
The diff coverage is 92.59%.

@@            Coverage Diff             @@
##           master     #458      +/-   ##
==========================================
- Coverage   73.46%   73.45%   -0.02%
==========================================
  Files         115      115
  Lines       13893    13916      +23
==========================================
+ Hits        10207    10222      +15
- Misses       3686     3694       +8

@omodei ah, the only difference is that now inf will be reported as inf rather than crashing the code., e.g.,
1 -.5 + inf
and nans will report zero as they always have... however, the user will be warned when either of these occur.


Create codecov.yml

This change is

[Current coverage][cc-pull] is 97.24%

Merging [#43][cc-pull] into [master][cc-base-branch] will not change coverage

@@             master        #43   diff @@
==========================================
  Files            13         13
  Lines           796        796
  Methods           0          0
  Messages          0          0
  Branches         42         42
==========================================
  Hits            774        774
  Misses           17         17
  Partials          5          5

[][cc-pull]

Powered by Codecov. Last updated by 25c3de6
[cc-base-branch]: https://codecov.io/gh/fusionapp/fusion-index/branch/master?src=pr
[cc-pull]: https://codecov.io/gh/fusionapp/fusion-index/pull/43?src=pr

Reviewed 1 of 1 files at r1.
Review status: all files reviewed at latest revision, all discussions resolved.

Comments from Reviewable


fix: logging weights correctly in utils/weight_utils.py

Bug
#2361

Description of the Change
Any instances where weights are being logged have been changed to bt.logging.debug("weights", *weights).  The bug occurs when we attempt to log with bt.logging.debug("weights", weights)

Alternate Designs
The only other alternative was deleting the logging lines - I chose to keep them, but simply log them correctly.

Possible Drawbacks
None.

Verification Process
I have run my validator on our testnet, starting from a completely fresh state file.  This means that I saw the validator correctly set weights when there were NO weights to set (i.e. all 1's), and when there WERE weights to set (i.e. miners have done some work and have been scored).

Release Notes
Fixes logging bug where weights were being logged w/o an *

Please update this to merge into staging.


New code format

So, Discord recently released this video: https://youtu.be/BZKz16o9rms?t=522
You can see that the codes (if I can count correctly) has 24 strings of random chars instead of 16.
Is there a way that the generator can randomly generate 16-24 characters instead of the usual 16?
I think this feature should be added.

It is pretty eazy to change the length of the gift in the code I'll send the code snippet they you need to change in a minute

By changing k you change the length

                code = "".join(random.choices( # Generate the id for the gift
                    string.ascii_uppercase + string.digits + string.ascii_lowercase,
                    k = 16
                ))```


Adding test coverage for raw

I would keep the isset() in offsetExists. If you need help with the squashing, send me a private message here on github.

Sorry that took so long.  I squashed it into one commit.  Let me know if that doesn't look right.


Fallback if query interval is not covered by DEFAULT_CACHE_POLICY

avoids
ValueError: max() arg is an empty sequence

if queryTime is not covered by DEFAULT_CACHE_POLICYwhich can happen if it doesn't have key 0

Current coverage is 65.94% (diff: 0.00%)

Merging #1679 into master will decrease coverage by 0.01%

@@             master      #1679   diff @@
==========================================
  Files            54         54
  Lines          6106       6107     +1
  Methods           0          0
  Messages          0          0
  Branches       1205       1204     -1
==========================================
  Hits           4027       4027
- Misses         1872       1873     +1
  Partials        207        207

Powered by Codecov. Last update 2cc2a2a...ab9b264

LGTM

I assume you want to close this one in favor of #1680?

I assume you want to close this one in favor of #1680?

No, they should be both in, but they fix different things, hence 2 PRs

But, but, but... they're changing same lines in same file - how both could be applied..?

Thats fine, whichever is merged first, I rebase another

The difference here is so minimal (to the other PR) I'd prefer to see it added on top of #1680.

done


Async KBC trait?

I've been working on an online_sev_kbc and I'm realizing that it is quite a pain to make async gRPC requests from the KBC module because the KBC trait methods are not async. It seems like this might be a problem for the CC-KBC as well. Do you have any plan for this? @jialez0

Thanks for reminding, this is indeed an important problem we face. Maybe we can modify KBC trait in a new PR to make it asynchronous, and modify all KBCs, which should be necessary. But I'm not sure if this will cause problems for some KBCs at present.

I think the offline_fs_kbc and offline_sev_kbc should be fine.
Currently there is a mutex in the gRPC functions. We use the mutex to lock the AA object before calling decrypt_image_layer_annotation and download_confidential_resource. We need to do this because both of these functions could instantiate new KBCs and thus change the internal state of the AA object. If we make decrypt_image_layer_annotation and download_confidential_resource into async functions, we will probably need to use tokio::sync::Mutex rather than the standard one. The standard mutex can't be held across an await.
That said, I'm not sure that it's a good idea to hold any mutex while awaiting. We don't want to lock a mutex and then immediately deschedule the thread by awaiting. Instead I think we might want to refactor the AA trait a little bit. We should think about adding a new method that takes a KBC name and then updates the internal state of the KBC if necessary. This function would be sync. Then we can remove that functionality fromdownload_confidential_resource and decrypt_image_layer_annotation. This way we would only need to hold the mutex while we call the first sync function. Does that make sense?
I am also a bit worried that the AA struct is not Send-able. I've done a bit of testing and run into some problems with it.

That said, I'm not sure that it's a good idea to hold any mutex while awaiting. We don't want to lock a mutex and then immediately deschedule the thread by awaiting. Instead I think we might want to refactor the AA trait a little bit. We should think about adding a new method that takes a KBC name and then updates the internal state of the AA if necessary. This function would be sync. Then we can remove that functionality fromdownload_confidential_resource and decrypt_image_layer_annotation. This way we would only need to hold the mutex while we call the first sync function. Does that make sense? We might still have problems with the state of the KBCs themselves. Are we going to need a mutex to protect that?
This may indeed improve the efficiency of AA in processing requests, but it will prevent us from caching the key obtained from KBS in the KBC structure when decrypting layer annotation, but maybe we can cache the key in another way (such as writing to a file).

I am also a bit worried that the AA struct is not Send-able. I've done a bit of testing and run into some problems with it.
What is the specific problem?

Ok I sorted out the issue with the AA struct. There is now PR https://github.com/confidential-containers/attestation-agent/pull/66. This doesn't change the usage of the mutex that I was complaining about above. For now I think it's more important to continue working on the new KBCs. We should come back to the mutex later.

Solved by #66


Max limit 100

By default, 100 objects can create. how can edit limit?

ok, i got it
<a-entity
         id="grassIM"
         gltf-model="#grassGlb"
         scale="1 1 1"
         instanced-mesh="capacity:1000">
      </a-entity>


map has() crashes for non-existent keys

Example
{
    const map = new Map([
        ["foo", 1],
        ["bar", 2],
        ["baz", 3],
    ]);

    const object = {
        value: map,
    };

    setRoot("test-root", object);
    commit();
}

{
    const object = getRoot("test-root");

    console.log("before");
    if (object.value.has("qux")) { // crashes here
        throw new Error(`Expected ${JSON.stringify("qux")} to not exist`);
    }
    console.log("after");
}

before
fatal runtime error: failed to initiate panic, error 5

Hi @kevgug, I’m interested in contributing to this issue. Could you please provide more details? I’m excited about the idea behind Freestyle and would love to contribute.

Hi @wasifkareem, thanks for your interest in contributing. I had self-assigned this issue but I'd love to refer you to our CONTRIBUTING.md document. At the moment, writing JS tests for everything labelled "Not Tested" in SUPPORT.md is the quickest way to support us.


Repository for material templates

Following is initial draft for material2 templates.
https://github.com/divyakumarjain/ng2-formly-template-material
We have following two options

Mono repo for all templates under ng2-formly. (The way angular2, material2 has all the modules in same repo).
Separate repo for each type of template implementation.

The second has an advantage that each template can have its own issue repo.

👍 2nd options makes a lot of sense.

Can you create this repo in formly-js organization instead of created it in your personal repository please

Sorry I did not realize that i had access to create new repo in formly-js organization. Let me know if you are ok with ng2-formly-template-material name and i will go ahead and create one.

Yes it looks perfect 👍


add lexical features

we don't have a feature extractor for the word itself, or for stemmed representations, suffixes, prefixes, etc...
these should be easy to implement

by the way, we have ngrams extractor: https://github.com/qe-team/marmot/blob/master/marmot/util/ngram_window_extractor.py
Should I convert it to feature extractor? It can be used to extract the token itself, if you set window_size to 0.

I think just wrap it from a feature extractor, since we already use it as a
utility for other feature extractors in word-level.
On Wed, Feb 18, 2015 at 7:05 PM, varvara-l<EMAIL_ADDRESS>wrote:

by the way, we have ngrams extractor:
https://github.com/qe-team/marmot/blob/master/marmot/util/ngram_window_extractor.py
Should I convert it to feature extractor? It can be used to extract the
token itself, if you set window_size to 0.
—
Reply to this email directly or view it on GitHub
https://github.com/qe-team/marmot/issues/23#issuecomment-74925843.


Fast forward mixer/stable after postsubmit

Release note:

None

This change is

/assign @guptasu
/assign @sebastienvas
PTAL

/lgtm

/assign @guptasu

@yutongz Would you mind adding the lgtm label again? I rebase from master and your lgtm was removed.

/lgtm


feat(component): new command called shell

Fixes #84

Proposed Changes

Added command to have Herbs2REPL integrated with CLI
Possibility of using Herbs2REPL to interact with your UseCases
...

Readiness Checklist
Author/Contributor

[ ] If documentation is needed for this change, has that been included in this pull request
[ ] Remember to check if code coverage decrease, if so, please implement the necessary tests

Reviewing Maintainer

[ ] Label as breaking if this is a large fundamental change
[ ] Label as either automation, bug, documentation, enhancement, infrastructure, or performance

Here's a preview of how it will look.

To use a file, you must have an object exported in this way.

@danielsous it is almost good to merge, but it seems the code coverage has dropped. can you fix it?

@danielsous the shell.js file is decreasing the coverage (https://github.com/herbsjs/herbs-cli/pull/142/files#diff-2c1ed9d40647a2ee17b8bdf4c5966a9cea13b4269966ec0de4cb0df63c62c975). You need to add more tests to cover this file.


IA-1606: remove unnessecary loader

Explain what problem this PR is resolving
Self proof reading checklist

[x] Did I use eslint and black formatters
[x] Is my code clear enough and well documented
[ ] Are my typescript files well typed
[ ] Did I add translations
[ ] My migrations file are included
[ ] Are there enough tests

Changes

removed the main loader as there is already one on table and on each filters's select inputs

@cypress

@cypress


render blank pages after upgrading middleman to 3.3.2

the repo:
https://github.com/4point/osdc.tw
all blog pages are under /news/ but now get blank content.

This is at the top of Google Search results for "middleman blank pages". I was missing a closing } at the end of my partial's locals, which was causing a blank page (no crash or error) in Middleman 4.2.0. I upgraded to 4.2.1 and the error was shown.
Example missing brace (after page_articles):
<%= partial "partials/post_summaries.erb", locals: {
    articles: page_articles %>


Add spdlog dependency to CMakeLists.txt for 4-2-stable

I think this is closeable?    It was already in master...


docs: fix references.bib

This PR removes \url and \_ commands in references.bib. The existence of them breaks https://github.com/leanprover/doc-gen4/pull/209.

The first is howpublished = {\url{...}}. I think it's better to use the standard url field. Meanwhile howpublished field is preserved since some bibtex parser complains about missing that field.
There are some \_ in url and doi fields. I think it's better to replace them with _; there are already some _ in url and doi fields of other bibitems.
There is $K\_X$, but which, after checking the original article, should be $K_X$.

Thanks!
bors r+


Product groups

You'd set up product groups and we'd be able to sell "kits" with those products in them.

A variation of this should be pretty easy to do in tandem with #41 feature. Just create a long-lived "order code" that would load all the products in the kit.


⚠ LPDM Handbook (hosted on Divio) has degraded performance

In 011d4cb, LPDM Handbook (hosted on Divio) (https://repohubdev.tk) experienced degraded performance:

HTTP code: 500
Response time: 5432 ms

Resolved: LPDM Handbook (hosted on Divio) performance has improved in a4a46c0.


Fix failing CI checks

Multiple CI checks have been failing because of an issue using the lukka/get-cmake action in the CI workflow. The latest version of lukka/get-cmake uses node20 instead of node16 so it requires higher versions of the c standard libraries. To keep this working with the older GCC versions, I have specified the previous version of the lukka/get-cmake.
There also seems to be a new failing clang tidy check in one of the tests due to a static cast to a derived type. I assume this is due to the jobs container updating the clang tidy version. Added a NOLINT to this line to get the CI passing for now.

Pull request checklist
Read the Contribution Guidelines for detailed information.

[x]  Changes are described in the pull request, or an existing issue is referenced.
[x]  The test suite compiles and runs without error.
[x]  Code coverage is 100%. Test cases can be added by editing the test suite.
[x]  The source code is amalgamated; that is, after making changes to the sources in the include/nlohmann directory, run make amalgamate to create the single-header files single_include/nlohmann/json.hpp and single_include/nlohmann/json_fwd.hpp. The whole process is described here.

Please don't

The C++11 support varies between different compilers and versions. Please note the list of supported compilers. Some compilers like GCC 4.7 (and earlier), Clang 3.3 (and earlier), or Microsoft Visual Studio 13.0 and earlier are known not to work due to missing or incomplete C++11 support. Please refrain from proposing changes that work around these compiler's limitations with #ifdefs or other means.
Specifically, I am aware of compilation problems with Microsoft Visual Studio (there even is an issue label for this kind of bug). I understand that even in 2016, complete C++11 support isn't there yet. But please also understand that I do not want to drop features or uglify the code just to make Microsoft's sub-standard compiler happy. The past has shown that there are ways to express the functionality such that the code compiles with the most recent MSVC - unfortunately, this is not the main objective of the project.
Please refrain from proposing changes that would break JSON conformance. If you propose a conformant extension of JSON to be supported by the library, please motivate this extension.
Please do not open pull requests that address multiple issues.

Thanks a lot! L

coverage: 100.0%. remained the same
when pulling 1c41daada498fe99867a93062ee7677476b2228c on colbychaskell:fix-ci-get-cmake
into 6eab7a2b187b10b2494e39c1961750bfd1bda500 on nlohmann:develop.


Newest Version (Mid March 2018) Breaks Paste in Google Docs

Title.

Is the extension active or inactive for you on Google Docs (is the icon grey or blue)? If active (blue), you can remove any rules matching the site by: clicking on the extension icon, then clicking the "x" button next to the rule.
That said, I cannot reproduce the error even with the extension active for Google Docs. If the above steps didn't help, can you provide more details as to what exactly is broken?

If by Google Docs you meant Google Sheets, then I was able to reproduce the problem. But again, deleting any rules that match the URL should fix the problem. If that's not the case, feel free to reopen issue.

I had this same problem with Google Sheets, and actually switched to using Safari with Google sheets for a while until I realized that this extension was causing the problem. Is there any way to whitelist Sheets by default so that it doesn't mysteriously break when using this extension?

@michaelrkn if you are on version 2.3 all sites are whitelisted by default, the only place where the add-on is active is on sites you specifically blacklist.

@michaelrkn: if you open a tab to chrome://extensions/?options=nkgllhigpcljnhoakjkgaieabnkmgdkb, what rules do you see? One of those rules must be matching https://docs.google.com.

Alternatively, from a tab on Google Sheets: you can click on the button for this extension, a popup will open, and if there's a rule that's matching the tab's URL there will be an x to the right of the input field, which you can click to delete the rule.

Weird, I don't see any rules. I'm on 2.3. I actually disabled it on Google
Sheets by clicking the extension button, seeing no rules, clicking the x,
and then refreshing the page. That doesn't sound like the expected behavior.
On Sun, Mar 25, 2018 at 4:44 PM, Jacob Swanner<EMAIL_ADDRESS>wrote:

Alternatively, from a tab on Google Sheets: you can click on the button
for this extension, a popup will open, and if there's a rule that's
matching the tab's URL there will be an x to the right of the input
field, which you can click to delete the rule.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/jswanner/DontFuckWithPaste/issues/58#issuecomment-376006115,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABNTYkzoHXw_vUn4meho7jqHHYLOSf3tks5tiA-0gaJpZM4SrWr6
.

What if you disable the extension altogether from chrome://extensions ?

I don't have any rules, and even if I add one for docs.google.com it still has the same no-paste in google sheet's problem.  It's blue in the icon. As soon as I disable the extension, and refresh the google sheets, I can paste again.

I tried uninstalling and reinstalling the extension. Now it seems to have the expected behavior of being disabled by default.

I had the same problem - no rules defined but I still couldn't paste.  Ended up simply disabling the extension and things are working again.


Removes the MarketingHeader from the Artworks for you tab on the homescreen

👋

Note the branch, this is going to stable (which is my 1.7.5 branch for deploying) - I'll do a separate PR after this to bring the commit into master.

LGTM 👍
merge on green


Make the language "less" newline sensitive

0.2 pending discussion with anders

Not sure if this is the right place for this comment, feel free to point me to a better Issue.
If this means I can add newline on long lines for readability this would be great!
I have two scenarios in particular:
Long if-statements, these can be hard to read. For example:
var value = equals(myParam,'value1') ? settingsTable.value1 : equals(myParam,'value2') ? settingsTable.value2 : {}

This would be much  more readable over several lines:
var value = equals(myParam,'value1') ? settingsTable.value1 :
            equals(myParam,'value2') ? settingsTable.value2 :
            {}

Same thing goes for conditional deploys when they are implemented:
resource logAnalytics 'Microsoft.OperationalInsights/workspaces@2020-03-01-preview' when (condition) = {

vs
resource logAnalytics 'Microsoft.OperationalInsights/workspaces@2020-03-01-preview'
when (condition) = {

Adding related issues:

#498
#586

Also adding #1760 as a related issue

I noticed an dirty hack to split functions over multiple lines, using block comments:
var multilineFunction = resourceGroup(/*
*/ mySubscription, /*
*/ myResourceGroup)

Same thing works for ternary, and probably generally for all expressions:
var test2 = thisIsAVeryLongTernary && iWouldLikeToSplitIt ?/*
*/ acrossMultiple :/*
*/ lines

I don't recommend anyone actually use this 😄

Can the team document these under limitations? Same as multiple line arrays?

@masters3d - We have a known limitations section in our README. Did you see this there? Where else would you want/expect to see this?
@tfitzmac / @mumian FYI

I don’t see documentation that the language is white space sensitive in certain scenarios. It would be great to see all of these listed.

I did some experimenting on a branch, and wanted to write up some notes / get some feedback. If you'd like to try this out and give feedback, install the VSCode extension I built here.
Main things I wanted to solve

Support for multi-line function calls.
Support for single-line array & object declarations.

Assumptions

We must continue to support multiline object & array declarations without commas.
Single-line array & object declarations must have separators between elements.
We should try to avoid introducing multiple ways of declaring the same thing (e.g. supporting both commas & no commas in a multi-line object).
It would be nice (but not necessary) to have the same behavior across function & array/object declarations.

Initial idea
// Single-line declarations use commas to separate elements
var myObject = { abc: 'def', ghi: 'jkl' }
var myArray = [ 'abc', 'def' ]
var myFunc = concat('abc', 'def')
// Multi-line declarations do not use commas to separate elements
var myObject = {
  abc: 'def'
  ghi: 'jkl'
}
var myArray = [
  'abc'
  'def'
]
var myFunc = concat(
  'abc'
  'def'
)

Thoughts

It's nice to have consistency between functions & objects/arrays, but the function declaration with no commas is quirky. Then again, objects/arrays with no commas are also unusual, but we're used to them.
When switching between single-line and multi-line declaration, you'd have to remember to remove the comma.

Alternatives

Functions: commas on both single and multi-line. Arrays/objects: commas on single-line, no commas on multi-line:// Single-line
var myObject = { abc: 'def', ghi: 'jkl' }
var myArray = [ 'abc', 'def' ]
var myFunc = concat('abc', 'def')
// Multi-line
var myObject = {
  abc: 'def'
  ghi: 'jkl'
}
var myArray = [
  'abc'
  'def'
]
var myFunc = concat(
  'abc',
  'def'
)

Functions/arrays/objects: single-line always has commas, multi-line commas are optional:// Single-line
var myObject = { abc: 'def', ghi: 'jkl' }
var myArray = [ 'abc', 'def' ]
var myFunc = concat('abc', 'def')
// Multi-line
var myObject = {
  abc: 'def'
  ghi: 'jkl'
}
// OR
var myObject = {
  abc: 'def',
  ghi: 'jkl',
}
var myArray = [
  'abc'
  'def'
]
// OR
var myArray = [
  'abc',
  'def',
]
var myFunc = concat(
  'abc'
  'def'
)
// OR
var myFunc = concat(
  'abc',
  'def'
)

Feedback
I'd love to get some feedback on the above - feel free to respond with your preference on either:

Initial proposal.
Alternative 1.
Alternative 2.
Other - any other alternative you'd like to see.

@anthony-c-martin
I am more interested in doing something like this
...
resource interactiveQueryRequestsFailAlert 'Microsoft.Insights/scheduledQueryRules@2021-08-01' = {
  name: empty(hdInsightMonitoring.alertRules.interactiveQueryRequestsFail.id) ?
    alertRules.interactiveQueryRequestsFail.id :
    hdInsightMonitoring.alertRules.interactiveQueryRequestsFail.id
  location: location
  kind: 'LogAlert'
  properties: {
    overrideQueryTimeRange: hdInsightMonitoring.alertRules.interactiveQueryRequestsFail.overrideQueryTimeRange == 0 ?
      null :
      'PT${hdInsightMonitoring.alertRules.interactiveQueryRequestsFail.overrideQueryTimeRange}M'
....

and this
...
resource resourceGroupsRes 'Microsoft.Resources/resourceGroups@2021-04-01' existing =
  if (!empty(hdInsightMonitoring.alertsScope.resourceGroup)) {
  name: hdInsightMonitoring.alertsScope.resourceGroup
  scope: subscription(hdInsightMonitoring.alertsScope.subscriptionId)
}
...

As reading becomes hard when when you have conditions with long names for parameters/variables or you have 2 or more conditions nested or you have conditions on resources that are long.

I think Go largely gets this right. Semicolons (their separator) are legal to use as a separator in addition to newlines, but are removed by autoformatting. https://go.dev/ref/spec#Semicolons
You could also choose to make commas required for functions and not for the other usages. For example go uses commas (never optional) in expressions, and semicolons in declarations (optional).

At first, I prefer Alternative 1, which is what F# has implemented: https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/lists#creating-and-initializing-lists (the difference is that F# uses semicolons as a separators). However, when switching from single line to multiline array/objects, users would have to remove commas, which makes think that the initial idea is better. I also like @rynowak's idea to let the formatter remove commas in multiline declarations.

As requested in the 2022-01-27 community call.
Multi-line support (or being less sensitive to new lines) is to useful in one scenario I can think of and that's with API management. In API Management you can define a policy as part of an API resource (https://docs.microsoft.com/en-us/azure/templates/microsoft.apimanagement/service/apis/policies?tabs=bicep)
If you want to embed that in your bicep, you'd have to inline a significant piece of xml (not a full xml doc, but a snippet)
Since you can set the type to rawxml or xml that would provide a nice way to trigger the sensitivity.
When this is not support and the xml needs to remain in an external file, there is already support via the loadTextContent('my-xml-file.xml'). To me that's fine, inline would be maybe a bit more intuitive since it's explicit and maybe would open the road to do parameter substitution in the text content.

@CarloKuip - the good news is you can actually already do this today, using Bicep's multi-line strings 😄
For example:
resource apiPolicy 'Microsoft.ApiManagement/service/apis/policies@2021-01-01-preview' = {
  parent: api
  name: 'policy'
  properties: {
    format: 'rawxml'
    value: '''
<policies>
    <inbound>
        <cors>
            <allowed-origins>
                <origin>__ORIGIN__</origin>
            </allowed-origins>
            <allowed-methods>
                <method>*</method>
            </allowed-methods>
            <allowed-headers>
                *
            </allowed-headers>
            <expose-headers>
                *
            </expose-headers>
        </cors>
    </inbound>
    <backend>
        <forward-request />
    </backend>
    <outbound />
    <on-error />
</policies>
'''
  }
}

Docs here.

Feedback from MVP summit asking if we should introduce more flexibility on our new line sensitivity:

I will add a comment on this one. I don't want to stop other people having options for what they want and personal preference for code style or configuration management style.
One thing that I have come to appreciate over time when you have large configuration documents, having a single configuration item on each line, ensures that it's easier to maintain in version control and also helps to avoid merge conflicts.
I do appreciate how json formatter takes arrays and puts them on new lines by default, unless you minify the json. I didn't appreciate this at first, however auto format in a deterministic fashion (along with the linting rules) is extremely helpful for not committing errors.

often you do have a long list and it's tempting to put multiple items on a single line, however having the ability to autoformat is the most important thing for me. Otherwise after working on code or configurations you have added spaces or changes that are not actually configuration changes. The auto format cleans up the code and alignment, so you only check in actual changes, not just changes in how a document is 'manually' formatted.

To summarize: I am not against a new feature, however it would be my preference if having an auto format + linting, would be available as part of the implementation.
In saying this I am also guilty of the following, ... which @anthony-c-martin mentioned further up in this issue https://github.com/Azure/bicep/issues/146#issuecomment-820445247
        networkSecurityGroup: !(contains(sn, 'NSG') && bool(sn.NSG)) ? null : /*
        */ {
          id: contains(sn, 'NSGID') ? sn.NSGID : NSG[index].id
        }

Feedback from MVP summit asking if we should introduce more flexibility on our new line sensitivity:

And the feedback from today's community call with a demo of an MVP implementation

🤔🤔🤔

"With functions, we keep the command and can now split over multiple lines" ✅
- Really love this.
- Any chance we can do it without commas as well?
e.g.
var func = resourceGroup(
     mySub
     myRGName
)

I wrote this, just this week, so this feature would avoid the mess below
targetResourceId: ep.eptype != 'azure' ? null :  resourceId( EPs[index].subname, /* subscription
                                                             */ EPs[index].rgname, /*  resourcegroup
                                                             */ EPs[index].restype, /* resourcetype e.g. publicip
 resource name */ '${EPs[index].resnameprefix}${ep.prefix}-${EPs[index].org}-${EPs[index].app}-${EPs[index].env}-${ep.name}')

Array and Objects
- The trailing comma on the last item was confusing on the call, however now I realize I like it.
- I like not having to put the trailing comma
- I like being able to have the trailing comma, since I may comment out a line and it's frustrating cleaning up commas, when you are only just testing commenting something out.
e.g. I would expect below
	var arr = [
	    'abc',
	    'def'
	]

	var arr = [ 'abc', 'def' ]

	var arr = [
	    'abc',      <--- this is nice to have, since i just temporarily commented 'def'
	    //'def'
	]

I think I like having the delimiter for single line, however it's only what I am familiar with.
I think I time I could grow to like the simplicity of doing spaces only, less characters to deal with.

so long as it formats well, I am happy.

After rewatching the video, my brain caught up and I think all of this is good ✅ I didn't vote on the call, however I would say yes now.

To summarize: I am not against a new feature, however it would be my preference if having an auto format + linting, would be available as part of the implementation.

@brwilkinson I second that. Actually, I think it is a requirement to update the formatter to support alternative layouts, because currently the formatter uses hard-coded rules and always puts an array/object item on a new line. I'd volunteer to update the formatter (time to implement the second part of https://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettier.pdf 🙂).

@shenglol 🙂
Part 2, pretty print with alternate patterns, would be so nice, I think the optimal/ideal solution.
The setting for grouping based on chosen width, seems to be the best of both worlds. to align with the single/multiline capability flexibility language additions in this issue.
When work was being done on ARM template JSON, the capability was implemented to allow expressions to be placed over multiple lines. After that addition, the formatter was then disabled around these function (so formatting became manual).
@StephenWeatherford did some work with a UI 'toolstip' feature to show the following. No formatter was implemented, however the preview was available, which shows the nested/grouped format. (slightly different grouping/flattening than in that doc, however similar concept).
I am already thinking of a decorator to override the default width/grouping for the next line expression 😀

Closing this issue out - going forwards, please create separate issues for the specific syntax that you would like relaxed line break support for:

#586
#5829


Scroll performance on Profile screen on Android

Describe the bug
When inside the profile screen, at least on my device (Xiaomi MI 9 SE) the UI stutters visibly while rendering the LoadLatestBtn.
What's weird: this happens on this device only (tried on Pixel 7 Emu and not able to repro) and exactly on the profile page (no visible stutter in home/feeds page or in notification screen, despite the logic for showing/hiding the button being identical)
To Reproduce
Steps to reproduce the behavior:

Go to the profile page on an Android device
Scroll until the button to go back to top is visible
Notice the lag

Expected behavior
The scroll should be smooth
Screenshots
(video)

Default behavior (on prod build from Play store)
Expected (on dev build, read below)

Details

Platform: Android
Platform version: 14 (LineageOS)
App version: 1.185.1

Additional context
I explored the relevant logic here and experimented a bit, and I think the problem is with useMinimalShellMode creating and exporting the animatedStyle used by LoadLatestBtn together with other animatedStyles?
Apparently I managed to make it behave by exporting fabMinimalShellTransform from a dedicated hook instead of useMinimalShellMode.
This in theory avoids creating and returning all of the transforms altogether from the useMinimalShellMode hook, but I'm not very familiar with how Reanimated's useAnimatedStyle works under the hood and why this should impact performance on mid/low end devices.
Also, this doesn't explain why I can reproduce it ONLY on the Profile screen...
Default behaviour (React DevTools profiler, dev mode):

Separating the animatedStyle creation (React DevTools profiler, dev mode):

oh yeah great find. do you want to PR?

Yes, very happy to!


Fixes for i2c Read and WriteRead:

Use automatic mode for autoend with Read
Check TXE between Write and Read in WriteRead
Check for variant success first in busy_wait macro

Tested with the following embedded hal i2c drivers:

bmp280 (barometer)
em7180 (imu/ahrs)
bno080 (ahrs wip)

Cool! :+1: Thanks for this PR. I'll have a closer look later today  (i hope)

Thanks!  Here's an example analyzer trace from where write_read was failing:

And an example trace from where read was failing due to an incorrect autoend setting:

Thank you for your logic analyzer proves btw :)
If you want, you could a a FIX note to the CHANGELOG :)

The CI is currently stuck. I don't know, how to rerun it, but as conflicts have to be resolved anyways, this should retrigger the CI. I hope it will work then :)

Fixed the merge conflicts and re-squashed the PR


Profile is not picked up properly using aws-shell

I have two profiles in my .aws folder.
> cat config
[office]
output = json
region = us-east-1

[profile personal]
output = json
region = us-east-1

When I login to aws-shell I provide the profile
> aws-shell -p personal

Below is the output of '.profile'
aws> .profile
Current shell profile: personal

When I did 'ec2 describe-instances' it list all ec2's under my 'office' profile instead of 'personal'.

I got a long list of ec2's for the below.

aws> ec2 describe-instances
{......}

While below is the output if I specify --profile for 'ec2 describe-instances' command.

aws> ec2 describe-instances --profile personal
{
    "Reservations": []
}

Since I set profile while entering aws-shell. I would expect both the above two cases (1 and 2) to return the same result i.e. the one returned by 2 (as it is correct). I would expect the same from 1 as well.
I am using aws-shell version (0.1.1)

Hi @seroandone, I'm not able to reproduce this issue on my system (macOS 10.12, Python 2.7.10) on a fresh install of aws-shell 0.1.1.  Are you still seeing this issue and if so, consistently?

Thanks @donnemartin I think i got the problem. I was having AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY in my environment variables, so that took precedence over the profile I mentioned when i logged into aws-shell. Unfortunately some apps that I have needs this environment variables.
I would expect if i specifically provide -profile during login to aws-shell, I assumed it will use that instead of even the environment variable. Or at lease when i change to a profile while I am in the aws-shell. But this is ok if it is the way it is as well. So one must not have environment variable if they got to use the profile feature.
Thanks for looking into this.

If AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY are taking precedence over the profile feature (I haven't had a chance to verify this yet), I can see how that could be confusing.  I'm not sure if that's the intended behavior.  Thanks for the additional information!

Suggestion: This would have probably been easier to debug if .profile also output the currently selected access key


Unable to access connections page

Hi,
I am running the local runner on my mac with an M1 chip and I am unable to access the connections page at all. Everytime I try to I get the following message:
`Ooops!
Something bad has happened.
Airflow is used by many users, and it is very likely that others had similar problems and you can easily find
a solution to your problem.
Consider following these steps:

gather the relevant information (detailed logs with errors, reproduction steps, details of your deployment)

find similar issues using:

GitHub Discussions
GitHub Issues
Stack Overflow
the usual search engine you use on a daily basis

if you run Airflow on a Managed Service, consider opening an issue using the service support channels

if you tried and have difficulty with diagnosing and fixing the problem yourself, consider creating a bug report.
Make sure however, to include all relevant details and results of your investigation so far.

Python version: 3.7.10
Airflow version: 2.2.2
Node: redact
Error! Please contact server admin.`
Any idea why?
Any help is appreciated,
Thanks

I also encountered the same thing. Also using MacBook pro M1 pro. Any help is appreciated, Thank you!

Any update on this issue? Im also running into this on the v2.2.2 branch.

+1
same issue, running mwaa 2.2.2 on wsl ubuntu distro

@jeromecarlesshelix @Silvia-xiao
I started using onikolas/v2.2.2_updates branch, this branch has resolution to connection page issue. not sure weather it is merged to main branch.

I had the same issue; my problem was that I ran mwaa 2.0.2 with a postgres database backend before switching to mwaa 2.2.2
In the background, I was using 2.0.2 fernet key for connections instead of generating a new key for 2.2.2
I had to delete the db-data folder postgres container created before being able to generate a new key for my airflow backend database.
Bottom line: delete db-data folder of postgres (or whatever backend db system you are using)

run this command -
./mwaa-local-env reset-db

it fixed my fernet issue.


Cannot launch VS Code from a shell

Does this issue occur when all extensions are disabled?: Yes

VS Code Version: 1.56.2
OS Version: 11.4

Steps to Reproduce:

Install VS Code
Install code to path using the command pallet
Open Terminal
Type code .

Expected Result:
VS Code opens with the current directory as the current context
Actual Result:
% code --disable-extensions
/usr/local/bin/code: line 10: ./MacOS/Electron: No such file or directory
~ %

Additional Context:
This started happening 3 days ago; at that time I was using the previous version of MacOS (11.3.?). Since then I have upgraded to MacOS 11.4 and the problem persists.
I have attempted uninstalling and reinstalling the CLI command using the command pallet but the problem still persists.
This could be the same problem as #89037, but that issue never had a resolution other than "it magically started working again for me". In testing things, I did discover that realpath does not exist on my system. I then performed a brew install coreutils and can see realpath working as expected, but VS Code continues to exhibit the same issue.

What does which python return from your terminal?

That's a good question. I run python within Docker containers, and have been doing so using an alias:
% which python                                                                                8:23:08
python: aliased to docker run --rm -ti -v ${PWD}:/data -w /data python:3.9.4-buster python
~ %

This has been working just fine and has had no effect on VS Code. I recently (about the time this issue occurred) switched from an alias to a script that is early in my $PATH:
#!/bin/sh
docker run --rm -ti -v ${PWD}:/data -w /data python:3.9.4-buster python $@

This appears to be what broke things.

If you inspect our launcher, you'll see that we depend on Python, unfortunately: cat $(which code). You can hardcode your system Python in that script and that'll fix it for you.

OK, that makes sense. I believe hardcoding a change in the launcher will break every time I upgrade Code, but I can work around that by switching back to the alias I was using.


Take this prototype to GA

⚠ Important: This issue is currently reserved as a potential Google Summer of Code project. No one should do any work on this without first being formally paired with our project for GSoC'22.
The contents of this repository, at present, represent an early-stage prototype of a web-based, Brigade v2-compatible dashboard application. While this prototype works well enough to be useful, it does not yet meet the high bar for quality that the Brigade project, as a whole, aspires to. With our core team's front-end bench strength somewhat lacking at the moment, this issue calls for a suitable candidate to take on ownership of its principal development. Specific areas of focus may include, but are not limited to:

Improving error-handling
Developing test suites (we currently have none)
Ensuring compatibility across popular browsers
Improving the overall look, feel, and responsiveness of UI elements
Improving the overall user experience
Improving accessibility

A modest degree of familiarity with the Brigade project would be beneficial, but is not required. The successful candidate will be proficient with HTML, CSS, TypeScript, and React. Prior experience testing React applications would be preferred. Familiarity with web accessibility standards (like ARIA) is not required, but would be helpful. Most importantly, the successful candidate will be a motivated self-starter with excellent collaboration and communication skills. They will need to be capable of triaging issues reported by maintainers and the community, reviewing PRs, and proactively identifying and reporting opportunities to improve the application without waiting for them to be reported by others.
The desired outcome of the summer's efforts is a GA release of this dashboard.
This is estimated to be a medium difficulty project that a qualified candidate can complete with roughly 350 hours of effort.

Hello @krancour
I am Hemant Bajaj, a second-year student pursuing my bachelor's in Industrial Design. I have been doing frontend development over the past 1 year and am currently focusing on improving my skills. I have had experience building frontend websites using React and Javascript. I have gone through the ideas in the ideas list as well as in this issue and I would like to propose:

For testing we can use Jest or React Testing Library.
For ensuring compatibility we can write codes in those versions of Typescript and React which will be compatible with all the browsers
As I mentioned earlier, I'm pursuing my bachelor's in Industrial design whose major part is UI/UX development. After considering all the aspects and requirements, I can propose changes and further implement them as well.
For improving user experience we can also develop the dark theme as many people prefer dark themes.
For improving accessibility we can use google translate API and we can make it more dynamic by getting the user location**(this will be based on user permission)** by using the javascript GEOLOCATION API.  If they agree we can dynamically show the languages which will be best suited alongside all other languages otherwise we can give them the option to select the language from the given language list.
I am also getting familiar with ARIA as it will help us make the website more accessible.

@ORKO06, welcome!
I'll offer a little feedback to help you refine your official proposal:

For ensuring compatibility we can write codes in those versions of Typescript and React which will be compatible with all the browsers

I think the issue of browser compatibility potentially goes far beyond this. Ideally I'd like to see some kind of automated validation that the application looks and behaves both as expected and consistently across browsers. I think I had something like browserstack in the back of my head when I was writing the issue.

we can also develop the dark theme as many people prefer dark themes

I'm open to this, but wouldn't suggest prioritizing it. I think there are certain screens (like when looking at an event) that are very, very "busy," with multiple levels of tabs/pills and it feels easy to get "lost." These are the kind of UX optimizations I would prioritize.

For improving accessibility we can use google translate API and we can make it more dynamic by getting the user location**(this will be based on user permission)** by using the javascript GEOLOCATION API. If they agree we can dynamically show the languages which will be best suited alongside all other languages otherwise we can give them the option to select the language from the given language list.

I would not count internationalization as a current priority.

I am also getting familiar with ARIA as it will help us make the website more accessible.

This is a high priority.

@krancour  I am unable to join the slack channel. Can you send me an invite link over here?

@ORKO06 you have to join the Kubernetes Slack. Our channel is there.
http://slack.k8s.io/