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.
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.
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
ArcMap, and the whole ArcGIS Desktop suite, are powerful tools for GIS professionals to use on their desktop computers. For them, there is simply nothing better than ArcGIS Desktop, including the new ArcGIS Pro. But, when creating a web app to access location-aware data, if it looks like ArcMap, then you’re doing it wrong.
Sidwell is excited to announce the upcoming release of a new generation of Portico. This release is currently in the hands of customers as a limited beta. That makes it a good time to reflect upon the road that led to Portico for HTML5.
The ArcGIS Web AppBuilder features a novel approach to inter-widget communication. This “event bus” which wraps Dojo’s eventing framework, has posed a few challenges for this developer. The following post describes a few tricks to help you “Get on the Bus”.
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
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
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
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
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
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
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
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
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
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
Continue reading Passed 70-480
There is a fundamental difference in the way Application Developers and GIS Analysts have traditionally approached their solutions. Unfortunately, those GIS deliverables can become quickly and dangerously outdated. But, as technology changes, traditional roles and workflows are changing, too.
Continue reading The Spatial Data Workflow