So… shiny…

So, 3 days I’ve had my iPhone now, and I tell ya, it’s hard to put down. So hard I’ve had a hard time finding time to write to the blog about how much I’m enjoying it.

Here’s a couple highlights of my first, realistically, 2.25 days with the phone. It’s a black 16gig iPhone 3G, just to make sure everyone is on board.

  • Within two hours of powering up the phone (20 minutes of which I was driving), I had successfully attached to my SSL IMAP server at home and was reading my inbox, connected to my gmail account, AND attached to the Exchange server at work. All quite seamlessly. The accounts play well with each other, I can set up Fetch or manual updates (so cute having the phone next to me go “chime!” when I get new mail, but for busy inboxes, gets old fast).
  • Getting my Contacts synced from Google Contacts was a little trickier, but iTunes for windows just BARELY had enough functionality to make this possible. But, it sure was nice getting all 400 some odd contacts back into my address book.
  • The iTunes Appstore is wonderful. Many good applications available, and it’s trivial to install them either via iTunes, or directly via the appstore link on the phone.
  • It’s very hard to keep reminding myself this is a 3G, unlimited Data plan unit. Once I got past that mental block I tuned into RadioParadise, hit the streaming 3G feed, and listening to the station all the way home. That’s a 45 minute driving commute, RP didn’t burp once, feeding music to a moving car in Boston at 128kbps. Just too sexy for words.
  • I’ve ordered a simple skin from Gelaskins – I’m constantly afraid of scratching the phone – having some sort of barrier to keep it’s gleaming body away from my pocket change is a must.
  • The keyboard took some getting used to – but with Apple’s smart fingertip placement, AND a very intelligent replacement algorithm that ‘just plain works’ (none of the ‘did you mean This?’ nonsense. 99% of the time it guesses right, and you don’t have to do anything, it just replaces the text for you, after letting you know via a very nice animation that it was doing so).

In short. I love it. I’ve named it Speicus.

More kvelling later.

iPhone over Palm – It has it’s faults, but…

It looks like Cat and I will be getting iPhones. The decision to jump away from PalmOS was pretty much made for my by Palm’s inability to innovate. That article was posted in August, 2007. In response, Ed Colligan, the CEO of Palm, responds with platitudes and vague promises:

Let’s remember that it is very early in the evolution of the smartphone and there is enormous opportunity for us to innovate. We have only just begun to fight!

Well Palm, it’s a year later. And Palm has done nothing with PalmOS. In fact, they have further deepened their relationship with Microsoft, coming out with more and more Windows Mobile devices, and doing nothing to pull focus back to the PalmOS platform.

In the meantime, Apple has gone ballistic with the iPhone.

This posting on PalmAddicts sums it up perfectly for me. The iPhone is not perfect, and I’ve spoken of my concerns before, but Apple is at least addressing the shortcomings in their platform. Unlike Palm, who is simply letting their once beautiful system fade away.

A Quest – Network enabled cheap MP3 player

I’m looking for something, maybe folks can help me out.
I want a small MP3 player that will stream audio over the network. The commercial version is the Roku Soundbridge. I wouldn’t mind building my own, hacking together parts, whatever, but I really haven’t found something that fits the bill.
Here’s the requirements:
* Must stream MP3 from a remote (network) source
* Can be wireless or fixed wire
* Should be small enough to mount on a wall
* Laptop running Linux is POSSIBLE, but only something that could mount / sit in Tablet orientation
* Total cost should be less than $50
* Should have at least a minimal display showing volume, source, and current track
* Line level output (RCA or headphone jack)
* Prefer opensource / linux based, but a commercial solution would work also.
* Should have local controls for pause, next track, volume, but not a requirement
The best configuration I can come up with is a handheld device running Angstrom or the like, but the most baseline iPaq or similar is still $50-$60, and I dont’ have a lot of experience with the current generation of iPaqs.
I’ve also considered picking up a Zaurus SL-5500 or two and using them. They seem to go for a good price on eBay, and certainly are opensource. Good video, touchscreen, and can take an SD card for network.
Anyone else have any ideas? There are zillions of opensource MP3 player boards on the web, but none have network interfaces on them (that I could find). I’m open to suggestions!

Picker / Selector for GSM phones?

So I’m getting ready to make the jump away from Verizon, and it looks like we’re going to be going with a GSM-based provider. I’d like to see a picker / selector for GSM phones that lets me pick phones based on criteria.

Anyone know of such a beast?

My baseline criteria is:

  • Does not run a Microsoft OS
  • Is not an iPhone
  • Is not a PalmOS Treo.
  • Has a full Bluetooth stack – including A2DP, various HID profiles, etc
  • I’d prefer a full keyboard, but I can wiggle on that
  • Music support, with open formats (I can put my own MP3’s on it)
  • Very good Bluetooth ‘modem’ capability. Want to use it as a data gateway for my laptop
  • At least a few games. The only game I really play on my Treo anymore is Sudoku. I think that may be a dead requirement on any replacement device.

My current top contender is the Nokia N95-3 (the North American version). Pricing is down to about $300 (the -3 is a slightly ‘older’ version, but has a removable Micro-SD slot – pretty good for loading music and other stuff on it), but I want to make sure I’m not missing out on something. (Oddly, I can’t find that price on Amazon now. I’ll keep looking).

One possibility is going with a fairly cheap, capable Bluetooth enabled handset now – no music, games, etc, but able to function as a phone and a GSM modem, and look toward an Android based solution in the next 6 months.

Pointers?

Eclipse XML Validation can BITE ME

There are times when I want to take an axe to Eclipse. Today’s particular grief is due to the XML editor. There are numerous faults with it (one of the biggest is that it ‘captures’ the control-pgup and control-pgdn keys into local tabs, so if you have an XML file open, and you use the keystrokes to navigate through your files, when you switch tabs to an XML file, the only way you can view a different file is to click on it), but todays stabbity-stab comes from the validator.
eclipse-48Eclipse shows you errors and warnings in realtime. Usually, they’re fairly accurate. Today I was editing a struts.xml file, and was getting a validation warning. When Eclipse senses a problem with the XML (based on it’s DTD), it tells you “this XML file fails the DTD validation”.
But it doesn’t tell you where.
This completely baffles me. “Somewhere in the following several hundred lines of XML code, there’s a problem. But I won’t tell you where or what it is.”
Off to the W3.org Validation service. I fed the XML file into it, and lo! A detailed description of the problem, and where it was:

Line 26, Column 39:
document type does not allow element "include" here.

<include file="struts-editevent.xml"/>

Was that really that difficult?
Gnar.

Jumping the RSS train Again

About 3.5 years ago I changed my web surfing habits and went totally into “RSS Aggregator” mode. Initially I was using the Sage RSS reader, a Firefox plugin. It worked well, and with Google Browser Sync I was able to sync my views. Or so I thought.
The syncing of my feeds never actually worked too well, so if I finished reading articles on one machine, when I sat down at the other, I couldn’t be sure if the ’18 new articles’ really meant 18 new articles. Also, Google Browser Sync is being end of lifed, so I need to find an alternative.
For a while, I switched to using Akregrator for KDE. All in all, I found it a fantastic tool, very fast, easy to use, and well integrated into KDE. Alas, I don’t always sit at my desktop machine, and really started pining for a way to stay synced on my feeds while out and about, while still being able to read at home.
After denying the inevitable for so long, I’m now working with Google Reader, which appears to do everything I need in an RSS aggregator, and is not localized to one specific machine. I’m slowly migrating my vast array of feeds (somewhere around 200) into it, and organizing them into folders by subject.
So far, I’m reasonably happy with it. It works, it’s fast, it’s ubiquitous, and, well, it’s Google. I have some real issues with how Google is overly dependent on their AJAX magic to get things done, though Reader doesn’t seem to too overboard with it (unlike, say, something like Picasaweb, which I loathe).
I’ll give it a few weeks and see how well I like it. Fortunately, it hasn’t required a major investment in time or configuration to set up. About an hour of basic twiddling and I’m up and running. Stay tuned!

Weird Ways of Working

I was gone all weekend on a wonderful camping trip, hence the radio silence. Today I’m back in the saddle, and faced with an annoying situation with my home setup.

I’ve come to the conclusion ‘yawl’ just can’t cut it as a development host. I had no idea that Pentium 4 CPU’s were such garbage. A 2.26 ghz machine isn’t fast enough to do serious work in Eclipse.

Most of my development is done on ‘clipper’, but alas it’s a Windows machine (it can’t help it, it was born that way). I wanted to start fiddling with CONGO (v2.0) via Konqueror, and hit upon running up ye ole VNC viewer on ‘yawl’, and just ‘moving’ the Eclipse environment onto yawl’s desktop.

Lo, it worked remarkably well. Clipper’s monitor is powered down, and I have an Eclipse environment on my Linux KDE desktop, but actually powered by the Windows dual core laptop next to it. I could overlap a Konqueror browse window and flip between it normally, and keyboard interaction was snappy and useful.

It’s not quite like having a local Eclipse install, but it’s mighty close. It gives me a feel for what it’s like for folks having big vmware server installations, and other less fortunate folks dealing with the variety of RDP based solutions, and being able to just pop into an existing running machine and work with it directly.

Really though, I should have a faster desktop machine. Alas, that’ll have to wait, it’s pretty low on the budget tree nowadays. And, in case anyone is curious, that is in fact a snapshot of CONGO v2 running in a pure Java environment – screens and back end all running within a Tomcat server. Sure it looks identical to CONGO v1, but that’s by choice. Quick port to Struts + JSP, then enhance and refactor. Progress is being made.

Revisiting old code, and Good decisions made

Over 5 years ago, I began work on an application called CONGO, a registration and badging system, not only in the vein of “There’s gotta be a better way”, but also to help out a friend who was running registration at con in Philadelphia.

The first versions of CONGO were crude, but worked well – with a custom Swing interface, custom terminals and servers, it was an impressive setup. What wasn’t apparent was this was my first foray into writing any decent sized Java application. I made what I thought at the time were good design decisions, and looking back on 30+ events run, and hundreds of thousands of badges printed, I’d say the design was, for what I knew at the time, solid.

But it’s time to change. With everything I’ve done over the last 3 years in Java and enterprise-level applications, I feel I’m ready to rewrite CONGO into a proper Java based webapp. CONGO 1.0 was part Java, part PHP, part templating. CONGO 2.0 will be a pure java application, based on Struts, and will allow features that I could not shoehorn into the old model

I started work on CONGO2 about a week ago, and I have my first screens working properly and chaining together as they should. Part of this process is factoring in the old logic code, and linking it up with the new presentation layer I’m building using JSPs and Struts. This means making calls to 12,000+ lines of Java code that was written as I was learning the language.

But one thing I did consistently – I documented my methods. Every piece of the CONGO appserver has full Javadocs describing how to call the method, and what it returns

Because I’m doing CONGO2 using modern tools (like Eclipse and Tomcat, my GUI is showing me these docs whenever I try to link to my old code, and is reminding me how to use the old libraries. Why is this remarkable? Because other than generating static documentation, I’ve never actually seen my own comments and documentation popping in interactive windows in my IDE. Until now.

It gives me a little thrill each time I see my own docs pop up as helper windows in Eclipse, showing me comments I made half a decade ago on structures and calls, and reminding me how to use the system.

It wasn’t easy to learn Java, it wasn’t easy to learn Swing, it wasn’t easy to learn JSPs, JSTL, and Struts. But now I do know them – some more than others, and I’m enjoying this massive refactoring of one of my proudest creations.

And now, a word from my day job.

I don’t talk about my day job much. For those outside of the Java Geeky circles, it’s pretty dull stuff. But today has been particularly active, so I thought I’d share some of the bits I learned while teaching myself the wonders of Struts. This can best be summed up by the following revelations…

1) When changing a struts.xml file, within an Eclipse WTP environment, being serviced by Tomcat, WTP does not click that the Tomcat server needs to be restarted. The ‘Dynamic’ part of WTP does not take effect, and no matter how many times you save what you’re working on, it won’t go live in the server until you actually restart Tomcat.

2) Despite all the awesome advances in Eclipse in the last few years, there’s twitches that still drive me absolutely gonzo. One is that the ‘smart insert mode’ (which helpfully closes XML tags and closes quotes and parentheses for you) cannot be turned off globally. You can do it on a per-editor basis, but not globally, so I’m always forgetting to turn it off when I open a new editor. Another is XML syntax validator is still quite twitchy, and occasionally will flag incomplete tags or non-well-formed XML when the file is just fine. A close and re-open fixes it, but ugh.

3) Last, but not least – that which almost got me up on the roof with a high powered rifle. I give you a quiz as my example. One of these two struts.xml configurations apparently tickles a bug in Struts2 and will cause an internal server error and stacktrace with a Null Pointer Exception. The other will not. Can you figure out which is which?

<action name="/*">
<interceptor-ref name="mystack" />
<result name="success">/WEB-INF/jsp/{1}.jsp</result>
<result name="login">/WEB-INF/jsp/index.jsp</result>
</action>
<action name="*">
<interceptor-ref name="mystack" />
<result name="success">/WEB-INF/jsp/{1}.jsp</result>
<result name="login">/WEB-INF/jsp/index.jsp</result>
</action>

Just for fun, here’s the actual stack trace:

1.
INFO: Server startup in 954 ms
2.
Jun 17, 2008 7:41:14 PM org.apache.catalina.core.StandardWrapperValve invoke
3.
SEVERE: Servlet.service() for servlet default threw exception
4.
java.lang.NullPointerException
5.
at com.opensymphony.xwork2.config.impl.ActionConfigMatcher.convertActionConfig(ActionConfigMatcher.java:168)
6.
at com.opensymphony.xwork2.config.impl.ActionConfigMatcher.match(ActionConfigMatcher.java:144)
7.
at com.opensymphony.xwork2.config.impl.DefaultConfiguration$RuntimeConfigurationImpl.getActionConfig(DefaultConfiguration.java:316)
8.
at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:169)
9.
at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:41)
10.
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:494)
11.
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
12.
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
13.
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
14.
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
15.
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
16.
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
17.
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
18.
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
19.
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
20.
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
21.
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
22.
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
23.
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
24.
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
25.
at java.lang.Thread.run(Thread.java:619)

How the hell am I supposed to debug that?

I finally did, after a good 2 hours of hair-ripping, gnashing of teeth, and spewing my venom upon the #struts IRC support channel.

Hooray Dell!

Wait, what? Hooray Dell? Dave, have you gone MAD?
Nope! I finally managed to get Dell tech support to acknowledge that the fan in clipper was shot. Last time we went through a service call, the suggested fix was a BIOS upgrade. (Folks may remember the problem was that clipper would overheat doing just basic things, like just sitting in it’s dock, powered on).
As the warm weather came around again, the overheating was getting worse. The laptop couldn’t be used except under extreme circumstances that involved levering up the underside, and placing various fans around it. Hardly optimal.
On Tuesday I settled myself into a long online chat with a Dell technician, and convinced them that yes, indeed, my cooling fan and/or heatsink needed servicing, and could they send someone out please?
The fellow turned up yesterday, and after 2 hours of surgery on my kitchen table, clipper was up and running again.
Since then I’ve used the machine on my lap, in it’s dock, and run heavy duty compiles and testing on it, and I have yet to hear the cooling fan kick up above ‘normal’.
Hooray for field techs! (And I used to be one!)

Decisions, Decisions.

So a rare alignment of the planets has happened, and I have a little bit of cash available. Enough to not only pay off some credit card debt (wootah), but also indulge in a little toybuying. Of course, the eternal question comes up, what should I do with it?

Here’s the current list of candidates, in a very rough order of preference. It is possible to get more than one, but I’d like to keep things down to somewhat reasonable.

  • EeePC or similar small-mobile laptop (Approx $350)
    I’ve been hauling Clipper around as my primary ‘mobile’ machine for about 2 years now. It’s large, heavy, runs RIDICULOUSLY hot, and is saddled with WindowsXP. I don’t need to have a Core2 running just to get my email and chat on IRC, or SSH places. An EeePC will do 95% of what I need to do when out and about, at a fraction of the power and weight.
  • A Nokia N95 ($590?)
    Boy o boy is this a sexy phone. I’m tired of my Treo and it’s abysmal 2′ range on Bluetooth. The N95 is a beautiful platform. I’d need to change providers to AT&T though, and that means getting off my wife’s phone plan. Complex and dangerous!
  • Get Rock Band ($170)
    This is pure unadulterated Fun. Zach loves playing it, I have a Playstation 2 to run it on. I wanna beat some drums! (Probably add another $30 or so for a second guitar)
  • Upgrade my desktop machine(Approx $200)
    I’m realizing my desktop machine, yawl is not the powerhouse I had thought it would be. Sure it says Pentium 4 2.26gig, but the P4 CPU is an absolute dog. I can get a motherboard, ram, and CPU from newegg that will outperform this machine for $150-$200. I even have a chassis to put it in.
  • Decent GPS ($300)
    My travails with my Mobile Crossing GPS are well documented, and that machine has now been tossed into the trunk, awaiting some other project. There are several really good GPS platforms around now, and getting one for the my car (Cat has one built into her Prius) is on the list of “really want”s. The TomTom 910 was on the top of my list last time I did this search, as the platform is very good, and it includes blueooth hands-free usage for my phone. A total bonus. Looking around, it looks like the 910 has really come down in price ($300?).
  • A new monitor ($200?)
    You’d think I had enough monitors. But I sacrificed one of my monitors to the Mame cabinet, which leaves me with a really poor 1024×768 monitor as screen #3. I’d like to get another Dell 19″er.
  • Upgrade the Mame cabinet ($100)
    Rebuilding the controller on the Mame cabinet would be a win – I’d like a trackball and some better joysticks. Not really a big expense – it’s more work than cost. But still on the wishlist.
  • Zoom lens for the Canon (Approx $600)
  • Flash for the Canon (Approx $250)

Decisions, decisions…

The Cellphone Blues.


Ya’ll are probably tired of me yammering about phones, feel free to ‘n’ or ‘^W’ or whatever you do to skip this posting.
As mentioned previously, I’m getting pretty tired of my Treo. It works okay, though it’s really aging. Physically too large for the features it offers, absolutely dreadful Bluetooth support… it’s really time to move on.
The problem is, the offerings are slim. In my previous posting, Matt commented regarding the Nokia N95. All in all, it looks like a fantastic phone. There’s only a few small problems.
First and foremost, no one has it! It was released in europe, and there is a US version, but none of the carriers are carrying it. You can order it from Nokia, but then you have to go through the joy of getting it one of the US networks, and even then it’ll only be T-Mobile or AT&T. There’s some noise about a ‘north american version’ for lower frequency WCDMA stuff, but I’m really lost about the offerings here.
Second, it’s very expensive. The lowest price I’ve seen is in the $595 range, and the highest I’ve seen is over $800. Now, granted, this things is basically a laptop in phone form. Wifi, GPS, acceleromter, 3d accelerated graphics, media player, SD slot, bluetooth, kick butt CPU, etc. The reviewers are showing people happily networking via bluetooth through it onto the data network (something Verizon actively blocks, for totally unknown reasons).
IF I knew I could order an N95, walk into an AT&T store and activate it, and IF I could get a reasonable data plan on it, so I could use it as my primary wireless ‘gateway’ for my laptop(s), and IF there weren’t any major obstacles I’m not seeing (like, oh, there are no plans that can do SMS + Data + voice for something < $200 a month), I'd be seriously ready to do this. But there's too many unknowns, too many variables.
And. I can't find anyone in the Boston area who HAS one, so I can't even get one in my hands to play with it.
Growl!

A KDE Gripe – Spellcheck needs to go.

It’s no secret I’m a huge booster of KDE, and specifically Konqueror, the built-in web browser. It’s fast, powerful, standards compliant, and just plain works.

But please, KDE folks, ferchrissake, fix the damned spell checker.

When editing things in TEXTAREA fields in Konqueror, occasionally you’ll get the red text of a misspelled word (or one that is simply not in the dictionary). That’s fine, no problems. In the Gnome world (and the variants such as those used in Thunderbird, my other most-used app, you can right click on the misspelled word, and it’ll happily give you a list of alternate spellings.

But no, not in KDE. The right click menu has no context for the misspelled word. It simply gives you the option of ‘check spelling’, which pulls up a dialog that spell checks the entire textarea, from beginning to end. Every time.

That means I get prompted for ‘href’ and ‘png’ and ‘img’ and ‘valign’ and all the other fun things that I type into my blog postings, long before I get to the current word.

Dear KDE. Please fix this behaviour. Make a context-sensitive spell checker. Luv, me

One more nail in the coffin of Palm

According to Palm’s website:

JVM download for Palm OS® devices no longer available from Palm

As of January 12, 2008, Palm no longer has rights to distribute the IBM WebSphere Micro Environment Java Virtual Machine (JVM) to our customers. JVM allows users to install and run Java applications and games on Palm OS® devices.

Palm is not able to offer the JVM download or version upgrades. We will continue to support existing installations of JVM on our website.

Opera Mini
We have advised Opera support that the Palm OS JVM is no longer available. There is no alternate Java Virtual Machine that we are aware of for Palm OS. We know of no way to run Opera Mini on Palm OS if you do not already possess the JVM. We regret the inconvenience.

Sigh. I wish the iPhone SDK licensing didn’t suck so much (which is also preventing the release of a JVM for the iPhone). Or that the Android phones had some hope of being more than vaporware in the near future.

My Treo 650 won’t last forever. And I refuse to run Windows on my phone. What’s a geek to do? As noted on the Palm Blog, the Centro seems to be the only thing left in the lineup to move to (of course Verizon doesn’t support it), but it’s still the same ancient platform, with no new features except coming in a nicer package. I want wifi, I want bluetooth that doesn’t suck, I want a web browser that doesn’t suck. I fear I am destined to be disappointed.

Go go gadget Greylisting!

Our spam levels here at Chez Geek are, shall we say, astronomical. About a year ago, we installed and configured SQLGrey, a tool for Postfix that enables Greylisting on inbound mail. Initially, it had a great impact, but somewhere along the lines, our configuration got modified in a way that stopped the greylist from working.

Last week, the spam levels got to be too much, and I checked into the greylisting configuration on our main server. It wasn’t enabled! Somehow our postfix entries had gotten removed (we’re guessing an overzealous edit with an RCS checkout overwriting things).

Anyway, after restarting, I’ve had a few days to see what impact there is. The spam dropoff has been ridiculously dramatic, as my spam reporter shows:

Breakdown by day: (10172 posts, average of 1453.1 posts per day.)
----------------------------------------------------------------------
Apr 20 | Apr 19 | Apr 18 | Apr 17 | Apr 16 | Apr 15 | Apr 14
130  |   143  |   136  |   1393  |   3038  |   2417  |   2915

This is showing only mail that comes into my inbox, and has been tagged as spam by Amavis. This doesn’t show how much mail is being rejected, but it’s pretty obvious since I enabled greylisting (middle of the day on Apr 17th), things have… fallen off to something like 5% of the original level.

Now that’s good stuff.