Pegasus Mail closing shop

I loved Pegasus Mail, back in the day when we where using it at a previous employer. It treated email as text files, because, that what they where. You could edit the file on the server and clean emails up. It was nice and simple. Then we changed to GroupWise, which did group things (useful), but email now was E-Mail, and you couldn’t edit things, there was a huge DB back-end, and it was overkill.

So I’m sorry to hear they are closing their doors.

Why documenting Feels Hard

Last night, I realised I wanted to write a blog post about why I’ve been posting so much recently. There are two reasons, FeedDemon is making it easy for me to read many feeds, and thus I think about stuff that I want to talk about. And I’m documenting what we should do. Aka design.

Now I know the value of documentation is fantastic, and it lets me off load thoughts, gather others input and refine the plan for what is coming. But what I find hard is the writing for three reasons.

  1. I am pretending to do something mentally, so I can review my thoughts, decisions and strategies. Then write all this goodness down. But pretending is not actually doing. So there is a feeling that it’s not real, in which case why do it. I know weird feedback loop.

  2. Then I start writing stuff, and I am dictating to myself what to write. The thinker part says some profound thought, the writer queues this and starts to interact with the typist, to get it written. The latter two are slowish, so the thinker

    1. waits
    2. races ahead (and this can inject false words or letters into the typing queue, and the output becomes confused, family members will recognise this outcome)
    3. goes off on tangents

some times the typist gets stuck and has to consult the speller, then the whole process stalls. Dangerous place to find ones self.

  1. The last reason I dislike writing is I’m not sure: I’m writing the correct thing? The right target audience? Too little information? Too much? Then analyst paralysis over what to write kicks in.

So I read blogs, write blogs, check email, write emails, eat lunch, then in the afternoon, in a fit of guilt make myself do the task at hand. Then I feel pleased progress is been made, but ashamed I didn’t start earlier. Because it’s not really hard, once you got it down others can add value and you feel good that you have advanced the good fight. But that is not how it feels at the start of the process.

So with this all in mind, this morning I read Mark Lawrence’s Why do I hate documenting Application Architectures? and felt doo-ee-oh, so just had to write this. Which was easy because I was just talking to myself.

Japanese Zodiac ~ Snake (hebi)

Garr Reynolds linked to Japanese Zodiac’s, and I’m a Snake

Snake (hebi) --- Born 2001, 1989, 1977, 1965, 1953, 1941, 1929, 1917
People born in the year of the Snake are deep thinkers, speak very little and possess tremendous wisdom. They are fortunate in money matters and will always be able to obtain it. They are determined in what they do and hate to fail.

Italics mine, not sure anybody that knows me would agree strongly with that one. I take the perspective that, imagine how much I would babble if I was not wise. Scary I know!

DOSBox makes me Chuffed (aka helps find the bug)

After getting DOSBox to compile and then playing around with the memory reading functions to track the changes of the RAM location I wanted, I had the instruction pointer trace of the CoAB running.

The weird thing was the trail just stopped at the last good instruction location. So I dug around in the assembly of while loop, and found that I had flipped the while loop logic. Is should have been

while ( A == false **&&** B == false )
{...}

but was

while ( A == false **||** B == false )
{...}

Now the game moves on to the next bit of non-decoded assembly and stops. Yeah!

Now that I am on the other side of the simple decoding mistake, I’m feeling really pleased or chuffed as I was saying last night. But besides finding the silly mistake, I have:

  • built up an assortment of tools, to better diagnose what the game is doing
  • named quite a few global variables
  • removed quite a few unused global variables (left overs from low level functions that no longer exist)
  • improved the graphics drawing in places.

I think DOSBox is going to be very handy in completing this project. I also dream of ways of using it to decode other games that interest me like Ancient Art of War

Building DOSBox - Win32 Visual Studio 2005

The base instruction on here.

  1. Get the DOSBox source: Page / File
  2. Get the SDL win32 development libraries: Page / File
  3. Get the SDL_net win32 development libraries: Page / File
  4. Expand the DOSBox source and open dev\DosBox*visualc_net\dosbox.sln*
  5. Add dev*SDL-1.2.11\include* and dev*SDL_net-1.2.6\include* to the include paths
  6. Add dev*DXSDK\Include* to the include paths
  7. Turn off screen capture, set C_SSHOT 0 in config.h so we don’t need libpng
  8. Turn off internal debugger, set C_DEBUG 0 in config.h, so we don’t need curses support
  9. Remove zlib.lib, libpng.lib and curses.lib from the Linker Dependencies

TA-DA. Ok, so you have no debugging support, thus the reason for building you our version is reduced. But I added the following code, and got the information I was after.

In _CPU_Core_Normal_Run (src\cpu\core_normal.cpp) before the DEBUG_HeavyIsBreakpoint call (outside of the #if C_DEBUG block).

Bit16u ecl_offset = LoadMw( BaseDS + 0x4FCD);  
Bit32u dsbase = LoadMd(BaseDS );  
if( dsbase == 0x43240000 )  
{  
  if( ecl_offset != offset_last )  
  {  
    printf("ECL_offset: 0x%04x\r\n",ecl_offset);  
    offset_last = ecl_offset;  
  }  
}

The dsbase check was added because, for a span of time I was getting different results every second time around the loop, and I suspect that the instructions where not from my game code space, so I added a check that the data segment was my games before checking for changes. Worked a treat.

RFC 2119 Behavior

Scott Bellware has some post on Behavior-Driven Development (BDD) syntax for NUnit, and a post comparing the syntax to RFC 2119.

Having implemented a few RFC’s that use RFC 2119 syntax, I found this comparison very on the button. As I developed routing protocol’s the Must‘s and _Should’_s related to how you must respond or act when things happen. Very much state machine type stuff. When things said must, well that’s what you did. The should‘s were always related to internal state machine processes. A lot of them where your peer may tell you this, or may not (thus a should) but, you have to deal with both possibilities.

The flip side for BDD where should is used instead of an Assert makes a lot of sense. My code was always littered with Asserts of the should nature. When you are writing the code, there are question in my head, so it’s simple to test and find out if I’m wrong. I’d also use Assert‘s to Assumed‘s. Then I’ll know it all good.

The problem with Asserts in a production system where any Assert failing takes the whole system down (as it did for ours), meant that any failing Asserts in the wild made the whole product look “bad” so Assert’s ended up large if statements, with recovery code embedded there. This was an embedded C system, so no fancy try/catch block for us.

But all the history aside, for testing purposes, should feels like a better world than Assert. It also removes the false is logic, were false is bad while true is good.

Gosh, damn, I have to say Extension Methods so look hot chocolate good. I’m sure they have some down side, maybe just like hot chocolate, too many and you feel sick?

FeedDemon - It’s a keeper

Well after using FeedDemon at home over the weekend, and having every thing stay in sync, all auto-magic like, I’m happy to pay for this application.

I had one odd start-up issue, where it complained about bad XML or the likes, why I never captured the error I’m not sure. I just assumed it would talk home. But every thing was fine on restart.

The other issue (and I understand why it happens) is when I add a new feed at one location, the other location only gets entries that are newer since the subscription. Where-as the original location has the current backlog (X number of items in the feed.xml), you would think that NewsGator could list the same “back catalogue”, but alias not. So I have some blogs that work has unread items, and others that home has unread. Shrug, not a deal breaker.

Retro Games Remakes/Dissections

I have gotten to the point in my Curse of the Azure Bonds remake where I now need to single step through the actual original to see what it’s virtual machine is doing.

So I went off and found DOSBox, and it has a debugger built in. It also has break point on memory IO, so I plan to tweak it to log IO for the virtual machine instruction pointer. So I’m quite excited about this. I haven’t completed re-compiling it. But I’ll post about it once I have, as the instructions I found on the DOSBox wiki where not complete.

But my point was I found on the DOSBox site reference to LBA (Little Big Adventure) and a remake LBAWin, by one of the original programmers. Quite excited about that, as I loved that game, and it will be cool to play. I tried download the game, but I was getting error’s on user registration page. So that will have to wait…

Found on the LBAWin site a link to yazOr‘s reimplementation: The Lba Project. yazOr has blogged about some very cool dissection of other games. Off his page I found a link to gawd’s museum of dissected games, which has a write up about pulling Dangerous Dave 2 graphics apart. Very cool. I’m looking forward to his Alleycat dissection, as I played that game a huge amount of our original PC.

FeedDemon 2.1

I decided to try FeedDemon 2.1 today. After getting annoyed with RSS Bandit over I can’t remember what.

Initial thoughts. I love it. It feels light and slick. I’m am not using it in synchronized mode yet, as my NewsGator account appears to have expired. shrug. But I do plan to use it this way.

I have been reading Nick’s blog for a while, and I like the sound of features that he is developing. I’ve been thinking for a while about features that I’d want to add to RSS bandit, and I realised today that the latest are based on what Nick is doing with FeedDemon.

Other features are about how the RSS Bandit code is structured. How it deals with page rendering. How entries are rendered. Offline data caching. and other things. So FeedDemon solves my bigger of these issues. The price is a acceptable, and now I have a credit card, I’m tempted to just buy it.

I’m not bagging the RSS Bandit team. I am really thankful for their effort. But they have day jobs, and I can’t expect anything from them. Yet the price gap to FeedDemon is not really prohibitive, and yet in a small slice kind of way I’ll be helping Nick keep things progressing. Win-win.

I do have some questions, and I’ll update once I have answers:

  1. If I buy a personal licence, can I can run it at both home and work? If I need two copies (or more) this would dampen my desire, as my price point is less than $29.95 x 2 x USD->NZD exchange rate.
    Yes, it works as I want. See here
  2. Do I need the NewsGator premium account to sync with multiple clients? Thus beyond the first year free would I have to pay an on going cost for this feature?
    Yes to both, so the current yearly rate would be $19.95USD. See here again. But then looking at my “Account Information” page it would appear the Synchronization is in the Free account….

Ok, so I answered my questions before posting. Just noticed the Subscriptions tree keep the unread count visible as the widget is made skinnier. That was so annoying in RSS Bandit, prior to the component change. The new component auto-horizontal scrolls, which is even more annoying because you then lose sight of the tree structure.

Gladwell’s Stereotyping problem.

Malcolm Gladwell has been having a ongoing blog meme about the Ayres study discussed in Blink. A study in which it was tested whether race effected the price people of the same age and similar story ( job, house location, car, cloths) were offered by car salesmen.

The debated is raging over the “racism”, or whether it is an initial retail decision by the salesmen. There are a lot of points that can be made. In Malcolm’s last post on the subject, he points that people (responders to his post, and the salesmen) seem to discard the other factors, and are focusing on race, therefore there is some form of racial-prejudice.

I think the first comment by Byrne Hobart sums it up well.

This post is missing any evidence that the car salesmen discarded the data. The only variable in the experiment was race, and the experiment demonstrates that race has an effect – but you’d need to do another experiment (keep race constant and vary age, for example) before you can argue that the car salesmen were only focusing on race.

I was thinking about this topic on the way to work. My take on the study was, the price difference was the opening price. From this you could take the that black males are being getting a bad deal. The counter arguments are - well is that not the car salesman job, to get the best deal, and if the strategy doesn’t work, then surly the market would punish those dealers. Malcolm make this point is his book, because 99% dealers said treated everybody the same. Thus focusing on the first two point below*. But did the say what Malcolm wanted to hear. This is the base of some of the debate. Without studies to provide none biased sales give better performance, we can’t know if it’s other factors that made the 99% sale guys better.

As Malcolm, notes cars sales happening infrequently (per person), so the information imbalance is large. So the more interesting question is why to car salesmen get away with price differences. There are many possibilities, and I believe it primarily comes down to information imbalance. When I buy stuff, I’m paranoid I’m paying more than I could/should, but there is also a balance of how much effort are you willing to spend to address the imbalance. Also how much time do you have to make the purchase, thus can play the “not interested” game, to lower the price.

Myself I know I hate any price where it is not pre-stated. I prefer to look at a price, and compare it to my want/desire and do all my humming and haring in private, then when I decide I wait the item, to just buy it. Thus with things where you haggle, or negotiate like the house we brought, you have to expose your interest, and it becomes a game where your playing against a professional (the trader or the sale agent) and the information imbalance always makes me feel I way have come away worse than possible. It becomes a nagging thought, so I just avoid negation.

Conversely, I’m not good at poker, because I know I’m terrible at masking my feelings/thoughts. But I do see why I should have too. I don’t want to live in a world where that is required. Therefore am I willing to pay the “normal” price and be content, sure am.

So back to back to the Malcolm debate, could it be possible the different ethnic groups have different valuations on time, money, bartering. Thus sales people can stereotype and get away with it, they are the information professional. *There job is to make you feel reassured about the sale, make you feel special, and close the deal. The first two I think are more important than the third, as the should lead to more of the third via word of mouth.

The major thought coming away from this and the current book I’m reading (The Wisdom of Crowds) is that there are lots of interesting things happening in the world, and I’m not sure I’m in the correct career, as these other area’s seem just fascinating. But then there is a lot of fascinating things happening in software, and I just love making the computer do as I want, and watching the complexity unfold.