Tuesday, December 29, 2009

XCode and Subversion woes

Today I spent an hour or so trying to clean up some iPhone code that I’ve been working on for Carticipate. I found that I was having trouble with the build that I checked out from our Subversion repository for a bunch of different reasons.

The very first one was that the code was built on an older version of Xcode, as well as an older version of the iPhone SDK, and on top of that the build machine was running Leopard (10.5) while I’ve been running Snow Leopard (10.6) almost since the day it was released.

I tend to try and stay as up to date with software as I can, and most of the time it serves me well. In this case, I ran into several very interesting issues. First thing I did was to check out the code using the command line tools for Subversion. After a few false starts, I got the full directory from the server downloaded to my Projects folder.

I opened up Finder, double-clicked on the project file, and got a warning about the file being for an older version of the SDK. Since I had loaded the latest version of the iPhone SDK, it wanted to upgrade the project build files to the new format. I figured that would probably be OK as long as I didn’t forget and check things back in, so I went ahead.

Then hit “build and run” only to get compile errors. Seems a few of the calls on the code that is currently being used in the wild aren’t allowed for the latest SDK. A few edits and no more compile errors, but there’s some other error. By default XCode just shows this little icon at the bottom of the project that shows the number of errors, but you don’t really see the build log. Clicking on the little error icon, takes you to the log, and of course there’s more greek there.

Something about not being able to copy a file from a user directory (one that naturally doesn’t exist on my machine). More web searches and digging around to try and figure out where copies are specified. If you’re OS X centric, it’s really pretty intuitive, it’s hidden somewhere and you have to find the right properties page to update. Finally I find the setting in the build targets, change it to point to an existing file, and everything runs like magic.

Now I notice that on the build machine, there is a Carticipate settings page under the iPhones Settings app, and it looks different than the one that you see if you have a production version of Carticipate from the App store. The one on my machine looks like the production build, so I figure it must be because I’m building for the release target, but switching to the debug target doesn’t seem to change anything.

I stumble around a bit more and find a DebugFiles folder that has the Settings.bundle file with the extra settings on it. Seems like it is set up to copy the file from that sub-folder if I’m building for debug, but no matter what I do, I can’t seem to get it to change. I clean, I build, I switch, I clean, I build, nothing …

Finally just to make sure the files are coming from where I think they are, I edit the root.plist in both Settings.bundles to be different, and … Magic, the debug settings show up. I switch to the release target, and the settings pane changes to the production one. So apparently something in XCode was being lazy, and not copying the file from the DebugFiles folder until I touched it (must use Make under there somewhere).

In the meantime, I see a checkin email from another developer that has the entire build tree being checked in. I dig around on the web some more only to find that the way Subversion is configured out of the box on OS X, there are no default ignores, and apparently XCode doesn’t have any intelligence of it’s own around what it checks in. Turns out there is a  ~/.subversion/config file set up, but the global ignores is commented out so nothing is excluded by default.

By default the global-ignores is commented out, even though it seems to include most everything we would want excluded. I chose to copy the list from somebody else for now, making sure I added one for “build” to exclude that for sure:

[miscellany]

### Set global-ignores to a set of whitespace-delimited globs
### which Subversion will ignore in its 'status' output, and
### while importing or adding files and directories.
# global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store
global-ignores = build *.o *.lo *.la .*~ *~ ._* .DS_Store .Trash* *.pbxuser *.mode*

So all I had to do was remove that build folder from the repository, and give this same change to the other developers … Well, not quite …

After I deleted the folder from the repository, I had the other developer try and check it out. He got these really weird subversion messages that said something was locked. I’ve seen those before, and usually it just means you have to run an “svn cleanup” command to get things back in synch. But in this case that didn’t work, and eventually I found that I had to physically delete the folder on his machine before running the “svn update”.

Oh, and did I forget to mention, the other developer is using an older version of the client, so when trying to update he got this lovely message about his client being too old. We updated to the latest client from the Tigris.org site using the Mac OS X download, thinking that would work. Turns out that this update doesn’t replace the version that comes with OS X (in the /usr/bin folder), so you have to remove or rename that one, and add a symlink to the /opt/subversion/bin/svn executable in order to get the newly installed version to be run at the command prompt.

So with the newly updated checkout, the build worked on all machines, and the repository is fairly clean. Then came the next hurdle, the older machines (running the older version of the iPhone developer kit and therefore XCode) would no longer update the code using the built in subversion client. Found a small message about the version being too old displayed in the status line of XCode, so did some more searching.

Apparently on the older version of XCode, you could tell it which Subversion to use, but at some point, the developer tools started including a subversion library. Still haven’t figure that one out yet, but it looks like it might require some more moving files and setting up symlinks to get it to use the newly installed latest version.

Seems like one thing that I am continuing to learn is that it doesn’t pay to keep your software up to date on a Mac (unless you’re really brave) …

Monday, December 21, 2009

Long and Winding Road to Windows 7

Today I received a box containing the replacement PC for my wife. I got a really great deal on a refurbished HP Desktop with a quad core AMD processor, 8Gb of memory and a 750Gb drive from TigerDirect.com

I'd been waiting about a week for it to get here, and my poor wife has been limping along on my slowly dying laptop in the meantime. I suspect that it's about to die, as it has become painful just to start up a browser or read email.
The UPS lady arrived at my door shortly before 5pm, and told me that she had heard a crash from the back of the truck in the morning. At first she thought someone had been drinking in the truck: she smelled beer.

As it turned out, a box containing beer had fallen and was leaking in the truck. She showed me the bottom of my package was wet, and said I could refuse the shipment and have her take it back.

I figured that it would probably be OK, since they usually pack things like desktops pretty well (in plastic and foam), so I asked her if I'd be able to send it back after looking inside. She told me that she could come by tomorrow and pick it up and gave me her supervisor's number.

I opened the box and found that there didn't appear to be any dampness or liquid inside (so far so good). But then when I actually pulled the desktop out, the front panels were all poked out, and the Styrofoam pieces were broken.

Now I figured that it would be just my luck that it would work initially and then start having weird problems caused by having been dropped. So I decided to send it back, and I called the number the UPS lady had given me.

Her supervisor told me I had to call the shipper and have them make a claim, that they couldn't return the box once it had been opened. So I called TigerDirect to get a return label and see if they could ship a replacement.

The return part was easy, they sent a link to my email. Interestingly enough though, during the order process, they had offered me a $5 discount for using Google Checkout, and that meant they couldn't just ship a replacement out. The customer service rep told me they could process a new order and give me free next-day shipping, but it would require a new order.

After looking at the inventory, the machine I had ordered was the last one of that model, and they offered me something that looked similar in price. I looked at the things that were available and decided to wait, so I'm back on the hunt for my replacement desktop.

Maybe somebody is trying to tell me something, this hunt for a new computer has been painful, maybe I should just look for another Mac ...

Enhanced by Zemanta

Long and Winding Road to Windows 7

Today I received a box containing the replacement PC for my wife. I got a really great deal on a refurbished HP Desktop with a quad core AMD processor, 8Gb of memory and a 750Gb drive from TigerDirect.com.

I’d been waiting about a week for it to get here, and my poor wife has been limping along on my slowly dying laptop in the meantime. I suspect that it’s about to die, as it has become painful just to start up a browser or read email.


The UPS lady arrived at my door shortly before 5pm, and told me that she had heard a crash from the back of the truck in the morning. At first she thought someone had been drinking in the truck: she smelled beer.

As it turned out, a box containing beer had fallen and was leaking in the truck. She showed me the bottom of my package was wet, and said I could refuse the shipment and have her take it back.

I figured that it would probably be OK, since they usually pack things like desktops pretty well (in plastic and foam), so I asked her if I’d be able to send it back after looking inside. She told me that she could come by tomorrow and pick it up and gave me her supervisor’s number.

I opened the box and found that there didn’t appear to be any dampness or liquid inside (so far so good). But then when I actually pulled the desktop out, the front panels were all poked out, and the Styrofoam pieces were broken.

Now I figured that it would be just my luck that it would work initially and then start having weird problems caused by having been dropped. So I decided to send it back, and I called the number the UPS lady had given me.

Her supervisor told me I had to call the shipper and have them make a claim, that they couldn’t return the box once it had been opened. So I called TigerDirect to get a return label and see if they could ship a replacement.

The return part was easy, they sent a link to my email. Interestingly enough though, during the order process, they had offered me a $5 discount for using Google Checkout, and that meant they couldn’t just ship a replacement out. The customer service rep told me they could process a new order and give me free next-day shipping, but it would require a new order.

After looking at the inventory, the machine I had ordered was the last one of that model, and they offered me something that looked similar in price. I looked at the things that were available and decided to wait, so I’m back on the hunt for my replacement desktop.

Maybe somebody is trying to tell me something, this hunt for a new computer has been painful, maybe I should just look for another Mac

Monday, November 9, 2009

Loss of Innocence (and Arrogance)

There’s a saying I’ve heard in self-help and twelve step programs that basically means you will learn more about yourself if you continue to do the work: “More shall be revealed …”

I’ve always been a very confident person when it comes to my ability to adapt to work, and always felt that as long as there were challenging problems to solve, I’d have no problem finding work. And while I am highly skilled, I have come to believe that I have been very lucky, and I may have therefore been a bit arrogant about my abilities.

Recently I recognized the fact that intentions and actions don’t always meet. I was flying home and the overhead bins were full next to my seat, so I walked back and placed my bag in a bin a few seats back. As I turned to go back to my seat, I saw a woman who obviously had been ready to put her bag in that spot. I work very hard to be a nice guy, but in this instance, I just continued back to my seat. My intention hadn’t been to upset this person, but my actions did so.

Last year, in October, I was released from a contract that I’d been on for a few years. I had been brought in to temporarily fill a vacancy, but was able to keep extending the contract by doing good work. The organization I was working for was worried about cash flow due to some expansion they were doing, so it seemed like this would be a temporary cost cutting measure.

Immediately after that, the market tanked, and jobs started disappearing. I wasn’t too worried, knowing that typically when jobs get scarce, contracts become more plentiful. I hadn’t had any time off for years, so I decided not to look too hard for the rest of the year.

Even though I wasn’t working too hard at finding a new job, I started to become a bit worried. I was only seeing contracts that had rates lower than salaries for the same work, and often were all inclusive out of state jobs. I did the math on a couple of these and found that I would be working for free by the time I paid for airfare and hotel.

So after the first of the year, I figured I better step the search up. I started working full time on my job search, and spending a lot more time on networking. I went to Job Connections nearly every Saturday, called and emailed friends and former coworkers, and talked to every recruiter that called. I spent hours trying to redo my resume to make it work for a couple of different types of jobs.

And during all this, I took advantage of my time off, studying for, and getting my PMP (Project Management Professional) certification. The silver lining in being out of work for many months, was that I was spending a lot of time on self improvement.

The biggest downside was watching the dwindle, and trying not to panic. We reviewed finances and realized we spent way too much money on a lot of things, and cut our expenses neatly in half. We dropped our burn rate enough to extend our expected “run out of cash” date to be somewhere around the end of the year. Somehow, even though we’d both lived in the paycheck to paycheck mode before, it was almost scarier to see the cash reserves disappear. There was that unfounded fear that we’d lose everything and be homeless.

Luckily for me, my network did pay off, and I picked up a contract that a friend of mine found me. Seemed like things were rolling again. But my lesson wasn’t yet over: I underestimated some politics and made some mistakes at this contract, and I was quickly out of a job. My intentions were to help improve a less than optimal process into one that was efficient, making the lives of nurses and patients better. My actions however only gave a politically charged situation more ammunition.

I lost that job because of two bits of arrogance: not paying attention to the inner voice that told me I should uncover my stakeholder’s needs early, and overestimating my abilities. The contract was supposed to have taken me through the end of the year, instead it lasted only a few weeks. I had been humbled again.

In the mean time, people in my network continued to struggle with the job market. The average time people were unemployed was beginning to stretch out beyond a year. People with more impressive backgrounds than mine were having trouble finding jobs. Companies that really needed employees weren’t hiring to minimize risk from another downturn, or were doing things like taking advantage of the downturn to replace expensive people with less expensive ones.

So after losing that job, I really came to the conclusion I had to take whatever came along, as long as it was something I could do. I started working on equity projects for startups, splitting my time between several of them. I went to meetups, and any free networking events I could find. I took a short contract doing development work. Still the bank account dwindled.

And then out of the blue, I got a call from a woman I had worked with a couple of years ago. I work really hard to stay in touch with people, but I’m definitely humble about my abilities in that area, so I was really happy that she thought enough of me to give me that call. It was perfect timing. It was a salaried job, which I haven’t had for years. I’ve always looked at contracting as just a different way to be compensated however, so I gladly took the job.

As it turns out, it’s a huge job, that I’m sure will challenge the limits of my abilities. I have confidence in my abilities, but humility about my ability to mark the boundaries of those abilities now, which I think will help me grow and meet these challenges.

And I’m sure, as they say: “More shall be revealed …”

Thursday, October 22, 2009

Controlling Yahoo Groups email reception

…Or, how to  reduce email without leaving the group…

I work with a job search group called Job Connections (http://www.jobconnections.org) which connects to members with a Yahoo group. It’s a moderated group whose membership is generally restricted to people who have actually attended a Job Connections meeting.

It’s a pretty busy group, so there are a lot of emails that get sent out (mostly about job postings that somebody received and is not interested in pursuing). As a result, the most frequently asked question to the group is: “How do I reduce the amount of email I receive from the group without leaving the group?”

Fortunately, Yahoo groups have preference settings that you can use to control the level of email you get sent.

The basic options are:

  1. Individual Email – Receive every message posted to the group
  2. Daily Digest – Receive a summary of up to 25 messages in a daily email.
  3. Special notices – Receive only messages from the moderator
  4. Web only – no email ever, you have to log into the group to see the messages.

The easiest way to edit the preferences is to go to http://groups.yahoo.com/mygroups?edit=1 and change the settings. If you are not yet logged into your Yahoo account, you’ll get the login screen:

Yahoo login

After logging in, you’ll see the group edit page that will look something like this:

Yahoo groups edit

Just click the “Message Delivery” drop down to change to one of the options described earlier.

Alternatively, you can log into the group and click on the “Edit membership” link at the upper left corner of the page and change things there.

Yahoo group edit membership

Clicking that link takes you to the membership preferences page for that group where you can change a number of things, including the email preferences:

Yahoo group membership prefs

Finally, if you want to control your email options via email, Yahoo also provides a way to do that. Basically there are email aliases that let you set a number of your preferences simply by sending an email to them (more fully described in Yahoo help at  http://help.yahoo.com/l/us/yahoo/groups/original/members/email/email-01.html):

Please Note: The email addresses above are specific to Job Connections, to do the same for a different group, replace “cpc_job_connections” in the above commands with the actual name of the group (e.g., pastry_chefs-subscribe@yahoogroups.com)

Friday, August 28, 2009

Premium Plaxo for Comcast users …

Comcast logo I recently switched from DSL (which I’d had since it first was invented) to Comcast Cable for my Internet connection (and TV and phone). By doing so I saved about a hundred bucks a month over AT&T and DirecTV. Of course as soon as I switched, AT&T started calling me with a bundle that was roughly the same price, but that’s a different story.

One of the things that happened a while back was that Plaxo was bought by Comcast. I have always been a premium Plaxo user, feeling that I wanted to support them since I find the product so incredibly useful. What I learned was that if you are a Comcast subscriber, you are automatically a Plaxo premium user.

Now, being a premium subscriber used to only mean you got VIP support and access to a couple of tools (like the address and calendar deduplication tool). But now Plaxo has announced that the Outlook synch is a premium member only tool. While I worry that this decreases the value of the service (since there will be fewer reasons for people to sign up, therefore fewer members, and decreasing the number of automatic updates I get), what is interesting is that every Comcast subscriber gets access to these premium services.

To activate this, first you have to make sure that you are signed up for Plaxo through your Comcast email account. First, log in to your Comcast email by going to http://www.comcast.net and clicking on the Email link in the “My Comcast” portlet:

My Comcast

If you’re logged in already it will go straight to your email, otherwise you’ll get the login screen, where you need to log in:

comcast login

Log in with your Comcast email address. This will be something like your last name and street address unless you’ve changed it. Once you have logged in, you’ll be at the Comcast email screen, which uses the Zimbra email client. From the tabs, you’ll want to choose the address book:

Comcast email tabs

The first time you go to the address book, you’ll be asked to build your address book:

comcast build address book

If you click on the “build your address book”, you’ll go to an initial Plaxo setup screen. Since they already have some of your information (name and email), they don’t have to ask you for anything but where you want to populate your address book from:

plaxo uab

So now it gets interesting. If you click on Plaxo, you can link an existing Plaxo account to your Comcast email. If you were already a Plaxo user, this will get your current address book and calendar.

Plaxo Link account

If you’re not already a Plaxo subscriber, you can choose one of the other options to build your address book by logging you in and pulling the address book from there:

Plaxo UAB Gmail

Note that the GMail synch only works for accounts ending in “gmail.com“,  and not GMail accounts that are using Google Apps. I suspect that Yahoo accounts would also be restricted to “yahoo.com“, but I don’t know that for sure.

There’s a shortcut to signup to Plaxo immediately by simply going to http://www.plaxo.com/ftue/activateComcast, clicking the Activate button will get you set up:

Plaxo activate

This one does require you to fill in your name and basic information (or link to your existing Plaxo account by following the link at the bottom right). Either way, once you have the account linked, you are signed up and active as a premium member. Now not only can you set up synch points, but you can also install the Outlook synch tool on any computer you use.

Along the way the steps will ask you to update your address book, and if you want to invite your friends. I always skip that step, since I send my friends enough email already.

At the end, you can validate that you’re a premium member by clicking on “Settings” at the top right of the screen, and then choosing “Premium” from the list at the left:

Plaxo Premium

This shows my account has premium status.

If you use Outlook, there’s a few more steps to get fully set up with the Outlook synch tool. There are multiple ways to get there, but ultimately you want to download the sync tool from http://www.plaxo.com/people/tools?src=tools

plaxo premium tools

Note that you have access to all of these tools, some of which are very cool (like being able to roll back your address book). If you aren’t a Plaxo premium subscriber, you can download and install the tool, but you won’t be able to use it, since the synch verifies the account status when you run it for the first time.

Plaxo has a nice walkthrough of the install process here: http://www.plaxo.com/downloads/outlook?src=pulse_tools_outlook〈=en, so I won’t duplicate that. One thing that I did learn the last time I did this for somebody is that you have to install it with an account that has admin priviledges. The install won’t fail, but you just won’t get the Plaxo tool bar in Outlook.

Once the install completes, and you start Outlook up, it will walk you through a wizard that will sync your Outlook and Plaxo address books. From then on, you should see the Plaxo tool bar at the top of your Outlook screen:

Plaxo bar in outlook

There are lots of other neat things about Plaxo, not the least of which is that you can synch between multiple machines. There’s a version of Plaxo for the Mac, and it seems to do a fair job of interacting with the built-in Mac synch tools (including MobileMe).

I’d definitely recommend you take advantage of this “free” service if you are a Comcast internet subscriber.

Saturday, August 22, 2009

Why can’t we all just get along ?

I am going to break one of the rules of social media and talk about politics. I’ve had lots of conversations with people I know who generally share my views on issues, but being disenfranchised and fear based, have the strong feeling that politics should never be talked about.

And to a point I agree. People are so strongly aligned along party lines, that if you say the wrong thing, you will alienate many people. The weird thing for me is that most people don’t even know why they follow those party lines.

I spoke to a very smart young man a while back and asked him which party he belonged to.

“The X party”, he said.

“Why did you choose that party?”,  I asked assuming he would have a logical reason for why he joined that party.

“Well, I guess mostly because my parents were in the X party”, he replied.

And even stranger, the lines shift based on what the other party is saying. An idea that one party comes up with is immediately opposed by the other, even if that idea is a plank in the opposing party’s platform.

Take the recent rhetoric about the healthcare reform work. From everything I’ve seen, what is being proposed is almost exactly the same thing that the Republicans proposed when Clinton was trying to get them to move on universal healthcare. A sort of modified version of what we have today that tries to fix the biggest fiscal problems with our current system.

But who is labeling this “Obamacare” and calling it socialism? It appears to me that it is the same people who caused Clinton to crash and burn, and who proposed the approach of universal health care combined with capitalism.

This is but one example, but there seem to be endless times that  opposition is simply a tribal fight. The Democrats reject all Republican ideas, the Republicans reject all the Libertarian ideas, and they all view each other as bad and wrong. It’s one reason I don’t declare a party, and would probably still be independent if I didn’t want to vote in primaries.

I often wonder if we just got rid of the parties, could we have an intelligent discussion about the issues. Are people just naturally unwilling to consider other viewpoints?

For me, health care is broken, and there are simple things we could do to fix some of the big problems. By making sure people could actually see doctors when they need to, we would reduce the burden on emergency rooms and hospitals caused by people who have either had to forgo care that would have been less expensive.

Add to that fixing some of the corruption in the insurance industry (which also prevents people from getting care early with things like “pre-existing condition” clauses), and not only would  health care costs go down, but productivity would go up, due to a healthier population.

It’s not rocket science, it’s what we need, and anything is better than the current system that is bankrupting the country.

Wednesday, August 19, 2009

GTUG Campout – doin’ the Wave …

GTUG CampoutI recently attended the Google Technology User Group Campout at the Googleplex in Mountain View. This was a three day sprint to build something interesting with the latest Google product: Google Wave.

Google Wave, as it turns out is a very interesting experiment in social interaction. Google is trying to reinvent collaborative communication with a piece of software that is one part chat, one part Wiki, and one part WebEx.

I’d seen this product at the Google I/O conference a few months back and was impressed with the demos. Basically you get these shared documents (called Waves) that all of the collaborators can update at the same time. You can watch the hour and a half demo at http://www.youtube.com/watch?v=v_UyVmITiYQ

The demo included things like interaction with blogs, Twitter and other web technologies, as well as interesting programming doing things like on the fly grammar checking. I signed up for a sandbox account the day of the presentation (using my iPhone of course), and got set up a week or so after that.

Wave was written by the brothers Lars and Jans Rasmussen, who are the architects of the Google Maps API. In some sense, this is an experiment in building software caused by the lessons they learned with the immensely popular Maps API. By giving the developers access early in the build process, they hope to build a more solid platform that will serve the developers needs.

So Friday came and I drove over to Google with Bennett Fonacier (a friend I met through Job Connections some time back). After the 50+ people got through with their 5 minute pitches, we networked for another hour forming teams. There were many ideas that were very similar, and for the most part these groups joined up into a combined team. Bennett and Steffen Frost (CEO of Carticipate) both came up with the idea of matching people for ride shares using the Wave.

I’d originally thought I would join a team doing something health related, but since my goal was to get a working piece of code, and I was sitting with the car pool team, I joined that effort. We became one of the roughly 50 projects teams, and quickly talked through what we’d be building over the next 48 hours or so.

The other members of the Wave Rides team were:

  1. Steffen Frost was a great concept guy, and had an existing product we were going to try and emulate.
  2. Bennett Fonacier has some development background, but he was short a computer, and would be doing QA.
  3. Andreas Koll who had some experience with the Google Maps API volunteered to build the Gadget for our interface.
  4. Hannie Fan offered to provide some design expertise and CSS coding.
  5. Robert Herriott was a quiet supporter, offering constructive criticism

I took on the task of writing the Robot, which is the part of the Wave that would take the input from the Gadget and match the participants with ride partners. Andreas had a working Gadget in short order, and was able to embed it in a Wave.

While he was doing that, I was working on getting a Robot built using the guidelines in developing Wave extensions slides. I got a working “Hello World”, built the extension.xml file, and with help from the Google crew, got it so we could create a new Wave with my Robot added.
Carticipate Logo

I got the icon from the Carticipate site, added a bit of code, and the Robot was adding the Gadget to the Wave. So far I had gotten a working Robot, and Andreas had a working Gadget. Now all we needed to do was clean them up a bit and get them talking.

This turned out to be a bit tougher than expected. The current state of the world is that the Robot can add a Gadget, and send data to it when it is added to the Wave, but can only read the state from the Gadget, and not actually set anything after the Gadget is running.

Anyway, I eventually got some debug code going in my Robot that would dump out the properties of the Gadget, which helped Andreas to debug some issues he was seeing with the state of the users accessing the Gadget.

A Gadget is basically a snippet of HTML and JavaScript that gets embedded in an XML file for inclusion in the Wave. Because the working code is inside an XML document, it gets wrapped in a CDATA element, which makes editing and debugging the Gadget a bit challenging. Andreas approach was to cut the HTML code out of the Gadget and edit it as an HTML document, then paste it back into the Gadget. Not ideal, but it works.

Our original plans for the WaveRides robot was that it would behave roughly the same way as the Carticipate application does: ask the user a few questions about where they are going, if they are driving, and then show a list of everybody who is travelling in the same area and time. So as we worked, I kept prototyping closer and closer to that goal.

By the late Saturday night, we had a working prototype that launched the map gadget, and displayed back the data from the users interacting with the gadget. The gadget was displaying the location of all of the users on the map, and we were feeling pretty good about the progress (especially considering none of us had ever built anything with the Wave API before). Bennett and I headed home, expecting to finish up the next morning, leaving Andreas coding away on his gadget.

The next day we arrived at the Googleplex and found that Andreas had solved some of his remaining problems, and the gadget was looking good. I went to work on the Robot, trying to get it to match up the user data. Of course, since there was little time left, the Wave kept misbehaving (probably due to all of us pounding on the sandbox with untested code), and we kept running into walls.

My original design had been to add a blip with the map gadget and gather my data from there. I soon realized that it was difficult to keep track of the gadget that way, so I changed my code to add the gadget to the root blip, and started removing debug code. At some point, we decided to put the code up on code.google.com for safekeeping, so I spent a few minutes figuring out how to do that (you can see the code at http://waverider.googlecode.com).

It was still fairly early on Sunday morning, and Andreas had been up until the wee hours of the night, so he wasn’t around for us to ask him to make changes to his gadget. We had separated the development of the gadget and the robot, so they were actually being served by two separate app server applications. The gadget only provided input for one point, and to complete the robot to the point we could demo something interesting, we needed it to have a “from” and “to” for each participant.

So rather than reinventing what Andreas had done, I decided to change the robot to create a “from” and a “to” gadget in the Wave, and use that. Interestingly this turned out to be fairly painless. I was able to add the second instance of the gadget, and give them each a name. The Wave kept track of them separately, so I got the data from both separately.

I spent the last few moments before we were supposed to present, trying to get a simple match working. The nice thing about this was that I could version the app on the Google App engine, and keep a known working version deployed while continuing to test. As other teams presented, it became obvious that this had been a good decision, and I eventually dropped back to one of the earlier working versions for the demo.

We got to demo the concept, and explain what we would have liked to have done. I accomplished my goal of learning how to code a basic robot, and learned a lot about the API. We were by no means the slickest or coolest app there, but we had fun building it.

We’ve got the start to an open source project that could eventually be used to match people locationally, and used for all sorts of purposes, and we got to see some of the challenges in building apps for a piece of software as new as Google Wave.

Team picture

From left to right above: Steffan Frost, Fannie Han, Rob Weaver, Andreas Koll, Bennett Fonacier.

Steffen created a really cool video over that weekend as well that you can watch at http://www.youtube.com/watch?v=DkmuBmBZkBo

Tuesday, August 11, 2009

Cloudy with a chance of Apps …

Since last week, I’ve been immersed in coding and development education about various cloud applications.
Google Wave

First there were a couple of meetups about the Google Wave product that gave me a overview of some of the capabilities and requirements for developing applications around the Wave product. Google Wave is an interesting piece of social media that is a bit like chat and MediaWiki combined with WebEx.

The first talk on Monday, was about the federation server, which is the open source implementation of Google Wave. The idea is that you could have a Wave server inside your firewall that could protect your data, while also allowing for communication and interaction with other federated servers. The code is so new, that it is actually using a different protocol than the Google Wave servers are using.

This is a very early prototype, but the idea is that it will use standard XMPP servers to communicate between domains, and use typical certificate based trust mechanisms to authenticate between domains. The internal server could be implemented with rules to (for example) prevent patient data from being sent outside of the firewall in a conversation between a medical team and a provider at another institution.

The next talk on Wednesday was about writing extensions for Google Wave. These extensions are UI widgets (called Gadgets), and Robots, which add capability to Google Wave.

A Gadget is basically an HTML and JavaScript snippet that does something useful when added to a Wave. A Robot is a bit of code that interacts with the Wave as if it were one of the collaborators in the wave. The Robot can add participants, Gadgets and edit the contents of the Wave.

As an example, you could have a voting Gadget, that allows the collaborators to vote. A Robot could add the Gadget to the Wave,  tally the results, and write them out to a database.

A Robot can also do interesting things like watch the wave for keywords and make changes or respond. Some of the examples are a grammar checker that corrects grammar as you type, a code formatting and highlighting robot, and the classic Eliza conversational robot.

Next was the weekend long GTUG Campout at the Googleplex. This was a heads down coding adventure where the idea was to get a workable Google application up and running in 48 hours. I signed up for the campout a while back, with the intent of learning how to work with Google Wave.

I had signed up for a Wave sandbox account when it was first announced at the Google I/O conference, so I was able to play with it a bit, but hadn’t really had time to get started with developing anything. After the talk on Wednesday, I had a pretty good overview of how to get set up, so at least I had all the bits installed to parcipate.

So Friday came and I returned to Google once again. The idea was that we form teams to develop applications using the Wave extensions, so the first task was to come up with ideas and pitch them. After the 50+ people got through with their 5 minute pitches, we networked for another hour forming teams. There were many ideas that were very similar, and for the most part these groups joined up into a combined team.

After the teams were formed, the Google team gave another talk about developing Wave extensions, which was a great review and contained some things that aren’t really documented elsewhere (since the API is still changing). The slides from that talk became my guide to building my first robot, an experience that I’ll talk about in another post about the GTUG Campout 2009.

Monday, August 10, 2009

iPhone Visual Voice Mail returns

This weekend, AT&T finally fixed my visual voice mail. I still don’t know what they did to fix it, but I’m pretty sure it’s related to a hack that I’ve been reading about which lets the phone do tethering.

Now I didn’t try this hack on my newly replaced phone, but when I asked the AT&T people about it, they said they were working on a fix on their side for a wider problem (meaning I wasn’t the only one who had gone without visual voice mail for some time).

I’m hopeful that this problem won’t recur, but I wonder if perhaps it was caused by AT&T trying to block the tethering hack. Now my phone is happy again, and I’m no longer missing calls (at least as far as I can tell).

Working visual voice mail

Thursday, August 6, 2009

iPhone non-visual voice mail …

A couple of weeks ago, I notice that my iPhone was not receiving voice mails, and I seemed to be missing calls on occasion. In fact, I hadn’t received a voice mail since around the time I upgraded to the 3.0 firmware.

Since I use this as my primary business phone, I was a bit concerned.

I had been seeing occasional error messages about being unable to connect to the network like:

iphone network error 2

So of course I called AT&T to find out what could be wrong. The first time I called, I followed the path that took me to an Apple representative, and they had me reset the network settings (From the Settings icon, General/reset/reset network settings). After doing that, all of my voice mail from the prior month flowed through into my visual voice mail box.

In the next few days, I was told by a couple people that they had tried to call me, and I again didn’t see any voice mail. I also started seeing the odd network errors again, sometimes in my email or browser:

cell network error

So I called 611 again, and this time I talked to the AT&T  people. They walked me through resetting the network settings, recreated my voice mail box, and a number of other things. At one point, I even got the screen that asked me to setup my voice mail. But still I wasn’t getting the new voice mail messages appearing in my inbox. Finally after bouncing back over to the Apple guys, we made an appointment at the Apple store so I could have the phone checked out.

Somewhere along the line, the visual voice mail simply stopped working. Now when I hit the voicemail icon, I wouldn’t see the list of voice mails, but instead the phone would dial my voice mail:

visual voice mail dial

No matter what we tried, we couldn’t seem to get the visual voice mail to come back. We even tried restoring it as a new phone without any luck. The support people thought that perhaps this was a result of the phone hardware failure, and maybe the Apple Genius could find a fix for it.

So I waited and went to my appointment at the Apple Store Genius bar. They ran some diagnostics, asked a few questions, and determined the phone did need to be replaced. They didn’t have one in stock, so they ordered one, and told me that they’d call when it was ready.

A couple of days later, I went to the store, and they activated my new phone. Naturally the first thing I tried was going to visual voice mail, and what did I see ?

visual voice mail dial

So back home, more hours on the phone with both Apple and AT&T, now I have a case open with the AT&T network group.

To be continued ….

Thursday, July 30, 2009

Microsoft Office self-incompatibilities …

I received an post on a group I follow reminding people not to send out documents in the Office 2007 format of Word. Now, I’ve been using the 2007 suite since the first betas (way before 2007), and have learned this lesson more than once (mostly because of lost settings when I’ve had to do a reinstall).

The new format for files in Office was created by Microsoft in an attempt to create an open file structure. Any file you save in a default install of 2007, will have the letter “x’ appended to the file extension, signifying that it is saved in this new format.

There are many ways to deal with this problem, and the most successful strategy is actually to simply configure your 2007 products to default to saving in the older format.

You can also point the person who is using the older version to the Microsoft dowload pages to get the Microsoft Office Compatibility Pack which lets Office 2003 open the new files. The problem with this approach is that many organizations don’t allow their users to do installations (in a lame attempt to keep spyware and viruses out of the company network), so it’s either not possible, or difficult to get done.

You can do a “Save As” to create a copy in Word 97-2003 format, RTF, or even as a PDF (yes, the new product lets you create PDF files). But doing a “Save As”, requires you to remember to do that each time, and you end up with multiple files which could end up with version problems (you start with the docx, save as doc, then make a change – now which one is current?)

So the trick is to go into the options, and set your save format to the “Word 97-2003 (*.doc)” format, and then you don’t have to worry about it.

To change the options in Word (or for that matter any of the Office products), click on the Office Button

You will then see the menu pop up, with the “Word Options” button at the bottom:

Office menu

Click on the  Word Options button button, to get to the options, then click on “Save” in the left hand column to display the save options:

Save options

If you haven’t updated yet, you will see “Microsoft Word (.docx)” as the option for the “save files in this format”. Click the drop down and choose “Word 97-2003 (*.doc)” as shown below:

Choose option

Finally hit the button at the bottom of the dialog that says “OK”, to save your changes.  Create a new document, and save it, and you should no longer see the “*.docx” format.

From now on, whenever you save a document, it will save in the old format unless you do a “Save As”.

Tuesday, July 28, 2009

Advantage Mac (again) …

This month has been a bad one for me and computers. First my MacBook Pro died (due to a video card that had been recalled), and then my desktop PC decided to fall over dead.

The Mac failure was another study in why I love Apple service: The video just died one day, no screen, external monitor wouldn’t work. Since a Mac has a real operating system (Mac OS X – a Unix variant), I was able to determine that the machine was actually still working by connecting from my desktop PC using ssh.

I did a bit of system administration black magic, and turned on the remote desktop service (see http://support.apple.com/kb/HT2370 or http://discussions.apple.com/thread.jspa?threadID=2081446&tstart=1 for a writeup of how), and was able to connect to my MBP using VNC. That allowed me to validate things were working, and to make sure I had a current backup before doing anything else.

A quick call to Apple’s support desk, and the helpful tech looked up the problem, found there was a recall on the video logic board for certain MBP systems, and walked me through a few things to validate it wasn’t just user error. He gave me a case number, told me to go to the Apple store, and have them check for the recall.

So I made an appointment at the store, got there a little early, and waited for that piece. In a reasonably short time, my “Genius” was testing my MBP for the recall issue, and sure enough that was the problem. Next a few minutes as he got the RMA set up, inspected the machine (noting that there was a small ding on the case), and asked me if I wanted it shipped back to my home address. The usual disclaimer about “if we can’t fix it, we might charge you $100 for looking at it”, and it was off to the races.

A couple of days later, I get a call from the Apple Repair Center. The guy on the phone tells me that yes, the recall is covered, but it appears the machine was dropped (which it was many moons ago), and there are all sorts of things that need to be replaced to bring the machine back to factory specs. This all comes with a price tag of $1,200 … Once I recovered my breath, I tell him “but at the store they said all I needed was the recall”. He tells me that, yes that would give me a working machine, and they could probably have fixed it at the store, but since it’s at the repair center they have to apply quality to it.

I tell the guy I’m not in a position to come up with the $1,200 right now, so can he ship it back to the store and let them do the repair. At this point, he tells me, that since I’ve been nice, and since I’m a good customer, he’s going to waive the fee. So Apple basically solidifies my glowing opinion of their service, and I get what for all intents and purposes is a brand new MacBook Pro.

I’m so relieved that this didn’t happen with my wife’s PC …..

Murphy’s law bites me again …

…. But while my MBP was off for service, I revived an old laptop I have for backup purposes. I had it almost completely configured when I got my MBP back. Then, a few days ago, my desktop PC (a Sony) crashed.

I go to the Sony web site, and do one of those instant chat sessions, and through a little back and forth, the chat agent tells me it is either a bad video card, or my memory has gone bad. In either case, it will require service. Now the wheels start spinning, because I know how much video cards cost, and I know I’ll have to pay a few hundred bucks just to get somebody to look at the machine (no Genius bar to bring my Sony to).

In the old days I would have just replaced the video card and memory with spares, but since I’m greener (and don’t really work on hardware any more) these days, I don’t keep things like that around. So now I have a useless desktop, with an unknown problem, with 500Gb of data that I can’t get to. Worse, the Sony has a RAID card, so I’m not sure the disks will be readable  except in that machine (it’s really 2x250Gb).

So I’m still trying to figure out what to do to recover the PC, but I’m guessing that will wait for a while …

Restoring my wife’s PC

Luckily for me, I had rebuilt my spare laptop, so I’m able to get the most important files onto my spare laptop, and within a few hours, it’s happily driving my big Gateway monitor (with Quicken and email files restored).

This is possible because of two backup strategies: Quicken online backup (which is a remarket of Connected Backup), and Microsoft Live Mesh.

I’ve used the Connected product ever since I learned about it while working at Cisco. They use the enterprise version, and it does a great incremental backup of your PC, that helped me recover accidental deleted files more than once. For a few bucks a month, the home version does the same thing for a few gig of data.

Live Mesh on the other hand, is a synchronization tool, that is a bit like the old Microsoft Briefcase on steroids. You mark a folder as being a Live Mesh folder, and it gets replicated to the Microsoft cloud. You can then synchronize that folder across systems, and even share it with other users. I created Live Mesh folders for all of my web site work as a way to share files with my clients, and to keep data on my Mac and PC in synch.

What I hadn’t really realized was that I was in effect getting a backup with this as well. I simply shared the folders to my backup laptop, and voila, I had all of my important data back and ready to update. For me, this is one more bit of evidence that there will continue to be interesting applications brought about by the cloud: I hadn’t really thought of Live Mesh as a backup strategy, and it lacks the versioning piece, but in a pinch it’ll do.