OCT 212016 Self-Upgrading Packages in BOSH Releases, Part 2 A strategy for upgrading and testing dependencies for self-sustaining packages. OCT 192016 Data Processing with Concourse Scheduling data extracts, transforms, and loads through containers. APR 262016 Composing Configurations with JQ Alternative methods for manifests needing more than simple variable replacements. JAN 212016 Writing a PHP Client for the Ravelry API Open sourcing a library to consume the knitting-oriented API. JAN 112016 Experimenting with BOSH Links and Consul Integrating consul and links metadata for inter-deployment service dependencies. NOV 122015 Tempore limites: BOSH Veneer Experimenting with a browser frontend to working with BOSH. AUG 062015 Pruning Blobs from BOSH Releases Avoiding unnecessary disk usage for old, unneeded package files. AUG 032015 Self-Upgrading Packages in BOSH Releases A strategy for monitoring upstream dependencies for self-sustaining packages. JUN 202015 Using nginx to Reverse Proxy and Cache S3 Objects Using S3 as an upstream server for improving long-tail traffic. JUN 032015 New BOSH Release for OpenVPN Open sourcing a new BOSH release for managing an OpenVPN network. MAY 012015 Parsing Microdata in PHP Open sourcing a library to easily traverse HTML for microdata. FEB 212015 Sending Work from a Web Application to Desktop Applications Using queues and PHP to automate third-party applications running on staff workstations. NOV 142014 Logging logging and Finding Bottlenecks Some ways logsearch is measuring its own performance with the elasticsearch+logstash+kibana stack. SEP 282014 Colorado Aspens A non-technical post with pictures of the changing Aspens in Colorado. SEP 172014 Simplifying My BOSH-related Workflows Discussing some commands and wrappers I've been adding on top of BOSH. APR 242014 Search by Color with Elasticsearch Some mappings, strategies, and queries for advanced color searching with elasticsearch. APR 082014 Photo Galleries for Jekyll Easily exporting my iPhoto album to this Jekyll-based site. FEB 282014 Distributed Docker Containers A strategy for integrating Docker services across multiple hosts and data centers. JAN 132014 Barcoding Inventory with QR Codes A web-centric, user-friendly approach for using barcodes in a retail shop. JUN 012013 The Basics of a Custom Search Engine Combining elasticsearch and "structured data" to create a self-hosted search engine. MAY 162013 ti-debug: For Debugging Server Code in the Browser Making it easier to debug languages like PHP and Python with only a browser. MAY 132013 Structured Data with schema.org Ensuring content is useful to both humans and robots. MAY 072013 Embeddable and Context-Aware Web Pages Embedding content in an absolutely relative manner. APR 272013 New Website for The Loopy Ewe A summary of the customer-facing changes I worked on for the site. MAR 232013 Bank Card Readers for Web Applications Scanning credit cards into website forms. MAR 152013 Using HTML Headers with wkhtmltopdf Experimenting with dynamic HTML headers for PDFs. MAR 072013 Comparing PHP Application Definitions Identifying how classes/interfaces changed between versions. MAR 052013 Path-based tmpfile in PHP When paths are more useful than resources. MAR 012013 A Generic Storage Interface Abstracting file storage, whether it's local or cloud. FEB 192013 Using Facter in Ant Scripts Reusing facts from build scripts. FEB 082013 Automating Backups to the Cloud Combining gpg, Amazon S3 and IAM policies. JAN 282013 Scripting Endicia to Purchase Postage Automating user interactions with AppleScript. JAN 212013 OpenGrok CLI Making it easier to search code from the command line. JAN 142013 Terminating Gearman Workers in PHP Locally and remotely stopping workers without interrupting jobs. JAN 072013 Secure Git Repositories Seamless data encryption of repository files.