Difficult things becoming easy is not the story here, because on the one hand, we have difficult things become easy; on the other hand, we have easy things become absolutely trivial ā and that, for me, is the interesting part.
Iām a few weeks late sharing this. Iāve been sitting on it and spending too much time thinking about how I want to share links here. Iām still thinking about itā¦
I really enjoyed this talk, particularly the positive and fun perspective on LLMs and AI. I understand much of the negativity around AI, especially related to funding, business models, etc. ā but there are also so many opportunities to build fun and useful things. I think Matt does a great job of shining a light on the positive side of the current AI tools.
Anon Kode looks to be Claude Code that you can use with local models:
Terminal-based AI coding tool that can use any model that supports the OpenAI-style API.
Fixes your spaghetti code
Explains wtf that function does
Runs tests, shell commands and stuff
Whatever else claude-code can do, depending on the model you use
Sounds amazing, especially since Claude Code (which is great) is currently quite expensive. It probably should be, but I canāt afford dollars-a-day costs for a coding assistant. Can a local version compare?
Hereās my experience setting up and using Anon Kode with Ollama and Qwen2.5-Coder 14B on my 36GB M3 Pro MacBook Pro.
TL;DR: I got it working with Ollama and Qwen2.5-Coder, but then failed to successfully work with it and donāt have time to debug. If youāve had success with Anon Kode please message me on Bluesky and tell me about it!
Setup
Install Ollama and ollama run qwen2.5-coder:14b if you donāt have an exsting local LLM set up.
Hiccup: Iāve been having issues connecting to the Ollama API via localhost because my machine preferrs ipv6 for localhost (::1), and Ollama only binds to ipv4 (127.0.0.1). In my own code I just use 127.0.0.1 instead of localhost, but the default Ollama configuration for Kode uses localhost, so I āsolvedā the problem by commenting out the ipv6 entry for localhost in my /etc/hosts file. This is not a good solution, but thatās a future Chris problem. If anyone knows how to fix this properly, please let me know.
Install and run Kode:
npm install-g anon-kode
cd your-project
kode
I walked through the config screens and picked Ollama as my API Provider:
I set the API KEY to āollamaā. This shouldnāt be necessary, but it doesnāt like it if you donāt set an API KEY value.
Pick your model, I chose to pick the same model for ālargeā and āsmallā.
I went with āDefaultā for tokens.
Looks good.
Success! āHelloā gets a response from Ollama.
Use
Now that Kode is talking to Ollama, will it work?
I was half way through writing this post, so I thought I would ask Kode to insert the remaining images above for me. It didnāt go well.
Looks like an issue with understanding the project? Maybe running /init will help?
š« Thatās unfortunate.
It seems like there are a number of issues; file access, missing toolsā¦ unfortunately I donāt have time to dig further right now, so itās back to Claude.
Result (for now)
I really want this to work, and Iāll try again when I have time. If youāve had more success with Anon Kode please message me on Bluesky and tell me about it!
Today was a snow day, that means my kids got much more video game time than usual, and in our house video game time means āretroā games powered by the amazing ~$20 SF2000 (Super Mario Brothers 3 is still the pinnicle of game design, and I will die on this hill).
The SF2000 is a marvel, and being able to hook it up to the TV and play multiplayer NES and SNES games with my kids makes me so happy. But the screen tearing and other miscellaneous issues that it comes with out of the box motivated me to do some research and updating today.
Iām sharing what I did here, because there is a lot of information to be found about the SF2000, enough that it can be overwhelming if youāre just looking to make it better without watching a bunch of youtube videos and reading way more than you need to get the job done. Iāve now done both of those for you, and can share the basics.
Goals:
ā Update/fix the bootloader.
ā Install Multicore firmware, as it has the fixes and improvements weāre looking for and itās based on the official firmware.
ā Fix screen tearing (seems that multicore has software fixes).
ā Change default games for each system, make all the good Marios the defaults, maybe Sonic, Zelda, try to remember the best games for each system.
I didnāt get this one done, but multicore has slightly better defaults than the stock firmware, so itās not urgent anymore.
This guy has written many, many more words about the SF2000 than I ever will. If you want to get deep, go check it out: https://vonmillhausen.github.io/sf2000/
Update the Bootloader
Apparently it is critical to do this before doing anything else, or you risk bricking the device, so do it. More information here.
The process is quick and easy if youāre starting from a working SF2000. Here are the steps, copied from here:
Ensure your SF2000 is in a state where it boots normally when turned on (displays a boot logo, proceeds to the stock firmware main menu)
Ensure your SF2000ās battery is fully charged (having the device power off during the patching process will likely ābrickā it, rendering it inoperable)
Extract the zip file; inside is a folder calledĀ UpdateFirmware, containing a single file calledĀ Firmware.upk
Copy theĀ UpdateFirmwareĀ folder to the root of the microSD card, so that theĀ UpdateFirmwareĀ folder is in the same place as theĀ biosĀ andĀ romsĀ folders (i.e., youāll have anĀ sd:/UpdateFirmware/Firmware.upkĀ file)
Eject the microSD card from your computer, and put it back in the SF2000
Turn the SF2000 on; you should see a message in the lower-left corner of the screen indicating that patching is taking place. The process will only last a few seconds. If you do not see this message, and instead just go to the main menu as normal, then either this means your SF2000 has previously had the fix applied already, or you should double-check youāve placed the patch file in the right place
When the patching is complete, you will be taken to the main menu as usual
Power off the SF2000, and remove the microSD card
Connect the microSD card to your computer
Delete theĀ UpdateFirmwareĀ folder (itās no longer needed)
Install Multicore Firmware
Itās tough to track down the best sources of information about this. Apparently the real activity happens on Discord and Telegram, but Iām not committed enough to go there. There is some good information here, and it looks like the most āofficialā builds live here, but this fairly recent youtube guide/review points to a more recent āPurple Neoā build, which Iām going to use.
Eject the microSD card, put it back in the SF2000, and boot.
Improve Screen Tearing
Some games that we really enjoy like Super Mario Brothers have pretty bad screen tearing with the default firmware. Once multicore is installed we can set a config value to enable some software improvements.
I didnāt watch the Super Bowl this year. I had absolutely no connection to it and no preference for either team. While I generally enjoy football (college football, specifically) and spending time with friendsāand yes, the commercials and halftime show are usually worth watching, if only for the water cooler conversationsāI was elsewhere.
Instead, I was doing dad things: attending Ski Team with my kids, helping with homework, making dinner, and assisting my wife in unloading a mountain of Costco supplies sheād picked up earlier that day. (I bet Super Bowl Sunday is a fantastic day to shop at Costco.)
Thatās just how it is in our familyāweāre more of an Olympics-watching group, and thatās perfectly fine.
So, I didnāt watch the game, but apparently I was destined to see one of the adsā¦
This morning, in my groggy pre-coffee state, I was reading one of my favorite newsletters, Garbage Day, and chuckled at their critique of a Super Bowl ad:
Googleās Super Bowl ad last night, āDream Job,ā depicted a dad getting ready for a job interview by talking out loud in his kitchen to an AI voice assistant, something I am very confident no one has done ever. But that doesnāt matter because Silicon Valley believes they are big enough now to create the future, rather than scale up to meet it.
I love Garbage Dayāit makes me feel online and cool, with that warm fuzzy smugness we all occasionally need.
Then, not five minutes later, my dad texted me a link to the same commercial:
In case you didnāt see thisā¦ ā¤ļø
I watched it, and damn it, my eyes started leaking. Itās beautiful.
I feel seen.
Will I ever walk around my kitchen talking to an AI assistant? I canāt say (but yeah, almost certainly). While I doubt itāll be Googleās service, Iām firmly in the camp that believes GPT and LLMs are legitimately transformative technologies, with more useful tools being built on top of them every day.
I left my āprofessionalā job to devote more time to my family. Currently, Iām exploring AI tools to improve my journaling, workflows, and time management. And yes, Iām about to jump back into searching for paid work that fits with a more balanced life. I am absolutely the target audience for this ad, and it hit the bullseye.
Congratulations to the Google creative team and everyone involved in making this. Even in our hyper-critical online world, the reception seems almost universally positive (even the youtube comments!). And while Garbage Day may have rolled their eyes at it, I thought it was beautiful. I guess I canāt be smug all the time.
As of today Rivian is opening up sales of itās commercial van (the Amazon one) to anyone (with a business) with orders as low as a single van.
Iām excited to see businesses start picking these up, I donāt expect to see many where I live in Truckee right away; but as I think/type this I realize that maybe thatāll be proven wrong since our mountain-town gas prices make EVs a more compelling option. Too bad there isnāt a 4wd versionā¦ Yet?
EV āAdventure Vansā?
Iām even more excited about what the āadventure vanā market will do with these. Do EV camper/adventure vans make sense? Iām not sure, I think so for a large chunk of what people actually use their āadventureā vans for, but probably not for what people think theyāll use their adventure vans for.
My use would be 99% in trailheads/ski parking areas within 50 mi of my house, so electric would be awesome. Overlanding to Alaska, maybe not so much.
As for the van, itās pretty boring, if cute in that quirky Rivian way. Canāt wait to see what some customization shops come up with, even if theyāre just built to show off concepts at van shows. Iāll post what I see.
Itās been two-ish weeks since started my āYay Camerasā project. Itās been getting a couple hours of my time most days, and while the site might still look a bit rough, Iām happy with the progress Iāve made. If you havenāt already, you can check out my initial plans for the site here.
Backend Focus
Over the past couple weeks, Iāve been following my preferred path and spending quite a bit of time playing around in backend/ops land. This has involved a lot of learning and experimentation with various technologies:
Next.js: Yes, the frontend, butā¦ focusing on server-side components to ensure pages are cacheable. Iām excited about the server side features, Iām aiming to build a completely cached site that can be enhanced later with frontend interactivity, and Iāve been working almost exclusively on a 99% client side React app for the last 5 years, so I want to stay in React for that stuff, for now.
Serverless Stack (SST) + OpenNext: SST for deploying the Next.js app on AWS using OpenNext. SST seems good, but I decided to manage other services withā¦
Terraform: To deploy DynamoDB and S3, because itās so easy and the standard for managing this stuff.
While the frontend might still be a work in progress, the backend is up and running smoothly. Iāve been exploring the pros and cons of these various tools over the last few months (recovering from Amplify), and Iām generally happy with this setup.
Just Ship It
One of the key goals of project is the learning to ship imperfect things. Itās easy to get stuck in perfectionism, but putting something imperfect out there and then iterating on it is something Iāve been pushing myself to do. Learning in public (even though I donāt really think anyone is looking). Iām also trying to develop a habit of writing something every week, and this gives me something to talk about.
Current Features
Hereās a rundown of what I have so far:
Backend: A script that I run manually once a day to fetch new cameras and images from Flickr, along with product information from Amazon. All this data is stored in DynamoDB/S3.
Frontend: A Next.js app with an index page that picks a random manufacturer and displays a list of cameras weāve found. Each camera has its own page displaying an image (if available) and photos taken with that camera.
All these pages are Next.js server components, so theyāre cacheable and are just served directly from S3 (I think, I havenāt dug into exactly how OpenNext works). The index page is already cached, and Iāll cache the individual camera pages too, eventually.
Camera Pages + Flickr Photo Embeds
Flickr photos are marked up to display Flickr photo embeds. Each image includes metadata such as the photographer, license, title, etc., and links back to Flickr even if the embed doesnāt load. Iām particularly fond of these since I wrote the embed functionality for Flickr and I really like how I did it with progressively enhanced img tag -> sourceless iframe. Flickr went down at one point while I was working and the embeds kept chugging š„°
Hereās an example page that showcases a nice collection of photos taken with the Sony ILCE-7: Yay Cameras - Sony ILCE-7.
Whatās Next?
Thereās still plenty of work to be done, especially on the design/features front. Iām taking a bit of a break for now to dig into another project, but Iāll be working on adding more camera and manufacturer information to fill in some empty spaces when I get back into it.
Overall, this project is more an exercise in getting stuff out and learning along the way. Iām not exactly embarassed by whatās there, but I want to put stuff Iām not 100% comfortable with out there rather than just keeping it in a git repo to die. More to come, Iām sure Iāll be embarassed by a lot of it.
Iām working on a new personal project from a very old idea, itās called Yay Cameras!, and it will be a site aboutā¦ Cameras!
Iāve always loved cameras. Iāve never been a particularly excellent photographer, but Iāve always been interested in technology, and cameras are the coolest technology that was available to normal people like me, even before computers and video games; cameras were (are) magic.
My first digital camera was a Toshiba PDR-2. It was a crazy little thing with a PCMCIA card interface that flipped out of the back to interface with a PC, and Iām shocked that I (read: my mom) even had a computer with a PCMCIA slot to plug it into. I remember taking that camera with me on my first international trip when I was ~15, but I have no idea what happened to any photos that I took. The internet wasnāt quite ready for them at the time.
Over the subsequent years Iāve had dozens of cameras. Before our phones took over, I would wonder the camera section of the electronics store just to see what was new. The idea for Yay Cameras! is a website where cameras get āprofile pagesā with sample photos and videos, links to photographers who use them, suggested accessories, etc. I imagine it as a place where people interested in photography cameras can go to see whatās new, research a new camera, or connect with others for tips and advice.
Will there be interest in this? Iām not sure, but thatās not really the point. I want to build it for my own interest.
āThis is my Cam!ā
This project has roots in a hack day app I built back in 2012 called This is my Cam!. The app let Flickr users generate profile pages for their cameras using their uploaded photos. It was fun, simple, and surprisingly popular.
Here are some screenshots of This is my Cam!:
Unfortunately, it was a victim of its own success. The app was built with Django/Python and ran on a tiny EC2 micro instance. It needed offline jobs to fetch and process Flickr photos, and the server couldnāt handle the load when ~1000 people signed up in the first few days. I wasnāt ready to scale it up (or pay for it), so it fizzled out. Iāve used the dream of rebuilding it to explore various technologies over the years, but Iāve never gotten it back out there for public consumption.
Why build this?
Iām not looking to build a ābig thingā at the moment, but I want to put something out publicly that will give me a place to play with new tech. Iām constantly building little projects to scratch itches, but they rarely go further than satisfying my curiocity of the technology to justify a āproductā or even a blog post. This is my Cam! is too big, Iām not really interested in having auth, user management, permissions, and everything that comes with an app with users. For whatever reason I do really want Yay Cameras! (and This is my Cam!) to exist (Iāve held on to the domains for over a decadeā¦), so Iām going to build something and see if itās worth maintaining.
āMVPā
Core Features:
A script to discover and catalog cameras by analyzing photos from Flickr explore. (daily, manual execution)
A database of cameras with key details and example photos.
Visual Design:
Borrowing from the playful style of This is my Cam! circa 2012.
Tech Stack:
Built with Next.js, hosted serverlessly on AWS using SST and DynamoDB.
This Weekās Goal:
Get a daily process running to update the camera database.
Deploy a basic frontend to yaycameras.com to browse the collection.
Whatās Next
I expect the backend to come together quickly, Iāve done most of the groundwork in the little projects I mentioned. I imagine the frontend is where Iām most likely to fall into rabbit holes with many new things to explore and learn. Iāll probably make it extremely simple and ugly in this pass.
This isnāt a startup or a grand vision. Itās just a site I want to build because cameras are cool, and I think others might think so too. If youāve got ideas or suggestions, Iād love to hear them.
Earlier this week, I checked a months-overdue item off of my to-do list and set up a very basic āAI Personal Assistantā with Dan Cattās Kitty AI. In its current form, it simply uses ChatGPT 4 to generate a set of three morning questions, then saves my answers and feeds those back into the prompt on subsequent days. This allows each dayās new questions to have some context of my previous answers, and therefore my emotional state, what Iām working on and hoping to achieve, if Iāve been setting aside time for exercise and rest, etc.
So far, I think it is shockingly great, and I am incredibly excited to use this tool to track what Iām doing, give myself accountability, and develop a routine. Obviously, a script backed by an LLM isnāt going to magically make those things happen, but I think it just might be the right thing to help me make those things happen. Itās already made a huge impact on my productivity and what Iāve chosen to do with my time over the last two days (I know, two daysā¦ but Iām optimistic!).
Of course, this tool is in the context of what Iām trying to improve personally: mindfulness, organization, goal-setting, and work/personal life separation.
First Day Experience
On my first day using Kitty, it asked me a question about my emotional state, which I answered with something like:
āIām feeling anxious that I wonāt accomplish everything I hope to today, and rushed because I need to get treats to Lucasā school for his birthday.ā
I was wrapping up getting Kitty running, really wanted to get it done that day, and stressed that I wouldnāt. Another question was about what type of short break or activity I could include in my day to recharge, to which I said:
āIt would be nice to get a few ski runs in but I donāt know if Iāll have the time.ā
As I rushed to Lucasā school to deliver his birthday treats, I turned these answers over in my head. I had initially planned to drop treats off at the school, then head back to a cafe and spend a few more hours on the computer before returning to pick Lucas and Isaac up from school. However, I realized that I would really get more value out of focusing on my sonās birthday and celebrating that, than whatever I might accomplish with two more hours staring at the computer.
Instead of rushing in and out for a quick birthday celebration, I signed Lucas and Isaac out for the remainder of the day (a totally normal thing to do; half the school leaves at noon for ski teams), and spent the afternoon skiing with them. I got the activity I needed and made my sonsā birthday week that much more special.
Would I have done the same without the questions, responses, and post-thought? I donāt know, but I really like the feeling of stopping for a few minutes each morning and being thoughtful, not just rushing into my to-do list.
Iām cheating a bit and writing/posting this a day late, but Kitty is set up! The process was super easy, although I now understand that what Dan has shared on GitHub is a very simple example of what Kitty or an AI PA can do, and not the full extent of what he is doingā¦ which makes complete sense, as people are different, this is a personal project, and it would take a massive product team to try and make it work for everyone. (and then it would also probably suck for everyone)
My first three morning questions from Kitty:
"What emotions are setting the tone for your morning, and can you identify their sources?"
"In consideration of your physical and emotional state, what's the key thing you would like to achieve today?"
"As you envision your day, is there any particular activity or short break you could incorporate to recharge?"
All three are clearly inspired by but not directly pulled from the default question set, and having been run through GPT they feel much more natural than the defaults. Weird, but huge thanks to Dan for being miles ahead of me in his thoughtfulness towards what to ask to help one write useful answers.
Tomorrow Iāll write more about how these initial questions immediately impacted my day, and some other thoughts about how I want to use Kitty in my day-to-day life.
Here are my notes on setting up Kitty, in case someone happens to be here wanting to set up their own. Danās readme is thorough, but there were a few things that were slightly more involved for me because I hadnāt already set up an OpenAI Platform account.
Setup Steps
Install kitty terminal. This is not required, you can run the AI PA in any terminal.
While itās not mandatory to install the kitty terminal app, Iām doing it because Iāve never used kitty, and I want to see how it compares to the iTerm2 quake-style dropdown terminal Iāve been using for the last n years.
Stopping myself from going down a rabbit hole of exploring kitty, Iām going to use it as-is after install and drop this thread here to explore customizing as a replacement for iTerm later.
Set up an OpenAI Platform account and add some credits. I initially just created an API key, but it didnāt work for GPT-4 without credits, and I had to create a new API key after adding credits, the existing key didnāt automatically start working.