I'm Ryan Waggoner, web architect,
entrepreneur, dork. I build things.

0 Comments

You can’t do any good when you’re dead

08.19.10 Posted in Entrepreneurship, Goals, Inspiration, Posts by Ryan W.

Though the title of this post is true for individuals, its applicability to companies is what I’m going to focus on today. Yesterday brought the news that American Apparel is in dire financial straights and may have to declare bankruptcy. This news caught me off-guard, though I don’t follow the company closely. However, I was under the impression that they were growing like crazy and had strong financials. I don’t care much for their style of clothing, but I admire some things about the company. They have a staunch belief in making all their clothes in the US, and paying their companies a “living wage”. My agreement with their beliefs aside, it’s so refreshing to see companies that actually have beliefs that I’m inclined to admire them when I see them.

For American Apparel, while I admire their quixotic approach to business, this latest turn of events has reminded me that the road to hell is paved with bad intentions. You can set out to do the right thing for everyone involved, but without a dose of reality, you’re likely to only make things worse. Is it really going to be better for all those thousands of American Apparel employees who were making a “living wage” to be unemployed? I’m not trying to make the point that you shouldn’t take care of your employees. You absolutely should. But you also have a responsibility to keep the business solvent, because a business going under ultimately does a lot of harm to the employees and other stakeholders.

In spite of the news yesterday, I remain something of an idealist myself, and look forward to creating businesses that create long-term sustainable value for their customers, employees, and investors.


0 Comments

Brush up on your ABCs

08.18.10 Posted in Development, Education, News, Personal, Posts, Reviews, Technology by Ryan W.

Just a quick congratulations to my friend Ben Lew, who just launched his first iPad app: Interactive Alphabet. It’s designed more for kids, but if you have trouble with some of your letters, you might like it as well :)

I don’t have kids, but after playing with the app, I think it would be something that most children would enjoy playing with. It’s got fun music and sound effects, colorful pictures, and interactive animations on every letter. They really did a great job on the app, and all the work they’ve put into it over the last few months really shows. At $2.99, it’s a huge bargain compared with what you’d pay for a non-interactive book about the ABCs, and your kids are sure to spend a lot more time playing with this and exploring the alphabet.

Check it out on iTunes!


1 Comment

My first solo flight

08.17.10 Posted in Aviation, Goals, News, Personal, Posts by Ryan W.

Last month, I passed a major milestone that’s been a goal of mine for a long time: I flew solo in an airplane, without my instructor. I started taking flying lessons in 2007 but had to stop due to financial concerns (flying a small airplane is a ridiculously expensive hobby). I started up again in April 2010 and I’ve been flying regularly a couple times every week. Towards the end of June, my instructor and I were practicing lots of takeoffs and landings, and it was increasingly clear that I was getting close to being ready to solo.

July 2nd, 2010 was a clear day and we flew from San Carlos, CA (my home airport) to Hayward Executive Airport, which has a nice long, wide runway. The wind conditions were ideal: light and straight down the runway. We did a few Touch-&-Go landings, which look like this (this is NOT me; start at about 3:00):

Things were looking good and my landings were textbook, so my instructor asked me how I felt about him getting out of the airplane. We pulled the plane over, he jumped out, and off I went for three takeoffs and landings of my own. It’s really the first sink-or-swim moment for a pilot, and I’m not ashamed to admit that I was both nervous and excited. I did feel very prepared from my training, though. And I also talked aloud to myself through the whole thing, which I’m guessing isn’t unusual. Instructors could probably make a fortune by hiding audio recorders in the cockpit during student solos and selling the recordings. Anyway, my landings were all pretty smooth and uneventful, which is exactly what you want as a pilot.

Since then, my instructor and I have been working on cross-country flights and other skills, and I hope to be able to report back in the next couple months with the news that I’ve passed my FAA checkride and am a Private Pilot, but my first solo will always stick out in my mind as my first big aviation milestone


0 Comments

Why Google Wave failed

08.16.10 Posted in Posts, Reviews, Social Media, Technology by Ryan W.

A little over a week ago, Google announced that they’re shutting down Wave, their innovative web-based product that allows users to chat, share files, annotate documents, and collaborate in real-time. If you’ve never heard of it, don’t worry, you’re not alone. It didn’t really catch on, just like a lot of Google’s social efforts (Buzz, Orkut, etc). I happened to be looking at some of my old comments on Hacker News and I ran across this one that I wrote when Wave was first announced, which I think does a decent job of predicting why Wave wouldn’t work:

I know everyone in the tech community is drooling over this, but I’d give it 50/50 odds at best. The real advantage it has going for it is that Google can throw a lot of weight behind it and maybe push it through with sheer force of will. Here’s the problem with Wave: what is it? Every blog post I’ve read about it struggled with how to explain it. I read this entire post and I’m still not sure of how I’m supposed to use this thing or what pressing problem it solves. Even the videos I’ve seen are super long, presumably because you can’t really show it off in 60 seconds. “Well, it’s kind of a mix between email and IM, but also with wiki functionality and social networking…oh, and it’s got these crazy widgets and media sharing and stuff. Hmmm…you really have to play with it to understand.” 97% of the people I know wouldn’t get that, and don’t have the patience to figure it out. It seems like it’s just too flexible, that it can be used for a million different things, which makes it hard to know how to use at first. Think about almost every successful web site out there and how easy they are to explain, especially when they first launched. You would have zero trouble explaining Google, Youtube, Facebook, Flickr, Delicious, Twitter, etc. in a 60 second video.

Wave is like FriendFeed on crack, and FF is already dangerously close to being too much for most normal people to grok. I just don’t see it catching on.

I’m not often great about predictions (I thought Twitter was doomed when I first heard about it), but it’s nice to occasionally get something right :)

My rule of thumb for consumer internet products is that I need to be able to explain it to my grandparents in 60 seconds, and it needs to be easy enough to use that I can figure it out while I’m drunk [1]. Anything else is going to probably be too complicated for normal (read: non-masochistic) people to hassle with figuring out.

1. Not that I ever have been, of course :)


0 Comments

Why I’m Learning to Love Regret

08.13.10 Posted in Goals, Inspiration, Misc, Personal, Posts by Ryan W.

I used to think that I wanted to live without any regrets. The idea of living a life so satisfying and vibrant that you never look back has an undeniable allure. But over time, my thinking has changed and I’ve come to embrace regret as a healthy part of a mature outlook on life.

Regrets are the natural outcome of a life of honest reflection and a desire to learn. Living with no regrets seems to imply either incredible arrogance, or absolute denial. I’ve probably made more bad decisions than most people, but everyone makes some bad decisions, and refusing to acknowledge them removes the ability to learn from them. I also see regret as a natural outcome of an understanding that our actions and choices have consequences and matter. I don’t want to live my life in a haze under the assumption that it doesn’t really matter what I do or how I live. I want to have purpose and direction, and when I fall short, I want to see and understand the connection between that shortcoming and what happens next. If you have no regrets over the decisions of the past, then why spend any time on the questions of the future, either? They’ll soon be in the past, so if you choose wrong, you can enjoy not regretting them too.

Please understand that I’m not saying we should harbor deep feelings of shame, guilt, and depression over past decisions. I think we should be grateful, and I think we should avoid worrying too much about decisions we’ve already made. I especially think that we should avoid feeling bad about decisions that seemed good at the time based on the info we had, but turned out to be bad in the end. You do what you can with the information you have. But there’s something to be learned from every decision we make, from every step we take, and if we refuse to acknowledge that our choices and actions have very real consequences, we aren’t afforded the opportunity to learn from them.


0 Comments

Web development triage part 2 – Six steps to working on a new project

08.12.10 Posted in Development, Posts, Technology by Ryan W.

In the previous post, I covered the steps for preparing to really dig into a new project. Now that you’re ready to go, here are six steps that you might find useful.

  1. Get it running
  2. Do very high-level overview
  3. Dig into specifics
  4. Switch to clean backup or rollback with version control
  5. Cleanup unused code
  6. Fix some small bugs or issues

Get it running

I’m assuming you’re doing development on your local machine, so the first step is going to be getting the project running correctly. In part 1, I emphasized the importance of having a reference copy so you can tell the difference between config issues and things that are just broken. Get things setup, compare to reference copy, run through some user flows on both sites, and make sure you’re all set.

Do very high-level survey

I start with the basics, like where are the various config files, does it follow MVC or another design pattern, what’s the basic flow from file to file, etc. This is usually accomplished by tearing up the code, throwing debug statements around, etc. Take lots of notes, and add comments to files as you figure out what they do and why they’re there.

Dig into the specifics of the code

Once you have the higher-level stuff, try to figure out the core of the app and how it works. There are common things that most sites have, like authentication, but most projects have their own special sauce that’s unique. Sometimes it’s for good reason, often not, but you’ll need to understand it. Figure out what’s unique about this project and spend some time really mucking with the code here. Put in lots of comments and debug statements, and really try and understand the rough outlines of what the code is doing.

Switch to clean backup or rollback with version control

Depending on the damage you’ve done to the code, you might want to go back to a clean copy of the code, or revert your changes using whatever version control you’re using. However, this does mean you’ll lose those comments you made, so it’s a judgment call. The alternative is removing all your debug statements and other changes, and running through the app to ensure you haven’t introduced new problems.

Cleanup unused code

I hate code clutter. There’s nothing worse than starting a new project and seeing things like this:

  • functions.php
  • functions2.php
  • _functions.php
  • functions_by_brad.php
  • functions_new.php
  • old_functions2.php

Equally bad are files where 75% of the code has been commented out and just left hanging around. These are all consequences of not using version control properly. If at all possible, put the project in version control, figure out which of these files is currently in use, and clean the rest of this cruft out. This is optional at this stage, and sometimes I wait until later in the project when I’m more familiar with what goes where.

Fix small bugs or issues

Now that you’ve got a good high-level understanding of what’s what and how the program execution flow goes, and maybe even cleaned up some stuff, it’s time to add your own mark. I like to start with small bugs. The smaller the better, because you’ll spend time looking for where to make a small change, which gives you better understanding of the code. Big changes at first can leave you feeling overwhelmed. So look at the list of bugs or features that the client has provided and try to sort them in terms of anticipated difficulty and tackle the first couple that seem like a snap to fix.

You’ll know the project like the back of your hand in no time.


19 Comments

Disgusting.

08.11.10 Posted in Faith, Misc, News, Politics, Posts by Ryan W.

I’m not always as up to date on the news as I should be, and something caught my eye today that has probably been in the national news for months, but had previously escaped my attention. The issue in question? The Ground Zero Mosque.

At first I wasn’t sure what the controversy was, and I read through some articles trying to understand, before I realized that people are literally just upset because a mosque is going to be built near ground zero.

Oh no! Anything but that!!

Seriously, this is the world we live in now? I was surprised to learn that the majority of Americans are against the mosque being built there, and that even the majority of New Yorkers are against it. What ever happened to religious freedom? I was under the impression that America was founded in large part to escape these kinds of ridiculous attitudes. This is like being upset that some Japanese people live near you during WWII. Oh wait…we actually rounded those people up and put them in camps. Some things never change.

Stuff like this is why I don’t read newspapers or watch TV news. It’s too depressing to be constantly reminded that I share my country with such ignorance and stupidity.

Stay classy, America.


0 Comments

Why it doesn’t bother me that I can’t share Kindle books

08.10.10 Posted in Education, Misc, Personal, Posts, Technology by Ryan W.

I read a lot of books. And probably 75% of the time I’m reading a book, I think of someone I’d like to recommend the book to. I used to loan copies of books to people, or even buy them a copy if I thought it was particularly good. But then I got a Kindle, and at first I was a little bummed because I can’t share books anymore. However, a friend today pointed out something that I hadn’t ever stopped to consider: are all those books I was loaning out and gifting being read? The cold, hard truth is no, they’re probably not. Most people aren’t readers; they don’t have the attention span to read a full book. The statistics on literacy in the United States are appalling:

  • 1/3 of high school graduates never read another book for the rest of their lives.
  • 42 percent of college graduates never read another book after college. (!!!)
  • 80 percent of U.S. families did not buy or read a book last year. (!!!)
  • 70 percent of U.S. adults have not been in a bookstore in the last five years.
  • 57 percent of new books are not read to completion.

And even if they are readers, they might just not be interested. So while I always felt good about giving books to others, I wonder if it really made any difference. I’m still free to recommend books to others, and I do so constantly. They might not go read them, but I’ve realized that if the hassle of going to get the book is too much to overcome, reading it is also probably too much to overcome. And that reminded me of a very appropriate quote:

“Is it advisable to spread out all the conveniences of culture before people to whom a few steps up a stair to a library is a sufficient deterrent from reading?”
~Ayn Rand (The Fountainhead)


1 Comment

Web development triage part 1 – Six things you need before you work on an existing web project

08.09.10 Posted in Development, Posts, Technology by Ryan W.

As a contract web developer, I frequently work with clients who have gone through one or more developers or development agencies and still haven’t achieved the goals they want, so they bring me in to mop up and finish the project. The sooner they call me, the better, but I often don’t come in until the situation is dire. Getting up to speed on these projects is the first step to being able to move them forward, either by cleaning them up and finishing them, or recommending the client start over from scratch. Here’s the process I use, but I’d love to know how it can be improved.

To get started, you’ll need six things:

  1. Any existing notes, documentation, etc.
  2. Knowledge of the platform
  3. Pen and paper
  4. A reference copy
  5. Good backups or version control
  6. Time

Existing notes or documentation

Obviously, it’d be great if you had good docs on how the project was designed and what’s where, but that’s very, very rare. Clients don’t usually want to pay for documentation, and if the developer was the type to do documentation anyway, I probably wouldn’t have been called in. So your options are to either forget it, which is usually what happens, or to talk to the previous developer and get the info from them directly. If you have access to them and they’re willing to help, take advantage of it. Half an hour on the phone can save you hours later.

Knowledge of the platform or framework

If the site is built in Drupal and you’ve never used Drupal, you’re already at a disadvantage, because you’re going to be trying to learn both the platform and the project simultaneously. If I’m working on a new platform or framework, I like to take an hour or two to really try and understand it at the high-level. Most good frameworks and platforms today have a “getting started” guide and often a few demo projects or applications that you can play with and examine the code for. Read through the docs, look at some code, download other people’s apps if you can and look at those, just to get a feel for the style and flavor of the platform. Try and look at official code if you can, or at least projects that appear to have been coded with good practices.

A reference copy

This one depends on exactly how you’ll be handed the project, but I’m often just given access to the server or get the project files sent to me. I prefer to do my development locally, so the first thing I’ll have to do is get everything setup on my own machine. Almost by definition, this project is usually broken in the state that I receive it, but it’s hard to know exactly what is broken and I need to get it setup correctly. So I find it useful to have a version running somewhere (usually on the client’s server) that is as functional as possible. That way, when I setup my local copy, I can ensure that I have things configured correctly, and the issues I’m seeing are the things I’ll be fixing, not just me not having things setup right.

Good backups or version control

You’re going to be tearing the code up, editing, adding comments, tracing execution, etc. and you don’t want to introduce new bugs that you have to track down as well. Obviously, using version control software like Git or Subversion is ideal, but even just a simple backup of the project files will do in a pinch. The important thing is to have the peace of mind that you can rip into the code as needed, because you have a clean copy to revert to.

Pen and paper

You’ll be adding comments directly to the code, but you’ll also want to make notes on higher-level architecture details that span multiple files or folders, questions that you have that you want to remember, etc. Just keep a pad and pen by your keyboard and jot down notes as they occur to you. They probably won’t be useful past the first few hours in the project, but they can help you avoid losing track of questions or realizations you come to.

Time

Obviously, it depends on the size and scope of the project, whether it was done from scratch or in a platform like Drupal or WordPress, and the quality of the codebase in general. However, I generally find that 2-3 hours of dedicated time can usually give me enough time to at least understand the high-level outlines of a large project, and really understand the problem areas of a small project.

Tomorrow, I’ll go into detail about how to actually jump into the code and start cleaning things up.


3 Comments

The Inerrancy of Scripture, Part 2

08.06.10 Posted in Faith, Personal, Posts by Ryan W.

I wrote a post a few days ago about Young Earth Creationism and the inerrancy of Scripture, and I think some of the commenters misunderstood the point I was trying to make, so let me try again.

Imagine an isolated group of non-religious people discover a new book about reality. It purports to offer answers to their deepest questions, and includes a lot of details like predictions, history, and other information about how the world works. At this point, there are three possibilities:

  1. The book is wrong about everything.
  2. The book is wrong about some things, and right about others.
  3. The book is right about everything (inerrant).

Now, imagine that as they explore the book, the more discrepancies they find between the book and reality. So now they know that the book is not inerrant. Or do they? Assuming binary truths where one of the two sources (reality or the book) are true, there are two ways to explain these discrepancies:

  1. Where the book and reality differ, reality is wrong and the book is right. (Actually, it’s really only fair to say that the interpretation of reality is wrong, because reality by definition is what’s real, what’s true. So reality can’t be untrue, because then it would be both true and untrue simultaneously.)
  2. Where the book and reality differ, reality is right and the book is wrong.

Actually, there’s a third way to explain the problem: perhaps our interpretation of reality is true, and the book is true, but our interpretation of the book is untrue.

In the context of Scripture and science, I think this is essentially the situation we find ourselves in. The problem is that a dogmatic attachment to a particular interpretation of Scripture rules out explanation #3. In other words, we cling desperately to our particular interpretation of Scripture as being the only way to interpret it. So when discrepancies between Scripture and our interpretation of reality (science) are found, we have no choice but to conclude that it’s the interpretation of reality that’s wrong (#1), not that Scripture is wrong (#2) or that our interpretation of Scripture is wrong (#3). This is not a terribly unreasonable line of reasoning to take, but only to a point. If we find only a few discrepancies, it could very well be that our understanding of reality (via science) just hasn’t quite caught up yet. However, the further that science and Scripture diverge (and again, assuming you’re unwilling to reevaluate that your interpretation of Scripture may be flawed), the more you have to argue that reality is not at all what it seems. And it gets to the point where you start to wonder what’s more reasonable: believing that everything you can see and hear and touch is fundamentally different from what it seems to be, or that the book just simply is wrong about some things?

Which brings me back to my original point: if the group of people who found this random book found everything or nearly everything in it to be perfect and true, it seems very reasonable to conclude that it’s probably inerrant. But the more errors that arise in the book, the more an outside observer would have to wonder why they clung so desperately to the belief that it’s inerrant in the first place?