Background: I have been trying to develop for the PlayBook, and I have run into silly, time-consuming problems at every step. I have sent some of these errors to @BlackBerryDev, and have received generally unhelpful responses (for example, see my message, RIM's reply, my reply, RIM's second reply)... But the message I received today deserves a response longer than 140 characters.
My initial message was:
@BlackBerryDev eg, BS unhelpful errors like this: http://twitpic.com/5u4sco
And @BlackBerryDev replied with:
@wolever This error is a common mac permissions error, not specific to our tooling. Check [http://www.google.ca/search?q=%22You+do+not+have+write+permissions...] for examples ^SA
And this is my reply to the above:
As you have apparently never debugged a permission error before, ^SA, so let me tell you how it works.
When sensible software can't write to a file or directory, it includes a full path to the file or directory in the error message. Using this information, it is possible to example the file or directory in question and determine the correct course of actions (for example, changing the permissions).
However, the shitty InstallAnywhere software used by the PlayBook SDK is, unsurprisingly, not sensible. So when it encounters a permission error, its error message does not include any such information. In fact, the only hint about the install directory I'm given is that it's:Inside "Research in Motion" on the folder "SDKs" on the disk "Enoch".
Which makes the permission error impossible to debug without something like an install log.
But I don't know where the install log is (if it exists), and frankly I don't care.
What I do care about, though, is that you have sent me a link to a Google search (without even using lmgtfy!) that you clearly haven't looked at (because if you had, you would see that 1/3 of the results are Linux-specific, 1/3 of the results are the file which defines the error message, and 1/3 of the results are mirrors of the same message, which suggests a simple “fix permissions” (which, by the way, would not, and did not, fix the problem).
So, @BlackBerryDev: if your future messages will piss me off and insult me in the same way that these messages have, I would rather you simply didn't respond to me at all.
And, while I'm standing on my little soap box here, I'd like to send RIM a small message too:
It seems obvious to me that the only way you will be able to get on top is developers... But, at the moment, your development experience is terrible. Just ask anyone who has tried to develop for the PlayBook.
Fortunately I also know that you have the skill in-house to improve on this. You know those TinyHippos guys you recently acquired? They know what they're doing. Listen to them. If they suggest crazy things like sending both signing keys in one email (instead of two identical emails), do it. If they suggest getting in bed with Adobe and VMware so PlayBook developers can start developing without spending hours creating accounts and downloading demos, do it. Do whatever it takes to make development easy and painless.
Want some other starting points? Here's what I've complained about on Twitter (static mirror). Put more people behind @BlackBerryDev so they can reply quickly and helpfully. Make it possible to get developer signing keys instantly. Etc...
I would really like to develop for the PlayBook. I really would. But as it stands, I've spent three hours dealing with the kind of crap I've documented above for every hour I've spent writing code. And that's just no fun.
For a long time I have found it useful to run three (or more) different browsers: Safari for my day-to-day browsing, Firefox for my development work and Camino for Facebook and Google apps. This separation is part pragmatism – it's useful to clear cookies or disable FlashBlock while I'm developing without my main browser being affected – and part paranoia – I'm not logged in to Facebook or Google on my main browser, so it's harder for them to track me and I'm less likely to be hurt by a cross-site-scripting (or similar) attack.
Recently Safari's memory leaks  and the launch of Firefox 5 have pushed me to re-evaluating my browser preferences... And this is the result:
Three customized versions of Firefox and three profiles to match.
The customizations are straight forward:
- Firefox.app was copied three times, and the name was to the role of that copy (“Browsing.app”, etc).
- The icon was changed on each app.
- The CFBundleName in $NAME.app/Contents/Resources/en.lproj/InfoPlist.strings was changed from “Firefox” to $NAME (changing the application name which appears in the top left corner of the screen).
- After the “Browsing” profile was setup (correct plugins installed, etc), it was copied twice to create the “Dev” and “Facebook” profiles (profiles are stored at ~/Library/Application Support/Firefox/Profiles/, and the profiles.ini file, in Application Support/Firefox/, must also be updated).
- A persona was added to the “Facebook” and “Dev” profiles (specifically a pastel sky blue and pastel mandarin).
- NoScript was installed on the “Facebook” profile (for a little bit of added paranoia).
With these customizations, it's easy to visually distinguish between the browsers, both from the main windows:
And from the dock/command+tab application list:
And that's my current browsing setup :)
|||it would be using almost a gigabyte of memory, even if I only had one or two tabs open.|
Unlike every other modern mouse, the Marble doesn't have any sort of scroll wheel… But fortunately this can be emulated in software. I've done this on my Mac using KeyRemap4MacBook and a custom private.xml. I've also been told that Marble Mouse Scroll Wheel (mirrored marbleinst.exe) works well on Windows.
: It has been replaced by, of all things, a wireless version. Why does a stationary mouse need to be wireless? I've got no idea. Maybe it's a conspiracy between Logitec and Duracell?
In thinking about the pair programming that I've done, I realized that I can separate all of my past partners (all 6-8 of them) into four categories:
- Equally skilled
- Less skilled
- Much less skilled
- Skilled in a different domain
Of these, I have found the “less skilled” partners to be the most frustrating. Not because of their personality, but because during the sessions I've felt like there is a mutual understanding of the goal, but I would just be able to get there more quickly (for example, because I'm more experienced with the libraries or environment). I haven't felt this way with the “much less skilled” partners because I believe there is a mutual understanding that the session more akin to a tutorial… So, in my mind, the goal becomes “teach my partner” instead of “solve a problem”.
The times I've paired with an “equally skilled” partner do not stand out in my memory, so I assume they went okay.
My favourite pairing experience was when a friend and I had to figure out the inner workings of some example C code for a micro controller. My friend knew a lot about micro controllers, I knew a lot about C, and together we were able to reverse engineer the hideous example code much more quickly than either of us alone could have. It was a lot of fun.
: as I write this, I don't have any specific people in mind, just memories of my experience.
It appears that, at some point, I stopped getting notifications of new comments… I've sorted that out now, though, and please forgive me for my tardiness in replying to old comments.