In this series of posts , I’m rescuing vintage microcontrollers from their decades-long purgatory in a drawer in my local makerspace . To this end, I’m attempting to use them to drive a LED sign made of WS2812 strips 
 So far in this series , I
 found some decades-old Signetics SCN8031AH and OKI MSM83C154 microcontrollers in a drawer ,
and worked out that they’re 8051…
In this series of posts , I’m rescuing vintage microcontrollers from their decades-long purgatory in a drawer in my local makerspace. To this end, I’m attempting to use them to drive a LED sign made of WS2812 strips 
 In the first installment of this series , I found some decades-old Signetics SCN8031AH and OKI MSM83C154 microcontrollers in a drawer, and decided, without really…
I recently joined my local makerspace , and one of the exciting 1 things there is this shelf of electronic components, available for all members to use: 
 

 

 
 I felt a bit like an archeologist going through these. Everything in them, apart from some Arduinos and Raspberry Pi related stuff in the middle shelves, seems to be at least thirty years old! There’s the…
I went on a bit of a journey this week - moving our Pi-hole from its own dedicated device 1 to a container on our home router. I still wanted it to have its own IP, and to still be able to serve DHCP and DNS. And I wanted the host machine to be able to use it. And I wanted to use Podman to host it, first because I’m using it for other things on this machine already, and second because I…
[When I wrote this post, I used OpenBSD 7.7. In the less-than-a-month since I posted this, OpenBSD 7.8 has been released! I’ve upgraded my router, and all the advice below is still applicable with 7.8] 
 I’ve just replaced our old home router with a tiny OpenBSD router, and I’ve been surprised and delighted by it. 
 The old router - a TEW813-DRU - was getting long in the…

 
 Your browser doesn't support embedded videos, but don't worry, you can download it and watch it with your favorite video player! 
 
 These are my notes on setting up a ‘headless’ Gentoo Linux installation on UTM on my Apple Silicon Mac, with the Apple Virtualization ‘backend’. 
 I’ve updated these as of December 3rd 2024.
Ten years ago, my wife Emily and I made two games: Coolson’s Artisanal Chocolate Alphabet for iPad, and Coolson’s Pocket Pack , for iPhone (and iPad). Coolson’s Artisanal Chocolate Alphabet won a BAFTA, and was for a while featured on Apple’s iPad web page! 
 I recently spent some time lightly remastering both games for modern devices, and they’re now back on the…
This project is a little old, but now that I have some time, I thought it would be nice to write it up! The device has been serving me well for a few years now. 
 Being somewhat red/green color blind, I’ve always had trouble reading through-hole resistor color codes (though I often wonder if those with full color vision have it much easier - some resistor bands are so…
In this series of posts , I’m attempting to make a Dual Shock to Switch controller adapter. It will plug into the Switch Dock’s USB port. 
 It’s been a couple of weeks, and I’ve still be working on the Dual Shock to Switch adapter in between using it to play Zelda. I’m glad to report it is very reliable! 
 I want to write about the changes, but I won’t…
In this series of posts , I’m attempting to make a Dual Shock to Switch controller adapter. It will plug into the Switch Dock’s USB port. 
 So far, I’ve got a nice, efficient, fake Switch Pro Controller running on my breadboard. But it doesn’t do anything useful - it just fakes out left and right dpad presses. In this installment, I’ll connect a Dual Shock to it!…
In this series of posts , I’m attempting to make a Dual Shock to Switch controller adapter. It will plug into the Switch Dock’s USB port. 
 This is a bit of an interlude from actually working on the project: in this post, I put a serial bootloader onto the ATmega8A I’m using, to make development more efficient.
In this series of posts , I’m attempting to make a Dual Shock to Switch controller adapter. It will plug into the Switch Dock’s USB port. 
 Last time, I got the ATmega masquerading as a Pro Controller and controlling the Switch. This time debugging and performance improvements! 
 
 
 Your browser doesn't support embedded videos, but don't worry, you can download it and…
In this series of posts , I’m attempting to make a Dual Shock to Switch controller adapter. It will plug into the Switch Dock’s USB port. 
 In previous posts, I got a breadboard with an ATmega8A on it running code I wrote using V-USB, masquerading as a generic USB HID game controller when plugged into a computer. 
 

 

 
 By the end of this post, it will…
In this series of posts , I’m attempting to make a Dual Shock to Switch controller adapter. It will plug into the Switch Dock’s USB port. 
 Last time , I ended with a real USB device that would communicate with a host computer - but all it would do is blink a light on and off. 
 

 


In this series of posts , I’m attempting to make a Dual Shock to Switch controller adapter. It will plug into the Switch Dock’s USB port. 
 In the first post of this series , I got a development environment set up, a programmed ATmega8A onto a breadboard, and code I wrote controlling a blinking LED. In this post, I plan to get V-USB set up, and an LED blinking on a breadboard -…
In this series of posts , I’m going to (attempt to?…) make a Dual Shock to Switch controller adapter. It will plug into the Switch Dock’s USB port. 
 In doing this, I hope I’ll learn about how USB works - something I’ve vaguely wondered about for at least twenty years - and have some fun doing low-level microcontroller programming. 
 I’m also looking…
I find Extremely Linear Git History ( GitHub ) unreasonably amusing. 
 It’s also unreasonably easy to install with HomeBrew ( brew install zegl/tap/git-linearize ) - so I just had to give it a try out when initializing a new project. 
 This led me into a huge detour. Just what was it doing to my Git repo to get the linear hashes? 
 Come on a journey with me!
For over a year now, I’ve been using an MSI Prestige PS341WU as my main display. It plugs into my MacBook (now, an M2 MacBook Air of my own, previously mostly a 16" M1 MacBook Pro from work). 
 

 

 
 At the time I bought it, it was about the only reasonably priced ultrawide that also stood a chance of being considered ‘retina’ - and a casual browse…
The blog is back! Eight years and one month after the last post (wow!) 
 What have I been doing? Working for Apple, mostly. From April 2014 to July 2022 I worked on the UIKit team, for most of that time managing the UIKit Infrastructure sub-team - a wonderful bunch of people. It was (mostly) great - and, as is often true, somehow seems like something I did for ever for ever, and something that…

		 Editorial note: Yesterday, I sent a draft of this post to Mattt Thompson, the author of the article this is a reply to. He was kind enough to send a very gracious reply. I thought about reformulating the post in an attempt to express or explain our differences of opinion more directly, but decided that I would be doing him a disservice by doing so. Instead, with his permission,…

		 Coolson’s Artisanal Chocolate Alphabet , our iPad game, has been out for almost a month now! (You should buy it before it goes up in price on Friday :-). 

 This is the first of hopefully at least a couple ‘behind the scenes’ blog posts about its creation. This one’s about its trailer video, and how we made it on a budget of $0 1 . 

 

 Background…

		 

 What a week it’s been. What a few months, really! 

 If you’ve been following on Twitter or this blog recently, you’ll know that my wife Emily and I have been working on an iPad game. We’ve been testing it for a month or two with a great group of people, who have been a great help (thanks to all of them). 

 The game, Coolson’s Artisanal Chocolate…

		 I open-sourced a little bit of, as I’ve been calling it on Twitter, “THE GAME” - that is, the game Em and I’ve been working on: “THIn”: Three easy ways to do things later in Cocoa/Cocoa Touch. 
	

		 I wrote some key-value observing (KVO) and key-value binding (KVB) helper classes for iOS and Mac OS X. Not much more to say about them than is in the ReadMe file on GitHub . I’m pleased with them. Comments (and pull requests) welcome. 
	

		 

 I think that the idea, and it was almost taken as religion, is that once we got to the point where you could write web apps, and that web apps would run everywhere, that was some sort of end point in the continuum of how software evolved. […] Not everybody, certainly not everybody, but there were a large number of people who I think sort of took it, and still take it…

		 Google has acquired the development team that produces the excellent Mac and iPhone email app Sparrow . Development of the app is being stopped so that the developers can “[join] the Gmail team to accomplish a bigger vision.” Like many, I find this news disappointing. I bought both the iPhone and Mac versions of Sparrow. I use it daily on my iPhone, and intermittently on my Mac.…

		 I posted YACYAML , the Cocoa YAML parser/object archiver I’ve been working on for a little while to GitHub today. It converts Cocoa objects to and from YAML , a plain text, human friendly data serialization format. 

 YACYAML can be used in lots of ways - from replacing plists or JSON for simple config files, up to storing entire custom documents in an easy to view (and…

		 It’s commonly held that iOS has no built in Base64 routines (a strange omission, if you ask me). Pootling around in the BSD headers today though, I discovered this is not entirely true. There are a couple of functions hidden away in libresolv.dylib . That’s the, err, BIND-9 DNS resolution library… If you’re not put off by linking to BIND just to get Base64 translation, it’s easy to…

		 By all means, learn enough programming to put together a prototype and have a better perspective on hiring and managing engineers. Just don’t mistake a foothold in the world of coding for true engineering expertise. Buzz Andersen , commenting on Jeff Atwood’s Please Don’t Learn to Code This “Don’t Learn to Code” vs. “Everyone Should Learn to Code” meme fascinates me. I pretty much…

		 

 It’s painful, hard, and often time-consuming to restart when you’re already done, but you can’t argue with the results. Both Apple and Nintendo create some of the best, most inspired design out there. 

 Lukas Mathis , in Chabudai Gaeshi 
 

 

 When people ask me what Apple’s dev process has that’s different to other places, I always…

		 In which a method is presented for reliably building static libraries with subprojects in Xcode, and it is suggested that this method, combined with Git submodules or other similar mechanisms, provides the best way to share libraries, frameworks, or other code between projects. 

 I’m sure I don’t need to tell you that it’s a useful thing to be able to share code between…

		 Marco Arment has written a provoking article about Apple App store ratings . I haven’t really looked at the situation since my original (and, at the time, infamous) brush with the Apple law over the rating of Eucalyptus . As you may remember, it’s rated, at Apple’s request, 17+ for “Frequent/Intense Mature/Suggestive Themes”, because users can access Victorian textual translations…

 “ Do you want the United Kingdom to adopt the ‘alternative vote’ system instead of the current ‘first past the post’ system for electing Members of Parliament to the House of Commons?” If you’ve spoken to me recently (or know me on Twitter or Facebook), you’ll know that I’ve been campaigning for a “Yes” vote in the referendum tomorrow on whether Britain should adopt the Alternative Vote.…

		 I am wary that this blog is in danger of turning into “Gripes With Apple”, especially after last week’s article , so I thought twice about posting this. It’s certainly not of the same order of magnitude as last week’s news, but it is something I’d usually blog about if I hadn’t seen it covered anywhere else - and I haven’t seen it covered anywhere else, so here goes… 

…

		 I’d like to take a moment to talk about Apple’s new policy on paid ‘content’ in iOS applications . If you don’t live in the Apple bubble I live in, let me explain: Esentially, all apps that allow users to comsume pay-for content (magazines, music, books etc.) must allow the user to buy access to that content in-app, using their iTunes account. For this, Apple will take 30% of the…

		 Today, November 11th, is World Usability Day. To celebrate, the good folks at Clearleft wil be donating all revenue from sales of Silverback , their Mac ‘guerilla usability testing’ app, to the Dian Fossey Gorilla Fund . 

 Silverback’s a great app [full disclosure: I did some work on the latest version, but I’m pretty sure I would think this regardless] for performing…

 Spam is getting more and more targeted. With contact details blurred to protect the, erm, guilty… I love how they insinuate that this in response to some enquiry I made, somehow hoping I’m so busy I’ll presume I forgot about it or something. I’m tempted to try to get an SDK and some hardware samples out of them…

 A couple of the guys I worked with via Missing Ink Studios on the first apps to use the Eucalyptus reading engine (including the Hitchhikers’s Guide To The Galaxy and Peter James apps) have started up their own web and mobile development company, “ Webmoco ”. I found them great to work with, so if you’re looking for a development team, check out their site , which includes a showcase of the…

		 In which a convenient method of using POSIX regular expressions from Objective-C is presented. 

 It’s a common complaint that the Mac and iPhone platforms don’t have native support for regular expressions, but that’s not entirely true. If you drop down to the UNIX core, there’s an implementation of the old (and only partially busted) POSIX regular expression interfaces.…

 I usually shy away from discussing politics online, and but it looks like I opened a can of worms on myself on Twitter this morning after I said “ A worthy petition, but I wish it were better worded ” in response to this petition . Here, I set out my thoughts in more than 140 characters. For those not familiar with the background, Charles Arthur of The Guardian has a good article about the…

		 Earlier today I received a phone call from an Apple representative. He was very complimentary about Eucalyptus. We talked about the confusion surrounding its App Store rejections, which I am happy to say is now fully resolved. He invited me to re-build and submit a version of Eucalyptus with no filters for immediate approval, and that full version is now available on the iPhone App…

		 Update 

 The situation has now been resolved. Read more in my later blog entry . 

 Original Post 

 If you’re wondering why Eucalyptus is not yet available, it’s currently in the state of being ‘rejected’ for distribution on the iPhone App Store. This is due to the fact that it’s possible, after explicitly searching for them, to find, download from the…

 I think the sentiment expressed in this strip is the single main sapper of my productivity when coding. Whenever I approach something that I haven’t yet nailed down the implementation details of, I become almost paralysed, trapped in a negotiation with myself on what the “easiest”, “best”, “cleanest” way to do it would be. There should be a term for it. “Implementation Anxiety”? [With thanks…

 John Gruber’s latest post, “ Private ”, calls Erica Sadun to task for her invention of a distinction between “private APIs” and “unpublished API ’s”. I completely agree. The distinction is nonsensical. On technical grounds, of course, it’s a valid distinction, if not a valid characterisation. Her “unpublished” APIs are APIs that are available in public frameworks, but not documented in the…

 “The Application “Application Name” was not installed on the iPhone “iPhone Name” because it could not be verified.” For web-posterity, a small thing I discovered: If your iPhone app beta testers are getting this error (probably along with an “ApplicationVerificationFailed” message from iTunes in the console), it’s possibly because you used command-line ‘zip’ to compress your app file, and…

		 In which a semi-automated system for the versioning of iPhone applications is detailed. Said system ensures that the reader’s apps are always correctly versioned, and his users’ iTunes applications are never confused by an update of his beta builds. 

 Versioning your iPhone applications properly ensures that your app updates go smoothly, and also that when you make a beta…

 “Change will not come if we wait for some other person or if we wait for some other time. We are the ones we’ve been waiting for. We are the change that we seek. We are the hope of those boys who have so little, who’ve been told that they cannot have what they dream, that they cannot be what they imagine. Yes, they can.” [1] I shy away from discussing politics online. I’m aware how hard it…

		 

 In which a category allowing the creation of UIImages from Unicode characters, suitable for use as Tab Bar icons, is created, but a state of mild displeasure at the implementation of said category is engendered. 

 [If you just want code, with none o’ that darn readdin’, there’s a zip at the end of the post] 

 Adding a ‘test’ tab to my in-development…

 Em’s sewing machine has been in a state of disrepair since it arrived here in her suitcase from California. Today, we finally got around to taking it apart to see what was wrong (after searching in vain for a repair manual online - it seems that sewing machine manufacturers have not yet entered the Internet age). Turned out to be a simple problem (one of the belts had slipped off, no doubt…