![]() |
|
![]() |
| > It feels like you left a chapter or two out.
I agree with you. More details will come out over time but I wanted to keep yesterday's paper a single page. > You mention in the citations that "Hierarchies are painless in our system through nested parsers, parser inheritance, parser mixins, and nested measurements." Nothing else in the article gives any hint as to what those things are or how your system implements them except nested measurements. It's unclear at all what a parser is in your system. Below is a link to a web IDE we built. You can see parsers (on the left), and concepts (on the right). Nested parsers and parser inheritance are demonstrated. Mixins is not currently in that branch yet. Ignore the "cells" stuff at top (that turned out to be an unneeded division between lines parsers and word parsers). https://jtree.treenotation.org/designer#url%20https%3A%2F%2F... > Overall it seems like your ideas would make more sense if you used more widely adopted language to describe it. "Concepts" are records, "measurements" are fields. Yes, concepts often map to records or rows. Measures to fields or columns. Measurements to the cells in a spreadsheet. There are reasons for my terminology, that should become clearer over time. |
![]() |
| From a quick scan, it sounds like you re-invented a lot of the concepts of semantic data, just with different terminology and a different text format. (RDF, triples, ...) |
![]() |
| I've built a web-based tool for myself that has similar philosophy: https://edna.arslexis.io/
It does support multiple pages but you can use just one. It has a nifty feature in that you can divide the single file into virtual parts. They just have alternate backgrounds to tell them apart. And each virtual part can have a type for syntax highlighting (plain text, markdown or a programming language). I've been using it for a few months now and it's my primary note taking / knowledge recording thing. Even though it's web based, on Chrome you can save notes on disk so it works like a desktop app. Each note is a plain text file so you can edit them in any text editor. If you put notes on a shared drive (Dropbox, OneDrive, Google Drive etc.) you can work on notes on multiple computers. It's also open-source: https://github.com/kjk/edna |
![]() |
| EDIT: Originally I just looked at the website. Looking at the GitHub repo, I see it's a fork, which makes sense (I also didn't notice the other replies!) Either way, it's cool. I'll probably end up using this myself. I was unable to find a way to store notes in a folder or in encrypted Gists though.
This seems nearly identical to Heynote[0], which was also on HN[1]. Even the example blocks share some content with that used as an example in the screenshot on the Heynote homepage (and I think in the app too) [0]: https://heynote.com/[1]: https://news.ycombinator.com/item?id=38733968 |
![]() |
| To save on disk you must use Chrome or Edge because only they support necessary APIs.
Initial note storage is in localStorage. To switch to disk: right-click for context menu, `Notes storage` / `Move notes from browser to directory`. Then choose a directory on disk and we will do one time migration from localStorage => disk. You can then switch to another directory (some apps call it a "workspace"). Because why not. Encryption is probably the next feature I'll add because I want to store secrets in my notes and I'll feel better if those notes are encrypted. More docs: https://edna.arslexis.io/help Multiple notes is pretty big addition. I loved the concept and implementation of blocks in Heynote but a single note was a deal breaker for me. I've also added some UI like right-click context menu for discoverability, ability to enable spell checking. And I'm really trying to optimize for speed of use, including speed of switching between notes. For example you can assign Alt + 0 .. Alt + 9 as note quick access shortcuts. By default I create 3 notes: scratchpad, daily journal and inbox and they get Alt + 1, Alt + 2, Alt + 3 quick access shortcuts but you can assign them to any page you want. |
![]() |
| Probably not to Edna. It's focused on being fast and lightweight.
I've been thinking about more featureful markdown note taker that would support images and more. I've started on such a thing but stalled. It's way more work. The good thing about Edna is that I spent less than a month adding the features I wanted to Heynote fork. The current version is at https://notedapp.dev/ but don't use it for actual notes. |
![]() |
| Very cool!
I love the math block. Is there a way to reference a variable elsewhere, or fetch data online? Then you could build a little personal dashboard with it. |
![]() |
| Chrome implements APIs that allow accessing files on the disk.
So Edna either stores notes in localStorage or in a directory of your choosing on disk. In Edna you can right-click for context menu to switch between localStorage and disk. If you ask: "how do the browser APIs work", you can look at https://github.com/kjk/edna/blob/main/src/fileutil.js Basically, there's `window.showDirectoryPicker()` to ask user for permission to access directory (either read only or read write). And then using that directory handle you can read list of files, read / write files or create new files. |
![]() |
| > I don’t get it. How do I now that something is a data definition and not just more data?
In our ScrollSet implementation, a measure definition (what you call a "data definition") is a subset of a parser. You will know something is a measure definition when you see a line starting with a word with a "Parser" postfix, and nested inside that definition is a line like "extends abstractMeasureParser". Below is a link to a web IDE we built. You can see all of the measure definitions currently powering PLDB on the left. On the right, you can see a concept ("more data", in your terms). https://jtree.treenotation.org/designer#url%20https%3A%2F%2F... > He calls it a trick, why? The current term of art is "Offi-side rule" (https://en.wikipedia.org/wiki/Off-side_rule). I never liked that term. I call it the indentation trick. But I am referring to the Offside_rule. |
![]() |
| Xml is too bulky, let's do csv Csv is too limited too strongly typed, let's do json. Json is too heavily punctuated let's do yaml. Yaml is too yamly, let's do this instead. |
![]() |
| Nested Markdown with code fences is plain text.
Alas, vscode will choke on it. I have a project where a thin wrapper loads from a giant markdown file into a sandboxed iframe. That way you could paste code from an unknown source into it and play with the output and paste private data into it and it wouldn’t be encoded into a URL sent to a server, as making network requests and following links are blocked. https://codeberg.org/ristretto/pages notebook.md is huge, output in the project website, link to source in the README. |
![]() |
| Caveat from article:
|
![]() |
| All text and no syntax makes Breck a dull boy. All text and no syntax makes Breck a dull boy. All text and no syntax makes Breck a dull boy. |
![]() |
| (Excuse me if this is obvious, I have limited time, but this article grabbed my attention; Fascinating).
How do you handle writes? It seems like an interrupted write process could corrupt a section of text, which could be difficult to recover from. Given the example at "breckyunits.com", I don't see hashing information associated with each item. Are you depending on git to prevent such errors from corrupting individual items? If so, then I would be concerned about gits propensity for data corruption [1, 2, 3, 4]. I wonder if adding some ZFS-like hashing and integrity checks would be helpful. Then, as it's one big file, it seems to act like a TAR archive [5], where you append to the end, but have to scan through the previous content to find what you want. If that's the case, then it may be viable to do copy-on-write [6], where information is never modified, but instead referenced with a key, and later modifications supersede older versions. (Again apologies if this is redundant, I just had the thought and had to get it down. XD) [1] https://superuser.com/questions/1253830/does-git-prevent-dat... [2] https://superuser.com/questions/1635797/what-if-git-reposito... [3] https://stackoverflow.com/questions/tagged/corruption?tab=Fr... [4] https://www.reddit.com/r/git/comments/oq9wph/power_outage_in... [5] https://en.wikipedia.org/wiki/Tar_(computing) [6] https://en.wikipedia.org/wiki/Copy-on-write |
![]() |
| In case you would like to be less (or more) confused, this is an application of Tree Notation, by the same author https://treenotation.org/
I suffer from the same flaw as the author, a tendency towards grandiosity and fervor in describing my good ideas. So I'm in a good position to advise that he knock it off: people don't like that, and it will keep them from using your stuff even if it's good. Which it might be, actually. The extreme simplicity of the foundation is laudable. |
![]() |
| What I want to know is, what is the maximum size of a PHP file that can be loaded?
I guess I can TIAS but is it documented anywhere ?? |
![]() |
| > Maybe the author just independently came up with this, thought it was cool, and wanted to share?
Except that the title ("A New Way to Store Knowledge") is leaning heavily on NEW. |
![]() |
| Thank you for bringing up recutils and ndb. I had seen them years ago but didn't make the connection when writing this paper. But there are some great connections, and I will definitely be updating the post with a section and links to them.
I am reading through the source and will have more to say soon. If anyone has any links to massive plain text datasets based on these (or other similar tools), I would appreciate more pointers. I can tell you now (subject to change), based on my preliminary read through the source is that the two systems you mentioned missed some highly important details that I have presented in my paper, with order of magnitude impacts. Not to discredit them at all, rather I think my work gives them credit, in that they were on the right track, and we just have the benefit of some recent innovations, and get to stand on their shoulders (and the shoulders of others). Edit: I have updated the paper with a reference to Recutils. Thanks rakoo! https://github.com/breck7/breckyunits.com/commit/71b706d296e... The added text:
|
![]() |
| Maybe you missed the link in the "Evidence" section to a 7 year open source project containing 172,162 lines of code, and a compiler compiler.
;) |
Overall it seems like your ideas would make more sense if you used more widely adopted language to describe it. "Concepts" are records, "measurements" are fields.