July 18, 2019
So Apple stopped selling the Macbook. The one-ported, fanless computer which was also first with everyone's favorite too-thin-for-its-own-good-keyboard. The computer on which I happen to be typing this.
Strange, really. I bought this machine pretty much as soon as I could, and it has been my main personal computer ever since. My first-generation machine lasted all through the life of the entire product line, as it were. I had a short period of one key being wonky, but other than that I have not had a single problem. It has been chugging along through many, many podcast recordings and even more editing sessions.
MP3 encoding must rank unusually high among this machine's total CPU cycle usage.
I have rarely missed additional ports, seeing it as more of a challenge and finding that I rarely need to plug things (especially more than one thing) in when away from my own desk. A more common wish has been for that port to be more powerful, like a proper thunderbolt port, so that I could connect more things more reliably when working through a dock or other hub-like thing. That could also have meant me buying a 4K monitor years ago, so perhaps my wallet is secretly grateful …
Yes, I want a faster machine sometimes. Most often when encoding those long podcast files.
But I am still completely in love with the size, weight, and complete silence of this machine. Every other computer feels like a battleship next to it, and sometimes sound like one as well.
When the time comes to replace this machine, I have a very hard time seeing the replacement being anything but the smallest and lightest laptop Apple makes at the time. If I am to own a laptop, I want it to shine at being easy to take with me. So if it broke down today, a Macbook air would be the obvious choice.
Perhaps more interesting to think about is what would happen if I decided I could stick with an Ipad for portable needs. Suddenly, a whole new world of questions would open up about which kind of desktop Mac would be best, or most fun, for my needs.
No, it would not be a Mac pro. But both the modern Mac minis and plenty of Imacs are definitely within the reasonable-if-you-squint-range.
I will drink one up (pour one out? Around a computer? Are you out of your mind?) for the Macbook adorable. It is a great thing the whole Mac lineup feels exciting again.
June 15, 2019
I have had a great deal of fun with my Playstation VR, but I have always wanted more as well. More options, more experiences, improved featuers, and, of course, the ability to not have to worry about cables. Had I owned a suitably powerful Windows PC I would probably have got myself a Oculus rift or HTC Vive at some point, but being a user of Macs (and a very slow one outside of work at that) the combined price of headset and powerful PC made it quite easy to resist.
Then I heard talk of the Oculus quest, and my curiosity clearly became much too great. I ordered it pretty much as early as I could, and I was deeply impatient waiting for delivery (especially since a first delivery attempt failed and was blamed on nobody at the well-manned office answering the call at the door).
There will be a lot of comparison with the Playstation VR here, simply because that has been my most used VR experience by far.
Why so excited?
So it's another VR headset. I already have the Playstation VR, so why did I splurge for the Oculus quest?
This is a big part of the reason:
That case (which is a separate purchase) is larger than it appears in pictures, but it does fit everything. The headset, the two wireless controllers, the charger with cable (which also has enough power to charge my Macbook), and the earbuds I throw in so as not to broadcast games to everyone around me. If you skip the earbuds, this is a completely wireless, completely untethered VR experience. Somewhat baked into this is the fact that the Quest tracks its own position in the room, you are not required to set up beacons or cameras or other exernal points of reference.
When you start the Quest in a new location, a camera in the headset shows your surroundings and all you need to do is confirm or adjust the floor level (which you do by putting one controller on the floor), then point and click to draw the area within which you want to move around. The process is fun and only takes seconds. It has an Apple-level of polish to it, and I feel that stretches throughout the whole Quest experience.
Okay, to be fair, Apple would probably have designed the straps differently, but I am not sure they would automatically have worked better. The Quest straps are sturdy rubber and use velcro for seamless adjustment. Not an Apple feel, but it works really well. There is also enough bultin give that you can easily take the headset off and put it back on without needing to readjust it, which feels surprisingly liberating compared to the Playstation VR where some adjustment is always necessary.
I also find it easier to get a good, sharp picture in the Quest than in the Playstation VR. I have no problems wearing glasses, and I also think the sharp picture I see has more detail on average. I think the two main factors are somewhat increased resolution, and more use of antialiasing. I would not bet on there actually being more details in the way of polygons or texture resolution, but the Quest makes good use of what it does have.
The Playstation VR headset is more comfortable though. It sits much lighter on the face and head, and spreads its weight more evenly. It also does not get warm when in use, while the Quest noticeably heats up itself and part of my face. I am also pretty sure I can hear a fan whirring inside the Quest when I start it. In short: the Playstation VR makes the most of not needing to pack all its hardware (and power supply) into the headset itself.
The Quest includes two of these … things. The controllers are mirrored, so there is a dedicated left and right controller, and during initial setup the headset can point out which controller is where so you never have to switch around inside a game. They are powered by a single AA battery each, somewhat to my surprise. I had half assumed builtin batteries and USB charging, but no.
On top of each is a thumb stick, X and Y buttons and a Oculus button use to re-center (when held down) and to return to the home screen/room (by tapping). On front is a trigger for your index finger and another button for your long finger.
The thumb stick and top buttons are not pressure sensitive, but they do register a touch. This enables the controllers to simulate quite a bit of hand movement, which is used in several games I have tried. Without touching any buttons, the hand will be fully open. Place the thumb on a top button and the thumb is moved down. Press the trigger to bend the index finger, then press the long finger button to bend the other fingers. Voila, closed hand. Release the trigger button to point at stuff using just the index finger. It all feels very natural pretty much right away, and games make good use of the possibilities.
It is only 40 minutes or so, the first of a series of "episodes", but Vader: immortal is a ILM-made Star wars story you should play as soon as you can. You get to use those finger possibilities of the controllers immediately, as you enter the game an unnamed smuggler seated in the pilot's seat of your ship while your robot co-pilot tells you it is time to jump to hyperspace. How? Flip those nice switches on the left up using your index finger, then grab that nice big lever on the right and push it forward.
That felt neat.
Now, imagine just how good it feels when you get to wield a light saber.
Some things need no tutorials.
May 30, 2019
Podcast chapters 1.5 is here
… and 1.5.1 is right around the corner. (Correction: it too is out! App review is not as slow as it used to be.) Podcasters are clearly very good at delivering encouragement and eminently detailed problem reports, often in the exact same Twitter message. In this case @davidarribas provided not only a text description, but also a screen recording, screenshots, and the exact MP3 files involved in the process.
Not even I could manage to not find the error quickly with such excellent data. And so 1.5.1 is coming, submitted only two days after the big 1.5.
So what is the thing with 1.5?
A rewrite of most code handling reading and, especially, writing of ID3 metadata from and to MP3 files.
You know, the main thing the app actually does.
Both Thomas and I had been thinking independently of starting this job before I even took over. Podcast chapters used a surprisingly wide array of libraries and techniques to get metadata out of and into files, and while it worked well there was a lot of room for a cleaner solution. The major downside was in doing a lot of work for no immediate benefit to users, but the upside would be a nicer codebase and greater ease of adding new featuers. A little difficult to motivate in the moment, but of great possible benefit in the future. And I had another good driver to get me going: learning about the domain.
I now know where stuff is and how it fits together.
Doing the rewrite has had the great benefit of opening a lot of black boxes for me. If I knew all about the ID3 standard and working with files at the byte-level, I may have been able to move very fast with the old codebase. But I did not, and writing code to handle it has taught me the ins and outs and, eventually, increasingly, made them feel easier to work with. I have removed a lot of uncertainty in the form of code I did not know very well, and I have added the knowledge and excitement of being able to change and add things easily.
The black box is open, and I have a pretty long list of fun stuff to look into.
Restoring episode summaries, for example. I thought this would be like working with any other text, but it turns out to be a little bit more interesting, especially if I want to be a good metadata citizen and not remove other text a user may have put in the file through some other app. Before, that kind of thing looked strange, error-prone, and somewhat tiring. Now that the box is open, it is plain fun to think about how to do it best. (And then fiddle back and forth with reading and writing actual bytes, reading the ID3 spec with a magnifying glass trying to figure out what exactly is happening and why.)
May 12, 2019
Podcast chapters 1.5 approaching
It has been a little while now since I took over development of Podcast chapters. Close to two months, in fact.
From the outside the only visible events have been one minor update fixing a small bug and a couple of changed references to owner and contact details. On the inside, I have been slowly but surely (well, sometimes quite hesitantly, to be honest) hammering away at the core of the app, mainly doing work I hope no end user will ever notice other than there being slightly fewer problems. The real point is cleaning up some technical debt and make a whole lot of fun stuff possible going forward.
So: 1.5 is coming. Big thing for me, hopefully not for anyone else.
Well, okay, it will also fix a couple of bugs and add a minor feature or two.
For those excited by code like myself, I do plan to talk about the story so far once this version is out. But first things first: finish thing, then talk about it.
The thing I really wanted to write about was having a couple of those wonderful moments where a bug is finally found, things click and become just that much clearer than they were before. Being in such unfamiliar territory, I have had minor moments like that along the whole way, but the last few days they were of the kind where that one minor problem is fixed and a whole chunk of code starts to just work. No matter how small the fix was, the combined relief and sense of accomplishment is just incredible.
(And in this particular case, once found the fixes have been truly minimal. We are talking being off by a byte and such things.)
If you read this and happen to be into podcast production involving chapters and other ID3 metadata: what would you like in a good chapter editing app for the Mac? What should it do to fit well into your workflow (new or old)?
May 01, 2019
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.
- 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