



Check out the full gallery




Check out the full gallery
While playing with Wordle, I processed Jonathan's blog in search for his true focus. Wordle produced the beautiful word cloud below. Jonathan's main focus is on customers, which is an important trait for a CEO. Storage, Software and Systems are prominent; but more interesting is the focus on being Open. Services could use more attention but given that Jonathan is my CEO, I'll let you decipher the rest.
I picked up "The Art of Agile Development" at the Web 2.0 NY conference back in September. It has been difficult to read the book end to end. I've skimmed most chapters and only found a few to be useful. Chapter 8 on "Planning" was immediately helpful for my debates at work. We spend a lot of time arguing over time boxing -vs- feature boxing our projects. A large portion of the book is devoted to test driven development, peer programming and code reviews, not as interesting to me as this has been covered by many other agile books. I'm searching for new insights on integrating Agile methodologies into existing companies and working with the business on estimations and expectations.
"High Performance MySQL" is a book I've hoped to read for a long time. Using a gift certificate for Borders, I picked it up for $49.99 (minus my 20% coorporate discount). I've decided this book should be required reading for all engineers who use MySQL. The database is easliy approachable and has a small learning curve; so, most developers build their tables or db migrations and move on to more important tasks. I've found this is a common mistake, even for seasoned engineers. MySQL has an advanced feature set and provides many unique ways to optimize for reads, writes or replication. I've realized that having used MySQL to build a basic database for a website is not enough experience for a highlite on your resume. I'm suggesting this book to my coworkers.. While it can be dry, the education is worth the dryness. My new interview question for candidates is "Describe the different use cases for the InnoDB and MyISAM engines in MySQL".
For my ratings, I'll give "Developing Facebook Platform Applications" 4 stars, "The Art of Agile Development" 2.5 stars and "High Performance MySQL" 3.5 stars.
I noticed a really interesting feature coming in Rails 2.2 called "Memoization". It means caching the return value of a method. If your method is called multiple times the cache value is returned rather then the executing the method again.
This is something I do in every application for
def current_user
@current_user ||= User.find(session[:current_user_id])
end
In the new Rails 2.2, you can have the same behavior with the "memoize" declaration
memoize :current_user
def current_user
User.find(session[:current_user_id])
end
Regardless of how many times I call current_user, Rails will only do one DB query.
This level of caching is very common and we always use it in practice with instance variables and singleton patterns. Its nice to see a declarative way to do this in Rails. Learning a new software term like "Memoization" is a bonus.
A great piece of advice from Jason Fried at the Web 2.0 Conference:
"Design with a Sharpie"
This is a powerful concept in software design. Using a blunt force marker you are forced to focus on the primary problem and delay the interference of the details.
Jason Fried gave an amazing Web 2.0 Keynote last week. He uses an analogy that we need to be curators of the software we create. If a museum curator takes every painting suggested to him by the users and sticks them all in a room; that creates a warehouse. A curator carefully chooses the paintings that add to his vision and filters out the noise. As software developers we need pick and choose new features carefully. The business and users are a good source of information. We should not take all requirements and blindly implement them into our products.
There is also a great write up from a session given by Jason on Lessons learned at 37 Signals
David Heinemeier Hansson, the creater of Ruby on Rails, recently gave an inspired presentation on starting your own company. His big secret is "price". You create a great application, price it, and make money from your users. It is an amazingly simple concept. If you get past the need to make a billion dollars from every idea you have. Then you open the possibility for creating a great application that can make millions of dollars by providing a great service to your customers.
Like most of my friends, I am always trying to come up with the next great "Facebook". If you consider the odds, this is like trying to win the lottery. I've changed my views after this presentation. It is a nice course correction for the crowds chasing the next web 2.0 dream
Give it a watch, let me know what you think
Google does some of the most amazingly wonderful things. They have quietly released hosted AJAX Libraries. They are now hosting many of the standard ajax libraries used by developers including my favorite Prototype and Script.aculo.us.
This means all your favorite web applications can refer the same scripts hosted by Google. This will save bandwidth for your hosted web applications and decrease load times for clients as their browser can cache the scripts since they are all from the same Google host.
The API even provides a version specification. So, you don't have to worry about upgrading and managing your Rails versions to get script library upgrades. Just watch your use of the AJAX helpers
It looks like you can use their Javascript API or provide a direct link:
<script src="http://www.google.com/jsapi"></script> google.load("prototype", "1.6.0.2");
http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js
I've been updating my Agile, Web 2.0, AJAX, Social Networking and Google Mapping skills. I've just read 5 great books in the last couple months. Here they are with a quick one sentence review. All of them have been helpful, easy to read and I would recommend them to anyone interested in updating their skills.
Beginning Google Maps Applications with Rails and Ajax This was a great introduction to the Google Maps api and some tips on retrieving data from your Rails application. If your Rails/AJAX skills are solid and you have a basic understanding of the Google API, this book will probably not add much to your skill set. This is an easy read and explained the mystery of the Google Maps API, which now doesn't seem like it was so difficult
Prototype and Scriptaculous in Action. The In Action series of books have become my favorite publisher in recent years. This is a great introduction to the main javascript libraries powering Rails AJAX methods. After reading this book, I've stopped using the Rails helpers and just make the calls myself. I still use the remote_form method to get the authentication key passed for me. Do yourself a favor, learn what Prototype and Scriptaculous can do for you and you'll find development tasks are much easier.
JavaScript: The Definitive Guide. The Rhino book is in its 5th edition. I've always been one of the Javascript haters, but after learning Prototype and Scriptaculous and playing with the Google Map API I realized I needed to embrace Javascript. If you don't want to buy an updated book, watch Douglas Crockford's Advanced Javascript video series. I'm not sure I love javascript, but the hatred has waned.
If you decide to play with AJAX and Javascript and have been frustrated in the past, get Fire Bug it makes debugging and monitoring javascript amazing.
Pro CSS Techniques is a fairly good book. It explained the current state of CSS and how most styles work and relate to each other. I was hoping for more receipe examples showing desired output and explained the technical reasons for the styles used. I was also hoping for guidelines on approaches to styling. This book does a great job of explaining selectors and styles. I can't give it a strong recommendation because it didn't provide what I needed, but my expectations are different then yours.
Advanced Rails Recipes: 84 New Ways to Build Stunning Rails Apps . This book was just released at RailsConf2008. It has recipes from a lot of the prominent rails community members. I've just started this book and expect it will make some great beach reading. The recipes are seem to be real world ready. I like reading solutions for problems; not only for the specific solution but to open my mind to new ways of thinking.
In April, we had a very enjoyable trip visiting some friends in Frankfurt. We visited the Mercedes and Porsche Museums in Stuttgart. We also spent a day in Heidelberg, which I would recommend to anyone visiting Germany.
The second half of our trip we spent in Amsterdam. The city is amazing and you should go soon as the rumors are the Red Light District will be shut down this year. The most memorable part of the trip was a heading out to the Kenkenhof area. While the gardens are amazing and worth a visit, they are very crowded in mid April which is the peak time for the tulips. From the parking lot of the Kenkenhof, you can rent bicycles for 8.5 euros and ride around the bulb fields. I found that to be one of the more enjoyable adventures I've had in Europe. They provide a very well laid out route map and the ground is very flat so the riding is very easy. Judging from the amount of people we saw on the trails, most people don't take advantage of the opportunity, so make sure you do when you visit.
A few of my pictures are displayed in the badge below, you can see my full set at Flickr
| www.flickr.com |
Welcome to last year Apple. I've never seen a good explanation of why Apple has taken so long to release Java 1.6 for Mac OS X. I remember attending WWDC in 2000 when Steve Jobs announced that Java would be a first class citizen on Mac OS X. Things looked promising, but times have changed. I could understand waiting for the first patch, but this is the 5th patch for Java 1.6. We have been using Java 1.6 on hundreds of production systems in my group for over a year. I can't tell you how annoying it has been to run a VM on my Mac just so I can develop with Java 1.6. The delay for the release has been painful, I'm relived that my life will be improved now
Java 1.6 is not installed as the default, its just available:
cmar$ java -version
java version "1.5.0_13"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_13-b05-237)
Java HotSpot(TM) Client VM (build 1.5.0_13-119, mixed mode, sharing)
when you type java at the command line, it invokes /usr/bin/java which is really a link to the Java Framework
cmar$ ls -la /usr/bin/java
lrwxr-xr-x 1 root wheel 74 Apr 30 08:41 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
If you want to switch your default then you need to either modify the link /usr/java/bin
sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Commands/java /usr/bin/java
You might have to do "rm /usr/java/bin" first to remove the link before creating a new one.
Or you can just create an alias in your ~/.bash_login
alias java=/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Commands/java
Over the last year, Textmate has become my favorite editor. Today, I finally figured out how to use the blogging bundle with blogs.sun.com.
The secret was getting the xml-rpc url correct in the setup file. The URL I'm using is: http://cmar@blogs.sun.com/roller-services/xmlrpc#cmar . In the URL, you'll notice 2 "cmar", the first is my username the 2nd is the name of my blog. For blogs.sun.com your username is the same as your blog name. It took me while to realize this because most examples just use http://blogs.sun.com/roller-services/xmlrpc and don't include the #blogname. For example, in MarsEdit you don't need the #blogname.
The Blogging bundle includes all the features you need to fetch posts, set properties like Category and Title. The only quirk for me so far, is you don't "command-s" to save, but rather do "control-command-p" to post. I'm happy now, using my favorite text editor on the mac and blogging with it, no need for another application.
In case your wondering, yes this is my first post from Textmate
Randy Pausch is a Carnegie Mellon Professor of Computer Science. He is fighting Pancreatic Cancer and sadly his prognosis is not very good. Last Fall, he was asked to give a traditional Last Lecture for Carnegie Mellon. Usually, the Last Lecture is just a metaphor and an opportunity for a professor to pass on the lessons he's learned in life and his career. In this case , it really was his last lecture. It is one of the more inspirational things I've ever heard and I had many take aways that I will carry with me the rest of my life.
I encourage you to watch this video, plan to spend at least an hour to watch it. Randy lived an amazing life, and is fighting until the end actually speaking to congress about Pancreatic Cancer. In the computer science field he is one of the experts on Virtual Reality and also the creator of Alice.
After Shawn Ferry put up a killer Chinpose, I had to work on a new submission for the chinerati. So, here is my Modern Art Chinpose.
In the latest issue of Time, there was an article titled "Freshen Up Your Drink". The main point of the article was that reusing single use water bottles is bad for your health. The typical purchased water bottle (Dasani, Kirkland, Deer Park) comes in a bottle made of Polyethylene Terephthalate and is only designed for single use. You buy it at the store, drink the water and throw it away. Typically, I buy one of these bottles and refill it many times from the office water cooler. I thought I was helping save the earth but reusing these bottles multiple times before throwing them away.
Apparently, the plastic used for these bottles degrades with use and actually hosts germs and bacteria from your mouth. The more you use one of these bottles the more contaminated it becomes. Its just disgusting.
The article continues by evaluating reusable bottles by Nalgene made out of Polycarbonate. These are the the most common reusable bottle I've seen. But these bottles seep BPA, a synthetic hormone that mimics estrogen. This means if your using a Polycarbonate bottle, your drinking estrogen. If that isn't bad enough, if you put hot water in one of these it seeps 55x as fast.
After some research, I decided to purchase a Klean Kanteen. This is made out of the same stainless steel used in professional kitchens and is as inert as drinking out of a glass. If you read the FAQ on the Klean website it explains how they are one of the cleanest drinking containers you can use. I never knew how bad plastic water bottles could be, and was happy and fine reusing my bottles. But once you take the blue pill you can never go back.
Any experienced developer knows not to use a regular glass during coding sessions. I've learned over the years after spilling on my keyboard and laptops one to many times. Yes, I need a water bottle sippy cup :) but my computer thanks for me for it.
Update (4/10/08) The Today show has done a special on this subject: