dharmaturtle / CardOverflow

25 stars 1 forks source link

Add a license #3

Open NiloCK opened 2 years ago

NiloCK commented 2 years ago

I'm curious about your intent here. I found the repo via a thread in r/anki and we are in violent agreement.

I'm working on something similar under the GPL / FOSS umbrella. My repository isn't exactly polished for readability, but you could check out http://github.com/nilock/vue-skuilder, or this draft blog post.

We should talk!

dharmaturtle commented 2 years ago

Hello! Gonna answer this in parts:

Intent:

I basically wanna build Anki Online. Here's a comment I made last year that's still accurate to my high-level vision:

  • Emphasize collaboration. Anki permits sharing, but this isn't collaboration. For example, you can share your cards, but you can't leave comments on a card (e.g. This card is incorrect, look at page 55 of Grey's Anatomy). I've implemented comments, forking, versioning of cards and note types, and optional updating to newer versions of cards and note types. Features I want to add are up/down voting and "soft" forking (there's no need to have a completely new card with its own comments section because you prefer a different font from the card's author).
  • Emphasize community. Frankly, studying is a slog. It would be nice to connect with other people who are studying the same material as you. Comments permit this, and someday I want to build something like Pramp where people can take turns being the quizzer and quizzee, cause sometimes flashcards aren't enough to expose gaps in your knowledge. Also perhaps there can be comment categories; sometimes you just wanna post memes (sup /r/medicalschoolanki) and sometimes you wanna share mneumonics. And sometimes, a meme is a mnemonic! So yeah, I haven't figured comment categorization yet. Tags maybe? =\
  • Open source with plugins. Studying is incredibly personal. Math people want Latex, but med students want to integrate a medical glossary. The Anki plugin system is fantastic, and I won't deviate from that. None of this is implemented yet though (other than being open source). My project so far is a website, and you can't have plugins with a website. However, it is built in such a way that moving the code to an offline client is relatively easy, and that will be plugin compatible. I just have to get the site up first since MVP and all.
  • Emphasize experimentation. I've implemented a feature where you can study your cards hands free. It uses voice synthesis to read the card aloud, then uses voice recognition to listen to your response (Hard/Good/Easy). Now you can study while washing the dishes! I have other ideas, like using your phone's GPS so you can literally walk the halls of your memory palace, or using machine learning to identify "bad" cards, or giving people the ability to write notes summarizing a topic with links to related cards so you can get a high level vision of what you're studying. The entire realm of education innovation lies before us, yet the most highly requested feature for Anki is an easy way to resize images :P

Some of the implementation details have changed (e.g. no more soft-forking) but the goal hasn't changed much, if at all. If anything, these goals have only become more concrete. I've since figured out a way for websites to have plugins, for example. (And not via browser plugins!) I gave a very optimistic timeline back then, but have since realized that if I want to build something that supports offline clients, that has to be a first-class architectural concern - not something tacked on later. My backend architecture has undergone multiple distinct refactors as I tackled security, syncing, and other technical details. (SqlServer -> Postgres -> EventSourcing on the cloud->EventSourcing on the client -> literally doubling my number of DDD aggregates.)

Technical Detour: I'm using event sourcing to manage syncing data between occasionally offline clients and the server. I see you're using CouchDb/PouchDb - how's your experience been like with that? Andy Matuschak explored using CouchDb and seems to have rejected it. To be fair he's also encountering significant complexity with event sourcing. I rejected PouchDb/CouchDb because I really don't like Javascript (I don't have significant front-end experience...), wanted more control over the data flow, and preferred the flexibility of event sourcing. I'm really enjoying event sourcing from a TDD perspective - an event store is basically a list, so an in-memory MockDb is dead simple. It's also forced me to think hard about the design of my domain, and as a result the domain has been significantly improved and simplified. I'm certain if I continued to use an RDBMS my domain would continue to be a ball-of-mud nightmare.

Add a license

I'm procrastinating on this >_< This reddit comment is still accurate:

Yeah, I haven't figured out what license I wanna choose yet. The client code is 100% gonna be something OSI approved - leaning in the direction of AGPLv3. The server code may or may not be - this one is a harder decision. I don't like what Amazon/Microsoft have done to Mongo/Elasticsearch. Not only taking their lunch money, but sending support tickets their way -.- I like how Andy Matuschak's licensed Orbit - there's a significant chance I'll go in that direction. I'm just kicking this decision down the road cause

  1. it's very unlikely anyone will PR anything anytime soon. My tech stack (F#/Blazor/EventSourcing) isn't very popular. (But imo it's the only way to get the combination of features I gave in that other post, other than going full-stack Javascript. Also fuck Javascript. There's a reason my repo began soon after the announcement of Blazor.)
  2. the client code has not yet been separated from the server code
  3. I'm not sure how to multi-license a repo
  4. I'm lazy and trying to figure out the difference between the jungle of OSI licenses is just mind-numbing

LMK if you wanna contribute but the lack of a license is giving you pause :p

To add to the above, I also want to work on this full-time, so I need to figure out the monetization strategy. This implies that the project may have to become a business. Since I haven't yet figured out the monetization strategy, I'm procrastinating on choosing a license. To repeat, LMK if you (or anyone really) wants to contribute but the lack of a license is giving you pause!

We should talk!

Heck yes we should. 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. Sending an email to the address on your site...