Archives
-
02/24/2019: A Mailserver on Ubuntu 18.04: Postfix, Dovecot, MySQL
-
12/31/2018: Set Up a Small Lab Earlier Rather than Later, it Will Pay Back the Investment
-
11/10/2018: Hire a Scientist or Two Before Your Biotechnology Startup Engages a CRO
-
10/07/2018: In Biotech Development, Initial Setup is Always the Slow and Expensive Part
-
09/07/2018: Life Science Development as an Unending Comedy of Delays
-
08/25/2018: Delay the Scientific Advisory Board
-
06/10/2018: The Nebulous Space Between Proof by Contradiction and Occam's Razor
-
04/11/2018: Penetrating the Mysteries
-
03/18/2018: Elasticsearch: Adjusting Merge Settings to Make Frequent Updates Less Painful
-
02/17/2018: The Easiest Javascript Modal for Administrative Pages in WordPress 4.*
-
02/03/2018: The Arrangement of Bits
-
01/19/2018: WordPress: Moving Expensive Per-Post Operations into a Cron Task
-
01/11/2018: Building an Options Page for a WordPress 4.* Plugin
-
12/11/2017: High Offset Queries are Expensive in Elasticsearch
-
12/03/2017: Causes of Elasticsearch Performance Degradation Over Time
-
11/05/2017: A Recipe for Routing Wireless Network Traffic via a Personal VPN
-
11/01/2017: Deploying Streisand from a Configuration File, without Prompts
-
10/22/2017: Ansible: Prompt for a Variable Only if it is Not Already Set
-
10/14/2017: In Search of the Spark when Interviewing
-
09/10/2017: An Approach to the Optimization of an Expensive Elasticsearch Sorted Query
-
09/09/2017: Socket and Stream Errors can be Annoyingly Non-Specific
-
08/20/2017: Considering the Use of Flynn
-
07/22/2017: Carefully Assess the Cost when Splitting Data into Multiple Elasticsearch Clusters
-
07/08/2017: More Lessons from Working with Elasticsearch at Scale
-
06/02/2017: Simpler Forms of Harmful Regular Expression
-
06/01/2017: Preventing Unbounded Regular Expression Operations in Java
-
05/17/2017: Using a Standalone Elastic File System with EC2 Instances
-
05/14/2017: Copying AMIs with Tags and Launch Permissions
-
04/23/2017: Blind Upon the Eve of Apotheosis
-
03/12/2017: Failing to Use example.com in Examples is Just Asking for Trouble
-
02/20/2017: A Reasonable 80/20 Approach to Personal Data Security
-
02/04/2017: Ransom, Patronage, and Self-Delusion
-
01/21/2017: Processing S3 Inventory Data in Node.js
-
01/01/2017: Periodically Reassess JVM Optimization for Significant Java Applications
-
12/10/2016: Adding an S3 Inventory to Every Bucket in an AWS Account via the API
-
12/04/2016: Reader View in Firefox and Safari for Multiple Articles on the Same Page
-
11/20/2016: Analyzing the Contents of Very Large S3 Buckets
-
11/05/2016: The Low Road for Integration with a WordPress Site
-
10/22/2016: Throwing Hardware at the Problem is a Perfectly Respectable Solution
-
10/01/2016: Use of Cross-Account Roles in Managing Multiple AWS Accounts
-
09/10/2016: Converting Quotes and Removing Other Unicode Garbage in WordPress 4.*
-
09/05/2016: Lessons from Working with Elasticsearch at Scale
-
08/26/2016: The Many Roles of a Security Group in a Technology Company
-
08/06/2016: Simple AWS Spot Pricing Infrastructure is Rarely Possible
-
07/23/2016: Security Training with a Capture the Flag Exercise in a Virtual Machine
-
07/16/2016: Only the Most Trivial or Most Expansive Sudoer Privileges are Easy to Grant
-
06/26/2016: The Hedonistic Imperative, Followed to the Ends of Paradise Engineering
-
06/01/2016: A Simple Setup and Installation Script for Let's Encrypt SSL Certificates
-
05/07/2016: A Mailserver on Ubuntu 16.04: Postfix, Dovecot, MySQL
-
05/01/2016: A Lazy Bash Script Alternative to KeePass for Storing Secrets
-
04/10/2016: A Database Migration Script: Movable Type 4.*/5.* to WordPress 4.*
-
04/01/2016: WordPress 4.*: Create Virtual Pages in Code Without Page Database Entries
-
03/19/2016: Deployment of Scripts and Static Content with Git, Rsync, and Simple Unix Tools
-
03/13/2016: Two Approaches to Elastic Load Balancers in CloudFormation Deployment
-
02/20/2016: AWS Auto Scaling to Follow the Daily Web Traffic Cycle
-
02/01/2016: StatefulRouteComponent for Use with React Router and Redux
-
01/18/2016: Paid a Great Deal to be Terrible at Development Most of the Time
-
01/10/2016: Visions of CVE-IDs Dancing Before Your Eyes
-
12/18/2015: ES6: Use of "import { property } from 'module'" is Not a Great Plan
-
12/01/2015: Accepting Input via Stdin and Arguments in a Command Line Node.js Script
-
11/03/2015: Juggling Coordinator Settings in Lambda Complex
-
11/01/2015: Node.js: Using the jsonschema Package to Validate JSON
-
10/11/2015: Node.js: How to Unit Test an Uncaught Exception Handler
-
10/05/2015: Turning a Nexus 7 FHD Tablet into an eBook Reader With Ubuntu Touch
-
09/13/2015: Don't Use Semver Ranges to Specify Package Dependencies
-
09/06/2015: A Node.js Package to Deploy CloudFormation Stacks
-
08/16/2015: SpamAssassin is an Inadequate Technology
-
08/15/2015: Thin Grunt Manifesto
-
07/12/2015: ESLint as a Replacement for JSHint and JSCS
-
07/11/2015: Evading DevOps Work for Non-Real-Time Content Generation and Delivery Applications
-
06/20/2015: People Who Insist on Overly-Precise HTTP Success Response Codes
-
06/01/2015: A Fun Little Issue with ICU4J MessageFormat
-
05/24/2015: Listing Large S3 Buckets with the AWS SDK for Node.js
-
05/17/2015: The Cosmological Noocene
-
04/25/2015: Freedom versus Security in Devops
-
04/01/2015: A Provisioning Bash Script for a WordPress 4.* Ubuntu 14.04 LAMP Server
-
03/19/2015: Locking Down a WordPress 4.* Blog Installation
-
03/08/2015: Notes on Exporting Large Movable Type Databases
-
02/15/2015: An Example Dropwizard Application with Guice for Dependency Injection
-
02/07/2015: PhantomJS Has Many Uses, But Functional Testing Isn't One of Them
-
01/17/2015: Run NPM Install on All Subdirectories Containing Packages
-
01/02/2015: Filenames that Alphanumerically Sort by Descending Timestamp
-
12/20/2014: Practice Defensive Javascript: Assume Blocking of Third Party Resources
-
12/06/2014: Progressive Lenses and Large Monitors Do Not Play Well Together
-
11/22/2014: Varnish 4.0: Allow Clients to Specify Cache TTL
-
11/01/2014: How to Politely Download All English Language Text Format Files from Project Gutenberg
-
10/18/2014: Four Word Phrase: Pseudorandom Generation of Word Lists from a Dictionary
-
10/04/2014: Managing HAProxy Configuration When Your Server May or May Not be Behind an SSL-Terminating Proxy
-
09/06/2014: Node.js is Too Inefficient to Monitor Files, So Use Bash Scripts Instead
-
09/01/2014: Prevent Vagrant Commands from Operating on All VMs
-
08/03/2014: Do Not Use Amazon Linux
-
08/02/2014: Bash Script SSH Automation Without a Password Prompt
-
07/03/2014: Setting Up SPF and DKIM for an Ubuntu 14.04 Mail Server
-
07/01/2014: Node.js: Handling Uncertain HTTP Response Compression
-
06/08/2014: Notes on File-Based Backup and Restoration for CouchDB
-
06/01/2014: How to Reboot a Vagrant Guest VM During Provisioning
-
05/01/2014: A Mailserver on Ubuntu 14.04: Postfix, Dovecot, MySQL
-
04/12/2014: Using n as a Tool to Provision Node.js
-
04/01/2014: An Object Stream Wrapper for the Clarinet JSON Parser
-
03/15/2014: Irresolvable Email Deliverability Issues With Digital Ocean
-
03/01/2014: Running Nginx as a Non-Root User
-
02/15/2014: Parallel Local Selenium Tests via SauceLabs, BrowserStack, and TestingBot
-
02/01/2014: Setting Up Interactive Brokers Trader Workstation on Ubuntu 13.04
-
01/12/2014: Pondering Non-Negotiated and Acausal Trade
-
01/01/2014: Setting Up Sublime Text 3 for Javascript Development
-
12/02/2013: Considering Speed and Slowness in AngularJS
-
12/01/2013: AngularJS Headless End to End Testing With Protractor and Selenium
-
11/17/2013: AngularJS: Replace $http to Run Requests via WebSocket
-
11/01/2013: Importing Email From Outlook on Windows to Thunderbird on Ubuntu
-
10/02/2013: Mail From Exchange Server on Ubuntu 12.04 With Thunderbird
-
10/01/2013: Two Approaches to AngularJS Controller Inheritance
-
09/02/2013: Automated Encrypted Backups On Ubuntu With Duplicity, With and Without Déjà Dup
-
09/01/2013: Replacing jQuery.slideDown() with ngAnimate in AngularJS 1.2.0
-
08/10/2013: AngularJS: Wrapping $http For Fun and Profit
-
08/01/2013: Replacing jQuery.slideDown() with ngAnimate in AngularJS 1.1.5
-
07/04/2013: Mail from Exchange Server on Ubuntu 12.04 With Evolution
-
07/01/2013: Installing Roundcube on Ubuntu 12.04 and 14.04
-
06/15/2013: A Few Notes on Migrating an Ubuntu Instance from AWS to Digital Ocean
-
06/05/2013: WebSockets Over SSL With Node.js and Nginx
-
05/11/2013: The Use of Cookies Versus Query String Tokens to Identify Sessions in Socket.IO
-
05/06/2013: Die, Child Process, Die!
-
04/05/2013: Redis as a Tool For Managing State in Simple Clustered Processes
-
04/02/2013: Some Notes on CSV Parsing and Google Spreadsheets in Node.js
-
03/11/2013: Node.js: Run the Heartbeat in a Child Process
-
03/02/2013: Node.js: Abusing Express 3.* to Enable Late Addition of Middleware
-
02/23/2013: Perform Recurring Billing on the 3rd and the 17th of the Month
-
02/09/2013: Node.js and Forever as a Service: Simple Upstart and Init Scripts for Ubuntu
-
01/20/2013: Turning a Javascript Class Back Into Code
-
01/12/2013: Node.js: Connections Will End, Close, and Otherwise Blow Up
-
12/22/2012: Efficiently Shutting Off Default Functionality in Drupal 7
-
12/08/2012: WebSockets Over SSL: HAProxy, Node.js, Nginx
-
11/25/2012: PHP Array Keys on 32-bit Versus 64-bit Systems
-
11/17/2012: Of Names and Markov Chains
-
10/21/2012: Using a Custom Admin Theme in Drupal 7 Will Cost More Than You Think
-
10/11/2012: A Bare Minimum Plugin Set for WordPress 3.*
-
09/21/2012: Whiteboard Exercises are a Terrible Way to Investigate Coding Ability
-
09/01/2012: What Constitutes an Acceptable Email Regex?
-
08/11/2012: Integrating Bounce With Modules That Bypass drupal_mail()
-
08/01/2012: Websockets Over SSL: Stunnel, Varnish, Nginx, Node.js
-
07/25/2012: Proxying WebSocket Traffic for Node.js: The Present State of Play
-
07/07/2012: Improving the Field UI in Drupal 7
-
06/16/2012: Bounce: a Drupal Module for Managing Email Non-Delivery Reports
-
06/10/2012: Drupal: Trim All Form Fields Everywhere
-
05/15/2012: A Mailserver on Ubuntu 12.04: Postfix, Dovecot, MySQL
-
04/21/2012: Quickly Hacking Smooth Div Scroll to Run Vertically
-
04/01/2012: Patching Popular Drupal SMTP Modules for Lack of Return-Path Header Support
-
03/11/2012: Always Check for variable_get('install_task') == 'done' in hook_cron() and hook_init() Implementations
-
03/02/2012: Writing an Email Non-Delivery Report Processing Module is Easier in Drupal 7 than in Drupal 6
-
02/11/2012: Run Multiple Cron Tasks in Parallel in Drupal
-
02/08/2012: Security is the Most Compelling Reason to Use a Framework
-
01/28/2012: The Future of the Venture Capital Industry
-
01/16/2012: Turning Drupal 7 into a Static Site Generator
-
12/18/2011: A Dark Style for Chosen Selects
-
12/16/2011: A Low-Tech 80/20 Approach to Cross-Browser Development
-
11/23/2011: The Miserable State of Intellectual Property Clauses in Developer Contracts
-
11/01/2011: Setting Up CentOS 5 to Host a LAMP Web Application
-
10/08/2011: A Tool to Build Pandora's Box
-
10/01/2011: A Few Tips for gRaphaël Line Charts
-
09/13/2011: A Scrollbar for the Jo App Framework
-
09/01/2011: How to Overflow a Background Image Using CSS3
-
08/16/2011: Use Rsync Scripts for Painless Deployment During Development
-
08/01/2011: Simple Configuration Validation in Node.js
-
07/08/2011: Set the Body Element Background Color Property, Even If It's White
-
07/07/2011: Running a Node.js Server as a Service Using Forever
-
06/10/2011: Damn Comma
-
06/01/2011: Lazily Creating GMaps Marker Sets Using PHP and GD
-
05/10/2011: Obtaining Best Results from a 99designs Contest
-
05/02/2011: Readable Class Definitions in Node.js
-
05/01/2011: Inheritance and Initialization in Node.js
-
04/09/2011: Introducing the thywill-python Asynchronous Messaging Framework
-
04/03/2011: The Drunk Dotted Border in Google Chrome
-
04/01/2011: Drupal on Windows Server: How and Why
-
03/05/2011: Setting Up an Access Controlled Git Repository Server with Gitolite
-
03/04/2011: The Side-Project Considered as a Necessity
-
02/17/2011: How to Write an Email Bounce Processing Module for Drupal
-
02/08/2011: An Improved Quick and Dirty POP3 Toolkit in PHP
-
01/15/2011: A Low Tech Approach to Wraparound Scrolling Lists
-
01/01/2011: Movable Type 4 and 5 Are Painfully Slow: How to Speed Things Up
-
12/13/2010: How to Block 99.9% of All Movable Type Comment Spam
-
12/12/2010: Secure the Back End of Movable Type 4 (or 5): SSL and Mod Rewrite
-
12/04/2010: A Count and Multiplier Method of Estimating Web Development Time
-
11/06/2010: Processing Bounced Email (in ColdFusion, For My Sins)
-
10/21/2010: Setting Up Movable Type 4 (Or 5) on EC2
-
10/19/2010: Javascript Obfuscation of a Mailto Link
-
10/18/2010: Three Necessary Defenses for Open Credit Card Submission Forms