Yak Shaving is a nerd's term for an esoteric and seemingly unnecessary activity that you find yourself doing to solve a problem that, several iterations later, solves the problem you initially set out to solve.  The link takes you to an apocryphal story, but my current one is how I initially set out to organize my music collection and ended up somehow re-writing the library management layer of a popular programming language...

The Yak Stack is my stack of projects that I'm working on, or would like to work on someday.  The stack shrinks as I finish and release projects, and grows as I discover issues that need to be addressed.  Sometimes an entire chunk of the stack may be deleted or replaced as needed.

The Yak Stack:

  * 1. Hy Improvements

    * 1.1. Fix importer to work with Django
    * 1.2. Implement iter_modules layer for Hy

      * 1.2.1. Abstract importer into its own library
      * 1.2.2. Use cookiecutter to initialize the project
      * 1.2.3. Learn Tox to unit test the importer
      * 1.2.4. Implement a Jenkins layer for unit testing




  * 2. Catalogia

    * 2.1. A simple Django app to manage large personal music archives
    * 2.2. Add search feature
    * 2.3. Add discontinuity detection
    * 2.4. Add write features with historical tracking on a per-file basis


  * 3. Verb: That's What's Happening

    * 3.1. Toy programming language written on top of Python
    * 3.2. Library compatibility
    * 3.3. IDE


  * 4. Fy:

    * 4.1. Toy strongly-typed programming language written on top of Python
    * 4.2. Hindley-Milner lessons
    * 4.3. Type/Untype border (a'la Racket)
    * 4.4. IDE


  * 5. Intimacy: A Transpiler for Javascript

    * 5.1. Wishlist
    * 5.2. Make list of features from: Coffeescript, Pixie,
    * 5.3. Take code generator, and enrich with features as required.

      * 5.3.1. Macros


    * 5.4. Consider macro language extensions (auto-add backends)
    * 5.5. Use macro generators to enhance:

      * 5.5.1. Generators
      * 5.5.2. Cells/FRP
      * 5.5.3. Async/Await
      * 5.5.4. DOM/CSS/JS-building DSL via reader macros
      * 5.5.5. Try/Catch
      * 5.5.6. For/While (See Earl-Grey's "labeled continues")
      * 5.5.7. Auto-Currying (consider promoting)
      * 5.5.8. Pattern Matching (consider promoting)
      * 5.5.9. μKanren
      * 5.5.10. Advanced Regular Expressions
      * 5.5.11. See: Pixie's stdlib.pxi (nee' Prelude)
      * 5.5.12. Gradual Type Reconstruction
      * 5.5.13. Tail call optimization




  * 6. Jarvis: A 2-D implementation of an SFnal Gauntlet/Berzerk/Roguelike

    * 6.1. It's been done: See "Alien Breed"
    * 6.2. One step closer to Unity


  * 7. Gravity: The interpreter/compiler for Intimacy

    * 7.1. Fast interpreter (chapter 6 of LiSP)
    * 7.2. LLVM code generation (chapter 7 of LiSP)
    * 7.3. Read Evaluation and Reflection (chapter 8 of LiSP)
    * 7.4. Macros, use & abuse (chapter 9 of LiSP)
    * 7.5. Compilation into C/C++ (Chapter 10)
    * 7.6. Read chapter 11
    * 7.7. Compile direct to: Front end, back end, Postgres


  * 8. Narrator: A website for writers

    * 8.1. Version 2.0 Dependency: TOXIC
    * 8.2. BE: Create databases for stories, story collection, users
    * 8.3. BE: Create databases for templates
    * 8.4. MT: Generate Table of Contents on the fly, using template selection
    * 8.5. MT: Generate Story on the fly, using template selection
    * 8.6. FE: Display a story with next/previous
    * 8.7. FE: Collection editing via drag & drop
    * 8.8. FE: Sub-collection assignment to template
    * 8.9. FE: Sub-collection assignment to automatic EPUB generation
    * 8.10. FE: Sub-collection assignment to automatic LaTEX generation
    * 8.11. FE: Cover Art Assistant
    * 8.12. FE: Association and generation of EPUB with ONIX
    * 8.13. FE: Automatic dispatch to Lightning Source
    * 8.14. FE: Automation association and generation of print edition with ONIX
    * 8.15. BE: Create Database for multiple users
    * 8.16. MT: Create DNS-based dispatch
    * 8.17. Policy: Reserved namespaces.
    * 8.18. Research: What do FF/AO3/Ravelry do?
    * 8.19. FE: Beta readers
    * 8.20. FE: Alpha readers
    * 8.21. FE: Mobile Necessary
    * 8.22. FE: Uploadable, personalized themes.
    * 8.23. FE: Flavorish theme editable
    * 8.24. FE: Autogrid


  * 9. Twilight: A graph database

    * 9.1. Security and Privilege
    * 9.2. Triggers
    * 9.3. Constraints
    * 9.4. Collective insertions
    * 9.5. Collective deletions
    * 9.6. Views (?)
    * 9.7. Recursion
    * 9.8. Cost Prediction
    * 9.9. Types and User-Defined Types
    * 9.10. XPath and XSTL issues
    * 9.11. Buffer and Page Layout, Files of Records (RB 1)
    * 9.12. Catalog Design using C++ Templates (C++11 auto features, too)
    * 9.13. Indexes And B+ Trees (RB 2)
    * 9.14. Indexes and Hashes
    * 9.15. B-Link trees?
    * 9.16. Alternatives (B-Skip-List?)
    * 9.17. System Management (RB 3)
    * 9.18. Query Language (RB 4)
    * 9.19. Pluggable embedded languages for stored procedures (Javascript, Python, Guile (?) to start) (RB5)
    * 9.20. A "page fault" is when the DBMS references a page that is not in memory, so it must be loaded.

      * 9.20.1. See Lecture One for details on Page Fault architectures and Algorithms: LRU, MRU, "Hot Set"
      * 9.20.2. Query Locality Set Model: Methods of Database Access are predictable; reference access methods should be too
      * 9.20.3. This is an interesting question for GraphDBs, especially ones that are DAGs


    * 9.21. Multi-field indexing
    * 9.22. Concurrency Issues
    * 9.23. On-the-fly Compression
    * 9.24. Versioning (multiversion concurrency control)
    * 9.25. Distributed Graphs
    * 9.26. Query execution visualization tools.


  * 10. TOXIC: Terrabytes of XML Indexed and Compressed

    * 10.1. Lessons learned from Twilight
    * 10.2. Huffman and page loading


  * 11. Gardenia: An app suite for gardening, using USDA data

    * 11.1. Study how to capture geographic information
    * 11.2. How to capture topological information
    * 11.3. BE: Associate address with microclimate
    * 11.4. BE: Associate microclimate with date.
    * 11.5. MT: Capture user's plant list and scale
    * 11.6. FE: Terrain editor, with pop-ups to indicate actions.


  * 12. Potlatch: An app suite for organizing potlucks

    * 12.1. Get USDA nutrition database
    * 12.2. Allow organizers to register new potlatch
    * 12.3. Allow organizers to send out invitations
    * 12.4. Allow users to specify what they'll bring
    * 12.5. Allow users to see what is still required
    * 12.6. Show balance
    * 12.7. Use NUT as your central data source


  * 13. FaeryBriar (interlinked page builder)

    * 13.1. Dependency: Twilight
    * 13.2. Look up that IBM documentation on Web Application Organization
    * 13.3. Allow users to draw pages, recognize page gestures, and link
    * 13.4. Allow users to see prototype pages with content.


  * 14. Butterfly Effect (analysis plug-in)

    * 14.1. Diassesmble analytics
    * 14.2. Provide your own variant
    * 14.3. Provide a dashboard
    * 14.4. Empower that dashboard with WS


  * 15. Gapfill (relational spreadsheets, like Airtable)

    * 15.1. Dependency: Twilight
    * 15.2. Figure out database schema for relational show
    * 15.3. API
    * 15.4. Metadata API (create or modify tables)
    * 15.5. Figure out front-end display
    * 15.6. Thematize (you know how to do this)
    * 15.7. Provide client-side completion of actions
    * 15.8. Widget types:

      * 15.8.1. Link
      * 15.8.2. Text
      * 15.8.3. Rich Textbox
      * 15.8.4. Attachment(s)
      * 15.8.5. Checkbox
      * 15.8.6. Single select
      * 15.8.7. Web clipping
      * 15.8.8. Multi Select
      * 15.8.9. Date, Time, Datetime
      * 15.8.10. Phone Number (I18N!)
      * 15.8.11. Email
      * 15.8.12. URL
      * 15.8.13. Number
      * 15.8.14. Integer
      * 15.8.15. Currency
      * 15.8.16. Percent
      * 15.8.17. Function
      * 15.8.18. Select / Multiselect (records from remote table)
      * 15.8.19. Length (Number of records in table.column)
      * 15.8.20. Summary (Aggregates of linked records, like SUM(prices))
      * 15.8.21. Function support:




  * 16. NeedToKnow (card-based everything API, like Relevant)

    * 16.1. APIs for collecting data
    * 16.2. API to API map mechanism, safe for outsiders to use
    * 16.3. API read/describe/transform/republish
    * 16.4. Card Representations
    * 16.5. Data gathering for later display
    * 16.6. RSS Reader?


  * 17. TODO/Notebook (Wunderlist/Evernote/Trello(?))

    * 17.1. API

      * 17.1.1. API Overview
      * 17.1.2. Concepts
      * 17.1.3. Authorization
      * 17.1.4. Formats
      * 17.1.5. Revisions
      * 17.1.6. Endpoints
      * 17.1.7. Avatar
      * 17.1.8. File
      * 17.1.9. File preview
      * 17.1.10. Folder
      * 17.1.11. List
      * 17.1.12. Membership
      * 17.1.13. Note
      * 17.1.14. Positions
      * 17.1.15. Reminder
      * 17.1.16. Subtask
      * 17.1.17. Task
      * 17.1.18. Task comment
      * 17.1.19. Upload
      * 17.1.20. User
      * 17.1.21. Webhooks
      * 17.1.22. Tools


    * 17.2. Features:

      * 17.2.1. Folders: Group all related lists in one easily accessible Folder.
      * 17.2.2. Comments: Host all your communication in one place, accessible for all.
      * 17.2.3. Share lists: Share your lists with colleagues, friends and family.
      * 17.2.4. All your devices: Free on iPhone, iPad, Android, Mac, Windows and the Web.
      * 17.2.5. Reminders: Add a Reminder to make sure no to-do is forgotten.
      * 17.2.6. Due Dates: Set Due Dates so that no deadline is missed.
      * 17.2.7. Notes: Add Notes to make sure all your ideas are captured.
      * 17.2.8. Notifications: Updates via push, email and in-app notifications.
      * 17.2.9. Mail To Item: Send mail to your server, see it become an action item
      * 17.2.10. Web Clip: Add anything from the web straight to your Wunderlist.
      * 17.2.11. Tags: Use hashtags to add more context to your to-dos.
      * 17.2.12. Print: Print your to-dos and lists with just one click.




  * 18. Chainkeeper

    * 18.1. Jerry Seinfeld's consistent (but not necessarily weekly) "don't break the chain" app


  * 19. Paperchase

    * 19.1. NNTP Protocol
    * 19.2. Database
    * 19.3. Database abstraction
    * 19.4. Database-to-schema.NNTP translation layer
    * 19.5. Front-end
    * 19.6. WebUI


  * 20. French Press

    * 20.1. Database schema resembles Wordpress's, for easy upgrade
    * 20.2. Front-end resembles Ghost or Medium


  * 21. Simplestory

    * 21.1. Adding Scrivener features to Narrator
    * 21.2. Plus plotline engine
    * 21.3. NLP discovery of characters and locations


  * 22. Ptah

    * 22.1. A kanban display


  * 23. Omnipotence

    * 23.1. A wunderkit clone


  * 24. Meadowtation

    * 24.1. A Stoic's version of Mindbloom


  * 25. Seamcarve

    * 25.1. A seam carving addition to PNM (needed?)


  * 26. Defender: A game engine
  * 27. Comic Opera…
  * 28. Abysss…

    * 28.1. README: An in-the-browser editor like Medium or ZenWrite.
    * 28.2. BUY/BUILD decision


  * 29. Spine Reader: A client/server model of an RSS reader
  * 30. Flavor / Tumble Integration
  * 31. DITA / Gamification Integration
  * 32. Ogre / GEV / Rivets Clone