Thursday, July 28, 2005

Interesting ImageGear problem

Not that I know anything about OCR, but you wouldn't really think that machine-printed characters in a TIFF file would be all that difficult to recognize. And for the most part, the Accusoft toolkit does a good job, but it has some problems with characters in a box...if the left size of the box is close to the first number, and the number happens to be -9, it will invariably drop the minus sign. After some experimentation, I found it becomes more accurate if you tell it that the box is in a zone that only numbers are in.

But that led to a fascinating issue when I attempted to run a release build, where the minus sign was still being dropped. My application is written in C++, and there is a ZONE structure exposed to set up the area where numbers are. Eventually, after I created the ZONE on the stack, I added code to initialize the struct in the same way that Visual Studio will initialize it in debug mode:

memset(&zone, 0xcc, sizeof(zone));

And now it works like a charm in release.

I suspected that a problem like this was going to come up. One of the first things I did as I was trying to get the app to work was to set the ZONE to all zeroes before I passed it to the toolkit, and this caused it to fail. I opened a ticket with Accusoft, partly since this is a bug that they should know about, but mostly just out of curiosity to find out what is working when its byte is initialized to 0xCC :)

Technorati tags:

Friday, July 22, 2005

OnTime v6 and Source Code Control - Part 1

Looks like my new company is also very close to buying OnTime for bug tracking. I wasn't sold on it after the quick demo - it certainly seems to do everything a bug tracker should do, of course. But when I checked out the web site and found that they have their own employee blog site...that's a deal maker as far as I'm concerned!

Quality Programming - Bug Analysis

Quality Programming - Bug Analysis

Good discussion of how to prevent new bugs, based on the reporting of old ones.

Tuesday, July 19, 2005

Learning to use ImageGear

My first task at my new job is learning to use the ImageGear imaging toolkit from Accusoft. I skimmed through the documentation and it looks like pretty standard stuff - I've used both DirectX and LeadTools in the past so I'm fairly familiar with imaging libraries.

But I have to say the initial user experience with ImageGear is *awful*! They have a "web install" that you're supposed to use to download an evaluation copy, but the server transfers data at around 35K/Sec, and if you don't change any of the defaults you get 450M worth of stuff. It's not suspendable or anything, and every so often it stops dead to tell you that the last file failed.

As an alternative they have a downloadable "CD" install, which is the same 450M but you download it all to the desktop first. At 35K/Sec. So be prepared to wait about 5 hours from the start of the download to the end. That's where I am now. If nothing messes up I should be just about ready to try running the install.

Monday, July 18, 2005

Opening tar files in Windows XP SP2

I wonder what happened here? If you download a tar file using Windows XP SP2 and Internet Explorer, it will change the doc type to tar.tar. If you try to open it, you get a message saying "Error reading header after processing 0 entries." But the zip itself isn't corrupt, apparently. If you change the file extension to gz it will open just fine.

Friday, July 15, 2005

10 Easy Ways to Keep Me from Visiting Your Church Because I Visited Your Website

Tony Morgan has given us a great set of instructions on how not to. I have an eerie feeling he was visiting our church site when he wrote them. Our church site really needs to be reworked anyway; I wrote it using Microsoft Frontpage, which is fine, but I tried to make the site using Microsoft Themes, and that seems to have made it extremely complicated to update. My plan is to rework it, a page at a time, using only CSS and XHTML. Maybe I can get it finished before anyone tries to review it.

Soccer camp II

Soccer camp is over. I thought Jesse had terrific ball-handling skills, but his insistence on doing his own thing really stopped him from accomplishing much. Everyone always says, "Oh, don't worry, he's too young to worry about his skills, he just needs to have fun." The unfortunate bit is, he refuses to have fun! There's nothing that makes him happier than kicking a ball around with mom or dad, but get him into a group setting and he freezes up. Note that this isn't specific to soccer groups, either, so that worries me a bit. If I'd thought about goals for the camp before it started, I would have listed them like this:

  1. Have fun
  2. Interact with the other kids
  3. Do what the teacher/coach says
  4. Learn soccer rules
  5. Learn kicking skills

#4 and #5 he did pretty well. The first three were a bust. The coach would tell everyone to dribble the ball very slowly in the circle, for example. The other 20 kids would do it. Jesse would sit on his ball and watch them. Then he would run over to us for a drink.

So I don't think we got what we wanted out of it. Oh well, he'll start in a preschool in the fall, maybe that will get him to interact more.

Technorati tag:

Thursday, July 14, 2005

The Goblet Of Fire

Yeah, well, I have a firm policy of only reviewing books that have been out for years. Plus, I was just curious to fiddle around with the Technorati tagging system. Maybe I'm finally starting to Get Technorati.

So anyway, Goblet of Fire. In preparation for the Half-Blood Prince, I've gone back and re-read the whole Potter series, which is not getting any worse with age, I'm happy to say. I'm partway through Order of the Phoenix now, and I have to say it doesn't seem even a little bit familiar, so I wonder if I've even read it. The same thing happened when the fourth one came out, and I only realized I hadn't read the third one when I went back to reread all three of them. I suppose by the time the seventh, and theoretically, final book comes out I'll have read the first one six times.

So anyway, Goblet of Fire. This isn't a real review, just a thought that I had as I was reading it about the villainous newspaper reporter, Rita Skeeter, which has to be representative of J.K. Rowlings real experiences with reporters, and like any good author she's put her own experiences into the book. Still, I think Harry's anger at the reporter putting her own spin on the stories is a little overdone - it happens constantly and for the most part, any publicity is good publicity. The exceptions, of course, are the publicity that I'm sure she's gotten tons of - Harry Potter is anti-Christian. (Note the nofollow tag I've added to that last link. I am a Christian, although a bad one, and I'm obviously a big Potter fan.) I'm sure each time a story or video like this comes out, there's a decent chance of a mailbomb or some other circumstance that will actually cause harm - not like the howlers Hermione received, but something actually harmful. But for the most part, you just have to have a thick skin about any publicity at all - and of course, any real issues you have with the reporting can be discussed on your blog!

Filed under: , , .

Monday, July 11, 2005

Soccer camp

Took the little one to soccer camp today. He'll be doing an hour a day for the whole week. They've apparently signed some British players? coaches? college students with nothing better to do? to run the camps. Today, they played Cowboys and Indians, Ghost, and a drill where they kicked the ball until the leader shouted the name of a body part, then they put the body part on the ball. The kids enjoyed it for the most part - one kid was scared of the Ghost, and a few kids here and there weren't really participating. Jesse would be in this category. He started out trying some things, but he will insist on picking up the ball, and he's generally more interested in doing his own thing than going along with the group. He's a chip off the old block in that respect to be sure - he's probably more like me than is good for him. He wasn't too excited about going back tomorrow, but we paid cash and he's going...we did bribe him with an ice cream, and took him to a soccer field afterwards to try to digest everything. I hope he participates more tomorrow.

Saturday, July 09, 2005

Since I'm changing jobs, I'm taking last week and next off. We went to Chicago for four days last week; very disappointed in Amtrak. We thought it would be fun to take a train from Indianapolis to Chicago, so we went to the Amtrak website and bought tickets online. When we got to the station we presented our tickets and the lady said, "oh, that's the bus. You board over there." But really taking the bus wasn't bad; it wasn't terribly crowded on the way up so we got to walk around and stuff. Not nearly as nice as a train car would have been though. We stayed at the Essex Inn, which has some pretty cheap rooms. I can't believe hotels in this day and age don't all have wireless Internet though, so I lugged my laptop there and back for not much reason. So what did we do?

  • Field Museum - pretty good, but their regular exhibits are starting to fall apart - they must be putting all their money into special exhibits.
  • Museum of Science and Industry - turning into a trip highlight and the new submarine exhibit is really nice. Cathy the Nurse Practitioner really enjoyed the new "Bodies" exhibit, which consists of actual cadavers on display with some kind of plastic gelled into them to make them pretty. Pretty grotesque, I thought. One of the displays had on a white cowboy hat and a notation - "Wearing a hat to show the very slight difference between life and death". I think I would have rewritten it as, "Wearing a hat because, well, we could."
  • Shedd Aquarium - Cathy would probably call it a highlight but it's never a total thrill for me. Some of the big fish and the huge anaconda were pretty cool. The dolphins did some nice jumps in their show.
  • Children's museum - it's on the Navy Pier, which we discovered you can't walk to from the south side of the Chicago river. We had to walk nearly a mile out of our way to find it. The exhibits are fairly nice, but we wanted the little one to have lots of large-muscle activities in order to tire him out for some grownup museums. The exhibits were more of the sit-down-and-play-quietly type.
  • Architectural walking tour - very well done and we will take many more. At one point the guide commented on the evil minorities who sued the city over Millenium Park, and the wonderful industrial leaders who stepped up with replacement money. I refrained from asking if she was an actual schill.
  • Adler Planetarium - not bad. I always think it's not a real planetarium unless they have a live guide and a little globe that makes glowing dots on the ceiling, which apparently shows my age. We went to the "Stars of the Pharoahs" Omnimax show, which was pretty good I guess, although I never go to Omnimax shows.

So our feet were hurting by the end of it. We came back on the bus, and this time it was absolutely full and not much fun, but we got the requisite T-shirts and some other souveneirs. Chicago is great fun. I can't wait for the little one to be old enough to do some nightlife.

Saturday, July 02, 2005

Change is good

After 4 1/2 years, it's time for me to leave Interactive Intelligence. It's still a great company to work for, but I'm ready to move on and try some new things. In a couple of weeks, I'll start work at Pro-Solv, a medical imaging and reporting software company. I'll be looking forward to it!

Wednesday, June 29, 2005

Book review: Hat Full Of Sky, Terry Pratchett

Last year at this time I mentioned to Mr. Pratchett that I was ready for another of his youth books. It took him until now to deliver; at least the paperback version, which I paid my $7 for. (BTW, my book trading site is gone now. I don't think they managed to build a community. Social software post another day!) The further adventures of Tiffany Aching are available, and it's quite a good book. Tiffany, now 11, goes off her home land to be apprenticed to a witch, but unbeknownst to her she is being tracked by a mysterious being who wants to eat her soul!

Boy, that summary makes it sound kind of iffy, doesn't it? It really isn't. The Nac Mac Feegle are back and as feisty as ever, although I think their dialect is significantly easier to understand than in the earlier books. I'm guessing you can't make major characters out of folks no one can understand. Tiffany's interactions with the other apprentices are nicely done, and Granny Weatherwax is fascinating as the other characters now talk about her the way she once spoke of Black Aliss Demurrage. Tiffany's progress as a witch is brought forth nicely, and Rob Anybody really comes across as a personality rather than a caricature like most of the Mac Feegle.

The ending is a bit nicey-nice, which I suppose is appropriate for a book theoretically targeted at younger readers. To me it came across a bit like when one of the great villains of all time, Darth Vader, decided he was really a nice guy after all and was redeemed in a single swoop. C'mon now, bad folks are a lot more fun when they're bad, now aren't they? The Mac Feegle queen was a bit wishy-washy too, and I didn't really buy into her mood swings. Finally, the climax of the book takes place at something called the Witch Trials, which appears to be sort of a renaissance festival for witches. Odd, but again maybe appropriate for the younger reader.

And for all of that, it's classic Pratchett and you can't complain. Most comedy writers, take Piers Anthony or Douglas Adams, get steadily sillier as they reach the later books in a series and have to try to wring one more gag out of the same scenario. But the great ones, like Pratchett and Wodehouse, just keep on kicking out one or two new terrific stories every year. This is one of those. Read it.

Wednesday, June 22, 2005

Living in the blurbs

Doug Jonstone comments on blurbs. (link from the idiosyncratic mind.) I'm intrigued by the correspondences between old-fashioned marketing and blurbs. As Doug says,

when such effusive hyperbole declares everything "brilliant", "superb" and "amazing" it all ceases to mean anything

which is more or less the problem with marketing - that is, the lack of credibility of the source. Are you going to read a book because it says "A real tour de force!" on the back, or are you going to read it because your buddy says it's pretty good? I would be a lot more likely to read a book if it was making the rounds in the blogosphere than for any other reason. So I guess book publishers are another on the list of people who need to learn to make blogs work for them. I know there are a few publisher-bloggers - wonder how effectively they use them to push books?

JetBrains onBoard Online Magazine :: Language Oriented Programming: The Next Programming Paradigm

The Next Programming Paradigm? I suppose it could be. Personally I'm not even completely comfortable with Test Driven Development yet.

Wednesday, June 15, 2005

VBS week

Getting Vacation Bible School organized has been taking all my time this week - when I haven't been doing that I've been stress-reading crime novels. So I have about six books on my list of reviews to write, but I doubt I'll do anything before next Sunday, the closing ceremony. I've been getting up at 5 in order to get to Indianapolis, put in a full day's work, and drive back again by 5:15 so I can pick up kids who need rides. So I'm pretty beat :) After VBS is done I'm just not going to know what to do with all my free time!

Saturday, June 11, 2005

So you wanna be a programmer?

Hazygrin links to Joel saying he agrees that you should start learning programming at a level as close to the metal as possible, i.e., C. I disagree, and I suspect that generally the people who are in this camp are the people who learned C first. (I'm not one of those; I learned Pascal before C, although a one-credit course in college in C might have been the most valuable class I ever took, practically speaking.)

Joel's alternate suggestion is a straw man, of course. No, obviously learning HTML or copy-and-pasting Javascripts is not quite the ideal learning experience. But I see absolutely nothing holy about C as being just exactly the right level to learn at, and I firmly disagree that learning the technical details about why strings are hard to manage is important for a beginner. That may be the single reason that more people aren't interested in programming, which is a shame considering the myriad of good string implementations that are out there.

But if you must get fairly close to the machine, why not start with a managed language? Being able to move from Java or C# to byte code is going to get you a long way to understanding how your source code is translated to something the machine understands, without having to really bury yourself under a load of machine code manuals.

I would replace this recommendation with Stroustrup's The C++ Programming Language, 3rd edition, which replaces all the stuff about byte copying with good object-oriented design. Going all the way back to C is, to my mind, no more necessary to a programmer starting out today than a recipe for bread has to start with "Grind down enough wheat to produce three cups of flour..."

Sunday, June 05, 2005

Book review: A Great Deliverance, Elizabeth George

I bought this first-of-the-series based on a newspaper review of the last. I'm a big fan of Elizabeth Peters' Amelia Peabody novels, and from the article I thought that it might be a similar sort of book. I was pretty much, well, wrong. About the only similarity is that Amelia and Thomas Lynley are well-off and English. Nevertheless, a good read. Lynley and sidekick Barbara Havers, members of Scotland Yard, have been sent off to York to investigate a teenager found near her father's decapitated body. As they investigate the possibility that she was not the murderer, they both have to come to terms with their own pasts, which they see reflected among the many dysfunctional characters that wander across the stage: the obligatory horrible American tourists, the drunken artist in love with the older, lonely spinster, the family man with the nympho wife who use their fights as an excuse for making up. But the murdered man's family wins the prize for "most dysfunctional", as they seem to be in the habit of simply wandering off and never being heard from again. As Lynley and Havers put the pieces together, they come to a gruesome conclusion that is not at all suitable for the genteel reader of Elizabeth Peters!

Luckily, my stomach is a little stronger than that. But I don't think I'll put this one on my wife's reading list.

Thursday, June 02, 2005

"It seems more complicated now"

A lot of programmers still believe in procedural programming even if they use an object-oriented language like C++ or C#. When you eliminate duplicate code, you can do it quite often by taking a big long procedure and replacing it with some objects. Consider this code:

for (i = 0; i<things.count; ++i)
Initialize( thing[i] );

for (i = 0; i<things.count; ++i)
Continue( thing[i] );

for (i = 0; i<things.count; ++i)
Finish( thing[i] );

There is clearly duplicate code here. Three times we run a loop over things. You can't just refactor all three calls into one loop, since the processing of the latter loops might depend on the first loop being finished.

So how do we remove the duplication? Let's create an abstract object, AThingProcessor, and use it to do all of the looping:

class AThingProcessor
void Run()
for (i = 0; i<things.count; ++i)
ProcessThing( thing[i] );

abstract void ProcessThing( thing t );

Now we can replace each loop with an instance of a class, for example:

class Initializor : AThingProcessor
virtual void ProcessThing( thing t )

And now the original code can be replaced with:

new Initializor().Run();
new Continuor().Run();
new Finisher().Run();

So what is the result? Our original code is now much more object-oriented and flexible. But without knowing the definitions of Initializor, Continuor, and Finisher, you don't know exactly what is happening here. The result is, some programmers will look at this code and say "It seems more complicated now". But it really isn't. It's just more object-oriented.


Hey, look what I found! Had no idea this group existed. Wonder if any of them blog?