~jakintosh/index

Welcome

This website is the personal knowledge base of @jakintosh. It is a collection of thinking, writing, work, and reflection. The goal is to communicate both knowledge and process, and so every page is composed of both a garden and a stream.

The Garden is the manicured, pruned, and always evolving "living document" for a given topic or project. The garden captures the current state of my knowledge, and is the primary content at the top of each page.

The Stream contains a reverse chronological action log that shows what has happened to get the garden to its current state. The stream captures the historical process of knowledge on the site, and can be found at the bottom of every page.

Highlighted Pages

Recently Updated Pages

Recent Stream Updates

September 25, 2023

/stream /bicycle /repair /rad-runner

Last night I went to install a front rack on the /RadRunner Plus and had to reroute my front brake cable. By taking it out, it loosened a frayed part of the cable which then got jammed inside the cable housing, rendering the brake useless. I had never replaced a brake cable before, but a quick search told me it should be pretty straightforward. Today I was able to get a replacement cable from a local bike shop for $3 and swap it out in about 5 minutes.

The special notes were that brake cables are pretty standardized but are different than shifting cables, and that you have to match the "head" of the new brake cable with the one used in the brake lever. I was able to remove (and replace) my cable from the brake lever without tools by just aligning the slots in the barrel adjusters and pulling the cable through. I reused the existing rigid cable housing, and threaded the new cable through it. I was also able to re-use the cable-end cap from the old brake cable by sliding it off with needle-nose pliers, and then crimping it back onto the new cable. Finally, I used those same pliers to cut the new cable to length.

September 15, 2023

/stream /technology /permacomputing /repair /macbook-pro-2006

After coming to the conclusion that GRUB2 was the only way to boot, my only remaining option to get the GPU working on /MacBook Pro (2006) was to go through the process of extracting the firmware from a BIOS boot, and then patching the radeon kernel module to manually load that firmware from a file. I tried for a long time to make a BIOS-bootable USB drive of an old Ubuntu 10 live CD, but the computer refused to boot from it. From what others had written online, it seemed like booting from a DVD was the easiest path forward, so I hunted down a blank DVD and burned that 32bit Ubuntu 10 image to it.

Unfortunately, when trying to boot from the DVD I came to the conclusion that the DVD drive was broken. My /MacBook (2007) easily booted from the DVD, but the /MacBook Pro (2006) did not. My solution: open up both machines, hook up the working drive from the MacBook to the MacBook Pro, boot into Ubuntu and extract the firmware, and put everything back together. To make a long story short: it worked, miraculously. After a long morning of open-heart surgery, I still had two working laptops and a "vbios.bin" file that would be the key to a working GPU.

I spent a little time after the firmware extraction looking into patching the kernel, but didn't make it too far.

September 8, 2023

/stream /technology /permacomputing /repair /macbook-pro-2006

After a bit of a break, I came back to the project of getting the /MacBook Pro (2006) GPU functional in arch linux again. With the time away, I'd had more time to think about what the problem was, and to come up with new approaches. Essentially, I understood that the GPU driver needed to be able to see the GPU firmware, which was only exposed during certain boot conditions. I came to the conclusion that if I could boot directly into an EFISTUB that the firmware would be visible, and so I made it my goal to try and do that.

Unfortunately, the main problem with this machine is that it has two oddities with its EFI: it uses 32bit EFI hardware to boot into a 64bit CPU, and it is also an Apple-specific EFI 1.10 implementation and not a modern UEFI standard implementation. I think I ended up believing that there have been advances in both the linux kernel and also things like systemd-boot that would have overcome the 32bit -> 64bit mismatch, but I kept running into boot errors anyway. My final takeaway is that it was the custom EFI 1.10 implementation that was breaking the boot process due to missing hooks. If you're reading this in the future, I don't think that this machine will ever get any better boot options due to its proprietary and opaque EFI 1.10 implementation, unless someone takes the time to reverse-engineer Apple's implementation.

This means that I'm left relying on GRUB2 and its EFI Handover Protocol method of booting "mixed-mode" on this particular hardware. I also discovered that newer versions of GRUB2 (starting at r566 I believe) have issues with this boot mode, so I ended up pinning grub to an older version (2.04) in pacman and now booting works every time. By adding "reboot=pci" to the kernel parameters, rebooting also works every time, and the laptop never has any strange boot issues. All that's left now is to figure out how to get the GPU firmware loaded manually.

September 5, 2023

/stream /now

The summer has been incredibly busy. My /livable city advocacy group has had a lot of both engagement and disengagement, with city initiatives asking for our input and members being generally unavailable due to summer holidays. It continues to be a difficult line to walk as a volunteer based organization, where nobody is getting paid but success requires people to keep showing up.

Over the course of August, my partner and I stumbled into an opportunity to take over a large commercial space in the center of our Downtown as part of a collective of artists. There is huge potential for the space to be a much needed non-commercial hub of arts and activism, but organizing a bunch of strangers into creating a financially solvent space in such a short time frame is also a difficult task. We're hoping to establish a legal Co-op, and we'll see how it plays out.

Progress on the /coalescent computer moves in small bursts, though my time is increasingly dedicated to scheduling meetings and running agendas for volunteer and activist groups. It's hard to get a concrete feeling of forward movement, but it does generally feel like things are happening. I'd be lying if I didn't mention how frequently I wonder if I shouldn't move out to the country and focus my time on /farming, land stewardship, writing about /philosophy, and /programming, but that feels like giving up and running away.

Finally, we are not in imminent financial danger, but our lack of household income is becoming increasingly difficult to ignore. I have been hoping to serendipitously find a way to generate a bare minimum of income while working on all of these projects towards a better world, but it doesn't seem to be happening. It's frustrating to feel like I need to pause one or more of my many important initiatives so that I can extract money from the economy, but sooner or later something is going to have to give.

I'll try to post smaller and more frequent updates in the future.

September 3, 2023

/stream /collapse /complex-systems

Spent a big chunk of time today writing out my thoughts on /collapse, descent, and contingency, spurred by a couple of posts I saw floating around Merveilles today. While there's a lot written out here now, I'm thinking about how I can better explain some of the intuitions I've developed around the nature of life and complex systems. I have so many long posts written out and unpublished on my philosophical explorations into metaphysics, abstractions, /complex systems, and so on, and I should really get them out into the world in some form.

September 2, 2023

/stream /colophon /programming /linux

After spending a few hours this week trying to build a CLI that replaces my jnl shell-alias tool and allowed it to publish my website, I spent a few more hours today really thinking about the difference between a shell script and a program binary, and if I wasn't creating unecessary complications. This project of porting a shell script to a Rust binary taught me a lot of things about the nature of the shell as a computing environment, and pushed me to try to keep these tools as shell scripts for now.

I ultimately don't feel like the scripts I have now are the best version of this tool, but I also don't think that the compiled binary I was building was any better... and it was going to take an order of magnitude longer. I'm going to sit in the discomfort of these unfinished tools for a while as I continue to shape the /coalescent computer environment, and at least enjoy the fact that it's much faster to add entries to my website logs now.

August 23, 2023

/stream /repair /bicycle /fixie

After riding around town on my new /Fixie for the last week, I got tired of the seized rear brake and was itching to try and repair it. From what I could tell, it seemed to be a Bridgestone "Self Centering" side pull rim-brake, or at least something that was attempting to look like one. I removed the brake and disassembled it, cleaning all of the parts with soapy water and then soaking everything in distilled white vinegar over night. Afterwards, I brushed the rust off with a toothbrush, reasssembled, lubricated the pivots, and everything was working well.

August 12, 2023

/stream /bicycle /fixie

Today I bought a new (to me) /bicycle. A few weeks ago I tried riding a friend of a friend's beater fixie, and immediately fell in love. Since then, I've been on the hunt for a small, beat-up old bike that I could turn into my own nimble little /Fixie, and today I found it.

It's a franken-bike with a seized rear brake, two different tires on two different wheels, and a spray paint job that looks like it was done by a teenager about 10 years ago. Most importantly, it's ridable and has a flip-flop rear hub with a single-speed freewheel and the fixed cog I was looking for. It needs a lot of work, but I'm excited to dive in.

July 20, 2023

/stream /reading /mutual-aid /mutual-aid-spade

Finished reading Mutual Aid by Dean Spade. The last chapter was two thirds of the book, and full of specific plans and examples for how to deal with common issues in mutual aid groups. I found it quite helpful in framing my thinking about the real-world bumpy patches I encounter in my activism and movement building, and I'll be reflecting on it for a while I think. I'll continue reviewing my highlights and notes, and put together a synthesis on the book to share with others, since I think it is a hugely important topic.

July 19, 2023

/stream /reading /mutual-aid /mutual-aid-spade

Continued reading through Mutual Aid by Dean Spade, from the second through the fourth chapters. He outlined the shortcomings of the charity model of nonprofits, the necessity of asking for the entire world, and some of the dangers and pitfalls of mutual aid projects. The second and third chapters maintained the punchiness of the first, but the fourth chapter (in the second "part" of the book) fell apart a little bit. Still useful information, but less refined and impactful.

/stream /mutual-aid /ollas-comunes

After discussing the Ollas Comunes paper with my friend who linked me to it and then sleeping on my notes, I came back this morning and wrote a clearer synthesis on the topic. The notion of co-production stood out to me much more today, especially in the context of the other conversations I've been having with friends around the /climate crisis and the recent catastrophic floods in Vermont.

July 18, 2023

/stream /reading /mutual-aid /mutual-aid-spade

In preparation for an upcoming book club, I read through the first chapter of Mutual Aid, by Dean Spade. In this chapter, Dean lays out the three elements of mutual aid centered around meeting survival needs, educating people why needs are not met, expanding solidarity, and active participation. Spade writes extremely clearly, and this book so far feels very impactful and concise.

/stream /reading /mutual-aid /ollas-comunes

Read Collective Infrastructures of Care after being linked to it by a friend from Peru, which was a great review and anlysis of some of the history of community kitchens in Lima. It was a great example of Mutual Aid in South America, and formally introduced me to a concept I had been thinking about called "Co-Production", where communites are directly involved in the decision making and design of their collective infrastructure. I read through the paper and took a lot of notes and highlights, and will come back later to finish a synthesis after sleeping on it a bit.

/stream /recipes

I've recently moved away from making bagels as my daily breakfast, and have been experimenting with a shift to pancakes. To make them a bit healthier, I'm expermenting with sourdough starter and whole wheat flour (and topping with home ground peanut butter instead of syrup), which should also have the benefit of staying "frothy" in the fridge for an extra day or two. The goal is to be able to prepare a batch of batter once every three days or so, pour it into the skillet for a round of pancakes in the morning, and put the batter back in the fridge. This morning was my first go at it, and fermenting the starter sponge in the fridge overnight worked well, though the recipe is a little too "wet", yielding flatter pancakes. Overall though, it seems promising.

July 17, 2023

/stream /recipes

With a ton of leftover scallions in the fridge from yesterday's blanched asparagus, I went looking for another recipe to use that up and found a few scallion oil noodle recipes that seemed easy and delicious. I ultimately ended up following J. Kenji Lopez-Alt's Scallion Oil Noodles recipe, and it was incredible. Easy, fast, vegan, and definitely in the "comfort food" category. The main component is the scallion oil itself, which is easy to batch and store in the fridge, making a bowl of hot, fresh noodles only take a few minutes once you've made the oil. This will definitely be sticking around in my weekly rotation, especially as a lunch.

July 16, 2023

/stream /recipes

Tried some new recipes today from a vegan chinese cookbook. One was a blanched asparagus topped with shreds of chili, ginger, and scallion, and the other was a basil-garlic tofu. Both of them were very quick to prepare, and had very few ingredients. I was honestly not expecting to like either of them, but was very surprised to have liked both of them quite a lot. I thought the textures would be hard for me, but I went back for seconds. I'm excited to try more out of this book, and I'm hopeful that I'll get some new ideas for preparing simple dishes that feature vegetables as the star ingredient.

July 15, 2023

/stream /bicycle /repair /rad-runner

Performed some light maintenance and repairs on my /RadRunner Plus. I have never done much bike maintenance, but I've been slowly adjusting the brake tension as the pads wore down over the last 18 months. Recently however, my small tweaks stopped making an impact and braking power has reduced, and I needed to actually learn what I was doing. Turns out there is an adjustment screw on the brake calipers that nudges the brake pads in or out, and I needed to nudge the pads closer to the disc a bit as it wore out. I removed and cleaned both calipers with a damp rag (avoiding the pads), made adjustments, and reattached them with the correct alignment by squeezing the brake cable while tightening. Braking power is back to 100%, and the slight rub and squeak I occasionally got is gone now too.

July 10, 2023

/stream /technology /programming

A few days ago I watched this video about the performance differences between stack machine VMs and register machine VMs (when running on a physical register machine). The takeaway was that due to pipelining, a stack machine VM runs slower since it is always reusing the top of the stack, and none of the work can be done in parallel. For example, the equation ( 1 + 2 ) * ( 3 + 4 ) on a stack machine could be 1 2 + 3 4 + *, but all 7 instructions have to be run sequentially; on a register machine ( 1 + 2 ) and ( 3 + 4 ) can be decoded and prepped at the same time, since there is no dependency on those calculations (only the '*' must wait).

This, for some reason, made something click about Interaction Nets, in a way that didn't resonate with me the first time I started reading about them. It might have just been because lambda-calculus feels so opaque to me and I didn't have a good visual model in my head, and that this concept of dependencies in calculations gave me that visual. From there, I revisited HVM's github and Devine's interaction net page (linked above), and found myself thinking about rewriting rules again too.

Either way, this all got me thinking about how you might be able to declare "dependencies" for calculations in a stack machine. Could you maybe "branch" a stack into parallel computations with different memory addresses? Could you use that for SIMD operations? Would this be a great way to increase real world performance, or would it make writing code unecessarily complex? Am I just reinventing an obvious idea from a part of computer science that I don't know about?

July 2, 2023

/stream /technology /programming /collect

Spent a good chunk of time today revamping a community website to add a blog, and part of that meant figuring out how to implement a "dynamic root path" for URLs. I had to make some changes to 'collect' for it to work, but I think it's more robust now: it should more fully be able to recurse through contexts looking for objects of a certain name (which in this case is the "root-override").

Adding this feature has made me feel a little bad about 'collect', since with only four months having passed it feels quite sloppy and difficult to reason about the source code. It's definitely not worth rewriting again any time soon, but it's worth keeping in mind as my web projects that rely on it continue to grow.

June 25, 2023

/stream /technology /linux /macbook-pro-2015

After running out of "time budget" to get /MacBook Pro (2006) up and running, I installed Arch Linux on my daily driver laptop, which is a /MacBook Pro (2015). Being somewhat recent, but not too new, the install was quick and painless and has had very few problems.

As I've been shifting my daily computing to Linux, one of the biggest gaps in my daily computer usage was a "stream of thought" note taking tool, which I usually use the Apple Notes.app for. I spent an hour trying to figure out how to write a zsh alias to create a "journal" command, and it turned out really well. `jrnl` creates a temp file, opens $EDITOR, then appends a timestamp and the contents to a file named with the date in the ~/.journal folder.

After that win, I also finally learned how to set up screenshots with the `scrot` tool, mapped it to an unused media key, and send them to ~/.screenshot.

Finally, I decided to learn how rsync works and set up a few more aliases for syncing the journals and screenshots to my home server; now I can replicate the files across all of my machines, and I'm one step closer to a personal "cloud". Most importantly, I can access screenshots on my phone, though I can't yet easily integrate my phone with my new "journal" set up.

June 12, 2023

/stream /technology /permacomputing /repair /macbook-pro-2006

After finally getting Arch installed, booting into it also had many challenges. I have not been able to get a consistent boot, and in fact have only been able to get all the way through to login once. Just like the /MacBook (2007), it frequently immediately hangs from grub on “Loading initial ramdisk”, but the success rate seems far lower than the MacBook. I’ll need to dig much deeper into the boot process to see if this isn’t fixable, but at the moment, /MacBook Pro (2006) does not have a usable linux partition. Hopefully I can get this sorted out, because these old machines are great, and having a reliable arch install would give these machines life for many more years to come.

June 11, 2023

/stream /technology /permacomputing /repair /macbook-pro-2006

Working through trying to completely restore this /MacBook Pro (2006) to a fresh copy of OS X Lion was hell. There was nowhere to download a disk image from, and the machine I was on was missing its Recovery HD partition. I jumped through so many different hoops trying to get figure out how to get things to clean install, but eventually I was able to generate a Lion Bootable USB, change the clock back to 2013, and then boot (and install) from the USB.

Unfortunately, the complete formatting of the drive and fresh install of OS X didn’t make the Arch install go any smoother. I had to mess with kernel parameters to get the arch iso USB to boot, and was eventually able to get the OS installed.

June 10, 2023

/stream /technology /permacomputing /repair /macbook-pro-2006

The last part for my /MacBook Pro (2006) came in today, which was the lower case. Unfortunately, while I’m sure it was a relatively “New OEM” part at one point, its years in storage left it a little bent in places, most notably the slot for the disc drive was collapsed. I looked through the internet and decided there were probably no more “new” parts like this easily purchasable online, and that this part was better than the one I had, so I did my best to bend it back in place and moved on with reassembly.

I never know if I’m doing a good job reapplying thermal paste, but otherwise reassembly went smoothly. My first attempt to boot failed, but it turned out to be from the RAM not being fully seated; I thought it was funny that after completely disassembling the entire laptop and transplanting it into a new case, the final step, and the only one that doesn’t require disassembly was the part that went wrong. After reseating the RAM, the computer booted normally into OSX.

Arch was a different story. I ran into a ton of problems, and ultimately decided that my “clone from a different machine” idea was a bad one. I’ll have to wipe this machine clean and start from scratch.

/stream /technology /coalescence /coalescent-computer

I fleshed out the /coalescent computer page pretty significantly, intending to have a deep enough overview on this site to make it worth linking to internally. For the moment, it still suggest readers check out the external Coalescent Computer site, but as the project matures in the future I'll add more information here on this site.

June 9, 2023

/stream /coalescence

Took a moment to remove the low-effort text and write a bit more about coalescence. I also split out the subsections to their own pages. I still need to find a big chunk of writing time to really bring over a lot of the larger and deeper essays I've written.

Complete Stream →