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
The agency I work for has not deployed ArcServer. But, our biologists really need to see their dots on a map, and they need to create dots on a map, to say nothing of some of the more complicated tasks like editing geometries and linear referencing. Installing ArcServer is outside of my control. So, to provide our biologists with the geospatial tools they required, I decided to build a spatial server into my application myself.
Continue reading GeoServices API Implementation
The Wildlife Division had five separate Access databases, accessible from only one location. Not only were the databases functioning poorly, they had also become a chokepoint in the workflow of one of the Game & Fish Department’s core functions. The project involved migrating these databases into a single subsystem of an existing ASP.NET MVC web application running on a SQL Server enterprise database.
Continue reading WGFD Wildlife Permitting
The Wyoming Game & Fish Department had an existing photo database that required enhancements. I rebuilt the system using ASP.NET MVC, and integrated it into an existing SQL Server enterprise database.
Continue reading WGFD Agency Photo Database
The WGFD Fish Division maintains a database of Streams and Lakes, the characteristics of the waters, the hydrologic boundaries, and also the species presence and abundance on all of those waters. This data is one the Division’s most critical assets, containing historical observations going back nearly 100 years. The data was originally stored on index cards, and later moved to an N-able database. Then, it was migrated to Access, and finally to SQL Server, .NET web application.
Continue reading WGFD Stream and Lake Database
For a criminal defense attorney, I developed a document management system to catalog large volumes of discovery. The system was built using PHP and MySQL. As Each piece of discovery is viewed and assigned keywords. Discovery could then be retrieved by keyword, saving a dramatic amounts of time during trial preparation. In very large, high profile cases, the system provided a competitive advantage that was instrumental in responding to otherwise impossible inquiries from attorneys.
Let’s Go… was founded to address the needs of individuals with developmental disabilities aged 15 and over. The mission of Let’s Go… was to facilitate the building of friendships, natural supports and connections between individuals with developmental disabilities and the community at large.
I developed the online presence and information management systems using PHP and MySQL. This included building the event management system, which used VoiceXML to interface with an IVR system, allowing customers to access event schedules without using a computer. This also included building the the photo sharing and carpool network subsystems.
Download: Let’s Go Brochure
Improving the Basic Skills of Students with Disabilities through Computer Based Instruction
This Action Research study considered computer-assisted instruction (CAI) as one possible tool to help answer the question “How can a classroom teacher provide extensive direct instruction given the wide range of skills encountered in a typical special education classroom?” The purpose of the study was to measure the effectiveness of the PLATO program in improving the basic math skills of students in special education Math classes.
Download: Action Research Paper
Download: Action Research Presentation
Implemented Pennies for Patients program through the Leukemia & Lymphoma Society. Students in the Consumer Math classes assisted in activities including promotion of the program, collection and counting of change, and celebration. Accomplishments included the following:
- Total school collection of $2003, exceeding goal of $500
- Recognized as one of the top 10 new schools in Wisconsin
- Created press release resulting in local television news featuring the school
Implemented service-learning project through the Milwaukee Teacher Education Center as part of the AmeriCorps program. Project components included:
- Four week classroom unit on Buying Food
- Field trip to the local supermarket to learn about shopping, nutrition, and employment.
- Field trip to a local shelter to learn about hunger, homelessness, and lifelong education
- Students purchases food items and donated them to the shelter
- Students used the city bus to practice independent transportation
NWMC was seeking a comprehensive website redesign, and HBI recommended a the Java-based Jahia CMS. The project involved graphic design, template development, and custom Java development in the members-only intranet. A key challenge was working with HBI’s design team to develop a look-and-feel that was pleasing to the client, and could also be deployed in a template-based CMS.
The CDA is a tool designed to decrease the existing gap between standards, assessments, and day-to-day classroom lessons using effective practices and technology-based mechanisms. The CDA is built with an open, layered architecture, with strict Model-View-Controller separation.
- Struts framework for View and Controller, Oracle database using Jakarta DBCP for Model
- Quarts job scheduler triggers nightly merge with enterprise data store
- Container-managed authentication for user/role based authorization
- JNDI parameters allowing system administrators to customize environment at deploy-time
- Automated test framework including JUnit and JUnitEE to perform unit and performance testing
- Ant build process to automate build, test and deploy activities
- Production system on Solaris with Apache, Tomcat and Oracle
- Designed and built a training program for nine trainees in web development with Java using the Struts framework. Trainees were assigned to MVC teams based on their performance in the program.
The Brennan Center for Justice required a searchable database of bibliographic references. The project involved data modelling, development, and data migration. Articles were searched by keyword, browsed by topic, or viewed in a printable version. A key challenge involved categorizing articles in an indefinite hierarchy of topics and subtopics. The project was built using PHP and MySQL.
reEmploy is a staffing and agency that allows key knowledge workers to return to their former employers after retirement. The project involved working with the client and a payroll agency to develop a business process model. All operations for time tracking, verification, payrolling, and invoicing were brought online through the system, which was built using object-oriented PHP and backed by a MySQL database.
Designed, built and deployed one-of-a-kind training system based on the “cafeteria of learning”.
- Student-centered, exercise-driven approach in which trainees move at their own pace, offering multiple pathways through the curriculum based on former client projects.
- Online self-quiz with tutorial response offers an additional method for students to assess their own learning, and then target weaknesses.
- Daily online journal encourages trainees to be reflective learners, and provide a communication conduit between staff and trainees, encouraging trainees to practice writing in general, and technical writing in particular.
Maintained an application written in Magic 5.6, using a Btrieve database, running on a Novell network. Wrote and executed unit, system and regression test scripts. Wrote technical documentation, user reference documentation, and release notes. Trained court personnel on new functionality.
- Built an online Ad Hoc query function to define and create custom reports on demand
- Designed an built a two-way electronic interface to a collection agency
- Built an electronic interface to report violations to the Department of Transportation
- Modified several online accounting programs to accommodate changing business rules
Completed a comprehensive 11-week Professional Development Program in Detroit, MI. Earned the highest possible rating, achieved by only 3% of program graduates.
- Developed several CICS programs for an integrated human resources system. The programs were executed through menu screens that were developed using BMS
- Developed a sample Automated Teller Machine using one large CICS program. Implemented a PIN security system and facilitated deposits, withdrawals, transfers and advances between checking, savings, credit and loan accounts using a single VSAM
- Developed two DB2 programs that read data from several DB2 tables, and created reports utilizing that data. Used SPUFI and DCLGEN to assist in developing DB2 commands as needed
- Coded, tested, debugged, and documented a sample customer information reports program. Wrote the program in structured COBOL using TSO/ISPF and QSAM flat files. The report tracked orders and customer information.
Developed and optimized velocity prediction models of a 30-foot sport boat. Used Maple to facilitate creation of nonlinear, polynomial regression models. Transformed visual representation to Cartesian, Polar and Cylindrical coordinates. Used Visual Basic 5.0 to build a simulation application, allowing the models to be tested under realistic conditions. Implemented stochastic methods to simulate wind speed.