Monday, October 26, 2020

software art not software engineering?

David Heinemeier Hansson (creator of Ruby on Rails and CTO of Basecamp) in an article Computers Are Hard 

This whole self-loathing a lot of software engineers engage in is entirely unproductive and is never going to be resolved. The idea that software development is a young industry and if we just give it another 30 years of ISO compliance or whatever rigor, we’re going to arrive at a romanticized notion of engineering they have in aerospace, or elevators, or bridges… no, we’re not. This is a fundamentally different domain that requires a fundamentally different approach.

We already have many of the answers. We’re simply afraid of embracing them. For example, in traditional engineering estimates are a huge part. Things run on estimates and on critical path diagrams because that’s simply the way you build a skyscraper. You don’t get to reconfigure how the pylons go after you pour the concrete. Software development is nothing like that. Software in many ways is far closer to the creative process of writing, game making, movies. Experiences where you design the unknown and you don’t know whether it’s good or not until you see it.

Look at movie making. We’ve been making movies for a hundred years. Haven’t we figured out the creative process yet? No! We haven’t. You can take a great director, a great cast, and still make a totally shitty movie. Versus in building, largely speaking, if you take a great architect, a great engineering firm, and a great general contractor, you’re gonna arrive at a building that works. You may make minor mistakes but the basic structure is going to be sound, unless someone makes a completely negligent error. In movie making, in music, in software things fail all the time. Even when good people who know the techniques of how to build things get together and work on something, they still end up failing.

Also I loved his take on programming languages:
Yes, for a person. A programming language can be better or worse for an individual. I think they can also be better or worse on an objective level, but that discussion is almost uninteresting. The interesting discussion for me is one of personal truth.
I wonder if that can be extended to other parts of software development, or if I'm just making excuses for my seeming lack of thoroughness - like my relative skepticism about unit-level testing vs other devs looking to it as such a holy thing, or even my lean into make whenever it comes into make vs buy. I think there is a chance that some of my preferences don't scale so well; that I'm pretty good at lone wolf projects (and have ones that have survived for decades!) but some of my mojo is less good when things need to massively scale, like team-wise or across distributed systems.

It's funny that Hansoson makes so much sense to me when I really didn't enjoy briefly playing with Ruby on Rails, the "assuming everything you do is this basic CRUD operation and so can just be more of a configuration than regular coding... but I'm not sure if I really think that stance is wrong (and hard to customize when it's not a perfect fit) or just less fun. 

Sunday, October 25, 2020

atomic music and a gripe about Apple's music search

Apple got its hooks into me in 2004 when I bought my first iPod and ripped my entire CD collection.  At the time I wrote

Being able to put my entire CD collection in such a tiny little box...it's pretty amazing. But besides the road music and trendy group identification, I'm hoping it will bring me back to my music collection in a way I've lost. I just haven't been listening to CDs that much lately. Of course, it won't be like the old days anyway; I'm not much of a music purist, but it seems like the iPod encourages people to treat songs as free floating atoms, not as part of larger album molecules.

Since the days of mixtapes, I've realized that a typical album that I like has 2 or 3 great tracks and 7 or 8 songs of filler.  So I went through all those CDs I ripped, and rated each song, and only 3 stars or above made it onto the limited space of my portable device.

Shortly after started the golden age of music for me - able to purchase new singles at a buck or two per pop (Eventually I started recording the new music I added each month - I like to focus on new songs in my collection before they get lost in the 3000 songs of shuffle.) I like paying artists for their music, but I don't like playing for songs I'm not going to listen to. 

Apple's smart playlists kept me loyal to iPhone over Android - other devices could surely carry and play my MP3s, but would they make it easy to get this reverse-chronological-order playlists-by-rating? It was never worth the uncertainty. 

So I'm wary about Apple's continued support for my prefered ways of living with music. A few years ago iOS dropped the ability to do star ratings on the device (in lieu of a simpler heart/no heart system) but user protest forced them to bring it back (though it's now an extra tap or two away than it was)

Plus streaming seems to be the way of the future - users love the selection and flexibility, and companies love collecting rent.

And, following the loss of the aux jack and a new emphasis on magnetic charging,  I'm be surprised if my iPhone in 5 years had ANY socket - and since I like to keep my files nicely backed up on my laptop, I have to hope there's some equivalent to the USB syncing I now enjoy.

But there's another, odder problem - Apple is just not great with search, even on its own devices. I couldn't remember the title to Rilo Kiley's "A Better Son/Daughter", I just remembered the term "better". I don't know if it's because I have a lot of playlists labeled "better" but for some reason I was only seeing albums and playlists, not song results... and it seems like the gadget cuts off at 20 search results. Searching for "a better" found it, but still, what is this crap?

The new "Music" app on desktop had different sections for Song, Album, Playlist search results so I could find my stuff. But still, their 'iTunes Store' search is weaksauce. It craps out at 100 results, and ends with the insulting 

Less relevant items are not displayed. To narrow your results, use more specific search terms.

Sometimes that is literally impossible to do! If you are trying to browse for a specific version of a well-covered song, or a song with a short name, you lack the information to add in more search terms - and it's just a flat text box, I don't think think there's a way to say 'only where the song title matches', or 'artist name only'. 

Such a simplistic search box and limits on results is an ok 80/20 solution but sometimes that missing 20 is really annoying. 

Monday, October 19, 2020

today's news as seen on ipads in 1995

In October 1995, Wired magazine had an interesting special issue: "Wired Scenarios 1.01: the Future of the the Future." One part that really stuck in my mind was "A Day in the Life", four two-page spreads with first person perspectives of people looking at October 19, 2020's - today's! - news on their distinctly iPad-like tablet devices.

The article says "Industrial Design and Alias work by Lunar Design" and attributes photos to James Porto. I can't find too much information on this article, or in fact, the entire issue --it seems like the thing was made when Wired was still uneven about getting its material online. The design work is pretty cool though -- with the exception of the "Porsche Cortex" they're not quite as grindingly minimalistic as the iPad. The Swatch one seems to be designed for bicycling, and the "SonyShack" device has a custom button for the wagering/betting that all the models support.

In trying to dig up information on this article I found a 1998 Digital Systems Research Center report on The Virtual Book, that reminded me the concept wasn't entirely new: the movie and novel 2001 had the "Newspad" (Commentators in February of 2010 loved pointing this "ripoff" out, making fun of the name 'iPad', and generally predicting it would be a big flop) and there was also Alan Kay's 1968 Dynabook concept. (Also some interesting contact between Kay and Steve Jobs...)







Of course, there was another, arguably more memorable feature in that article that seems weirdly on topic: the nightmarish semi-apocalyptic scenario "The Plague Years: 1996-2020" (with its (at times badly) photoshopped yet evocative images of a 747 being torched at Singapore airport (to try to contain the "Mao Flu"), corpses floating in a bay ala Katrina, and United Colors of Benetton ad sporting a rainbow of gas-mask/hazmat ensembles). Andrew Stern did a set of scans here

Friday, October 16, 2020

sococo - virtual office space

A current coworker mentioned his previous company used, and like, sococo - a kind of faux virtual presence thing:

 <iframe src="https://player.vimeo.com/video/265659995" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>

<p><a href="https://vimeo.com/265659995">Sococo Explainer Video</a> from <a href="https://vimeo.com/sococo">Sococo</a> on <a href="https://vimeo.com">Vimeo</a>.</p>

I'm sort of fascinated by this idea of making telepresence less abstract...

Thursday, October 8, 2020

blank spacer icons on iOS

 This medium post on iOS minimalism had this rather striking set of iOS screenshots:


Turns out the secret is iEmpty, letting you add blank icons with empty string captions. (I have not tested the procedure.)

The results can be beautiful, but I'd say a bit fragile... you might be tempted to remove an unneeded icon or slow to add in something new just to preserve the lovely spacing.

Anyway, at work we were just talking about the bad old days of spacer.gif ... 

Saturday, October 3, 2020

iphone widgets and widgetsmith's "fuzzy time"

So far, the biggest hit of iOS 14 has been the ability to use new icons for specific apps (via "shortcuts") and to add widgets to the homescreen. Daring Fireballs "The Talk Show" podcast had a rather long chat with David Smith who created "widgetsmith", the breakout hit of this release. 

Smith has a notably generous approach with pricing for widgetsmith - the basic version is free, the upgrade is a subscription (taking pains to be clear about what's on offer) where the new features are things that cost HIM money - e.g. tide and weather data.

But what I'm in love with is "Fuzzy Time", a block that puts the current time in words, and rounds off - much like a human does. Here's my current home screen:


You'll note the time was actually "3:16". And that's fine! That's such a more human way of thinking about time, sometimes I really resent how "digital" time has become, how nerdily exact in a way computers naturally are but humans generally aren't. Reading the time as words and having to think about it just a smidge activates a different part of my brain and makes it more likely that I get feel for a time as the time, not just as a bunch of abstract numbers - and that I'll remember/internalize it.

I implemented a javascript prototype of something similar a decade ago (I was a little wordier, saying "a bit after half past three" rather than "Twenty-Five to Four") and was tempted to buy a Pebble watch and code it as a custom watch face. Infamously, Apple's doesn't allow custom watch faces, though Roughly, the time in words adds a large "complication" to other faces that has a similar result.

I'm still wavering on if I'll ever get an Apple Watch - the health stuff is temping, but I already feel like I'm a slave to time without having the shackle on my wrist to remind me!

Also you'll note Apple's default calendar widget, which until "Fuzzy Time" was the only thing I found worth the real estate. Here I appreciate the visualization of the entire month... I think it might help me get a feel for the progression of a month, I hate that "wait, the month's date is in the 20s ALREADY???"

Thursday, October 1, 2020

prevent browser scrolling while drawing on canvas on mobile

I'm making a minimalist shared whiteboard app using p5.js, which is my favorite way of doing canvas tag stuff. Believe it or not this is a runnable drawing program in p5:

function setup() {
  createCanvas(400, 400);
}

function mouseDragged(){
  line(pmouseX,pmouseY, mouseX,mouseY)
}

Anyway, the program, with a PHP backend, was coming along fine, but was frustrating on my phone and tablet - the same events to draw on the canvas would drag the whole window (even though there was no need to scroll, all the content of the page was visible.)

Tried some CSS trickery - the most promising was making it "position:fixed;" but somehow the touch events were being scaled vertically (I think the page was being moved behind the canvas, and somehow that was where the x and y were being calculated from)

As always, stackoverflow to the rescue. I ended up making a function like this:

function stopTouchScrolling(canvas){
// Prevent scrolling when touching the canvas
document.body.addEventListener("touchstart", function (e) {
    if (e.target == canvas) {
        e.preventDefault();
    }
}, { passive: false });
document.body.addEventListener("touchend", function (e) {
    if (e.target == canvas) {
        e.preventDefault();
    }
}, { passive: false });
document.body.addEventListener("touchmove", function (e) {
    if (e.target == canvas) {
        e.preventDefault();
    }
}, { passive: false });

}

To call that in p5, I had to retrieve the actual canvas DOM element. There might be an easier way, but setting the id of the canvas and then using the plain old document.getElementById() worked fine:

  createCanvas(800,800).parent("canvasParent").id("drawingCanvas");
  stopTouchScrolling(document.getElementById('drawingCanvas'));

Works great on iPhone, iPad, and I had a buddy test it out on Android Edge and chrome.

jazz typography

Oh, these are so good! Reagan Ray isolated the lettering of the artists' names on 100 jazz records. I've always loved this kind of design work.