While my code gently weeps

It’s an observation and not a solid fact, but it surely looks like a significant part of software developers, at least those in the Apple ecosystem, are also aspiring musicians. From personal experience, any Apple developer’s conference of 100 attendees can easily assemble several bands, and in fact, there is one, James Dempsey and the Breakpoints, that has a raving fan base in the community and an album in iTunes.

As to myself, despite my mom being a teacher of music theory, solfège, and classical music in general, my interest in music only started when I became a teen.

And while I don’t think that teen hormones had anything to do with it, somehow from liking rap music I went on to develop a keen interest in learning to play an electric guitar. I remember well that I was mesmerized by the guitar work in En Vogue’s “Free your mind” and on Aerosmith’s “Amazing”. Now when I think of it, I never learned to play these two.

We also had a cool music teacher in grade 8. In those classes, we watched and analyzed Pink Floyd’s “The Wall.” It so happens that David Gilmour is also such an inspiring guitar player.

David Gilmour

David Gilmour

Long story short, I convinced my dad to buy me an electric guitar when I was about 15 and taught myself to play using some books, the Internet of mid-90ies, and a little help from my friends.

Speaking of friends, with some of them we formed a progressive rock band and started to write music. The band was called “Gray Eclipse.” Yeah, marketing wasn’t our strongest point, and we were all fans of Pink Floyd.

We went on to record a couple of demos in a local studio and, after running out of funds for that, my dad sponsored some recording gear. So we continued to record at my apartment (except for the drums, of course). These recordings resulted in a demo album which we were very proud of. We ordered cover art, burned our CDs, printed the cover on an inkjet printer, had a concert in a local community center and tried to get some recording deal. One label liked half of the songs, so we started to work on more material.

Unfortunately, our 18-yo keyboard player drowned in the sea, while heroically saving a mom and her daughter from the same. We became older, and adult life took over our time. Most of the recordings from that time are on SoundCloud. To this day I’m very proud of these.

We never came back together as a band, although my old bandmate and I started to work on a new song in the last year. Hopefully, we’ll get it finished and will be able to share it within the vast and lonely expanses of the internet.

I kept my interest in playing guitar and still have fun playing and occasionally recording stuff. Some recordings are available on the same SoundCloud, including covers of some of my favorite solos.

In 2015, I also recorded two videos of geeky parody covers. First was “Cocoa Police”, based Radiohead’s “Karma Police” with lyrics that only make sense to those who followed community discussions of the transition from Objective-C to Swift.

The second is a more accessible (for non-developers) cover of David Bowie’s “Space Oddity.” “App Oddity” tells about the ups and downs of indie app development.

In my most recent video, I recorded the solo from Jethro Tull’s Aqualung, which is one of my favorite albums.

Lately, I try to write and record in a jazz-rock fusion style, and that’s my current focus of creative musical work.

I wonder if the reason that so many indie developers are also musicians or are active in other arts, such as performing or writing, is that programming, especially as an indie, also expresses one’s creativity. As Steve Jobs famously said, it’s the intersection of technology and liberal arts that drives us.

Licensing changes and pricing

Today Bohemian Coding, an indie Mac development company, who develop the fantastic design application Sketch, announced a change to licensing and versioning scheme of the application.

They are trying something new for them, after moving away from the Mac App Store in the last year, to have full control over the licensing process, among other reasons.

As is expected, such changes bring a lot of response from existing customers. And many are unhappy with change. And they wrote about their disagreement in comments to the blog.

One thing I noticed is that Bohemian Coding’s announcement doesn’t include the price of the new license scheme. So customers can’t really know what they are going to pay. And so some assume that it’ll be $99 per year. Some argue that it should be $50 per year because previously major updates were about every two years. Some say that it should be based on upgrade pricing, which is indeterminate.

The truth it, is that I think Bohemian Coding should’ve announced the pricing structure in the same blog post. Yes, maybe they haven’t decided yet. But price is of such utmost importance to customers’ feelings towards such changes, that leaving it out is, in my opinion, a mistake. People have visceral, immediate response to pricing, on subconscious level.

Consider this: current new license of Sketch is USD$99. The license is for a major version that runs for about two years. Yes, maybe you bought the license 6 months before the new major version and then it’s less value (one thing that the new theme tries to avoid). In any case, taking this price into account:

  • What do you feel about the change to paying $99 for a year of upgrades to Sketch?
  • What do you feel about the change to paying $20 for a year of upgrades to Sketch?
  • What do you feel about the change to paying $49 for a year of upgrades to Sketch?
  • What do you feel about the change to paying $139 for a year of upgrades to Sketch?
  • What do you feel about the change to paying $79 for a year of upgrades to Sketch?

Did you get an immediate gut feeling of “that’s a rip-off”, “that’s a bargain”, “that’s fair”, “kinda OK”?

Maybe Bohemian Coding thinks that the have time to decide about the price because they have at least 6 months before people need to buy the new licenses. I know many people at Bohemian Coding, and they’re smart and passionate. But I wouldn’t suggest putting the announcement off until that moment. Look at what’s happened with Smile’s announcement of TextExpander 6 going to a subscription-based model. Lots of backlash from the customers and the media. Mainly because the people thought they got the price wrong. Then Smile adjusted the prices to a level that seemed reasonable to more people, especially to the existing customer base.

If Sketch announces the pricing now, they’ll remove the speculations and will still have time to adjust the pricing strategy before new scheme goes into effect, before first people are billed.

Pricing is hard. Pricing is psychology. Don’t let people guess what you pricing will be. Tell them the price, then observe the reaction.

Update:

The blog post from Sketch was updated with the pricing decision, after they got questions from customers. Now they have to watch the reaction and have a thick skin.

Can you play something?

I play guitars. Not professionally. And though I played in a band many years ago and we had a demo album and a small concert once, I was much worse of a player back then.

I write and play on guitars for pleasure. For me, it is both a form of meditation, a creative outlet and something that I can always challenge myself with and see improvement. It is a constant reminder that desire and practice make you better at that thing. And while other people often compliment me on my playing, I often feel like an impostor.

In my combined work & music room in the basement, I have three guitars, two electric and a classical. And some people who come to our house and see them (and the other audio equipment) friendly ask me “Can you play something?”

This question usually puts me in an uncomfortable position. I honestly don’t know what to play. Despite starting playing the guitar over 20 years ago, I don’t have a performing repertoire, and nothing comes to mind at these moments as to what I should play.

Should I try to impress with my half-baked jazz-rock fusion composition (which for me are one the heights of my achievements but most people won’t appreciate) or just play some chords to a song everyone knows. Or maybe I should play “Smoke on the Water” riff or, god forbid, “Stairway to Heaven”?

Should I have an “always-ready-to-please-anyone” repertoire?

Do you ever find yourself in a situation? If yes, how do you handle it?

Bug in OS X with Last Open Date in Spotlight and Quarantine flags

I’ve just filed a bug with Apple that affects one of Trickster’s core features and also affects all users of OS X, thought they might not realize or care about it.

The problems is related to Last Open Date metadata not being updated for files that have quarantine attribute set in the file system (either because they were downloaded from the Internet or because they were saved from a Sandboxed application, which apparently can also set a different kind of quarantine bit.

I first mentioned it at Apple’s developers forums at https://forums.developer.apple.com/message/66280 and have now submitted a proper bug report (rdar://23193803).

Here’s the contents of the bug report:

Summary:

Most files that are saved from sandboxed applications (or downloaded from the Internet) seem to have their quarantine flag set to some value. For some reason, for most of these files, Last Used Date (kMDItemLastUsedDate) metadata won’t be updated by Spotlight when this file is opened.

It appears that this problem started in OS X Lion (see Workarounds for quarantine bug in OS X Lion on CNET). I also noticed that the problem is not always showing itself. For example, if the first 4 digits are something like 0041 or 0042, the last used date will update. If it’s something else like 0001, it won’t.

I started a thread on it at Developer forums some time ago at https://forums.developer.apple.com/message/66280. No response so far.

Steps to Reproduce:

  1. In Finder, go to Downloads folder and add Date Last Opened column and sort by it in descending order
  2. In Safari, go to http://www.apparentsoft.com, right click on ImageFramer icon and “Save Image to Downloads”.
  3. It should appear on the top of the list in Finder as the file is created with the open date = date added.
  4. Open other files in Downloads to move them to the top of the list (though it might not work because of this bug). If no files move to the top, wait until the clock changes to a different minute.
  5. Double click the downloaded PNG from Finder. It should open in default application, like Preview.

Expected Results:

Last Open date of the PNG file is updated to the time in step 5.

Actual Results:

Last Open date doesn’t change.

Version:

10.11.0

Notes:

Removing the quarantine attribute from the file and then opening it will bring it to the top and update its Last Open date.

Removing of the attribute can be done in the Terminal with:

xattr -d  com.apple.quarantine <path/to/file>

TL;DR Programming

TL;DR, an abbreviation for “Too long; didn’t read”, is Internet slang used in reply to a lengthy online message. It is also used at the beginning of a summary of such a message. — Wikipedia.

TL;DR

This essay explores TL;DR in programming context.
It tries to find out if the trend of TL;DR behaviour spreads to software development as well, and what are the dangers of that.
It’s about Bob. It’s not about you. Good programmer don’t TL;DR. Good programmers read.

Enter Bob

Robert Kode1 is a long-time programmer. Bob loves to code. He was programming since his early teens and is fluent in six languages. He speaks only English but can read and write the other five. These five are not used for speech.

Over the years Bob developed good know-how in many areas of software development and has an intuitive understanding of many concepts. He can crunch code fast and his code is fast.

It just so happens that Bob is a TL;DR programmer.

Too Long; Didn’t Read

TL;DR comes from the increasingly short attention span of today’s Internet generation. Do programmers also fall victim to the short attention span which leads to TL;DR?

Bob believes that programming is about writing. Writing code. Writing code comments. Writing commit messages.

Bob was assigned to write a new module for an application. He skimmed the requirements for the module. He skipped half the paragraphs in the email that described some focus points. He didn’t get back to them when he churned out lines of code.

Eventually, Bob’s module implemented half the cases it was supposed to support. In some cases, it did what it wasn’t meant to do. QA filed a ton of bugs and Bob found himself in Tester Driven Development mode.

Now he cannot afford to skip reading the bug reports.

Too Lazy; Didn’t Research

How much research had to be done before writing the first line of code for Apollo Project?

Bob’s got years of programming experience, as I said, so he relies on his intuition. Oftentimes more than he should.

This time our Mr. Kode got the kind of task that he liked. He was supposed to implement a peculiar data processing algorithm for, well, the data.

Bob had prior experience writing some algorithms and was excited about the new challenge. He conceived the general approach of the algorithm as he was reading the requirements. He might have overlooked some of the intricacies of the requirements (see above) so it didn’t help either.

Bob went right ahead to writing it. After half a day it kind of worked. There were some edge cases that required attention. It was also slow. It also didn’t scale well for high amounts of data. Another day went on trying to optimize it. Then another day. Then it started giving the wrong results. And crashing on the edge cases.

Robert didn’t invest the time to think through his idea before developing. It’s not easy, so he trusted his intuition instead.

Bob also didn’t run a relevant search on Google. If he had, he might have stumbled upon a paper, or a blog post, or an answer on Stack Overflow, any of which might have helped him select and implement the right approach. Research is hard. Bob didn’t research. Bob was a bit too lazy.

They say good programmers are lazy. But they say it for a different reason.

Q&!A

Q: Does TL;DR programming lead to the culture of Stack Overflow questions of “please give me code to do X”?

Q: Do we see more bugs today because of TL;DR attitude? Including critical bugs like Boeing 787 bug which could bring the plane down in one case? Or more security omissions?

Q: How many programmers just try things out until they work, sometimes without understanding the theoretical basis of why and how? Or choose a simpler, inadequate solution?

Q: Could this also apply to other aspects of the software business, like product and project management, software architecture and market research?

Q: Are you a little like our Bob?
A: I am

👉 Discuss on Hacker News.


  1. Fictional character ^

Benefits of providing customer support

Doing customer support can bring more benefits than just another happy customer.

An interaction with a customer of your application can lead to:

  • Understanding what the customers want from your application
  • Learning where customers learned about your application
  • Ideas for future features
  • Recognizing which problems return with different customers
  • Leads to other customers
  • New vectors for marketing
  • Fixing the underlying issue for the above problem or otherwise reducing this support request in the future
  • Writing an FAQ article
  • Creating a how-to-video for the issue
  • Publishing the above video on YouTube
  • Publishing an article explaining this video on the blog
  • Tweeting and posting on Facebook about the article on the blog
  • Mentioning it in the newsletter as a tip, perhaps
  • Writing an article on the blog about how customer support can benefit you
  • Tweeting about the above article

Song: App Oddity

I made another musical video. This time I remade David Bowie’s excellent “Space Oddity” with lyrics on the subject of ups and downs of indie app development. It should be more accessible to the general population than my previous video about the programming language Swift.

Lyrics are embedded in the video but here they are in full:

App Oddity
~~~~~~~~~~

App Review to Coder Tom
App Review to Coder Tom
Take your caffeine pills
And put your headphones on

App Review to Coder Tom
Commencing countdown,
you’re logged on.
Check submission
and may Jobs’ love be with you

This is App Review to Coder Tom
You’re featured on first page
And the web sites want to know how much you’ve made
Now it’s time to go out and celebrate

This is Coder Tom to App Review
I’m stepping through the doors
And my head spins in a most peculiar way
And the App Store’s very different today

For here
Am I sitting in my basement
Far from outside world
Why do I feel blue
Is there something I can do?

Though I’m past
one million free downloads
I can’t see many sales
And I think I might've chosen wrong way to go
Tell my customers I care, 
'cause they should know

App Review to Coder Tom
Your app is dead,
there’s something wrong
Can you fix it Coder Tom
Can you fix it Coder Tom
Can you hear us Coder Tom
Can you…

Here am I lying in my basement
Far from outside world
All I feel is blue
And there’s nothing I can do

On Efficacy of Business Books

These days I’m reading what appears to be a fantastic book by Daniel Kahneman, called “Thinking, Fast and Slow”. It’s about how the intuitive and analytical minds think and interact. It’s about statistics and the fallacies of our minds with regards to statistical intuition and other thinking fallacies.

The quotes in the image are just a sample of quotes from one chapter. These specifically refer to the efficacy, or rather lack of thereof, of a specific kind of business books, those that try to teach the readers how to be successful in business by analyzing previous successful businesses, as if their management was somehow especially smart. The thing, as Kahneman explains, is that luck plays a much more important role than a specific CEO’s abilities are and eventually, over time, the companies come to some middle ground because luck averages out.

In short, read the quotes. Better yet, get the book.