open source
Building, maintaining, and contributing to open-source projects.
124 posts · All topics
- — ELPDS: Inspecting FAT Partitions in 1995
I recovered another program I wrote in 1995: ELPDS, or Enhanced Logical & Physical Drive Status. Run ELPDS C: and it reports physical disk geometry, partition entries, FAT b...
- — A 1998 PDF-to-Text Converter
In 1998 I needed to convert PDF files to text for a search engine called Alkaline, without requiring separately installed libraries. So I wrote a C++ parser. Alkaline is another...
- — Universal Copy System Link for 97 Windows PCs
In 1997 I wrote UcsLink.Fusion for the University of Geneva. We had hundreds of PCs across the city, Sun and Windows NT servers, and Windows 95 and Linux workstations. Getting a...
- — zBalls: a 1998 Java Applet
In January 1998, a classmate and I wrote a game. It was called “Bolongas zBalls”, and it was a Java applet.
- — Good Morning, Dave: the 1998 INET Conference Kiosk Launcher
In July 1998, the Internet Society held INET ‘98, “The Internet Summit”, at Palexpo in Geneva. The University of Geneva provided about 250 computers for the conference, and I wa...
- — File & Folder 98: a 1998 Word Document Manager
In the 1990s I wrote a document manager for a small business in Geneva with about 20 workstations. Most of its staff were new to computers, and folders were a challenging idea t...
- — Porting a 1996 Pascal/Delphi Calculator to Rust (CLI + MCP)
In his Rails World 2026 keynote DHH talks about one-shot apps built almost instantly with an agent as part of Omarchy. His canonical example is Omacalc, a dead simple calculator...
- — Standardizing Exception Message Style in Ruby
While reviewing dozens of PRs from ericproulx optimizing Grape’s internals recently, I noticed that the bare raise ArgumentError, "..." calls scattered across the codebase were ...
- — Adventures in Daylight Saving, Norfolk Island, and Time Zone Math (in Ruby)
distance_of_time_in_words is a small Ruby gem that turns two Time objects into a human-readable string like “3 days and 4 hours”. Several separate bug reports against it turned ...
- — Benchmarks Are Free Now
My previous post walked through four bugs in ruby-enum, a gem I maintain, all stemming from the fact that class-level instance variables aren’t inherited by subclasses. The thir...
- — Ruby Instance Variables Are Not Inherited (and Why That Breaks Your DSL)
The ruby-enum gem is a small library I maintain that adds enum-like behavior to a class via include Ruby::Enum and define :KEY, value. Four pull requests landed against it recen...
- — Opening Proprietary Code to Contributors Checklist
Before AI coding assistants, a typical engineering team built expertise with the years: new team members joined, contributed small bug fixes, then were given more ambitious task...
- — Apologizing for My Obsessiveness Over Punctuation
You may have landed here because I had just apologized for my obsessiveness over punctuation in a GitHub comment and requested changes to your pull request, or you noticed me ad...
- — Should You Work on Weekends?
Should you work on week-ends?
- — Meeting Open Source Users Where They Are
Most paying customers expect a certain level of (paid) support. One opens a ticket, gets a response, and any issue can be resolved.
- — Do Not Fix Bugs Reported in Your Open Source Projects
Have you watched The IT Crowd? It’s a hilarious British television sitcom from around 2006 that cast a bunch of IT geniuses at the Reynholm Industries tech support department in...
- — Harvesting the Low Hanging Fruit in Open Source Projects
Every active open-source project grows a lot of low hanging fruit. Encouraging project users to harvest some of the yield can be a great way to engage and retain new contributor...
- — How to Grow Open-Source Contributors and Maintainers
I’ve been very active in open source since around 2008 and have become very passionate about growing contributors and maintainers in the projects I am involved in. The health of...
- — OpenSearch Project Joins the Linux Foundation
Yesterday, the Linux Foundation (LF) announced the new OpenSearch Software Foundation, with Amazon transferring the 3½ year old open-source project to LF (RT). This outcome ensu...
- — A Year Working on OpenSearch (2.0)
I’ve now been at Amazon for 3 years, and it has been a year since I joined OpenSearch, a community-driven, open source fork of Elasticsearch and Kibana. Last week we released Op...
- — How I Learned Rust by Accident
I had to quickly ramp up my Python over the past few weeks. Mind, because Ruby is obviously better, I’ve never really written any Python in 20 years of programming. At least not...
- — To Wrap or Not to Wrap in Markdown?
I keep antagonizing OSS contributors trying to wrap text in Markdown files, e.g. here and here.
- — I've Asked You to Become an Open-Source Project's Co-Maintainer
If you made any significant, high quality, contribution to one of my open-source projects, and have a decent contribution history on Github, I will ask you to join as a co-maint...
- — Rebooting Vestris.com
I’ve rebooted vestris.com and have incorporated it in New York State to serve as a legal entity for my open-source projects, including the many slack bots.
- — Building the Artsy Open-Source Engineering Brand
Building the Artsy Open-Source Engineering Brand, Austin CTO Summit ‘19
- — Reflecting on 8 Years Building Artsy
Today I bid farewell to Artsy. This post is my personal journey and my last post as CTO.
- — Grape Framework 1.0 Released
I took a deep breath, and released Grape Framework 1.0. We’re at 8,066 Github stars and 965 forks. I still think Grape is the best way to build Ruby RESTful APIs. I’ve written m...
- — The Demonic Possession of Hashie::Mash
I’ve been co-maintaining the Ruby library hashie for a few years now. It’s a wonderful set of extensions written by some of the best Ruby developers. But sometimes, a piece o...
- — The AlexaJS Community Organization
- — Use Open-Source to Pivot Around Your Hiring Problem
It’s no secret that hiring and retaining engineering talent is going to be only more challenging in the years to come. The world’s largest companies across all industries are no...
- — Interview at NASDAQ
A Facebook Live interview during CTO Summit NYC 2016 following a talk on Inspiring Team Leads to Give Away Their Legos. The interview recording is no longer available.
- — The Mongoid Community Organization
- — A Directory Structure for OSS and Work Github Clones
I have thousands of Github clones on my computer. You might also know that I have a massive OCD for organizing things. I organize my personal documents by year, going back to 19...
- — PlayPlay.io: Ping Pong, Chess, Pool and Tic-Tac-Toe Slack Bot
I’ve launched playplay.io, based on my open-source slack-gamebot. It can currently track your ping pong, pool, chess and tic-tac-toe games.
- — The New Ruby Grape
- — Getting Things Done with Mongoid 5
- — Open-Sourcing the Artsy Engineering Compensation Framework
I recently worked on the Artsy Engineering Compensation Framework, and more specifically on the Engineering ladder, open-sourced today. I have done this before, but never with s...
- — Becoming Open Source by Default
tl;dr Watch this video instead!
- — CTO Cast Podcast: Open Source (Russian)
I had a great conversation with Aliaksandr Astapenka and Pavel Paulau about open-source on CTOCast #6. It’s in Russian. CTOCast подкаст о технологиях, процессах, инфраструктуре ...
- — I Want to Contribute to Open-Source: Where do I Begin?
I get this question a lot. I turned to my friends, HN and Twitter for some advice.
- — Golden Gate Ruby Conference 2014
I’m very excited to be speaking at GoGaRuCo in San Francisco in September about taking over open-source projects, along with people like @wycats, @ultrasaurus and @pat. No press...
- — Why One Giant Source Control Repository Is Bad for You (and Facebook)
Facebook’s GIT repository is a single 54GB animal that builds Facebook. It’s not that big - they haven’t seen the MS Windows one! Actually, I take that back - anecdotal evidence...
- — Hex, Crayola and iOS7 Colors with EDColor
If you are in the market for a color library, you’ll find many. I needed to convert a hex color into a UIColor. Let’s try with Artsy purple. Rumor is that it was inspired by Ken...
- — Reorganizing CocoaPod Folder Structure for Unit and Integration Testing
My first CocoaPod described in this post sparked a discussion with the CocoaPods team. There are a few things I didn’t like about the project organization.
- — Mapping and Tiling on iOS
I’ve learned a great deal about iOS UI in the past couple of months, mostly working on the Artsy Mobile app and the in-Fair experience for the New York Armory Show. I feel incre...
- — Your First CocoaPod
Right behind Your First Ruby Gem, here’s a walkthrough of creating your first Objective-C CocoaPod. Now, I must admit that after only two months of Objective-C programming, I am...
- — dotNetInstaller 2.3 Released
dotNetINstaller 2.3 has been released.
- — Ruby Enumerable Detect with Value
Given an Enumerable, you can detect a value that matches a condition. But what if you want the result of the evaluation? You can now use _Enumerable##detect_value _from the enum...
- — Social Coding: Beyond Trolling Healthcare.gov
I felt compelled to troll healthcare.gov, too. It’s an easy target: The JavaScript assets aren’t even compressed. Look at their sheer incompetence! But, if you dig just a little...
- — Being Helpful with Ruby Exceptions and Error Messages
We talk a lot about error handling in Ruby. But we rarely talk about raising errors and creating helpful error messages that are actionable. A good error should tell the develop...
- — Your First Ruby Gem
UPDATE: I did another iteration of live-coding a Ruby gem at Flatiron School in January 2018. The code, a very similar but more complete and up-to-date checklist is here.
- — Doctors, Surgery and Open-Source
I visited a friend who lives in a remote, tropical region of the United States. He’s a doctor and a practicing eye surgeon. The island has both the very rich and the extremely p...
- — Grape 0.4.0 Released w/ Stricter JSON Format Support & More
I’m very excited to Release Grape 0.4.0 today. Again, thanks to the 10 (!) contributors to this release.
- — ResourceLib 1.4 Released
https://github.com/dblock/resourcelib
- — Graduating to Jenkins CI for Ruby-on-Rails Teams - Jenkins User Group in NYC (Video)
- — Open-Source Roundup for Early January 2013
Aside of all the posts about recruiting (recruiter spam dropped by 75%, amazing, thank you very much), website performance and the importance of source code, I wrote a few posts...
- — TaxCloud: SOAP Service Integration in Ruby
- — Slow Migration to Mongoid::Slug 2.x
- — New York Times Open Source Science Fair
- — WAFFLE 1.5 Released
- — JNA 3.5.0 Released
- — dotNetInstaller 2.2 Released
- — VMWareTasks 1.7 Released
- — RSpec-Rerun Gem
I just published a new gem: rspec-rerun. It’s a packaged solution to rerunning failed RSpec tests. See README for details.
- — GoRuCo 2012: From Zero to API Cache w/ Grape & MongoDB in 10 Minutes (Video)
tl;dr watch the video
- — Why I Love Code Reviews
I had a short, but lively debate over code reviews with @skamille at New York’s QCon 2012. That same day she wrote an interesting blog post on code reviews. She argues that “cod...
- — Jenkins AnsiColor 0.3.0 Released
Jenkins AnsiColor, the essential Jenkins plugin version 0.3.0 has been released.
- — Community MSI Extensions 1.3 Released
https://dblock.github.io/msiext/
- — How Not to Rewrite Everything
I wrote a blog post yesterday about How to Start Small With Big Data and Google Analytics. Essentially, it’s a jumpstart for fetching Google Analytics pageviews and merging the ...
- — How to Cross the Chasms of Your Technology Career
I want to talk about your scope of influence as a Software Engineer and how to expand it.
- — Grape 0.2.0 Released
After almost a year of active development with 200+ commits, Grape 0.2.0 has finally been released. It’s the code from the “frontier” branch that we’ve been using in production ...
- — How To Convert Numbers Into Words in Ruby (with numbers_and_words)
You’d think someone has implemented simple conversion of numbers into English by now? For example 42 becomes “forty-two”.
- — VMWareTasks Moved to Github
I moved the popular VMWareTasks C# library from CodePlex to Github.
- — Why You Should Leave Microsoft, Too
I read Bertrand’s post on “Tales from the Evil Empire” about him leaving Microsoft this morning. Congratulations. We have never met, but your blog was in my RSS feed for a very ...
- — Watching Rack Application Changes with Guard-Rack
One of the frequently requested features in Grape is to automatically reload code changes, much like Rails does (#131). This is actually pretty difficult to implement and requir...
- — How Art.sy uses Github to Build Art.sy
I heart Github and its magical green merge button. The entire fork/pull/merge workflow has been singlehandedly responsible for a massive amount of open-source contributions by m...
- — Octopress: Blogging Evolution
In 93’ I wrote a Guestbook CGI in C++. Then in 94’ I made my first blogging system. I honestly don’t remember what technology it used, but I think it was some hairy PHP with a t...
- — Measuring Activity in Open-Source Projects using Github Network Graph
When choosing to use an open source project you might want to know whether it’s still developed or at least maintained. For Ruby projects I used to check Rubygems release dates....
- — Oracle Didn't Learn From the Redhat Experience, PRs a NoSQL Database
I just came back from Mongo Boston and I am really excited for 10gen. Once again I met actual human beings that were really happy about using a database and wanted to share that...
- — Mongoid Collection Snapshot
Another fine open-source contribution from @aaw, mongoid_collection_snapshot: easy maintenance of collections of processed data in MongoDB with the Mongoid ODM.
- — Implementing My First Jenkins Plugin: AnsiColor
- — JQuery Konami Komando
With so many coffee breaks a day we can’t just have interns writing coffee. Introducing jQuery.konami, a new open-source plugin from @craigspaeth. You know something awesome is ...
- — The Jenkins AnsiColor Plugin You've All Been Waiting For
I’ve released AnsiColor, a Jenkins plugin you’ve all been waiting for.
- — Barista: Custom Preambles in CoffeeScript => JavaScript
- — Embedding API Sandboxes in Documentation
Oh, I know how much you want this!
- — Contribute to any of these open-source projects and I will help you in any way I can
We all have wish lists. Here’s the deal. Contribute to any of these open-source projects and I will help you in any way I can.
- — Introducing Gem-Licenses: Collect 3rd Party Licenses in RoR Projects
Yet again I have to deal with 3rd party licenses, this time in RoR. It’s a pretty common thing to do for technical managers and in my last job I ended up creating 3licenses. For...
- — Open-Source Is Simply Part of my Team's Job Description
In the last 24 hours my Github Is Your New Resume post gathered 343 comments between my blog, HN and Reddit. There are also 233 RTs. First, I want to thank those with good comme...
- — Github is Your New Resume
- — Waffle 1.4 Released
- — RSpec + Capybara Don't Return a Proper Exit Code
We’ve been trying to fix an issue with our continuous integration where Capybara tests were failing, but the CI process reported success. Rather annoying for CI!
- — JNA is now a Githubber
- — Svn2Svn 1.2 Released
I just released a new version of svn2svn 1.2, a tool for replaying changes in SVN repositories.
- — Why Microsoft Should Open-Source Skype
- — Rails + S3 + CloudFront + Jammit + Heroku + 100 грам
When someone says that you need a “100 grams” to figure something out, it means that it’s completely unobvious and complicated and therefore you need a few vodka shots. Vodka in...
- — Thinking open source: How startups destroy a culture of fear
- — Blast from the past: working versions of XReplace-32 and Expression Calculator
In 2009 I gave away the remainder of my old company’s, Vestris Inc., software. The source code for all of it is also available here.
- — Wrapping the Idee PixMatch RESTful API in a Ruby Gem
I had a nice time today wrapping up the Idee PixMatch API in a Ruby gem. PixMatch is a general image matching engine that allows you to perform large scale image comparisons and...
- — Mongoid_fulltext: full-text n-gram search for your MongoDB models
- — Beer Mug: Contribute Something Small to an Open-Source Project
This morning, Dan Croak, chief marketing officer at Thoughtbot, has finally come forward as an amazing open-source contributor. All his previous contributions to the core Rails ...
- — Continuous Deployment with Heroku-Bartender
You’ve heard about continuous deployment. But did you actually try to do it?
- — How to become an amazing contributor to an open-source project
This morning OpenSource.com published my new article: How to become and amazing contributor to an open-source project.
- — JNA: Coming back to Life on Kenai (and a word on Github)
You might have heard about the massive controversy about Hudson’s move to Github. I could have stirred a big storm in a cup for the Java Native Access (JNA) project, but instead...
- — Waffle / Сейчас всё станет намного сложнее: troubleshooting Kerberos and NTLM
- — Intersection of core values in open source and domain driven design
My second article on opensource.com. You got to love the graphics that the site designer picked! It speaks to the concept of “solving complexity”.
- — Open Source, ?, Profit
I answered 7 distinct questions from 7 different people about implementing Waffle this morning. Most are non-trivial configuration issues, but that’s not the point.
- — ProcessDomain: remoting & out-of-process AppDomains
- — dotNetInstaller: UAC Elevation on Install
Following a much pleasing trend of developers contributing major functionality to my open-source projects, @nsleightholm (Neil Sleightholm who works for a company called X2Syste...
- — Waffle: Single Sign-On User Impersonation in Tomcat
- — Corporate Change: Contributing to open source @ OpenSource.com
My first article on opensource.com > read.
- — AppSecInc. Community MSI Extensions 1.2 Released
- — 3Licenses: Collect Your 3rd Party Licenses
- — Corporate Change: Contributing to Open Source
This is a story of corporate change. It’s a tale about how an unlikely organization embraced open-source. It starts with pain and suffering and may even read like an “I hate my ...
- — Does your company have a policy on personal tech blogging and contributing to open-source?
- — RemoteInstall Test Framework 1.2 Released
I’ve released the RemoteInstaller Test Framework 1.2. It’s the second open-source release, and I am pleased to see some community adoption. RemoteInstall is a system for automat...
- — Introducing Oshi: Operating System and Hardware Information (Java)
- — Java Native Access (JNA) 3.2.5 Shipped
3.2.5 shipped quietly last week.
- — WAFFLE: Windows Authentication Functional Framework (LE)
- — JNA: Advapi32, Netapi32 and Secur32
I made a code commit to JNA today. Yes, I am committing Java code to an LGPL project on java.net. Please don’t hate me. I don’t want to be dodging stones, so I’ll be sticking to...
- — AppSecInc. MSI Extensions Open Sourced
I am pleased to announce the open-sourcing of AppSecInc. MSI Extensions.
- — RemoteInstall Test Framework Open-Sourced
I am pleased to announce the open sourcing of the RemoteInstall Test Framework.
- — dotNetInstaller Setup Bootstrapper 1.7 Ships
I shipped dotNetInstaller 1.7 yesterday. Download it here. You can see the long list of what’s new on the release page, but that’s not the topic of my post.
- — Icon support in ResourceLib.NET
I’ve added icon support in ResourceLib, an open source C# File Resource Management library. This lets you programmatically enumerate and change icons in an executable/dll. I nee...
- — DNI: setup (msi) bootstrapper
I’ve been heavily contributing to a project called DNI or dotNetInstaller in the past several months. DNI is a setup bootstrapper that basically chains multiple MSIs together an...
