2021 February 21
All ideas and projects on my mind
I wrote a c++ stock market trading framework. I'm currently writing nodejs bindings to interface with the c++ code. The bindings will allow me to write an apollo server layer to query the js bindings from the browser. This is a multi-year project in the making. The plan is to release a first version in the next few months.
Ship early, ship often
I try to remind myself: ugly code that ships is more useful than that elusive "perfect design" with clean code. There's no such thing as the perfect abstraction. So just write code.
Why build it?
Why not use an existing solution? Partly to scratch my own itch but also, the other solutions weren’t a joy to work with. I’m hoping I can inspire future algo traders with a library that's actually fun to use. I want to abstract away the boring parts like data storage, data providers, live trading with interactive brokers, charting, horizontally scaling backtests in the cloud. The only thing users need to worry about is the strategy and money management logic. Providing an easy to use javascript library will be the key in making this lib a joy to work with.
Documentation that makes you want to go wow I want to use this!
All software has a learning curve. My aim is to reduce it by teaching as much as possible via high quality api documentation, tutorials and examples.
A prime example of good documentation is vuejs. The onboarding process is quick and all tutorials have real examples and snippets that can be pasted into your own project. It makes it a joy to work with. There's value in making a tool nice to work with. I'll be looking to emulate a similar experience with my library.
A plant-based food-tracking app, without the food tracking. If you need something that logs food entries, this isn't for you. Use a traditional food tracker instead.
No one likes tracking food. It's so tedious and boring. It's annoying trying to calculate portions for a big meal (recipes can help capture common food combinations I guess). You always feel like you're playing catchup.
Tracking food should use a proactive approach. For example, a nice way would be to choose food and recipes from a curated list and the app takes care of the rest (grocery list, cooking plan, amounts based on calories, etc..)
Workflow
The workflow for this tool looks as follows:
Collections of food
Expanding on 7. You can create some very interesting collections of foods that still fulfill the calorie and macro requirements of a user. Let's say I really like peas. I decide that eating 5 cans of peas a day is the type of life I want to live. I could create a 3 day collection with peas as the focal ingredient. And other foods fill in the gaps for micro nutrient requirements. The tool will make suggestions to fill those gaps in.
Reducing food tracking fatigue
My thinking is, calorie counting isn't supposed to be done all year round. It's not sustainable. You end up burning out or always feeling like you're behind. Eating should be intuitive. This app only tries to train that intuition, not replace it. It also tries to automate the boring parts of cooking.
App Internals
Here's some of the internals for this app:
Easy food database management
The nice part here is because this is a plant-based website, I don't need to care about keeping my food database up to date with commercial products. A potato will always be a potato.
Existing solutions
eatthis kind of does all this but I want this to focus on exclusively vegan food (and whole-food plant based when possible) and a curated approach to building recipes. The whole week's recipes and meals should follow a cohesive plan. eatthis randomly generates meals that fulfill the calorie requirements but they kind of forgot that humans don't want to eat "protein powder with water" for breakfast.
Tagging system
Can also add a tagging system to the collections and recipes. Like: Under X-mins prep, or tools required (blender, instant pot etc...)
I recently started rowing with a Concept 2 rower (PM5) which has a bluetooth interface. The rower can stream real-time metrics with this interface.
I looked around and didn't find any native tvOS apps taking advantage of this. How I envision this working is connecting the Concept 2 to the Apple TV via bluetooth and streaming rowing metrics to the screen. I'll start with that for v0.1 and go from there. Maybe v0.2 streams content to the screen. I have some ideas for streams. The app could stream classes or cool stuff like what Zwyft does.
I did a brainstorming session to create a first plan on how I'll build this thing. Take a look here
Files will have a .gue extension.
The idea is to create a different kind of web, where instead of the main language being html + js + css it’s actually go + vue + some subset of css = gue. A very ugly name and I love it.
Under the hood it would be an executable, just like Chrome, that users download to their PC and run like a browser.
html and javascript are the defacto languages of the web for traditional web browsers. It would work the same as Chrome. Instead of html and js, it's html + go. You request google.com in the same way but the underlying technology uses html + go.
The payload you receive is this vue-style single-file template where the contents of the template are written in html and the script is written in go! I chose go because it compiles quickly. I wouldn't be writing an interpreter, it will actually compile the file, then run it as a sub process and communicate with the drawing thread via socket/port.
I'd use a library like https://github.com/hashicorp/go-plugin. The main drawing would communicate with the user's website via this library (it abstracts the process-process communication and allows you to communicate with the main drawing thread from the sub-process as if you were in the same process. Cool!)
I'd need to look into security. Probably by whitelisting which imports
are allowed. Basically, make sure the executable can't be compiled to do something malicious to the user's computer.
Even better is if you did a good job separating concerns, you could write go gui apps too with this thing since the browser will need to implement a drawing lib. At the end of all this, you’d get to write apps in this beautiful vue-style and get native speeds via compiled code.
The software stack could look like this:
import gue
and get started right awaygue
cli to compile apps: gue compile, gue dev, etc...What a .gue file could look like:
<template>
<div class="container">
{{hello}}
</div>
<button @click="onClick">
World
</button>
</template>
<script lang="go"></script>
<style>
// css? sass? scss? custom styling lang?
</style>
Remake of the greatest massively multiplayer game of all time, Subspace/Continuum. I joined a game-off on itch.io in October to motivate me to actually work on this. I managed to get something up and running with Matter.js for the canvas and physics, and WebRTC for the game packets. I haven't had time to reach a fully functional game and user system but the plan is:
I'm starting to realize writing publicly is the best way to flesh out new ideas. I get quicker clarity on a topic when I write things down in a way that is consumable by an audience. Once I start writing, it becomes obvious what I don't know. It usually leads to learning something new, or changing a previous misconception on a topic.
Even better, writing is such a good way to exchange ideas with others. I get the occasional email from readers or users of code and apps I wrote. I like to speak with others and see their perspective. In fact, email me your thoughts, any! Email is in the footer of every page on this site.
This is more an idea than a project that can be executed. I want to explore the idea: what if everything was done on a command line. Is it a better world without Excel, rich GUIs, and code bloat? Can all GUI patterns be solved with a command line tool or terminal UI? These are questions I’d love to dive deep into. My current biases tell me no. We love visually pleasing interfaces. We like flashy things. Can a terminal UI provide the same thing without a visual framework like Material Design? I’ll be expanding on some of these ideas for a blog post:
I've accumulated a big list of things that make the current web annoying.