Category Archives: Blog

Strong Typing to Reduce Defect Count

A long time ago, I was having a discussion with the Director of Development in my office. He was teaching me how we can prevent errors, before they even get to QA, through better coding practices. For example, imagine that you have an integer which represents a high score. Further, imagine that you have an integer that represents loyalty points. Unfortunately, it would be too easy to goof up and pass the high score into a function that was expecting loyalty points. That would compile, and the only way to find the bug would be through Unit Tests, or a QA tester. One easy way to prevent that kind of error is to wrap the high score in a HighScore class, and the loyalty points into a LoyaltyPoints class.

Continue reading Strong Typing to Reduce Defect Count

Writing Solid Code

I often read job descriptions, and they usually say something like “Must have a strong understanding of the principles of SOLID software development.” I feel like I understand SOLID, but on the spot I could NOT recite and provide an example of each. I mean you, Liskov Substitution Principle. I wanted to improve, so I began searching Amazon for a good SOLID book. I happened to run across “Writing Solid Code” by Steve Maguire. Though I was initially fooled by the title, it’s not a book about SOLID principles. This is a book about improving software quality through good programming practices. Writing software was harder 25 years ago, and I figured that he had some strong, timeless lessons. So, through the magic of Prime shipping, I had the book in my hands the next day.

Continue reading Writing Solid Code

Passed 70-487

I’m so excited, because I just passed the 70-487 exam, “Developing Microsoft Azure and Web Services”. That means I have earned the designation of “Microsoft Certified Solutions Developer: Web Applications”. It’s been over two years since I started studying for my first exam, with a break in the middle. So, I am really proud of this achievement, and I think it really validates my experience.
Continue reading Passed 70-487

Portico API

Sidwell’s flagship web product, Portico, is growing in so many ways. In addition to maintaining the original Silverlight control, I’ve developed a mobile website, and I am about to develop a whole new application containing several “widgets” using the Web AppBuilder for ArcGIS. We also have an Advanced Print Preview and some custom reports that access the backend. Portico has become so much more than a website — it’s a development platform — and I certainly will not predict the next applications to be built on this platform. So, I decided the time has come to separate the traditional Portico website from it’s backend services, and deliver the backend through a new API.
Continue reading Portico API

Advanced Formatted Printing

Usually, folks brag about an exciting new feature they’ve implemented. In this case, I want to brag about how I was able to make an application smaller. Of course, a smaller application means less custom code that has to be maintained. I was able to reduce the application’s footprint by leveraging the new print services in the ArcGIS platform, and remove our custom print services. In the end, this move allowed me to take advantage of additional platform features to actually add functionality.
Continue reading Advanced Formatted Printing

Portico Mobile Website

Sidwell’s flagship web product, Portico, was originally developed when Silverlight was ESRI’s preferred web platform, and it provided a stunningly rich, smooth graphical experience at the time. Along with the impending demise of browser plugins, Silverlight will not run on most mobile devices. So, my first assignment at Sidwell was to provide an answer for a users who were asking “Why can’t I use this on my phone?”
Continue reading Portico Mobile Website

Passed 70-461

I passed the 70-461 exam on my first shot — “Querying SQL Server 2012”. I thought that the exam would be trivial, since I have so much experience, and the exam is called “Querying”. That’s partly true, but I learned some things that I should have known, and I learned some things specific to SQL Server 2012. In that sense, certification fulfilled the goal of improving my craft and staying current with technology.
Continue reading Passed 70-461

SQL Server Database Snapshots

A snapshot is an instant read-only copy of a database that can be queried or used as a restore point. You might take a snapshot before running any modification queries in production, or to give yourself a restore point when performing a deployment. Even in a sophisticated team, I’m certain that snapshots can solve an existing problem for every developer.
Continue reading SQL Server Database Snapshots

Index Fragmentation

Think of index fragmentation on SQL Server like hard drive fragmentation. Every time you edit a file, the computer stores pieces of the file all over the hard drive. Over time, this gets worse. Pretty soon, your computer has to jump all over the hard drive to find all the piece of a single file, and performance suffers. The same thing happens to indexes in a database. Every time somebody makes an insert, update or delete, the index becomes fragmented. Technically, the physical order of the index becomes increasingly different than the logical order. Pretty soon, the index needs to be rebuilt. This applies to clustered and nonclustered indexes.
Continue reading Index Fragmentation

Chained Selects in MVC4

Linked select boxes are a common requirement in line-of-business applications. Recently, I implemented the Chained Selects plugin for JQuery in an MVC4 LOB application, while utilizing two new MVC4 Helpers — HtmlHelper.IdFor and HtmlHelper.NameFor. The author of Chained Selects, Mika Tuupola, also wrote the Lazy Load plugin that I recently wrote about.
Continue reading Chained Selects in MVC4

Lazy Load in MVC4

Infinite Scrolling is a UX design pattern that can be used as an alternative to paging results. I used Mika Tuupola’a Lazy Load plugin for JQuery to implement this pattern in a photo database written using MVC4. This plugin allows efficient browsing of BLOBs being streamed from the database, without wasting server resources. In the article, I also point out the importance of using AnonymousObjectToHtmlAttributes to preserve HTML5 data-dash attributes.
Continue reading Lazy Load in MVC4

MARIS Meeting

I was in Washington, D.C., attending the meeting of the MARIS Steering Committee. The Multistate Aquatic Resources Information System is a compilation of fisheries data created by combining submissions from 23 states. Over the years, these meeting have fostered a lot of conversation around how to best manage a state’s fisheries data. Plus, the fish don’t stop at state lines, so why should the data?
Continue reading MARIS Meeting

Passed 70-486

I passed my 70-486 exam today. I would hope so, since this exam covers what I do all day, every day. This is called Developing ASP.NET 4.5 MVC Web Applications. Having already taken my first exam (70-480) a few weeks ago, I knew what to expect. I also knew the location of the testing center, how long it would take (two hours and thirty minutes through Denver’s rush hour traffic), etc. So, I was pretty relaxed.
Continue reading Passed 70-486