Skip to main content

Playing with Dictation

So there I was showing David the new Windows 7 beta when we decided to play with the dictation features of Windows (speech-to-text). Naturally during the tutorial we wouldn't say exactly what was requested we would either leave out syllables or leave out whole words directly. We noticed that the tutorial would actually continue as long as you said about 50% of the words but what we didn't know until the end when it told us was it was using that initial tutorial to start training itself. Even more entertaining was their disclaimer and opt-in feature to scan my documents and emails to pick up on words and phrases that were commonly used on my computer. While it seemed like a good idea at the time, we soon found out it was a very bad idea to let it read all of that.

Here are a few sentences produced by speaking (we don't remember what we originally said unfortunately):

None of the league agreed on a dynamic built-in David built-in booya and financing built-in the event is that you cross the border town of Larry G5 to one Friday in your beta kit that the Olympic club at the very thing the government meddling in the economy that reenactment of the right file a will he do for a reenactment Cameron raveling and the only and I you are still in the lending law violate the no while they by know about one.

And here is a slightly later one:

I think the people will be downloaded it will really actually help them.

And one more:

Dictating is a bathtub edition and that the man down at the event that palin group that led by David name the other man on the red onion home directory and the drug and weapon that the file recently moved and the government the real leaders believe you're a aggressive e-mail at it but dictating is a pain the ass.

You can tell that the dictating engine had scanned my emails and documents by noticing the references to the government, the economy and Sarah Palin (don't worry, it's her Wikipedia article). I must say, it was quite an entertaining experience and I will definitely need to reset and retrain the engine if I'm ever going to use it properly.

Inspired by the YouTube video: Microsoft Vista Speech Recognition Tested - Perl Scripting.

Bonus YouTube video: An Engineer's Guide to Cats.

Uh oh, not again...

So I figured I better explain myself on this one.

After a brief hiatus of over a year (yeah... "brief") I have finally decided to start blogging again. Rather than try and write my own blogging software I figured I'd fall back on an old friend, dasBlog. If any of you actually followed my blog before you might notice that I've followed this chain: dasBlog > Community Server by Telligent > Tessa (my custom one) > dasBlog; talk about going full circle!

dasBlog has come quite a long way since I've last used it a few years ago. Setup was a breeze, they now have IIS7 integrated pipeline support (which means IIS7 has more control over the flow of the program and generally just seems cooler!) and they finally support .Net 2.0! While I know I could've used any online blogging service such as Google's Blogger (actually there was a one post stint on blogger), or WordPress I've always liked the idea of running my own site locally. I suppose I could've done it like Jared and had Blogger upload it to me via FTP but that still wasn't good enough. I wanted something that will work immediately, but allow me to edit it, extend it, and generally change it in the future without many problems. Naturally, understanding someone else's codebase is much harder to do than writing your own, I have learned a lot about programming in the last few years as well. In fact, that was one of the reasons I took Tessa down, I ended up learning so much that I was actually upset with what I had written and could no longer hack it together... I was actually planning on a complete rewrite!

Maybe in the future I'll progress down the same road as described above but I wanted something to let me write my topics now. You know, as they happen. This blog will be whatever I want it to be right now, there is no goal, there is no direction, it is just a place for me to jot my thoughts down and let others read them if they so desire. Obviously, given my background, most of the posts will probably be technical but that is how things work. I have gotten quite a bit of information on the internet from other blogs just like this one. Here's the scenario: some guy out there has a problem that is just causing all sorts of havoc and while the answer eludes them they eventually figure it out. Now at this point they would have a couple of choices but I am only interested in two.

  1. They do nothing and go on their merry way, maybe they wrote it down for themselves or documented it though some work order system or maybe they didn't. Who knows?

  2. They decide "hey, that was a pain, but let me write about it and post it online; that way if anyone else has this same problem, they can read my fix and get going much quicker."

I certainly hope they choose option #2 because I can benefit from it... it can save me time, and let me fix whatever the problem is quicker. Of course, whoever posted that information usually isn't asking for anything in return (generally) and will usually get nothing in return other than the satisfaction that maybe, just maybe, their post has helped someone else. (and in this field that can actually go a long way – why else would you be writing if it wasn't to help others?) So I figure after many, many years of reading posts, seeing code snippets, and having that elusive answer posted right in front of me I can finally return the favor and maybe, just maybe, someone might find my post helpful for them.

Imported Comments

Jared on 2009-01-17 23:45:14 wrote:


  1. You use OpenID? You officially cannot bitch about it again.

  2. Your header says "Now with more content!" - shouldn't that be "Now with content!"

  3. I don't have Blogger upload by FTP - I have GoDaddy redirect to Google's servers. Everything is stored over there, and I like it that way.

Joshua on 2009-01-18 19:27:11 wrote:

Good point... I changed it from "Now with more content!" to "Now with actual content!"

I forgot about .net 3.5!

I forgot to mention the whole reason the server issue came up... I have been trying to install .net 3.5 so I can upgrade my blog. I have an update, but it's on 3.5 whereas the server is on 2.0.

Here is the process to get to .net 3.5:

  1. Install .net 2.0

  2. Install .net 2.0 SP1

Oh wait... .net 2.0 SP1 requires .net 3.0 to be installed! Here are the revised directions:

  1. Install .net 2.0

  2. Install .net 3.0

  3. Install .net 3.0 SP1

Damn it! Yet again... the .net 3.0 SP1 requires .net 2.0 SP1 to be installed!
Here are the revised revised directions:
  1. Install .net 2.0

  2. Install .net 3.0

  3. Install .net 2.0 SP1

  4. Install .net 3.0 SP1

  5. Install .net 3.5

Ahh! There we go... talk about weird dependencies! I mean, what the?

Oh well, I finally got .net 2.0 SP1 installed! I'll wait until tomorrow to do the rest. "Why?" you ask? Because I'm freakin tired!

It got worse and worse and worse

Some of you may have noticed that my uptime has been rather low recently. My web server, Yggdrasil, has been BSODing and slowly generating errors that make no sense. Within the last 12 hours I have seen the stop errors 0x8e, 0xD0, 0x4e, and a few others. After much swearing and screaming I had finally resolved to reformat the thing. Any of you who know my current setup knows that Yggdrasil not only hosts the website and Kerio, but it also hosts my TFS front end. If there is anything you need to know about TFS 2005 it should be that TFS 2005 does not natively support access from the internet... and if you change the default ports or enable SSL you have now broken upgrades, unless you revert back to its original setup. It was one huge pain to set up! Anywho, I don't have a recent backup of Yggdrasil that I could restore.

David was kind enough to lend me his PE Bootable CDs to allow me to access the hard drive and copy off what files I needed. This was failing too... meaning the solution was more than reformatting... go figure. As the series of BSODs got more entertaining I started suspecting hardware, more specifically the RAM.

Long story short, I removed one stick of 512MB RAM and am now running at half of the RAM Yggdrasil used to have. It's slower, but it is stable.

Stable enough that I haven't had to reformat.



Also! One of the many reasons I don't want to reformat (one being the HUGE task of trying to set everything up again) is the fact that I am finally moving into my own apartment this Saturday (2008-01-12)! You can expect some outages next week as I get my new network set up and repoint the DNS entries.

Wish me luck! (and my server luck too!)

November Update

Image of an unopened can of SPAM.

It's been well over a month since my last post and I haven't done much with the website recently either. The only updates that have been done over the last month are better logging, and tweaking the keyword filter for spam filtering. I have over 100 keywords with different weights being applied to every comment field; this includes the name, email, and homepage fields since one spammer was crafty and was using a ten word body and only linked their site in the homepage field. The new list does have some tight restrictions: you can't use the domain suffix of .biz or .info (until I see a legit site, this is the easiest way), if you use bbcode [url=...][/url] it'll be blocked instantly considering I mention you can use standard HTML tags. It now keeps a record of every post blocked (by the keyword filter only, if you are blocked via the Http:BL or by my ranges, tough luck) and the content. If I see a legit comment I will take the time to repost it and tweak the filter to allow the comment (if applicable). Since I don't get many real comments, I don't expect this to be an issue (yet).

Most of my time has been consumed by work and by doing some overtime for work. I am in the middle of creating an Windows SharePoint Services 3.0 to Exchange 2007 calendar connector. This task, while fun, has been one huge headache after another trying to account for all of the small and large differences between the two. I do have one thing to say though...


Ok, not really, but they are one huge pain in the ass to handle - especially when you have exceptions to the recurring appointments! Aaaargh! I'll figure it out soon... though if I had my way I'd just disable recurring appointments considering I do have at least a one way synchronization working from SharePoint to Exchange for basic appointments. I am currently researching on how to tell if a list in SharePoint requires moderation or not (basic Approve/Reject stuff) and allowing meeting invites is soon on its way.

Working behind the scenes with SharePoint and working with Exchange 2007 Web Services (EWS) has been fun though and I can't wait to see the project complete. I only have a deadline of four weeks from now...

UPS Sucks

You never really hate a company until they screw up with you, even if you have done business with them for years. Today, that company is UPS. I have heard rumors before about being careful in shipping anything over a 32" TV, and I figured those were just cautious people or people that didn't like UPS at all. Well, in this case I'm going to join the crowd. Just look at these pictures:

Picture of a broken LCD panel in the TV, completely distoring the image.

Alternate angle (more straight on than the previous one).

Arrrgh! Just imagine my frustration in receiving a 37" HDTV and testing it just to find out they broke the freakin screen! Thankfully I've heard good things about Syntax-Brillian and how they handle these situations.

On a much lighter and happier subject, since its inception my spam filter has blocked 22 messages since midnight of 2007-10-08! And I have yet to have an actual spam comment on here! Woo! Naturally, Jared has reminded me that it'll never be perfect... which I do know - but it's pretty damn nice!

AntiSpam (tm)

Ha, it's freakin 5:41 in the morning, and here I am coding... about to fall asleep! Guess what! Part 1 of my AntiSpam (tm) project went well. Keyword matching is up and working! With weights! This means that you can specify certain words to be weighed more than others. Take the word viagra for example, its a favorite amongst spam people but there is a tiny possibility that an actual person would want to use it in a comment. By applying a weight to the words, it will actually allow a post if the weight does not go above 100. If viagra had a weight of 10, that means it will take at least 10 uses of the word to trigger the keyword filter. You can also specify a weight of 100 for a word too - meaning no matter what, it is instant blocking of the post.

I feel quite accomplished... good night!

FirstChanceException and Threading.ThreadAbortException

I've learned a few things these last few days about exceptions, debugging, and blowing up IIS 6. FirstChanceExceptions (FCE) are actually exceptions in a program that are passed to the attached debugger before the application actually gets the exception - this allows you to see what went wrong and where (well kind of - it can be very tricky). Most FCEs are harmless since you'll only hear from them if you have a debugger attached, and if your program is well written, it will catch the exception, handle it, and continue in a graceful manner. If you receive a SecondChanceException (SCE) that means you screwed up, and now your program crashed, which can either give a nice nasty "Unhandled Exception at 0xblahblah" or give a pretty "Send this info to Microsoft" dialog box.

The reason behind the FCEs and SCEs in this post is the fact that at random times throughout the day, my Application Pool in IIS6 will randomly terminate (crash). As I have learned, trying to get a debug dump can be difficult with IIS (since I don't have Visual Studio installed on there). All the event logs tell me is that my pool suffered a fatal exception during a heartbeat - lots of help right? Well, all is not lost - I do know that when it blows sky high, I at least get the error Connection_Abandoned_By_AppPool - even more helpful! I ran across the IIS Diagnostics Kit which includes the handy-dandy Debug Diagnostics tool, which is where the FCE and SCE come in.

The best thing I can do at this point is, attach the Debug Diagnostics tool to my IIS processes and hope the application will crash so I can get a debug dump - the problem with that is the fact that it not only catches SecondChanceExceptions, but also FirstChanceExceptions! This was causing a problem because apparently my site was throwing a bunch of FCEs! After a bit of research I discovered that calling any of the Response.End(), Response.Redirect(), and Server.Transfer() methods results in a System.Threading.ThreadAbortException, an exception I wasn't handling - which caused my server to create a useless debug dump and hang the server while it did that. I have updated my code as per KB312639 and either wrapped the code in try/catch blocks, or called the CompleteRequest() methods. With this new code, I hope to catch the real problem of my site crashing and hope to fix it before I continue working on this site.

New Theme and Some Spam!

Thanks to a lot of help from Jared (well, he designed the whole thing), I now have a new default theme in place. I like it because it looks newer and fresher than the old theme... but worry not - it isn't done yet! As always, let me know what you think.

Unforunately, though, there have still been some spammers getting through to my site... though there are a lot less of them than there used to be! For them to successfully post, they need to actually visit the page they want to spam, and then post with all of the data being returned, and if they pass the http:BL test then, and only then, will the comment be posted. I am still mulling around with how I want to do a captcha thing for comments but I am still unsure of how or even if I want to implement that. To help with the spam, I finally added the code to allow me to delete a comment through the website - which is a huge blessing, since I only need to click a button now rather than execute the stored procedure in the database!

Believe it or not, but I have a few personal posts lined up to be added - it's about time right? Stay tuned!

Error Handling

Basic error handling is now implemented - so now if something goes horridly wrong, we'll at least know about it rather than just sending you to the home page. You can view a success message, a warning message, and an error message without actually causing something to be logged. I am planning a redesign on this site, which Jared is helping me with.