Kanban Plugin Weekly Report

:tada: :raised_hand: :rocket: So excited! It is so cool to see the first version. Congrats on juggling all of this with your exams!

As for the drag and drop itself, had a random idea – can you duplicate the card in the meantime, so the user is dragging a static version temporarily and the ones in the columns are the current state? Seems tricky to get the logic right, not sure it helps.

1 Like

I got the drag&drop working! What I had to do in the end was to duplicate the two columns involved and move the note on the cloned columns. Not as nice and simple as I had imagined but it works!

dragopt

7 Likes

Week 4

June 28. - July 4.

Progress

This week I've been making incremental improvements to the plugin in order to release a test version along with the progress report. So without further ado, here it is, the first test (super-early, super-buggy) release of the kanban plugin :partying_face: :
com.mablin7.test.kanban.jpl (1.6 MB)

(Please read further for notes for testers)

Most significant of the changes I've made this week, is that I finally gave up trying to use the Joplin search to sort notes into columns. I thought it's clever, but it created more problems than it solved, so I ended up writing my own sorting algorithm. It fetches all viable notes, then matches them against the rules defined in the config. This gives way more control over how the rules can work and also solves the 2 roadblocks mentioned in the Week 2 report:

Both of these are now solvable, though the completedTag and completedNotebook rules are not yet implemented.

I've also improved the UI, bringing it closer to my mockup, but not quite there yet. The board opening should also work more reliably now, and some basic error messages are also shown, if the config is invalid.

Achieved

  • Refactored the sorting logic (again), squished multiple bugs
  • Improved visuals
  • Basic error messages
  • Improved board opening

Planned for next week

From now on, I'm hoping to release a new version every week!

  • Better error messages
  • Automatic reloading
  • completedTag and completedNotebook rules
  • More forgiving YAML parsing

Notes for testers

First of all, thank you if you're willing to give this plugin a try, user testing truly helps a lot in development.

  1. Though the plugin doesn't touch the contents of your notes, it does reorganize them, and if there are unexpected bugs it can certainly mess up your collection. Make sure to have a backup of your notes before trying out the plugin!
  2. You're going to need a board config. To start, try out this one, I've been using for testing, but please do not be afraid to experiment with it, since that's the point of user testing:
columns: 
  - 
    backlog: true
    name: Backlog
  - 
    name: "Ready for review"
    tag: ready
  - 
    name: Working
    notebookPath: working
  - 
    completed: true
    tag: done
    name: Done
filters: 
  rootNotebookPath: "test/nested test"
  tag: task
  1. The config parsing is currently quite fragile, for example tabs are not allowed for indentation. If you're getting a YAML parse error, try this online validator, it should give you more details than the plugin. I am working on more informative error messages and making the parser more forgiving.
  2. The board currently only gets updated if you reopen it. This means that if you changed the config, or added/edited the notes on the board, you need to open an unrelated note to close the board, the open it again to reload. The next release will surely include a better solution.
  3. If you find any bugs, or have any suggestions, post on the main thread please.
  4. Enjoy!
3 Likes

There was a bug in the test release, which prevented the board from opening. Please use this fixed version:
com.mablin7.test.kanban.jpl (1.6 MB)

1 Like

Hi @mablin7

Thanks for that. I try to do a quick test but the tasks do not appear (I took exactly your test configuration). In the "nested test" folder you insert tasks with a "ready" tag for example? And that's all. Is this right?

Hey all! Here's another hotfix which allows not to specify rootNotebookPath
com.mablin7.test.kanban.jpl (1.6 MB)

@bepolymathe Sorry, I wrote the progress report in a hurry and forgot to actually include usage instructions. So here it is:

Installation

  1. Download the .jpl file
  2. Open Joplin > Tools > Options > Plugins > Gear icon > Install from file
  3. Select the file you downloaded
  4. Restart Joplin

Usage

  1. Create a new note anywhere. This will be the "board note"
  2. Paste this basic config into your board note
```kanban
columns: 
  - 
    name: Backlog    
    backlog: true
  - 
    name: Working
    tag: wip
  - 
    name: Done
    completed: true
    tag: done
```​
  1. Switch to another note and switch back, or restart Joplin. (this will be improved soon!)
  2. Now you should see the board open on the right side with all your notes, which were in the same notebook as the board.
  3. Drag the notes around and see their tags update.

You can also try notebook-based columns instead of tag based ones. Replace the config with this:

```kanban
columns: 
  - 
    name: Backlog    
    backlog: true
  - 
    name: Working
    notebookPath: wip
  - 
    name: Done
    completed: true
    notebookPath: done
```​

Make sure that the notebooks you specify here exists in the same notebook where the board is!

Example notebook structure:

📁 board
├─ 🗒️ board note
├─ 🗒️ backlog notes/tasks...
├─ 📁 wip
│ ├─ 🗒️ wip notes/tasks...
├─ 📁 done
│ ├─ 🗒️ done notes/tasks...
2 Likes

Thank you for this clarification. After a first try following your instructions, it seems that the tags are not updated if I move a note or a task.

Hm, that's bad. If it's not private, could you send me a screenshot of your setup? I just want to see your board note, and the notebook where it's in.

Also, could you try enabling debug mode, as described here:
https://joplinapp.org/debugging/#desktop-application

and send me the logs you see? You should see two consoled pop up, one in the main joplin window and one in a separate window. I need logs from both

Yes of course.

That's strange... Could you also share the logs?

Fun to play with! The drag and drop feels nice and responsive. I know you are not done, so my apologies if some of my "bugs" are just TBD!

I tested this on Mac, Joplin 2.2.1 (prod, darwin).

Some things I noticed with the Tag-based Example:

  • the board wouldn't load notes if the name of the notebook has a space in it (e.g. notebook Testing Kanban)
  • the first time i moved a note to the "working" column it went back to the backlog without "sticking". This seems to be because I didn't have the WIP tag created yet. once i moved it again, it worked properly adding and removing the tag
  • have to switch to a new notebook (not just a new note) to get the board to re-render (because clicking notes in the same notebook keeps the board on the screen I think)
  • sometimes moving a note caused another note to move. for example, in this case I move the note called "test" to the working column and the note "test note" moved too. This doesnt seem to happen every time, and as you can see "test note" is still marked as done. They are only semi-linked and don't always do the same thing when I move them, maybe a bug because they are named similarly?
  • moving a note (not a todo) to done moves it visually, but no tag is added, so it doesnt "stick" when you reload
  • errors i see in the console (could be from other issues)
Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.
    in NoteEditor (created by Connect(NoteEditor))
    in Connect(NoteEditor) (created by ResizableLayout)
    in div (created by styled.div)
    in styled.div (created by ResizableLayout)
    in div (created by Resizable)
    in Resizable (created by ResizableLayout)
UserWebviewIndex.html:1 Uncaught (in promise) Error: Not Found
    at Object.<anonymous> (/Applications/Joplin.app/Contents/Resources/app.asar/node_modules/@joplin/lib/services/rest/routes/tags.js:25)
    at Generator.next (<anonymous>)
    at fulfilled (/Applications/Joplin.app/Contents/Resources/app.asar/node_modules/@joplin/lib/services/rest/routes/tags.js:5)
  • Testing the notebook path example didn't seem to work for me. Only the backlog notes loaded, and moving notes into a different column just disappeared them from the board (although it did move them to the correct folder.)
    Screen Shot 2021-07-10 at 15.07.59
  • For the tag based example, the notes with the tag "WIP" needed to be in the same folder as the board note to appear, notes with that tag in different folders were ignored.

FYI, I only see the dev console when I run in debug, not sure where to see the separate window.

1 Like

You need to use dev version of the plugin, i.e. check out the sources, run npm i from there, and point Joplin to that dir. And if you have previously installed the plugin from .jpl, you'll need to remove it first.

Thank you for the detailed feedback!

Yeah these seem like serious bugs, I'll look into them ASAP.

Yes, notes in the same notebook should keep the board open, but I'm working on the auto reload.

This will be solved when I add support for the completedTag rule, so very soon.

I guess it's related to the WIP tag not existing. For some reason I thought tags are created automatically by Joplin if they don't exist yet, but it seems that's not the case. I'll add the check for that.

That's the intended behavior, unless they're in sub-notebooks of the board notebook, in which case it's a bug.

I figured most people would have one notebook for the board, and would want to leave all other notes out. But I could surely add an option to include all notebooks. What do you think?

I fixed all the bugs you discovered except this one, because I couldn't reproduce it. Did you notice maybe, when this happens, do both notes move smoothly, or does one jump there a split second later?

Yea, I like the idea of having a board that is generated purely from tags and doesn't care what notebook it is in. That allows me to keep project notes in their notebooks, but see all my "work" across a bunch of projects. In that case I probably would want my backlog to be all notes in a general Inbox notebook, but I am less concerned with that.

Hmm, seems to depend? As you can see it isn't consistent.

Tried it yesterday, very nice. Great work!

I could not reproduce the issue that @uxamanda mentioned, but at some point I grabbed a task and started dragging it back and forth and after a few seconds my whole system froze.
However, I think this is not something specific to your plugin and more of a general stability issue on Linux.

@uxamanda could you give the latest version a try and see if this still happens? I made multiple small improvements in stability, it should be a lot smoother now.
com.mablin7.test.kanban.jpl (1.6 MB)

Hm I'm afraid that could be the new polling system. I didn't run into it on my setup, but I can imagine that there's a memory leak somewhere in there. I'll do some more testing, but I might have to come up with another way for updating the board.

Week 5

July 5. - 11.

New release

Here's the latest test release of the kanban plugin:
com.mablin7.test.kanban.jpl (1.6 MB)

See installation and usage instructions in my previous post:

Progress

This week I've been making smaller, incremental improvements, fixing bugs and improving stability. Multiple unexpected problems came up, so I haven't managed to make as much progress as I had hoped, but in general the plugin should be a lot more usable now.

Most notably, the auto-reloading is finally working. This mean that you can

  • change the board config,
  • change the board title,
  • change the content, title or tags of any of the notes/tasks

and see the board update live! This should help greatly with experimenting, but it's not really stable yet, so please report any weirdness that happens while reloading.

Behind the scenes, the auto-reload uses long polling. This mean that the webview, which displays the board, sends a message to the main plugin immediately after opening, but the plugin only replies when there's an update. After processing the update, the webview again sends a long-poll message and the cycle repeats.

This is nice, because it allows quick updates, without sending messages very frequently and seems to work fine most of the time, but I'm suspecting it introduced a memory leak somewhere. I'm currently investigating this.

Achieved

  • Fixed multiple smaller issues
  • Added auto-reload
  • Added new tests for the sorting logic

Planned for next week

  • Investigate performance issue
  • Add more detailed error messages for the config parsing
  • Create mockups for the config UI

Thank you for all, who's giving the plugin a try and providing feedback!

Looks like the notes following each other around bugs are fixed! :tada:

I was playing around with something else and broke things (sorry :slight_smile: ):

  1. changed the done tag from done to is-done. This mostly worked as expected, it moved the note tagged "done" back into inbox. Moving the same note to the done column added the new tag.
  2. Then I changed the wip to wip2 and it didn't do anything at all. Switching notebooks and back the plugin now has an error stating The tag "wip2" already exists. Please choose a different name. I tried changing it to a new tag that I pre-checked doesnt exist wip4 and what seems to happen is that the new tag is created as soon as the board note loads, but it now shows The tag "wip4" already exists. Please choose a different name. If I put the tag back to wip, it then says The tag "is-done" already exists. Please choose a different name.. I can't seem to get out of this state, even by uninstalling and reinstalling the plugin. There are no errors in the normal dev console.

Even deleting that note completely (so that I didn't have any kanban notes anywhere) still shows the old error, so I think this might be a caching issue of some sort.

1 Like