.

Presentation at First |

СеоХудожникподаръци


If the Shoe Fits |

Иконописиконографиямека мебелИкониI was driving in my car and catching up on some podcasts. I switched on the Change Log. The episode was all about DevOps. I love it when I find out that there is a term for something I’ve been doing for a while.

In the broadest sense, DevOps is about bringing development practices into the system administration universe. Most of the time I end up playing the system administrator on the team (until we get large enough that we can hire an actual system administrator). I always felt like the practices would be improved by adding in a more developer way of looking at things.

For a while I used something called cfengine. It was a HUGE improvement over no configuration control whatsoever. It is the grandfather of this whole movement in a lot of ways. Just as a word of warning, unless things have significantly changed since I used it – please don’t use cfengine. It is very exciting at the beginning when you start to get stuff to work, but as change occurs it gets harder and harder to keep up.

After seeing the potential of cfengine, I started looking for an alternative. I found Puppet It is written in Ruby (which is great since I’m ruby fluent). It also seemed to be able to address a lot of the problems and frustrations I had with cfengine. There weren’t a lot of alternatives. I spent some time trying to get everything to work. My dream was to be able to build a complete virtual environment in kvm that would let me model the entire deployment of our applications. Not too long after I started down this path, someone announced that Puppet sucked and that they were starting a new tool – Chef. Chef had a more bare metal approach to configuration management. I ended up avoiding it because at the time there was no way to tell if they were going to build a community and survive.

In the end, I ended up dumping all of them. Not because they weren’t good, but because instead I started launching apps at Heroku. Since it takes care of so much of the deployment stuff, I just quick worrying about DevOps all together. It takes me about 5 minutes to get a Rails/Javascript app working on my workstation and it seems a little silly to bother with Chef or Puppet for that.

From the sounds of the discussion on the podcast, Chef has come a long way since there. There is both a community and a company behind it. Which is good to hear. About ten minutes in they started to discuss something that is having a profound impact on my relationship with my brother – Cinderella

It only takes me a few minutes to get my development environment up and running. My brother is my designer. As you might expect he runs a mac. Actually, he runs a lot of macs. He has a mini at home, a macbook in his bag, and a mac pro at the office. It is not bad enough that getting all the open source stuff onto his box is a pain, but keeping all three boxes working is a special form of hell for me. It turns out I’m not the only dev out there who hates having to support a designer on a mac.

That’s where Cinderella comes it. It is built up on homebrew and chef. Officially, to get running you just do the following on a mac:

curl https://github.com/atmos/cinderella/raw/master/bootstrap.sh \
-o - | sh

You wait for it to complete (about an hour) and then you are off to the races.

We ended up doing a lot of experimentation with this so let me help avoid some serious pitfalls:

  1. Update X-Code!. The first time we installed Cinderella was on a box we had just installed Snow Leopard on. It turns out that there is an X-Code update you need before Cinderella will work.
  2. Update Rubygems. Apple is trying to be helpful by shipping macs with a bunch of gems pre-installed. They are all out of date. The most important one to fix is RubyGems itself.
    sudo gem update --system before you start the Cinderalla process or you will run into problems installing bundler later.
  3. You can do this on a mac that isn’t freshly installed. We did it once on a freshly installed macs and then switched over to installing in on his macs that already had other software installed. The key is to get rid of fink/macport, /usr/local, rvm, and any other open source software that you installed in the mac in some other way. You could probably keep them around, but it will end up being a lot more confusing so clean out before you start installing
  4. I put in a bug about this – but if you are using .rvmrc files in your project – add .rvmrc file to the person’s home directory with:

    export rvm_install_on_use_flag=1
    export rvm_gemset_create_on_use_flag=1

    That will allow rvm to automatically install stuff and will be a lot less confusing for the mac user.

It takes a while for everything to come down, but there is something truly amazing about the fact that you get all of this stuff just installed and working for you. As a bonus, the script can be re-run again to update things. Also, everything it put into ~/Developer so getting rid of it is a lot easier if you decide to bail out.

The only thing I need to figure out now is how to choose which version the software installs (since it chose Postgres 9.0 but to mirror Heroku it needs to be 8.4). That’s a pretty small problem compared to how much effort it saved me.

So if you have a designer and you’re stuck supporting things like ruby,git, mysql, postgres, or node.js – give this a try.


Hibernation for Winter |

I have run Ubuntu on a laptop for a long long time. Through that time, I’ve had hit and miss support for hibernate and suspend. Sometimes it never works on a given laptop. Sometimes it starts out working and eventually it just stops working.

Most of the time I have just chalked this up to a rough edge that will eventually be smoothed out for me by the fine people who work on open source. It doesn’t help that about the time things get good, I end up upgrading to a new laptop that has a new list of unsupported not-yet-supported hardware.

My most recent upgrade was to a Toshiba Protege r705. I wanted something more powerful than a netbook, but since I’ve switched back to workstations for development, it didn’t have to be a 10 pounder.

It is largely supported, but hibernation has been a disaster. It claims to hibernate (which takes a while),and restoring from hibernation takes so long I have a hard time imagining something hasn’t crashed. It has gotten so bad, that I did something I hate doing. I waded into the Google on the matter. After some searching I ended up at the Ubuntu forums. I’ll admit I’ve found more than my share of solutions in forums, but only after a thousand dead ends. All too often I find the a forum post with my exact problem and 10 pages of people who never seem to discuss the solution.

In this case this thread proved very useful.

To save you the trouble – here are the steps I followed:

  1. sudo apt-get install hibernate laptop-mode-tools
  2. edit /etc/default/acpi-support – add “hibernate” to the list of supported methods
  3. edit the /etc/hibernate/suspend2.conf
    • Change Compressor lzf to Compressor lzo
    • Added in some services to shutdown/startup RestartServices mysql postgresql-8.4
  4. Manually replaced a script to force hibernation
    • cd /usr/sbin
    • sudo mv pm-hibernate pm-hibernate.orig
    • sudo ln -s `which hibernate` pm-hibernate

After that, I can actually hibernate in a reasonable amount of time (with a nice little screen report of how close to being done). The best part is booting back from a suspend happens fast. Fast enough to make it worth it to me to hibernate again.

Nothing in here feels very Toshiba specific, so if your hibernation sucks – you can try this as well.


Getting the Most out of Github Issues |

For the longest time, I ran my own git server. I got a github account when I decided I wanted to start sharing code publicly. Then when I got serious about a startup, it just seemed like the obvious choice to host the code for our product since our team is spread out (San Antonio, Chicago, and Warsaw).

GitHub has a lot of features beyond just simple repository hosting. The social aspect of being able to not only fork, but use that as a means of a communication is really powerful. I’ll admit that much like I think better of an application that ships a deb, a project on github makes me more comfortable mixing it in to my tool kit.

The tool that took me the longest to the hang of is the Issue tracking system built into github. It is a little slow (given how much work they’ve done on the Wiki feature I’m hoping this is going to get some love), but other than that it is really pretty awesome.

Purpose

If you are going to use the Issues tracker, you need to make sure that everything you do fits with its purpose.

The purpose of Issues is to provide a single place to store possible development work, and to manage what work is going to be done.

That gets broken down into two parts. The first is as a single place to store possible development work. When I originally started working with github, I used the wiki a lot more than Issues. The Wiki just seemed friendlier to the format and creation of stories. We would pick work from there and then use it to track everything. There is a distinct possibility that you could make that work, but what inevitably happened was that as soon as we started working on a story it got transfered to a issue. That just made it a heck of a lot easier to track the workflow on the story. Over time, I stopped putting stories in the wiki at all, and just went straight to Issues.

Even though it should be the single place for storing possible work, it does not mean it is the only place you should take feedback. At TruckingOffice, we use Zendesk to deal with customer issues. One each customer ticket that gets submitted, it gets triaged. If the problem they are having needs to be solved by code changes, then a new issue is opened in github.

I’ve experimented in the past with allowing tickets to flow directly from customers to developers. Unless your customers are developers, it just ends up in a really messy communication flow since through no fault of their own – customers rarely capture everything you need to know if their first submission, and for really bad issues you get a lot of duplicate submissions. The goal is to put issues into github in a form that allows a developer to take action on the problem. In the case of a story, you need to give a full statement. In the case of a bug, that means some guidance on how you detect it and if possible how you replicate it.

There are also a couple of practical issues with having customers put tickets into github. They need a github account, which if they already have one says something about what kind of person they are. If your repository is private, then I believe you would have to add them to the project which is going to be expensive and unwieldy unless you only have a couple of customers.

The point of all of this is, you can use lots of different tools to gather what ideas about what needs to be done. The most important thing is to make sure it all gets into the issue system. Maybe it was because I love lists, or because I spent so much time at Rackspace, but my first question once an issue gets brought up is – “did you start a ticket for this?”. Get in the habit of opening issues. It is much much easier to close an issue if it exists than if it is just something you talked about at a meeting.

Sorting

Now that you have all of you work in one place, you get to the second key of using Issues – manging what you are working on. If you are like me, you start with just dumping issues into the system. You start by just working on the first in first out (or more likely last in first out). Once you get enough issues, you start messing with priority and trying to keep the stuff you want to look at at the top. After you cannot keep up with that, you might finally glance over at the right hand side and notice a thing called “Labels” which is just a way of tagging your issues.

Now I’ll admit that the label system is not perfect. For example you can filter the open list down by only one tag at a time, but there are some easy ways to work around that problem.

Here is how I setup my labels. I’ve included a list of my standards as well as my color code. You can always add or subtract to the list. You can also choose different colors. I recommend you use colors because it makes it much easier to get a sense about the issue you are looking at. Github allows you to tag an issue with multiple tags. Make use of that. Because of the issues with sorting, it is really really essential that you tag an issue with all the tags that apply to make sure it will show up in the list as you sort it different ways.

  • Bug: Color: red. This should be the most obvious category. This issue is about something that is broken.
  • Deploy: Color: bright blue. In small teams, one or more of the devs usually gets stuck with the deployment job (or more accurately when I’m on a small team I get stuck with it as well as development). Keeping track of deployment issues in the same place as everything else makes release planning a lot easier. It also smooths things out if a deployment issue needs dev work.
  • Feature/Story: Color:black . You can use either term. On official projects I tend to use the term story because I tend to be more disciplined about actually writing stories (As an X I want to Y so that I can Z). On my personal projects, tends to get a little more free form. Any time you see something in the issue that means you are making an improvement add this tag. It will help you write your change log later for your customers.
  • I-1 or I-n: Color: white,grey, bright green. Color depends on the stage. They are default grey when created. If they are completed I make them white. If one of them is active I make it bright green. The I stands for Iteration. I use a number once it is actually in use. I use an n as a place holder. I have bastardized the term iteration in this usage. Basically, I use these tags to collect up issues that follow a theme. For example – user authentication or integrating with google. When it comes time to schedule work, I can actually choose a bundle of issues that are thematically related. Or in some cases, ignore a bundle of issues because their overarching theme is not that valuable yet. I try to have only one be bright green. That way I can see what is currently in play.
  • Question:Color: pastel blue. This is for any issue that needs further discussion. You could have questions for the person who submitted it or you need to talk to other devs about how to solve the problem. This tag makes it easier when you are looking at the list to see issues that need some kind of external input separate from code.
  • R-n: Color: white,grey, bright green. This follows the same pattern as the I tags. White for complete, grey for created, and green for active. They get a number depending on the release you are on. You can tag any issues for iterations that are part of the release with the release as well. I also use it as a tag to see where things are at in terms of bugs and other issues that are coming up before and after a release. So for example, you can tag all of the deploy/bug/features that are part of the next release with this tag. That helps track the punch list building up to your next big push out. Afterward, you can use it to collect bugs that come in after things have gone out or any issues that don’t have a clear theme. Once things have calmed down, you can move on to the next release tag and continue planning.
  • Ready To Test:Color: yellow. I use this when an issue has been submitted and I think it is done, but I need some kind of confirmation from the person who submitted the issue. This one became more important when I was working with remote developers. I can go in an look for this tag and then look at the tickets that I opened to see which ones I need to verify. If things look good I can close the ticket. If they don’t I remove the tag and add a comment, and it will end up back in the queue for work.
  • Technical Debt:Color: Orange. I did say keep all possible work here right? Technical debt is one of those things that is often discussed, but not often integrated into the work plan. Instead of burying it in a wiki page, or worse just letting it float in developers heads, put it in into the system. I find this really liberating. When I commit some kind of technical sin, I open a ticket and flag it. It allows me to stay focused on the feature without a ton of guilt. If I find a way to work on it after my feature work is done, fine, but this way it is captured and can be added to the schedule. You would be surprised at how much more of this stuff you would clear out if the list of what needed to be done is explicit.
  • Unsorted:Color: Dark Grey. I’m still playing with this one. When I add a feature and I do not see an iteration or release tag that is appropriate, I mark it unsorted. To me it means either this is a one off issue that needs to be put into a release, or it is the beginning of a new theme. It basically a reminder that things with this tag are probably never going to be worked on until some one organizes them.
  • Ux:Color: Bright Purple. This stands for User Experience. It was originally UI (User Interface), but it got broadened. You could conceivably have both. Mark it UX if it is related to either how something looks or its work flow. So if buttons are drawn in the wrong color, or there should be a confirmation on a delete. I break this out because a lot of the time, I partner with my brother who handles these kinds of issues. That’s also the reason for the color since he loves purple. Sometimes this serves as a warning to me that the feature or bug I’m taking is going to be more than just a quick codefest. It may require some styling or more thought about how to make something less confusing for the user.
  • Userid:Color:grey. Github Issues doesn’t let you say who is working/responsible for a ticket. The easy solution to this is to create a label with the userid of each team member. When you take a ticket, label it with your name. That makes it easy to see what things are unclaimed and who to talk to about the work.

Here is a sample from one of my projects. I’m just finishing up the first release – which included I-1,2,and 3.:

Tags

Conclusions

You may have to tweak some of my suggestions to fit the size of your team and your workflow, but at least now you have a starting point to take one of the features of github that is all to often squandered and turn it into something that enables you to keep focus on what you need to get done.

One Side Note

For those of you who spend as much time at the console as you do the web browser, github actually has a complete REST API for Issues. I ended up making heavy use of it when I migrated from another wiki in to github. I basically just created a csv in open office. Then I used their API to push all the information into Issues for me. That saved me a ton of time.

If you want something a little more flexible you can check out ghi. This is a command line tool that wraps all of that API. It give you another path to interacting with Issues. For example, I use ghi to make it easier to create technical debt tickets from the command line so I don’t get distracted by going to the website or leaving my work. A little bit helps.


Hanging on to Lucidity |

I ended up reinstalling my home workstation over the weekend. I did it for all the wrong reasons it turned out. Mostly because the problem I needed to solved ended up being in my gnome configs instead of the system as a whole. But in the process, I did something I don’t think I ever done. Maverick (10.10) has been out for a few months. I went and looked at all of the articles about what new things it brings to the table. After reading them, I decided to stick with Lucid (10.04). Partially because as an LTS it is stable and partially because by staying here I won’t be forced to upgrade every other box I use. (Yes I know I don’t have to but I’ve learned it ends up being annoying when you have different software on different boxes – best to keep them in sync).

I’m super excited about Unity. I won’t miss X when it goes away (assuming they can get Wayland to work). While I’m waiting, I did learn a couple of tricks to improve my Lucid install while still avoiding Meerkat.

Since I’m using an SSD as my boot drive, you need a newer kernel than the one that ships with Lucid to get TRIM support.

They are currently offering the Natty Narwhal as a backport for Lucid.


sudo add-apt-repository ppa:kernel-ppa/ppa
sudo apt-get update
sudo apt-get install linux-image-generic-lts-backport-natty linux-headers-generic-lts-backport-natty

Once you switch over you can add discard option to your fstab to get TRIM to turn on.

The only pain I experienced was the Nvidia drivers for my card stopped worked because of the newer kernel. I downloaded the Natty packages for that


nvidia-common_0.2.24_amd64.deb
nvidia-current_260.19.21-0ubuntu1_amd64.deb
nvidia-current-dev_260.19.21-0ubuntu1_amd64.deb
nvidia-current-modaliases_260.19.21-0ubuntu1_amd64.deb

and they installed like a charm. I’ve even survived some updates to the kernel without losing X (Which is a nice change of pace really). Now they just need to release that 200 line patch to the kernel that is suppose to make the desktop experience even more awesome.


Vim vs Rubymine? |

I’ve been in the VI/Vim camp for a long long time. When I got started with Unix (I started out on HP-UX – but don’t worry Richard showed me Linux and I’ve never looked back.) you had two choices – VI and pico. Pico was a simple text editor. If memory serves it was developed to be the text editor with the pine email system. As a consequence, it had one feature that could make it a nightmare – it automatically wrapped lines. (as pointed out by Richard you can avoid this fate by remembering to add a -W. It didn’t help that for licensing reasons – there was/is no pico for Linux. They have nano now – but by the time that was standard I’d paid my dues) That’s pretty desirable for email, but terrible if you are writing code or a config file. I ended up learning the basics of VI.

I have a friend or two who swear by emacs. It was has always been on my list of things to spend a week really learning, but I’ve just never gotten there. The reason is simple. Every Linux box ships with Vim. It is right there waiting for you. (Ubuntu’s default is a little crippled but I’ll get to that). So if you end up modifying files on remote machines (which was once a regular thing for me) it is an essential skill.

If you are going to use Vim – there are a couple of things that I couldn’t survive without. Namely splitting and search & replace. Splitting is easy to explain – you are able to split the terminal in half (or less depending on how many things you keep open at once). You can even split the file you are in so you can look at two different parts of the same file. That ends up being pretty useful when you are dealing with code, or you are looking at a config file that should be similar to another block in the same file. Keyboard command is

ESC :sp

If you need to switch between “windows” there are a bunch of ways (like everything else in Vim) but you can stick to Ctrl-W to rotate through them.

Several of the people I’ve worked with complained most about my constant opening files, splitting, making changes, and then closing files before they knew what files I was opening let alone what I was changing. Once you get the hang of it, it is awesome. Unless of course you are on an Ubuntu box that has vim-tiny. Vim-tiny doesn’t support splitting. It drives me insane and is the first thing I upgrade when I touch a box.

Which leads to other essential skill – search and replace. There are probably books written on this subject. I won’t repeat, but I will show you some things that I end up doing a lot.


%s/\(.*\)/mv \1 \1/g

That says for all lines (%s – s means a single line) take the contents of the line and replace it with mv (the contents of the line) (the contents of the line). I end up using this to build a shell script to rename files en mass. You can do more than this – but it gives you a taste. And if editing a single file isn’t enough you can do the old


vi `grep -rl pattern *'
:argdo %s/pattern/new_pattern/ge |update

That builds up a list of files recursively and throws it into Vim. Then the argdo lets you do a search and replace across all the files. You can do something similar with :args but I can never remember how to make it recursive.

Over the years I’ve programmed in a lot of different languages. I always seem to move on to the next one just as the tools for the one I’m in start to get good. So I’ve never really used an IDE (Integrated Developer Environment) as part of my work. I couldn’t afford them when I did C/C++. They didn’t exist for PHP or Python when I wrote in them. The Ruby on Rails community was completely dominated by Textmate (and the mac fanboyism that went with it). But since then things have improved a lot. There are even choices now. I originally got exposed to RubyMine when the developers on the team were starting to move away from Textmate. They seemed to like it. I didn’t think much of it since I had Vim. Then later when I was working as a developer on TruckingOffice in a pair, I got an ultimatum. I had to use a tool in common with the other developers or I wasn’t going to get to stay in the pit. I guess I split files one too many times. I reluctantly switched over to RubyMine. As time has passed, I’ve come to really like it. I have even been playing with the community edition of IntelliJ since I’m experimenting with Android development.

It has more features than I could shake a stick at, but there are two that have become essential to my sanity. The first is focus tests. You can point at a single example in a spec file and have it run. This saves me a bunch of time when I’m working on adding a feature or fixing a bug. At one point, I spent a week learning the internals of Vim enough that I could add a plugin to do the same thing. I got something to work, but it is no where near as elegant. Especially because of the other feature that I’m hooked on – debugging.

In the past, debugging to me meant adding printf/echo/puts to the file that was causing the problem. Rubymine has an excellent debugger integrated in. And if a test fails, you can easily add a break point and switch from running the spec to debugging it. Between RubyMine’s debugger and Chrome’s debugger, I’m left wondering how I programmed so long blindly.

I would love to say that now I do everything in RubyMine. I guess old habits die hard. I do all my coding, and testing there. I still end up with terminals running tasks (which I know RubyMine can do) and opening files from time to time in Vim because in some ways it is just how I think about it (even though RUbymine has enough keyboard shortcuts to satisfy a six armed man).

So if you are a system administrator – get learning Vim. Add a new command a day and in ten years you’ll have mastered it. If you are Ruby dev, I highly recommend RubyMine. I’ve resisted a lot of changes to how I develop, but this one is worth the learning curve.


Nexus One – Day 14ish |

холови гарнитуриOk I’ve spent a lot of time with the Nexus One. I did put my SIM card back in my iPhone once, but that was part of a configuration issue not because I was switching back.

The best discovery so far has been Slide Screen. This app takes over your home screen and condenses so much information into that single screen I’m still amazed. It manages to show my missed calls, SMS, Twitter, Facebook, Google Reader, and stocks. The only downside is some extra button pushes to get to my apps, but it is a small price to pay.

I had a real problem pairing my phone with my Nissan Cube. It would say it was connected, but it refused to route sound through my handsfree system. The good news is that there is a solution. The bad news is that it was esoteric enough to make me very sad. You have to go to the Bluetooth connection and click on “Options”. I unchecked “Connect” and made sure “Phone” was checked. Why this works – no idea – but it does.

I have a personal Google account. I also have a work Google account. I was able to add both accounts to my phone. This allows me to merge all the contacts which is great. The bad news is the OS only handles adding events to my primary (personal) calendar. It just ignores the other calendar. People have advised me to share the calendar but Google Apps won’t let me share the calendar across the two domains. I was hoping it was just something I messed up in the configuration. Unfortunately, I haven’t found a work around, but hope spring eternal. The really frustrating part is that I was able to do this on my iPhone…

Update This turns out to be my own fault. On Google Apps Accounts, you have the option to forbid sharing a calendar outside of the domain. Once I turned this off, I was able to share my calendars across accounts. Plus there is now an option in the date creation to select a calendar – so I’m back in business…

1Password was my password store of choice on the iPhone. They don’t have any plans to release an Android version. That forced me to start looking for another option. I ended up settling on LastPass.com. The base product fully supports Windows, Mac and most importantly Linux. They have mobile clients for iPhone, Symbian, and Android. The base version is free , and the mobile is $12/year. Migration over was easy and so far I’ve liked it a lot better than 1Password. The best part is OTA sync of passwords. Before I always had to check in with a mac at home to keep a backup of my password database.

I was easily able to upgrade to a 16GB sd card. Once that was installed, I started encoding video for a trip. I was able to find profiles for DVDFab and Handbrake. DoubleTwist sounds really cool, but doesn’t run under Linux so I haven’t used it yet. I guess this brings up the content issue. When I had an iPhone, I bought my mp3s on Amazon and most of the movies I watched were just re-encoded from my DVR. Now that I’m on Android – I buy my mp3s on Amazon and most of the movies I watch are just re-encoded from my DVR. As you can see not much of a change for me. If you are an iTunes addict, don’t think about coming over. Apple solved this content problem a long time ago (assuming you can run iTunes).

This actually brings up one of the things that I don’t miss. In the Apple world, my iPhone was tied to a single computer. That computer handled all the downloaded of mp3s,movies, and podcasts. If I was at another computer I was pretty much out of luck unless I wanted to wipe my phone and start over. I love that I can connect my phone to any of my computers (workstation at home, at work, laptop, netbook, or otherwise).

I ended up standardizing on My Pod as my podcasting tool of choice. It can be a little clunky but it has a freaking lot of features. I miss the iTunes podcast directory, but I love that I can download new podcasts directly to my phone – over wifi or cell – and that it doesn’t wipe out my music collection (which has happened a couple of times on my iPhone). That basically means I get more podcasts on the go – which works out a lot better since the time I really need my podcasts is on the road traveling.

I still miss the games from my iPhone – mainly Puzzle Quest and Plants vs Zombies. I hold out hope that the games will catch up.

Even after two weeks, I’m still impressed how fast the phone is. I’ve also been very surprised with reception. I’ve had a lot of failed calls on my iPhone. I assumed that trend would continue on my Nexus One since it is on the same network. So far, no failed calls. Nice change.

Updates – the phone tells you there are updates for the apps – great. There is no update all :( You have to update each application individually….annoying.

With the iPhone it is always the little things that really remind you how awesome it is. In this case, it was leaving behind Visual Voicemail. It turns out you can get it back if you forward your phone to Google Voice (which I have an account for). Then things work out well. The snag in that process was, I left voicemail on AT&T. When I swtiched everything on the phone over to Google Voice I could no longer retrieve the voicemail from the old box. I just kept getting a notification to check my voicemail. This is why I had to put the sim back in the old iPhone, clear out the voice mail and switch back. It now works great – even if it was a little confusing.

Two last things on the broader topic – First – iPod integration = iPhone integration. Now that I’ve swtiched over I run into a lot more hassles. For example, my Cube doesn’t offer a way to get sound out of my phone into the stereo other than the headphone jack. That means I can’t pause or change tracks from the control system anymore. I tried to mount my phone in my wife’s Range Rover and just got a “Device Error”. I was just at a hotel and it had an alarm clock with an iPod dock. Now that’s pretty much useless to me. This is one of those things that isn’t a deal breaker but is annoying enough to remind me I’m on a lesser platform…

Cory Doctorow and the Apple Hating

There has been a lot of talk from the tech side (iPad Clash) about the iPad. This is a spill over from the Android vs iPhone OS debate. I hear what Cory is saying about openess and the walled garden nature of Apple’s products. I dont’t think that is an unfair criticism. The real issue is that most people just don’t care. My wife is an avid user of Apple products. She loves them. She likes how they look and feel. She likes how easy it is to do stuff. She likes the way they just seem to know what she wants to do. The numbers don’t lie – there are a lot of people out there who feel that exact same way. I don’t see a conspiracy in that. People want what they want. Some part of me wishes that I was in that group. Instead, I know how much time and money Apple has spent polishing their products. That’s why it annoys me to no end when it won’t do what I want it to do (like allow me to load a movie on from another computer or show my calendar on the lock screen). When I use Linux or Android and things aren’t perfect – it doesn’t bug me. They are plugging away at things and they will get better. The deficiencies are rarely the result of someone making a conscious decision to block me from doing something. Both of the things I mentioned above were decided by Apple for business reasons. That is what sticks in my craw. Maybe it is an idealistic view of technology, but that’s how I am. I know for a fact that most people aren’t like that. In some ways, that worries me because I don’t have a problem with people choosing Apple as long as I get a more open option. The fewer people like me, the less viable that other option is. I’ve seen this fight before. The Internet was the great leveler that has allowed me to function as a full member even though I’m using a tool that is by many standards still a fringe choice (desktop Linux). I hope that as Google and Apple fight over the software driven future of the mobile computing platform that I get to continue to go my own path. (Ironically, I used a Mac for a long time when it was a doomed platform – so I learned a lot about how to survive as an outsider to the Microsoft kingdom. Guess that training continues to be useful). I suppose the real test will come when my wife’s iPad shows up and I see if it “changes everything” for me.

So I’ll leave my review at this – if you love computers then the Android platform is great. It can be what you want it to be in a lot of interesting ways. If you are on a provider that doesn’t offer the iPhone – it is great. It is part of the phone as actual software delivery system revolution that Apple pioneered. Otherwise, I have a hard time faulting you for choosing the iPhone. It’s slick, powerful, and everywhere.

Update:As a bonus, Apple will announce iPhone OS 4.0 in 3 days. Guess that will give me plenty of time to get over my android and get back with the faithful…..


Nexus One – Day 1 |

I’ve been hoping for sometime that an Android phone would come to AT&T (since I’m still under contract). I’ve been using an iPhone since 2008 (I’ve got a 3G – and I skipped the update to 3GS figuring I might upgrade this summer).

I’ve been using the Nexus One for about a day. I figure I’ll document my very first day, and then if I stay organized I’ll update down the road with an overview of what happens as I get a little more comfortable with the platform.

The first thing that really hit me was how much the iPhone has shaped how I think things should work. That doesn’t mean they got everything right, but it was amazing how many times I tried to do something the way I would on the iPhone.

Just some simple background to level set. I run Linux most of the time. I boot Windows to play games, edit video, and sync iTunes (once in a great while – several times triggered by the iPhone losing its mind because made the mistake of downloading podcasts directly to the iPhone – rant for another day). The iPhone is really neat. The apps are great. The ecosystem drives me nuts. I am constantly reminded that I’m not the target customer for iPhone. I’m hoping that Android is different on this front.

My first task was getting my contacts setup. Turned out it was pretty easy to do. I just logged into my Google account and started typing in contacts. As I added them on the site, they just showed up on my phone – nice!

I was pretty confused by the app layout. The apps seems to be randomly sprinkled across the screen. When I found the grid button I found a bunch of apps that weren’t on any screen. A little confusing at first, but it was a useful discovery. Especially since all the apps I downloaded end up in this app limbo.

My first task was just to replicate the apps I have on my iPhone onto the Android. I was able to find FourSquare, Evernote, Seesmic (for twitter), Facebook, Phoneflic (netflix queue), AroundMe, LinkedIn (beta), USAA, and TED. I found a couple of apps for video, podcasting, and stocks. Some apps were unavailable – 1Password, PuzzleQuest, Plants vs Zombies, Southwest, Mint.com, and Godaddy. That was the list of apps I really wanted. I guess this is a side effect of have 40,000 apps compared to 120,000 on iPhone. Plus the Android platform is still working on traction. Not the end of the world.

I haven’t gotten to usic or video today – I had work to do.

Things I Like

Wicked fast – everything about it seems really fast. I didn’t get to use the 3GS but this is way better than my 3G experience.

Micro USB charging cable – just like my kindle. Yea for standards!
MicroSD card for memory. It shipped with a 4GB – I bought a 16GB for $40. They have announced 32GB cards (starting at $200 but that will drop). Meaning you get to expand capacity without throwing your phone out – I’m all for less ewaste.

I like the combination of a home grid that lets you see all your apps alphabetically. That is seriously handy (since I sometimes misplace apps on my iPhone). The page layout is a little confusing since they just sprinkled apps around instead of organizing them.

The text message app doesn’t just correct you, it also shows you several options so you can just pick the word you are going for (reminds me of T9). This is nicer than the iPhone auto correction because you get a little more control over the correction.

Start an app – navigate to a screen – hit home. Come back to the app, and you will be exactly where you were. On the iPhone, all the apps seem to start over from scratch when you start them.

Things I Find Annoying

It is an iPhone/iPod world. My new Cube only integrates with an iPod/iPhone – no option for integrating in my phone. The Bluetooth pairing with the phone system also seems wonky – it thinks its paired but it doesn’t play over the hands free. I don’t know if this is a problem with Android or my car – either way it worked with the iPhone – and it doesn’t now… annoying.

Want to turn on the phone on to make a call or check in on FourSquare – you are probably going to press the big glowing trackball at the bottom of the phone. Keep pressing because it doesn’t do anything. THe only way to activate the phone is the power button on the top. That means you have to have to hold the phone awkwardly if you want to turn it on with one hand and the use it.

The support for Gmail/Calendaring is great. The only annoying thing is I have a personal and business Google Apps account. The phone handles the mail well, but falls down on calendaring. It refuses to sync calendars from both accounts. I can share my business calendar with my personal account, but it won’t let me create events on the shared calendar. On the iPhone I was able to add each calendar account separately so I didn’t have this problem.

SMS messages make a single tone then don’t remind you. Also they put a very tiny icon notification on the top of the screen – meaning I missed several SMS messages before I realized what was going on. Seriously annoying. Turns out you can get an app that will pop them up so you can see them. This appears to be an important part of the lesson for Android. On the iPhone – they say – “There’s an app for that”. On Android, when there is something wrong with the OS there may be an app for that. I didn’t expect so much of the system to be up for grabs in that way.

It has a trackball – I’m not sure why. I’m sure I’ll figure out – I mean it must have been expensive to put it there.

There are five little silk screens buttons along the bottom of the screen. I manage to hit one of them when I type about every 2 minutes. This dumps me out of the app – grrr. (At least it is easy to get back to where I was since they keep state)

Where does that leave me – so far it has some rough edges. That isn’t totally surprising – Apple is seriously good an polishing things to a nice shine. I figure I’ll give it some time and find some more apps. If it follows the path of most of the other open source stuff I use – it starts powerful and terrible – and gets more powerful and less terrible all the time.


Checkin In |

In the spirit of getting back into the habit of writing for the blog, I figured I’d start with something easy. I’ve been playing a lot of Four Square lately. On the surface it is an incredibly simple game. When you visit a place (usually a business but could be a park or some other place of note), you run the Four Square application on your phone. This lets you “Check In” at that location.

In some ways, it mimics ideas from Dodgeball ( a social networking experiment that was acquired by Google and then shuttered). Namely, that you can see how else is playing where you are at, and you can get messages when your friends check in at new locations. That isn’t all that surprising since I was told several Dodgeball founders are involved.

If it stuck to its Dodgeball roots, it wouldn’t be that interesting. By turning it into a game, they’ve added an interesting element. You get points for each check in. The number of points is determined by how many times you been there before (You get the most for checking in the first time and much less after that) and the number of check ins you’ve done that day. As you check in, you can also earn badges. For example I earned a Jet Setter badge because I checked in at 5 different airports (heavy conference schedule this month).

There is one more twist on the check in process. If you check in the most at a location you become it’s mayor. That means that every player who shows up sees you on the list as the mayor of the location. If no one is the mayor when you get to a venue, you only need to check in one more time to get the title. After that, you just have to check in the most times. I’m sure there are mayor battles in larger cities. The game aspect of it makes it fun. I’ve actually been really surprised at how quickly people get into the game once they are exposed to it.

There are two things that I find really interesting about the game as a whole. The first is the location data. I’ve been pitched for investments by a number of location based startups. A real hurdle is getting all the location data. Getting a set of data is not that bad, but they cost of updates can be a real burden to a startup that doesn’t have a way to monetize quickly. Four Square solved that problem by rewarding you with more points for entering a new location. They sell it as encouraging you to “explore your city”. When I was in Chicago, I had a hard time finding locations that hadn’t already been entered by local players. I love the idea that they solved a tangible economic problem (the high price of location data) by organizing the game rules to reward players for doing something that would otherwise be a flaw (why isn’t this restaurant on the map?).

I don’t think they are in the money making phase of the project yet, but it seems like they are already experimenting with solutions beyond just sell ad words. I’ve read that some places in New York (where it started) give you special offers if you are a mayor. While I was in Chicago, I got a notice that a coffee shop near my hotel was offering a discount if you checked in there. I suppose it was their way of trying to lure me away from the burnt coffee at the Starbucks. Is this enough to fund the company, frankly I have no idea, but it will be interesting to see what else they try.

Bottom line: This is a really interesting demonstration of how a location based system can work when done right. They’re building up all this data about where people go and how often. I think it is funny that I’m willingly giving a company info that I would be in the streets protesting over if the government was doing the same thing. For the game to work, you need a smartphone with GPS. I believe you’ll see more things like this as that kind of hardware becomes more standard.

Idea to pursue: A friend of mine has Celiac’s Disease (an allergy to gluten). This is especially problematic because gluten sneaks its way into things so she has to work with the chief anywhere she goes. She has downloaded several apps for her phone to try to help her, but they are always out of date. What she needs is a Four Square like system -that lets her tag her comments as “Gluten Allergy”. I think you could probably add on other food things like vegan, vegetarian, lactose intolerant, or diabetic. That way the other people with your condition could log places that offered good stuff (that they ate without problem) and you could easily go there. There are millions of people with food allergies. They gain a benefit by having a place to store all this accumulated knowledge, and thanks to the Four Square model – you can skip paying for all of the restaurants – and rely on users to add in the updates.


Where To Go From Here |

Hard to believe but I started posting to this blog way back in March of 2005. I’ve covered a lot of random ground in that time. If you read my feed – you seen a heck of a lot of pictures of things I eat. I spent a lot of time satisfying my craving to write by reviewing movies. I’ve also made a lot of notes about technology I’m experimenting with or learning.
I’ve been tweeting for a while (going back – 07 I used it as a todo list – and jan ’08 I started posting for other people). I admit I like twitter because it is in the moment – totally disposable – and the perfect place to post pictures of food and drink. Then I joined Facebook. I was a hold out. I played with social stuff via Orkut and Friendster – and much like the first time I sat through a discussion of RSS I just didn’t get it. So when MySpace came out and pushed personal webpage design back to the stone age (hello blink tags) I continued to ignore it. Facebook showed up and has grown into a special kind of monster. The kind of monster who converts everyone I know into recruiters. When I tell non-wired friends that I’m not on Facebook they give me that look I used to give people who didn’t have an email address. As a result a lot of random personal thoughts have been pushed there – since that seems to be the place to indulge people if they want to know what I’m up to. Not too long ago I got a column in Linux Journal (which just got picked up for a 6 month contract – woot!). Having to turn in 1500-3000 words a month has done a lot to satisfy my need to write.

That leaves with a very basic question – what do I do with the blog in 2010? High randomness goes to twitter. Facebook gets the – I’m hanging with Max (my son) notifications – and the occupational NSFW post. It is harder to write long technical posts when LinuxJournal wants me to do that every month as it is. Mix that in with my desire to get out of the server running business. Since my blog sits on one of my servers – I need to determine what to do with it so I can shut the server down.

Twitter doesn’t allow me to write very much – and Linux Journal wants it to be on a specific topic (or at least related to Linux users in some way). Originally, I was going to say Facebook limits posts to ~300 characters – giving me more room than Twitter, but not enough for anything of substance. Of course in the process of trying to figure out what the limit was on characters in Facebook I learned about Notes – which are basically blog posts inside of Facebook. For a moment, I contemplated just packing up the blog and moving over there – especially since you can now easily (some would argue too easily) share everything with everybody. The reality is – I prefer my blog to be a separate thing. That’s probably just old-school dislike of the new school single point of failure Internet, but it is a conceit that is easily accommodated.

Since I find myself with more time and control over my direction in 2010 – the blog is going to take a slight turn. I’m hoping to spend this year learning a lot of new things. Normally, I dump that info into a variety of Red n’ Black notebooks that I keep my experimentation logs in. This year I’m going to try to translate those notes into the blog (so I can search and get a better sense of my progress). I’m going to leave it out here in the public Internet because somebody out there might find some of it useful. I’ll probably end up finding a way to notify my Facebook friends (a large number of which don’t use RSS) what’s going on. So if you miss the food pictures – follow me on twitter or friend me on facebook. If you’re interested in following me on a learning journey – stay tuned.


« Previous Entries
Next Page »

    Stuff I want to read

    Shelfari: Book reviews on your book blog

    Stuff I've Read

    Shelfari: Book reviews on your book blog
    Categories
    Archives

    .