Visual Studio 11 and Windows 8

The trade press is beginning to talk about Visual Studio 11 quite a bit more often now, even though the release of the initial beta won’t even happen today (coincident with the consumer release of Windows 8). The word on the streets is that you won’t see anything too exciting or unexpected in Visual Studio 11. Yes, Microsoft is making the usual laundry list of changes, but there isn’t anything that you wouldn’t expect them to add. Here’s a quick overview of the changes that I’ve been able to glean from the various articles I’ve read:


  • HTML5 and JavaScript support
  • Touch application support
  • Agile application development
  • Cloud application development
  • .NET Framework 4.5 support
  • Metro interface designers
  • Devops integration (a tool designed to make it easier for administrators and developers to communicate)
  • IntelliTrace updates that make it possible to trace activity in operational applications
  • Asynchronous programming updates
  • Parallel program development
  • Improved SharePoint support

In other words, Visual Studio 11 is targeting Windows 8 and Windows Azure development. Along with these changes, there are rumors that Microsoft will simplify the IDE to make it easier to use. I just hope that they don’t bury functionality in places where you can’t find it. The Ribbon interface that Microsoft is so fond of adding to other applications does just that—making them a nightmare for power users to use, while simultaneously reducing the learning curve for the novice (the bad and the good that comes with any change).

There isn’t any mention of one of my pet peeves with Visual Studio 10, it’s voracious appetite for system resources and an unflinching desire to freeze the system. The current version of Visual Studio tends to require me to reboot my system at least once during any programming session.

Also missing from the laundry list is any mention of Silverlight, which makes me wonder whether Microsoft is putting this technology out to pasture. In addition, there was nary a mention anywhere of updated Windows Phone support. You’d think that Microsoft would be providing some updated support for Windows Phone development considering that many developers will need to support the mobile device. More and more users are augmenting their desktop systems (or replacing them entirely) with mobile devices, so Microsoft had better get on the ball.

Everything I’m reading focuses on Microsoft’s two main languages C# and Visual Basic. For example, I haven’t seen anything about F#, which appears in the current product. Of course, IronPython was orphaned quite some time ago, but the IronPython community remains alive and well (see my IronPython 2.7.1 Update post for details). This lack of information makes me wonder about the future of Microsoft’s other languages (including C++).

Of course, the updates in Visual Studio 11 and the .NET Framework 4.5 will affect applications of all sorts. During the upcoming months I’ll try to test all of the application examples in my books to determine whether there are any issues you need to know about. In the meantime, please continue to use the supported versions of Visual Studio when working through the examples in my books to ensure you have the best learning experience possible. Contact me with any concerns or observations you have about Visual Studio 11 at


Finding the Source Code for Start Here! Learning Microsoft Visual C# 2010 Programming

A number of people have written to say that they can’t find the source code for my book, “Start Here! Learn Microsoft Visual C# 2010 Programming.” As I discussed in my Source Code Download Issues post, it’s really important that you download the source code for my books to ensure you have the best possible chance of a great learning experience. You can find the source code for this book at:

If you experience any problem finding the site or downloading the code, please be sure to let me know. I’ll do whatever I can to ensure you get the source code you need to use the book productively.

In addition, make sure you let me know about any coding problems you experience. Yes, the examples are just that—examples. That means they don’t include error trapping found in a production application in many situations. If you type something weird, the application is most likely going to fail in an unexpected manner because it doesn’t contain the error trapping required to make it more robust. The error trapping is often left out for the sake of clarity, so that you can better understand the basis for the example. However, the code should still work well enough that you get the full benefit of working with it as you learn how to program in C#.

Of course, any code, even code in books, can contain errors and I always want a chance to alert you to those errors (along with the fixes to go with them). The best way for me to discover those errors and to be able to provide you with fixes is if you tell me about the problem. As with my other books, I’ll usually upload the fixes right here, so make sure you keep your eyes peeled for additions to the blog entries for this book.

Let me know about this and any other book-specific issue at I’m always interested in hearing from you about issues that make my books less helpful than they could be.


Working from Home

I heard an interesting statistic on the radio this morning—most Americans would be willing to take a 5 percent pay cut in order to work from home. I’ve been working from my home for 25 years now and must admit that I really wouldn’t want to work anywhere else. However, I started thinking about the whole concept of a pay cut after the radio announcer finished and thought that we’re looking at the issue from the wrong perspective. Sure, the 5 percent pay cut is real, but is it actually a pay cut? Let’s examine that for a moment. The 5 percent pay cut to work at home would result in the following savings:


  • Reduced driving needs, which means lower insurance
  • Less gas used
  • Less wear and tear on the car
  • Lower cost, more nutritional eat-at-home lunches
  • Less need for expensive clothing
  • No day care required
  • Less time wasted in travel (and time is money)

In short, from a financial perspective, both the employer and employee come out ahead. However, the benefits of working at home only start here. This is just the tip of the iceberg. If you’re an employer, you want your employees working at home. According to Business News Daily and many other sources, employees who work at home are significantly more productive in the right circumstances. So the employer not only saves on the pay required for a work at home employee, but also gets more for the employee’s efforts (assuming that the employee is actually working and not getting distracted). (In addition, there are other financial benefits for the employer such as reduced absenteeism and reduced infrastructure requirements, such as desks and office space.) Because working from home is becoming more of a reality for many Americans, a number of authors have taken a stab at making it work out better for everyone involved:


The one essential tidbit of information that you should glean from most of these posts is that you need some sort of schedule. In fact, a few of these sources actually draw you a picture of a schedule. Having goals that you want to meet each day is an essential part of the work at home experience.

There is no doubt that the effects of working at home extend well beyond the benefits that both employer and employee can obtain. Working at home can be better for the environment because the worker isn’t driving anywhere. However, whether the environment gains or not is really a matter of the environment in which the employee is working. A basement office using incandescent bulbs, a plug in heater, and old computer equipment is hardly energy efficient and could actually end up increasing the employee’s carbon footprint.

The health benefits of working from home are also well documented. Employees who work from home are less stressed, eat better, and spend more time doing something other than driving a car. The mental and physical benefits of working in a familiar, cozy environment make it possible for employees to live better lives. In addition, even when an employee does get sick, it’s often possible for the employee to work part of the day, rather than miss an entire day at work, so the employer gains as well.

I’m not a parent, so I have no personal experience with child rearing. However, in researching work at home statistics, I did run across a few articles that suggest work at home parents actually give their children a better chance of performing well later in life. I’d be interested in hearing from people who have significant experiences one way or the other—especially in situations where one child was raised at home and another in childcare.

Will working from home work for everyone? The answer is absolutely not. Certain professions require that employees still trudge to work. In these cases, working as close to home as possible will still save travel time, wear and tear on your car, reduce insurance payments, and still benefit the environment to some degree. Working close enough to walk to work or use public transportation is even better. However, some people will continue to go to work at a factory or office somewhere, no matter how much technology progresses.

If your employer doesn’t
offer work at home, create proposal that makes it more likely that the
employer will at least consider allowing you to do it. Everyone
Do you think you could perform your work at home? Are you doing it now? Let me know your thoughts on the whole work at home question at


Exploring the TypingBuddy Application (Part 2)

In the previous post of this series, Exploring the TypingBuddy Application (Part 1), you considered why TypingBuddy is a useful application and some of the parameters required to create such an application. Of course, it’s always nice to think about how to put an application together, but actually working on the application is more educational. This post will begin exploring the application design by looking at a few of the forms used to display the application timing (the next post will discuss forms used for configuration purposes).

The first thing to understand is that this application won’t normally appear on screen at all until the typing time is done. The only exception the first time the application is used. In this case, the user sees the following message box stating that the application hasn’t been configured and then the main form appears on screen.


The default operation is for the application to start and immediately hide the main form. You’ll see an icon in the notification area. Right clicking this icon displays the following choices.


When the user selects Open Window, TypingBuddy displays the main form. Here’s how frmMain will appear.


I decided that this example would contain full accessibility settings from the outset, so there are some features you may not have worked with in the past. For example, in order for some screen readers to read the purpose of a particular control, you must provide a ToolTip control on your form. You’ll use the following configuration settings to create frmMain. (The icon is created using precisely the same technique as described for the GrabAPicture application in the “Exploring the GrabAPicture Application (Part 4)” post.)

Control Property Value
Form1 (Name) frmMain
  AcceptButton btnSet
  CancelButton btnQuit
  FormBorderStyle FixedDialog
  ShowInTaskbar False
  Size 298, 294
  Text TypingBuddy Settings
  WindowState Minimized
NotifyIcon1 (Name) ThisNotifyIcon
  Visible True
ContextMenu1 (Name) NotificationMenu
Timer1 (Name) TypeTimer
  Interval 1000
ToolTip1 (Name) toolTip1
Button1 (Name) btnSet
  AccessibleDescription Set the timer interval.
  Location 176, 12
  Size 104, 23
  TabIndex 0
  Text &Save Settings
  ToolTip on toolTip1 Set the timer interval.
Button2 (Name) btnPause
  AccessibleDescription Momentarily pause the timer.
  Location 176, 41
  Size 104, 23
  TabIndex 1
  Text &Pause
  ToolTip on toolTip1 Momentarily pause the timer.
Button3 (Name) btnMinimize
  AccessibleDescription Cause the window to disappear without exiting the program.
  Location 176, 70
  Size 104, 23
  TabIndex 2
  Text &Minimize Window
  ToolTip on toolTip1 Cause the window to disappear without exiting the program.
Button4 (Name) btnChangeMessages
  AccessibleDescription Configure the resting time messages.
  Location 176, 99
  Size 104, 23
  TabIndex 3
  Text &Change Messages
  ToolTip on toolTip1 Configure the resting time messages.
Button5 (Name) btnQuit
  AccessibleDescription Exit the program.
  DialogResult Cancel
  Location 176, 128
  Size 104, 23
  TabIndex 4
  Text &Quit
  ToolTip on toolTip1 Exit the program.
Label1 (Name) lblTimerValue
  Location 12, 9
  Size 158, 13
  TabIndex 5
  Text &Typing interval (in minutes):
NumericUpDown1 (Name) TypingInterval
  AccessibleDescription Enter the typing time in minutes.
  Location 12, 25
  Maximum 1200
  Size 120, 20
  TabIndex 6
  ToolTip on toolTip1 Enter the typing time in minutes.
  Value 60
Label2 (Name) lblRestingValue
  Location 12, 48
  Size 158, 13
  TabIndex 7
  Text &Resting interval (in minutes):
NumericUpDown2 (Name) RestingValue
  AccessibleDescription Enter the resting time in minutes.
  Location 12, 64
  Maximum 1200
  Size 120, 20
  TabIndex 8
  ToolTip on toolTip1 Enter the resting time in minutes.
  Value 10
Label3 (Name) lblTypingTime
  Location 12, 87
  Size 158, 13
  TabIndex 9
  Text Time Left (in Seconds):
TextBox1 (Name) txtTypingTime
  AccessibleDescription Displays the remaining time in seconds.
  Location 12, 103
  ReadOnly True
  Size 100, 20
  TabIndex 10
  ToolTip on toolTip1 Displays the remaining time in seconds.
CheckBox1 (Name) chkShowIcon
  AccessibleDescription Displays the icon on the message box.
  Location 12, 129
  Size 158, 17
  TabIndex 11
  Text Display Message Box &Icon
  ToolTip on toolTip1 Displays the icon on the message box.
CheckBox2 (Name) chkPlaySound
  AccessibleDescription Plays a sound when the message box opens.
  Location 12, 152
  Size 158, 17
  TabIndex 12
  Text Pla&y Sound
  ToolTip on toolTip1 Plays a sound when the message box opens.

Configuring the ContextMenu, NotificationMenu, is important. In order to perform this task, you must click the Edit Menu link in the lower part of the Properties window. When you click this link, the display will change as shown here (this menu is fully configured).


As you can see, you simply type the menu options you want to create. The names of these three menu entries are mnuOpen, mnuPause, and mnuExit. Except for assigning each menu entry a (Name) and Text property, you won’t do anything with them for now. Later posts will describe how to work with this menu.

Of course, the purpose of TypingBuddy is to display a dialog box telling you that it’s time to stop typing for a while. The original version of this program used a simple MessageBox, but this approach has quite a few problems, not the least of which is that you can’t force a MessageBox to appear on top of everything else. It’s easy to miss the message to quit typing for a while. With this in mind, the latest version of TypingBuddy uses frmMessage to display the message to rest as shown here.


The configuration settings might be a little more complex than you might think. For one thing, this dialog box requires a separate timer for resting time. The following table shows the configuration settings for this dialog box.

Control Property Value
Form2 (Name) frmMessage
  AcceptButton btnContinue
  CancelButton btnQuit
  ControlBox False
  FormBorderStyle FixedDialog
  MinimizeBox False
  MaximizeBox False
  Size 290, 290
  Text Time to Rest
  Topmost True
Timer1 (Name) RestTimer
  Interval 1000
ToolTip1 (Name) toolTip1
Button1 (Name) btnContinue
  AccessibleDescription Displays the resting time or allows the program to continue.
  DialogResult OK
  Location 197, 12
  Size 75, 23
  TabIndex 0
  Text &Continue
  ToolTip on toolTip1 Displays the resting time or allows the program to continue.
Button2 (Name) btnQuit
  AccessibleDescription Exit the program.
  DialogResult Cancel
  Location 197, 41
  Size 75, 23
  TabIndex 1
  Text &Quit
  ToolTip on toolTip1 Exit the program.
Label1 (Name) lblMessage
  Location 12, 9
  Size 50, 13
  TabIndex 2
  Text &Message
TextBox1 (Name) txtMessage
  AccessibleDescription Displays the activity to pursue while resting.
  Location 12, 25
  Multiline True
  ReadOnly True
  Size 179, 225
  TabIndex 3
  Text Time to Rest! Take a break!
  ToolTip on toolTip1 Displays the activity to pursue while resting.

That’s it for this week. Next week, we’ll discuss forms you’ll need to create so that the user can design custom messages. Let me know if you have any question about these forms at You can see the next post in this series at Exploring the TypingBuddy Application (Part 3).


Sending Comments on My Books

I regularly receive a stack of e-mail about my books. Readers question everything and it makes me happy to see that they’re reviewing my books so closely. It means that I’m accomplishing my principle goal, helping you understand computers in every possible way so that you can be more productive and accomplish tasks with less effort. When I make something easier for someone and they tell me about it, the grin extends from one side of my face to another. It really makes my day.

Some readers are still asking me if it’s OK to send me comments. I definitely want to see any constructive comment that you have. Anything that helps me understand your needs better or corrects errors in my writing makes it possible for me to write better books. As I mentioned in my Contact Me, Please!, I really do want to hear from you. The main element that I need to obtain a usable comment is that it’s constructive. A comment that says, “This book really stinks!” doesn’t tell me anything. Here are some of the things you can do to create a constructive comment:


  • What book are you reading?
  • Which page contains the error?
  • What do you view as an error on that page?
  • How would you fix the error?
  • What sort of system are you running?
  • Are you using the correct version of the software (the same version that appears in the book)?
  • When did you encounter the problem?

The more information you provide, the easier it is for me to understand the issue and provide you with feedback. In many cases, I’ll upload the fix to my blog so that everyone can benefit from the response (so be sure you keep an eye on my blog for new entries). I work hard to ensure that my books are as error free as possible, but everyone makes mistakes. Also remember that sometimes mitigating factors, such as differences in software versions or anticipated hardware, make it appear that there is an error in the book when you’re really looking at a different in environment. Help me provide you with better books—send me comments!

There are a few things that I won’t do for you. I won’t help you pass an exam at school. Your learning experience is important to me, which means that I want you to continue your education by working through the instruction on your own. I also don’t provide free consulting. This means I won’t check the code that you created on your own for errors. I’ll help you with any book-specific question, but I draw the line at that point. Let me know if you have any input or insights on my books at


Accessibility on Windows 8 Metro

Anyone who reads my books knows that accessibility is a major concern for me because I see computers as a means for leveling the playing field for those who have special needs. In fact, my desire to make things as accessible as possible is the reason for writing Accessibility for Everybody: Understanding the Section 508 Accessibility Requirements. Microsoft has always made a strong effort to keep Windows and its attendant applications accessible—at least, to a point. You still need a third party application such as JAWS to make Windows truly accessible (the application developer must also cooperate in this effort as described in my many programming books). Naturally, I’ve been curious about how the Metro interface will affect accessibility.

Here is the problem. The most accessible operating system that Microsoft ever created was DOS. That’s right—the non-graphic, single tasking operating system is a perfect match for those who have special needs precisely because it doesn’t have any bells or whistles to speak of. Screen readers have no problem working with DOS and it’s actually possible to use a considerable number of assistive aids with DOS because it requires nothing more than text support. Of all the the graphical environments that Microsoft has produced, I’ve personally found the combination of Windows XP and Office 2003 to be the most accessible and feature rich. The introduction of the Ribbon with Office 2007 actually reduces accessibility. If you have trouble seeing all of those fancy icons and the odd layout of the Ribbon, you’re not going to enjoy working with the Ribbon.

I installed and tried the developer version of Windows 8 to test it for accessibility. Now, it’s a pre-beta product and there aren’t any Windows 8 products out for applications such as JAWS, so I have to emphasize that I didn’t test under the best of conditions. In fact, you could say that my test was unfair. That said, I did want to see how bad things actually are. Let me say that JAWS works acceptably, but not great, with the classic interface. It doesn’t work at all with the new Metro interface (at least, I couldn’t get it to work). So, unless you’re willing to trust Microsoft completely, you’re out of luck if you have a visual need at the moment. Things will improve, that much is certain, but it’s important to keep a careful eye on how Windows 8 progresses in this area.

The new version of Narrator
does come with some new features. Some of the features may seem like
glitz at first, but they’re really important. For example, the ability
to speed the voice up or slow it down, and the ability to use different
voices, helps with cognition. A more obvious improvement is the ability
to use different commands with Narrator. Narrator will also work with
Web pages now as long as you’re willing to use Internet Explorer as your

It’s with this in mind that I read the post about Windows 8 accessibility entitled, “Enabling Accessibility.” Let me be up front and say that accessibility is an important issue to Microsoft—at least, it has been in the past. According to this post, 15% of the people using computers worldwide have accessibility needs. The more important piece of information is that the number of people with accessibility needs is going to increase because the population is aging and things such as eyesight deteriorate as we get older.

From what I garnered from the post, developers are going to have to jump through an entirely new set of hoops to make their applications accessible in Windows 8. Some developers already have problems making their applications accessible and some simply don’t care to make their applications accessible. If you fall into the former category, you can read my A Visual Studio Quick Guide to Accessibility (Part 1) and A Visual Studio Quick Guide to Accessibility (Part 2) posts in addition to reading my books. If you fall into the latter category, you’re going to find it harder to support users in the future and will definitely see reduced sales because the number of people with accessibility needs is increasing.

Microsoft is improving the Assistive Technologies (ATs) it provides with Windows in order to meet new accessibility requirements. However, my experience with these ATs is that they help people with minor problems, not someone who has a major issue. Even the author of the blog post acknowledges this deficiency in Microsoft’s support. So, if you really do need to use an eye gaze system to work with Windows, you’re going to have to wait for an update to your software before you can use Windows 8 and that update will be longer in coming due to the Metro interface with all the new hoops it introduces.

Part of the new developer interface revolves around the enhanced experience that a combination of HTML 5 and XAML provide. In addition, Windows 8 will require developers to use the new Web Accessibility Initiative-Accessible Rich Internet Applications (WAI-ARIA) standard. The plus side of the change is that it does adhere to standards that other platforms will use—the minus side is that developers will have to learn yet another programming paradigm. If you want a quick overview of how this will actually work, check out, “Accessible Web 2.0 Applications with WAI-ARIA.” The quick take is that, despite Microsoft’s claims to the contrary, developers will need to do more now than simply fill in a few properties in their applications to make the application accessible. You’ll actually have to code the accessibility information directly into the HTML tags.

The post provided by Microsoft on Windows 8 accessibility support leaves out a few unpleasant details. For example, it gives the impression that your Visual Studio Express 2010 application is accessibility ready right from the start. That’s true to an extent. However, the author leaves out important details such as providing speed keys for users who need them (the requirement does appear in a bullet list; how Windows 8 will help you implement them isn’t). The current templates don’t provide for this need and the Metro interface will make it harder to add them.

One of the most positive changes is that Microsoft is going to test Metro applications for accessibility. If the application meets the baseline (read minimal) requirements, the developer will be able to market it as accessible. At least those with special needs will be able to find software that meets a minimal level of accessibility. However, that minimal level still might not fulfill every Section 508 requirement (something that companies commonly sidestep as being inconvenient). In fact, I’m willing to go out on a limb here and state that minimal is probably not going to be enough to help many of the people with accessibility needs. You’ll be able to support JAWS at a basic level, but more complex software and setups will require additional help from developers.

One of the things you should keep in mind is that Microsoft is proactive to an extent about accessibility. They even provide a special Microsoft Accessibility site to provide updates about their strategy. However, I’ve been finding myself tested with their direction as of late. The interfaces they’re putting together seem less accessible all the time. I’d love to get input from anyone who uses their tools daily to meet specific needs. Talk to me about accessibility requirements, especially those needed to make Metro usable, at


Obtaining Kindle for Your Non-Kindle System

A number of readers have written me about my post entitled, “The e-Book in Your Future” where I discuss the future of printing and the viability of devices such as the Kindle. The problem for many readers is that they either don’t want to get a Kindle or they want the e-books they buy to appear on more than just their Kindle. For example, they may use a PC at work. It’s not impossible to use your Kindle too, but it could be inconvenient. Perhaps you want to cite the content that you found in a book as part of a report—being able to see that content on your PC would make it a lot easier to copy and paste the citation to the report.

What many people may not realize is that Amazon has made it possible to read your Kindle materials on non-Kindle systems. Because I want to encourage people to use the device that best meets their reading needs, I decided to put the following list of Kindle software downloads together.



After you download the software, you install it on the host system. Any Kindle-compatible e-books you own are now available on that device as well. I haven’t tested the setup on anything other than the PC so far, but it works well under Windows 7. I’d love to hear how the software is working for other people. If I get enough feedback, I’ll provide an update about the Kindle software here. Send me your comments at


In Defense of the Hometown Newspaper

I’ve talked with more than a few people who claim the newspaper is dead. In fact, many of them cite articles that say the newspaper is dead mainly because people no longer trust themselves to discover what is true and false. There are commentaries galore about the fact that newspapers can no longer make a profit and the fact that they’re completely inadequate to the task of serving a world bent on news of the moment in sound bites. There is even a Web site called Newspaper Death Watch to herald the event. I imagine that this characterization of the plight of the newspaper is unfortunately true in larger cities where there is a lack of a cohesive community and the news is important enough to garner the attention of a news wire such as Associated Press (AP). However, this dire news doesn’t consider the newspaper that focuses on small town life (of which there are many). The fact is that there are certain newspapers that are not only alive, but doing quite well. For example, the “big city” of our community, Reedsburg (population 10,014), sports not one, but two newspapers, both of which attract enough advertising dollars to remain viable.

The hometown newspaper remains viable for a number of reasons. An obvious and often overlooked reason in our community is that the newspaper is read by the Amish, a group who is unlikely to ever read it online. Because at least some of the advertisement is directly focused on this group and other advertising is at least of interest to this group, the newspaper will remain viable. Advertising that doesn’t reach its target audience is useless. The Amish are just one of many groups who aren’t exactly Internet savvy—these groups will continue to provide a cushion for the hometown newspaper for the foreseeable future (long enough that I don’t need to worry about it). Interestingly enough, most of these groups also live in rural areas where they tend to have a large impact.

When the newspaper content focuses on the local community and the community isn’t large enough to attract the attention of a wire service, then the newspaper is likely the only source of information for community events. If you want to know about the fire that hit the local plumber, you’ll read about it in the local newspaper, not online. Of course, some people may question the need to hear about the fire from the newspaper when Joe at the restaurant can deliver the full report. If you know anything about small towns, you know that the gossip mill is completely unreliable and that you’ll hear different stories from Ann, Zelda, and Sam before the day is out. To get the real story, you need to read the newspaper (complete with pictures no less).

It’s also important to consider the community. Hometown newspapers exist because the community wants them. Many smaller towns are family towns, where intermarriage over the years has produced a super-family of sorts. You know that Marge is a third cousin and that she’s married to Harry who owns the local lumber mill. In fact, you’ve seen them at church and in the bank any number of times and pass the time of day with them when you see them on the street. However, you don’t know that they recently had a baby until you read about it in the newspaper. In order to keep up with these extended families, people in rural communities read what happens to various family members in the newspapers. Yes, it’s really that hard to keep up with everything happening in the lives of every family member. Hometown newspapers don’t focus on the negativethey contain a mix of the good and the bad, the outrageous and the sublime. Hometown newspaper editors realize that they don’t need sensational headlines to entice the readerthey need that picture of Jeremy’s triumph at the spelling bee.

Hometown newspapers are also personalized. The articles of interest in our local newspaper are written by local authors who include their telephone number and e-mail address as part of their byline. You don’t get that kind of service with AP. The reason that hometown newspapers will survive is that they’re written by people you know—real people you can contact and interact with. These aren’t faceless actors on the world stage, but the same guy or gal that you had lunch with this afternoon. Hometown newspapers haven’t lost touch with the community. Quite the contrary, they embrace community contact.

When a hometown newspaper does run a feed from AP or one of the other news wires, they tend to personalize that content too. So, Iran is planning to block the Strait of Hormuz? Why should I care? Well, it means that the price of gas at the local Kwik Trip will go up. The association between the world stage and a local condition is a reason that the value added content of the hometown newspaper remains relevant and useful.

My wife and I actually get two newspapers. There is the local newspaper from Reedsburg and then a second newspaper from Madison that fills us in about state events. The Madison newspaper isn’t quite as personalized, but still fulfills a need. Again, there are the personalized stories about the state and then there is the audience reading the paper, which includes the Amish and other groups who aren’t online. I doubt that the Madison newspaper is in trouble either because it has too many people reading it.

Are newspapers really dead? They’re dead in large cities because the newspapers got lazy and didn’t personalize their content. Profit took the place of intimate contact with the reader and sensationalism took the place of serious reporting of all of the facts, even the good ones. The fact that these newspapers also lack a cohesive community to write about and that community does tend to have a strong online presence has conspired to make the big city newspaper obsolete. I imagine the same thing will happen to the hometown newspaper someday, but it won’t be today and it probably won’t happen in my lifetime. Do you read a hometown newspaper? What is your experience with it? Let me know at


Exploring the TypingBuddy Application (Part 1)

Many people find that they spend too much time in front of the monitor at once. If you’re like me and put in a 12 to 14 hour day, sitting in front of the monitor for an extended length of time can have significant detrimental effects. At one time, I was starting to suffer a little from muscle stress and eye strain. If I had continued the way I was going, I would have eventually had to deal with carpal tunnel syndrome and other nasty side effects of computer usage. The fact is, in order to stay healthy, you have to get up and move away from the computer screen regularly during the work day. If you maintain healthy work habits, you’ll find that you can actually work longer at the computer and that your work time will be significantly more productive. It’s because I understood the problems of computer use early that I developed TypingBuddy.

No one likes to be nagged. So, one of the goals for TypingBuddy was to make the application at least a little fun and relatively non-intrusive. Over the years, I’ve continued to add little perks to TypingBuddy to keep it fresh, but also to improve the overall application. The first version of TypingBuddy didn’t include very much and it displayed the same message every time, which proved boring. The application now provides a number of features that I didn’t originally include, such as the ability to define non-computer rest time tasks and a countdown timer for the off time as well as on time. For the purpose of this example, off time is the time that you spend doing something other than working at your computer. That means getting up from the chair and doing something physical for the most part. TypingBuddy can only suggest that you move around—only you can actually decide to do it. On time is the time that you spend working at your computer.

Experience has shown me that I personally need to take ten to fifteen minutes of off time after each hour of on time. So, I set TypingBuddy to display an alert after each hour. When I click the button acknowledging the alert, another countdown timer shows how much off time I have left. The alert provides me with a random task to perform, such as pet the dog, kiss my wife , feed wood to the wood stove, or walk around the house. An editor lets me type in any set of random tasks that I want. Because some of these random tasks, such as feed the wood stove, are only applicable to a specific time of year, I can also type in a date range for doing them so that TypingBuddy doesn’t tell me to feed the wood stove on a hot day in the summer or walk around the house in the middle of winter. A button titled, Another Task, lets me grab a different task when the current task isn’t applicable. I’ve typed in a wealth of interesting tasks to perform over the years in an effort to make TypingBuddy fun to use.

The information that you provide to TypingBuddy is stored in two places in the current version. I decided to use the Windows registry to store the TypingBuddy settings, such as the amount of off time and on time, when I originally designed the application. An XML database stores the alerts in the user’s personal data folder. I decided on changing the data location after I started working with XML files. One of the updates I’ve been considering for TypingBuddy is to remove the registry from the picture. As you saw from the GrabAPicture application I just finished, it’s possible to store everything in the user’s data folder and make it easier to back up as well. In fact, I’ll likely make this change before we get started on the actual construction of the application next week.

TypingBuddy has to be running constantly in order to do its job. Of course, you don’t want to see TypingBuddy unless it has an alert to display. Consequently, TypingBuddy resides in the Notification Area. When you hover the mouse over the TypingBuddy icon, you see the number of second left in the current on time. Right clicking the icon displays a menu of actions you can perform with TypingBuddy, such as displaying the TypingBuddy configuration dialog box or temporarily pausing TypingBuddy. The menu automatically changes as conditions change.

Of course, I’m always interested in your input, which is the purpose of this introductory blog post. What would you like to see in an application like TypingBuddy? Let me know your thoughts at In the meantime, I’ll be adding a few more bits of polish to TypingBuddy before writing the initial design post next week. The next post in this series is Exploring the TypingBuddy Application (Part 2).


IronPython 2.7.1 Update

There are times where it’s hard for me to keep up with every software update out there, much as it’s hard for you. IronPython was a somewhat different product when I originally wrote Professional IronPython. One of the best changes has been the addition of support in Visual Studio for a variety of project types. You still can’t use designers to create your interface effectively, but things are moving in the right direction. I had downloaded the 2.7.1 version of IronPython nearly as soon as it became available, but a number of personal projects and other requirements got in the way of my testing it with the source code in Professional IronPython. The testing is finished and I haven’t encountered any major problems with the update. If someone does encounter a problem, let me know at

The update does include the usual bug fixes. You’ll want to peruse this list to see if the bug you reported has been fixed. As far as I was able to tell, none of these bugs directly affect the code in the book or any of the example code.

You do need to be aware of some important changes in this seemingly minor update. The biggest change is that you must have Silverlight 4 installed now to use IronPython Silverlight Web Page template (see the Python Tools for Visual Studio (PTVS) Released post for details). I decided to try everything with Silverlight 5 now that it’s available and didn’t encounter any problems. Consequently, you may simply want to update to Silverlight 5 to avoid potential problems later.

The older IronPython Tools for Visual Studio tool is completely deprecated at this point. You must use the newer Python Tools for Visual Studio (PTVS) with IronPython 2.7.1. Since this newer product offers a wealth of useful features, it’s an easy update to accommodate.

For me, the best news is that IronPython is able to work with more of the Python Standard Library. Chapter 6 of my book discusses how to perform this task. Table 6-1 (page 99) contains a list of standard library modules that are missing from IronPython. That list is getting progressively smaller. IronPython 2.7.1 now supports these additional Python Standard Library modules:


  • unicodedata
  • csv
  • ats

There is currently an IronPython 2.7.2 Alpha release available as well. This new release isn’t far enough along for me to test with the book’s code as of yet. However, if you do test it out and find that you have questions about the book code when using it, feel free to contact me. I’m always more than happy to help out with book-specific questions.