Sunday, July 22, 2007

Latent Potential

I was reading Guy Kawasaki's 'Rules for Revolutionaries' today, and he mentioned an interesting study. Essentially, the study asked the question "Why did birds evolve wings?" A wing that is 5% of the size of a regular wing is worthless for flight. So what evolutionary advantage would there have been to develop the nubs that would eventually turn into wings? Scientists discovered that wings originally evolved for warmth and not flight. Furthermore, they hypothesized that evolution may leave behind opportunities of 'latent potential'. Hence, when an evolutionary path reaches a certain measure of maturation, there may occur an opportunity to branch or change in interesting and beneficial directions, such as the case of the wings of a bird.

This is of keen interest to me as, like Guy Kawasaki, I see a tremendous parallel to the computer industry. The companies that I feel drawn towards seem to have this amazing ability to not only identify new opportunities, but somehow leave behind paths to other potential opportunities within their own work. I also think that companies like Google are now trying to acquire companies with high latent potential, even if the acquired company itself may be unaware of it.

There must be clues in nature to as to what kinds of decisions raise the chances of a potential opportunity. Personally, I think that simplicity, organization, elegance, efficiency, fluidity, and exposure are the keystones of latent potential. For instance, clean, organized code that is exposed to many developers, will inevitably be easier to work with and may as such, be prime for new opportunity. I think that management structures that are simple, efficient and organized, yet remain fluid, are going to produce the most innovation.

Me: The Domesticated Animal

Argh! Damn you free Google food! You have spoiled me already. My refrigerator is devoid of food because for 5 days out of the week, I have no comprehension of the necessity of storing reserves of snacks, meals, and otherwise. It only occurs to me on the weekends. Usually, Saturdays are exploration days. I'll venture out and try out one of the higher ranked restaurants I find on Yelp. However, by Sunday evening, I have run through any leftovers and make my way to the fridge. I open the door only to find one bottle of water, a half of a bottle of orange juice, a nearly empty jug of milk, and a wedge of brie cheese. I have no other food and all of the grocery stores nearby have closed for the day. Sonuva! I have become an animal that can no longer survive in the wild.

Saturday, July 14, 2007

Facebook Phenomenon

So now that I live in San Francisco and work in Silicon Valley, I cannot help but get caught up in the drama of the technology of Web 2.0 world. Recently, I read a rumor that Microsoft may be in the market for Facebook at the cost of $6 billion dollars. Are you kidding me? Word on the street is that the executive team at Facebook has in the past turned down offers as high as $1 billion dollars. Are they insane?! Take the money! Screw the IPO!

Yes, everyone I know uses Facebook and yes, I frequent it myself and maintain my own profile. However, let us think about this rationally. It doesn't make the kind of money to justify $1 billion dollars or more. I think too many people have bought into the idea that millions of eyes will inevitably lead to millions of dollars of revenue. The more tech savvy will take it one step further and suggest that millions of eyes will lead to millions of dollars "once the problem of monetization is solved!" Once the problem of monetization is solved? Seriously? I have had real conversations with really smart people who buy into this line of reasoning! In a for-profit business model, isn't the fundamental problem making money? How are you going to learn how to make money and evolve your business accordingly if you spend the bulk of your growth cycle on capturing and articulating your audience?

This is not the same situation as Google. Google innovated their way towards a solution to generating revenue. They did so almost immediately after Google started getting remotely popular. Google anticipated a need to actually make money well before it became time to turn public. So far, what have we heard from Facebook? Sure, maybe peoples' interests and the interests of their friends may yield decent targeted advertising. However, people are searching for everything on Google. People are searching for people on Facebook. There's a BIG difference.


Facebook also recently built and deployed a glorified widget platform. In my opinion, it is masquerading as the innovation necessary to bring Facebook to the level of uber-profitability. I do not think it has the potential to turn lead to gold as Mark Zuckerberg's keynote at f8 would lead us to believe. The concept of the mash-up has been around for a while and I don't think anyone has really made a killing as the middleman in such a model (read Widgets Suck for a decent opinion as to why).

My prediction is that Facebook is going to hold out for an IPO. The IPO is going to blast off initially because far too many non-technical investors will hype it up without fully understanding it. Then, with all of the financial documentation that will become available, smart people will start to recognize that there is no real money there to justify a high market capitalization. The stock will tumble and the company will be worth less than anything offered before it went public.

Maybe I'm just a pessimist, but if I were 23 and had built a website that was receiving offers of $6 billion after only 3 years of existence, I would take the money and RUN! Seriously, you made it to the big leagues. Cash out, keep one eye on your creation, and if glory is what you want, start the process all over again. Remember, Steve Jobs is only Steve Jobs because he built Apple from the bottom up twice.

Thursday, July 12, 2007

iPhone-errific

Luck is something that I must have quite an abundance of. Eight months ago, I managed to find a Wii, three weeks after its release, without waiting in line or resorting to eBay. Now, an iPhone found its way into my life, under similar circumstances.

Living only a block away from the San Francisco Apple store on iPhone Day, I could not quell the overwhelming desire to cruise by the line of iPhone campers and see what kind of turnout there was. It was simultaneously an awesome sight to behold and a dream crushing reality to face. It looked like the iPhones were going to sell out immediately. So I headed to work, head hanging low.

Later that evening, I casually wandered over and found the Apple store completely packed. I waited about 15 minutes trying to get my hands on one of the demo iPhones, but could not break through the crowds. I glanced over at the check-out line and noticed that it was conspicuously empty. One of the attendants read my mind and stepped over to let me know that there were still iPhones in stock. With a 14 day return policy, the little muse on my shoulder convinced me I could always return it. (Riiiiight.) So I bought one.

It has since been two weeks and because a friend asked for my perspective on it, here it goes.


There is no way I am going to return it. At this point, it is like an extension of my being. Over-dramatic? Perhaps. However, I have turned to it for virtually everything. Everything except work. I have come to the conclusion that if you can detach yourself from work, the iPhone is going to make your life better. And if you can't, it is probably not really meant for you. Give an HTC a try instead. It's what I used before.

The first thing I did was sync my music with my iPhone. This meant I could leave my iPod Nano at home from that point forward. Given that I have no vehicle and walk everywhere (by choice), having my music library to go through really helps make the distance seem less. I love the fact that the volume buttons on the side still respond even if the phone is in its locked mode.

Next, I pulled down my contacts from Highrise and loaded them into Address Book. My Address Book synced right through to my iPhone without much of a hassle. Somewhere in the process though, the pictures associated with my contacts were lost. It was a good time to update many of the pictures anyways, so I spent the hour it took to crop pictures off of Facebook and update my contacts. The contact list on the iPhone is good enough, but I could not help thinking what might have been had they used CoverFlow to page through contact photos to find your contact.

Since I just moved to San Francisco, searching for an apartment was a huge priority. Google Maps on my iPhone proved invaluable in finding directions from open house to open house. The built-in PDF viewer allowed me to read Craigslist entries I had printed off and mailed to my iPhone. The combination of the two functions most certainly allowed me to see more apartments in a shorter amount of time and in a more efficient schedule.

I have been using the camera on the iPhone for candid photos, eliminating the need to carry around my Sony DSC-W80. The quality seems decent enough and I love the camera shutter effect. The photo viewer is really awesome. I even synchronized some of my photo albums so I can carry them around with me to show people. I never thought I would use my iPhone for that.

I am turning to my iPhone to help reduce the amount of TV I watch and to give me an adequate reason to skip cable altogether. I started purchasing Multi-View Passes for shows like The Daily Show and The Colbert Report off of iTunes. Every morning, the latest episodes download and synchronize to my phone. Now, I can watch some television while riding the train from San Francisco to San Bruno, which is all I really need. The playback of videos, both iTunes and YouTube content, is awesome. The screen is amazingly clear.

I use the web browser fairly frequently, but mostly for applications such as Ta-Da List. There are a handful of ideas I have for iPhone applications, so I am constantly seeking out other iPhone applications to see what other people developing and how. I downloaded iPhoney and started developing some simple projects. I love that iPhone's flavor of Safari has webkit built in.

The keyboard is interesting. I'm used to stumbling through the UI of my HTC substituting my thumb for the stylus, so I have developed pinpoint thumb accuracy. Many of the problems people are having with the keyboard just have not bothered me much. I do wish that in text messaging and email applications there was the ability to flip to landscape mode.

Other than that, I write notes to myself using the notes application sometimes. However, that feature is nothing special. I check the weather on my phone all of the time because its simply faster than waking up my laptop or finding the Weather Channel on TV. I need to figure out a way to sync my gCal with my local Calendar before I'll really be able to take advantage of my iPhone's calendar features.

There you have it. I eliminated two devices from my pocket - my iPod Nano and my Sony digital camera - because of my iPhone. I travel lighter and have more access than I ever had with any phone before. People are complaining about the EDGE network, but I guess I love my iPhone enough to look the other way. I'm finding new uses for it everyday.

Saturday, July 07, 2007

Apartment Found

Awesome news! I found an apartment, secured it and signed the lease this morning. I'm going to be living in the Nob Hill neighborhood of San Francisco. It is a 1 bedroom on the 4th floor of an older building near Grace Cathedral.

More photos (Flickr) ...

This ends a solid two weeks of searching for an apartment. I am counting myself among the lucky as I have heard it can take upwards of 6-8 weeks to find a place on average.

I started out working with an agent who showed me around the city. Unfortunately, neither she nor I truly knew what neighborhoods would work best for me, so the day we spent cruising the city was rather unproductive in finding me a place. However, I quickly recognized which neighborhoods to limit myself to. I chose Nob Hill as my favorite because of the quality of properties I had been seeing around there and the proximity to downtown San Francisco and the Polk St area.

My approach was to basically save Craigslist postings into PDF files, and then organize them into folders for each of the upcoming days. I also created a folder called "By Appointment". I would do this virtually every day, aggregating postings throughout the week. That way, by the time I left for work in the morning, I would know which apartments were showing that day. My new iPhone rocked for this purpose, as I would email the bunch of PDFs to my phone and then use Google Maps to plot out my course as I walked from place to place.

I would try to hit 1-2 apartments in a specific neighborhood almost every night. On the weekends, I would try and see 3-6 or more (schedules permitting).

Pretty much every apartment, regardless of neighborhood, would have tens of people show up to see it. It was ridiculously intimidating. Often, there would be absurd tasks to help boost your chances. At one place, they simply ranked applications by line order. At another, the agent made it a race to fill out the application. First one to finish got priority. Having an expiration date on my current housing situation, these kind of games were really grating on my confidence in finding a place in time.

As of the middle of this week, I decided to change my strategy a bit and started actually following up on the "By Appointment" folder. Most of the by-appointment places required you to call the property manager and leave a name and number. I hate talking on the phone, so I started off with the properties that had email addresses listed as a means of contact.

One of the posts that I had just seen posted on Craigslist listed only an email address, and had only a one or two line description. Given the limited details, I normally would have passed over the posting, but it was only 2 buildings down from an apartment I desperately wanted, but failed to get. Knowing how much I liked the area, I followed up with an email.

Thankfully, the current tenant, who was responsible for showing the apartment, responded almost immediately. I had just had an apartment showing cancel on me when he called, so I was happy to swing over. After a tour, I decided that I liked it a lot and wanted an application. I dropped off a credit report and then took the application home. I filled it out, and emailed it off the next morning. About two hours later, I got a call from the property manager telling me I had gotten it.

Anyhow, I am super excited. I can't wait to move in. I went over this morning, looked around once more, and then signed the lease. I move in on August 1st.

Sunday, June 24, 2007

Video Walkthrough of My Temp Apartment

Here is a video I made with my Sony Cybershot camera. I'm not very good at walkthroughs, but hopefully you can get a sense of my temporary apartment situation.

Saturday, June 23, 2007

San Francisco: Day One

First random conversation one-liner heard on the street since arriving:
"Where do you think we should optimize first? Tag_ID or Object_ID?"

Saturday, May 05, 2007

Weekend Warriors

Every weekend, guys get together to drink beer, eat food, and build stuff. Their efforts combine to tear apart automobile engines, construct tool-sheds, and wire up home theater systems. I wondered if this might be possible to do with a bunch of developers/designers. This spawned several conversations over lunch at Xerox and the idea of a weekend warrior development project came about.

The goal would be to create something from nothing in one day. The result would be something that we could possibly use in our portfolios and/or contribute to further if we so desired. Ultimately, the idea is to see what kind of problems, solutions and interactions we might experience in a small team with a small turn-around time.

Today, myself and two other developers (Glenn and Rob) set out to accomplish this goal. We started at 10:00 AM, broke at around 4:00 PM, and deployed the project around 8:30 PM. The project involved creating a simple, serial blog application. (For the moment, the blog is to remain anonymous). In the end, we produced only the front page of the blog and had the basic scaffolding for creating, updating and deleting posts. We had intended to flush out the full system, but got caught up getting comfortable with our working environment. Although we might not have accomplished as much as we wanted to, we kept our focus on maintaining deployable code and were successful in deploying a working website by the end of the day.

Tools/services we used:
* TextDrive
* TextMate (Mac)
* InType (Win)
* Subversion
* Tortoise
* Ruby On Rails
* Transmit
* Campfire

Things we liked:
* Time flew by
* Everyone was actively participating and sharing
* Learned/expanded our knowledge of Rails development
* Learned Subversion
* Enjoyed the Soundscapes music channel
* Plenty of relevant books and reading materials
* Collaborating/tracking ideas in Campfire.
* A sunlit environment.

Things we need to improve:
* Prepare our tools better ahead of time.
* Have a deeper blueprint of what the project will entail.
* Have the deployment environment configured fully prior to start.

Tuesday, April 03, 2007

Realization

I think I realize now why Apple users look at Microsoft users like they are nuts, and why Microsoft users look at Apple users like they are arrogant. It occurred to me over lunch. Let's look at Mac OSX and Windows Vista as an example.

Say Consumer A wants to buy an operating system for their Mac. They go into the Apple store, pick up a copy of OSX, and hand their credit card to the clerk. Nothing impedes the transaction. They even take a step further by bringing the check-out to you at the Apple store.

Say Consumer B Wants to buy an operating system for their PC. They go into a computer store, and... they see 7 flavors of Vista. Whatever reptilian emotion was driving that purchase has now given way to intellect. Nothing could be more destructive to the emotion-driven consumer. The pause necessary to pick which version is right for you can lead to all sorts of internal conflict, which in turn gets in the way of the transaction.

Now, I can accept that Microsoft may be attempting to make Vista more "attainable" to lower budget consumers by creating different gradations of their product. However, if they want their consumers to be singing the praises of Vista, they need to get them out of the store as quickly as possible. Nothing kills the mood like trying to make a purchasing decision under the advisement of a BestBuy employee.

If you are an Apple guy, you are looking on with a smirk on your face, as you watch the Microsoft guy standing in a state of confusion. If you are the Microsoft guy, you are wondering why that Apple guy is staring at you as he's walking out of the mall.

Sunday, April 01, 2007

I Have No Self-Control

It finally happened. The amount of money in my savings account climbed high enough, Amazon had a deal, and the rest is history. I picked up a 15" MacBook Pro Core 2 Duo for $1850 + shipping. I had it next-day air-mailed straight to my office. 25 hour and 15 minutes later, I was ripping open the plastic wrap.

So far, I'm going through a sorta weird withdrawal. At the expense of sounding like a fanboy, everything just worked out of the box. It was easy, too easy. I marveled at the fact that pretty much everything was set up the way I'd have wanted it. With a new Windows box, I usually go through an entire ritual of setting up my folders, configuring system preferences, rearranging my start bar items, and so on. It can take many hours before I actually feel like I can be productive. With my Mac, I felt like I had accomplished most of everything in about 30 minutes, even at newbie-speed.

From a programming perspective, I am extremely excited. I want to be programming on a Unix-based OS. I have Ubuntu running on my old laptop, but the machine is just too broken down for me to spend any real time with it. I immediately jumped into Ruby, as I have been playing with Ruby for several months now. I wrote a quick Google stock quote scraper and it felt real good writing it using TextMate. It's amazing how much happier I feel without the integrated debugger, intellisense, etc., that Visual Studio has. That stuff is just so bulky that I feel like I can't breathe unless I'm running it on a super computer.

My next step is to see about joining some open source software initiatives. I always strayed away from open source collaborations because I just didn't feel right trying to participate using a Windows machine, even for open source Windows projects.

Sunday, March 11, 2007

It's Time to Break Up, But I Don't Know How

For over a year now, I've listened to other developers talk about how developing in Ruby, and sometimes Python, makes them "happy". I have most often brushed this off as evangelism. I like what I see in Ruby, but I just haven't been able to make a strong enough argument as to why it would possibly make me "happier" as a developer than I can be now. I think that's changing.

I have been developing in Windows technologies for 10+ years. In the early years, I was extremely content because every struggle resulted in an influx of knowledge. Lately, I think any happiness I experience as a .NET programmer comes from those few moments where I actually accomplish something easily. That is where I feel like there might be a problem.

It struck me this evening. I tried to write the most basic blog possible in .NET. Each entry would consist of a date, a title, a body and an image. Last week, when the idea took root, I decided to diagram out on paper what it would take to get the most basic list of entries onto the screen. It barely filled a 6x4 piece of paper.

Given the applications that I develop at work, with their dozens of assemblies, inter-mixed languages, web services, and complex deployment steps, I just wanted something simple... to make me happy. My goal was to accomplish as much as possible with as little code as possible.

I created three tables in the database - two entity tables and one relationship table. I created one stored procedure to access the data from the tables. I created a website project with only one page. I created two business class files - a business entity class and a business service class. Both went in the App_Code directory, not in an external DLL. I used the Enterprise Library Data block to simplify the data access. I even broke a personal, cardinal rule - I used the Web Forms Designer. I bound a repeater to the strongly-typed business entities, which came from the business service, which got its data from the database. In a matter of an hour, I had my little blog-like application showing up perfectly in my debug environment. It was working. It was clean. I was happy.

Then I tried to deploy my website to my hosting provider. Three hours later, I could not get my application working. It may have been the hosting provider, it may have been my code, but ultimately, I gave up before I could even identify who was to blame.

There was literally nothing in my little application that warranted the amount of pain that I had to go through just trying to identify the problem (a SecurityException dealing with partially trusted callers). I reluctantly made some adjustments by precompiling the website, strongly-signing it, and then deploying it. Still no luck. After scouring Google and trying every little solution that was suggested, I still could not get it to work.

I finally gave up because I realized that I was too comfortable with my mindset at this point. I knew every angle that I would need to check just to zero on where the problem is occurring. It clicked in my brain that I must go through mental checklists like this about 2-3 times a day when at work. Rather than demanding sharper tools, I have simply forced myself to be a better hunter, at the expense of my health and happiness.

The weight of the tools - tools such as Visual Studio and Team Foundation Server - is too great. The languages themselves are two constrained. Many of the better application frameworks for .NET have to dance around just to achieve their goals. Intellisense is cool, but it makes it too easy to use counter-intuitive code. Fundamentally, being a .NET developer means you are bound to these things. You react to built-in functionality rather than interact with it.

I want to be done with all of it. No more heavy-handed user interfaces. No more complex application frameworks. No more weird "by-design" functionality that is missing documentation. I just want to open a text editor, code what I need to code, and then run it. If I need to debug it, I just want to run the code through a debugger. If I want to test it, I want to run it through a test runner. I want the code and everything it comes in contact with to be light and transparent. I'm pretty sure I will never reach this goal with Microsoft's products.

Hopefully in a week or so, I will finally have enough cash saved up to go buy a Macbook Pro. I don't even think I'm going to install Windows on a Parallels instance. I want a fresh start and I think I'm going to really concentrate on Ruby. Many very smart, clever human beings look at Ruby as if its a kind of zen religion. I'm definitely in need of a spiritual cleansing and a new direction.