About Me

An experienced software engineer and solution provider.

I've been a professional software engineer for the past 20 years. I consider myself a tool-maker, someone who creates tools that make work (and life) easier for others. Let me know the problems you or your business face, the tedious things, the complex things, the things that seem like "there must be a better way", and I'll work with you to create automated tools to handle those things, so that you can focus on the real work that makes your business great.

  • Located in Bloomfield, NJ
  • 20 years professional experience
  • B.E. Mechanical Engineering, Philosophy minor
  • (Almost) M.E. Mechanical Engineering
  • Interested in contract work, 10 hr to 6+ month projects welcome

Services

  • Static Website development
  • Portal Website development, with tie-ins to a back-office database system and internal CRUD-style management application
  • Custom Javascript or CSS for your Bootstrap, WordPress, Squarespace, Wix, etc website
  • Web Services design, development, and integration
  • C# coding for your Unity-based game
  • Maintenance for your Perl applications and scripts, or help migrating them to something else
  • Database Schema design
  • Code/Database performance analysis and optimization
  • Refactoring and Data Migration of live systems

Most of my work involves websites in some way, but I'm a full-stack developer. My relationship with Surround Technologies allows me to use their Accelerator product to produce a full back-office enterprise-class system from your existing or newly-designed database, with a custom website and/or Customer Portal integrated within on the customer-facing front-end. These websites use Bootstrap and are fully-responsive, so they work well on everything from a smartphone to a large desktop monitor. The back-office management application can be either a WPF Windows desktop application or an ASP.Net MVC website. If you'd like your developers to work with Accelerator as well, you'll need to purchase a license and services from Surround Technologies. I'll work for you as a sub-contractor, and you'll also get access to the rest of Surround's team, our support site, and other benefits.

If a large-scale back-office/customer portal application project is not your thing, I can also help you with smaller tasks. I've been working with web technologies for a long time, so if you just need a little help getting a javascript plugin working, getting a web page to look the way you want, or getting a templated website up and running with a theme you like so that you only need to worry about adding content, I can do that for you.

I'm also a very experienced Perl programmer; more than half of my career was spent working on Perl backends and services for a large web application, Wolters Kluwer's OvidSP. Perl isn't in demand much anymore for new development, but there's a lot of legacy code out there still being used. If you need some part-time help maintaining a Perl application or set of scripts, or if you'd like to migrate them to a different language, or even if you'd like to develop something new in Perl, let's talk.

Portfolio

Surround Technologies

Surround Technologies

I've been a senior developer at Surround Technologies since Feb 2011. Surround's main product, Accelerator, is a framework and set of code-generation wizards for quickly creating fully-functional Line-of-Business applications based on an existing database schema. I've helped to develop and maintain the framework, contributed to the wizards (particularly for the web-based MVC generated applications), and I've also developed new features and applications as proofs-of-concept for later incorporation into the framework.

Surround also provides contracting services, assisting its customers to develop using Accelerator, or developing its customer's applications for them. Much of my time at Surround has been spent doing this kind of contract work; many of my projects are listed below. I continue to provide contracting services to Surround and Surround's customers, doing support, maintenance, and new development on their applications.

  • Tech Used: C#, Javascript, HTML5, CSS, LESS, ASP.Net MVC, WCF, WPF
  • Payment Processor Integrations: Forte, Stripe, Shift4
  • Social Integrations: Twitter, Facebook, YouTube, Twitch
  • Email Integrations: Mandrill/MailChimp, SendGrid, Gmail, SMTP, IMAP
  • Other Integrations: LiveChat
  • Major Features (developed or contributed to): CMS, Secure Messaging, Caching Subsystem, Aspect-Oriented Programming Method Hooking, WebDAV, Document Management, MVC Line of Business, Workflow, HR Job Board

SurroundTech Website
Accelerator CMS

Surround Technologies

The Accelerator Content Management System was designed to allow Accelerator customers, who are already making use of an Accelerator-based Enterprise Line-of-Business backend application, to be able to manage their website content using the same backend application. It pairs with an ASP.Net MVC website project, and extends MVC and Razor with new capabilities:

  • Gather a list of pages from the CMS database, which are available to the application in addition to the Controllers and Actions in the C# source code.
  • Render Bootstrap menu navigators and various slider controls based on those page lists.
  • Auto-generate URL routing rules for the CMS pages, using page metadata that is kept in the CMS alongside the HTML markup.
  • Auto-generate Sitemap pages (both HTML and XML) which includes SEO metadata.
  • CMS pages can be plain HTML, HTML with a set of custom data attribute-based macros for inserting content, or full Razor templates.
  • Allows Html.Partial() and related methods to reference Razor templates that are stored in the CMS under a Views hierarchy just like the one in the MVC project. This works in all directions: both the calling template and the inserted template can be in either the C# MVC project or the CMS content tree.
  • Each CMS website can have one or more Media Libraries associated with it, containing any kind of content that the website needs to expose. The content files are typically stored behind a WebDAV service, but a number of options are available.
  • A single Line-of-Business application can be used to manage multiple CMS websites, hosted by multiple MVC projects on multiple domains.
  • A single Line-of-Business application can manage multiple CMS websites on multiple domains using a single MVC deployment that's bound to the multiple domains. On each request, the Host header is checked to determine which domain is being accessed, and that's used to load the appropriate CMS content tree.
  • When multiple websites are being managed, they can each have their own Media Libraries, and they can also make use of shared Media Libraries.

The entire Surround Technologies website, as well as a number of other websites for Surround and Surround's customers, are using Accelerator CMS to manage their content.

SurroundTech Website

Wolters Kluwer Medical Research

Wolters Kluwer Medical Research is a major provider of electronic access to medical journals, books, and databases to most hospitals, research institutions, pharmaceutical companies, and medical schools around the world.

Technologies Used: Perl, HTML, CSS, Javascript, jQuery, C++, Solaris, Linux, Apache, Mod_Perl, XML, XSLT, C#, Java, WebLogic, Oracle, SQL, DBI, BerkeleyDB, SVN, Test Track Pro, CPAN

  • Lead architect, designer and implementer of OvidSP User Interface for over 13 years.
  • Lead or participated in all phases of software development lifecycle, including requirements gathering and analysis, product design, high-level technical design and estimation, low-level design, construction, testing, deployment, and maintenance.
  • Designed and implemented an automated HTTP log analysis and reporting system which parsed 6+ million log entries daily, generated extensive metrics, emailed daily detailed reports and daily, weekly, monthly, and annual summary reports to various mailing lists and maintained an online archive of all reports.
  • Designed transitional architecture for migrating Perl/C++ system over to C#/SharePoint platform. Developed a .NET library that allowed any .NET language to interact with existing Perl modules in the old system.
  • Helped to design hardware and software infrastructure for live production system, including high availability, fault-tolerance, and multiple regional data centers. Currently, this system supports 6-7 million HTTP requests per day for 300K daily sessions and 3K-5K concurrent users from all over the world.
  • Developed Software Development Lifecycle (SDLC) Best Practices guidelines for developers, and contributed to SDLC guidelines for Product Management, Project Management, Development, Quality Assurance, and Release Management.
  • Designed and implemented UI, internal RESTful service, and portions of content production stack for Books@Ovid product which added textbooks to WKH’s product line.
  • Designed an approach to implementing Nursing@Ovid product as a configurable switch on the OvidSP product. This allows both products to share 95% of the codebase and infrastructure and helps Nursing@Ovid to receive functionality upgrades whenever OvidSP does without separate/additional development and QA.
  • Designed and implemented multiple internal services to support the OvidSP application, including:
    • A very high-performance statistics gathering and recording service managing 20-30 million events per day.
    • A high-performance authentication and authorization service handling 1.2 million requests per day.
    • An XML content transformation and delivery service handling 25,000 textbook chapters per day (typically 50KB-400KB per chapter).
    • A multimedia service handling over 1 million image and PDF requests per day.
    • A RESTful API service (not widely used but capable of high load and sub-second response times).
    • A custom httpd server similar to but predating mod_perl, handling over 6 million requests per day.
    • All content-delivery services above are fully dynamic in order to enforce very strict content authorization rules and to insert user-specific enhancements into publisher-provided content.
  • For non-production use, designed and implemented various content development tools for XML/XSLT processing and numerous small command-line and web-based tools that support software development, project management, QA, and senior executives.

Read More @ Wolters KluwerScreenshotsOvidSP DemoOvidSP Tutorials Playlist

Side Projects

This Website

This website is also a demo of some fairly new technologies. It's been developed on the .NET 5 platform, as an ASP.Net MVC website project. The coding is done on a Windows 10 development machine using Visual Studio 2019, but it is deployed on an Ubuntu Linux server. During development, I can run the website on Windows out of Visual Studio for debugging, and when I'm happy with it I commit my changes to git and push to a shared repository. Next, I log into my Linux server through a terminal and run a bash script I've written which pulls from the git repository, uses dotnet to compile and publish a Release build of the website, copy it to my deployment folder, and restart the kestrel service which keeps the site running across reboots. The site itself is running on a localhost high port, and I've got an Apache server reverse-proxying requests from outside. This allows me to have other areas on my website as well which aren't handled by the Webb Industries website project, including a Debugging build of the website that I can use for testing responsiveness on a real mobile device.

Hacker News Reader

I read Hacker News pretty much every day, usually on my phone, and the interface has always been a problem. So over the years, I've written a number of wrappers to provide my own interface, first using screen-scraping and now using the official Hacker News API.

This is the latest iteration, written using Bootstrap 4 (Beta) for the GUI and a custom ASP.Net MVC Core 2.0 backend that uses System.Net.WebClient to talk directly to the Hacker News API. The API is pretty awful for a web API, which is why my client uses AJAX to retrieve all of the stories and comments individually and child comments have to be expanded and retrieved on-demand. There's caching behind all of that to reduce the number of API calls, and someday HTTP/2 will make the concurrent AJAX requests a little more reasonable, but for now, this is what it is. The API doesn't support any of the interactive features of Hacker News, so the "Hacker News" links on the right take you to the real GUI so you can vote, add replies, etc.

Browse Stories

SmartMVC.JS

Over the years I've looked at numerous Javascript Frameworks to see if they'd be useful in my projects, but each time I've opted not to use them. I believe their strength lies in not requiring or using a powerful server-side framework. In that situation, it makes sense to use a powerful client-side framework and to treat the server-side as a static content delivery system and data-access layer. But in my work I've always had a powerful server-side framework; since 2011 that's been ASP.Net MVC. I've developed an effective way of implementing the kind of highly responsive AJAX-based GUI that the popular Javascript Frameworks are known for while also integrating with and making full use of the ASP.Net MVC server-side framework.

My SharpMVC.JS project on GitHub is my attempt to extract my approach into a standalone library that can be used by others. There's actually not much code to it; the README and examples will probably make up most of the repository, documenting the approach and rationale. The repository is in a very early stage, but the code is usable today. In fact, it's essentially the same as I've used on this website for the Hacker News reader demo.

GitHub Repo

Surround Client Projects

Electric Utility Company

This power company's website portal was developed using the Accelerator CMS. Its public-facing pages include promotional and marketing materials, history of the company, newsletters and events, a system of alert banners used for storms and other notices, access to live power outage information and a Jobs Application system that we built as part of the Accelerator CMS.

We also supported user registration and login, which gave users access to the Portal side of the website. That's where we integrated the CMS with their Line of Business application, giving customers the ability to see their account information, past payments, current billing, and to sign up for various programs. This portal also made use of our Payment Processor integration, allowing users to pay their utility bills by credit card, debit card, or electronic check.

Another major component was integration with the Accelerator Workflow product. Many events in the website, including customer payments, support requests, outage reports, program signups, and so on, would initiate a Workflow that was assigned automatically to the proper customer service representatives. The service reps could take the necessary actions, including responding back to the customer. Previously, all of these activities required customers to call into the company's phone lines, which took longer to process and were only available during business hours.

Read More @ Surround

Iron and Metal Manufacturer

This client contracted with Surround Technologies to develop a large Line-of-Business application for managing their product and custom manufacturing sales. I took on one aspect: scheduling the movement of parts and materials around the shop floor and through manufacturing processes in order to produce custom-manufactured parts according to a pre-planned and pre-quoted schedule. This scheduling engine was also responsible for estimating when a new job could be completed, taking into account the existing workload in the shop, the processing steps for the different parts that had to be manufactured for the job, maintenance downtimes for the machines, and the work schedule for the machinists.

When I saw the requirements, I told them that a scheduling engine like this wasn't just an ordinary software project; it was worthy of a graduate-level research project and thesis. I happened to have direct experience with that: in graduate school I worked with a bunch of researchers and other graduate students who were doing the same thing, automated scheduling of the manufacture of injection molds and all of their component parts. I even published a paper about it.

To make the project feasible, the client and I decided to forgo perfection. They already had scheduling experts who were creating these schedules by hand, so the approach we took was to automate the heuristics they were using as much as possible, while keeping them in the loop to provide high-level guidance to the algorithm and to make adjustments to the schedules as-needed to fix things the algorithm missed. This approach has worked out well, and has made their schedulers much more productive. The ability to produce estimated schedules for quotes has also been fruitful. It initially allowed customer service representatives to turn around requests for quotes much more quickly, and in a follow-up project to create a Customer Portal customers are able to get an estimated date directly while they're putting together their order.

Read More @ Surround

Iron and Metal Manufacturer

After creating their Line-of-Business application, this client asked for Surround's help to create a Customer Portal website. Their sales reps were entering customer quotes manually, generating a PDF document, sending it to the customer, and then over the phone, email, or fax they were negotiating back and forth with the customer to make updates to the quote. When it was finally approved the quote was turned into an order within the Enterprise database system, which kicked off preparing existing stock for shipment and/or scheduling custom manufacturing. Along the way Invoice documents were created and emailed or faxed to the customer, who had to call the credit department to make payments.

The Customer Portal website streamlined this entire process by giving the customer the ability to self-service for most tasks, and to make communication easier. Once they register they can access lists of their existing Quotes, Orders, and Invoices. They can create and update quotes by selecting parts from product inventory or custom-manufacturing product lines, or they can re-order from a previous quote. They can request specific delivery dates which are verified against the live shipping schedule, and for custom manufactured jobs the Scheduling Engine provides estimated delivery dates. They can use the Accelerator Secure Messaging feature to send messages to their customer service representative about any quote, order, or invoice. Finally, they can make payments on invoices using credit cards or electronic checks, and see a history of past payments.

This Portal Website has been made available to customers in early 2017, and is currently in Phase 2 where we are adding more functionality to it based on both internal and customer feedback.

Tax Appraisal Company

This client contracted with Surround for a large Line-of-Business application to manage their industrial real estate business, and as a side-project they had me work on a Portal website, first to replace the portal they had for the property tax appraisals side of their business, and then for their main website.

Their website was built using the Accelerator CMS for most of the pages, which are just static website content. A few of the pages are driven by content in their enterprise database backend, so that the pages are updated in real-time when the business data changes. This shows the tight integration that's possible when using a CMS that's part of the same technology platform as your Line-of-Business application.

The website is also a Portal, allowing customers to register and link up with their account information that's already in the Enterprise backend database. Once logged in, some of the data on the public pages is customized based on their account role, and they can also access additional Portal-specific pages which provide information appropriate to their role. The portal also makes use of another Accelerator feature, Secure Messaging, which allows customers to send messages directly to their account representatives, including the ability to send and receive attachments such as appraisal reports.

Corporate / Portal Website

Tax Appraisal Company

This client hosts a portal website that allows property owners in a number of state counties to look up their property tax payment history, current taxes due, and to link to the payment providers that the county works with.

This website is paired with county-specific property appraisal search sites that the client hosts for the local government offices, and integrates with the same backend database system that those sites use.

Portal Website

Tax Appraisal Company

This client hosts websites for a number of local government offices which allow property owners to look up property appraisals, accept appraisals, or negotiate with county officials over discrepancies. The websites also offer some documents and materials for property owners that are common across the entire state, and county-specific content. Each county office can customize both the branding of its local website and the additional pages and content that the county's site offers.

These sites are all hosted by a single ASP.Net MVC website application running Accelerator CMS. I've made use of Accelerator's feature to check the domain name of the website that was requested and use that to choose a different set of website pages and a different media library. All of the pages that are common across the websites are standard ASP.Net MVC pages, providing search and display of database content accessed via Accelerator's CRUD and ORM system.

For maintaining website content, administrators in the local government offices have a desktop application they can run to access the management portion of the Accelerator CMS. The same application is used by all of the local offices, but based on their account they are restricted to accessing only their own website's content. The client's administrators have a different view which lets them see and manage content for all of the websites.

Bowie CentralLive OakRed River

Alcohol Distributor

This client is one of Surround Technologies' older clients, and the first significant Website Portal project I worked on for Surround. Before I joined Surround, an older version of Accelerator had been used to create a website using LANSA as the backend interface to a DB2 enterprise database, and Silverlight as the frontend platform for the website. My first task on the project was to migrate from Silverlight to MVC on the frontend, and to assist with migration of performance-critical portions of the backend from LANSA to Accelerator's C# ORM. Along the way, I also performed a major refactoring of the code base and implemented automated builds. The manual build processes and cross-dependencies in the codebase caused release deployments to sometimes take days to complete; once my cleanup was done a full rebuild and deployment could be done in just five minutes.

Read More @ Surround

B2B Software Developer

This client is a software provider for B2B businesses in the clothing industry. They use the Accelerator product to integrate with their backend Enterprise system, and also to create Portal websites for their customers. Typically these portal websites offer a clothing product catalog, user authentication and various user roles, shopping carts, and order management.

My role was to develop several Portal website frameworks that the client could customize for each of their clients. These Portal frameworks are extensively data-driven, with only minor styling changes needed to fit each client's branding images. Everything else, including product categories, product listings, pricing, users, and order management is driven by the backend Enterprise database.

Read More @ Surround

Shipping Company

This project was for a major shipping company that hired Surround to use the Accelerator product to modernize their dispatching system, which manages trucks moving goods between the company's port and regional customers.

One of my tasks on this project was integration between the dispatcher's application and the 3rd party data service they use, Xora. Xora provides a mobile application that's used by the truck drivers to track their position, report their time, manage their destination queue, and receive orders from the dispatchers. Xora provides software for the dispatchers as well, but it didn't integrate with the rest of the shipping company's system. My job was to develop a robust sync application that would transfer data between the shipping company's enterprise database and Xora's real-time data web service. This service captured all of the data that Xora collected, and also exported instructions from the dispatchers to the drivers.

My second task on the project was to produce a Google Maps control that could be embedded into the dispatcher's WPF application, hooking together the WPF MVVM event system with the Javascript API exposed by Google Maps. The map control allows WPF properties to be used to manage the map's position and zoom level, and exposed methods that could be used to place markers on the map. We used this to show the locations of all of the truck drivers, based on real-time data from the Xora sync feed. Dispatchers could click on a truck's marker to show details about the driver and the job they're working on; those click events originate in the Javascript code and passed over into the C# code to execute a WPF event handler method.

All of the Javascript/C# integration was developed generically, and has been used for embedding other HTML / Javascript controls into WPF applications. For example, the Accelerator CMS system includes a WYSIWYG html editor using an embedded web browser, and the editor's Javascript API is integrated with the WPF CMS application using a wrapper control and my Javascript/C# integration library.

Read More @ SurroundXora Web Services

Contact

The best way to contact me is using the form up in the header or by email to doug@webbindustries.com. Please provide a brief overview of the project you'd like me to help you with, and the best way to contact you to set up a call.