iPhone/Droid Sales Comparison Misleading

Posted March 17th, 2010 in Commentary by jayshao

A number of news sources seem to be publishing comparisons between initial sales numbers for the Apple iPhone, Motorola Droid, and Google Nexus One.

Some quick comparisons are being made trying to compare the DROID & iPhone numbers head on, but I’m surprised not to see any sidebars noting that the original iPhone launched at 499/599 – whereas the DROID has been fully subsidized from the get go.

Official Google Blog: Introducing Google Buzz

Posted February 10th, 2010 in Commentary by jayshao

Official Google Blog: Introducing Google Buzz: “We’ve relied on other services’ openness in order to build Buzz (you can connect Flickr and Twitter from Buzz in Gmail), and Buzz itself is not designed to be a closed system. Our goal is to make Buzz a fully open and distributed platform for conversations. We’re building on a suite of open protocols to create a complete read/write developer API, and we invite developers to join us on Google Code to see what is available today and to learn more about how to participate. “

(Via Google Blog.)

While this looks a lot like twitter/brightkite/facebook activities, I do wonder if the real game-changer is integrating with Email – e.g. making Lifestream activities mainstream (though Facebook has become pretty mainstream) – or mainstream for people who haven’t necessarily sought out social networks.

I also wonder how this fits in with Wave? Is wave a technology platform under/in parallel to this? Slightly different? Just 2 teams at Google doing slightly different things “let a thousand flowers bloom and all that”?

Combining jUnit’s @Ignore and @AfterClass

Posted January 26th, 2010 in Commentary by jayshao

Interesting – in jUnit 4.4 – combining @Ignore and @AfterClass (haven’t tried the other static’s like @BeforeClass) don’t seem to do what I’d expect – e.g. the @AfterClass annotated method seems to execute regardless.

[FIXED] Eclipse Issues with Clicking on Ubuntu/GNOME

Posted January 25th, 2010 in Commentary by jayshao

For the last few months, have moved most of my work programming from the Mac to Ubuntu (first convenience via VMs, recently because I switched jobs and at the new employer it was that or Windows) which has mostly gone will, though there were some issues around Eclipse UI gotchas, notably:

  • Sometimes buttons wouldn’t let you click them (though keyboard focus mostly worked find)
  • Sometimes windows wouldn’t paint properly – contents, toolbars, etc.

At first I thought it might have been Virtualbox’s mouse driver, but it looks like it’s a generic Eclipse/GTK issue, with some notes at http://blogs.gurulabs.com/dax/2009/10/what-gdk-native.html on the root cause, and how to fix it. For the time being I’ve created scripts to launch Eclipse (and STS) and before I fire off Eclipse, do a:

1
export GDK_NATIVE_WINDOWS=1

This seems to resolve the painting issues, though it feels a bit less smooth/fast (UBUNTU+GNOME+COMPIZ) – still usable, though admittedly have tried this on a pretty fast machine (recent 2xQuad-Core w/lots of RAM)

Loadtesting on EC2 – in all cloud++

Posted December 20th, 2009 in Commentary by jayshao

Recently at work, had a need to rerun some load-testing numbers, but got stick since our internal servers all had builds we were looking at, or weren’t setup, or yada, yada… so we turned to EC2, with overall pretty positive results.

Some background – we build a web-based portal application that runs on a lightweight J2EE stack (Tomcat, Spring, Liferay) and do most of our testing w/jMeter. So, the process of setting up to loadteest on Amazon looked like:

  • Build AMIs using Centos + our Applications (this took a bunch of hours, coming up to speed with Amazon’s tools for images – mostly the usual self-signed cert woes) — this was much easier since we have a one-click build for probably 80% of our full-machine footprint (that last 20% is a doozy though)
  • Add a local LDAP server (OpenDS) to the image – was faster than troubleshooting some odd connectivity issues to our usual infrastructure
  • Fire up some Amazon instances
  • Grab one of the existing public AMIs w/Linux + Jmeter (Ubuntu in this case)
  • Upload our scripts and start running

Net cost: ~ $40

Thoughts on the experience:

  • Running jMeter inside EC2 is probably one of the things that makes this economically viable. Since our loadruns generate GBs, and GBs of traffic per minute in peak scenarious, paying per GB bandwidth can rapidly get expensive — but we were able to keep all the traffic in-cluster
  • The fact that AMIs don’t by default have persistent storage (though EBS or new AWS features get around this – for more $$$) is actually a plus. We can run a test, shut down the image, bring it back up, and we have a clean image again to run to re-verify
  • We were looking for stress/soak/smoke testing – so general benchmarks. For this need, we were not yet at the stage of verifying performance in a particular hardware or other environment, we just needed rough approximate numbers
  • We chose not to use Amazon’s loadbalancing infrastructure, but might in the future
  • EC2 actually let us run all our test scenarios (we have 3-4 main ones) in parallel, on spun-up instances – this cut our time to completion from something like 24-48 hours if we ran them serially to closer to 5hrs after setup was done – a big savings, especially for multiple runs)

All in all, it was positive experience, with some next steps we’re looking to incorporate:

  1. Automate building AMIs – we did this by hand, and it was far and away the most time-expensive part (8 hours) and when we got errors early on we were immediately suspicious of configuration errors
  2. Incorporate this into our Continuous Integration system (Hudson) – if construction of AMIs was automated (and Amazon’s tooling looks easy to automate) we could schedule this to run automatically, on a nightly/weekly basis – which would be nice, since right now this is a pretty heavily manual process – also, paying by the hour, the overall cost is a lot less than trying to manage with dedicated systems (and coordinate scheduling for the same)

Crucible 2.1 Out

Posted November 12th, 2009 in Commentary by jayshao
Crucible 2.1 also supports the new pre-commit review creation functionality recently added to theĀ Atlassian IDE Connector for Eclipse. This plugin from Tasktop, the makers of Mylyn, is a must have for Eclipse users who use Crucible (or Bamboo, or JIRA, or FishEye).

http://blogs.atlassian.com/devtools/2009/11/crucible21released.htmlлегла

This looks pretty nice – pre-commit workflow is a nice addition – makes it so much easier to do code reviews and enforce “don’t break the build” in the same group…

Google Wave Invites

Posted November 3rd, 2009 in Commentary by jayshao

Got another batch of Google Wave invites – drop me a line if you need them.

Update: This batch all gone – will let people know if I get another group.

Shooting myself in the foot w/maven:release

Posted October 30th, 2009 in Commentary by jayshao

I was using mvn:release (release:prepare, release:perform) to release a number of modules today (for several hours – so much for speeding up through automation) but kept getting errors to the effect of:

[INFO] Error deploying artifact: Authentication failed: Cannot connect. Reason: Auth fail
[INFO] Error deploying artifact: Authentication failed: Cannot connect. Reason: Auth fail
It looks like the reason boiled down to extra, old passwords in my .m2/settings.xml file. Go figure. Quite an interaction between servers, scm, repository tags though – mostly blogging this since I’m sure I’ll quickly forget through the magic of copy&paste.

Google releases Wave protocol implementation source code – Ars Technica

Posted July 28th, 2009 in Commentary by jayshao

Google releases Wave protocol implementation source code – Ars Technica: “At the Google I/O conference earlier this year, the search giant revealed an intriguing new communication service called Wave that aims to deliver concurrent messaging and collaborative editing in a single cohesive environment. The underlying Wave Federation Protocol is designed to make it possible for third parties to host their own interoperable Wave instances. Google intends to open the source code of its own implementation in order to encourage widespread adoption of the protocol. The company took its first major steps in that direction on Friday by releasing the source code of its Operational Transform (OT) code and a simple client/server reference implementation that is built on top of the protocol. This code, which is available under the open source Apache Software License, will give developers a way to start experimenting with the protocol and potentially even building their own Wave-compatible services.”

(Via http://arstechnica.com.)

I hate to hop on the bandwagon, but I have to admit – Wave looks like the most revolutionary item I’ve seen in a while – in a full-on game changer sense. Not so much just because of the cool widgetry that Google’s built, but because it’s a protocol – with the flexibility and potential that implies.

Building on some of the interactions we’ve seen with IM, Blogging/Trackbacks, Twitter, and other messaging, Wave looks to standardize, federate, and embed real-time, multiparty communications to the point where it will become part of the fabric of the web. If Web 2.0 = comments and trackback conversations – this feels a lot more like Web 2.5 – the implementation we really wanted when we first tried to take the web from a document-based publishing platform to a conversation-enabled collaborative medium.

And… Open-Source production-quality reference implementation – what could be better. I have to say, not an small number of my off-work hours are going to be spent looking at embedding Wave into… everything… Particularly given that Federation (though still a little nebulous) is a first-class citizen in the platform.

BDD with easyb

Posted July 19th, 2009 in Commentary, Work by jayshao

Recently I’ve grown increasingly fond of the concepts embodied in the “Behavior Driven Development” (BDD) outgrowth of “Test Driven Development” (TDD) and “Domain Driven Design” (DDD) . BDD is a neat twist on TDD and DDD that strives to more closely tie automated tests with both the “ubiquitous language” terminology espoused in DDD, along with an Agile-style tight integration with business users in defining the TDD tests.

A great challenge with implementing TDD I think has been the difficulty in writing tests first — often driven by a difficulty in amassing sufficient detail in terms of requirements and acceptance tests to truly generate specifications for test-first development. Too often TDD ends up being a case of writing tests after-the fact to test code which we’ve written to incomplete conceptions of what the code needs to do.

A number of toolkits have emerged recently for BDD — and recent reading at http://www.agiledeveloper.com (which has some truly awesome content) led me to a PPT on BDD using easyb. Easyb provides some tools (built around Groovy) for restructuring your code to have unit/acceptance tests written in a smooth DSL — this especially appeals to me given it’s close congruence with the way my team at CampusEAI has moved to handling our requirements and user-stories.

Cutting to the chase, easyb lets you express acceptance tests in code that looks like:

1
2
3
4
5
6
7
8
9
10
11
narrative 'description', {
as_a 'account holder'
i_want 'depost money'
so_that 'whatever benefit...'
}

scenario 'deposit money', {
given 'account 12345'
when 'deposit 10000'
then 'balance of account 12345 goes up by $10000'
}

These scenarios can then be directly tied to acceptance tests in code, and there’s even nice support for putting them in without implmeentations to be marked as “pending”. The overall sytax looks inspired by RSpec, but tied into Java. There’s even some nice reporting builtin to handle producing reports — plaintext here:

9 behavior steps executed successfully
 Story: blackjack
  scenario tie game when cards are dealt but dealer gets higher card
    given a game a blackjack game and both players have a score of 10
    when the dealer gets an Ace and you get a 10
    then the dealer should win
  scenario tie game when cards are dealt but player gets higher card
    given a game a blackjack game and both players have a score of 10
    when the dealer gets a 10 and you get an Ace
    then the player should win

– looks like this would hook in well to Maven to incorporate into something like a Maven site/build process, with some tasks existing — dreaming about a report in Hudson to graph this….