Custom Full-Text and Semantic Search Engine (Development)
In five months as the primary developer/architect (coded 95% of it), architected a search engine and learned client’s semantic technology to create a completely new search engine for a new online medical journal platform. The first implementation of the search engine was for the Journal of Bone and Joint Surgery. This platform search engine will be used at the basis for the new search engine of the journals of the American Medical Association and numerous other medical journals.
Development included three distinct applications: an export tool to prepare content for searching, a WCF search service and a search client implemented within an ASP.Net web application.
The export tool leveraged parallel processing and sophisticated SQL Server stored procedures to process and export content which was could be searched by the search service.
The search service was constructed using a highly modular structure inspired by Windows Workflow Foundation 4.0. The service support client customization through hot-pluggable modules which enable custom filtering, ranking and other search activities.
The client portion made use of a JSON enabled WCF service to power a fully Ajax enabled search results page.
The search engine used three methods for searching content. Full-title search which was achieved through an innovative MD5-hashing process which allow for extremely fast full-title matching. The second method used the client semantic platform to return semantically relevant search results. The final method used Windows Search 4.0 to provide full-text search of prepared content.
SQL Editor Tool (Development)
An application I created for nTelos to allow their application support employees to execute custom SQL statements in a controlled and monitored environment with safeguards to protect against undesired mass database changes. To complete the project, I performed technical analysis and wrote a detailed technical specification outlining the project requirements, goals and implementation strategy. I coded a web-based SQL editor that controlled and monitored the execution of dynamic, user-entered SQL Server queries in a production environment. As part of the UI, I implemented editor syntax highlighting using the CodeMirror component. To support the highlighting we needed, I created a custom highlighting scheme and a custom Knockout.js binding.
In order to protect against mass unintended data changes, I found a third party SQL Parser component that I used to parse the modification query (which could include multiple modification query statements) into individual modification query statements where the user was required to specify the expected number of affected records for each individual statement. The tool then executed the queries in review mode before final execution to verify the expected affected number for each parsed statement against the actual affected number for each statement. This was accomplished through injecting SQL control and logging code into the dynamic SQL between each parsed modification query statement.
To protect against data lost the user is required to enter a data verification query which runs before and after the modification query. The results of the verification query are logged before and after the modification query as well as displayed to the user. The challenge here was that the data verification query could return multiple result sets therefore KendoUI HTML grids, Dynamic C# and JSON via the Web API were used to produce a before/after grid for a variable number of parsed SQL verification query statements from the larger verification query entered by the user. The result sets were also stored as XML within SQL server for audit purposes. To accomplish XML/JSON serialization of the result sets custom serialization was written to serialize dynamic objects which the result sets were stored in. Extensive logging and error handling was performed in C# and SQL before the parsed modification queries were executed, as well as during execution and post execution.
Using Bootstrap, I implemented a Responsive Web Design to take advantage of very large desktop monitors and still allow the application to be very usable with smaller screens. After the initial page load, the application executed all data transactions with the server through MVC 4 Web API via JSON, no additional full page loads were initiated.
Faxed Claim Image Viewer (Development)
Delta Dental of Virginia needed an application to manually process images of faxed dental claims. The faxed claims would be delivered with multiple claims batched together in single TIFF files. They needed the ability to open each TIFF file, view the pages, group the pages into claims (each claim could be multiple pages) and mark unneeded pages as junk then save all of the grouped claims out as individual claim multiple page TIFF files. According to requirements, I architected and coded a new multi-user Windows Forms application to view, sort and export the faxed claim images. The application used custom events to keep the underlying data and UI elements in sync. Because of limitations inherent in the .NET Image Libraries, I utilized the FreeImage Library to load multi-page TIFF files then provided image manipulation tools to sort, rotate, classify and group pages within the TIFF file and then exported those pages as separated TIFF files based upon their grouping. The UI allowed the user to select, drag, and drop TIFF pages to re-order the pages as part of the classifying and grouping process. To integrate the viewer with existing systems, I updated the DCS2000 data entry module to handle faxed claims processed by the viewer. Updates included modifying the user interface, extensive C# and PL/SQL modifications affecting significant areas of batch automation. Finally, I wrote a custom PL/SQL routine to generate unique claim numbers for faxed claims which would not collide with various instances of DCS2000.
SalesForce.com Bulk Data Entry (Development)
Architected and coded an ASP.Net AJAX application utilizing Telerik’s RadGrid control to provide a keyboard efficient line-item data entry tool for real-time updates to SalesForce.com. The RadGrid was dynamically created based upon XML configuration files and pushed/pulled data in real-time to/from SalesForce.com via a standard web services interface. The XML configuration process utilized LinqToXML. The RadGrid was configured to support a variety of column control types that conform to SalesForce.com data types including dates, formatted numbers, and drop downs. The values for the drop downs were loaded from SalesForce.com. Using jQuery, the RadGrid was keyboard enabled to allow the user to insert, update and delete records without the use of a keyboard. (The keyboard capabilities were demonstrated and explained at the 2010 DevLink Conference in Nashville, TN). To speed up the grid, all data was cached as appropriate and custom grid commands were written to perform multiple operations in one AJAX call rather than one operation per call. A case study co-branded with Microsoft and Telerik was written about this project by an independent firm and the study was largely paid for by Microsoft. Telerik posted an adaptation of this case study on their public web site.
Advanced Clinical (Development)
Give Camps (Development)
Business Analyst & Lead Software Developer
2010 New England GiveCamp - Respond, Inc
Donated my time to help Respond, Inc. develop a new web site at the June 2010, New England GiveCamp. I worked with 3 other developers and the staff at Respond before the GiveCamp and at the GiveCamp to produce a new web site which would allow them to better serve victims of domestic violence.
Team Lead and Lead Developer
2013 Southern Maryland GiveCamp - A Community That Cares
Donated my time and expertise to work with ACTS (A Community that Cares) of Southern Maryland to migrate their old one page web site to a new Orchard CMS based web site that allows them to update their content through a web browser as well as manage their equipment and volunteer lists online. ACTS is a non-profit organizations who loans out medical equipment for those in need.
Team Lead and Developer
2010 Southern Maryland GiveCamp - Citizens' Advisory Committee for Special Education of Southern Maryland
In March 2010, I attended the Southern Maryland GiveCamp where I had the opportunity to develop a web site for the Citizens' Advisory Committee for Special Education of Southern Maryland. It was a real honor to assist this organization in their efforts to help families whose children have special education needs.
Business Analyst & Lead Software Developer
2011 Charlotte GiveCamp - Literacy Council of Union County
Team Lead and Developer
2010 Philadelphia GiveCamp - North Philadelphia Health System
Video Player SharePoint Web Part (Other amazing things)
Designed and coded a SharePoint web part to play videos on any of the popular web browsers (pre-HTML5). The player supported several file formats and would display the appropriate player depending upon the video file specified. The web part auto-detected the video file type as well as loaded meta-data about the video to perform dynamic sizing for the player. The web part automatically sizes the web player based upon the size of the client browser both on initial load and after browser resizing. This dynamic resizing especially within a SharePoint web part was unique in the marketplace at the time.
ASP.NET MVC 4 w/ Entity Framework on Linux Nginx Web Server (Other amazing things)
For a fun and challenging project I wanted to run ASP.NET MVC without using Windows either for development or hosting. Using the Mono Project, Xamarin Studio, a Mac for development, and a Linux web server, I was able to build and deploy a very basic ASP.NET MVC 4 application to a Linux server. The application utilized the Entity Framework to connect to a PostgreSQL database.
For development, I used Xamarin Studio with the NuGet package extension. I created the MVC 4 application, installed the NuGet packages and had it connect to the database. I then compiled it and deployed it to the server running CentOS, Nginx, PostgreSQL and Mono running over FastCGI. After doing some configuration and tweaking the application ran as expected. It was really cool to build a .NET application which did not depend upon Windows.
.NET Speaking Engagements (Other amazing things)
I have spoken at numerous software developer community events:
Spring 2010 - Pittsburgh Code Camp - Topic: Sitefinity
Spring 2010 - Richmond Code Camp - Topic: Sitefinity
Summer 2010 - DevLink - Topics: Expression Trees & Keyboard Enabled Web Apps
Winter 2011 - Richmond .NET User Group - Topic: Windows Workflow
Spring 2011 - Charlottesville .NET User Group - Topic: Windows Search 4.0
Spring 2011 - Roanoke .NET User Group - Topic: Windows Server App Fabric
Fall 2011 - Northern Virginia Code Camp - Topic: MonoTouch
Winter 2013 - Richmond .NET User Group - Topics: Bootstrap/WebAPI/KnockoutJS/LessCSS
Winter 2013 - Roanoke Code Camp - Topic: CoffeeScript
AngularJS Tutorial: Demystifying Custom Directives (Publication)
One of the most capable, extensible and popular front-end frameworks is AngularJS, and one of the most useful components of the AngularJS framework is something called a directive. In this article, the four functions that execute as a directive is created and applied to the DOM will be explored.