Thoughts

I write mostly about tools I like, projects I'm working on, and things that are puzzling me. Here are some of my recent pieces.

Animating Maps by Centroid Sorting

One of my favorite flourishes when creating new maps is to animate in the individual SVG paths for the areal unit I'm using, be that a state, province, county, or U.S. House District. It gives a pleasant unfolding effect to the experience, a way to settle a map reader into the story you're trying to tell.

JavaScriptJavaScript
D3D3
ObservableObservable

Nov. 2, 2020

Reflections on Renature

The end of January brought with it the conclusion of Formidable's first open source Fellowship. In just six weeks' time, Parker Ziegler brought our new physics-based animation library, renature , to life. To read more about the project, check out the introductory post , the technical deep dive , and our new docs site . You can also install v0.1.0 of renature from NPM today, and check out the source on GitHub.

TypeScriptTypeScript
ReactReact
Animation

Feb. 6, 2020

Building Physics-Based Animations with Renature

Three weeks ago , we at Formidable unveiled an exciting open source project we've been working on as part of our OSS Fellowship Program – Renature . renature is a physics-based animation library for React focused on building delightful UI animations using natural world forces like gravity, friction, and fluid resistance.

TypeScriptTypeScript
ReactReact
Animation

Jan. 20, 2020

Introducing Renature: Experimenting with Physics for UI Animation

At the beginning of December Formidable kicked off its inaugural open source fellowship . The Fellowship Program gives one employee per quarter the opportunity to pursue a novel technical idea, full-time, over the course of six weeks. The shape this idea takes is left up to the selected applicant; it can be a new open source library, a design tool like our stunning UX Deck , or technical writing that explores new practices in our ever-evolving field.

TypeScriptTypeScript
ReactReact
Animation

Dec. 18, 2019

End to End Testing React Applications with Cypress

Cypress has been creating a lot of buzz in the JavaScript ecosystem recently, promising a simple yet powerful API for writing integration and end-to-end tests. With an open source core written in JavaScript, you can test anything that runs in a browser, regardless of language or framework (think Reason, WASM, or Svelte). Cypress is unique in that it operates in the same run-loop as your application—client code and test code are embedded in separate iframes right next to each other and communicate over websockets. Pretty clever!

⚠️Testing
TypeScriptTypeScript
ReactReact
CypressCypress

May 20, 2019

Mapping in React and D3

A lot of folks today are talking about React , the Javascript framework that lets you build performant apps and UIs quickly and efficiently. I use React almost everyday at my job and in my own open source projects, often pairing it with Redux for state management.

JavaScriptJavaScript
ReactReact
D3D3
🗺️GIS

Aug. 29, 2017

Building Interactive D3 Dashboards with Carto Web Maps

Dashboards are all the rage these days. The talented folks at Stamen and Tableau have shown just how powerful a well-designed dashboard can be for integrating statistical and geospatial stories on a single web page. I wanted to see if I could emulate their work in an interactive web application I’ve been developing for Transportation Alternatives that explores correlations between traffic crashes and poverty in New York City. But rather than using ready-made software like Tableau, I wanted to build and design the application through code using two powerful open-source tools – CARTO and D3 . This post will go through the design process I used for building my dashboard, highlighting some of the key pieces of code needed to get CARTO and D3 talking to one another.

JavaScriptJavaScript
D3D3
CARTOCARTO
🗺️GIS

Sept. 26, 2016

Using NAIP Imagery and a Texture Raster to Model the Urban Forest

As high-resolution satellite imagery becomes more accessible by the day, geographers, urban planners, and ecologists have begun to explore its potential for modeling the urban forest . However, attempts at precise urban canopy classifications often run into a few predictable problems. 30m or even 15m resolution still cannot model individual street trees or isolated stands. Classification algorithms confuse grass and other scrubby vegetation for the canopy. Shadows cast by adjacent trees affect spectral returns, leading to further misclassification. In short, mapping the urban forest in an accurate, detailed, and inexpensive way remains a challenge.

🗺️GIS

Sept. 14, 2016

Building a Map of Eviction in San Francisco with CartoDB.js

Throughout this semester, through all of the small victories and the frustrations and the beautiful journey of self-directed learning, I've always had one key goal at the front of my mind – make a map, exclusively through code, that I believe in. This has become a more and more difficult challenge for me as I've expanded my cartographic skills and interests into different realms and more complex politics. I have come to expect more of myself, both in terms of the design and the aesthetics of my maps as well as the epistemologies and methodologies that underlie them. I don't know if I would necessarily go so far as to call all of my maps "lies" (as Monmonier might), but, in practicing self-reflexivity in my cartographic design process, I have learned that they are certainly far from being objective "truth". Maps reflect their creators' perspectives and views of the world; not only that, they channel particular ways of viewing, seeing, engaging with, and understanding the world that are dependent on the tools used to make them. That will always be the map's limitation. But rather than seeing maps only for their limitations, for their role as imperfect representations of a world that is inherently messy and complex, perhaps we can think of them differently – as individual experiences and expressions that can have meaning for others beyond the cartographer. Pieces of art that can inspire. Beautiful data that can inform. Little worlds unto themselves.

JavaScriptJavaScript
CARTOCARTO
🗺️GIS

May 20, 2016

Help Professor Holler Build an Interactive Map for the Zuni Youth Enrichment Project (ZYEP)

Anyone familiar with the contemporary cartographic landscape knows that the climate is shifting swiftly away from the static and towards the interactive. People want maps they can play with, maps that are responsive to user needs, and maps that can be accessed with nothing more than an internet connection and a few directed search terms. Particularly for those seeking to create a community resource (or just something that folks can access on the go) a web map is a good design choice.

JavaScriptJavaScript
🗺️GIS

May 4, 2016

Presenting at the Middlebury Spring Symposium

After the high of AAG, I came back to Middlebury reinvigorated and excited to get back to work with coding. Learning Python scripting in a matter of five weeks, producing a hard coded script to solve a real-world problem, creating an abstracted geoprocessing tool for broader application, and writing my first piece of documentation all felt like significant achievements in such a short amount of time. I wanted to keep the rhythm going, to dive further into PostgreSQL and PostGIS, Javascript, interactive cartography, spatial databases, and the whole slew of crazy plans I dreamt up for myself for the rest of my semester. But before I did that, I felt it was important to share the experiences of this first half with my peers.

🗣️Speaking

Apr. 18, 2016

Presenting at the American Association of Geographers (AAG) Annual Conference

The research process can so often feel like a solitary experience. Particularly working in the realm of technical geospatial applications and assorted programming languages, I often find myself deep down the rabbit hole, following links on endless Stack Exchange and Github pages to their very ends. And while I enjoy this process – the careful search for a technique or a block of code or an idea that will help me solve my problems – I have also noticed how it has brought me further from the original purpose of my research. From the beginning, I have wanted my work to serve as a pedagogical tool, a framework for how we might go about teaching GIS and cartography with a keener eye to the role of both code and critical feminist theory in this learning process. And in order to do that, I needed to take an important step during this, the middle of my semester – presenting my work.

🗣️Speaking

Apr. 4, 2016

Writing Documentation for the AWR Custom Tool

Having created a custom Python geoprocessing tool to automate the process of areal-weighted reaggregation (AWR), my next task was to write documentation articulating how the tool actually works. Documentation is obviously a critical part of development – without it, the tools we create can't readily be accessed by others. These things we've poured our heart and soul into have no broader application in the world.

PythonPython
🗺️GIS

Mar. 24, 2016

Creating Custom Geoprocessing Tools with Python Scripts

While I think many GIS analysts cherish Python for its ability to automate large-scale geoprocessing tasks and do a lot of the heavy lifting when it comes to data management, I find that its true creative power lies in creating custom geoprocessing scripts. So just to back up for a moment, we know that all GIS applications are based on the idea of passing spatial files (i.e. shapefiles, rasters, feature classes) through script tools that do something to these files. These scripts, nowadays, are often written in Python, especially after Esri began writing all of their tools in this language. For most GIS users, however, script tools operate almost like a black box – files are passed into them and new files pop out. While we all have an understanding of what the input needs to look like and what the output should look like, what happens in the middle actually remains fairly opaque. This obscurity was something that initially frustrated me when I first began using GIS. I wanted to know more about what was actually going on "under the hood" and to be able to manipulate that process to make different things happen.

PythonPython
🗺️GIS

Mar. 16, 2016

Python Scripting for Automated Geoprocessing

When I first developed the syllabus for my senior research, I spent a lot of time asking fellow GIS students, professors, and analysts where they thought I should begin my study. And nearly everyone gave me the same answer – Python scripting.

PythonPython
🗺️GIS

Feb. 26, 2016