Development

Pull Request Type

[x] Feature/Component (New feature or component)
[ ] Bug Fix (Fixes an issue or bug)
[ ] Minor Change (Documentation, README updates, or small UI tweaks)

Checklist
1. General

[ ] Does this PR address the intended feature/bug without any unintended changes?
[ ] Have all new changes been tested on both Android and iOS?
[ ] Is the UI/UX consistent across different devices and screen sizes (Phones/Tablets)?

2. Permissions & Security

[x] Does this PR request new permissions (e.g., location, camera, storage)? If yes, specify details:
[x] Have the implications of these permissions been documented and justified?

3. Platform-Specific Code

[x] Have you made any modifications to Xcode or Android project files (e.g., Gradle, Info.plist)?
[x] Have these changes been tested thoroughly on simulators/emulators and real devices?

4. Store Compliance

[x] Does this PR comply with Google Play Store guidelines (permissions, content policies)?
[x] Does this PR comply with Apple App Store guidelines (privacy, security, UI design)?

5. Translations & Cross-Platform

[ ] Have translations been updated for all new user-facing components?
[ ] Have you confirmed that the same work will be applied to the desktop app (if applicable)?

Minor Changes (Documentation, Small UI Tweaks)

[ ] Does this PR include only non-functional changes (e.g., documentation, small UI tweaks)?
[ ] Are these changes safe and do not affect core app functionality?

Beaver Pocket is almost ready for its final release candidate. The only remaining issues are the drawing component, which needs improvement and porting to Beaver Notes, and localization. We should also start addressing some issues in Beaver Notes, as they have been piling up.

Hi @Daniele-rolli , how do I build this code to android apk?

You need Ionic to build and open Android Studio. Run yarn exec yarn run ionic:build && yarn exec cap copy, and then yarn exec cap open android to open Android Studio. In Android Studio, you can run the app by either connecting a device via USB and using the debugger, or by going to Build > Build Bundle(s) / APK(s) > Build APK(s). Feel free to ask if you need something else.

Yes, but I meet another problem. It looks like the environment variable missing.

The app requires two environment variables to communicate with Google Drive and OneDrive. To set this up, create a file called gradle.properties in the Beaver-pocket/android/app directory, and add the following:
GOOGLE_CLIENT_ID=<Your_Google_Client_ID>
ONEDRIVE_SHA1=/<Your_OneDrive_SHA1>

I don't think it will give you trouble if you leave the placeholders there

Great! Thanks, I build it successfully.

Nothing happened when clicking the record button. It seems to be a permission issue. It is best to apply for permission here.
Search highlighting is abnormal.
Click the edge of the navigation bar button, and the button may light up but not switch routes. The location is not very good to touch, and you need to try several times.
After entering the secondary page (shortcut page, about page, etc.) of settings and returning, you will not return to the settings page, but to the home page.
The collapsible heading behaves abnormally when the Enter key is pressed. If the Enter key is pressed in the middle, the following text will be lost. When the Enter key is pressed at the end of the title, there will be no line break.
When clicking the search button while the input method is raised, the search box is in the wrong position.

[!TIP]
About the second point:

Enter the note, click the search button, enter the keyword in the search box, and search. After the highlight appears, re-enter the note and search for the keyword again. The keyword will not be highlighted.
It is worth mentioning that after re-entering the note if you make any changes to the note, the highlight will reappear, even if you are not in the search state now. The highlight cannot be cleared, and you will only highlight a different word when you search again.

Thanks for looking into it.

Fixed - Permissions issue
Looking into it
Needs clarification on which component
Looking into it
Looking into it – I honestly have no clue, as this is a direct port of Beaver Notes' collapsible headings
Cannot replicate in the Android emulator or Xcode simulator

While I investigate these, could you help me with the headings (plain JavaScript) and the drawing component, which still has some issues? I've attached a video to give you a better understanding.
https://github.com/user-attachments/assets/88990923-d5ce-4fda-a400-e6db6e29e6e1

I debugged the collapsible title. It works fine on the web, including on the mobile browser, but it is abnormal in ionic. It seems like an ionic problem.

It might be something related to storage, as both the web and mobile versions use Ionic; the only difference I can think of is the storage plugin.

@bigshans, have you discovered anything new? I’ve even checked in Xcode’s logs, but everything seems to work fine. However, the headings still aren't behaving as expected.
⚡  To Native ->  Filesystem getUri 80882052
⚡  TO JS {"uri":"file:\/\/\/Users\/danielerolli\/Library\/Developer\/CoreSimulator\/Devices\/44E8D25A-2FBD-4D0C-9241-B7A30791E07E\/data\/Containers\/Data\/Application\/6783F24E-C360-43C7-A97C-76F2F473A2EF\/Documents\/"}
⚡  To Native ->  Filesystem mkdir 80882053
⚡  TO JS undefined
⚡  To Native ->  Filesystem mkdir 80882054
⚡  TO JS undefined
⚡  To Native ->  Filesystem mkdir 80882055
⚡  TO JS undefined
⚡  To Native ->  Filesystem mkdir 80882056
⚡  TO JS undefined
⚡  To Native ->  Filesystem stat 80882057
⚡  TO JS {"ctime":1726512231210,"mtime":1731234900302,"uri":"file:\/\/\/Users\/danielerolli\/Library\/Developer\/CoreSimulator\/Devices\/44E8D25A-2FBD-4D0C-9241-B7A30791E07E\/data\/Containers\/Data\/Application\/6783F24E-C360-43C7-A97C-76F2F473A2EF\/Documents\/note
⚡  To Native ->  Filesystem readFile 80882058
⚡  TO JS {"data":"{\"data\":{\"notes\":{\"f31d4b77-c9af-432a-a787-5fe5a3ff1212\":{\"id\":\"f31d4b77-c9af-432a-a787-5fe5a3ff1212\",\"title\":\"New Note\",\"content\":{\"type\":\"doc\",\"content\":[]},\"createdAt\":1726512231202,\"updatedAt\":1726512231202,\"labels\"
⚡  To Native ->  Filesystem writeFile 80882059
⚡  TO JS {"uri":"file:\/\/\/Users\/danielerolli\/Library\/Developer\/CoreSimulator\/Devices\/44E8D25A-2FBD-4D0C-9241-B7A30791E07E\/data\/Containers\/Data\/Application\/6783F24E-C360-43C7-A97C-76F2F473A2EF\/Documents\/notes\/data.json"}
⚡  To Native ->  App addListener 80882060
⚡  To Native ->  Keyboard setResizeMode 80882061
⚡  TO JS undefined
⚡  To Native ->  Filesystem getUri 80882062
⚡  TO JS {"uri":"file:\/\/\/Users\/danielerolli\/Library\/Developer\/CoreSimulator\/Devices\/44E8D25A-2FBD-4D0C-9241-B7A30791E07E\/data\/Containers\/Data\/Application\/6783F24E-C360-43C7-A97C-76F2F473A2EF\/Documents\/"}
⚡  To Native ->  Filesystem mkdir 80882063
⚡  TO JS undefined
⚡  To Native ->  Filesystem mkdir 80882064
⚡  TO JS undefined
⚡  To Native ->  Filesystem mkdir 80882065
⚡  TO JS undefined
⚡  To Native ->  Filesystem mkdir 80882066
⚡  TO JS undefined
⚡  To Native ->  Filesystem stat 80882067
⚡  TO JS {"ctime":1726512231210,"type":"file","uri":"file:\/\/\/Users\/danielerolli\/Library\/Developer\/CoreSimulator\/Devices\/44E8D25A-2FBD-4D0C-9241-B7A30791E07E\/data\/Containers\/Data\/Application\/6783F24E-C360-43C7-A97C-76F2F473A2EF\/Documents\/notes\/data.
⚡  To Native ->  Filesystem readFile 80882068
⚡  TO JS {"data":"{\"data\":{\"notes\":{\"f31d4b77-c9af-432a-a787-5fe5a3ff1212\":{\"id\":\"f31d4b77-c9af-432a-a787-5fe5a3ff1212\",\"title\":\"New Note\",\"content\":{\"type\":\"doc\",\"content\":[]},\"createdAt\":1726512231202,\"updatedAt\":1726512231202,\"labels\"
⚡  To Native ->  Filesystem writeFile 80882069
⚡  TO JS {"uri":"file:\/\/\/Users\/danielerolli\/Library\/Developer\/CoreSimulator\/Devices\/44E8D25A-2FBD-4D0C-9241-B7A30791E07E\/data\/Containers\/Data\/Application\/6783F24E-C360-43C7-A97C-76F2F473A2EF\/Documents\/notes\/data.json"}
⚡  To Native ->  App addListener 80882070
⚡  To Native ->  Keyboard setResizeMode 80882071
⚡  TO JS undefined

Nothing new was found.

Since we can’t seem to solve this, we could remove the component and focus on something more important, like the drawing component. I’ve sent you the video so you can see what’s wrong with the component if we take this approach.

Hi @Daniele-rolli , here are two unused variables that you need to fix.

Is the drawing hidden?

I've fixed the variable issues and made the drawing component available on phones as well. It's primarily designed for tablets and uses pointer gestures, so only a pen can be used for drawing.

The paper component is unavailable on my phone. I can't draw on it by touch on my phone.

Yeah, about that—as I might have mentioned before—to prevent users from drawing accidentally, I limited the drawing component to respond only to tools like the Apple Pencil or S Pen. Scrolling is handled with two fingers, though it's not perfect. If you'd like to add touch support for finger drawing, you can modify line 67 in DrawMode.jsx by adding event.pointerType === "touch" alongside "pen" to enable drawing with fingers.
Here’s the updated code snippet:
    const handlePointerEvent = (event) => {
      event.preventDefault();
      event.stopPropagation();

      if (event.pointerType === "pen" || event.pointerType === "touch") { // Add "touch" here
        if (event.touches && event.touches.length > 1) {
          setDrawing(false);
          return;
        }

        const [x, y] = getPointerCoordinates(event);

        if (event.type === "pointerdown") {
          if (tool === "erase") {
            isErasing = true;
            eraseOverlappingPaths(x, y); // Start erasing immediately
          } else {
            startDrawing(x, y);
          }
        } else if (event.type === "pointermove") {
          if (tool === "erase" && isErasing) {
            eraseOverlappingPaths(x, y); // Continuously erase during movement
          } else if (tool !== "erase") {
            draw(x, y);
          }
        } else if (event.type === "pointerup") {
          if (tool === "erase") {
            isErasing = false; // Stop erasing after pointer is lifted
          } else {
            stopDrawing();
          }
        }
      }
    };

Yeah, about that—as I might have mentioned before—to prevent users from drawing accidentally, I limited the drawing component to respond only to tools like the Apple Pencil or S Pen. Scrolling is handled with two fingers, though it's not perfect. If you'd like to add touch support for finger drawing, you can modify line 67 in DrawMode.jsx by adding event.pointerType === "touch" alongside "pen" to enable drawing with fingers.
Here’s the updated code snippet:
    const handlePointerEvent = (event) => {
      event.preventDefault();
      event.stopPropagation();

      if (event.pointerType === "pen" || event.pointerType === "touch") { // Add "touch" here
        if (event.touches && event.touches.length > 1) {
          setDrawing(false);
          return;
        }

        const [x, y] = getPointerCoordinates(event);

        if (event.type === "pointerdown") {
          if (tool === "erase") {
            isErasing = true;
            eraseOverlappingPaths(x, y); // Start erasing immediately
          } else {
            startDrawing(x, y);
          }
        } else if (event.type === "pointermove") {
          if (tool === "erase" && isErasing) {
            eraseOverlappingPaths(x, y); // Continuously erase during movement
          } else if (tool !== "erase") {
            draw(x, y);
          }
        } else if (event.type === "pointerup") {
          if (tool === "erase") {
            isErasing = false; // Stop erasing after pointer is lifted
          } else {
            stopDrawing();
          }
        }
      }
    };

It works. But except for the interface display problem, there are no problems with the functionality, and the menu does not pop up as shown in the video.

The component is designed more for tablets than for phones, which is why it wasn’t available initially. However, the issue is that it sometimes scrolls instead of drawing, which might be specifically related to Apple devices.

Would you mind clarifying point 3? I was also thinking that we could deprecate the old drawing component, keeping it only as a preview since it has been part of Beaver Notes for at least two releases, and replace it with something improved, like a custom implementation of tldraw.

I'll work on removing the collapsible headings. In the meantime, would you mind clarifying point 3?

I've noticed something interesting with the collapsible headings. We already know that pressing Enter breakes the title instead of splitting it. However, the weirder behavior happens when trying to write in the now-broken "split" heading. On iOS, it starts with a capital letter, which means it recognizes it as a separate text field from the remaining part of the broken "split" title.
https://github.com/user-attachments/assets/b4a9fa30-3afc-4811-8892-afd62aa275bd

I'm sorry to reply very late. My phone met some problems and recently I'm recovering it.
About the third point, when you click the edge of the tab navigation bar item, the navigation bar will be highlighted, but the corresponding page will not jump. This location is probably the blank black background above the navigation bar icons. My phone is recovering, so I can't show you right now.
About the heading, I found it when debugging before, so I guess it may be related to the keyboard. Ionic delegates many operations, breaking the pure web runtime. It would be best to prove that it has no problem under the pure web runtime.

I'm sorry to hear that. Take your time to fix your phone; it sounds like a more pressing issue. While you work on that, I'll focus on resolving other issues. Once you're able to look into the headings, I’ll continue working on it as well.

I've removed the collapsible headings and addressed the relevant issues. I'll work on fixing point 4 and resolving the sync issue. Once that's done, we should be ready for the final release candidate.
I'll also start adding features from Beaver Notes 3.8.0 to Pocket, which will be released as a stable version as soon as possible.

Thanks for looking into it.

~Permissions issue~. Fixed.
~Looking into it. Solved working on 6 before pushing~.Fixed.
~Needs clarification on which component~. Fixed
~Looking into it~.Fixed
~Looking into it – I honestly have no clue, as this is a direct port of Beaver Notes' collapsible headings~. Removed
~Cannot replicate in the Android emulator or Xcode simulator. Found the issue~. Fixed.

While I investigate these, could you help me with the headings (plain JavaScript) and the drawing component, which still has some issues? I've attached a video to give you a better understanding.
ScreenRecording_11-07-2024.22-20-04_1.MP4

Everything has been addressed. I've hidden the drawing component on mobile since it doesn’t make sense to have it on phones, it only works with a stylus, and virtually no phone has one. We can still add it when we reach the stable release in the next version. I'll wait for your approval before merging and releasing the final RC.

Search still has some problems, and the page will automatically scroll up, which is annoying.

I've addressed the search and navbar issues. I couldn't replicate the page behavior on iOS or in the Android Studio simulator. Let me know if you find anything else.


Implement Struct Field, and allow Field to use it

Implement StructField
Add support for StructField inside Field

I confirm that this contribution is made under the terms of the license found in the root directory of this repository's source tree and that I have the authority necessary to make this contribution on behalf of its copyright owner.

Rebased on top of master


Support for networks connected

If a network is connected it creates an entry for each client and also for routes which are pushed. These entries need to be filtered. Doing this with netmask

Can you make a small example scenario when this filter is needed? Thanks!

A branch office connects via tunnel to my site. The client config is
ccd/client
ifconfig-push <IP_ADDRESS> <IP_ADDRESS>
iroute <IP_ADDRESS> <IP_ADDRESS>
iroute <IP_ADDRESS> <IP_ADDRESS>
iroute <IP_ADDRESS> <IP_ADDRESS>
push "route <IP_ADDRESS> <IP_ADDRESS>"
push "route <IP_ADDRESS> <IP_ADDRESS>"

This produces openvpn-status.log
OpenVPN CLIENT LIST
Updated,Mon Apr  6 19:26:39 2020
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
client,<IP_ADDRESS>:38458,535519,447378,Mon Apr  6 16:58:03 2020
client,<IP_ADDRESS>:38459,4711,815Mon Apr  6 18:58:15 2020
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
<IP_ADDRESS>C,client,<IP_ADDRESS>:38458,Mon Apr  6 19:26:37 2020
<IP_ADDRESS>,client,<IP_ADDRESS>:38458,Mon Apr  6 19:26:31 2020
<IP_ADDRESS>,client2,<IP_ADDRESS>:38459,Mon Apr  6 19:26:31 2020
<IP_ADDRESS>,client,<IP_ADDRESS>:38458,Mon Apr  6 19:26:33 2020
<IP_ADDRESS>/24,client,<IP_ADDRESS>:38458,Mon Apr  6 16:58:04 2020
<IP_ADDRESS>C,client,<IP_ADDRESS>:38458,Mon Apr  6 19:26:24 2020
<IP_ADDRESS>,client,<IP_ADDRESS>:38458,Mon Apr  6 19:26:37 2020
GLOBAL STATS
Max bcast/mcast queue length,0
END

The entries with virtual address ending "C" are automatically created by devices connecting through the tunnel. The iroute entries in client config are copied directly to the routing table. All direct clients can be identified by netmask <IP_ADDRESS>/24. To filter them from the routing table we need the additional argument for the server. The netmask is also part of the server.conf:
...
mode server
server **<IP_ADDRESS> <IP_ADDRESS>**
topology subnet
...


The last part of scroll panes is not shown

When you have windows with scroll panes not maximized, the part that can be scrolled is cutted at the bottom or at the top

Attached a screenshot of nautilus (in eclipse it is the same)

I can't reproduce it. Try expanding the column?

Hi! Okay I upload a screenshot where you can compare your theme to my example (yosembiance gtk) gtk theme. I just opened the last screenshot with the "bug" and applied the yosembiance theme and put the nautilus window right beside the nautilus window on the screenshot.
"The bug" is that the highest/lowest part of the scroll area is somehow cutted off

Can you also pull in the master? A lot of change has gone in, and the README is quite outdated at this point.

Okay, I can reproduce it! Confirmed bug!

Anyone know a workaround for this issue? It is really annoying and I like this theme.

2017 yet

same problem and no one fix it :(
afternoon, I compare style code with ubuntu 16.04 default-theme style code then I found the issue where is.

open "gtk-widgets.css" (at ~/.themes/Flatabulous/gtk-3.0/ or /usr/share/themes/Flatabulous/gtk-3.0)
press ctrl+f to search ".sidebar," then you will find this code:

.sidebar,
.sidebar.view,
.sidebar .view,
.sidebar GtkScrolledWindow {
    background-color: @theme_bg_color;
    color: mix(@theme_fg_color, @theme_bg_color, 0.1);
}

delete it & save
reload this theme

PS:
another bug like this:

the bottom has been cut off.
it cause by undershoot, whatever, fix it:
1.open "gtk-widgets.css"
2.add this code at bottom
.undershoot,
.overshoot.top,
.overshoot.right,
.overshoot.bottom,
.overshoot.left {
	background: none;
}

3.save & reload theme

@dingjibang Thanks! Now I can do stuff in eclipse properly with this theme :)

Thanks, @dingjibang , it is useful for me when I use eclipse.


PDF voucher generation works only for languages using ISO-8859-1

Wonderful project!
But PDF voucher generation works only for languages using ISO-8859-1 characters.
No Greek, no Cyrilic. Even no Latin using Baltic languages or Serb-Horvatic.
Would it be hard to migrate to tFPDF or any other library supporting UTF fonts?

I some months I need to touch the code... I will upload it then.


Ontop CLI: ontology facts end up in default graph

Description
I'm using Ontop CLI to materialize triples. In an effort to better manage data with varying lifecycles, I've been working to transition to named graphs.
This works correctly for triples generated from R2RML mappings. However, I've observed that facts from the ontology, along with extracted facts with saturated TBox end up in the default graph.
I'm wondering if I've missed a configuration setting or if this behavior is expected. Any insights or possible solutions would be valuable.
Steps to Reproduce

Run the command:
ontop materialize --mapping example-mapping.ttl --ontology example-ontology.trig --output example-output.trig --format trig --properties example-ontop-materialize.properties

Review the output file.

Expected behavior: Every fact in example-output.trig should be assigned to the named graph <https://example.com/#ExampleGraph>.
Actual behavior: Facts sourced from the mapping are appropriately placed in the named graph. In contrast, facts from the ontology and those that are extracted (inferred) end up in the default graph.
Reproduces how often: always
Attached material

reproducer.zip
note: JDBC properties should be modified accordingly. The example operates independently of relational database data.

Versions
Ontop CLI 5.1.0
Additional Information
(none)

Hi @JensPiegsa, thanks for reporting the issue!
Ontop currently uses a different parser for the ontology (OWLAPI) than for the other RDF input files. We need to have a look at how it handles quads.
May I suggest you to use --facts option introduced by 5.1.0? It also to pass facts in a separate file, which is then passed to a standard RDF parser.
Best,
Benjamin

Hi Benjamin,
Thank you for taking the time to look into this issue and for the explanation.
Just to clarify, does the --facts option give me inferred triples like --ontology does?
Cheers,
Jens

Hi Jens,
Yes, the reasoning rules of the ontology are applied to facts from the facts file the same way they are applied to the mapping.
Best,
Benjamin


Request: release as TamperMonkey script as well

It would be great if this could be released as a TamperMonkey script as well. Giving a plugin full edit access to all websites I visit is something I don't do lightly, and I certainly won't do that when this extension is released on the Chrome Extension Store.
It would be great if you could release this as a TamperMonkey script, because that allows people to verify the exact code being run in their browser as they load the plugin into the browser. It also supports cross-browser usage (i.e., not just in Chrome) for all those Firefox users out there.

open to making as a tampermonkey script! though i will be making a firefox extension (its my browser) for ease of installation and the code will be verifiable on this repo by people who care anyway

and the code will be verifiable on this repo by people who care anyway

The issue is that there is no verifiable proof that the code you upload to the Extension web stores is the same code that is in this repo. You could have perfectly fine code here, but upload malicious code to the web stores/extension repositories.
TamperMonkey is good in that regard, because it loads the code directly from the Git repo, instead of through a blackbox Chrome/Firefox system.

thats a fair enough point, ill look into this after refining the core script but the work will probably still be put under the main extensions development


Fix Fix stream load stuck under high concurrency

Proposed changes
Issue Number: close #xxx

When the concurrency of streamload exceeds the number of threads in the remote scanner, streamload may get stuck. The reason is that the libevent thread blocks and waits for streamload to complete, and when there is no intersection between the tasks handled by the scanner thread and the libevent thread, it gets stuck.
The solution is to convert the synchronous waiting tasks of libevent into asynchronous execution by using callbacks in the streamload executor thread.

run buildall


iOS: Passcode instead of Biometric authentication

I am experiencing issues with the biometric authentication on iOS 12.2 on my iPhone X.
I am calling verifyFingerprint but the iOS passcode dialog pops up instead of the Face ID dialog.
In the Console Application I can see a strange error:

Anyone experiencing similar issues?

I just resolved the issue by adding the key NSFaceIDUsageDescription to the Info.plist. It looks like it is a mandatory key...

That's correct, but based on this, Cordova should add that automatically for you:
https://github.com/EddyVerbruggen/cordova-plugin-touch-id/blob/6c398e79364b666d7131b91d82932c4fb9349373/plugin.xml#L39-L43


Confusion around "Create Static Web Apps" default and advanced commands

Related: https://github.com/microsoft/vscode-azurestaticwebapps/issues/131
When you're trying to create a SWA from the extension, you're presented with 2 commands:

I went through the original issue about basic vs advanced modes and I understand the rationale of reducing the number of prompts to create a simpler experience.
The problem is that having to make that choice at the command level, makes it confusing and prone to errors:

First reflex when you see both is to ask yourself: "which one do I choose?" And at this point, you have no way to make an educated guess, other than trial and error. Moreover, you're not choosing between "Create Static Web Apps (Basic)" and "Create Static Web Apps (Advanced)", but between a default choice and an "Advanced" one, which leads to the 2nd point.
Even though I deployed SWA a few times (and even wrote Learn modules about it), when going quickly you tend to use the default command (as it's also the first one suggested), and you end up with the basic mode with no possibility to choose the resource group and location, so that means having to destroy everything, roll back the SWA commit and start again. And as you're not deploying new SWA everyday, next time you'll have to do it you'll probably be confused again at which one to pick and (probably) make the same mistake again (I did, many times).

I know that in VS Code you have no way to add extensive descriptions in the command palette, but you can in prompts, like this for example:

My suggestion then would be to have only one "Create Static Web Apps" command, with the first prompt being a choice between basic and advanced configurations with some description cues. For example, you can tell that resource groups and location settings are in advanced mode, so you can make an educated guess at this point.
Yes, that will add 1 more prompt to the previous "basic" mode, but that would completely remove the confusion between commands and eliminate mistake. But as Steve Krug said, “It doesn't matter how many times I have to click, as long as each click is a mindless, unambiguous choice.”

This issue has become stale and is at risk of being closed. The community has 60 days to upvote the issue. If it receives 5 upvotes we will keep it open and take another look. If not, we will close it. To learn more about how we handle issues, please see our documentation.
Happy Coding!

:slightly_frowning_face: In the last 60 days, this issue has received less than 5 community upvotes and we closed it. Still a big Thank You to you for taking the time to create it! To learn more about how we handle issues, please see our documentation.
Happy Coding!


Documentation and Examples for Static Site Generation (SSG)

Hello, coming from a NextJS background and not being an expert in react hooks, I'm having some confusion trying to set up Static Side Generation using Server Side hooks. My markdown files are stored in a CMS and I would like to generate the static pages at build time.
I found NextJS server-side methods are well documented (getInitialProps, getStaticProps, getStaticPaths, getServerSideProps) and easy to learn. I think this could be done with Docusaurus as well.
The following informations is what i gathered in research but still didn't manage to implement myself:

rdilweb/docusaurus-plugin-remote-content
docs/lifecycle-apis#async-loadcontent
docs/lifecycle-apis#async-contentloadedcontent-actions
docs/creating-pages#routing
Issue https://github.com/facebook/docusaurus/issues/4710

📚 Documentation
Can we, please, have:

A clear, concise documentation on how to generate static pages from data that's not available at build time.

Compare and show the differences with other static generator like CRA, NextJS and Gatsby (this would help a lot for people that are transitioning like me)

Docusaurus focus mostly on the docs use case, considering that your docs are available on the filesystem at build time.
However, it technically remains a generic SSG, and is similar to Gatsby without the GraphQL data layer.
We have an addRoute() plugin API that is quite similar to Gatsby's createPage()
If you want to integrate with a CMS, it is probably not the best choice currently (at least we don't have very good doc to help you figure this out).
We'll definitively try to improve our APIs and doc on that, but keep in mind Docusaurus does not aim to be a better generic SSG than Next or Gatsby, so if your main use-case is to integrate with CMSes and not build doc sites based on git markdown files, you'd better not use Docusaurus in the first place.

@slorber Thank you for clarifying.

(...) so if your main use-case is to integrate with CMSes and not build doc sites based on git markdown files, you'd better not use Docusaurus in the first place.

Just to show that building the docs from a remote source is still a recurrent question for me, either integrating with a CMS or with remote documentation files:
There's a second project that i'm part of, the documentation in this case is indeed markdown files. Part of the documentation lives inside each applications repository and part of it are in a centralized gitlab wiki (it uses gollum git wiki under the hood).
Docusaurus lives in a separated repository and i'm struggling to come with a way to fetch all the docs file during development/build files.
Is there any better way of doing this besides using git submodules?

Docusaurus lives in a separated repository and i'm struggling to come with a way to fetch all the docs file during development/build files.
Is there any better way of doing this besides using git submodules?

Docusaurus does not care about what you use, as long as it's able to see the files at the correct file-system location when using start/build.
I can't really tell you what is the best way to "fetch" your docs, using git, rsync, ssh, cp, mv, curl, wget, unzip or whatever you want is the same for Docusaurus.
If we build something for CMS integration, it's more likely to be a way to fetch/cache the data using an async callback as part of a content plugin. Not sure it would solve your use-case anyway if your source is already markdown files.

Thank you, I'll try to find a way to see what works best for my use-case.

If we build something for CMS integration, it's more likely to be a way to fetch/cache the data using an async callback as part of a content plugin. Not sure it would solve your use-case anyway if your source is already markdown files.

That would be really great!
Should we keep this issue open so we can gather more feedback if other users are having the same doubts?

We can keep this open until I document better how Docusaurus can be used as a less opinionated SSG, in a similar way to Gatsby

This is an old issue and I think we improved our documentation regarding plugins creation, lifecycles etc...
Also things are going to change deeply once we introduce React Server Components (https://github.com/facebook/docusaurus/issues/9089). I think we can close it for now and imporve our docs even more once we implement RSCs


Adds ed25519 pubkey to oxend pings

This will allow the oxend to verify the pubkey when pings are received
and reject the ping if they are wrong.
The reason this causes issues is that storage server only receives the
snode keys on startup and if oxend is restarted without restarting
storage server then it could end up running with the wrong keys.
If oxend instead rejects the pings and stops sending uptime proofs then
the operator will know that something needs attention and can restart
the storage server.

Force pushed after ./contrib/format.sh


gem list --local error

$ gem list --local
dyld: lazy symbol binding failed: Symbol not found: _rb_ary_new4
  Referenced from: /Users/xiatian/.rvm/gems/ruby-2.3.1/gems/psych-2.1.1/lib/psych.bundle
  Expected in: flat namespace

dyld: Symbol not found: _rb_ary_new4
  Referenced from: /Users/xiatian/.rvm/gems/ruby-2.3.1/gems/psych-2.1.1/lib/psych.bundle
  Expected in: flat namespace

but
cd /Users/xiatian/safe/metasploit-framework
so
$ gem list --local
is ok
why?
thank you

@hktalent I don't see how this is a bundler error, it looks like is a rubygems issue. Please submit it to https://github.com/rubygems/rubygems with environment details, thanks.


9th homework is done

My bad, the sequence had an error with initial values. I used a sequence that had two 1s at the beginning.

Now it's should return 13 if 7 given


Where to find the values of endpoint and port?

In src/main/resources/application.yml, there's this configuration:
aws:
  os:
    endpoint: "endpoint:port"

What are the values of endpoint and port? Where can I find those values?

that's the domain Endpoint (URL) the port is 443 if using Amazon OpenSearch Service


BF: run fslpython_install.sh also for 6.0.1, also assure deprecation v1 version for 6.0.1

Fixes #271
TODOs

[x] verify that it fixes it ;)

Codecov Report

Merging #289 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #289   +/-   ##
=======================================
  Coverage   80.93%   80.93%
=======================================
  Files          33       33
  Lines        1568     1568
  Branches      170      170
=======================================
  Hits         1269     1269
  Misses        218      218
  Partials       81       81

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 9e1cb88...6145c93. Read the comment docs.

it seems to resolve the issue of having stuff not installed BUT at the cost of pretty much doubling (3.2GB for fslpython) the size of the image!  Here is the heaviest added parts:
--- /opt/fsl-6.0.1/fslpython/pkgs --
  747.2 MiB [##########] /mkl-2019.4-243
  287.1 MiB [###       ] /qt-5.9.7-h5867ecd_1
  204.1 MiB [##        ]  mkl-2019.4-243.tar.bz2
  177.6 MiB [##        ] /vtk-8.2.0-py37haa4764d_200
  115.4 MiB [#         ] /cache
   85.9 MiB [#         ]  qt-5.9.7-h5867ecd_1.tar.bz2
   84.5 MiB [#         ] /wxpython-4.0.4-py37hc99224d_0
   83.7 MiB [#         ] /python-3.7.3-h0371630_0
...

I wonder if mkl and cache are needed for the run time at all, or what could be stripped/removed to @pauldmccarthy

here is the image I generated if anyone interested to test: http://datasets.datalad.org/singularity/test-fsl-6.0.1-neurodocker.sing  (it is not under git-annex there despite the website ;))

Aah; unfortunately mkl is required, as FSL now uses armadillo (which uses LAPACK/BLAS under the hood) as its linear algebra library.
Perhaps in your case it is worth using a modified fslpython_environnment.yml which omits all of the unnecessary libraries (e.g. qt, wxpython, vtk etc); qt and vtk are only used by MIST (sub-cortical segmentation), and wxpythin is only used by FSLeyes.

hm, I could have sworn that I have posted the follow up but I don't see it.
In that new environment I am out of luck running fsleyes. @pauldmccarthy - do you have a linux env with singularity?  could you checkout that  http://datasets.datalad.org/singularity/test-fsl-6.0.1-neurodocker.sing to see what is missing/wrong?

I just verified that created container is at least working to run 2nd level analysis (i.e. imglob is there and didn't freak out).  So I think it would be good to have this PR merged and then improve later (after all the fsleyes issues are tracked down)

@yarikoptic I've got it running - looks like a zlib version incompatibility. I'll have a play tomorrow, and will get back to you

thanks @yarikoptic and @pauldmccarthy - i will test out this pr and merge
what is fslpython necessary for? is it something that could be optionally installed with a command line flag?

I guess it is all python based pieces of fsl. Some are command line tools used eg for 2nd level analysis,

Sorry for the delay; I left a singularity build command running for most of yesterday to convert your image into a sandbox directory, only to have my VM run out of hard drive space. I might have to leave this until the weekend or next week, as I'm going to be away for a couple of days.
fslpython is a miniconda environment which gets installed into $FSLDIR during the installation process. It basically gives the FSL team an environment to run Python-based tools, and was added to assist in the slow migration of the FSL code base away from bash and TCL/TK.
Currently it is not used by a large number of tools, but there are a few critical ones that have been ported to use it (e.g. imcp, imglob, atlasquery etc). It is also used by bianca and mist; In the next release, FSLeyes will also be installed directly into the fslpython environment, rather than being built independently. And there are likely to be more Python-based tools (and ports of existing tools) in the future. So unfortunately it's not optional.
But you could trim it down; for example, if you don't care about mist, you can remove qt and vtk; if you don't care about FSLeyes, you can remove wxpython, etc etc.

I left a singularity build command running for most of yesterday to convert your image into a sandbox directory, only to have my VM run out of hard drive space

why bother and not just run it? ;)

why bother and not just run it? ;)

I wanted to yum install some extra stuff to try and fix the FSLeyes problem, but I was told that I was working with a read only file system. I thought that only sandbox images were writeable, but it's been a while since I've used singularity. Anyway, I won't be able to touch this until next week unfortunately... will get back to you when I get a chance.

I think you can add an overlay image. Iirc it is Debian based, so use apt ;-)

Aah, thanks for the tip!

Iirc it is Debian based

Duh; it's already been a couple of days since I looked at it :)

Thanks @yarikoptic and @pauldmccarthy.

Finally got a chance to play with this. There are two problems:

There seems to be an incompatibility in the version of libz that is bundled with FSLeyes - removing /opt/fsl-6.0.1/bin/FSLeyes/libz.so.1 fixes this problem.

Some mesa libs seem to be missing - installing libgl1-mesa-dri fixes this problem.

After addressing both of these problems, FSLeyes seems to work fine. The first problem should become obsolete in the next version of FSL, as FSLeyes will be installed via conda, instead of being built separately.

Thanks @pauldmccarthy !  I am testing those out and will submit PR if it works for me ;) Cheers!


ROCm RDNA2 support

Issue: ROCm doesn't work on RDNA2 GPUs like 6900 XT.
Why: 6900 XT is good platform to run PyTorch and Tensorflow
Expected: Be able to use ROCm versions of PyTorch and TensforFlow on Ubuntu 20 and up

Hi @cnergyone
Thanks for reaching out.
We are working on enabling some series of Navi cards into ROCm(internal validation is ongoing), but it will take little more time.
Please stay tuned for updates through our documentation.
Thank you.


Support activeadmin v3, Drop ruby 2.7 support

Enhancements

Support activeadmin v3 (expand support version >= 2.8)

Breaking Changes

Drop ruby 2.7 support

released https://rubygems.org/gems/activeadmin-menu_tree/versions/0.3.0


huge cab file exported failed

please add export xml.gz support

can you please add export xml.gz support


[WIP] Surfacing non-Alluxio directories from object storage

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/10570/
Test PASSed.

Merged build finished. Test PASSed.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/10571/
Test PASSed.

Move discussion and review to [ALLUXIO-2047] Surfacing non-Alluxio directories from object storage #3629


API Key Addition and Feedback Link Problems

I am unable to add an API Key despite numerous attempts. Additionally, the feedback link is non-functional. Therefore, I am posting my issue here.
System Specifications:
Chip Apple M2
Memory ' 24 GB
Serial number X026TL9M6K
macOS Sonoma 14.6.1
Love the product though.
best,

I have also attempted to generate new API keys on multiple occasions.

Hey @Pierre-Otto ,
Does your OpenAI key have the format 'sk-proj...'?
Also, I've noticed that when I paste my API key into the input field, sometimes the copy/paste action adds some hidden newline characters, making it seem like the field is empty. The key is actually there, but I had to delete the invisible characters to see it properly!
Let me know if this helps.
Otherwise, feel free to suggest a time for a meeting. I'm available anytime between 9 AM and 5 PM on weekdays, PST, so I can assist you

Hi @delattre1,
Thanks so much for taking on my issue taking the time to reply.
I really appreciate it.
To answer your first question:
The API key does have this format 'sk-proj...' ✅
To answer your second question:
In response to concerns about potential copy/paste errors, I have generated a new key and verified the integrity of the copy/paste process. However the issue persists.
I am actually unable to validate the API key. A red indicator appears below the text box, signaling that the key is invalid even before I can press "Continue."
I really appreciate your proposal to organise a meeting, we could plan for example, next Monday at 9AM PST = 12AM (ET) if that works for you ?
Thanks so much for your help !
Best,

Sure, @Pierre-Otto, that works for me!
I’ve created the meeting invitation for 9 AM PST next Monday. Here’s the information:
ShellMate: User Feedback Session with Pierre-Otto
Google Meet joining info:
Video call link
Or dial: (BR) +55 11 4935-2448 PIN: 384 158 049#
More phone numbers: https://tel.meet/koy-kqeh-mmo?pin=8111271007791

Closing this. The issue was that the OpenAI API account required available credits


changed sdkTag to 2.2

ran into errors using the 2.2-sdk tag as it doesn't exist in the MCR as a label
ERROR:
failed to build: manifest for mcr.microsoft.com/dotnet/core/sdk:2.2-sdk not found: manifest unknown: manifest unknown

Already changed. Thanks!


Do we need same user names on both ACS and nodes

-Do we need same user names on both ACS and nodes to establish PASSWD less audentication
Update
-Not able to establish password less audencation with different usernames on ACS and NODE

but can establish connection with same user names on both
WHY is this!

Hi Akash,
Yes we have to create same user in acs and  nodes
Basically we do this to achive password less authentication based on SSH concept
And also you need  to mention same user all the nodes sudeors file


Support different types (instruments) of tabs

It would be nice to be able to search for uke and bass tabs as well.  Has to be configurable though bc most might not need those

Idea: have this be a setting that basically just chooses which chords to show for the tab on clicking them.

Idea: have this be a setting that basically just chooses which chords to show for the tab on clicking them.

Related: #51

For me having uke is a good fallback for disagreeable or absent chords entries for a song.

Closing as duplicate of #66, feel free to add information to that issue instead.


Why networkx module < version 1.2, and how best to install?

SALSA2 requires networkx, but according to the documentation should only be run with a version of networkx that is quite old (less than version 1.2) and that therefore cannot be conveniently installed with conda (which is how many of us deal with the fussiness and fragility of Python-based software).
Is there any prospect that SALSA2 will begin to be usable with more modern versions of networkx?
If not, is there some efficient method of installing a local networkx module with a defined (old) version number, for somebody who is not root / superuser and who is not expert in Python?
I can find the software for version <1.2 networkx easily enough: https://networkx.github.io/documentation/networkx-1.1/

You can install an appropriate version of networkx using virtual environment (https://virtualenv.pypa.io/en/latest/) . It doesn't require you to have root access.

Closing this for now. Please let us know if you encounter any issues in future!


Fix Ruby 3 deprications

@ReveAK you dont have this one?
state_machine/integrations/active_model.rb:385: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call


[Feature] More info about staking

I want to be able to:

See how many OHMs I'll be getting in the next rebase. Currently, it only shows rebase percentage.
See the number denominated in $US amount as well.
See how many OHMs I gained since last time I staked to determine how many OHMs I've earned since then.

Example:
Next rebase is 1%
I have 50 OHM
It shows me that next rebase is 0.5 OHM / $150 (assuming 1 ohm is 300) and I've earned 10 OHMs since 10 days ago.
Currently, all these numbers/calculations I have to do manually by hand whenever I open the Stake page.

Find the design proposal here @ohmie33 .
https://www.figma.com/file/Yv3MynoOfFbFpd641XTl0z/app-v-1.2?node-id=226%3A19384
I am proposing that the dollar denomination value NOT be presented front and center. We should make it available as part of tooltip on hover over the sOHM info. This has the advantage of us offering this instant conversion ANYWHERE in the app you see "x sOHM".
Also, recommend that we hold back on "how many OHMs gained since last staked",

We are going to be working on "user dashboard" project in near future. It will cover a whole slew of scenarios that will need  to illustrate more sophisticated staking strategies.
People can stake continuously. Just showing information about sOHM earned since "last staked" becomes less useful?

Hey @33ohm33 , regarding the design, I can't seem to access it (says file not found) :(
Yes, happy with your suggestions.

What email should i send the Figma invite to @ohmie33?

@33ohm33 oh that was old comment. All sorted now. Thanks.


statistics: entropy plugin - fix placement of entropy.lua

Move the file entropy.lua to the correct directory (rrdtool/definitions).
Apparently I made a copy error when creating the feature branch for #452.
Please commit also this correction.
@chris5560

Merged. Thanks Hannu!


Button: Path button's text isn't vertically-centered.

Bug
When viewing a skill assessment, the 'Go to path' button's text isn't quite vertically-aligned.
Expected behavior
I'd expect the text to be aligned vertically, consistent with the rest of the product.
Actual behavior
The line-height is a few pixels off, causing it to be just a bit off-centered.
Screenshots

Steps to repro

Go to a skill assessment
Look at button :)

Environment

OS - Windows 10 Pro 17134.471
Browser version - Chrome v71.0.3578.98

Great catch.  As we've triaged, this is likely not the Design System.  We will pass this on to the corresponding product team.  Thank you!


Set up Github Actions with a Dockerfile for sanity checks

I have a WIP Dockerfile but nothing ready to go yet. I'd like to download and install the most popular GDB's and LLDB's and run through them.
These would likely be:

arm-none-eabi-gdb-py from https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
apt-get gdb
apt-get lldb

Will need to also ensure that Python 2.7 and Python 3 both work.

Done!


Indentation of ExamplesMorph should use TextIndent Attribute

Currently the ExamplesMorph is indented with an extra tab which remains in place when code is stored. As this is unusual and an unnecessary character, we should layout the SOH with the TextIndent attribute.

(reported by @LinqLover)


HPV Immunization: Attributes

What attributes are in the L3 to support the dashboard display?

code
occuranceDateTime?
recordedDateTime?

I assume that we display the HPV vaccination (code) and a date of the immunization.

vaccineCode
status
occurrence[x]
expirationDate

So mainly what you listed with the addition of status and expirationDate. I don't believe recordedDateTime is relevant, especially since occurrence[x] is required to be present for an Immunization Resource. But feel free to correct me if I'm wrong or if there are additional elements I should be adding to the list :)

I agree with including .vaccineCode, .status, and .occurrence[x]. I know that the expirationDate is not required for the CDS. Unless it is explicitly required by one of the eCQMs, I believe it can be deleted.

@ssebast2 - As far as being required by the CDS, HPV Immunizations aren't actually used in any of the current logic, so the elements I listed above were only elements that we decided could be nice to include in the Dashboard display.
2 Questions:

Should I remove Expiration Date from the Dashboard display
Currently, we just display the .status element on the Dashboard, but we don't actually use it to filter the list of vaccines. Should we use the status element to filter out any vaccine that is not "completed" (I think this makes sense since status is required by a US Core Immunization and the other two possible codes in the value set (entered-in-error, and not-done) would invalidate the immunization?

@mickohanlon23 -

Yes, please remove Expiration Date from the Dashboard display
Yes, .status=completed makes the most sense. So, if .status is found in the patient record - it should equal completed.

Thanks Mick!

Commit https://github.com/ccsm-cds-tools/ccsm-cds-with-tests/commit/65b51337bfd30c4c86aa4f70ba1f093cafab82e7 (1) removes ExpirationDate from the Dashboard display, and (2) restricts Immunizations populated on the Dashboard to those with a completed status.
Testing was also added to make sure that the CQL code is properly looking for the Immunization.status element.


LoadError: cannot load such file -- dotenv/rails-now

Hi,
When I try to initialize Dotenv before anything else, I added the following line at the top of Gemfile based on your advice in the readme:
gem 'dotenv-rails', groups: [:development, :test], require: 'dotenv/rails-now'

It works properly on my machine. But when I tried to deploy it on production server, I am getting this error:
SSHKit::Command::Failed: rake exit status: 1
rake stdout: rake aborted!
LoadError: cannot load such file -- dotenv/rails-now

Is there any way to not load the gem in production environment? or is this a bundler bug?

@zakwanhaj hmm, I've never seen this.
Anyone else experienced this?

Not sure if it is related, but I was getting this error earlier today when I had inadvertently used: gem 'dotenv', groups: [:development, :test], require: 'dotenv/rails-now' instead of gem 'dotenv-rails', ... in my Gemfile.

Seem to be having a similar issue with requiring dotenv/tasks, works fine on my local setup but results in a LoadError on CI, can you think of anything I might have missed?

https://community.codeship.com/t/rake-loaderror-dotenv-tasks/5182

Sorry to bump an old issue, but I have this exact problem too. Happy to give you as much info as you need.

I have the same issue as stated above. Added the declaration to the top of my Gemfile as stated in documentation.

I also face the same issue

If you are seeing a similar issue in development you may have an old version of dotenv

Bump

same issue here.
.rvm/gems/ruby-2.4.2/gems/bundler-2.0.2/lib/bundler/runtime.rb:81:in `require': cannot load such file -- dotenv/rails-now (LoadError)

Same issue during docker-compose up

similar issue:
/home/vagrant/.rvm/rubies/ruby-2.7.2/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require': cannot load such file -- dotenv (LoadError)

Same issue just now, deploying to heroku.


built-in compound assignment operators like "~=" are not searchable

Problem
Common built-in compound assignment operators like  +=, -=, *=, /=, min=, and ~= are not searchable
Suggestions
Perhaps provide a separate sub-section on their use, in the "Assignment Operators" section, starting with simple use cases, more technical details could follow that. Also perhaps provide an example of ~= usage, in the "String Concatenation Operator" section.

The problem is that there's a huge amount of different combinations that can be generated; I don't think it's feasible to index all of them. We can provide some examples, though.

The problem is that there's a huge amount of different combinations that can be generated; I don't think it's feasible to index all of them. We can provide some examples, though.

It looks like the section on metaoperators, that says they're coming up next, has somehow disappeared...

It looks like the section on metaoperators, that says they're coming up next, has somehow disappeared...

The thing with these compound assignment operators is, ... the assignment part isn't the most interesting bit from the user perspective. I just wanted to find out if using the tilde before the equals was a recommended way to concatenate one string to another existing string. So it seems to me that if there is a section on the concatenation operator, then it should automatically show a compound assignment use case.

The thing with these compound assignment operators is, ... the assignment part isn't the most interesting bit from the user perspective. I just wanted to find out if using the tilde before the equals was a recommended way to concatenate one string to another existing string. So it seems to me that if there is a section on the concatenation operator, then it should automatically show a compound assignment use case.

The problem is deciding which ones of those are important enough to deserve their own example since, in principle, you can mix any infix operator with = to create a metaop; you can even infixizy (yes, that's a word, I made it up) a 2-arg op and create an assignment meta-op. I concur that more examples, with real use cases, is always better than few examples, so adding an example here is not a problem. The "like" part of your issue is, since you are actually asking to make searchable quite a lot of combinations of operators, something that's not really feasible.

The problem is deciding which ones of those are important enough to deserve their own example since, in principle, you can mix any infix operator with = to create a metaop; you can even infixizy (yes, that's a word, I made it up) a 2-arg op and create an assignment meta-op. I concur that more examples, with real use cases, is always better than few examples, so adding an example here is not a problem. The "like" part of your issue is, since you are actually asking to make searchable quite a lot of combinations of operators, something that's not really feasible.

so if I search for "~" and don't find "~=" in the suggested links, then that to me is lta. Could a "generic suggestion link" shown as "~=" be automatically tacked onto the end of the list of actual links, that would point at compound assignment and give the user a starting point? Just wondering.

so if I search for "~" and don't find "~=" in the suggested links, then that to me is lta. Could a "generic suggestion link" shown as "~=" be automatically tacked onto the end of the list of actual links, that would point at compound assignment and give the user a starting point? Just wondering.

Apologies, I didn't see the existing issue on this topic, I will close this issue and defer to the other.

Apologies, I didn't see the existing issue on this topic, I will close this issue and defer to the other.


MM-30407: improve slow typing

Summary
Improve the overall performance of the (new) sidebar by improving the ability for makeGetChannel to /actually/ memoize instead of constantly recomputing.
Phew, this one was a rabbit hole. First, let's look at a baseline performance profile of a user with lots of DMs open, and a "background user" that's posting to town square every second:

Keep in mind that those aren't solid blocks:

Essentially, every single entry in the sidebar is being forced through a React reconciliation. While the final DOM doesn't actually need to change, the cost for React to do the diff is significant. The reason this happens is because the channel prop passed to this component is spuriously changing. The corresponding makeGetChannel selector in this repository is memoized, but two things effectively force it be recomputed all the time:

dependency on getAllChannels -- this means that any channel changing for any reason (i.e. the last post time changing from a new post) invalidates the caching here forcing the selector to run again
dependency on state.entities.users -- similarly, this means that any property related to any user invalidates the cache (i.e. user status changes).

Now even if the memoization is failing, we might expect React to shallow compare the output of the selector and realize nothing has changed, right? Unfortunately, all DMs and GMs are piped through completeDirectChannelInfo, returning a new object every single time.
Fixing this /properly/ is non-trivial. We are almost certainly overusing reselect, memoizing things that recompute all the time anyway, and so only adding cost instead of saving it. Many of our selectors aren't "pure", often returning new objects (as noted above), but sometimes accidentally by returning an empty object {} (for which {} !== {}). There are still some reducers mutating the entire object (i.e. user statuses). And we could certainly look at reorganizing the actual structure of the state, leveraging reducers at action time instead of render time (but still keeping the data normalized).
This PR is an attempt to work around the immediate pain points while we build up momentum to double down on these kinds of performance issues. It was really hard to fix completeDirectChannelInfo returning a new object without touching waaaay too much code, so I focussed instead of narrowing the dependencies of the memoized makeGetChannel. The resulting changes (in this PR) improved things considerably:

Note that the CPU is no longer maxed out all the time, making space for important things like, you know, typing. But it was still costly. The next culprit proved to be the SidebarChannelMenu. It looks like this component is rendered all the time for every channel, even when not visible. Looking at its dependencies, I realized that getDisplayedChannels was constantly changing, but this led down a much deeper rabbit hole. Was there a way around this? See the linked WebApp PR, but I opted to just not render the menu until it opened -- and from what I can see, without any negative side effects. (Hoping Dev & QA review can help confirm this!)
The resulting performance graph:

This is far from optimal, but I think gets us over the hump.
Ticket Link
Fixes: https://mattermost.atlassian.net/browse/MM-30407

@lieut-data this is surely also affecting the mobile app even with the old sidebar as we use these selectors there, because of the fact that I'm currently without a computer I cannot really test this, perhaps @migbot can help with that. This seems to be a fix that if indeed helps with perf by correctly memoizing, the mobile app can benefit a lot from.

Honestly, makeGetChannel is a problematic function that I've wanted to remove. I get that attaching the status and teammate to the channel and having the proper display name for DMs/GMs is helpful, but seeing as that causes the object to be recreated when anything changes for any user (which is still the case even with these changes since profiles changes), I don't think it's worth it to do automatically. If we split those off into separate selectors and had most places use plain getChannel, I'd think we could improve things a lot

Probably don't need QA review on this PR, will save it for the webapp one.

Honestly, makeGetChannel is a problematic function that I've wanted to remove.

Yes! This sounds awesome @hmhealey and fits exactly into what I'm hoping we can focus on in Q2 :)

@migbot, keep in mind too that you'll need background user activity (like regular posts in a channel). I simulated this with a plugin posting every second.

Is that plugin available somewhere? A configurable "activity bot" would be great for performance testing the UI.

@hmhealey, the plugin isn't available anywhere yet -- it was really only about 10 minutes of effort -- but I agree this could be useful and will iterate.

Chatted with @jgilliam17 and we feel good about merging this to unblock mattermost-redux squashing efforts, with the remaining QA continuing on the corresponding webapp PR.

/cherry-pick v5.33

Error trying doing the automated Cherry picking. Please do this manually
+++ Updating remotes...
Fetching upstream
Failed to add the RSA host key for IP address '<IP_ADDRESS>' to the list of known hosts (/app/.ssh/known_hosts).
From github.com:mattermost/mattermost-redux
 * [new branch]        MM-29245-BillingSubSection -> upstream/MM-29245-BillingSubSection
 * [new branch]        MM-33365              -> upstream/MM-33365
 * [new branch]        MM-33409_yarn-2       -> upstream/MM-33409_yarn-2
 * [new branch]        MM-33747              -> upstream/MM-33747
   28629c00..d4d5264c  SectionsToSubSections -> upstream/SectionsToSubSections
   789c63cc..5b49a1ef  cloud                 -> upstream/cloud
   cd155a50..4099a3ee  feature/cloud-apps    -> upstream/feature/cloud-apps
 * [new branch]        hh_move-for-migrate   -> upstream/hh_move-for-migrate
   7c9d2d7c..3d102803  master                -> upstream/master
   1ef7e769..e5e7c999  release-5.33          -> upstream/release-5.33
 * [new branch]        switch-to-redux-devtools -> upstream/switch-to-redux-devtools
 * [new branch]        test-epics            -> upstream/test-epics
 * [new tag]           cloud-2021-03-12-1    -> cloud-2021-03-12-1
 * [new tag]           v5.33.1               -> v5.33.1
 * [new tag]           monorepo-last-commit  -> monorepo-last-commit
 * [new tag]           v5.33.0               -> v5.33.0
Fetching origin
Failed to add the RSA host key for IP address '<IP_ADDRESS>' to the list of known hosts (/app/.ssh/known_hosts).
+++ Updating remotes done...
!!! 'upstream/v5.33' not found. The second argument should be something like upstream/release-0.21.
    (In particular, it needs to be a valid, existing remote branch that I can 'git checkout'.)

+++ Returning you to the master branch and cleaning up.

Cherry pick is scheduled.

/cherry-pick release-5.33

Cherry pick is scheduled.

/cherry-pick release-5.31

Cherry pick is scheduled.

/cherry-pick cloud

Cherry pick is scheduled.


keep best cp

Expected Behavior
keep best cp, transfer low
Actual Behavior
transfers everything
{
"auth_service": "google",
"username"<EMAIL_ADDRESS>"password": "xxxxx",
"location": "1 Rider Blvd, Rhodes NSW 2138",
"gmapkey": "xxxx",
"max_steps": 15,
"mode": "all",
"walk": 4.16,
"debug": false,
"test": false,
"initial_transfer": 0,
"location_cache": true,
"distance_unit": "km",
"item_filter": "101,102,103,104,201",
"evolve_all": "NONE",
"any": {"keep_best_cp": 2}
}
Steps to Reproduce
Other Information
OS: osx yosemite,
Git Commit: (run 'git log -n 1 --pretty=format:"%H"' and paste it here)
how do i fix it?

duplicate of #953
work in progress #1395

still confused

The developers are already working on this, and you need to wait for them to finish that feature.
Tou can also help them providing code and/or coffe for them.

ok, is there a way like if i get a good pokemon it keeps?

@yehan77 they are working on that, as previously stated by @ironbishop.
Please close this issue.

Duplicate of https://github.com/PokemonGoF/PokemonGo-Bot/pull/953
/closed


data:Abhi03-tech

Fixes Issue

Changes proposed

Check List (Check all the applicable boxes)

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

Screenshots

Note to reviewers

I guess, i have done all the steps correct this time. looking forward to it.

@Abhi03-tech Please rename the json file to github username.
abhi3.json ---> data/Abhi03-tech.json
Feel free to ask if you have any doubt.

I have changed the file name. please check it out.


Kotlin/js and Kotlin/wasm support

It would be nice for this library to support kotlin/js and kotlin/wasm, backend user agent parsing doesn't have a big use compared how it's used in frontends.

seems like the code is ready to be multiplatform, is this project still active?


[Issue]: Unable to accept license agreement on the installation dialog

What happened?
while installing nvm on WIndows 11, I am unable to select the option to accept the license agreement.
Using either keyboard or mouse to click/select the option does not work. the only action I can perform is cancel the installation using the keyboard.
Using the mouse to click on the 'Cancel' button shows the button being clicked, but does not exit the installation. the only way to exit the installation is using the keyboard to select the Cancel button on the dialog and press enter.
What did you expect to happen?
Accept the license agreement to proceed with the installation.
Version
1.1.11 or newer (Default)
Which version of Windows?
Windows 11+
Which locale?
English (Default)
Which shell are you running NVM4W in?
No response
User Permissions?
Administrative Privileges, Elevated
Is Developer Mode enabled?
None
Relevant log/console output
No response
Debug Output
n/a

Anything else?
No response

It appears to have been an issue with my Windows setup. I did an sfc scan, restarted and was able to install nvm.


Can't create Public Chat Channel with metadata (name, description and picture)

Hi! You have a very useful project, and I'm building some stuff with it, just to get started with Nostr development.
But, I'm having trouble to create a Public Chat Channel with metadata.
I can create public chat channels and send messages to it, but they don't have the title, description and picture I set on creation.
I'm following the NIP-28 (https://github.com/nostr-protocol/nips/blob/master/28.md) Kind 40 (Create Channel).
I have these intermediary methods for your SendEvent method:
        public async Task<string> SendEvent(int kind, string content, DateTimeOffset? createdAt, List<NostrEventTag> tags, ECPrivKey privateKey)
        {
            NostrEvent newEvent = new NostrEvent()
            {
                Kind = kind,
                CreatedAt = createdAt,
                Content = content,
                Tags = tags
            };

            await newEvent.ComputeIdAndSignAsync(privateKey);
            return await SendEvent(newEvent);
        }

        public async Task<string> SendEvent(NostrEvent newEvent)
        {
            foreach (NostrClient nostrClient in nostrClients)
                await nostrClient.SendEventsAndWaitUntilReceived(new[] { newEvent }, CancellationToken.None); // INostrClient.SendEventsAndWaitUntilReceived(...) from your code

            Console.WriteLine("Json:");
            Console.WriteLine(newEvent.ToJson<NostrEvent, NostrEventTag>(false));

            Console.WriteLine("Sig:");
            Console.WriteLine(newEvent.Signature);

            return newEvent.Id;
        }

And this method for creating the public chat channel
        public async Task<string> CreatePublicChatChannel(string name, string description, string pictureUrl, ECPrivKey privateKey)
        {
            string content = "{\\\"name\\\": \\\"Demo Channel\\\", \\\"about\": \\\"A test channel.\\\", \\\"picture\\\": \\\"https://placekitten.com/200/200\\\"}";

            /* Also tried
               string content =  "{\"name\": \"Demo Channel\", \"about\": \"A test channel.\", \"picture\": \"https://placekitten.com/200/200\"}";

            string content =  @"{'name': 'Demo Channel', 'about': 'A test channel.', 'picture': 'https://placekitten.com/200/200'}";

            string content =  "{'name': 'Demo Channel', 'about': 'A test channel.', 'picture': 'https://placekitten.com/200/200'}";

            string content = @"{ \""name\"": \""Demo Channel\"", \""about\"": \""A test channel.\"", \""picture\"": \""https://placekitten.com/200/200\"" }";

            string content = @"{ ""name"": ""Demo Channel"", ""about"": ""A test channel."", ""picture"": ""https://placekitten.com/200/200"" }";
            */

            string eventId = await SendEvent(
                40,
                content,
                DateTimeOffset.UtcNow,
                new List<NostrEventTag>(),
                privateKey
            );

            return $"0020{GetKeys(privateKey).Npub}0220{eventId}030400000028"; // Hex-based TLV (Tag, Lenght and Value are set in hex)
        }

The eventId is returned from SendEvent(...), and I can use the resulting string (TLV) to send messages to the public chat channel, but the chat doesn't have name, description or picture.
Could you please help me understand this? I don't usually ask for help, but I'm struggling with it for days at this point.
PS: English is not my native language, so let me know if something I said isn't clear.

Hi! I just released a new version with helpers for NIP28. I would avoid manually editing the json for content and serializing it like I do:
https://github.com/Kukks/NNostr/blob/master/NNostr.Client/Protocols/NIP28.cs
Let me know if something doesn't work.