2009
08.07

Relating to the Past Thru Media

I have just recently started really playing with my Canon G10. It is amazing to think how far digital camera technology has become. I am no photographer but I enjoyed taking these shots and turning some into HDR images.

Crow T. Robot

Jen Overlooking the Water

Providence Sunset

Providence Sunset (The Sequel)

After taking these shots and looking thru the past few years of my photo library I started wondering how the next generations will view this generation. Will they feel closer to the current generation due to the amount of high quality media available? To fully the effect I am trying to describe, take a look a a black and white picture from World War Two, then take a look at a high quality color picture from the same era. This effect is even more vivid when looking at the few rare color first world war photographs.

This in mind, I have decided to start carrying my camera around with me more.

2009
07.29

Cutting Spending

Since I will be leaving the realm of consistant pay checks I have been on a financial genocide. One little obvious but not so obvious trick I picked up was unsubscribing from all catelogs and emails I would have previously wanted. My general argument for keeping them around was I would be able to find the deals I needed to save money on essential purchases. This sounds good in theory but in practice it only made it harder to not spend money. Even without the sale catelogs and emails of bike and computer parts if there is something I need a simple google search will net me the best current deals.

I have even spent the last two years looking at sales and hearing how much money the sale flyers net a company for work but the thought never crossed my mind in the context of myself.

2009
07.13

“Market Research”

When I tell people I am going to be making my own software, specifically a game for the iPhone (to start) this almost always garners a very positive response. If the person has an iPhone I like to ask them what applications and games they have or like the best. Typically I get this response:

Not too many, I don’t pay for things on the App Store. I do not see the point.

This drives me nuts and it got me thinking. Most people have never directly bought any software. They have their operating system, their web browser, and an office suite. All things that probably came with their current computer. They are not used to buying software for their computer, let alone their phone. They will buy XBox 360 / Wii / Playstation 3 games but they don’t make the connection that those games are just software for a different device.

The App Store is great for introducing people to the concept of buying software to add value to their device. The iPhone is the first platform to sell software in a easy convenient safe way and package it all up for casual users. The same people who say they never pay for anything on the App Store seem to end up buying applications or games later on. The App Store makes the process of buying software a one step impulse buy which will hopefully open up the application market to casual users over time.

2009
07.07

Starting a new project usually calls upon looking thru previously written code. I fired up a previous class I wrote 5 years ago to load a texture into OpenGL. Right away just reading the definition I recoiled in horror:

13
14
15
16
17
18
19
20
21
22
23
@interface WFTexture : NSObject {
    // Bitmap data
    NSBitmapImageRep *bitmap;
 
    // Bitmap information
    double width, height;
    GLenum pixfmt, bpp, datatype;
 
    // Texture ID
    GLuint textureID;
}

After reading thru this code a pattern emerged. I was creating objects for the sake of creating objects, instead of using objects to solve a specific problem. For example, why would I need to keep around the original bitmap data after it has already been offloaded to the GPU? To a lesser extent why would I need to keep around the bpp or pixel format of the data offloaded aside from out right wasting system resources.

I then started to look at the implementation which I will snip for brevity:

35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
- (NSBitmapImageRep *) bitmap { return bitmap; }
- (void) setBitmap: (NSBitmapImageRep *) newBitmap
{
    [newBitmap retain];
    [bitmap release];
    bitmap = newBitmap;
}
- (float) width { return width; }
- (float) height { return height; }
- (GLenum) bpp { return bpp; }
- (GLenum) datatype { return datatype; }
 
- (GLuint) textureID { return textureID; }
- (void) setTextureID: (GLuint) texid
{
    textureID = texid;
}

The implementation makes me certain I was thinking too much about the object and not enough about the problem it is used to solve. Aside from being able to access various bits of information about the original image data (bpp, width, height, datatype) I created set and get methods for both the bitmap data and the OpenGL texture ID.

If this was supposed to be a reusable object giving access to setting the texture ID would have be atrocious. Instead of changing the ID, a whole new texture object should be created. Also take note that once the bitmap was set to something new, no OpenGL texture data was uploaded. If I was really bent on storing the bitmap data in memory as well in VRAM, then bent on allowing the changing of this bitmap data, the set method should at least re-upload the new bitmap data to the graphics card. But I digress.

The only bit of code I thought about snagging from this entire object was this:

136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
- (void) on
{
    if ( width != height ) {
	glEnable(GL_TEXTURE_RECTANGLE_EXT);
	glBindTexture(GL_TEXTURE_RECTANGLE_EXT, textureID);
    }
    else {
	glEnable(GL_TEXTURE_2D);
	glBindTexture(GL_TEXTURE_2D, textureID);
    }
}
 
- (void) off
{
    if ( width != height )
	glDisable(GL_TEXTURE_RECTANGLE_EXT);
    else 
	glDisable(GL_TEXTURE_2D);
}

But I thought otherwise when I realized this code makes way to many state changes. Objective-C is very object intensive and you are rewarded for creating proper objects, but it makes it very easy to waste resources. Going over old code I wrote was a great learning exercise for me, and it drove home the point that I need to only write methods and properties as I use them.

2009
07.06

HTML5

HTML5 can be great for the web. I for one would love to see mass adoption of HTML5 in all browsers and many sites. A non-flash youtube would make me incredibly happy. But alas the battle for open source continues.

Open source is great, but at the point where the licensing and patenting arguments get in the way of furthering computing I say screw it. Enough.

Basically it boils down to this: H.264 is the superior technical choice and logistical choice, while Ogg/Theora is the idealistic choice. Yes you can send me mail all day long about Theora can be just as grand looking as H.264 but out of the box support for H.264 is far higher. It is built into hardware and most modern operating systems ship with it.

To all those Stallmanites complaining that Apple has some devious plans: You are wrong. If you sold hardware that had built in support for a specific format, would you not stick with that format? Would it not provide the better experience to your users?

Ultimately it is about furthering computing, not waging some ideals war.

2009
07.05

Finding My Decompression Time

I am having a hell of time a time keeping up mentally with my side project. I recently read an article claiming it helps to keep your full time gig while you are working on your side project and I can say that at least for me, its a load of crock.

I found that after the normal nine to five grind my mind cannot process any additional problem solving nor muster up any creativity. My side projects currently are at the stage that require a large portion of creativity to get started. The ideas are rough and unfinished. There are no remedial tasks I can do for an hour a night to further me toward my goals. This makes progress impossible when there is nothing to progress and ultimately it is an inspiration killer.

I have tried many techniques to get the creativity spark turned on for a little bit after the normal grind and they only added frustration. This weekend due to the holiday was a three day weekend, so I tried as hard as I could to not worry or think about work or side projects. Then as almost as my brain had water sitting behind some mental block, sunday night the flood gates opened.

Solutions to work problems popped to my mind and most importantly the brainstorming came hard and fast.

This feeling could be attributed to the higher volume of alcohol consumed on a holiday weekend or the bike riding and endorphins released from exercising. I have no scientific answers, but I do think I have found my decompression point. The amount of time it takes to decompress my head, to sift thru the queue of problems my brain is attempting to solve.

It just so happens to be a three day weekend.

2009
06.23

I do not feel the slightest bit of remorse about posting this “bug report” that found its way into my inbox. After closing my eyes and muttering “serenity now” over and over I decided these horrible emails could be of some use to me.

Here is the email in question (sensitive bits removed):

Question, whenever I go into application using a productID, we would get a
Search Error!
no images found for productID
but when we use the other search, its okay.
I think its be happening a few days ago.
Plz Advise

I think it should be noted that productID is not redacted. No example was ever provided and yes those are “sentences” formed by an adult.

This is an example of users who do not want to use your software. All this user knows is that a tool they are forced to use is acting differently then they had expected. It turned out to be an incorrect product ID. The tool was acting properly. Despite this I have taken the opportunity to tune the error message to offer the user some suggestions as to what may have gone wrong.

The message was changed from (note the email was not even a copy and paste from the application as they subsituted the product ID for the word “productID”):

No images found for $productID.

To:

No images found for $productID.

  • Please make sure the products ID typed is correctly.
  • Try searching on the UPC number to confirm the product ID is in fact valid.

Whether or not this change will have an effect on the amount of poorly formed bug reports that flood my inbox I cannot tell. This report is a great example of a user who has to use your software, but also a great example of how you can improve your software.

Just because you have horrible users who turn you into more of a cantankerous asshole with email each does not mean you can not continue to improve the quality of your software.

I am impatiently counting the days until I no longer deal with this crap though.

2009
06.22

The Audience Is Key

Every time a developer mentions how their users annoy them I hear the same response:

You will get that anywhere.

I don’t subscribe to this. I started thinking about what I disliked about my users versus what I wanted in a user and came up with one short requirement:

  • Bad: Your users have to use your software.
  • Good: Your users want to use your software.

My current crop of users that drive me up a wall would never in a million years purchase a piece of software. It is placed in front of them, they have to use it to complete their jobs, for them it is just another cog in the corporate machine. This is the fundamental difference with users in a corporate environment.

2009
06.22

“… in this economy?!”

I gave notice at my job. Many people exclaim in shock “in this economy?” after learning of this. I understand their worry, but seeing as we have one brief life to live, I am going to not let the mistakes of Washington or Wall Street effect my life decisions. I’ve always wanted to code video games and desktop applications on my own, for myself. I hold by the adage that the best software you will write, is the software where you are the target user.

I am learning that there are a lot of hurdles to overcome so I plan to use this web space to document the process. Going from full time developer to indie software developer is going to be hard, and I am downright scared. I am also uprooting and moving from one coast to another.

Hopefully someone will find the oncoming mess of code, rants, and photographs useful, if at least to serve as a warning.