March 26, 2020
Let us not forget
The sun comes up,
and the world still turns.
There is so much bad going on,
so much uncertainty.
For many of us,
the right thing to do is to just stay put,
and not get in physical touch with others.
That does not mean that you shoult not notice good things.
Perhaps we should even more than usual?
Beautiful, sunny spring days.
The calm I feel has settled with fewer people out and about.
There could be even more of a storm coming any minute, but if so I have even more reason to appreciate the calm while it lasts.
I have been working from home for two full weeks and have been away from the office for another few days, but I still truly enjoy working from home. Somehow, we managed to get ourselves pretty well set up for everyone working remotely well before this situation became a thing. Now, I wonder if the office will remain even emptier on average once this finally passes.
This situation makes clear just how large my hobbit tendencies are. As long as I have a decent connection to the internet and am allowed to get some fresh air, I feel like this is a very gentle restriction of my life indeed.
Which is a big damn luxury of a situation to be in.
But I would do more harm if I did not appreciate the details I notice among all the clearly bad things.
March 23, 2020
Books I have read
Books and other literature I have read, in, somewhat uncertain, reverse chronological order. The list starts from the summer of 2008, and my main purpose with it is to be able to see what I have actually been reading. I do feel that I read many quite good books, but I never seem to be able to recall what I have recently read when asked for recommendations.
- Take control of working from home temporarily, by Glenn Fleishman
- Norma, by Sofi Oksanen
- The soul of a new machine, by Tracy Kidder
- Under Stalins diktatur, by Signe Kaskela
- Game engine black book: Doom
- How to make sense of any mess, by Abby Covert
- Creative selection, by Ken Kocienda
- The leprechauns of software engineering, by Laurent Bossavit
- Algorithms to live by, by Brian Christian and Tom Griffiths
- Afrikanen, by J.M.G Le Clézio
- Mooncop, by Tom Gauld
- The levers of power, by Jason Fry
- A new dawn, by John Jackson Miller
- Bottleneck, by John Jackson Miller
- Mercy mission, by Melissa Scott
- Natural born heroes, by Christopher McDougall
- Making sense of color management, by Craig Hockenberry
- Tarkin, by James Luceno
- The year without pants, by Scott Berkun
- Batman - the killing joke by Alan Moore and Brian Bollard
- What if? by Randall Munroe
- Käre ledare - min flykt från Nordkorea, by Jang Jin-Sung
- Äventyrsspel - bland mutanter, drakar och demoner, by Orvar Säfström and Jimmy Wilhelmsson
- Take control of Audio hijack, by Kirk McElhearn
- Pro HTML5 games, by Aditya Ravi Shankar
- So, anyway …, by John Cleese
- The Martian, by Andy Weir
- Extremely loud & incredibly close, by Jonathan Safran Foer
- Svärdet och spiran, by Ken Follett
- What is code, by Paul Ford
- Marina, by Carlos Ruiz Zafón
- Becoming Steve Jobs, by Brent Schlender and Rick Tetzeli
- Gone girl, by Gillian Flynn
- Thinking, fast and slow, by Daniel Kahneman
- Expeditionen - min kärlekshistoria, by Bea Uusma
- Världens vinter, by Ken Follett
- Generation 64, by Jimmy Wilhelmsson and Kenneth Grönwall
- Inferno, by Dan Brown
- Yellow submarine, English interactive edition
- Giganternas fall, by Ken Follett
- Ensam i Berlin, by Hans Fallada
- Stora löparboken, by Hans Wiktorson
- Creativity, inc. by Ed Catmull with Amy Wallace
- Nionde arméns undergång - kampen om Berlin 1945, by Niclas Sennerteg
- Version control with Git, by Jon Loeliger and Matthew McCullough
- Life of Pi, by Yann Martel
- Ravioli, by Klas Östergren
- I döda språks sällskap, by Ola Wikander
- Berättelser från Engelsfors, by Sara Bergmark Elfgren and Mats Strandberg
- En av oss, by Åsne Seierstad
- The great Gatsby, by F. Scott Fitzgerald
- Living with someone who's living with bipolar disorder, by Chelsea Lowe and Bruce M. Cohen
- Out of time in Wan chai, by Fan Tong
- Mitt liv som porrstjärna, by Puma Swede and Jan Ekholm
- The complete works of H.P. Lovecraft
- How to get filthy rich in rising Asia, by Mohsin Hamid
- The new Avengers volume 1: Breakout, by Brian Michael Bendis and David Finch
- On writing well, 30th anniversary edition, by William Zinsser
- Bipolar II disorder, modelling, measuring and managing, second edition, by Gordon Parker (editor)
- Eat and run, by Scott Jurek and Steve Friedman
- Knockout.js succinctly, by Ryan Hodson
- Clean code, by Robert Martin
- Peopleware, by Tom DeMarco and Timothy Lister
- The mythical man-month, by Frederick Brooks
- Code complete (second edition), by Steve McConnell
- Mona Lisa overdrive, by William Gibson (yes, re-read)
- The art of readable code, by Dustin Boswell and Trevor Foucher
- Count Zero, by William Gibson (again, re-read)
- Neuromancer, by William Gibson (re-read, but last time was 15 or so years ago …)
- Churchill, by John Lukacs
- Tito - folkets diktator, by Björn Kumm
- Tweeting the universe, by Marcus Chown and Govert Schilling
- Andra världskrigets historia, by Liddell Hart
- Jag är din flickvän nu, by Nina Hemmingsson
- The bipolar disorder survival guide, by David Miklowitz
- Metro 2033, by Dmitry Glukhovsky
- C++ direkt, by Jan Skansholm
- Test-driven iOS development, by Graham Lee
- Sunset park, by Paul Auster
- Pushing ice, by Alastair Reynolds
- The difference engine, by William Gibson and Bruce Sterling
- Born to run, by Christopher McDougall
- Idea man, by Paul Allen
- Med Hitler till slutet, by Heinz Linge
- Insanely simple, by Ken Segall
- Lyckohjulet, by Jonas Hansson
- The art of deception, by Kevin Mitnick
- Neonomicon, by Alan Moore and Jacen Burrows
- Doggy Monday, by Maria Sveland
- Steve Jobs, by Walter Isaacson
- The arrival, by Shaun Tan
- Maria & José, by Erlend Loe och Kom Hiorthøy
- Stupid white men, by Michael Moore
- The design of everyday things, by Donald A. Norman
- Being geek, by Michael Lopp
- The elements of style, by William Strunk and E. B. White
- The Authoritarians, by Bob Altemeyer
- Seven languages in seven weeks, by Bruce A. Tate
- A mind in prison, by Bruno Manz
- Do androids dream of electric sheep? by Philip K. Dick
- Var är min syster? by Sven Nordqvist
- Svenska skrivregler, by Språkrådet
- Endless nights, by Neil Gaiman
- Ipad programming - a quick-start guide for Iphone developers, by Daniel H Steinberg and Eric T Freeman
- Textmate: power editing for the Mac, by James Edward Gray II
- In cold blood, by Truman Capote
- Harry Potter and the deathly hallows, by J.K. Rowling
- Harry Potter and the half-blood prince, by J.K. Rowling
- Nausicaä of the valley of the wind, by Hayao Miyazaki
- The catcher in the rye, by J.D. Salinger
- The Wake, by Neil Gaiman, part ten of the collected Sandman comic.
- Vad jag pratar om när jag pratar om löpning, by Haruki Murakami
- Vitt ark, by Simon Eidorson
- The pomodoro technique, by Francesco Cirillo
- The Harry Potter series part one to five, by J.K. Rowling, as audiobooks.
- Lika barn..., by Simon Eidorson
- The Kindly ones, by Neil Gaiman, part nine of the collected Sandman comic.
- The lost symbol, by Dan Brown
- Den som dödar draken, by Leif G.W. Persson
- Lev livet - det går inte i repris
- Coders at work, by Peter Seibel
- Beautiful code, edited by Andy Oram and Greg Wilson
- Iphone SDK development, by Bill Dudney and Chris Adamson
- I have life, Alison's journey, by Marianne Thamm
- No logo, by Naomi Klein
- GUI bloopers 2.0, by Jeff Johnson
- The angel's game, by Carlos Ruiz Zafón
- Snow crash, by Neal Stephenson
- Spook country, by William Gibson
- Bone, by Jeff Smith
- Jpod, by Douglas Coupland
- World's end, by Neil Gaiman, eigth part of the collected Sandman comic.
- RESTful web services, by Leonard Richardson and Sam Ruby
- Test-driven development by example, by Kent Beck
- The knowledge-creating company, byt Ikujiro Nonaka and Hirotaka Takeuchi
- Compilers - principles, techniques and tools, by Aho, Lam, Sethi and Ullman
- Structure and interpretation of computer programs by Hal Abelson, Gerald Jay Sussman, and Julie Sussman
- Pragmatic thinking and learning - refactor your wetware, by Andy Hunt
- Practical common lisp, by Peter Seibel
- The algorithm design manual, by Steven Skinea
- Brief lives, by Neil Gaiman. The seventh part of the collected Sandman comic.
- Blink, by Malcolm Gladwell
- Mahatma!, by Zac O'Yeah
- Gomorra, by Roberto Saviano
- Inshallah, by Donald Boström
- Montecore, by Jonas Hassen Khemiri
- Hemsöborna, by August Strindberg
- Everything is illuminated, by Jonathan Safran Foer
- The time machine, by HG Wells
- Egalias döttrar, by Gerd Brantenberg
- The secret history of Star wars, by Michael Kaminski
- Learning Cocoa with Objective C, by James Duncan Davidson
- Cocoa programming for Mac OS X, by Aaron Hillegass
- Människa utan hund, by Håkan Nesser
- Tyskungen, by Camilla Läckberg
- Carolus Rex, by Ernst Brunner
March 09, 2020
I spent the weekend in the distant north, recording episode 200 of Björeman // Melin, digging through a lot of cool gadgets, and having a few drinks in the process. The episode is epic in length, but all edited and ready. Unfortunately, the whole infrastructure powering the podcast kind of collapsed onto itself the day after recording (which on the other hand went off without a hitch), so actual publication might be a while longer. You should have been there as it happened.
I got a nice little retro memory with me back home:
Mac OS X 10.2 "Jaguar" was the first version of OS X that entered my family, my first taste of that lickable Aqua interface, the starting point of the thought that maybe, just maybe, my computing life would not be all Windows PC:s.
Personally, I could have lived with that furry X being the logo of the OS for a lot longer. Panther was better at everything, but the X was all metal and business.
Remember when Java was a feature?
If not, you did not miss out.
(I was also forced into accepting a Mighty mouse. I will use it to scare future generations.)
Really, I am still recovering from the weekend. Travel and good times take their toll, but I also managed to get a new minor version of Podcast Chapters out, fixing a crash bug which made affected users unable to save their podcast. There is more work to do around that code (having to do with the reading and writing of comments), but not crashing feels like a good thing to do while I make the code as nice as I want it to be.
Once again, I have been humbled and encouraged by just how nice and helpful the users of Podcast Chapters actually are. Thank you all, again!
While testing, I discovered Macos has become even more podcast-metadata aware lately: when I hit spacebar on my exported MP3 to listen using Quicklook, the playback controls include a chapter button on the right-hand side! Pretty darn cool. Comment text shows up in Finder info dialogs, too.
ID3 metadata: it is a thing. I happen to have an app to sell if you want more of that …
March 01, 2020
The big 2.0
That all-Swift version of Podcast Chapters I mentioned is out.
Hopefully everybody will notice some nice user-facing features, and nothing of the actual code changes.
I decided to splurge and jump to 2.0 for this, as much for getting magical thinking about the number out of the way as anything else.
Fun fact: the all-Swiftiness is a sort of half-lie. The non-Swift code is not actually used for anything, but I kept it around just to not make any last-minute radical changes. That turned out to be a good decision, because when I tried deleting the Objective-C code just now, I drowned in a wave of errors. Things like NSImage and others were missing all over the place.
The Objective-C code is exposed to Swift via a bridging header, and that also seems to expose all my Swift files to all the imports made in the Objective-C headers. It most likely makes total sense to anyone more up to speed on the whole language-bridging concept, but it caught me by total surprise. Luckily it was quick to isolate the cause, and the solution is of course to go back and add the missing imports to each file. It just takes a little while.
I am a little bit surprised a strict-ish language like Swift, running inside Apple's own environment, allows a thing like this to happen without any kind of warning. Again, it most likely makes all the sense in the world on a technical level, but removing an unused framework in a different language and getting a cascade of errors just feels strange. Swift basically let me write using deeply hidden imports for a very long time, and the effects take longer to repair the longer you let it go on.
Well, yes, I see how it makes sense now. The bridging header is set up for the whole project as a precompiled header, and I recall from my C++-adjacent days how precompiled headers count as added to all other files. And, of course, how that meant a whole lot of thoughtless work to undo when moving to an environment less friendly to the precompiled header concept itself.
Anyway, time to go clean that up nicely and make "all Swift" be true in all ways.
(Perhaps I will actually write about the version and its features the next time, who knows?)
February 23, 2020
An all-Swift production
Ever since I was given the opportunity to adpot Podcast Chapters about a year ago, I have been working to make the code my own.
This has meant everything from small rewrites plainly for my own understanding to removing external dependencies and writing the required parts of them myself.
I am now nearing a fun milestone: the next update of the app is likely to be all Swift. That feels like a nice milestone, but it is more like the cheerful face of the actual important change.
The actual important change is that I will have a single coherent (well, at least once I clean up my own thoughts a bit more) engine for reading and writing all the ID3 information Podcast Chapters is all about. One engine which I, theoretically, know every in and out of. This should make it easier for me to make further changes and updates, and also pave the way for some exciting experiments in the future.
I have a rather long list of things I would like to try in the app, and not being all Swift felt more like an annoying hindrance the more I thought about it.
My mind is of course likely to generate some new annoying hindrance sooner rather than later, but for now, at least, I feel like the next thing I will start in the app will be one of those exciting new features.