Welcome to Steve Smith's blog!

  • Incent All Parties Involved

    Incentives and offers are a mainstay of modern business sales and marketing.  People feel better about making a purchasing decision if they think they are getting a deal, and frequently people need some kind of a push to get them to buy now, even when they’ve otherwise made up their mind that they’re ready to buy, soon.  In most cases, incentives are given to just one person, the potential customer.  It’s also typically the case with referral programs, which generally reward the referrer for someone they refer.  These can be effective, to be sure, but they can also send the wrong message, at least in terms of recruiting bonuses. Rewards for Referrals When DropBox … more

  • Working with Kendo UI Templates

    I’m watching the Introduction to Kendo UI course by Keith Burnell on Pluralsight and decided to play around a little bit with templates, which are a pretty powerful feature.  If you’re a server-side web developers, templates should seem pretty familiar to you.  Any ASP or ASP.NET page can be thought of like a template, in which you mix markup and dynamic data expressions.  In this case, the templates are defined in their own script blocks.  There are demos and documentation available; in my case I opted to write something up based on what’s in the Pluralsight course in a JSFiddle. Templates are most valuable when you’re binding some data to them.  The data can be … more

  • Passing Default Parameter Objects in JavaScript

    You can use the jQuery extend() function to elegantly configure your functions to accept a single parameter object, while providing default behavior for any options that are not set.  For instance, imagine you have a simple function that simply says “Hello, World”.  You could code it like this: Now, if you want to start passing in parameters, you can easily do so by parameterizing the method, but every time you do, you break any code that was expecting the original parameterless version.  This can quickly grow out of hand within a few revisions of the function’s signature.  A simple way to avoid this issue and allow for your function to version forward effectively is to … more

  • When Should You Refactor

    A common question teams face is, when should we take the time to refactor our code?  Refactoring is defined as improving the design or quality of code, without changing its external functionality.  Most teams face constant pressure to release features and/or fix bugs as quickly as possible, so it’s not uncommon for problems discovered in the codebase to be put on the back burner to be fixed “later."  But unfortunately, a great deal of the time later never comes.  As a result, the codebase continues to degrade, accumulating more and more technical debt, making it more and more expensive for changes to be made to the system. Big Bang Refactoring Sometimes, the politics … more

  • Moore’s Law and the Hybrid Mobile Application

    If you’re building software today, you’ve probably faced the question of whether or not you need to build a mobile version of your application.  In that case, or in the case where you’re decided from the outset you’re building a mobile app, the next question is, which mobile platform do you target?  Here there are several options: Target Android.  It’s got the biggest market share. (69% in 2012) Target iOS.  It’s where the money is (iOS apps earn over 2x as much as Android for paid downloads and In-App Purchases). Target Windows Phone 8.  Its Nokia phones are gaining in popularity (sales doubled from Q3 2012 to Q3 2013), but it’s still a small player (4% globally). … more

  • Configuring Performance Counters to Run Over Time

    Whether you’re looking to diagnose performance problems, or just to keep an eye on the health of a server you rely on, knowing how to configure performance counters so they run constantly in the background can be a huge help.  The first step in getting to performance counters is to run perfmon (just hit Start and type perfmon): Once you’re in Perfmon, you may have questions like: What should I monitor for an ASP.NET web site / application? How do I save a set of Performance Counters? which you can find answers to at the above links.  The point of this article is to demonstrate how to collect performance statistics over time.  The first step is to identify which counters … more

  • Final Verdict on Haswell Ultrabook

    I’ve had a pre-release Intel Ultrabook with the new Haswell processor in it for about two months now, so it’s time for one last review of the device.  You can read my previous reviews: First Impressions of the Intel Haswell Ultrabook Intel Haswell Ultrabook Preview Unit Experience Overview This device has met or exceeded my expectations for performance, power use, and overall fit and finish.  The only thing that keeps me from saying I absolutely love this machine is the fan noise, which I mentioned in my initial review and which is a known issue with the preview device.  I can only assume that the production quality Haswell units being shipped imminently by a variety of OEMs … more

  • 3 Reasons Why DropBox is Your Friend

    I’ve been a huge fan of DropBox since its early days.  In fact, I’ve been using similar tools, like FolderShare (until Microsoft killed it), for many years, but DropBox is by far the best one I’ve ever used.  I work from 3 different machines on a regular basis (work desktop, home desktop, laptop for meetings/travel), and DropBox ensures that every one of them always has all the files I need to be productive.  I publish training classes online (occasionally) with Pluralsight, a distributed company with several hundred authors, and DropBox is the primary means of coordinating the many files that need to be shared in order to publish the online courses. If you’ve never used … more

  • DevReach 2013 Recap and Slides

    Last week I had the opportunity to visit Sofia, Bulgaria for the DevReach 2013 conference at which I was once more a presenter.  DevReach is always one of my favorite conferences to speak at, because the food and culture of Bulgaria is great, the attendees come from diverse backgrounds, and the conference planning always goes above and beyond to take care of the speakers.  I found this to be true my first time speaking here in 2008, and it is still true today (which is good, since the event is now run by Telerik, my employer, and I helped with this year’s speaker and session selection). I had a pre-conference workshop on Monday on software engineering that was very well attended: … more

  • 3 Places You Should Deploy Your Important Web Site To

    You’ve got a web site, and you think it’s important.  Or your boss does.  Or your customers do.  In any case, someone will notice when that thing goes down.  So it’d be nice if that didn’t happen too often, especially during relatively mundane activities like deploying a simple update to the site.  Let’s talk about the three places you should be deploying your site to in order to achieve this simple goal. Test Environment The first place you should deploy to is a test environment.  The test environment, as the name implies, is where testing can take place.  Your testers and QA staff can hammer on this site with impunity.  You can do crazy things here, … more

  • Intel Haswell Ultrabook Preview Unit Experience

    I’ve been using my Intel Haswell Ultrabook for about a month now, so it’s time to follow up on my first impressions review. Overview Last month I was happy to receive an Intel Haswell Ultrabook Software Developer Preview device, for review purposes.  This unit is actually the 3rd Ultrabook I’ve used, and certainly it is the best of the three.  The first one, an Asus Zen I got in early 2012, continues to serve me well when I use it, but I was never a great fan of the keyboard or track pad.  It also lacked a touch screen.  Last year, Intel sent me a review unit based on their 3rd generation Ivy Bridge tech.  That unit had a very nice touch screen as well as a host of … more

  • Wiring Up TimeAgo and ASPNET MVC

    Imagine you want to display something on a page so that instead of raw dates, the user is shown something more relative to the current time.  You’ve probably seen this in some of the applications you use.  “Last Updated: A moment ago” or “about an hour ago”.  There are a variety of ways you can implement this, and it’s been done in many different languages.  In my case, which is an ASP.NET MVC C# application, I considered doing it on the server and simply passing the result as a string to the view for display.  However, in searching for the best way to do this, I stumbled upon the Timeago plugin for jQuery. One of the key benefits of this plugin is that, unlike … more