Ex
Ratione
About • GitHub • Blog • Archives • Feed

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