Data Over Software

One of the first tasks I ever had in my then-new GIS career was doing AML development in ARC/INFO 6.x for a data production project. My code parsed DXF exported from AutoCAD R11 for DOS and then assigned attributes based on things like layer, color, line weight, feature type, and others. It also georeferenced the data based on tic marks captured in AutoCAD. The end result was multiple ARC/INFO coverages that were fully populated from data templates based on the AutoCAD characteristics. From there, QA analysts tailored the data from defaults, if necessary.

After that, I did a lot of work in AML to build a cartographic production system for a water utility. That had me building a GUI using ARC/INFO forms and developing customized editing tools with ArcEdit in ArcPlot mode.

As you can imagine, I dug deeply into AML. I learned a lot about GIS – in which I had no formal training. Because AML essentially batched the same commands the analysts used at the command line, all of this development made me quite proficient with ARC/INFO. Those were fun times. Because I needed to learn GIS, this period had a lot of value for me.

As a software developer, however, there was a big drawback that is evident in the full name of AML – Arc Macro Language. All of the time and effort I was investing into building proficiency in AML was usable in exactly one place. The same was true when ArcView came along with its proprietary object-oriented language, Avenue.

Read more

Changes In Latitudes…

Last week was a good week. Given that I was on vacation with my family in Florida, that statement is pretty much a given, but it was still of note. This vacation was our annual week in South Florida at a timeshare we’ve had for years. I have often worked some portion of the week when we’ve gone and I did the same this time. Since I’ve been doing independent consulting, I tend to be hyper-vigilant about time off versus time working. I can’t spend hours on end at the beach without turning into a lobster, so I got in some work during my time back at the room.

I have worked from home for seven years, but have recently gotten more in touch with the value of a periodic change of venue – whether that’s going to a WeWork up in the city or a coffee shop closer to home. It’s a good mental jolt to change my surroundings and have a little background noise. In our post-pandemic world, I think a hybrid work arrangement would be ideal for me. Last week helped solidify that.

Read more

Balancing Organizational Controls and Technical Controls in Data

Technical Controls – The security controls (i.e., safeguards or countermeasures) for an information system that are primarily implemented and executed by the information system through mechanisms contained in the hardware, software, or firmware components of the system.

Organizational Controls – The security controls (i.e., safeguards or countermeasures) for an information system that primarily are implemented and executed by people (as opposed to systems).

NIST-800

The definitions above come from the glossary of the NIST-800 series of cybersecurity publications. While they are focused on cybersecurity, the broader concepts – automated controls versus manual controls – are applicable elsewhere. Over the last couple of weeks, and especially since I attended the TUgis conference, I have been thinking about these concepts in terms of data in general and schema in particular.

I find schema to be an interesting concept. The term “schema” is fairly wide-ranging in its definition but it can be defined as “an underlying organizational pattern or structure; conceptual framework.”

Read more

TUgis Wrap-Up

Earlier this month, I attended TUgis, Maryland’s annual GIS conference. It was my first time attending since I gave the keynote address in 2017. That was due primarily to the conference being moved to early August – a reasonable adjustment due to the fact that the venue is always Towson University and the new timeframe takes advantage of the fact that students are still away on break. That timeframe also happens to usually coincide with my family’s annual vacation. The other reason for my long absence was the pandemic.

This year, the conference occurred right before our vacation, so I was able to squeeze it in – though I had to leave halfway through the second day to finish travel preparations. For me, the conference was a chance to catch up with a number of people I hadn’t seen in quite a while – all of whom I mentioned over on LinkedIn. I especially enjoyed catching up with a couple of my former Fulcrum co-workers whom I had worked with for my entire tenure there. Those were exceptionally meaningful years for me and I feel like we grew a lot together.

As for the conference itself, I attended the public safety special interest group and a few other sessions. As a recovering programmer, it’s always interesting to see the software solutions people develop – either from scratch or customizing some other software. At TUgis, that other software tends to be some form of Esri application, though there were a few mentions of open-source tools as well.

Read more

A Few Updates to pg_webhooks

At the time of my last post, there were a few outstanding issues that I wanted to address in the code of pg_webhooks. I’ve addressed three of them this week. There wasn’t actually a route to unsubscribe from a channel, so I added that shortly after the initial release. Another key shortcoming was that the … Read more

A Simple Webhook Interface for PostgreSQL NOTIFY

PostgreSQL’s NOTIFY/LISTEN method for subscribing to events from a database is a subject I return to periodically. I’ve touched on it in one form or another over several years. My latest run at it involves building a Node Express application that will allow external systems to subscribe to webhooks that are fired by NOTIFY statements from PostgreSQL.

I was prompted to do this by a number of factors. First, I have stepped back into the consulting world and find myself doing much more coding and technical work than I had been doing in my previous role. Some of my current work has involved building and optimizing data workflows and have been using database triggers in key parts of it. In my previous role, webhooks figured prominently into data integration tasks among various SaaS platforms. Finally, I simply wanted start a new coding project.

Read more

New Directions

Since the first of the year, I’ve been on my own. After considering a number of really compelling job offers, I decided to start my own company and take a contract position with company doing work that’s meaningful to me (more on that in the future). I’m also picking back up with some GIS work … Read more

Stripe API Pagination in FME

I few weeks ago, I described an integration I built to pull data from the Stripe via its API and load it into BigQuery. There were two main problems with this approach: First, it was incredibly hacky – a Wile E. Coyote approach to the problem involving cron jobs and EC2 instances and GCS uploads and scheduled jobs in BigQuery. It got the job done, but in a way that was slightly embarrassing. Second, everything else we did was leveraging FME and this stood outside of that pattern.

I really wanted to bring this process into the FME fold, but I needed to tackle Stripe’s API pagination in order to do it. Most of Stripe’s helper libraries have an auto-pagination feature that allows you to keep loading objects until you reach the end. This feature is not available if you are using the raw Stripe REST API, which is essentially all that is available to FME via the HTTPCaller transformer.

Stripe’s API uses cursor-based pagination, meaning that it points to the ID of the next object to read in the dataset. Luckily, Safe Software has an article that describes how to handle cursor-based pagination. This article is that it uses the Slack API as an example. The Slack API is well designed and returns everything you need to handle pagination in one place in the response document, but this isn’t the case with Stripe’s API so I had to modify the approach somewhat.

Read more

Organizational Muscle Memory

I’ve had plenty of opportunity to tell my “story” lately. After my initial post that my current position is ending, there has been a pleasantly surprising amount of interest and activity. Others have told me that I shouldn’t be surprised, but I feel like I’ve been fairly heads-down the past six years so it was … Read more

Turning the Page

It is rare that I use my blog to explicitly blow my own horn. I prefer to write about technology, leadership, and the good works of others, but I find myself in different circumstances now. I learned this week that my current position will be eliminated as of 31 December, 2022. After that, I will be available for my next role. Until then, I am actively looking in addition to winding things down where I am now.

Regarding my next role, I have taken nothing off the table. I am open to consulting engagements or full-time positions. I am also considering starting my own company, which would be a consulting firm with the intent to grow rather than remaining a one-person outfit. I am writing this post because LinkedIn profiles and one-page CVs rarely paint a complete picture, so this is a companion piece that is intended to fill in the gaps.

I have been in my current position for nearly six years. Given the size of the company, it has been a mix of leadership and hands-on technical work. Since we have always been eyeing growth, I skewed toward leadership, because it is important for a company to avoid single-threading functions through individual people as much as possible.

Read more