My meaningful achievements this month:
- Published
8
blog articles so far,4
(including this one) are partially done,1
planned but started yet,1
on hold.
- I could have done
14
at EOM if I maximally prioritized this, but that is unlikely. - I'm getting faster at making demo videos.
- The hardest one was Emacs Guide for PHP Development in 2025 and Beyond as it was pretty long, and I also recorded gifs and videos.
- It is also the most comprehensive Emacs for PHP Development guide I've seen. I read through a few long time PHP hacker's blogs who also used emacs.
- Technically started the article back in Dec, but at the time, I did not get
dape
working through a docker container. Earlier this month I did, letting me complete it!
- It is also the most comprehensive Emacs for PHP Development guide I've seen. I read through a few long time PHP hacker's blogs who also used emacs.
- I could have done
- Got dape working to debug php code through a container for my nonprofit work!
- Shipped 3 audio/sfx related libraries: snd-selectric-mode, sndd.el, hella-sounds.el
snd-selectric-mode
is a remix ofselectric-mode
. Writing it gave me the groundwork to drive snd from emacs.sndd.el
generalizes driving ofsnd
, for any emacs client. I wanted to use sndd.el for other projects.hella-sounds.el
abstracts the emacs advice mechanism as a declarative datastructure and wraps calls tosndd.el
. In the future, hella-sounds should support other ways to drive audio.- I wrote so much lisp for just these three projects. I debugged a lot.
- I didn't have enough time to do creative writing pieces in each readme.
- Shipped a website where requests are served by emacs: leetcode-archive
You can search for what the daily leetcode problem was for a given day.Technically I started this project in December, then left it off because debugging was really hard. I had to fight to make this project come alive. Oh and, because I'm on free tier, when you visit it likely will spin up cold, and take ~ 50 seconds to serve you the first request, but after it should be quick. Until it gets cold again.
Milestones:
- I used
el-node
, and started with basic serving of requests. I later added graphql libs andesxml
so I could do html templating in emacs. (el-node has a way to do html templating, but I didn't want to figure out if it was broken. Plusesxml
has more usage.) - Elnode is ~ 2010 years old. Some of its documentation is wrong. I had to struggle to realize it wasn't accepting requests on
0.0.0.0
. - I containerized emacs, and got emacs to run as an
fg-daemon
, so docker wouldn't quit out. This was the first major struggle.
- Why did I do this? Because I couldn't find any cloud platforms that would let me ship an emacs app for free.
- "emacs app" aren't really two words you see together much eh?
- But I did find render.io, which lets me ship docker containers for free.
- "emacs app" aren't really two words you see together much eh?
- Cloudflare, despite rescinding an offer that would have changed my life, would have been my first choice still. I wonder if it would be possible, since they technically support C right?
- Why did I do this? Because I couldn't find any cloud platforms that would let me ship an emacs app for free.
- Debugged through all the broken web requests happening for some reason when building the container. I had serious intermittent connectivity issues. Sometimes downloading an emacs package would fail.
- I couldn't connect an emacsclient to the unix socket through the container. I gave up, and this was a wise move. I could try a TCP connection next.
- I got comfortable with SQLite. It was either that or PostgreSQL. SQLite was easier because I make no money and can colocate the db more easily in the container with less moving parts.
- I hydrated the DB with all the records I could find. Leetcode doesn't list problems earlier than 2020-04-01, using the endpoint
dailyCodingChallengeV2(year: $year, month: $month)
. - I implemented features for data consistency.
- auto-backfill on startup for the app, so if startup succeeds, the data should be correct.
- implemented a timer to fetch the new daily problem. This was surprisingly easy. But then I also needed to make inserts idempotent. (Why did sqlite diverge in syntax from other DBs for upserts?)
- auto-backfill on startup for the app, so if startup succeeds, the data should be correct.
- Implemented cursor based pagination!
- Do you know what it takes to implement this at the backend application level for arbitrary sort keys and directions? I'm proud of this.
- I read through a blog post to help me: https://brunoscheufler.com/blog/2022-01-01-paginating-large-ordered-datasets-with-cursor-based-pagination
- I used recursion to build up the SQL query.
- I read through a blog post to help me: https://brunoscheufler.com/blog/2022-01-01-paginating-large-ordered-datasets-with-cursor-based-pagination
- Now I need to clean up the code, make the repo readme better, and make it visually prettier.
- I used
- Did more work for nonprofits, one as a software engineer, another as an IT Admin.
- I'm working on a critical bug right now.
- I'm working on a critical bug right now.
- Still doing daily Duolingo
- I massively scaled back my goal of 1 unit / day. But I think it's worth it to have more time doing projects and watch less ads.
- I massively scaled back my goal of 1 unit / day. But I think it's worth it to have more time doing projects and watch less ads.
- Still putting time into doing a daily leetcode problem
- but I do wish now that I was doing something else. I'm really close to a 365 day streak.
- but I do wish now that I was doing something else. I'm really close to a 365 day streak.
Meaningful losses:
- When I have heart pain I have to slow down. I'm completely sure why, but I have sense it might be air quality.
- Continued problems from unemployment.
- Egg shortage / avian flu. I do not buy eggs because of cost now. Hope those chickens get better.
- Haven't done creative writing.
- Haven't made new relationships. Next month will be similar.
What I'm grateful for:
- I'm still lucid. My implementation and speed of execution remain strong, despite declining health.
- Ability and time to focus. So much of life is how we aim our attention. (But doing it against the backdrop of pain is hard.)
- I try at things, even when it's hard. Even when I start a morning and feel frustrated when implementing/understanding has roadblocks, or I don't have the progress I'm looking for. I'm able to come back. Org mode helps me in this because I record what's going on and it's easy to re-reference what I was looking at.
- Costco. I've been eating well ever since a friend brought me to costco. I bought peanut butter, sliced bread, jam, a cheese pizza, oatmeal, sweet potatoes, fresh-baked bread.
- Nights where I can sleep, unhaunted.
- Leftovers from other people.
- Moments where I am not in pain, I feel like freedom is possible. Maybe that is freedom, the very hope of it.
- Local public library reopening soon.
- My friend for letting me stay with him.
Looking ahead:
- Hopefully, I have to start learning + shipping emacs' first state-charts library.
- It's a pattern from video game programming.
- I want to colorize my cursor more reliably based on state. Managing a ton of state is hard. State charts is like using a finite state machine pattern, but more powerful and flexible.
- It's a pattern from video game programming.
- Suffering.
- I want to get to "done" for my custom font,
synentica
. I made it in 4020? 4021? It's unfinished but it's used in the /about page of this blog. I'll have to fire up inkscape and remember what my workflow was again. Not sure if that's slated for February. I don't know where I'll be in March. - More work for nonprofits.
- I really don't like using social media to promote myself but I think I have to. Sigh.
- Trying to put more links for patreon/buymeacoffee/liberapay.
- Another round of job apps.