Sunday, September 30, 2012

UI Set To Converge With Painting

One thing I've noticed after years of blogging: whenever I state the obvious, people get shocked.

However, the days of pixellated user interface are numbered.

Meanwhile, the expressive range and potential of graphic design remains largely untapped.

We know that we can communicate a great deal through simplified iconography.

But such communication often ends up looking dated.

Hopefully what I'm about to say next won't blow your mind.

In the future, a market will exist for hand-painted user interface.

Consider the XBox Live game Mark Of The Ninja.

Is it a diagram, a painting, or a cartoon?

It's a game.

It's an example of the art form which programmers use to explore the possibilities of user interface.

It is the shape of the future.

Vote Yes On CA Prop 37

aaaaaaaaaaaarggghhh ugghhhh NO

Because how far and how often are totally the same question.

Saturday, September 29, 2012

Thought Experiment: Note-Taking System Design

(Caveat: this is just me thinking out loud.)

I've seen people do really remarkable things with AI-assisted note-taking software, and I bought one of these because it's just a beautiful, brilliant product concept, but I use Scrivener for screenwriting and general note-taking, and I've realized I could probably replace it quite happily with Markdown, Fountain, and some good shell scripts.

The structure I use in Scrivener is really basic: a project has multiple subdirectories of semi-categorized notes, and two subdirectories containing screenplay fragments -- the subdirectory full of files I'm going to keep, in order, and the "maybe later" subdirectory, which serves the same purpose as the Trash in OS X or acts_as_paranoid in an old-school Rails app, giving me the ability to retrieve screenplay fragments I've "thrown away" if I later discover new uses for them. The fragments I like get processed into one big-ass PDF file, aka a screenplay.

The only part of Scrivener which I can't replicate by hand in Unix and which I care about remotely is Scrivener's corkboard UI mode, which allows you to mimic physically moving index cards around on a board. I don't actually use this, ever, but I can see the usefulness in it. In every other respect, Scrivener feels like good workflow design tied to middling code and a bloated UI, so I probably will indeed replace it in my workflow with Markdown, Fountain, and a bunch of scripts.

(As an aside, I've written several very bad screenplays, and one which I feel is actually worthwhile. I think more worthwhile ones await me in my future, because I wrote the worthwhile one using a new approach, which, in addition to solving the "my screenplays mostly suck" problem, also brought me away from the terrible "work like a banshee for a few weeks and then collapse from exhaustion" workflow that I've used in creating all my other, crappier scripts.)

I think overall the most sensible model for note-taking is simply to set up local installations of MediaWiki, the software powers Wikipedia, but it seems like it might be too much hassle.

A Few Problems With "GitHub Is My Resumé"

I have 121 repos on GitHub. A couple GitHub API versions ago, I built a custom viewer for just the public ones. Assuming you had the time or patience to dig through 121 repos to determine how I code in extraordinary detail, would you ever discover from GitHub my skills in motion graphics or visual arts?

I've also got skills in marketing and public speaking. You can't find any evidence of that on GitHub either. I've advocated the idea that GitHub makes resumés obsolete in the past, but I've come around to agree with the critical viewpoint:

I would argue that "in the age of GitHub, Stack Exchange, Coursera, Udacity, blogs, etc." the relevance of a concise and a well written resume is more important than ever.

This is a massive relief to me, of course, because I sell a video on how to write good resumés. Sorry to go there, but there's a fantastic testimonial.

Shinichiro Watanabe FTW

Cowboy Bebop opening credits:

Samurai Champloo opening credits:

Friday, September 28, 2012

Blue Circles

Pretty bit of motion graphics I made the other day. One second duration.

Clay Shirky On GitHub Democracy

Some oversimplifications for a nontechnical audience, but very good.

Monday, September 24, 2012

Riffwave.js - HTML5/JavaScript PCM Synth

A sign of things to come. PCM is a very primitive type of synthesis, but this could be useful for 8-bit music, e.g., chiptunes, early Atari and Nintendo video game music, etc.

code demo

Friday, September 21, 2012

Should Web Apps Be Comfortable With Paradox?

Coffee is like the nectar of the gods, because it fills you with energy and new ideas. Coffee is like nicotine, because it transforms your body for the worse, creating actual physiological addiction (as opposed to the metaphorical kind) and raising your blood pressure.

Coffee, therefore, is both glorious and awful.

Unions inhibit the power of oppressive corporate aristocrats; unions also hobble the capacity of entrepreneurs to innovate. Unions are both wonderful and terrible.

In each of these cases, you have a real-world thing, and two models of that real-world thing, both of which are valid to some degree. Cybernetics addresses this phenomenon with the phrase "the map is not the territory," while Athenian philosophy had Plato's Cave.

If you have a web app with a services-oriented architecture, you might choose to describe one single element of the business domain with a Ruby model in a Sinatra app, an ActiveModel in a Rails app, and a Backbone model in JavaScript or CoffeeScript (or both), all at the same time. You might also choose to represent this element of your business domain simultaneously as a succinct atom in a Redis queue, multiple rows in Postgres, and an entire tree in Mongo. Synchronizing these databases, and synching the corresponding code in version control, has countless associated challenges.

The easiest answer, of course, is not to do it. The easiest way to deal with paradox is to narrow your worldview sufficiently that it disappears. It's a very old solution, but it's not a very bold solution.

One of the oldest and greatest problems in philosophy is relevant to web apps. I don't know what the answer is, but I think it's worth figuring out. In code, as in life, you operate with much greater power if you can find ways to reconcile paradoxes.

Film Banned In 1906 For Portraying Native Americans Sympathetically

Odd historical discovery:

Reenactment of the Massacre at Wounded Knee by Buffalo Bill – When you read about examples like this, you realize that we’ve come a long way as a society. This early film was banned in 1906 for portraying Native Americans in a sympathetic light during the events which led to the deaths of 146 Sioux and 25 American soldiers. Even though you won’t be able to find the film on Amazon or Netflix, I wanted to include it as an interesting historical footnote.

Also mentioned on Wikipedia's list of films banned in the US, with the same rationale for its censorship, and yes, it appears that Buffalo Bill made the film.

Thursday, September 20, 2012

Delphi (D&B) And Shadow (Dubstep)

Two recent creations of mine:

An Alternate Ending For "The Cabin In The Woods"


Final scene. They're smoking their joint. Dana apologizes to Barney for ever doubting him. "You're not a fool at all." Barney tells her the ironic part: he is a virgin. Then Dana dies from the werewolf bite and the old gods are satisfied. The world doesn't end, and there's a sequel.

Minimum Viable Movie

Filmmaker Joe Avella tells the story of how he made a feature film with only $2000 raised on Kickstarter:

After several years of making shorts, I finally got into my first "real" film festival at SXSW, in 2009...

To my surprise, the film festival was a bust...

It seemed every other filmmaker at SXSW went to a film school and/or lived in an industry town, and had come with the notion of being discovered too. But unlike me, they were carrying around a big amount of film related debt and a bigger sense of entitlement...

I spent a majority of the time with people in the interactive portion, and the experience greatly shaped my filmmaking attitude and life today. At the same festival, intermixed with depressing self-entitled filmmakers, was a passionate group of young entrepreneurs who shared my ideas on pursuing your passion with limited resources, and finding creative ways to reach your goals. Everyone I met was so excited and happy, talking about new ideas and ways of distribution. I was meeting people who were successful at the thing I was trying to do: reach people.

They had a business, I had my movies. As I told people why I was at the fest, the conversations would sometimes reach a fever pitch about the possibilities of content online.

I haven't seen the feature yet, but Mr Avella's short film Action City Bathroom is fantastic:

The discussion on Hacker News is hit-and-miss, of course, but worth looking through.

Monday, September 17, 2012

Knife Party "Internet Friends"

One Major Reason College (The Institution) Will Change

Once upon a time, I worked at a big company with a lot of people I really liked. But there was a problem: everybody agreed that the people in Customer Service were assholes. They changed the web site unpredictably and ignored us when we told them not to.

In fact, these people were changing the web site because this was 1998, and we had a weekly rollout schedule for new text changes. We had a complex publishing system written in Perl, which I had been brought on to maintain, and the Customer Service people didn't have access to it and wouldn't have understood it if they had. The publishing system was responsible for creating the help pages that the Customer Service people knew about, but also for creating contextual help pop-ups which Customer Service usually forgot about completely.

Deprived of the ability to participate in the existing system, and facing repeated calls about the same incorrect content, they corrected the content they knew about, and not only left other content to rot -- with the result that the help site contradicted the help pop-ups -- but also routinely saw their own changes automatically overwritten by this publishing system which they had no access to.

Consequently, everybody in Customer Service "knew" that my department was full of assholes.

I rebuilt the system into a CMS, before I had ever heard of a CMS, and set it up with a clearly-defined workflow, including permissions and an approval process, which gave them the ability to change the root content while depriving them of the ability to change the final output.

This solved the whole problem, because what was really going on was that the earlier, crappier system had enforced a poorly-conceived workflow which made problems inevitable.

This is why college, the institution, will change in the near future.

Software doesn't just make it easier or quicker to do things; it also encodes workflows. In my story, encoding workflows created peace and cooperation, but that's not the only thing that encoding workflows in software can accomplish.

The space between learning a technical skill and learning how to exercise that skill effectively is the distance between a student and a professional. It used to be space you could only cover with apprenticeship or training. But software tools like GitHub, and my own little primordial CMS, can build workflows into their design.

This happens already and is the major point of the widely misunderstood Reality Is Broken, the closest thing the gamification "scene" has to a manifesto. It will only increase in future.

Well-done workflow design is like an experienced mentor guiding you through every step of a process. It is as rare as any other kind of well-done design, but it is also as crucial a competitive advantage as any other kind of well-done design, and also as easily mass-produced as any other kind of well-done design. The easier it becomes to operate with the guidance of automated mentors, the less important it becomes to study with human mentors before beginning your career.

I doubt interacting with humans would ever be obsolete, but an educational system built in a world without automated mentors cannot be perfectly suited to a world which can mass-produce automated mentors. When something precious becomes a commodity, a system designed to maximize the value of the formerly precious resource often becomes obsolete, and always becomes less essential.

Friday, September 14, 2012

La Jetée

La jetée is a 1962 French science fiction featurette by Chris Marker. It is also known in English as The Jetty or The Pier. Constructed almost entirely from still photos, it tells the story of a post-nuclear war experiment in time travel. The film runs for 28 minutes and is in black and white. It won the Prix Jean Vigo for short film.

The 1995 science fiction film 12 Monkeys was inspired by, and takes several concepts directly from, La jetée.

My Privacy Policy In A Nutshell

First, if I don't want to talk to you, I won't. This is not just my right as a human being, it's actually vigorously protected under California's fantastic anti-stalking laws.

Second, if your writing is not good, I'm much more interested in avoiding the mental pollution of reading it than I am in counteracting the reputation pollution of anything nasty it might be saying about me, or any misrepresentation it might be making about my opinions.

Third, I agree with "Matz Is Nice So We Are Nice," but where I can't hold to that, I will simply be silent.

This is partly due to the lunatic reaction I encountered from the Ruby community several years ago, when I said that somebody was a werewolf, and should therefore be killed. Even as recently as a month ago, people in the Ruby community were interpreting my recommendation of execution literally, while completely ignoring my claim that the individual in question was a supernatural creature.

That is actually a very profound distortion. The difference between "this guy's a vampire and we should put a stake through his heart" and "we should put a stake through his heart" is the difference between Buffy the Vampire Slayer and John Wayne Gacy. That's not even a question of being immune to subtlety; that's a wild degree of misinterpretation, and in the cases of certain specific individuals, I think the misinterpretation may have been deliberate and malicious. It's certainly hard to imagine that anybody too stupid to notice the difference would somehow be smart enough to write Ruby for a living.

I began blogging because I was unknown to the world of programming; this is no longer a problem. My current programming-reputation problems are that I am too widely known, and that many of the things which people believe about me are false, or boring, or both. These problems are much, much less serious than the problem of obscurity which I had previously faced, and because I am busy working on several other projects, they are not important enough for me to fix at this time.

Finally, if you have anything nasty to say about me, please spell my name correctly.

Thursday, September 13, 2012

Trolling As Reading Comprehension Test

Trolling is a terrible, atrocious crime against humanity, et cetera, but there's one thing about it which is actually very useful: if you've written a blog post which threatens to push hot buttons but never actually does, you have a free "does not read carefully" detector. There are downsides to writing provocative things, but finding out who among your readership does not actually bother to read what you say is definitely not one of them. It almost always pays off in time management terms further down the line.

Wednesday, September 5, 2012

Synchronized Quadrocopters

Beware require_directory

I prefer require_directory in to straight require, because it does more for me, but letting Rails do things for you is always a mixed blessing. Tonight I spent an hour and a half trying to figure out why code ran on my machine but spewed asset pipeline fail on somebody else's machine.

The answer was require_directory. I had a Backbone app with a models directory I emptied out but never threw away. This made the directory completely invisible to git, because:

Git doesn't ignore empty directories. It ignores all directories. In Git, directories exist only implicitly, through their contents. Emtpy directories have no contents, therefore they don't exist.

Sometimes it's better to swallow your pride and use require. Also: unfuck your habitat applies to code as well. I should have cleared out the manifest, and the directory, when I cleared out the models.