A hundred! (Actually, 70,000!)


Just a quick post to celebrate my 70,000th page view on my site!

I know I’ve been inactive for a while (it’s been a really busy year, what with downsizing, moving into the tiny house, warming up to the new job, buying a farm, getting ready to move again…) but I promise to have more articles coming soon.

So if you want to drop by and see what hasn’t been going on, I’d certainly appreciate it!

Configuring a cloud-based secure multi-domain web and e-mail server



As I’ve mentioned previously, I own an HP MediaSmart server. Up until recently I’ve used it to host both my jkshay.com domain as well as my wife’s thebumbleshack.com domain. If you’ve seen thebumbleshack.com, you’ll see that we’re currently in the process of downsizing, reducing our possessions and living a simpler, more harmonious lifestyle. That being said, I knew I was likely taking my server off-line (it’s a HUGE power hog) and needed a replacement solution.

We’ve used cloud servers at my current employer for several years, hosting several sites with e-mail and web services without issue. I just didn’t want to pay the high prices (upwards of $100/mo minimum) to replace something I *could* do for the cost of electricity, so I set out to find an affordable alternative – and I did. Continue reading

Creating (and restarting) a single-instance WPF application with SingleInstance.cs


My current project presented a unique challenge. I have a need to:

  1. allow only one instance of the application to run at each workstation,
  2. notify the user that an instance is already running if a second instance is started, and
  3. be able to programmatically restart the application.

Thankfully, Microsoft has provided the SingleInstance.cs to serve these needs. Following this article on CodeProject.com was a great start. The author Arik Poznanski did an excellent job explaining the steps necessary to implement the first two requirements. I combined his techniques with information found in this article on StackOverflow.com to fully satisfy all three requirements – an application that will only allow one instance, that will notify the user that an instance is already running, and that can easily be restarted programmatically. Continue reading

Implement WebClient’s asynchronous download with cancellation capability


When I wrote my article regarding use of the BackgroundWorker to keep the UI responsive, I used the WebClient’s DownloadString method as an example of a long-running process. I used this as an example in explaining how to use the BackgroundWorker, which simply allows for thread-blocking code to be run in a separate thread.

As it turns out, this is a terrible idea. Not the whole thread-blocking code in a separate thread, but the use of a WebClient in a BackgroundWorker. You see, the WebClient class implements a DownloadStringAsync() method. This allows the calling code to continue to run, and the asynchronous process will eventually return a string. But since it’s asynchronous, our UI thread will never get blocked by a long-running process. And since it too supports asynchronous cancellation, there’s no reason to embed it inside a BackgroundWorker. Continue reading

Implement cancellation ability on BackgroundWorker


As I mentioned in my article on implementing the BackgroundWorker to keep your WPF user interface responsive, the BackgroundWorker class supports cancellation. I will illustrate here how easy it is to accomplish.

I’ll build this example by continuing the example in the previous article. First, let’s add a BackgroundWorker property to our DataModel class. Continue reading

Easily create a WPF splash screen with status updates via MVVM


I was in search of an easy implementation of a splash screen for my current project. I wanted to be able to show a splash screen and update it with current status information as my application initialized.

The standard SplashScreen class provided by Microsoft does not support showing dynamic content on the SplashScreen. For this reason, I was not able to use the supplied class. Instead I decided to create my own.

The splash screen I created is simply a regular window bound to a view model. I’ve created a SplashScreenHelper static class that we’ll use to send status updates to the splash screen. Continue reading

Embedding an Axis brand camera into WordPress


[showAxisCamera url=”″ port=”8588″]
After I posted my article about embedding a video feed into my WordPress site, I received an e-mail from a reader in the UK looking for assistance configuring an Axis brand camera in a WordPress site. Ultimately, I ended up creating a more robust version of my original code, but for Axis brand cameras. I thought I would share that code here, with a brief explanation of the changes from the original article and a few examples of implementation.

I’m not claiming authorship of this code; rather, I just tweaked existing code the reader provided to get it working in WordPress (including the creation of a short code).

In this code, I implement the ability to use a single shortcode with multiple cameras at different subdomains. I won’t go into how to add this code to your WordPress site (I explain how to do this in the original article). Just know that it should be added to your theme’s functions.php file. Continue reading

Implementing the .NET DispatcherTimer


One of the issues with multi-threading in WPF is the inability for processes on a separate thread from the user interface to directly access objects in the UI. The .NET Timer object does not run in the same thread as WPF’s UI, so it therefore cannot directly update the UI. Instead, the Timer must post UI updates to the dispatcher of the UI thread, using the Invoke or BeginInvoke methods. However, an easier method exists for implementing a Timer that updates the UI – the DispatcherTimer.

The DispatcherTimer runs on the same thread as the UI. Therefore, using the DispatcherTimer instead of the traditional Timer object allows UI updating without the need for the Invoke or BeginInvoke methods.

The DispatcherTimer works in almost the same way as the traditional Timer:

  1. Create an instance of the DispatcherTimer
  2. Assign a TimeSpan to the DispatcherTimer’s Interval property
  3. Assign an event handler to the DispatcherTimer’s Tick event
  4. Start the timer

It really is that easy! Let’s take a look at some sample code. All of the following code can be placed in your DataModel. Continue reading

New site logo


jkshay copy.com logoI used to run my website in the Drupal framework. The default theme packaged with that installation used the default Drupal logo (a fierce-looking drop of water), which I used for several months. I concentrated my efforts on other parts of the site – building content, functionality installation, etc.

I’ve since ported my site over to the WordPress framework, and was ready for a little personalization. As I’ve mentioned before, my wife is an artist. I asked her to create a logo for me – check it out! It’s me, hiding behind a laptop emblazoned with my URL.

It’s become my website logo (in my site header), my favicon.ico (the little logo that appears in your browser tab), and my gravatar (a logo that remains consistently me across gravatar-enabled websites).

What do you think?

Comment count in WordPress shortcode


Earlier today I was raving about the simply elegant plug-in Anti-Spam. When writing that post, it occurred to me that I specified two pieces of information that might change as time passes.

If you’ve read my post on dynamic ages in my About Me page, then it might be obvious that I like to keep things dynamic. That is to say, I don’t like to use static values unless those values are simply a snapshot in time. So I thought I’d add a little functionality to my site that would:

Continue reading