Posted by: Boris Popov | July 8, 2007

On Xbox 360 failure rates

James Robertson has brought up a topic of consoles again. While I totally agree that reported failure rates are absolutely unacceptable and point to a problem in either hardware design or shoddy assembly, the other important side of the story that often gets overlooked is how Microsoft deals with these failures when they do occur. To be honest, I was a little concerned about the perceived failures when I bought my own Xbox 360 for Christmas, and those concerns grew into uneasy anticipation when I started seeing intermittent error messages during bootup before network adapter died completely. I pretty much expected the repair process to cost me a couple hundred dollars and countless hours spent on the phone, but actually that couldn’t be further from the truth. Here’s how the process worked (in my case, other’s may differ, but the chatter in blogosphere indicates similar experiences),

  1. Call 1-800-4MY-XBOX
  2. Hold for less than 5 minutes
  3. Provide your name, address and console’s serial number
  4. Describe the problem
    1. It’s worth mentioning that they will try to troubleshoot problems that don’t report error codes back, but as long as you have a Red Ring of Death they won’t bother you with meaningless “let’s unplug the hard drive and try again” scenarios, which is a relief
  5. Confirm your name and address
  6. They will ship the empty cardboard box with packaging material immediately via Purolator
  7. Once the cardboard box arrives (about 5 days later), take your concole (just the console itself, no hard drive, controllers or power supply), tape the box up and stick the included return label on top of the original shipping label (remember to tear and keep the small tab with tracking numbers from the return label)
  8. Take the package to closest Purolator outlet (one was right in the building next to my office)
  9. Drop off the package, no paperwork required, you don’t even need to wait in line in most cases, just make sure you hand off the box to someone who looks like customer service
  10. About 10 days later another box will arrive via Purolator, this time with a repaired (or refurbished or brand new) console and that’s it, you’re back at it spending countless hours trying to get those pesky multiplayer Gears of War achievements
  11. Also included in a box you will find a free 1-month Xbox Live Gold subscription, which works well for those who are already subscribed so they don’t feel ripped off by not having a console for about 3 weeks, but it also works well for those who are Silver subscribers as a bonus type thing to go and play online for a while, a win-win thing IMHO

So, all in all, about a 10 minute phone call and less than 3 weeks waiting was all it took, and I’m mighty pleased with how professionally it was handled. Suddenly, I don’t feel as bad and that’s one heck of an important lesson other companies could learn from Microsoft right about now.

Update: I bet these failures have something to do with Decepticons…

Posted by: Boris Popov | July 6, 2007

Seaside going places

I’m personally not against a principle of constant critical evaluation of one’s work, but its also very important to sit back once in a while and look at the bigger picture. Is what you do important? Does it help people get stuff done? Do they enjoy getting stuff done with your application? If all the answers are ‘Yes’, then you must be doing something right, so give yourself a pat on the back, go home, forget about work for the weekend and chill out. Which is what I’m going to do now, but not before leaving you with this graph of all our visitors since the official release about 4 months ago. Perhaps not as impressive as Dabble DB’s graph would be, but since they aren’t bragging about theirs I might as well throw mine out to set a precedent… ;)

4 months outreach

Posted by: Boris Popov | July 6, 2007

Moving from 2.7 to 2.8

I did a quick run-through today to see what it would take to move our application from the most recent version of Seaside 2.7 to the brand-spanking-new 2.8 snapshot Michel published this morning. Here are some notes about the changes I had to make and a few rewrite snippets to give you a starting point if you run into the same issues (you may not though).

1. WACanvasTableReport has been renamed to WATableReport, you will need to fix any subclasses you may have added

2. There’s currently no way to subclass WAApplication in 2.8 in a configurable way, it was previously possible via #applicationClass and was used to implement custom #expiryPathFor: behavior; I’ll see about integrating my changes with the main branch for good as I think generalized behavior in that area would benefit many

3. Preference called #useSessionCookie is no longer there, so the following will fail miserably,

(self registerAsApplication: ‘cooler’)
preferenceAt: #useSessionCookie put: false;
yourself

instead, WACookieSession has been added as a subclass of WASession, so you’ll need to do,

(self registerAsApplication: ‘cooler’)
preferenceAt: #sessionClass put: WACookieSession;
yourself

or, if you already have your custom subclass of WASession and would like to have it use cookies for tracking, just move it and subclass off of WACookieSession instead.

4. #linkToScript: has been replaced with a much cleaner canvas-like API, previously it was used inside #updateRoot: to link to external JavaScript files (please note my use of #resourceUrl: instead of standard #url:, that is because I have a custom resource URL installed in #resourceBaseUrl preference and would like attached scripts to respect the prefix),

updateRoot: root
super updateRoot: root.
root linkToScript: ‘/other/charts/charts.js’.

instead you will need to use,

updateRoot: root
super updateRoot: root.
root javascript resourceUrl: ‘/other/charts/charts.js’.

and here’s a rewrite pattern to help you change your code in one go,

Search for:

“@root linkToScript: “@url

Replace with:

“@root javascript resourceUrl: “@url

5. Same goes for #linkToStyle: although I’ve been using a more complicated variant #linkToStyle:titled:media:, but rewrites come to the rescue once again,

Search for:

“@root linkToStyle: “@url titled: “@title media: ’screen’.

Replace with:

“@root stylesheet url: “@url; addScreen

Search for:

“@root linkToStyle: “@url titled: “@title media: ‘print’.

Replace with:

“@root stylesheet url: “@url; addPrint

6. You can’t use awkward #heading:level: utility method to do,

html heading: ‘Need some help?’ level: 2.

instead use the full expanded API,

(html heading)
level: 2;
with: ‘Need some help?’.

or this simple rewrite (you can tell I’m fan, eh?),

Search for:

“@html heading: “@text level: “@level

Replace with:

“@html heading level: “@level; with: “@text

That’s about it for now, but I’m not all the way there yet as I now need to track down a nasty memory emergency that comes up when I try to submit a form, but I suspect it may be partly something in my code since I can’t reproduce it in the stock image, although it worked just fine for the longest time in 2.6 and 2.7, so I’m not fully convinced its my fault yet… More to follow.

Update 1: Okay, I found infinite recursion in Seaside’s codebase, seems to be the difference between Squeak and VisualWorks, but pretty easy to fix

Update 2: With a couple more fixes in place, we have liftoff. Exciting times and less painful than I was preparing for.

Running on 2.8  Running on 2.8b

Posted by: Boris Popov | July 6, 2007

Seaside 2.8 on VisualWorks

Michel Bany has just published another port of Seaside for VisualWorks in the Public Repository, go check it out, but read his disclaimer first.

As requested on this list I published Seaside 2.8 on the public Store repository.

SeasideForWebToolkit(2.8a1.390.0,mbany)
SeasideForSwazoo(2.8a1.390.0,mbany)

both are based on Squeak version Seaside2.8a1-lr.390, July 4, 2007.

I also published Scriptaculous based on its most current Squeak version.

SeasideScriptaculous(2.8a1.205.0,mbany)

based on Squeak version Scriptaculous-mb.205, July 6, 2007.

The version number for Scriptaculous in the public Store repository (2.8a1.xxx) is meant to indicate that it will not work with Seaside 2.6 and Seaside 2.7.

Although I did not check, I expect most of the Seaside add-ons to fail with Seaside 2.8 (SeasideAsync, SeasideTesting, WebDesignerTool, SeaChart, ShoreComponents,etc.).

I’ll be trying it out first thing (once all the important work stuff is done, of course, wink).

Posted by: Boris Popov | July 3, 2007

Google Analytics and Seaside URLs

As Philippe has just pointed out in my previous post, one other thing you should do when setting up a Google Analytics profile to track a Seaside-based site is make it suppress extra URL parameters. Specifically _k and _s. You can do so via the Edit Profile Information screen as follows,

Exclude URL Query Parameters

Posted by: Boris Popov | July 3, 2007

Seaside + Google Analytics

We now return to regularly scheduled programming. First up, adding Google Analytics tracking code to your Seaside application. It’s an absolute must have if you are serious about your application.

  1. Do you have an Analytics account already?
    1. Yes - Find your Account ID by clicking on “Edit Analytics Account”
    2. No - Sign up, it’s free
  2. On your root component (one that implements #canBeRoot and #initialize) add (or augment) the following three methods,
    1. updateRoot: root
      super updateRoot: root.
      root linkToScript: ‘http://ssl.google-analytics.com/urchin.js’.
    2. renderContentOn: html
      self renderAnalyticsOn: html.
    3. renderAnalyticsOn: html
      html script: ‘_uacct=”UA-XXXXXX”;urchinTracker();’
  3. Change “UA-XXXXXX” to your actual Account ID from Step 1.
  4. Change URL in #updateRoot: to “https” if you intend to host your application behind SSL, otherwise most browsers will display a warning about linkage to non-secure content from a secure page.
  5. Slightly more advanced example for those who care, you can skip it completely if you don’t
    1. Of many tracking options that Analytics supports, two most commonly used ones are User Defined values and Explicit URLs
      1. User Defined value is useful if you want to separate users according to some arbitrary criteria, for example if multiple instances of your application live on a single domain (www.domain.com), but different URLs (/live, /demo, /whatnot)
      2. Explicit URLs are important for Seaside applications if you want to track “Content” which is normally not distinguishable based on Seaside-generated URLs, but implementation will largely depend on your application, consider the following as an example only
    2. renderAnalyticsOn: html
      | ws |
      ws := String new writeStream.
      ws
      nextPutAll: ‘__utmSetVar(”‘;
      nextPutAll: self analyticsKeyword;
      nextPutAll: ‘”);_uacct=”UA-XXXXXX”;urchinTracker(”’.
      crumbs do: [:ea | ws nextPutAll: ea title asAnalyticsURL] separatedBy: [ws nextPut: $/].
      ws nextPutAll: ”’);’.
      html script: ws contents
    3. String>>asAnalyticsURL
      ^self asLowercase copyReplace: Character space with: $_

As always, comment if you have any questions please.

Posted by: Boris Popov | July 2, 2007

Mac thoughts

So… Switching to Mac. I’d considered writing about this for a while, but held off until now to try to get a clear picture in my head about things I like and don’t like about the whole experience. Most of it relates to both MacBook and iMac, but I happen to be using company-provided MacBook more, so expect the list to be tilted slightly that way.

The Good

  • Had only had to force a reboot once, when a co-worker tried to use his remote control on my MacBook while it was sleeping to try to spook me, but fell prey to the bug that was fixed in 10.4.10 later on
  • Slick and doesn’t get in your way, which is quite opposite to the experience we had at the office while trying out Vista on one of the machines; its effects were nice to look at, but only for the first 10 minutes
  • Just as commercials imply, it does come with pretty much everything you need; obviously professionals will need extras, but for a home user this is as complete a machine as any in terms of packaged software; iLife is awesome and I look forward to migrating all our 7,000 photos to iPhoto when Leopard with Time Machine comes out
  • The hardware is beautiful and feels solid; I’d never thought I’d enjoy holding a bright white MacBook on my lap so much after using various ThinkPads for a number of years
  • Outstanding Airport Extreme integration; nothing beats wireless freedom when it comes to attached storage and printers
  • Parallels, TextMate, Transmission, Connect360, iWork, Stellarium

The Bad

  • Don’t care much about iMac, but the MacBook gets quite warm and uncomfortable if you hold it on your lap for extended periods of time; iStat displays CPU temperature upwards of 65 degrees Celsius at times, which is right about where I would have had hardware alarms set on P3 CPUs a few years ago
  • No built-in backup solution, but Time Machine is coming; right now iBackup seems to do the trick, although I haven’t had to use its restore feature yet
  • No VGA or DVI and even though you can buy adapters separately I think they should have been included in the box for all but the lowest priced models
  • Too many good applications to choose from!

That’s about it, I’m sure I’ll have more as time rolls by, but overall impression is that there’s not a single tiny reason left to use a PC at home (or even at work for most of us) anymore. If anyone’s thinking of buying new hardware, think hard about the Mac, you won’t regret it.

Posted by: Boris Popov | July 2, 2007

Leopard WWDC build is out!

… but only for Select and Premier ADC members and all the same NDA rules still apply, so you can bet on very little coverage from me. Yes, ever since I got my first Mac about a month ago, I’ve become a complete Mac fanboy, so sue me ;)

Posted by: Boris Popov | May 17, 2007

Just add some color

Couldn’t help but share the wonderful resource that is colorschemes.org, chances are if you have a question about color there’s an answer in there somewhere.

Posted by: Boris Popov | May 4, 2007

Slides from STS 2007

Unfortunately, I don’t have much time to get into my own take on Smalltalk Solutions 2007 right now, other than to say I’m very impressed with the turnout and appreciate everyone’s feedback, hopefully this will do some good for someone out there.

As promised, here are the slides from the presentation in a variety of formats for you (incidentally hosted on S3, which is something I’d talked about briefly as well),

Enjoy, and comment if you have any questions!

« Newer Posts - Older Posts »

Categories