September 6, 2023
This piece "On Craft" by Cat Hicks really resonated with me:
There is this thing I guess for me here, craft as communication and collaboration and creation, versus craft as weapon. Craft as fixing a table for everyone who will sit at it later versus craft as judging whose work gets to be seen as authentic and skilled.
July 12, 2023
Quentin Carnicelli on Rogue Amoeba's Poorly Thought Out Alerts:
Since the very first computer platform was created, there has been a power struggle between platform owners and developers. As developers, we wish for a stable platform. It’s understood that it must evolve, but it should do so slowly and predictably. Platform owners, on the other hand, wish to cut out cruft and move forward rapidly. This tension is the normal state of affairs. When managed well, it keeps both parties in check.
This poorly-written alert, instructing users to contact developers for new software, is an unacceptable disturbing of that balance. The last thing users should ever have to worry about is “deprecated APIs”.
This in response to Craig Hockenberry's post An Alerting Vista of Sonoma, where he points out how Apple is adding some weird ass alerts to MacOS Sonoma.
In the past, I've been received emails from Apple about APIs that are about to change behavior after they were deprecated for a while (off the top of my head - FlySketch used CGDisplayAddressForPosition to grab the base address of a display to read pixel data. In a Mac OS update that started returning null). Apple also dings you when using deprecated APIs when uploading to the App Store. Between all that and the warnings you get when compiling, I think the new alerts in Sonoma are just dumb.
Make Your Renders Unnecessarily Complicated
siirrandalot on YouTube: Make Your Renders Unnecessarily Complicated:
Had this idea 10 years ago, finally got around to it. Took a good couple of months too.
Maybe I'll have to come back in another 10 years in order to properly simulate diffraction and lens flare...
What happens if you make a pinhole camera in Blender, and then take that idea to it's logical conclusion? You get this insane idea. This was amazing to watch and if you're a camera or graphics nerd, it's a must watch.
Via my buddy Jake Carter.
Oh… So That's How Hash Tables Work
Leo Robinovitch: A simple hash table in C:
"I implemented a simple hash table in C when solving a problem in CS Primer. Solving it helped me gain better intuition around hash functions, pointers, and memory segments like the stack and the heap."
I'm a mostly self taught programmer, and as such, I've never bothered to learn how hash tables work. But this implementation of a very simple hash table in C was pretty eye opening. Such as … well I now understand why it's called a hash table and how collisions are handled.
Such a simple and elegant solution for a data structure everyone uses all the time.
June 8, 2023
I spent a few days down in Cupertino / San Jose for WWDC 2023 earlier this week. I didn't have a ticket, but since a bunch of my friends were going to be around I didn't want to pass up the opportunity to see everyone.
While it obviously didn't have the feel of previous WWDC years, there was still a nice vibe going on and I hope it grows a little more every year to the point where we've got little conferences orbiting around the main event again. It'll take years to build up, but I think it'll happen.
On the announcement front: I'm very excited about the Vision Pro. I think has a very bright future, and I can see it replacing Macs for a lot of people as well. It's not for everyone just yet, but the form factor and price will come down over time which will make more folks come to it. Vision Pro's capabilities will expand as well, and developers will figure out just what to do with it.
I have ideas of course. Maybe I'll even find the time to implement them.
On the new Mac Pro: I can only assume this isn't the processor that they wanted to ship in it. I'd bet a small amount of money that at some point in the future it'll get a processor that makes sense in this giant case*. Something that's drowning in CPU and GPU performance. Otherwise I just don't see the point of having it.
On Software: I haven't had a chance to dig into the API changes yet - but I did notice that the Accelerate framework now has flood fill operations for vImage. I'm very curious to see how my implementation performs compared to Apple's.
June 15 Update:
When I was hanging out in the Signia (né Fairmont) hotel lobby, anytime an interesting song came on I made sure to add it to a little playlist. Which I now present to you.
* I hate the Mac Pro case design. It's big, ugly, and cost way too much. I kind of wish they would go back to the pre trash can design, or maybe do the trash can again, but bigger.
May 11, 2023
BBEdit from Bare Bones Software just turned 30(!) years old today. That's uh… that's really old. I'm pretty sure that's at least 10,000 years old in software years.
I still remember discovering BBEdit 2.5 back in my college days, and was instantly hooked. I can even remember the office I was in when I started it up for the first time. BBEdit had this certain … way and feel about itself, it was 100% at home on the Mac and it was amazing. It was light years ahead of other text editors and was rapidly adding wonderful features for editing HTML pages (which was all the rage at the time — before we even had animation in browsers!). I loved it, and I still use it today.
Here's to another 30 years of not sucking.
If you don't already have it, it's currently on sale for $30. (Which will be cheaper than the 40th anniversary edition I bet). You better go pick it up now. Because are you really a Mac person without it?
May 4, 2023
Someone on the Flying Meat Forums managed to accidently nerd snipe me this morning with regards to taking timed screenshots:
"One missing feature is a timer to e.g. capture after 10 seconds. This would allow for capturing when hitting the keyboard shortcut isn’t always practical, e.g. when dragging something or holding down a menu."
My first thought was "oh, this should be done via AppleScript obviously". And then after implementing that with various options I thought "duh, folks are going to want Shortcuts support for this too", so I did that as well. And then finally the easiest thing was to just hold down the option key when using the New Image from Layered Screenshot menu item, and Acorn will wait 10 seconds.
I'm slightly amused that my brain went from the most non-obvious way, to slightly less non-obvious, and finally to maybe this is the obvious way to implement a feature. (My very first thought was "use Retrobatch", but then I saw the utility of it in Acorn).
A test build is up on the latest builds page, and here are the notes for it:
# New Screenshot Stuff.
- Delayed layered screenshot: Hold down the option key when choosing the Image ▸ New Image from Layered Screenshot menu item and Acorn will wait an extra 10 seconds before taking the screenshot. This is awesome if you want to quickly switch to another app and open up a menu item.
- New Shortcuts action to take screenshots. Layered or not, with or without shadows, only for a certain app, and even with a little delay. MacOS 11+ only.
- New AppleScript command "screenshot" which you can use to take a layered screenshot, with various options including an option to only capture a specific app. Here's an example:
tell application "Acorn" to screenshot app "Mail" delay 4 with layers and hiding shadows
. You can also use "bundle identifier" instead of "app" to target a specific app name.
April 28, 2023
A new update to Acorn is out, version 7.4. I've added clone tool improvements, you can now assign a corner radius to bézier curves and star shapes, the color picker now allows you to use float values for the RGB values (so you can get super, super accurate with your colors), and some new command bar actions and AppleScript abilities. There's more as usual, and you can check the full release notes for the details.
While working on Acorn 7.4 I kept on glancing at the version number and wondering why it felt so… familiar and right to me? And then it eventually hit me — I was born in '74. So I really like this version for that reason alone. I think any future big features will be stuffed under the 7.4.x number instead of a 7.5, just so I can keep the '74 around longer. I mean, why not? It's my app and I can do that.
LEGO Career Goals?
This is a fun YouTube Short that follows LEGO designer Nico Vás around the LEGO office. It looks like a really neat place to work. Also, for some reason I keep fixating on Vás' case he keeps his laptop in. Why do I feel like I need one of these as well?
Sort of: semirelated: Laid Back LEGO Beats for Studying | Relaxing | Chill | Building
March 27, 2023
Twenty years ago today, March 27, 2003, I released VoodooPad 1.0.
It was my first "real" Cocoa project. I was learning Objective-C pretty much on the fly back then and still working a day job. I had no idea it would launch my full time career into being an indie Mac programmer. Happy birthday little guy, you're still the best wiki-style notebook around. One more year and you can legally drink!
VoodooPad is in different hands these days, but I'm happy to see it still living and still getting love from many of its users (whom I still get emails from every now and again).
Official SQLite via WASM in the Browser
I knew SQLite had been ported to WASM, but I wasn't aware the SQLite project is maintaining an official version.
SQLite continues to amaze me.
December 27, 2022
Lite XL:
A lightweight, simple, fast, feature-filled, and extremely extensible text editor written in C, and Lua….
We are currently around 3MB in size and takes about 10MB in RAM (can be lower). No Electron / WebView involved. The whole thing is just Lua running on a rendering engine.
I downloaded Lite XL because it's written in Lua and I just had to check it out. I was shocked at how fast everything loaded. It's amazingly fast. The UI ins't exactly stellar on MacOS, but the feel of the editor absoutely is. It's fast and tight and makes me smile, and I wish all software was this instant.
December 15, 2022
Riffusion takes an audio file, converts it to a spectrogram (much like Capo can do) and then passes it through Stable Diffusion to make new spectrograms, and then back to an audio file.
It's like AI art, but for music.
I'm blown away by this, especially the sample where it makes a "beautiful 20-step interpolation from typing to jazz".
Here's some lo-fi beats for the holidays.
Sure, it's not amazing - but here's the thing; it's early days. And you know I'm absolutely going to use this to make music to play along with in the future.
November 23, 2022
I really don't normally do sales like this, but this time around I thought - hey, why not? This one looks good.
Acorn 7 is part of a Black Friday bundle where you can pick and choose from a number of wonderful Mac apps at 50% off, or all of them for almost 80% off: Pick-Me-Apps: Black Friday Mac Apps Collection 2022
It's not going to last for long, so if you're interested in Acorn or any of the other apps - make sure to jump on it sooner rather than later.
November 15, 2022
Rober Dam: I record myself on audio 24x7 and use an AI to process the information. Is this the future?
I bought a couple of Chinese microphones, I wear them and turn them on all day recording everything I speak, at the end of the day the files are processed with OpenAi’s Whisper and transformed into text files from which the information is extracted.
In that context I realized that you could create a rudimentary “Ok Google” style “Digital Assistant” to actively take advantage of the fact that it was recording everything anyway.
This is a pretty clever idea. I can't see myself wearing a microphone all day, but I could see something in my office for this.
Maybe I could make a Siri Intent to do this? But Siri is always getting what I say wrong and I have to interrupt what I was doing to correct it. If I don't correct it I'll see a reminder in a few hours and have no idea what it's for.
Wouldn't it be cool to have the recorded information to go along with reminders or notes to yourself?
20 Years of Rogue Amoeba
In 2022, Rogue Amoeba is going stronger than ever. Every day, our audio tools help countless Mac users create podcasts, enhance video calls, and so much more. […] But as the date of our twentieth anniversary approaches, it’s nice to take a few minutes to review the past and reflect.
Paul Kafasis and Quentin Carnicelli, two (out of three) founders of RA, were among the first indie Mac developers I met when I was starting out. I remember Paul talking on numerous occasions that the goal was not to create a single great app, but to create a great and sustainable company. And from that, great apps would emerge.
It's indisputable they reached that goal. Congrats to the whole crew over at Rogue Amoeba on 20 years.
September 14, 2022
Outside: Yvon Chouinard No Longer Owns Patagonia.
Effective immediately, 100 percent of Patagonia’s earnings not reinvested in the business will be distributed to the Holdfast Collective to help “protect nature and biodiversity, support thriving communities, and fight the environmental crisis,” according to a press release. The company has for years donated 1 percent of its sales to grassroots and environmental causes, but this shift will increase that figure dramatically. The estimated charitable outlay of the new company will be roughly $100 million a year.
Yvon Chouinard:
“One option was to sell Patagonia and donate all the money,” he wrote. “But we couldn’t be sure a new owner would maintain our values or keep our team of people around the world employed. Another path was to take the company public. What a disaster that would have been. Even public companies with good intentions are under too much pressure to create short-term gain at the expense of long-term vitality and responsibility. Truth be told, there were no good options available. So, we created our own.”
Yvon Chouinard is quite a character, and I've always liked him. Patagonia's products were always a bit more pricy, but the quality is amazing and their commitment to the environment more than makes up for it.
I've you've not already watch Valley Uprising, you should. It's a great film about rock climbing in Yosemite and Chouinard plays a key part in it. He's a legend.
September 13, 2022
This is what happens to an Apple Watch when you're hand jamming up some of the stellar granite at Index, and you forget to take off your watch. Or you're just climbing in general and don't want to take off your watch because you religiously close those rings. I'm a little shocked the watch has lasted almost two years as it is.
So I'll be getting an Apple Watch Ultra, eventually, once this one kicks the bucket. Because I'm not gentle with these things. And the new waypoints feature would have come in super handy this past weekend while I was in Tieton.
Sure, Ben. Yea, I bet that's where the trail was. Right past that rock where a rattlesnake is obviously hiding under. I can't wait to hear another tail shake at me. Where are we again?
September 9, 2022
Charles Petzold:
Whenever a 2nd edition of a book is published, people ask “I already have the 1st edition. Do I need to get the 2nd?” It’s a legitimate question and I’ve asked it myself. Reading a 2nd edition after the 1st is not trivial: It’s a commitment of both additional money and additional time.
Sometimes a 2nd edition has mostly small changes: correcting a few mistakes, adding some more up-to-date information. But other times a 2nd edition involves some major upheavals. Perhaps the author had become dissatisfied with certain aspects of the 1st edition and wanted to fix them.
The 2nd edition of Code: The Hidden Language of Computer Hardware and Software falls into that second category.
"Code" is one of my favorite programming books ever (even though it doesn't really go into programming much). I've read it multiple times, and when I first started reading it, I'd make it only part way through before I had to stop and start over from the beginning. There's just so much good information in that that really builds on itself.
I'm super excited about the second edition, and I've had it ordered for months now, but I think I'm having to wait on a second printing or something. I'm guessing I'm not the only one.
I wished dearly that the Mac and Windows came with built-in BASIC environments. If that were the case, the language I would have discussed in this chapter would have been BASIC.
But I didn’t have that freedom. My hands were tied. There was only one real choice. My free will meant nothing, and I was forced into JavaScript.
So it goes. The only consolation is that I’m not the only person in the world forced into using JavaScript. There are literally millions.
This made me laugh.
August 9, 2022
I got the idea for these two filters a long time ago and even sketched out some prototypes a way back. But now that a convolution filter has made its way into the next release, I figure it's time to push these two out into the world as well.
They are pretty simple - and really aren't "filters" so much as they are "store and load" commands you can use in a layer's filter chain. The first is "Snapshot" and the second is "Snapshot Reblend". The first filter remembers the image as it's passed through it, and the second lets you composite that image back into the filter chain.
What's this useful for? Have you ever thought about how drop shadows are made? The most common way is to apply a gaussian blur + grayscale filter + the original image composited back on top. What if you wanted to make a custom shadow which keeps its color and instead of a gaussian blur, it uses a zoom blur?
Here's our deer again, this time with a transparent background. You can see that we're storing a copy of the image, then blurring it, and then drawing on top of that blur, which gives us a drop shadow to the image.
The Snapshot Reblend filter has a couple of options, including the ability to change the blending mode. If we change it to something like "Destination Out", we're essentially erasing where our original pixels were and are left with just the shadow, which is another useful effect. You see it above - but this time with a motion blur.
You could also use this technique with the "Fuzz Stroke" filter to get an outline of your opaque areas.
These effects have always been possible, but you had to use copies of your image on multiple layers and then things might get out of sync and it could be a mess to update. With the Snapshot and Snapshot Reblend filters coming in Acorn 7.3, we just made those annoying to update effects so much easier to do.
If you'd like to play with these filters right now, you can grab them from Acorn's latest builds page.