HNHacker News
TopNewBestAskShowJobs

dharmaturtle

454 karma · joined October 7, 2013

[ my public key: https://keybase.io/dharmaturtle; my proof: https://keybase.io/dharmaturtle/sigs/xb251-ShxEpBNZae8VvDaqxiONfTyI-GZD4nZSKYG_A ]

Or you can reach me at my HN handle at gmail

submissionscomments
dharmaturtle··on Moskva cruiser sank while being towed in a storm – Russian Defense Ministry
https://en.wikipedia.org/wiki/USS_Bonhomme_Richard_(LHD-6)

A "Wasp-class amphibious assault ship", not a CVN. But yes, capable of launching harriers/F-35s.

dharmaturtle··on Eden
git was created in 2005. No idea what MS uses, though some history is here: https://en.wikipedia.org/wiki/Microsoft_Visual_SourceSafe#Mi...
dharmaturtle··on Ask HN: Who wants to collaborate?
Hm, I haven't tried it, but from the docs it targets Elmish and React, both of which use a VDOM, which sadly eliminates it as a possibility.
dharmaturtle··on Ask HN: Who wants to collaborate?
I want my offline client to have a plugin system like Anki. Powerful plugins will want to manipulate the DOM directly. They can't do this if I'm using a virtual DOM, which is what Blazor uses. (VDOM updates will overwrite any plugin DOM changes.) There are Fable bindings to React, but of course that also uses a VDOM.

I can't express in words how seriously sad I am to leave F# for the shitshow that is TypeScript. I tried to make ReScript work, but it's tightly coupled to React for baffling reasons.

dharmaturtle··on Ask HN: Who wants to collaborate?
I'm building an opensource GitHub for Flashcards. Basically Anki Online (though there's an offline first client). The idea is that it should be easier to collaboratively build flash cards. The project started out with F#/Blazor, but for various reasons I'm (sadly) moving to Typescript/Electron.

https://github.com/dharmaturtle/cardoverflow

dharmaturtle··on Speeding up VSCode extensions in 2022
Off topic: Is there a document/blog/article somewhere about the plugin architecture of VS Code? I'm less interested in developing a plugin (which google results usually yield) and more interested in, say, how VS Code determines the order in which plugins are called.
dharmaturtle··on Vim Galore: everything you need to know about Vim
I have this out-of-sync issue as well. I was previously blaming it on a Clojure plugin (Calva), but I'm guessing you don't have that. Wish I could reliably recreate - it happens once or twice a day.
dharmaturtle··on The Writing on the Wall: Sci-Fi’s Empty Techno-Optimism
Agriculture on a "heroic scale" allowed civilizations to develop.

I submit that Martian botany will the the start of "space farming on a heroic scale" - and that The Martian will inspire future generations.

As an aside, I dislike the implication that a personal story with only one life on the line is not heroic. I'm tired of world ending stakes in stories.

dharmaturtle··on Alphabet's Calico has begun trials on a molecule for neurodegenerative diseases
I use Sync on Android. You can make reddit links open there by long pressing on the app icon and making sure the links are setup to open there. https://imgur.com/a/4qKCgSB
dharmaturtle··on From TypeScript to ReScript
Yeah - I was limiting my post to explicit async/await.

Don Syme, creator of F#, had a nice thread on the roots of async/await, though it doesn't mention do-notation: https://mobile.twitter.com/dsymetweets/status/14074008179179...

I'm still annoyed that most other languages stole async/await... but not the more general monadic/do notation. Instead we get elvis operators, chaining functions, etc.

dharmaturtle··on From TypeScript to ReScript
https://en.wikipedia.org/wiki/Async/await#History

F# in 2007

C# in 2012

Python in 2015

Typescript in 2015

Javascript in 2017

Rust in 2019

C++ in 2020

Swift in 2021

dharmaturtle··on NASA says Webb’s excess fuel likely to extend its lifetime expectations
> i just don't like that the said company test their stuff in a middle of a natural reservation

I guess you must really hate NASA then.

> Visitors to Kennedy Space Center Visitor Complex are often surprised to discover that they are just as likely to be greeted by an alligator or dolphin. This is because Kennedy Space Center sits in the middle of the Merritt Island National Wildlife Refuge adjacent to Canaveral National Seashore, one of the largest and most diverse wildlife preserves in Florida. In fact, the refuge supports one of the highest numbers of threatened and endangered species anywhere in the nation.

https://www.kennedyspacecenter.com/blog/07/the-wild-side-of-...

dharmaturtle··on Ask HN: Who wants to collaborate?
I talk about this a little in an old reddit thread:

> With StackOverflow/Wikipedia there's only one article/question/answer. With flashcards, people want to individualize their cards. As an example, for you as a foreign language learner, perhaps you want to include short clips from movies/youtube of someone saying a phrase like "Where is the library?", while someone else wants to use a clip of the same phrase from a podcast. The semantic content is the same, but the reification into a flashcard is not. You could possibly link to related cards like StackOverflow does in a sidebar... but I'm designing something that's more like concept learning. Each card is an Example of a Concept. The author can then move their Card/Example into what Concept they think it best fits - or create a new Concept if they can't find anything they like. Basically I'm building in the ability to group cards that have very similar content. By looking at all the various Examples/Cards, a person can choose what best suits their style - or make one for themselves by forking an existing card.

https://www.reddit.com/r/Anki/comments/nalar8/open_source_we...

dharmaturtle··on Ask HN: Who wants to collaborate?
I'm trying to build GitHub for flashcards: https://github.com/dharmaturtle/cardoverflow

Emailing you!

dharmaturtle··on Framework Laptop with Ubuntu Review
A laptop with an ortholinear+QMK option would probably be an instabuy from me. Hell... native QMK (or ZMK) alone would get my attention.
dharmaturtle··on Ask HN: Show your failed projects and share a lesson you learned
Yep, I was originally intending for this to be a PWA. I'm now planning on Electron (or Tauri, if stars align). There may eventually be a PWA down the line, but I think most students will be okay with installing a program. Electron and PouchDb can both use Sqlite/LevelDb/IndexedDB, which is cool because IndexedDB is a slow POS. So on Electron I think I'll use PouchDb's LevelDb adapter, and when/if I start work on a PWA version I'll use PouchDb's IndexedDB adapter.
dharmaturtle··on Ask HN: Show your failed projects and share a lesson you learned
The main thing that's been scaring me away from Firebase is the vendor-lockin/pricing. My target audience are students who are very price sensitive, and I hear firebase is pricy as heck. I will likely launch this as a freemium service. Sync is kinda table stakes, so it'll need to exist in some capacity for free users.
dharmaturtle··on Ask HN: Show your failed projects and share a lesson you learned
A person should be able to study their flashcards/notes in an offline environment. E.g. on a plane, on a train in a tunnel, where-ever. Also, flash cards are quite personal, and many people have hesitations about trusting them to some cloud-only server. Imagine if Obsidian/VSCode/your-note-app only worked while online. (Heck, look at how much pain Notion is going through trying to support offline behavior.) At the very least there needs to be a way to export their data to some CSV. IndexedDB is a nightmare, but it has a library that lets it easily sync with the cloud (PouchDb/CouchDb). I'd consider Sqlite, but its syncing features/community are significantly smaller than *ouchDb.

Unfortunately MartenDB is on PostGres (which makes it unviable for electron-style clients) and Microsoft Sync Framework looks dead.

dharmaturtle··on Ask HN: Show your failed projects and share a lesson you learned
> What is the fundamental issue why you keep switching tech stacks?

In a sentence: better understanding of the domain/problem and changing my philosophy from "build it quickly" to "build it right".

To repeat myself a bit, I started off with the tech stack I was most familiar with (which is fairly uncontroversial) (F#/RDBMS/Blazor (okay I'm not too familiar with Blazor, but I know C#/dotnet a hell of a lot more than I know JavaScript)). I was originally following the maxim "build an MVP quickly", and I more or less did - I demoed that MVP in a YouTube video on the GitHub. However that advice is tactical - I eventually realized why that advice exists. Startups launch an MVP quickly to de-risk their idea and investigate whether a market exists. I am positive this market need exists. (The real risk is whether it's monetizable... but that's another topic.) I always intended this to be offline-friendly, but just assumed that could be something I could tack on after launching an MVP. I started to investigate that after making the GitHub video, and it turns out to be a significant technical challenge. This facilitated my move to event sourcing, which (in theory) can sync occasionally offline clients. Finally, I grew extremely annoyed at how long it was taking to build an event sourced system. Taking a lesson from my "tacking on offline-mode is easy" mistake, I decided to investigate how a plugin system would work. It turns out there are fundamental incompatibilities between Blazor and any reasonably powerful plugin system. Hence finally, my switch to a VDOM-less UI framework (SolidJS/Svelte) and TypeScript. This kicked me off the dotnet ecosystem (and F#), so I'm glad I decided to this this now rather than post-launch. I previously thought plugins could be something that I "just tacked on later."

> I would want to have a reasonably clear idea of what you want.

Begin with the end in mind :) For me I let the advice of "build an MVP quickly" overcome my better sensibilities. Now, I'm attempting to do "steel thread programming" - something that proves out the technology, before I even consider adding business value.

> What happens if a user deletes all or most of the flash cards in a collection? ... This would probably make things more complicated.

Yes - I have many thoughts on how to resolve this. Event sourcing is of great benefit here, but let's not get into that.

> It is natural to go for a client-server architecture

Yep, my GitHub video demoed this architecture. Unfortunately since what I'm building is going to have an offline mode, this architecture is insufficient.

Unfortunately the devil is in the details. You can describe all the high level arrows/diagrams you want - but as I found out when trying to do event sourcing, what really matters is the implementation. For example, to respond to, "you need have some dataflow between db and [client]"... this is a tough, nontrivial problem that PostGres and other RDBMses have significant problems with.

My adventures have led me to believe that when building out a project of any significant technical complexity - you should first start with a "steel thread". Don't just build out something of "minimal viability" - tacking on additional features that you know you want down the line should be proven out. Perhaps not implemented for real, but there should exist a technical proof of concept.

dharmaturtle··on Ask HN: Show your failed projects and share a lesson you learned
Ah whoops - you're right.

Also - hi, it's you! If you're willing to talk shop, you can reach me at my HN handle at gmail.com. Primarily, I'm curious why no one else is building what I am - Github for flashcards. I've met someone who's trying to build Wikipedia for flashcards... but for me personally I'm more interested in something more decentralized. Not like crypto-decentralized, but like "everyone can have their own card/definition of 'Proteus Syndrome'" - i.e. they don't defer to a central authority. I'd love to pick your brain :) No pressure, just an open invitation! My comment here [1] is still accurate:

> If there's only one thing you know about me, it should be that I want Spaced Repetition to become popular. I don't care who makes it popular - it simply needs to be popular. I'll happily talk shop with anyone building a tools-for-thought system and tell you all I've learned.

[1] https://github.com/dharmaturtle/CardOverflow/issues/3

dharmaturtle··on Ask HN: Show your failed projects and share a lesson you learned
Great question. I've thought hard about this. I originally built it to be online-first, thinking "you can add offline support later". This is the version that's demoed in the video on the Github - and is over a year old at this point. I abandoned this for multiple reasons:

1. Adding offline support is very nontrivial. It (may) influence your choice of DB and your data schema. This is a type of master-master replication, since the user is the master of their data, and this is quite painful in RDBMS-land. I'm avoiding having to migrate my schema to support offline sync.

2. There already exist solutions that are online-first. E.g. Quizlet, mochi.cards, remnote. I find all their tools for collaboration lacking, despite being online-first... which is surprising. They don't even support something as basic as commenting on a card. This blows my mind. Imagine Github without issues/discussions/pull requests.

3. Users have repeatedly told me that they prefer offline-first. This is probably due to them coming from Anki - a popular open source offline-first program. Anki is my real "competition" - not billion-dollar Quizlet.

dharmaturtle··on Ask HN: Show your failed projects and share a lesson you learned
Fair point. In my defense, people say you should pick the tech-stack you're most familiar with: https://news.ycombinator.com/item?id=29626371 Perhaps I'm misusing the word architecture - I guess I really mean tech-stack.

I'm most familiar with F#, so I went with that and Blazor initially (to avoid learning JS). PostGres feels fairly uncontroversial. Perhaps I magpied from there to event sourcing - I still find it surprising that an indexdb-eventsourcing-wrapper doesn't exist. I considered ReScript given my F# background (the two share a similar philosophy/syntax).

Now though, I'm trying to "pick the best tool for the job" instead of "use what you know". AFAIK if you want offline syncing, the best tool for the job is CouchDb/PouchDb. If you want to avoid the VDom, Svelte or SolidJS are the most popular options.

Please let me know if I'm mistaken - perhaps I'm too lost in my own head.

dharmaturtle··on Ask HN: Show your failed projects and share a lesson you learned
Not satire, just being blunt. What do you think I'm satirizing? The magpie developer?
dharmaturtle··on Ask HN: Show your failed projects and share a lesson you learned
No users - no launch. I have many conversations with potential users though... I'm 100% positive this is something that people want. E.g. right now the way they solve the problem of collaborating on flashcards is by using _google sheets_ to collect errata on shared decks. https://www.reddit.com/r/medicalschoolanki/comments/f0bj27/o... This workflow involves manually checking the sheets link, downloading it, converting it to the correct format, importing it into your collection, and hope it doesn't override/corrupt your own customizations to a particular card. It's absolutely fucking nuts.

I'm 100% sure it (or something like it) is desperately needed by the world. However, students aren't really well known for paying for software, so this remains a nights/weekends thing.

dharmaturtle··on Ask HN: Show your failed projects and share a lesson you learned
I tried to build StackOverflow for flashcards (i.e. spaced repetition with collaboration as a first class feature.) After working on it on nights/weekends for ~2 years, I realized my architecture was shit. I started out with Blazor + F# + PostGres, but eventually I realized that syncing offline client DBs to the cloud was a very nontrivial problem. So I moved to event sourcing. Turns out that's not much better - I started to write my own IndexedDB wrapper, then said "you're a moron" and switched to CouchDb/PouchDb/RxDB. I also wanted to support plugins. I thought I figured that out with Blazor, but eventually I realized that more powerful plugins would want to manipulate the DOM directly. Blazor's virtual DOM kills that possibility. So, I'm off the dotnet ecosystem (I am so, so sad to leave F#) and onto Typescript + SolidJS. I would've gone ReScript but that's tightly coupled to React which uses the VDom. Perhaps I should be using Svelte - I'm not 100% on any of this new architecture yet. So my project has not yet entirely failed... I just realized I spent ~2 years on the wrong architecture.

The carcass of my attempt in dotnet: https://github.com/dharmaturtle/cardoverflow

dharmaturtle··on Advent of Code Surveys: Results
I'm simultaneously learning neovim (by embedding it in VS Code) and emacs (primarily for magit - might learn org-mode later). Not sure why, but previously I never considered the possibility of being able to use both - I thought they were mutually exclusive.

I don't have many good things to say about vim or emacs's window/frame/buffer management... too used to VS Code/Chrome style tabs. Let me see what I have open damnit.

...turns out I just need to google it. Its `set showtabline=2` for vim and `M-x tab-bar-mode` (or `M-x tab-line-mode`) for emacs. Derp.

dharmaturtle··on Advent of Code Surveys: Results
FYI you can use VSCodium, the de-Microsoft version, with the neovim plugin, which uses real neovim and not emulation.

https://vscodium.com/

https://marketplace.visualstudio.com/items?itemName=asvetlia...

https://www.youtube.com/watch?v=g4dXZ0RQWdw

(As a newb I'm finding this to be a good way to learn vim without massacring my productivity.)

dharmaturtle··on Google Drive may restrict files identified as violating ToS
No, but that's primarily due to a lack of interest/manpower. They (probably) reserve the right to ensure that you aren't doing things that are against their TOS. There's (probably) no right to privacy.
dharmaturtle··on Google Drive may restrict files identified as violating ToS
You're right - I misremembered. Kinda wish HN would let me edit.
dharmaturtle··on Google Drive may restrict files identified as violating ToS
The storage owner can have a terms of service - i.e. you can't store flammable material/liquids. They also probably reserve the right to enter your unit to perform repairs.
← PreviousPage 2 of 6Next →