Thursday, December 20, 2007

Movie Review: Silent Hill

Ok any film buff worth their weight in goobers know that movies which are adaptations of video games almost always fall flat. Seriously 99.9% of the time. Fighting games: Mortal Kombat 1 & 2 and Street Fighter (oh it is soooo bad). Adventure: Tomb Raider. Platformer: Mario Brothers. First person shooter: Doom. Any of these movies I mentioned here are terrible, in both pointlessness and especially in not keeping true to the spirit of the original content. Now the review here is for yet another movie based on a game. This one unlike the aforementioned does not rank high on the lame-o-meter. Silent Hill was a game for the original Playstation. I never actually did get around to playing it. I thought it was a poor mans Resident Evil when I spied it, and I just kinda ignored it. I hear it is an amazing game, at least for the time.

Now Silent Hill has a few things going for it. First off is that the director is the same guy that brought us "Brotherhood of the Wolf". Yes this guy is French. Silent Hill though is in English. Second he plays video games. Third he really liked Silent Hill way back when he played it and hence had always wanted to make it into a movie. Well the movie does not follow the plot 100% from the game. Some characters are modified, deleted and added. The main character is now a woman. Overall though I believe the plot is very close to the game. Please someone correct me if I am wrong.

The plot is interesting, you probably will be wondering what will happen next. It could get boring but the effects and cinematography are top notch. The monsters are also very cool. In keeping with the spirit of the game (according to the director) the camera work does some very unique things. Sweeping shots which float you from one place to another occur a few times and give the movie a voyeuristic feel. I would recommend to any horror movie fan this movie. Most people that see it probably don't even know it is based on a game.

Sunday, December 16, 2007

Metroid Prime 3: Corruption

Another game, another 15 hours of my life spent vegging out. Well spent :) I have not played the previous two Metroid Prime games. I have however played the NES, Gameboy (original), SNES titles. They rocked my world as a young man. I have a Wii and was in command of a 100 dollar shopping mall gift certificate. So I bought this game and Burnout Revenge for the 360. So onto the review.

My opinion is that Metroid Prime 3 looks and feels "so-so" in 3D. Somehow being able to move in all directions is awkward. Your visor really sucks up screen real estate, during the full playing time of the game. If Halo or any other FPS did this it would be inexcusable. Oh and you will need to use different visor modes, such as the "scanning" visor to accomplish your goals. The 'Prime' incarnations obviously put a new spin on things by playing down combat in favor of searching out minute details of the environments and recording data. What is this Poketroid? I don't want to record information I want to blow shit up. This really kills the action. Ergghhhh... This actually is my only gripe: MP3 does not flow smoothly. You constantly are switching visors and moving back and forth between areas. I would just like some steady combat. I would like to work through areas and have the story flow in lock step. I don't want to backtrack areas once, twice, even three frickin times! That just screams "padding out the game". It destroys replay value since most people do not like running around the same areas. They want, nay expect new and interesting experiences. This game tries to do many different things but never lets you just get immersed in any one thing. That kills the chance of getting sucked in.

Nintendo, remember Super Metroid? Fantastic game, remember all those cool weapons and power ups? The constant battle? What about enemies that only are effected by using a particular weapon. Your beam in MP3 just upgrades over the course of the game. There isn't any switching it up. I kinda though that was annoying as having you change up your arsenal to fit different combat situations could have made things more interesting. There was a "corruption" mode where you deal out more damage, while risking an "overload". Really though that didn't pique my interest in the game at all.

I do have some words of praise. The voice acting and cinematic sequences are good, I would say on par with Halo, though the story is not. The graphics are also pretty good relative to other Wii games I have played. The controls are not bad, although I don't feel the Wii remote beats a keyboard and mouse or 360 gamepad for FPS gaming. Maybe some game will eventually prove the Wii controller superior for FPS. Mostly I'm just impressed the controls can pull it off, and be so precise.

I recommend you give MP3 a play this if you enjoyed any of the previous Prime games. If you didn't play any of those games there was probably a reason. You were likely off playing more combat oriented shooters like Halo or Half-life, or tactical shooters like Rainbow Six. If so I suggest you save your time and money and try something else.

Saturday, November 03, 2007

More "Reddit" Sites Needed

The thing I like about Reddit is how different it is than other sites. I have been active on the web since my first year of high school, back in 1995! It was love at first site (sic).

I think that Reddit does something more sites should do, which is provide a place for the users to define what exactly the site is. See Reddit is really nothing with out the user provided content. Users define what the content is, and therefore they define the site itself. The content is simple, links to articles and comments on articles.

Now I notice that Reddit is a very liberal site. You can't read five entries on the front page without hitting an entry about politics. Often these do have some liberal slant via the listing's title. I have no problem with this. I like the fact that I can kinda uncover what the more liberal crowd are interested in, worried about, and such. If I were a political analyst I could do better to understand the liberal side of our nation by spending a few weeks on Reddit.

Back to the need for more Reddit. Now in simple terse terms, Reddit is a MySpace, Facebook, LinkedIn type of site. Really it is a loose set of rules that define what the content form is. Not what the content is! MySpace gives users a page which they can then decorate with whatever they want. Reddit allows submission of entries which link to articles; while allowing the submitter to give a title to the link, and providing a comments page for the entry.

Now I'm noticing these sites are waaaaay to broad in their scope. As I have mentioned the Reddit site has a very liberal slant. That means there is a great opportunity for a site with a conservative slant. MySpace? How about something targeted towards art and graphic design students (maybe even architectural designers) that targets the features that they want. What are those? HIIK. Stuff that cuts out the posers. There are a lot of posers on the web and people enjoy a site that doesn't feel fake. Now if you are interested in a specific thing like art and design you should use this interest to start a new site. Just keep a couple things in mind.

Allowing the users to post and update content is key. Make sure that doing so is easy. Do not put too many constraints on what can be contained in the content. Define what the content is, like video in X format, images in Y Z formats, articles. Make sure to seed a good amount of content to the site before marketing it. Why? Because you want the site to notify the user via this content what is acceptable. If you wanted to create a conservative site, but you start marketing the site and there is not a lot of content users are likely to post anything. They don't have a good gauge of what type of content should be going into the site.

I feel like the coming years will be about little big sites, which target communities, not everyone on the web. These sites will work to inform, train, and entertain these communities. I think the wheels are already in motion, its just the business side of the web are focused on these mega sites such as Facebook and MySpace.

Sunday, August 19, 2007

God of War, Resident Evil 4, Bioshock

I'm a gamer. Have been since that Christmas when I was 6 or 7 years old and my family received a Nintendo Entertainment System. From then on I went through many games and console hardware. The list of systems I've owned is longer than I would like to admit. So lately I've been on a long kick of Guitar Hero 2. I got this game as a gift, and have played the heck out of it. It has terrific replay value.

For the 4th of July week my employer gave me Wednesday through Friday off. My wife unfortunately only got Wednesday off (the 4th). So I figured I would be having time to kill, so why not pick up some new games? I picked up two games I knew as highly recommended, "God of War" and "Resident Evil 4". Both $20 bucks. Did I tell you I just bought a PS2 like 7-8 months ago? Well there is a goldmine of great games that sell on the cheap and I love it.

So anyway heres my take on these games.

God of War is an excellent beat 'em up style game. It takes games like Final Fight and Streets of Rage pushing them into the 3D era. This could have not worked so great, but the controls and camera angle make sure that you can function in this 3D world. This game also borrows from games like Zelda, where you gain more magic and life force by collecting items hidden throughout the game, and solve many puzzles. The only thing I can view as a 'possible' downside to this game is the short length. I don't really mind it though. I think the game has terrific replay value. The fun is in how fast you can play through, powering up in different ways. The battle system is so open that each time you play you may devise news ways to deal with your enemies. The graphics in this game are very good. I enabled the 480P resolution and have to say for an 'old' PS2 game it runs very smooth and is pretty detailed.

I recently borrowed "God of War 2" from a friend. Everything I said above goes for this game too. "God of War 2" seems to be a little more balanced and polished. So far I am really enjoying it, and I think I'll try to pick up a copy when it drops in price.

The other game I picked up my long weekend was "Resident Evil 4". Now I heard lots praise be lavished upon this game. I wanted to play it for the longest time, but owned neither a Gamecube or PS2. I've always been a big fan of the RE franchise. RE4 ditches the zombies for mind controlled peasants. It also adds a over the shoulder view when aiming with a weapon, making battle feel more like a shooter. Another thing was the environments are completely 3D now. I'm not sure if this was new to RE since I missed a couple games in the chain. So what made this game so good? Well they nailed the main stuff, being the controls, music and look and feel. What really shines though is the interesting story and narrative. I'm not saying that the story is perfect, it has its low points, but the story and narrative make you always feel like you are in the RE world.

So what am I looking forward to playing? I just downloaded the demo for Bioshock on my Xbox 360. This game is going to be amazing. It is a shooter, but blends in great storytelling like in RE4. You always feel immersed in the story, for the 30-40 minutes of you get to play in the demo.

Thursday, August 09, 2007

Spaghetti

Man movie making has becoming way too generic. I am watching "High Plains Drifter" a movie that I would say is unmatched by anything from the past 5 years. Man I mean the whole deal. From the freaky high pitched music to the guesswork pertaining to the main characters intentions. And everyone in town is dirty, even the priest! The deal with this movie is that it doesn't cater to pop culture. I feel movies these days tie in references to events, products, people and such just to give the viewer the "satisfaction" of familiarity. Like the Apple dude in the new Die Hard movie as a computer "nerd". Or Will Ferrell showing up in way too many movies even though he is (kinda like Adam Sandler wore out his welcome...).

I think people have become trained to enjoy simplistic movies. TV too. I mean fuck, look at all those lame ass reality television shows. It's cool to be formulated. All the cool kids are doing it.

Thursday, June 21, 2007

Soldering for dummies

Great article over on MAKE about soldering. If you plan on doing any soldering soon you should check this out!

Sunday, June 17, 2007

Get What You Pay For

I am a guy who loves a good deal. Often I buy something merely because of pricing. This is not limited to new items, I love shopping for used stuff. Garage sales, eBay, Craigslist you name it. Don't take this as a statement indicating that I am a cheap skate! Just because I pride myself on finding the best Mexican taco stand, where you can fill up for under 10 bucks, doesn't mean I will not plunk down $30-$40 for a really good dinner. I understand that often you get what you pay for.

Now here is an example. When Dyson vacuums first came onto the seen a few years ago I was astonished. How could one justify paying over $400 dollars for a vacuum. Geez, I mean the one I had through college was maybe sixty dollars. This feeling was strengthened when I actually got to check out one firsthand at a shop. I felt it's construction was a little cheap, being made out of so much plastic (and those colors WTF?). I would say these feelings where strong, but guess what? I was all wrong.

My wife and I received a Dyson as a wedding gift. At first I just figured "Hey it must be better than my old college vac". When I finally broke open the packaging I was dumbstruck. It came with so many extras it was hard to believe. There where a lot of special attachments in the box. I'm not talking about just simple brush tools, crevice tools and whatnot. It came with 3 varieties of the aforementioned. It also came with 3 other, very fancy attachments for other things. What, I do not know yet, but they look pretty useful. It also came with a full on carpet care kit, included spot remover and carpet freshener.

So how does the thing work? Well it gets the job done much, much better than my old college vacuum did. I don't think I could ever go back now. It picks up everything, doesn't (seem) to lose suction, and moves around with a precision that my old vacuum just never had. It also is pretty sturdy in light of it's all plastic construction. I think I was wrong in holding it's plastic construction against it. The plastics used do seem pretty durable, save for the piece that at the bottom front of the machine. This piece has been rammed into a few walls, and has developed stretch marks that plastics often get when bent and such.

The engineering of this vacuum is also a point of interest to me. I find more and more cool features of this machine as I fiddle around with it. The material that is used in the hose of the vacuum is amazing. It stretches and shrinks back very naturally. No other vacuum I've seen uses this sort of material. The emptying of the debris sucked up by the vacuum is simple, and is much cleaner than any vacuum I have used. Every little part of the machine can be easily removed for cleaning, which makes me think the engineers put a lot of thought and time into it's design.

Well I've spent way to much time blabbing about a freaking household appliance. Like the title says you do get what you pay for. I would also like to say that sometimes maybe innovations go without being noticed because of held beliefs. If something costs an arm and a leg then maybe it deserves a closer look.

Whats going on?

So I was adding things that are tech related in this blog, such as working with Maven. Maven is a sweet build system for Java projects. I say build system lightly, as it does so many things. I have decided that my large cache of knowledge would be better presented in it's own blog, solely dedicated to Maven. So here it is, mavenize.blogspot.com! If you are trying to become a user of Maven this is a great place to get the many concepts down. It can be hard to connect the dots as a new user of Maven. Have fun!

Sunday, June 10, 2007

Testing your code

Testing is very important. What constitutes testing? Well that depends. If your application is mostly self contained, meaning it takes some command line args then spits out some data, then unit testing probably would be all you need. Other times your application must interact with one or more systems, so it would be good to test that all systems integrate nicely.

In this post I'm going to give my opinion on testing, and the two larger types I use and how and when to apply them.


Unit Testing

What do I mean by unit testing? I mean the following:

1. Your tests all run very fast, and the whole suite of tests runs in or around 5-10 seconds.
2. Every (yes every) time you compile the unit test suite is run to find errors in your code. Now you see why they must run fast.

To have fast running unit tests it is often very important to use interfaces between application objects. This will allow you to create mock versions of objects for testing.

An example: you have a remote HTTP interface with an implementation that allows HTTP calls to a network server. Now say you want to test an object that uses this remote HTTP interface. If you use the real implementation of the HTTP interface, the one you create for use in your application, you will encounter some problems. At some point you will compile, and your unit tests will fail because the HTTP object cannot reach the HTTP server, or maybe the server is on the fritz and returns the wrong data. This remote HTTP call could also be slow, causing your tests to break the 5-10 second 'rule'.

What is my solution? Create mock objects that implement an interface but don't do much. Some methods return nothing, so you may just create an empty method. Others might return an object, so simply create that objects configure it and return it. If you create a mock version of the HTTP interface you can control exactly what happens when it's methods are run.

Creating the mock objects allows consistency in your tests. Unit tests are all about consistency. If nothing else your unit tests should always perform exactly the same, with the only variable(s) being the object(s) being tested. What this means is that if you are having tests "integrate" with other systems it is no longer a unit test... Which leads me to the next part of this post.

Integration Testing

Integration testing is just as important as unit testing. If you are building an application that must integrate with another system you may want to write tests that test your application against the system to integrate with. These tests can let you gain knowledge such as: where things are slow between the two systems, test what happens in various scenarios i.e. testing for error handling, make sure that the system you integrate with can handle the load you put on it, or any other type of integration. Integration tests are more important to run a few times a day while you are actively working on a project. They often to do not run very fast, and could take many minutes or even hours :(

Saturday, May 19, 2007

Count to 10

Well I'm married, working at a new job, in a new state, new apartment, new dishes, new shoes, new haircut...

Life has been hectic in recent times for those around me and myself! I have been involved in all kinds of events lately, and I look forward to being a homebody for a day, maybe two. I just got back from the Maker Faire. Wholly fun time, attend if you can it will be going on tomorrow and also down in Texas (in a month?). They had a huge, human size Mouse Trap Rube Goldberg deal!!! If that does not get you there what will?

Interesting stuff going on at the jobby job

On the work side of things I have putting together some image manipulation code in the last week (my first back since the marriage/honeymoon). I am watermarking pngs, jpegs and pdfs. The pdfs are the hard ones. I am using this lib called iText. My hat is off to Bruno Lowagie and Paulo Soares, the men behind iText. If you need to generate pdfs in the Java language this will be the lib you use (I'm 95.7% sure).

Oh I also set up Continuum at work so that it sends email notifications when projects break, bam!

My boss has been playing with Derby. I have some experience with Derby, but mostly in using it for testing w/ Spring + Hibernate + Maven 2. We are using this XML database called Mark Logic. Pretty cool I haven't been let loose on it yet, being busy with many other things... So my boss he created some code which he embedded into Derby that allows him to get documents from the Mark Logic DB. He parses these documents and inserts data into relational db tables within Derby. That guy is a hacker pro! He is also creating an Atom server that can be embedded easily within Java code.

I love this because it will allow me to create integration tests for an Atom client I am developing (among other Atom based projects I am working on). These tests would not depend on network machines. To outline this; a test begins by starting the embedded server. The server can create a simple Atom workspace containing some feeds and entries in kind. Then I can have my client hit the server (in the test). The nice thing is that I can control the server 100%. Every time the test runs the server will be a fresh copy of the Atom workspace. This is very very useful.

My Javascript journey

I've been reading a bit. I read a bunch of David Flanagan's 5th edition of "Javascript: The Definitive Guide". The chapter on modules and namespaces was most interesting to me. I haven't used the technique he describes, using objects within Javascript to create a namespace. I see it as a must use technique for any collection of code that you would like to see reused. Unfortunately this technique was not employed in a pet project I have been working on. I will have to spend more time refactoring it so that different parts are packaged under namespaces. Oh well if I never get an actual product working I at least garnered some skills in the whole mess.

Becoming a better programmer

I'm on a kick to to enable myself to be a better Java programmer. To do this I will be looking at ways to extend my skills in general ways.
Dear readers (LOL): Any tips or stories of how you may have done this for yourself would be appreciated.
I have picked up the books "Jakarta Commons Cookbook" and "Java Generics and Collections". I think these should be helpful. I have sadly known about the Apache commons libs for a long time, and never mustered the energy to explore them. I can see now that was dumb. The commons-lang and commons-logging alone simplify lots of the Java cruft I dislike. Generics is a language feature that I do have some experience with. I have done little to really understand them though. I think the book will be a quick way to expand my language skills. I am also really interested in getting deep into the 1.5 concurrency stuff. Any good book suggestions?

Thursday, April 19, 2007

Cool new things report

Apple Tv. I bought one. It rocks. It is easy to get content from the many computers around my home. The streaming works flawlessly. I have only once experienced some lag. It also is not too hard to create backups of movies using Handbrake. I imagine one could create an enormous library of movies and tv show. Get yourself a netflix account ($20 a month, 3 movies/tv shows discs at a time), a cheap computer with upgraded hard drive ($500), and an Apple Tv ($299). Oh yeah and a HDMI cable ($50-$75). Now you are ready to back up hundreds of movies over the next year. Lets say you back up only 10 movies a month. Thats a 120 movies a year. You could easily do more. Borrow from friends ;) Even if you only stream the movies (less quality) you can have a huge library of movies available.

Enough about ATV. It rocks.

So work wise, I am going to be doing some work with Atom. I'm excited. It seems like cool stuff. I've also started messing with my javascript application again. It shouldn't take much longer to get a working release... I don't know when I will have time for working on it.

A really cool project I have not had time to play with is Camel. It is another brain child of James Stratchan, a guy who has worked on some big open source projects.

Saturday, March 31, 2007

My life needs SCM

Well I haven't been able to spend much personal time programming lately. I have accepted a job as a software engineer. My very soon to be wife and myself will be leaving the lovely state of Oregon next weekend. We are relocating near Santa Rosa, California. I'm really excited, but a little bummed by the huge shift in my focus. It'll be weeks before we settle down and I can get back to working on my little pet project. I keep coming up with new stuff I want to start playing around with, which can be rather bothersome. Oh well all I can do is write down these ideas and save them for later. Sometimes other duties come up that keep you from doing what you love to do.

One of my ideas I haven't gotten around to involves using Rhino. Rhino is a javascript engine implemented with Java. I would like to create a SWING version of my time tracking application. Seeing that the time tracking app is a single page web application, all the core logic is implemented in javascript. I would like to reuse as much of the javascript code as possible. Thats where Rhino would come in.

In this javascript app I have worked to separate application code through a number of interfaces. There are objects that represent the views. These create and control the HTML elements in the DOM structure. These objects have events that fire, such as when a button in the GUI is clicked. There are objects that maintain the state of the application, these interface with the views. They relay messages to the view. They also have to be able to receive events from the view objects. Therefore we have circular references between the state objects and the view objects. Note one state object may have many references to view objects, but the view objects (so far) have references to only one state object.

Other objects contained by the state objects will have to be interfaced out. Here I am thinking of the objects that communicate with the server (XMLHTTP!). I have not done this so far. I was thinking about the DAO pattern being used in javascript to do this. This may help to ease working with Java based DAO's in the SWING app implementation. The Java DAO's would drop in to replace the functionality of the XMLHTTP DAO's from the single page web application.

Let's stop it here. Later these notes could come in handy.

Monday, March 12, 2007

Meeting your goals

I have just pushed back a milestone for a project. This project is one I am developing in my own time, by myself. You may find it funny that I even have a milestone for such a project. Like most people, my pet projects are usually more exploratory and therefore do not include any project management. I wanted to try out the 37 signals Basecamp application and figured why not use a this project. So I signed up for my own project site on Basecamp. I called it code party. The project I am tracking here had already been going for a month (maybe a bit longer) before I started using Basecamp.

So the project I am working just missed a milestone. I said this past Saturday would be the milestone for a dogfood version of my application. Of course my life made sure that this milestone did not happen. Beyond the increase in workload at my place of employment, I have also had family obligations including a vacation up to Seattle for the weekend. Basecamp made sure to email me and let me know that the milestone loomed in my current future. I knew a week before that I would not be hitting this target. So what do I do? Relax. No point in freaking out. Beside the fact that this is a pet project, the best thing you can do in approaching the milestone is plan more.

I looked at what I had done, which was quite impressive ;) I figured I would not make it to where I wanted to be, so I examined what the missing piece of work was. By examining this missing work I could focus down on exactly what will be needed to be done in the next phase. This is work that should be accomplished before moving on to other work. I narrowed down my ideas so that I could accomplish this as quickly as possible. Other milestones will be moved forward a bit.

So in summary stay focused and relaxed. Live to fight another day, rather than throwing yourself into the fire. Make sure to not move into another part of the project (unless necessary) until you finish piece you are working on. These are some outlooks that have helped me work through some difficult projects.

Sunday, March 04, 2007

Required reading

If you happen to be a geek like me, then you can appreciate things such as industry humor and history. I don't think any other sector of private business can dare claim to match the level of snake-oil-ness that is found in the modern IT world. Reading is fundamental. Those who do not learn from history are doomed to repeat it. With that little statement out of the way here is some geek-hotness you should be privy to:

FSJ - I love my Mac, but iLove (sic) FSJ even more. That is Fake Steve Jobs to the uninitiated.

Folklore.org - This is another Apple related site. Andy Hertzfield worked for Apple in the long, long ago. He also had a role in the Chandler project.

Sunday, February 11, 2007

Projects focus

I'm seeing first hand why when working on a big project you must have a plan. It has got me thinking about project management (and project non-management ;)

I am liking the idea of outlining a core set of project artifacts, whose creation are beneficial to a projects focus. With each of these artifacts you should install a quality measurement. First I am going to talk about some of these artifacts, then I will examine some measures of quality to go with them..

Goals

Goals are the first artifact I want to talk about. They are usually the driving force in getting a project up and going.

Set goals for the project. What is it you are accomplishing by completing the project? Goals and business objectives are the same thing. The worst thing that could happen when goal setting would be to name a single goal like "finish X". A goal like this says that the project is not being taken seriously and that nobody is really analyzing it's purpose. Since goals are really the first artifact of a project they should be done well, right? Many parties may be effected by a project. Shouldn't this be considered in your set of goals? (NOTE: These parties are often the users of a project's products, i.e. customers)

Sadly many projects are built on poor goal setting. If you don't clearly expose the project's goals you can very easily lose sight of the purpose in your project.

There are at least two default goals for every project. Number one is get the project done as quickly as possible and the second is quality shall not compromised. Goals can help you to know when you are going off the radar for a project. If an aspect of the project can not be reasoned as building towards one or more project goals then it should not be part of the project. That simple. Goals can help cut out a majority of feature creep. The other big help from goals is to measure the success of a project after completion. Everyone should do this. It rarely happens. I will go into that more later in this post.

Here is a (long) simple example...

You have a project for creating an application. It will be used for signing up to play on your companies inter mural sport teams. The big goal is: "make an application that is accessible by every employee across your company intra net". Another goal is: "get rid of paper sign ups, and centralize the data in a database for documentation and reuse".

Lets look at a good system requirement: "the application shall be web based". Using a web application for this makes sense. It will make the application very accessible. That helps to meet the big goal. Great. Now let's keep going with these requirements. You create the system requirement: "Use Ruby on Rails for web application platform". Your team is very familiar with Rails and therefore it makes sense to use it for creating the web platform. Both these system requirements also work with the second goal, mainly to have things backed up in a database.

Now lets look at going off of the radar. One of the new guys on the project is really into learning AJAX. He is like "Hey this will make the application so much cooler!". You and your team do not have any experience with AJAX, therefore using it would require battling a learning curve. This guy wants the system requirement: "Use AJAX to make application more responsive". Which goal does it help to accomplish. None. And in fact it would be violating goal numero uno, which is to get the project done as quickly as possible. This is something that would be nice to have but does not meet any goals.

Now if a goal of the project was: "garner new experience in the Web 2.0 domain" (yes this is generic), then you could reason using AJAX techniques in the project. Unfortunately it is rare that these type of things are included into a project's goals. This is because the person(s) setting the goals are very focused on goal #1, getting things done. Often it is hard to rationalize time spent on learning new things.

Now going back to the section above on good requirements for our goals. What if your team was not familiar with Rails, or any other web application platform (LAMP, J2EE, etc.) for that matter? Maybe you and your team have some Java Swing GUI experience. You figure "hey making a GUI based application won't be too hard". But then you think "oh yeah but getting the applications to connect to a central data store across the whole company...". If doing a web application is the best way to accomplish our goals, then you need a web platform (such as Rails). Taking the time to learn the new platform is key to the project and therefore it is not a violation of rule #1.

In this case there better be one or more goals concerned with learning and using Rails in the project. The business owners in this project would not care so much about these goals. These goals are specific to the engineering domain. The business owner would have to trust that they are necessary. When the project is done you should be able to look at the goals related to working with Rails and know if you met them and/or went outside of them. A goal would be "able to demonstrate good MVC principles in application design using Rails". These goals should narrow the focus of what is being learned to accomplish the project. Remember no AJAX ;)

Goal creation and documentation

You must create the goals and document them. Concise technical writing will almost always beat out spoken word for clarity. Let's say you come up with some goals in a project kickoff meeting. Thats great, but if you don't have a process to document them why bother with the meeting. In a week or two when you and other project members are busy on other things you either won't remember these goals, or worse interpret what they where incorrectly. All you will likely remember is "Get project X done"!

By documenting the goals you should be able to translate and connect them with every other project artifacts. When you look at the business requirements gathered for a project you should be able to easily superimpose the goals over them, and see the interconnections. This principle applies to the finished product to. The product for a project should map very easily to the goals that fostered it.

Goals should be written as clearly and concisely as possible. Most goals should be understandable by persons of varying technical background. Technical aspects related to a goal should be boiled down, with the meat found in the requirements which correspond to the goal. Sometimes goals will be more technical because of the audience. They should still be boiled down to make their purpose clear to as many persons as is possible.

Goal artifact quality

So for the 'goals' artifact here are some quality markers off the top of my head:
  1. Each goal clearly identifies its target area such as generate revenue or business, or create new technology. It may help to group like goals when you document them.
  2. The goals are written concisely, with a general, non-technical audience in mind. This does not mean a goal cannot be technical, just that it should be as non-technical as is possible.
  3. The goals should be clear enough so when laying out requirements for a project, you are able to validate each requirement versus one or more of the goals without confusion.
  4. When the project is finished (or maybe at a milestone) you should be able to draw clear comparisons between the goals and the finished product/milestone.

Goal Assessment (the next artifact)

Why even have goals? We already talked about how they can help keep focus up, and cut down on feature creep. They obviously play a huge part in the requirements gathering process. I would say goals also allow us to gauge our success. This payoff comes mostly after a project is completed. When a product is delivered one can critique it, drawing conclusions about success from how well each goal was accomplished. This critique is part of the documentation. It is an artifact I would call "The goal assessment". It should be done in a way that draws comparisons between the goals and the product's features. On each goal there should be information on what helped or hurt the accomplishing of the goal. If a product feature does not meet the goal(s) then there should be information on how it does not meet the goal, and why that is.

Now going back to the bad case, where you have one goal "Finish project X!". How the heck can you critique this? You can't. All you can do is rubber stamp the project as 'done'. With no clear documentation on the project's goals you can't do a thorough examination after completion. You are done because you have met the basic idea of what the project was supposed to be. You may have nailed the project's product, but you do not have a clearly documented picture of what has been accomplished.

Documenting the goals, and how well those goals where met, has future implications to all projects. When working on later projects you can use these goals to know what has been done and how successful it was. You can examine what made things successful. You can look for tough areas by examining the goals that could not be completed, or that where very hard to complete. If you are working on increasing quality in a particular area you should start by finding related goals on projects past. You can use the data collected about these goals to help in understanding how to increase quality.

Let us imagine a company that builds radios. They finish a project for a brand new radio machine. One of the goals of this project was to develop and implement better radio reception. They test the newly built product against older products they have built. When people listen to the new radio it is a an obvious to them that the sound is more clear and crisp. The company is happy. Now at the end of the project they have accomplished one of their goals. They should take the opportunity to examine what was done correctly to make this a success.

For the goal given above; they may document that a new electronic part came into production that made the job possible. In general to all goals, maybe they worked 50 hours a week, rather than the 40 they normally would have.

Documenting information like the above in a goal assessment allows you to see the good and bad. When going back and reviewing this a year later you would want to be re-reminded of some of the things you had forgotten.

Goal assessment quality

Here is another quick top of the head list for quality in this artifact:
  1. Collected information is easy to understand.
  2. Each piece of information is connected to one or more goals, or possibly is general enough to connect with all goals (such as the working extra hours example above).
  3. Nothing should be barred from this assessment. If you think a project members input is silly still put it in. If someone says the broken coffee pot caused work to slow down, they may be serious.

Saturday, January 27, 2007

Start a community

It's becoming harder for me to get in here and blog! I have plenty to write, but I'm just so involved in all sorts of little projects out side of work. One of them is looking into getting a web site going. I have one right now, but it is pretty weak. I have started writing my own community site from scratch using Ruby. If you don't know the idea of a community site, it is one where you offer membership. Each member gets privileges to applications such as forums, blogs, email, etc. The number of apps availiable depends on the site. Yahoo is a community site offering a lot of apps to it's members. VWVortex is an example of a site that mostly offers forums for its users. Both sites could be considered community based sites.

So back to my work... I started writing the site using Rails. I have made a lot of headway into creating the articles application. I have a great javascript text editor embeded, which gives the ability to jump back and forth between editing html and rich text. Writing stuff from scratch is always a good learning experience. Writing a web app like this lets you learn to solve lots of little problems, which for me is fun.

Now I'm not sold on having my site run 'On Rails'. Although I really like Ruby, and find the Rails framework very cool, I don't need to have my personal site project be based off of it. I decided to look at some other options. I looked at Zope, which is pretty cool. You can run Plone on Zope, which was my main attraction to Zope. Plone is a feature rich CMS. Plone uses the Kupu project for text editing. Kupu is a free, advanced article editing javascript application. I like it a lot, and tried to tie it into my Rails site. If you watch the Plone screencasts, a lot of the functions being shown are implemented by Kupu. Plone brings together lots of features for editing and managing your content. It uses lots of DHTML features, which is really nice. My main problem with Zope/Plone is needing that specialized hosting to run a Zope site. It is more costly, and also there is not that great a demand for Zope/Plone experts out there.

Now I kept looking. I used to be all into writing my web apps using PHP. Oh yeah, good old get 'r' done PHP.... Well it sure has been awhile. In looking for something that already has built in community features, and is written in PHP I found Drupal! In like one hour I had it installed, set up some users, gave them each a blog, created forums and I'm just getting started. Drupal seems to have a simple, modularized approach to extending its base functions. This means if you don't like the blog app that ships with it you can write a new on and drop it in, or find a better one some else already wrote. That is powerful stuff. Drupal takes care of managing all the security and templating.

I'm going to have to look a little further into how one goes about writing a new module. I am first going to install and configure some of the 3rd party modules that are out there, just to get a feel of how it all works.