Thursday, February 25, 2010

I am a pivotal tracker project


Here's the project description:

This is a project for tracking myself. The things I should do, don't do, wish I did, etc.

"Bugs" are things that I don't like that I aim to change. They can be given by anyone at "failin.gs" email, or submitted in person. (nailbiting and the like)

"Chores" are things that I need to do that don't add business value directly. (unimportant meetings, cleaning the gutters)

"Features" are things that do add business value, ie. things that I enjoy, improve my skills, and benefit my relationships with others.

There are two complications to using this project management system for this that I can predict now:

One is defining deprecated features. If a bug is not really fixed, the bug ticket will be reopened or a new one will be created. If a chore is not done, it will be easy to tell (ie. do the trash). If a feature is to be deprecated, it can be coded considered a "bug." "This feature takes too many resources to support" is a valid reason to no longer support it. Ideally, there would be a "deprecation" type story, but there isn't, so "bug" will have to do. It may or may not take effort to stop supporting a feature.

The other problem is that so much of life is made of recurring tasks. One solution would be to force the pmp to conform to your life, meaning that a cron job would hit the tracker api, telling you to go to work or practice the oboe.

The alternative is to keep features small. This ensures an iterative process, and has the additional benefit of ensuring that you have a purpose in your daily life. If it doesn't add business value, you should not do it. If you can't think of a good reason to go to work in a given week, do something else. Also, it gives insight into why you took particular actions when reviewing later.

Play X on the oboe so that I can be first chair. Go to work this week so that I can get money. Go to a play to change how I think about life. Work out so that I can wear the too tight pants.

Not everything can be logged. Feeding the cat, brushing your teeth, climbing each of the stairs in a staircase, and running away from a fire would technically be considered "chores," but this is not the part of the "application" that I am working on. Basically, many recurring tasks like these can be thought of as features that are supported by the underlying architecture of a normal, conscious, sane person.

Sometimes the underlying system needs to be tweaked. This should be handled in steps also. A bug report of "Forgive everyone for everything the world for every way that they've ever wronged me or each other, so that I can regain hope" is way too big, and is focused on the underlying architecture.

Basically. It's a non-starter because you don't have access to the underlying architecture. The approach of "programming to an interface" is better. So a reasonable feature might be "Call mom to understand how I relate to people better." It's doable, finite, and approaches the problem at the interface level. If it becomes a regular thing, then you are still supporting the feature (or it has integrated itself a level deeper into your architecture). Address the feature again as "call mom," or a bug "did not call mom," or as a deprecation (bug story with "stop calling mom").

Paradigm Composition

From my friend on facebook:

"Granted, I only skimmed this, but it seems like it might be right up your alley...." (link)

That is up my alley. I've been there in less significant ways. I conducted the same test type of test in the defense of my thesis on algorithmic composition. It was Bach vs. Robo Bach. I saw the tip of the iceberg of the same types uncertainty and paranoid bigotry.

The robots kick our asses on a lot of early styles. What's needed in later styles and to emulate quality "human" composers, namely breaking patterns in predefined ways, is just a variation of following a pattern, so they manage that well enough also.

But our definition of music and range of expression expanded a lot with 20th century music. Inventing new compositional paradigms (chance music, etc.) is much closer to "humanity," "creativity" etc. Robots still suck at that, and will for a good while, if not always.

What's interesting is that most humans don't give a fuck about new paradigms or expanded expression. They want a good "beat" or a nice "tune." If we stop caring about innovation, and "academics" refuse to recognize what actual innovation would mean, then all we have is "robots", "weirdos" and "composers" who lose handily to robots.

Composers will always lose to robots in "composition." If that was their only job, there would be nothing special about any of them. As it stands, I am not certain that there is anything special about current composers who strictly imitate past styles. If a "composer" is responsible not only for the generation of musical ideas, but also the creation of new compositional possibilities, then they don't lose. The trouble is that the we've got a lot of "posts" to prefix our modern by now, so anything they do in the paradigm expansion effort is going to be pretty out there.

The academics are in a tough place. They can take on the difficult challenge of expanding their definition of music to include styles which are more difficult to understand or even tolerate than CPE or pop music. Should they not do this, they are little better than the tune and beat seekers. They understand the comparatively easy and mechanical aspects of music, but they are rejecting humanity and creativity.

I don't know if or where the soul is, but it's not in the notes. Admitting this puts the emphasis in a different place. Basically, composers who did not invent a new paradigm of composition are irrelevant. All that we value is that which computers are incapable of.

Computers have largely solved the problem of automatic algorithmic composition. But if they are to solve the problem of automatic algorithmic paradigm composition (the true skill of a "composer"?), they will need a system to understand how humans break and define paradigms. This is in the works. A lot of content that is passed around online is interesting because it changes how we think about solving certain problems. So now we're down to the computer having to filter out the inane from the brilliant. Analytics are more ubiquitous than ever. Internet based products and services attempt to understand the information produced and used through them more and more by the day.

We're a ways off from the computer saying "PRODUCE NEW PARADIGMS HUMAN!" but how far, I'm not sure. "You want to be popular and make money, right?" is only slightly more subtle. I don't know if the singularity is on its way. To a large extent, I don't care. It might be horrible or benign, but if it is to come, I can't do anything anyways, so for now I say "meh."

But back to musical composition. Basically, if we don't make an effort and accept current paradigms that we may not be comfortable with(20th century, other cultures, etc.), and cultivate the creation of new ones, then we become irrelevant. But is the best way to accept old paradigms attempting to create systems to make them obsolete? I don't know. What is the best way to cultivate new paradigms of musical expression? I don't know. Should and is it possible for us to give computers insight into every aspect of our expression? I don't know.

Another question is whether what will become "human" in musical composition is limitation itself. Maybe the effort required itself becomes novel.

Or maybe the limit that we hit before computers is an ethical one. Throughout the centuries, music's dissonances have become more pronounced and intense. Is mass murder worth extracting the spectral analysis of the sounds of a knife against flesh, and seeing if over the course of many murders, it shares characteristics with the corresponding cries for help? Most musicians I know what say, "Ew. What? That's abhorrent. No." Most computers I know would say "beep boop beep 01010011100001"

So what's the lesson? Be nice to weirdos. Be accepting of things contrary to your world view, or hard to define, or ill defined, or undefined. Create new paradigms. That's our only insulation for protecting our humanity. Keep adding more "post-'s" to the post-modern. As far as I know, no computer or human has defined a human limit for where we can take that aspect of our humanity. If we keep pushing that possibly infinite limit, we have nothing to fear of analysis and automation robbing us of our humanity.

Monday, February 15, 2010

Another reason to hate fixtures

Or maybe it's a reason to hate generators that create the fixtures.

I changed a migration, and all of my tests broke. I couldn't find the issue. What could possibly be calling an insert with the old column names?

A grep of the system turned up a long list of calls from the log, and because usually the relevant files are on top, I didn't scroll down, and missed the problem for an annoying little while.

If you use generators, and not fixtures, don't forget to:

git rm -rf test/fixtures/

Saturday, February 6, 2010

Donkey Show

As with everything I say or do, I usually put out a caveat that I am completely unqualified. Commenting on tonight's performance of the Donkey Show at the Oberon Theater is no exception. Did I know it was an adaptation of A Midsummer Night's Dream, yes. Did I know much about the original, no. Full disclosure: most of what I do know is just what I pieced together from a few episodes of Gargoyles where Puck appears.

I am sure there is a rich experience in understanding the connection between old and new, revamped and classic. I cannot offer an opinion on that front. Some people may think that would disqualify having an opinion on the show at all. I sympathize with that position, but after the performance, I am more willing to share my potentially less enlightened view point, despite being more sympathetic to would be detractors.

First, I can generalize about a few things. Shakespeare is hard for the consumer. Tonight's show was almost painfully easy for us. With reducing the script to just a handful of intense interactions, making it completely obvious what was happening, it really decreased the mental requirement for the viewing.

Besides the provided incentive to dance and drink (the second makes sense. You can make a lot more if you're selling throughout and not just at intermission). I would have felt completely comfortable using my phone for texting or calling. Even tweeting, ordering a book on Amazon, reading F my life or looking at pictures of cats would not have felt odd. Nor would I have faulted anyone else for doing this kind of thing. In a conventional theater performance, I would be the first one to give anyone the evil eye for distracting me or heaven forbid the performers.

But here, the show itself seemed to almost not care. I am not saying that it did not take effort or attention to present, but rather it just had a very incidental feel to it. They said what they had to say, and commanded attention through gestures, lighting and sound. There was no artifice in place to support their authority. The big dudes on security would prevent a complete coup, but overall, I got the impression that the performers just happened to be better organized and doing more interesting things than the other audience members.

As an aside, it would be an interesting to take this further. I'm sure someone in the last century has experimented with anarchical theater, but seeing/being in a show one or two notches more toward the king of the mountain style performance would be really amazing. Improv Everywhere has had a few skits along these lines, but I'm very interested in seeing if it becomes more standard and common.

Anyways, back to the not caring thing. It reminds me a lot of some aspects of the current internet experience. More and more services are emphasizing the ability to say something, with no guarantee that anyone will listen or care. The donkey show puts people in a big room, tells them to dance, drink, and continue with their mobile lives and carry on with their physically present friends as they wish. As aside number two, some audience members carried on with their friends quite a bit...

Ahem... So this performance was approachable, demanded little, and accepted a wild audience. I was left with a good many questions. Is this a good thing? Is this inevitable? Did the author make a call on either, or just raise the questions? Is the empty feeling of wondering if I deserve to comment the intended effect, or am I being too self-critical? Is the important thing the adaptation of the story, or is the story as (intentionally?) incidental as I am imagining? Is the audience as we knew it dead? Can we ever sit quietly through a show again? Can we read a book? Can we listen to a 3 minute song without skipping to the hook, and then to the next song? Does everything viewed as "content" command less attention than it once did? What are the benefits of this shift towards apparent egotism and consumerism? Can we protect the arts? Would we want to if we could?

In short, I don't know whether to feel complemented, insulted, ignorant or special. I don't know if the creator cares. Maybe it was all for the lulz. Anyways, as with most good experiences, it raised more questions than answers. Knowing the creator intimately and having the original memorized would only address a few of these. I think that validates my opinion.

Because of and despite not even having the attention to read the full wikipedia synopsis of the play, I sympathize with the hell in a hand basket position strongly. I realize that I'm part of the problem, if that is actually what we've got going on.

The final question it raised for me was one I had been considering for a while. At the risk of seeming even more consumptive than may already be apparent, I was wondering if there are new markets in unconventional types of theater.

From a software perspective, removing dependencies often leads to greater portability and more customizable interfaces and experiences. Generating a UML for theater might be a good start in looking for dependencies that are locking performance in a particular box.

Removing the audience's attention as a dependency allows for shows like the one I saw tonight. Remove the need for money paid by an audience, and you get the grocery store musical. Swap the money paid back in but this time by a fiance to be, and you get a proposal musical.

I had been speaking to a pro theater friend of mine about her opinions on removing some of these dependencies. To a large extent, she said that "software is a different world from the arts, at least for the time being." I don't think that she is wrong. In both cases, there are systems in place that define in radically different ways, what it means to be professional, altruistic, successful, wise, and profitable. There is no strong "open source" movement in theater, nor is it desirable for playwrights and composers to see their works torn apart and reconstituted.

Still, after tonight, I am more convinced than before that this difference is preserved as a not so comfortable tradition, and not because it is representing the current state of possibilities.

The rails creator, DHH said going too big is a mistake that a lot of people make when creating new companies. Every minor league that I know of in artistic sense of "making it" still sets the bar very high in being modeled after the majors. Get published, get noticed. Get cast, get noticed. In essence, you have giant dependencies (performing at a theater, selling a play) to resolve before you can execute (perform, see performed) or upgrade your software (performances, scripts).

I don't know why it has to be this way. Attention is easy. You ironically get more of it when you're not demanding it as in a traditional performance. I will be shocked if there isn't a large market for these types of small markets in 30 years.

At bad, this is a case of my liberal arts sensibility just saying software + music = something else cool? At worst, I reflect a terrible trend of inattention, technophilia, and shallowness that defines my peer group and younger.

At best, I had the chance to experience a type of performance that I haven't before, and more will become possible year after year until I die. And I will stop being a codger about kids today and their damn cell phones.

Thanks Donkey Show.

Metric_fu

Some notes on metric_fu

It provides insight into code for new projects from a broad point of view.

It provides good guides for coding generally, or experimenting with new styles of coding. Joe Ferris from thoughtbot said that he found it a valuable experience to develop effigy "reek free."

Naturally, as with any tool, none of the metrics generators will tell you everything that you need to know or do the work for you, but there are a few benefits.

Unfortunately, the default gem install and the example rake task provided on the metric_fu docs will not give you a fully usable version. (I'm assuming this. I have not tested this process on your machine. I only know that they didn't work for me)

Solution in gist form

Follow this to fix the problems with rcov, saikuro, and reek.

Thursday, January 7, 2010

Railroad gem

This Gem is AWESOME. But it's also out of date in just one way that I've noticed.

application.rb was deprecated in Rails 2.X.

Comment out or delete the following two lines from the gem in
lib/railroad/controllers_diagram.rb:

files << 'app/controllers/application.rb'
require "app/controllers/application.rb"

I haven't tried it, but it looks like the railroad_xing gem takes care of this.