New Dev Toy: HP iPAQ hw6515

Our new HP iPAQ hw6515 arrived today. It’s a great little device.

Very light in the hand vs. the JasJar.

Keyboard that feels usable compared to the iMates PDA2Ks, and the device is not going to break due to sliding the screen to access the keyboard.

Has built-in GPS.

Screen is smaller than JasJar, not even sure of it’s resolution, but it looks nice.

Here a couple of pictures of it as the backup battery charges (the main battery was full already) taken from the JasJar.

The funniest thing I’ve noticed recently with new devices is that you get warnings when the back-up battery gets to level like 25% or 50% saying “The battery needs replacing..” even though it is currently charging. The software need to check what direction the battery level is going. Small issue I know but funny.

HP iPAQ hw6515 from front
HP iPAQ hw6515 from front
HP iPAQ hw6515 from side
HP iPAQ hw6515 from side

MD5 Brute Force Cracking

Back in 2000 I spent a few months working on a brute force MD5 hash cracker. This was largely inspired by Distributed.Net and MD5 been how password where stored on our products at work.

After a few months I’d produced some code that had moved as much intrinsic things out of the main loop as possible.

I year later I found MDCrack, and spent some time working with Gregory to use the code. From that point on I have got the odd question asking about the code (at my old email simeon.pilgrim at alliedtelesyn.co.nz). With Google Analytics I can see it’s one of the major reasons my old blog it still getting hits.

I have just uploaded my old project onto my homepage. I updated it from a VS6.0 to VS2005 project.

At some point I intend to document it, but for now my old source available.

Kottke and the weeds

Jason Kottke blogged about working in places where you can hide. I agree very much about coasting employees sucking the life out of you. I’ll been there when management have tried to do some weeding, and watched everybody overreact (me included). I agree these things suck the life out of you.

But worse than people over estimating projects, is them overestimating, then “delivering on time” and getting praised for it. While others (not me because I was too jaded by this point) slogging there guts to get as close as possible to unachievable deadlines.

I really like my new company, small team, open plan, like a kitchen really.

Exploding the Myths

I finished this book last week, but have been too caught up in reading my next book too rave about this one.

I really liked the book. I enjoyed his perspective on trading. His arguments against the common expressions/maxims of the trading world. He is a TA trader and puts faith in charting.

I had not read much on charting before this, so found it a interesting angle. I really enjoyed the details of the Darvas Box Trading method, and look forward to when Greig’s trading software supports this type of filtering.

This book made me want to write my own trading software, just to see how well it works.

Exploding the Myths reviewed on Scoop

Online Bank File Formats

Michaela and I have been keeping a budget for years. Each month we plan our major costs, and allow some money for spare things. Most months we keep the book up to date. Some times we don’t.

Been the geek I am I want to-do two things. Make it easier by using my computer and tracking trends, also using the computer. The first making the second easier.

I’m in the middle on reading “The inmates are running the asylum”, so I’m fully aware the notebook and Excel would do me better 99% of the time, just from usability, and corner cases handling point of view.

Anyway, that aside tonight I started noting what functionality I want from my banking (cashbook) application. Then I reviewed the options for input files.

Westpac don’t have a direct API to call (that I could find) so I looked into the downloadable formats. Ignoring date ordering these consist of:

  • CSV - This seems the best, with the data been quote encapsulated when data is present.

  • MYOB (Version 3.0.246 or later) - This was CSV as well, but not quote encapsulated, which meant it would require special handling for the case with extra commas.

  • QIF for Quicken - This is a multi-line version of the CSV but missed the transaction type, so the extra values that are transaction specific would be harder to parse.

  • QIF for MS Money - This is the same as above accept the year is 4 digit instead of 2 digit.

  • DeskBank Statement Transactions - This is fixed position output with repeated date fields, and numeric for transaction details, thus would need quite some effort to gain the same level of details as the CSV, but might offer more information also.

  • DeskBank Balances & Transactions - This did not work on a yearly or 3 month data request so I flagged it.

So I think the picture Westpac are try to give is CVS is best, and I tend to agree.

I’m going to use a Chain Of Responsibility Pattern that I read about the other day, to manage the different transaction types, and parse the extra data into an xml blob. Not that COR is new as this was how ANVL implemented its testing stack back before ‘98 when I first started using it. But it’s nice to have a fancy name to place on it. Makes you feel all Pattern elite.

Anyway while I had the last years transactions from our checking account (daily cash account), I used some uber Excel =SUMIF(C:C,$Cx,B:B) and =COUNTIF(C:C,$Cx) then sorted by biggest sum. After ignoring rent and moving money between accounts, the weekly shop and Pak’n’Save was #3 @ ~$5,000 for a year, with a close follower been the local New World @ ~$1,000. Wow, I understand why they like repeat customers. The later will mostly be top-up/junk purchases, and that’s some cream.

Looking at the math the totals are less than the original budgeted amounts, but I’ve just never stopped to think about the yearly totals. It’s interesting looking at the big picture some times. Depressing, but interesting.

Ongoing C# learning

Over the last few days I been learning some interesting little .Net tip-bits.

The first is the VB.Net can do Indexer Parameters or named Indexers, where C# cannot. The indexer guideline suggests to not implement multiple indexers or some (C#) language will not be able to access them. C++ can even use them. While you can achieve the same effect via sub-classes or a generic list accessor, but they are no-where as succinct.

The primary place I have wanted to use them is my game conversion. It has data structures for the player icons that have duel data arrays for the original, and the overlaid versions. Been able to-do

icon1.data1[i] += icon2.data1[i];
icon1.data2[i] += icon2.data2[i];

without exposing the array is so much nicer. The realty is that most the functions accessing this data will become member functions once I refactor the project. So it’s not really a required feature.

The next interesting reminder was type conversion operators. This was something I have used, but re-learning is always nice. Fritz has a good post talking about using them to improve the use of constructors.

The third was found in the previous post of Fritz about the ?? Operator. This was a little gem that I plan to use in the future. MSDN URL

Pushing Data to Mobile devices.

On the .NetUserGroup Compact Framework mailing list, Derek Ekins asked about syncing work. At work we currently use a pull method, but are moving to a background thread pull method.

Nic Wise pointed out a MSDN paper I’d read a while back, about differed response HTTP messages as a push mechanism. This seems quite a clever method.

We also use a really great piece of software MobiControl by Soti Inc, that sends hello’s to the sever so the server can do true push, but this requires public IP addresses.

Smart Client - Composite UI Application Block

From the news here, I downloaded the December release of the Composite UI Application Block, and I’m really enjoying seeing it come together. Craig and I watched ages ago the June webcast about CAB, and were both impressed as it was the solution to the problem we had been discussing for a few weeks.

I compiled and ran half the quick starts, then did the dishes, and had a good think about what I’d just seen. With the dishes done and questions in mind I jumped back into it. What do you know, the EventBroker example answered my major question.

So the software we have at work doesn’t need to use the CAB, but there’s talk of “Lite” versions or optional extensions, and it all makes for bolt-on / plug-in type system (the shell) with inter component communication (events via the broker).

One of the questions still in my mind is mixing the CAB with Click-Once. I read Peter’s article on “Using the CAB Bank Teller Quick Start With Partial Trust ClickOnce Deployments” which talks about statically “bonding” the modules to the main shell application.

What I’m wondering is can you use Click-once for the Shell and have it load via the click-once mechanism the required sub-modules. With support for them been managed via the install/uninstall process. This way you can update a single module and have the app pull it down and use that, but not hard code the app to know where to look, just know where it “comes” from.

So this is an area I’m keen to learn more about. So will hopefully at sound point report back about the if’s and how’s of this question.