Wish Kindle Share was Context-Aware

Posted November 20th, 2011 in Personal by jayshao

ИконописI love my kindle, and I think the highlight and share functionality is actually one of the coolest functions. I’m always surprised how often I end up connecting/re-connecting with friends now that we’re all adults based upon snippets of books or articles we’re currently reading. I also dig stalking big-influences to see what they’re reading ;) .

The one distinction I wish the share functionality had was a bit more granularity – at a high level, I often want to share things either casually (e.g. some witty snippet from a leisure book) or professionally (some insightful comment about software engineering, or management practices). Those 2 audiences are very different though, and at times never the twain shall meet – hence the unsuccessful experiments previously with cross-posting tweets to my Facebook feed. I do want my friends to think I do stuff other than work afterall…

In the long run I think deeper integration with groups, lists, circles, tags, or multiple accounts is what I’m really looking for – e.g. when I ask “share” I kind of want the Kindle to ask “with who?” Though, admittedly, I’m still super-excited that Amazon’s supporting Overdrive, bring libraries back into the fold (so this local library supporter can stop being guilty for buying the 1 e-reader that didn’t support the library’s digital collection)

4G Mifi = FAST (sometimes)

Posted June 16th, 2011 in Commentary by jayshao

иконографияikoniмека мебел

I swapped out my 3G MiFi at work for one of the new Verizon 4G LTE models, and initial results indicate that it’s obscenely fast when it’s connected to the 4G network, but the same 3G speed that was passable last week feels lethargic otherwise (parts of the Northeast Corridor NJTransit Commute).

Sitting still at Newark Penn Station, I got over 20Mbps down, and 4Mbps up – which is faster than my cable modem at home.

4g-mifi-speedtest

While in transit it steadily dropped as I got further from NYC, and for many parts of the train trip (which unfortunately is where I use the MiFi the most) it drops back to 300-400Kbps that I got with the 3G model.

Aside from that, the other points are all about what you’d expect:

  • Battery life is not as good as the 3G Mifi – it easily lasts my 1-1.5h commute, but definitely isn’t going to go all day
  • It’s a bit bulkier than the 3G MiFi, I keep it in my bag, but don’t think I could shirt-pocket it like I would have the 3G
  • The external pointers are good – the batter gauge is really helpful, and the led pulses different colors depending on 3/4G connection
  • Changing the ssid wasn’t easy, but wasn’t hard either – it helped that I don’t have any of my other networks on 192.168.1.1 either

Having said all those bits, the bottom line is I love this thing, and expect that in a few months as LTE coverage creeps across my train commute I’ll be even happier. While I would have said 3G was fast enough for the stuff I do on the train, the truth is 20Mbps is life-changing fast – it feels like when I first got a cable modem, except it follows me around.

QOTD: Retrospective Prime Directive

Posted March 2nd, 2011 in ContextWeb by jayshao
Regardless of what we discover, we understand and truly believe that everyone did the best job they could, given what they knew at the time, their skills and abilities, the resources available, and the situation at hand.
  • Margaret Motamed on agile-coaching-support (Google Group)

QOTD: Agility

Posted January 9th, 2011 in ContextWeb by jayshao
Agility is dynamic, context-specific, aggressively change-embracing, and growth-oriented. It is not about improving efficiency, cutting costs, or battening down the business hatches to ride out fearsome competitive ‘storms.’ It is about succeeding and about winning: about succeeding in emerging competitive arenas, and about winning profits, market share, and customers in the very center of the competitive storms many companies now fear.

S. Goldman, via Alistair Cockburn’s Agile Software Development: The Cooperative Game

Late Night Emails

Posted October 26th, 2010 in ContextWeb by jayshao

I have a bit of a habit – I send all my thoughtful (well, relatively thoughtful emails) late at night. One of my staff members commented during a 1-1 session that he’s torn – he generally does want to respond/converse when I comment on process, philosophy, and the like (+1) but… it’s like 8,9,10PM and he doesn’t really want to think about it right at that time (-1). Also,  I don’t actually expect people to be online and checking their email after hours, and don’t want to inadvertently set that expectation or build that kind of culture.

In reality – the plague of email philosophy is largely a byproduct of NJTransit – for some reason (possibly the tunnels which stop internet access) I find myself as part of settling down from the day, often jotting down thoughts on processes, observations, or – dangerously close to philosophy. At least some of these ideas are even good (better than par).

So… the solution clearly is to defer broadcasting my thoughts. Admittedly in some cases I do end up doing that, using a text editor while roughing out thoughts (currently looking for a good Windows one – playing w/PsPad – would like something open-source ideally) though that’s not really a great workflow.

Something along the lines of the ability to “SendLater” – for me to write as the thoughts are flowing, but send when recipients are likely to be reading – as opposed to spamming their blackberry would be ideal. Since we’re on Exchange, which means Outlook is pretty much the only sane way to interface with my email (I run Linux on my desktop, but Evolution seems very broken against Exchange 2003). Doing some quick Googling, there appear to be something like 3 solutions.

  1. Outlook, in “options” does have buried a “don’t deliver before XXX” setting
  2. SendLater – an add-on (~$25)
  3. EmailScheduler – another add-on, part of a bigger suite (~$25 for the suite)

For the time being I’m going to go w/#1 and some good old mental discipline – from a usage perspective I’d love to have a couple of different options, perhaps off a dropdown that late me define something like “xxx day @ yyy time” and have a couple easy options – I’m dreaming of something like:

[Send Later | v]

– Today @ 5PM
– Tomorrow @ 9AM

I’ve been meaning to do something in .Net – this may be what tips me over the edge, given how much time I spend inside outlook these days – don’t want to lose all my street cred.

Follow the $: Verizon iPhone != LTE

Posted July 19th, 2010 in Commentary by jayshao

холови гарнитуриThe perennial Verizon iphone rumors keep ticking by, with speculation about contract dates, terms, projections, and the usual interview of some guy in line at the apple store who says “I’d switch today”.

A recent thread seems to be in a lot of these stories: “Verizon iPhone will use LTE (4G)”. While I have just as little actual information as most of these analysts, I think it’s unlikely based on Apple’s core competencies and past behavior, and market/situational facts.

Perf4j+Maven+AspectJ CTW

Posted June 29th, 2010 in Commentary by jayshao

Recently I’ve incorporated Perf4j for runtime performance statistics on a number of projects, combined with our in-house counters and other standard libs (actually I quite like the annotation-style logging of perf-stats, and the tag-name rollup conventions, and will probably retrofit both into our existing collection tools). I had a bit of difficulay initially getting AspectJ to do CTW for the collection (and in retrospect, very much want to investivate the agent-based LTW approach, since it’d give us the ability to flip on/off recording, while it should be basically just as fast except on object creation – which for Spring/Singleton instantiated services (most of our performance code) is not significant.

Anyhow, the meat, plugin config below:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.3</version>
    <configuration>
        <showWeaveInfo>true</showWeaveInfo>
        <source>1.6</source>
        <weaveDependencies>
            <dependency>
                <groupId>org.perf4j</groupId>
                <artifactId>perf4j</artifactId>
            </dependency>
        </weaveDependencies>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>compile</goal>
                <!-- use this goal to weave all your main classes -->
                <goal>test-compile</goal>
                <!-- use this goal to weave all your test classes -->
            </goals>
        </execution>
    </executions>
</plugin>

Also dependencies (we use Log4j, though we’re looking at Logback as well):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
    <version>1.6.7</version>
</dependency>
<dependency>
    <groupId>org.perf4j</groupId>
    <artifactId>perf4j</artifactId>
    <version>0.9.13</version>
    <classifier>log4jonly</classifier>
</dependency>
<dependency>
    <groupId>commons-jexl</groupId>
    <artifactId>commons-jexl</artifactId>
    <version>1.1</version>
</dependency>

Performance note: We did some unit testing of methods which were instrumented/non-instrumented (our unit test basically spewed out a couple thousand garbage string+ints in a loop, which was instrumented or not)

We saw something like 3x the number of minor GCs (though GC was still fast) – no additional major GCs after adding Perf4j. Overall execution time was higher as well, though not by the same degree.

Facebook -> Chainletter NG

Posted June 29th, 2010 in Commentary by jayshao

Looking through my friends streams – I saw a big blurb for:

http://www.subwayfootlongspromo.com/ (notice the comment box isn’t real…)

Which convinces me – Facebook Like Pages are the new Chainletter. And, even better than Chainletter (costs a lot) or Chainletter 2.0 (fills up email boxes), Chainletter NG allows you to check the progression of your meme in real-time, using all the tooling provided by Facebook. As the Facebook comment and like boxes become even more recognizeable, I’d expect this situation will action only increase.

This does seem to help make the case for verifiable identity for widgets – e.g. how do I socially, recognizably mark my widget as genuine for users when they can’t just check the URL bar to see what site they’re on? Unfortunately, it’s hard to come up with some pattern that’s not going to involve browser support, though what the banks have been doing with personalized site access images, and the social networks w/gravatar/avatar style repetition might be helpful (e.g. train users to only submit if they see their picture, and if you don’t know what you look like ask the guy next to you…

Neat Intellij Tricks

Posted June 28th, 2010 in Commentary by jayshao
This entry is part 4 of 4 in the series Eclipse2Intellij

So, after a few months of working almost exclusively in Intellij, I have to say I think it is a better IDE, and I miss it when I go back to Eclipse. There’s significant talk about us adopting it, though the usual questions about retraining, etc. rear their ugly head. Neat tidbits that have come up:

  • Automatic, pre-commit static code-analysis – including your own bug definitions: http://jetbrains.dzone.com/articles/find-your-very-own-bugs
  • Great SVN change-list support for keeping multiple flows of changes sorted out – even shows up properly in svn status
  • One-click threadlocal refactor: http://blogs.jetbrains.com/idea/2009/10/threadlocal-in-one-click/
  • Settings sync online w/IDEA Server Plugin
  • Glassfish integration works, deploy & really nice console mapping (e.g. tail arbitrary log files) – have to leave username/password blank
  • Maven support: true main vs. test scope isolation, hierarchical module support
  • Language Injection: specify that certain methods take SQL, Groovy, REGEX, CSS, JS, and get working sytax completion, etc.

OutOfMemory PermGen Errors

Posted June 23rd, 2010 in Commentary by jayshao

In the past I’ve gone to the good old reliable “-XX:MaxPermSize=256m” (or 384m, 512m, etc.) to try to get redeploys in webapp containers like Tomcat and Glassfish to allow numerous hot-redeploys. I figured I’d invest a little time in sorting this out to see if there’s a better solution – unfortunately it doesn’t look like it.

http://www.jroller.com/agileanswers/entry/preventing_java_s_java_lang

had some useful sounding suggestions:

  • Move to JRockit – which is free for deployment (minus the nice management console) and does look very impressive, and seems to use a different memory scheme that doesn’t rely on PermGen, but could conceivably still suffer from class/memory leaks
  • Try these flags: -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled – this seems not to work, at least when tested against JDK 6, Glassfish 3, with a Spring-based application with a moderate amount of open-soruce tooling (Spring, Log4j, Drools, the like) – with PermGen set to 256m I still get out of Memory, and jvisualvm shows PermGen slowly filling up: permgen filling up

In the end, I have to agree with: http://my.opera.com/karmazilla/blog/2007/03/13/good-riddance-permgen-outofmemoryerror – it looks like we’re stuck with this, at least I haven’t found a sane solution beyond restarting between deploys. At least embedded servers like jetty or embedded glassfish startup quicker…