Contents
Expectations
Today we decided that after the rousing success of our last issue, we would tackle a similarly large issue this time - Link Filters.
Our goal for today was to do some research on Link filters and discuss implementations for it later in the day
What I learned today
We got some feedback on our PR to Athens yesterday. One particular one was to use the datoms
index wherever possible to query for entity data since that is much faster than using a query.
I’d completely forgotten about the existence of the e-by-av
method which allows us to get the entity id given an attribute and a value. This ended up making my get-id
function redundant. But that’s the way PRs go. This did end up teaching me the value of really knowing the codebase that you’re working on.
Link Filter Implementation
Adrien did some really nice work on understanding the linked filters, and where some of the code for it resides, and potential next steps.
We need to implement the link filters in 3 places mainly -
- Page Level
- Linked References
- Right Sidebar
A page level link filter would have to maintain knowledge of all the current links in a page, including ones we add. What would be a good way to do this? One idea I can think of is to maintain an atom that is updated with all the links in a page and the link filter reads from this atom to generate the initial list.
The proposed design for the Athens Link filter is quite pretty and is implemented as a UI component in DevCards.
Moar Athena
In my usual fashion, I ended up getting sidetracked by a different issue. Athena is still not quite perfect and I wanted to try to fix some of these issues.
Most of the issues seem to stem from regex code in Athens. re-pattern
does not like open, unterminated parenthesis and square brackets in it’s input string. This leads to a variety of issues
- Can’t create pages in Athena that contain open
[
,(
. Sometimes the characters are just omitted. - Accessing an existing page that has an unterminated
[
,(
just freezes the application as a whole (nothing is rendered at all).
This can all be solved by writing a simple function that adds escape characters to any character that we deem as “special” characters.
Takeaways
I do some good work when I get sidetracked but I do need to be better about sticking to my goals. I really wanted to start work on a ClojureScript RSS Reader but I haven’t even gotten started on that. Oh and I have to continue working on the vscode-cljstyle
extension. The code isn’t going to port itself.
But otherwise, I did get some decent work in fixing issues.
Today’s tally -
- bugs fixed - 2
- Read about Clojure -> ClojureScript porting