I’m on vacation for the next two weeks, which is lucky. I am very tired.
I’ve been dropping the ball on talking to friends & family, on getting exercise, and on doing anything that isn’t staring at my growing to-do list, so I’m going to take the next while to build back up the energy and happiness that I feel like has been draining away. I cleaned my apartment this morning, which felt like a good start :)
Today (Monday) is a day off, though I’m in the critical path for a launch this week at work, so I might trade the day off - work today, and take another random day off some time in the future.
Recently, I got a power-over-ethernet hat for the Pi-hole I run on my home network. This has spurred a whole lot of home networking improvements, and I’m finally switching my NAS’ remote backup location from AWS Glacier (obtuse pricing, slow to actually see what’s backed up, my AWS account is doing too many things) to Backblaze B2, which seems good so far.
I’m continuing to stream Stork development on Twitch every once in a while, slowly trying to get better at smoothly communicating the code I’m writing. I had a three-day streak of waking up early and streaming for an hour before work that I dropped, but I’m hoping to get back on the horse.
100% agree on Glacier. I can’t believe they actually sell it to anyone other than people who are already paying $$$ for more expensive storage tiers with them and figure it must be cheaper, so are ok with just switching and waiting to see what the cost savings is.
Actually figuring a price for some specific usage scenario seems like it would take more in the value of a person’s time to determine than would ever actually be saved compared to slightly more expensive but sane pricing models.
Yeah I mean Glacier was never really meant for consumer backups, it’s strange to me that services like these even offer it. It’s really more meant for compliance reasons or to have an “oh shit” backup for very valuable information, e.g. DigitalGlobes satellite images.
The only consumer use case I could maybe see is photo backup that’s already stored elsewhere, not as the main copy. The pricing was simplified a few years ago, but it’s still not as straightforward as S3 mostly due to economics
Congratulations on the 1.0 release. ✨
Thank you! :)
Does anyone know how Stork compares to the superficially similar tinysearch?
Tinysearch is great! Matthias and I have chatted a few times since releasing our respective projects, and his work is really cool.
He leans into the algorithmic aspect of search: his project implements a bloom filter, which means the index size is smaller, but means that Tinysearch can’t easily implement excerpt previews and prefix searches (“term” -> “terminal”) like Stork can. He also built Tinysearch for people who were more willing to set up a WASM blob in their own site, whereas Stork tries to abstract away the WASM-loading aspect for people who don’t necessarily want to deal with that.
Thank you for explaining! After searching with both, I find that Stork’s additional features like excerpt previews are crucial for usability, so between the two I would only consider Stork for production sites at this time. I’ll probably tinker with Tinysearch for funsies though :)
Brainstorming as I plan my 2021. I’m bought in on the idea of sticking with a yearly theme and I’ve gotten to the part of my year where I think of a new one.
Advent of Code in Rust. This is my first year actually participating but my ~third year knowing about it, and it’s not as scary as I originally thought (he said, naïvely, on day seven)
I have taken it upon myself to wire my parents’ house with ethernet so I’m doing some Youtube-based research to figure out how to open up their walls without making them overly upset.
My team in a planning phase at work and I’m learning how to be a good eng citizen while the EMs and PMs do the bulk of the actual planning. Any advice on that is welcome!
I took a vacation at the end of last week, so I’m feeling a bit re-energized. Got some good photos while I was out hiking, and I’m excited to go through and edit them all :)
Work has me starting on a new project with a new group of people, which I’m excited about! I’m taking the opportunity to propose a refactor to the code base that I’ll be working on (it really needs it!) Hopefully I can get rid of that one class that everyone dreads looking at the wrong way.
There’s never enough time in the day, it seems. I have some big plans for a WASM/Rust side project I’ve been working on, and progress is consistent but slow. I’m getting closer and closer to a milestone, and I just want to sit down for an unhealthy amount of time and finish everything. Can’t do that, though!
I’ve been taking piano lessons since Quarantine started and I’m about to finish the book I’m working through!
This is a great piece, thanks for writing & sharing!
Python is one of those languages that I write infrequently enough that I don’t have an “innate” sense of what it means to write idiomatic Python code, whereas I do have that sense for other languages. That usually means for me that my Python scripts end up looking like the language I’ve been using most recently, and I’ve come across Python files I’ve written that feel like I’m reading Node, Swift, or even Rust in a strange dialect.
One way to get better at writing idiomatic code would be to read articles like this one, compile all the individual tips, and reference those tips when writing new Python. It seems to me like a more sticky way to get better at writing idiomatic Python code would be to read idiomatic Python code, but whenever I sit myself down to read code I don’t have any stake in, I feel like it’s a waste of my time.
Do other people incorporate “reading code” into their process? How?
For me the “reading code” comes from the need to use big libraries extensively and understanding their inner workings. For example, I often have to dig into libs like requests or flask. So, I think you start reading more code as you use the language more.
Working on a full-stack feature at work. Finished the backend bits early today (well, really late Friday, but I’d have been terrified to deploy late Friday) and starting on the frontend bits today. It’s my first time working on an end-to-end feature within my org like this and it’s really cool having the opportunity to do so!
I’ve been working on Stork’s input handling. The program (ultra-fast WASM search plugin for static sites) really only deals in plain text files right now, but I’m working on parsing different file types, starting with HTML, Markdown, and files with arbitrary Frontmatter blocks. I haven’t really touched Stork in a bit and it’s exciting to get back to it.
I’m taking piano lessons again for the first time in almost 10 years. I’m working on getting better at reading sight music, which was always somehow a skill I managed to avoid learning. It’s much more exhausting to play piano for 30 minutes than I expected – definitely feels like I’m exercising a new muscle.
My wife and I picked up some houseplants that a neighbour was giving away. We’re repotting them as the roots are overgrown and escaping out the bottom. We’ll need to cut the pots in a few cases.
I’m also trying to keep up with the pace of writing one article per week.
What are you finding is the hardest part of writing an article each week?
The hardest part is probably coming up with an idea that I believe in.
I often come up with the title first. I try to think of something that I would click on 100% of the time — basically, writing what I want to read.
Sometimes, I like writing articles for one person. If someone asks me a hard question, or if I’m mentoring someone who is building something, then I can write as if it’s a letter to that person on how to overcome their current obstacle.
Continuing work on stork. I’ve rewritten the system that weights each search result; hopefully this weekend I’ll be able to look at each word in a search query and weight results based on how many words in the query a given result matches. I’m looking a lot at Rules for Autocomplete (2019) to have a sense of what I’m building towards.
Continuing to quarantine. Work got busy all of a sudden. Watching Little Fires Everywhere on Hulu and remembering how much I liked the book.
The stork link seems to not work for me…?
Yup, I messed up the url of my own project. I meant to write
(Although while I’m here, I should mention that I finished the new highlighting and sorting features I was hoping to get done!)
I would be interested to see a comparison to the performance of other in-browser search index schemes, like lunr.js, flexsearch, fuse.js
(@jil you might want to check your homepage design in WebKit browsers - on my iPhone 10 a lot of text was off the edge of the screen with no way to fix it!)
Same on Firefox Preview (Android)
Oh no! Thanks for letting me know. I had fixed a layout bug everywhere else… and must have accidentally borked things on mobile.
CSS is frustrating sometimes.
Coming in kinda late, but just fixed the text on the site. Thanks again for alerting me.
How does Stork compare to tinysearch, which was posted here recently? https://endler.dev/2019/tinysearch/
Tinysearch is great! I was chatting with Matthias briefly after I realized we had been working on something similar. He put a lot more work into the data structure, doing some really cool work implementing a bloom filter to get the index size down. I focused on ease of integration, making it a fully hosted library. Eventually I want to borrow some of Matthias’ ideas for Stork!
Coincidentally, I did this to my blog yesterday – here’s the dark mode logic.
Ah nice, thanks for this! I’ve been thinking about implementing something like this also. This will save me some time. :-)
It’s a Jekyll site hosted on Netlify. Soon it’ll be a Nuxt site hosted on Netlify. I feel like everyone found this out a while ago but I’m shocked by how natural it feels to write a site using a component-based architecture – now the default CSS paradigm of having a single, flat, global namespace feels so awkward.
I really expected Notion to show up in one of these responses. Maybe it’s not quite the thing for the Lobsters crowd, but it seems to fit exactly this role: it apparently can set you up with a personal wiki, daily journaling, and project management stuff really well. I haven’t used it myself, but I keep hearing that it’s pretty good – I’m just kind of afraid of the total buy-in it seems to require.
I’ve tried Notion before. Although I like the tool and constantly hear about it from others, I think it suffers the longevity problem (checkout the longevity statement from standard notes). Last i checked sync to a google drive or dropbox is missing, and their export to markdown is super basic at the moment with a lot of issues.
For sure. That was part of my thinking when I was trying out Notion too – I have to take the time to set it up, and then I have to truly believe that it’ll be the right thing for me long-term. Evernote’s slow demise has sort of eroded my trust in proprietary brain-dump tools.
longevity statement from standard notes
longevity statement from standard notes
Here’s the link for anyone who, like me, hadn’t heard of this before.
I do this too. I ran git init in my home folder at some point.
I have the star at the top of my gitignore, but I’ve also forced certain files to be tracked like this:
<and then like 12 more files or directories>
There are some downsides to having your home directory being a git repository; namely, my bash prompt, which shows git status, always defaults to my home directory if I’m not in a different repo. Every once in a while I end up running git commands on a directory that isn’t itself a git repository, so I end up accidentally performing that action on my home directory instead. Oops.
I did a git clean once too often on my home directory, so I decided to wrap git in a function that checks for the existence of a .git-noclean – if this file exists, then the clean command is ignored.
This is a cool idea. Is the exact wrapper published somewhere?
Nope, but here’s the function (in fish shell syntax):
# hub, also, put a belt-n-suspenders thing over our git-clean
# susceptible homedir
if test $argv = "clean"
set git_base (git rev-parse --show-toplevel)
set ignore_file $git_base/.git-noclean
if test -f $ignore_file
echo "JFB: cannot clean $git_base (ignore file exists)"
I recently finished and set up project that reminds me about saved Pinboard links with exponential backoff: link. Inspired by a talk by Andy Matuschak I saw recently where he talked about how he gets a lot out of journaling prompts that come up with a similar cadence, and how that helps him build up a library of his ideas around a topic.
I’m also working on a web search interface and indexer built with Rust and WebAssembly: link. It’s built for static sites with lots of different pages, and the idea is that the indexer precomputes a search index at the site’s build time, then the WASM part can search through that index really really quickly. This is a project I hope to capital-p-Publicize, and I’m hoping I can spend some time this week to polish it off beforehand!
Work is lots of docs cleanup and small bug fixes, etc.
love chunkwm! been using it for about 8 months now.
if you want to have focus follows mouse with autoraise, like x windows, use chunkwm in float mode. voila! beautiful, even if you don’t care about tiling window managers.
Does it work well with multiple monitors? I was exploring Phoenix recently and I don’t think there was a way to move a window from one monitor to another.
it does! here’s my .skhdrc key bindings for moving windows around to monitors:
shift + alt - 1 : chunkc tiling::window --send-to-desktop 1
shift + alt - 2 : chunkc tiling::window --send-to-desktop 2
shift + alt - 3 : chunkc tiling::window --send-to-desktop 3
shift + alt - 4 : chunkc tiling::window --send-to-desktop 4
shift + alt - 5 : chunkc tiling::window --send-to-desktop 5
shift + alt - 6 : chunkc tiling::window --send-to-desktop 6
Jeffrey Way, a major contributor to the Laravel community, has been tweeting about this lately. I think his overarching point is that when we spend too much time thinking about how to write a perfect unit test for a given piece of code and not a perfect test overall, we get trapped in thinking about the specific boundaries between unit/functional/integration and not thinking about how best to test the code we write.