<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>kig.re</title><description>Engineering notes on scaling, Ruby, DevOps and questionable hardware.</description><link>https://kig.re/</link><item><title>Evals: The Unit Tests for the Non-Deterministic Parts of Your App</title><link>https://kig.re/2026/06/21/writing-evals-for-ai-powered-apps.html</link><guid isPermaLink="true">https://kig.re/2026/06/21/writing-evals-for-ai-powered-apps.html</guid><description>Building an app on top of a language model means part of your code now returns a different answer every time you run it. Here&apos;s how to keep that part honest — with a tiny, complete, runnable Ruby app and a real eval harness that tests it end to end.</description><pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>ai</category><category>llm</category><category>evals</category><category>claude</category><category>ruby</category><category>testing</category><category>prompt-engineering</category></item><item><title>Evaluating Terraform for DevOps Engineers</title><link>https://kig.re/2024/12/06/understanding-terraform.html</link><guid isPermaLink="true">https://kig.re/2024/12/06/understanding-terraform.html</guid><description>This post is a quick introduction to HashiCorp Terraform. We compare the approach to Chef and Puppet, and explain some conceptual differences that could help you migrate from Chef or Puppet to Terraform quicker.</description><pubDate>Fri, 06 Dec 2024 00:00:00 GMT</pubDate><category>devops</category><category>terraform</category><category>chef</category><category>puppet</category><category>cloud</category></item><item><title>Ultra-Fast External SSD Drives: Samsung X5 vs SanDisk Extreme Pro V2</title><link>https://kig.re/2021/06/02/comparing-samsung-x5-and-sandisk-extreme-pro-ssds.html</link><guid isPermaLink="true">https://kig.re/2021/06/02/comparing-samsung-x5-and-sandisk-extreme-pro-ssds.html</guid><pubDate>Wed, 02 Jun 2021 00:00:00 GMT</pubDate><category>consumer-electronics</category><category>usb</category><category>thunderbolt</category><category>ssd</category><category>write speed</category><category>read speed</category><category>performance</category></item><item><title>Yes! It&apos;s 2021, and Ruby 3.0, and Ruby on Rails 6.1 are alive and thriving. Are you?</title><link>https://kig.re/2021/01/24/is-rails-still-relevant-today-in-2021.html</link><guid isPermaLink="true">https://kig.re/2021/01/24/is-rails-still-relevant-today-in-2021.html</guid><pubDate>Sun, 24 Jan 2021 00:00:00 GMT</pubDate><category>programming</category><category>ruby</category><category>rails</category><category>software</category><category>ruby on rails</category></item><item><title>Turbo Agile™: Optimizing Efficiency of the Engineering Process for Maximum Velocity.</title><link>https://kig.re/2020/09/11/turbo-agile-simplified-scrum-pivotal-process.html</link><guid isPermaLink="true">https://kig.re/2020/09/11/turbo-agile-simplified-scrum-pivotal-process.html</guid><pubDate>Fri, 11 Sep 2020 00:00:00 GMT</pubDate><category>programming</category><category>pivotal</category><category>tracker</category><category>project management</category></item><item><title>How to Write Awesome CLI tools in Ruby and test them with RSpec and Aruba</title><link>https://kig.re/2020/09/07/writing-cli-tools-ruby-migrating-github-issues-to-pivotal-tracker.html</link><guid isPermaLink="true">https://kig.re/2020/09/07/writing-cli-tools-ruby-migrating-github-issues-to-pivotal-tracker.html</guid><description>This post details how to use dry-cli gem to create multi-command and sub-command CLI tools, and how to test them using RSpec and Aruba.</description><pubDate>Mon, 07 Sep 2020 00:00:00 GMT</pubDate><category>programming</category><category>ruby</category><category>cli</category><category>dry-cli</category><category>dry-rb</category><category>rspec</category><category>aruba</category><category>github api</category></item><item><title>Test your Understanding of Ruby Concurrency</title><link>https://kig.re/2020/06/01/ruby-concurrency-problems.html</link><guid isPermaLink="true">https://kig.re/2020/06/01/ruby-concurrency-problems.html</guid><description>Test your understanding of how Ruby Concurrency works with these two simple multiple-choice questions.</description><pubDate>Mon, 01 Jun 2020 00:00:00 GMT</pubDate><category>programming</category><category>concurrency</category><category>puma</category><category>sidekiq</category><category>multi-threading</category><category>multi-process</category><category>fibers</category><category>parallelism</category></item><item><title>Building IntelliJ Bazel Plugin from Sources</title><link>https://kig.re/2020/03/21/building-intellij-bazel-plugin.html</link><guid isPermaLink="true">https://kig.re/2020/03/21/building-intellij-bazel-plugin.html</guid><description>Overview of Bazel support in IntelliJ Family of products, and instructions on how to build the plugin from sources.</description><pubDate>Sat, 21 Mar 2020 00:00:00 GMT</pubDate><category>programming</category><category>bazel</category><category>intellij</category><category>docker</category><category>build-systems</category><category>ide</category></item><item><title>C++ Newbie Tour: Getting Started with C++ on Mac OSX</title><link>https://kig.re/2018/09/20/c++-newbie-tour-how-to-get-started-with-c++-on-mac-osx.html</link><guid isPermaLink="true">https://kig.re/2018/09/20/c++-newbie-tour-how-to-get-started-with-c++-on-mac-osx.html</guid><description>In this post we&apos;ll explore some of the things that a beginner C++ programmers (but not general beginner programmers) might find useful in getting quickly up to speed.</description><pubDate>Thu, 20 Sep 2018 00:00:00 GMT</pubDate><category>programming</category><category>c99</category><category>c++</category><category>cmake</category><category>coding</category><category>beginner</category></item><item><title>C5 class instance on EC2: cannot create file: Read-only file system</title><link>https://kig.re/2018/05/15/aws-ebs-c5-read-only-file-system.html</link><guid isPermaLink="true">https://kig.re/2018/05/15/aws-ebs-c5-read-only-file-system.html</guid><description>In this short post I describe the read-only file system issue that happened to one of our C5 hosts, and how we fixed it.</description><pubDate>Tue, 15 May 2018 00:00:00 GMT</pubDate><category>devops</category><category>aws</category><category>ec2</category><category>ubuntu</category><category>nvme</category><category>nvme-io-timeout</category><category>fsck</category></item><item><title>Dead Simple Encryption with Sym</title><link>https://kig.re/2017/03/10/dead-simple-encryption-with-sym.html</link><guid isPermaLink="true">https://kig.re/2017/03/10/dead-simple-encryption-with-sym.html</guid><description>Most of us are familiar with the concept of application secrets, how important it is is not to commit those to your version control system, and how challenging it is to distribute development and production secrets across the dev team in a consistent and, most importantly, secure fashion. In this post we introduce a new Ruby Gem called &apos;Sym&apos; for symmetric encryption.</description><pubDate>Fri, 10 Mar 2017 00:00:00 GMT</pubDate><category>programming</category><category>sym</category><category>symmetric encryption</category><category>gem</category><category>rubygems</category><category>keychain</category><category>password</category></item><item><title>Add a Social Activity Feed for your Site in Minutes with the simple-feed Ruby Gem</title><link>https://kig.re/2017/02/19/feeding-frenzy-with-simple-feed--activity-feed-ruby-gem.html</link><guid isPermaLink="true">https://kig.re/2017/02/19/feeding-frenzy-with-simple-feed--activity-feed-ruby-gem.html</guid><description>This gem implements a flexible time-ordered activity feeds commonly used within social networking applications. As events occur, they are pushed into the Feed and distributed to all users that need to see the event. Upon the user visiting their &apos;feed page&apos;, a pre-populated ordered list of events is returned by the library.</description><pubDate>Sun, 19 Feb 2017 00:00:00 GMT</pubDate><category>programming</category><category>concurrency</category><category>activity feed</category><category>redis</category><category>gem</category><category>rubygems</category><category>social network</category><category>twemproxy</category></item><item><title>Building Scalable Performant And Cheap Distributed Applications Part 1</title><link>https://kig.re/2016/05/06/building-scalable-performant-and-cheap-distributed-applications-part-1.html</link><guid isPermaLink="true">https://kig.re/2016/05/06/building-scalable-performant-and-cheap-distributed-applications-part-1.html</guid><description>With this post, I&apos;d like to start a series of *DevOps*-related conversations about building distributed applications (read: common web-apps). Folks running enterprise application use different technologies and are hosted across a range of cloud providers, and yet are often faced with very similar problems.</description><pubDate>Fri, 06 May 2016 00:00:00 GMT</pubDate><category>programming</category><category>sre</category><category>resilience</category><category>scalability</category><category>uptime</category></item><item><title>Mixmax And My First Nodejs App.</title><link>https://kig.re/2016/04/07/mixmax-and-my-first-nodejs-app.html</link><guid isPermaLink="true">https://kig.re/2016/04/07/mixmax-and-my-first-nodejs-app.html</guid><description>MixMax enhances, enriches, extends (EEE!) the standard Gmail functionality with a lot of goodies, accessible from both the GUI as well as via the slash commands while composing an email.</description><pubDate>Thu, 07 Apr 2016 00:00:00 GMT</pubDate><category>programming</category><category>nodejs</category><category>mixmax</category><category>gmail</category><category>slash commands</category><category>calendar</category><category>polls</category></item><item><title>Scaling Web Applications On Postgresql A Walkthrough Presentation</title><link>https://kig.re/2015/11/28/scaling-web-applications-on-postgresql-a-walkthrough-presentation.html</link><guid isPermaLink="true">https://kig.re/2015/11/28/scaling-web-applications-on-postgresql-a-walkthrough-presentation.html</guid><description>In this exciting and informative talk, presented at PgConf Silicon Valley 2015, Konstantin cut through the theory to deliver a clear set of practical solutions for scaling applications atop PostgreSQL, eventually supporting millions of active users, tens of thousands concurrently, and with the application stack that responds to requests with a 100ms average.</description><pubDate>Sat, 28 Nov 2015 00:00:00 GMT</pubDate><category>programming</category><category>scalability</category><category>performance</category><category>postgresql</category><category>web-apps</category><category>caching</category><category>zfs</category><category>haproxy</category></item><item><title>Serial Console Hacks With Arduino</title><link>https://kig.re/2015/11/22/serial-console-hacks-with-arduino.html</link><guid isPermaLink="true">https://kig.re/2015/11/22/serial-console-hacks-with-arduino.html</guid><description>In this post I&apos;ll share a method that I use to connect to a Serial port of any Arduino I am using at any given moment.  This method has a caveat, in that if you have more than one Arduino connected, it will pick one of them at random.</description><pubDate>Sun, 22 Nov 2015 00:00:00 GMT</pubDate><category>programming</category><category>console</category><category>hacks</category><category>serial</category><category>minicom</category></item><item><title>How To Use Arduino Nano Mini Pro With CH340G On Mac Osx Yosemite</title><link>https://kig.re/2014/12/31/how-to-use-arduino-nano-mini-pro-with-CH340G-on-mac-osx-yosemite.html</link><guid isPermaLink="true">https://kig.re/2014/12/31/how-to-use-arduino-nano-mini-pro-with-CH340G-on-mac-osx-yosemite.html</guid><description>Recent versions of cheap Arduino clones have been coming out with a different USB/Serial chip, which replaces the usual FTDI. The chipset is called CH340G and this post explains how to install the drivers for it on both Mac and Windows.</description><pubDate>Wed, 31 Dec 2014 00:00:00 GMT</pubDate><category>programming</category><category>c++</category><category>serial</category><category>macos</category><category>driver</category><category>ch340g</category></item><item><title>Announcing Laser Cutter and MakeABox.IO</title><link>https://kig.re/2014/11/21/announcing-laser-cutter-makeabox-dot-io.html</link><guid isPermaLink="true">https://kig.re/2014/11/21/announcing-laser-cutter-makeabox-dot-io.html</guid><description>LaserCutter &amp; MakeABox.io — its a ruby gem and a website for making PDF designs of laser-cut boxes, which fit/snap in together at all edges using tabs that go in and out.  The output of the library is a PDF document. Typically next step would import that PDF into Adobe Illustrator for additions and touch ups, and then sent off to a laser cutter for the actual, well, cutting.</description><pubDate>Fri, 21 Nov 2014 00:00:00 GMT</pubDate><category>programming</category><category>gem</category><category>rubygems</category><category>hardware</category><category>laser-cutting</category><category>makeabox.io</category></item><item><title>BORAT: Bathroom Occupancy Remote Awareness Technology with Arduino</title><link>https://kig.re/2014/10/12/borat-bathroom-occupancy-wireless-detection-and-notification-with-arduino.html</link><guid isPermaLink="true">https://kig.re/2014/10/12/borat-bathroom-occupancy-wireless-detection-and-notification-with-arduino.html</guid><description>Occupus (formerly BORAT: Bathroom Occupancy Remote Awareness Technology) – is an Arduino-based restroom occupancy detection and rapid notification system based on a network of nRF24L01+ 2.4GHz RF radios. It supports multiple (up to 5) casters (each installed in a bathrooms) and a single reporting unit.</description><pubDate>Sun, 12 Oct 2014 00:00:00 GMT</pubDate><category>programming</category><category>occupancy</category><category>sensor</category><category>c++</category><category>arduino</category><category>rf24</category><category>sonar</category><category>motion</category><category>light</category><category>radio</category><category>led</category></item><item><title>Arduino IDE Alternatives</title><link>https://kig.re/2014/08/02/arduino-ide-alternatives.html</link><guid isPermaLink="true">https://kig.re/2014/08/02/arduino-ide-alternatives.html</guid><description>Review of Arduino IDE Alternatives.</description><pubDate>Sat, 02 Aug 2014 00:00:00 GMT</pubDate><category>programming</category><category>ide</category><category>c++</category><category>visual studio</category><category>xcode</category><category>eclipse</category></item><item><title>BackSeat Driver: Autonomous Vehicle Library for Arduino</title><link>https://kig.re/2014/07/18/back-seat-driver-autonomous-robot-maneuvering.html</link><guid isPermaLink="true">https://kig.re/2014/07/18/back-seat-driver-autonomous-robot-maneuvering.html</guid><description>Back Seat Driver is a library for programming autonomous (or not) Arduino based robots. This library provides a convenient non-blocking command API to programmatically drive an autonomous vehicle. Current implementation is aimed at a 2-wheeled robot, with the two Servo motors setup opposite each other. Therefore to move the robot forward (or backward), two Servos need to rotate in the opposite direction (this is certainly true in the current version of the library, but may be more flexible in the future if need arises).</description><pubDate>Fri, 18 Jul 2014 00:00:00 GMT</pubDate><category>programming</category><category>robots</category><category>c++</category><category>robotics</category><category>autonomous</category><category>sonar</category><category>motion</category><category>light</category></item><item><title>Twelve Step Program For Scaling Web Applications On PostgreSQL</title><link>https://kig.re/2014/03/21/12-step-program-for-scaling-web-applications-on-postgresql.html</link><guid isPermaLink="true">https://kig.re/2014/03/21/12-step-program-for-scaling-web-applications-on-postgresql.html</guid><description>In this exciting and informative talk, presented at PgConf Silicon Valley 2015, Konstantin cut through the theory to deliver a clear set of practical solutions for scaling applications atop PostgreSQL, eventually supporting millions of active users, tens of thousands concurrently, and with the application stack that responds to requests with a 100ms average. He will share how his team solved one of the biggest challenges they faced: effectively storing and retrieving over 3B rows of &apos;saves&apos; (a Wanelo equivalent of Instagram&apos;s likes or Pinterest&apos;s pins), all in PostgreSQL, with highly concurrent random access.</description><pubDate>Fri, 21 Mar 2014 00:00:00 GMT</pubDate><category>programming</category><category>scalability</category><category>performance</category><category>postgresql</category><category>web-apps</category><category>rapid growth</category><category>wanelo</category></item><item><title>Detangling Business Logic in Rails Apps with PORO Events and Observers</title><link>https://kig.re/2013/08/05/detangling-business-logic-in-rails-apps-with-poro-events-and-observers.html</link><guid isPermaLink="true">https://kig.re/2013/08/05/detangling-business-logic-in-rails-apps-with-poro-events-and-observers.html</guid><description>With any Rails app that evolves along with substantial user growth and active feature development, pretty soon a moment comes when there appears to be a decent amount of tangled logic, AKA technical debt.</description><pubDate>Mon, 05 Aug 2013 00:00:00 GMT</pubDate><category>programming</category><category>ruby on rails</category><category>observable</category><category>ventable</category><category>even-driven</category><category>rails 5</category></item><item><title>How to configure PostgreSQL for very high read/write throughput</title><link>https://kig.re/2013/02/13/high-read-write-performance-postgres-on-joyent-cloud.html</link><guid isPermaLink="true">https://kig.re/2013/02/13/high-read-write-performance-postgres-on-joyent-cloud.html</guid><description>In this post, I&apos;ll go over some of our settings in postgresql.conf, which have been adjusted for high-performance/throughput and large RAM sizes. I would like to credit Josh Berkus and his PGExperts consultancy for providing us with timely and necessary assistance in tuning PostgreSQL these last few months.</description><pubDate>Wed, 13 Feb 2013 00:00:00 GMT</pubDate><category>programming</category><category>postgresql</category><category>joyent</category><category>cloud</category><category>high-performance</category><category>scaling</category><category>wanelo</category><category>zfs</category><category>postgresql.conf</category></item><item><title>The Case For Vertical Sharding</title><link>https://kig.re/2013/02/05/the-case-for-vertical-sharding.html</link><guid isPermaLink="true">https://kig.re/2013/02/05/the-case-for-vertical-sharding.html</guid><description>In this post I share the story of overcoming a massive scalability bottleneck from too many writes ino the Analytics database table used for Event collection, using Vertical Sharding.</description><pubDate>Tue, 05 Feb 2013 00:00:00 GMT</pubDate><category>programming</category><category>rails</category><category>databases</category><category>scalability</category><category>wanelo</category><category>postgresql</category><category>vertical sharding</category></item><item><title>The Big Switch How We Rebuilt Wanelo From Scratch And Lived To Tell About It</title><link>https://kig.re/2012/09/14/the-big-switch-how-we-rebuilt-wanelo-from-scratch-and-lived-to-tell-about-it.html</link><guid isPermaLink="true">https://kig.re/2012/09/14/the-big-switch-how-we-rebuilt-wanelo-from-scratch-and-lived-to-tell-about-it.html</guid><description>In this post we share the details of what we did and what we learned, in case someone out there ever finds themselves in a similar situation, weighing the risks of either working with a legacy stack or going full steam ahead with a rewrite.</description><pubDate>Fri, 14 Sep 2012 00:00:00 GMT</pubDate><category>programming</category><category>wanelo</category><category>java</category><category>rails</category><category>postgresql</category><category>mysql</category><category>tomcat</category><category>devops</category><category>scalability</category><category>performance</category><category>fastly</category><category>full-rewrite</category></item></channel></rss>