41554 blogs · [ { "id": "01a0df5c-ea9d-712e-ae63-e8775b0fdc3f", "title": "Shepherd: one conversation, many agents", "url": "http://travisjeffery.com/shepherd-one-conversation-many-agents/", "published_at": "2026-09-25T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd30a2ce73", "title": "Hiring is a guess. Firing is a choice.", "url": "http://travisjeffery.com/hiring-is-a-guess.-firing-is-a-choice./", "published_at": "2026-01-30T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd30bea782", "title": "I built our JIT access system in a day", "url": "http://travisjeffery.com/i-built-our-jit-access-system-in-a-day/", "published_at": "2026-01-23T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd30da2244", "title": "Segment, 2014-2016", "url": "http://travisjeffery.com/segment-2014-2016/", "published_at": "2025-12-09T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd3104c7e7", "title": "25 years of Emacs", "url": "http://travisjeffery.com/25-years-of-emacs/", "published_at": "2025-11-16T17:50:05+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd3110b76d", "title": "I'll take pkg over internal", "url": "http://travisjeffery.com/ill-take-pkg-over-internal/", "published_at": "2019-11-01T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd315cb354", "title": "Keep passwords and secrets out of your logs with Go", "url": "http://travisjeffery.com/keep-passwords-and-secrets-out-of-your-logs-with-go/", "published_at": "2018-06-04T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd322aae6a", "title": "The best books I read in 2017", "url": "http://travisjeffery.com/the-best-books-i-read-in-2017/", "published_at": "2018-02-01T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd324f459e", "title": "“username or password incorrect” is bullshit", "url": "http://travisjeffery.com/username-or-password-incorrect-is-bullshit/", "published_at": "2017-12-21T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd328db940", "title": "Hiring woes: the costs of bad hires and how to avoid them", "url": "http://travisjeffery.com/hiring-woes-the-costs-of-bad-hires-and-how-to-avoid-them/", "published_at": "2017-10-04T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd332ce39f", "title": "Manage Datadog with Terraform", "url": "http://travisjeffery.com/manage-datadog-with-terraform/", "published_at": "2017-09-07T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd333085a8", "title": "How to persuade in online discussions", "url": "http://travisjeffery.com/how-to-persuade-in-online-discussions/", "published_at": "2017-06-14T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd33c02422", "title": "Building a Kafka that doesn’t depend on ZooKeeper", "url": "http://travisjeffery.com/building-a-kafka-that-doesnt-depend-on-zookeeper/", "published_at": "2017-01-19T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd3499adb0", "title": "EC2’S magical address to get instance metadata", "url": "http://travisjeffery.com/ec2s-magical-address-to-get-instance-metadata/", "published_at": "2016-11-29T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd34cc99e7", "title": "How Kafka’s Storage Internals Work", "url": "http://travisjeffery.com/how-kafkas-storage-internals-work/", "published_at": "2016-10-13T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd34d2181d", "title": "Monitoring with InfluxData's TICK stack", "url": "http://travisjeffery.com/monitoring-with-influxdatas-tick-stack/", "published_at": "2016-09-23T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd35591c83", "title": "Techniques to Achieve High Write Throughput With Elasticsearch", "url": "http://travisjeffery.com/techniques-to-achieve-high-write-throughput-with-elasticsearch/", "published_at": "2016-06-08T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd35d74dab", "title": "Using Golang and JSON for Kafka Consumption With High Throughput", "url": "http://travisjeffery.com/using-golang-and-json-for-kafka-consumption-with-high-throughput/", "published_at": "2016-05-09T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd36c4ef3f", "title": "Graphing Kafka offset lags with StatsD", "url": "http://travisjeffery.com/graphing-kafka-offset-lags-with-statsd/", "published_at": "2016-03-26T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd375d3309", "title": "SSH into EC2 instance with instance ID", "url": "http://travisjeffery.com/ssh-into-ec2-instance-with-instance-id/", "published_at": "2015-11-30T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd380c8959", "title": "Outbound connections from Docker with VirtualBox not working?", "url": "http://travisjeffery.com/outbound-connections-from-docker-with-virtualbox-not-working/", "published_at": "2015-11-17T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd38414cb9", "title": "Building a custom Zendesk app", "url": "http://travisjeffery.com/building-a-custom-zendesk-app/", "published_at": "2015-11-10T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd38926a23", "title": "Library and Lambda function to show your Rdio heavy rotation on your website", "url": "http://travisjeffery.com/library-and-lambda-function-to-show-your-rdio-heavy-rotation-on-your-website/", "published_at": "2015-10-24T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd38c2a33c", "title": "Error responses on Node.js with Koa", "url": "http://travisjeffery.com/error-responses-on-node.js-with-koa/", "published_at": "2015-10-21T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd397e3e50", "title": "Building infrastructure with Docker, AWS ECS, and Hashicorp's Terraform", "url": "http://travisjeffery.com/building-infrastructure-with-docker-aws-ecs-and-hashicorps-terraform/", "published_at": "2015-10-07T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd39f327bb", "title": "Piping into a Docker container", "url": "http://travisjeffery.com/piping-into-a-docker-container/", "published_at": "2015-09-25T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd3a471546", "title": "Writing your own Emacs interactive functions with completion", "url": "http://travisjeffery.com/writing-your-own-emacs-interactive-functions-with-completion/", "published_at": "2015-09-11T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd3a7f4458", "title": "Animated nyan cat in the terminal", "url": "http://travisjeffery.com/animated-nyan-cat-in-the-terminal/", "published_at": "2015-06-25T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd3b379662", "title": "Re-architecting Segment's API", "url": "http://travisjeffery.com/re-architecting-segments-api/", "published_at": "2015-03-25T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd3bfc9502", "title": "How to hide Chrome's notification icon in the menu bar", "url": "http://travisjeffery.com/how-to-hide-chromes-notification-icon-in-the-menu-bar/", "published_at": "2014-07-24T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd3c9a56d8", "title": "NSURLSession and NSOperationQueue working together = TRVSURLSessionOperation", "url": "http://travisjeffery.com/nsurlsession-and-nsoperationqueue-working-together-trvsurlsessionoperation/", "published_at": "2014-06-17T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd3d7c8d2b", "title": "Added support for promises in mocha v1.18.0", "url": "http://travisjeffery.com/added-support-for-promises-in-mocha-v1.18.0/", "published_at": "2014-03-14T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd3dfd57ff", "title": "Jasmine-jQuery v2 adding support for Jasmine v2", "url": "http://travisjeffery.com/jasmine-jquery-v2-adding-support-for-jasmine-v2/", "published_at": "2014-01-13T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd3ea30625", "title": "Writing @ prefixed macros", "url": "http://travisjeffery.com/writing-@-prefixed-macros/", "published_at": "2014-01-10T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd3f6d259c", "title": "My Xcode plug-in to have Clang format/style your code using the new clang-format", "url": "http://travisjeffery.com/my-xcode-plug-in-to-have-clang-format/style-your-code-using-the-new-clang-format/", "published_at": "2014-01-07T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd40638a32", "title": "Text processing with NSLinguisticTagger: implementing Writer Pro's syntax control", "url": "http://travisjeffery.com/text-processing-with-nslinguistictagger-implementing-writer-pros-syntax-control/", "published_at": "2013-12-25T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd40e44a88", "title": "Preventing 'IB auto generated at build time for view with fixed frame' when using Auto Layout", "url": "http://travisjeffery.com/preventing-ib-auto-generated-at-build-time-for-view-with-fixed-frame-when-using-auto-layout/", "published_at": "2013-11-28T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd41b85f64", "title": "URL linking in a non-editable NSTextView", "url": "http://travisjeffery.com/url-linking-in-a-non-editable-nstextview/", "published_at": "2013-11-09T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd41ddd460", "title": "Using UIImage, UIColor, UIFont Code on Mac OS X", "url": "http://travisjeffery.com/using-uiimage-uicolor-uifont-code-on-mac-os-x/", "published_at": "2013-11-02T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd424856e2", "title": "Using TextKit to put an image in a text view", "url": "http://travisjeffery.com/using-textkit-to-put-an-image-in-a-text-view/", "published_at": "2013-10-20T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd42a756d6", "title": "How to know when a UIScrollView (includes UITableView, UICollectionView) finished scrolling", "url": "http://travisjeffery.com/how-to-know-when-a-uiscrollview-includes-uitableview-uicollectionview-finished-scrolling/", "published_at": "2013-10-19T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd42d8f6c8", "title": "Server-sent event event source API client in ObjC for iOS and Mac using NSURLSession", "url": "http://travisjeffery.com/server-sent-event-event-source-api-client-in-objc-for-ios-and-mac-using-nsurlsession/", "published_at": "2013-10-12T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd434d3117", "title": "Async testing with Xcode and any testing framework such as XCTest, SenTestingKit, Expecta, etc.", "url": "http://travisjeffery.com/async-testing-with-xcode-and-any-testing-framework-such-as-xctest-sentestingkit-expecta-etc./", "published_at": "2013-10-11T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd43cf39c5", "title": "`git author sha`: get author info for a given sha in git", "url": "http://travisjeffery.com/git-author-sha-get-author-info-for-a-given-sha-in-git/", "published_at": "2013-10-05T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd442a031e", "title": "Xcode attaching to app running in simulator not working", "url": "http://travisjeffery.com/xcode-attaching-to-app-running-in-simulator-not-working/", "published_at": "2013-10-03T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd44d7bf85", "title": "Basic authentication with AFNetworking 2", "url": "http://travisjeffery.com/basic-authentication-with-afnetworking-2/", "published_at": "2013-09-27T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd4526c786", "title": "Disable microphone muting when typing in Google+ Hangouts", "url": "http://travisjeffery.com/disable-microphone-muting-when-typing-in-google-hangouts/", "published_at": "2013-09-24T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd459441e4", "title": "Scroll to the bottom of a UICollectionView", "url": "http://travisjeffery.com/scroll-to-the-bottom-of-a-uicollectionview/", "published_at": "2013-09-19T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd4685306b", "title": "Testing JavaScript projects with Grunt, Jasmine, and JSHint", "url": "http://travisjeffery.com/testing-javascript-projects-with-grunt-jasmine-and-jshint/", "published_at": "2013-09-03T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd46e9d7fe", "title": "Installing Ruby with rbenv and Homebrew on OS X Mavericks", "url": "http://travisjeffery.com/installing-ruby-with-rbenv-and-homebrew-on-os-x-mavericks/", "published_at": "2013-06-24T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd4798e10b", "title": "When Google Chrome won't open iTunes links", "url": "http://travisjeffery.com/when-google-chrome-wont-open-itunes-links/", "published_at": "2013-06-04T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd480c9025", "title": "Getting the status bar's height in iOS", "url": "http://travisjeffery.com/getting-the-status-bars-height-in-ios/", "published_at": "2013-05-06T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd48d4a65f", "title": "Converting AVFoundation's power levels to/from logarithmic and linear scale", "url": "http://travisjeffery.com/converting-avfoundations-power-levels-to/from-logarithmic-and-linear-scale/", "published_at": "2013-02-08T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd49d06817", "title": "Notify yourself of successful/failed Xcode builds by email", "url": "http://travisjeffery.com/notify-yourself-of-successful/failed-xcode-builds-by-email/", "published_at": "2013-01-17T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd4a6390c8", "title": "Overriding UIViewController's view property, done right", "url": "http://travisjeffery.com/overriding-uiviewcontrollers-view-property-done-right/", "published_at": "2012-12-28T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd4a76b5f3", "title": "Quick staging and other file operations in git", "url": "http://travisjeffery.com/quick-staging-and-other-file-operations-in-git/", "published_at": "2012-11-01T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd4b5910cb", "title": "Making Custom Transitions Between UIViewControllers", "url": "http://travisjeffery.com/making-custom-transitions-between-uiviewcontrollers/", "published_at": "2012-10-22T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd4c4c61f9", "title": "Alias in ZSH with completion", "url": "http://travisjeffery.com/alias-in-zsh-with-completion/", "published_at": "2012-08-08T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd4cfab0f6", "title": "iOS how-to: mask and shadow views", "url": "http://travisjeffery.com/ios-how-to-mask-and-shadow-views/", "published_at": "2012-08-06T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd4defb0e2", "title": "Adding a drop shadow to a table view", "url": "http://travisjeffery.com/adding-a-drop-shadow-to-a-table-view/", "published_at": "2012-07-23T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd4e7b23fc", "title": "Getting the index path of a table view cell via a subview event", "url": "http://travisjeffery.com/getting-the-index-path-of-a-table-view-cell-via-a-subview-event/", "published_at": "2012-07-22T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd4f2f1f82", "title": "Rendering errors with JSON and Rails", "url": "http://travisjeffery.com/rendering-errors-with-json-and-rails/", "published_at": "2012-04-27T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd4f4bc77d", "title": "How-to test starting Backbone's history", "url": "http://travisjeffery.com/how-to-test-starting-backbones-history/", "published_at": "2012-04-16T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd503f27a4", "title": "Web Inspector's new dock to right feature", "url": "http://travisjeffery.com/web-inspectors-new-dock-to-right-feature/", "published_at": "2012-04-01T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd511405a4", "title": "errors.js: client side errors object", "url": "http://travisjeffery.com/errors.js-client-side-errors-object/", "published_at": "2012-03-30T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd5169264e", "title": "What is this? I don't even... bind this to your object in JavaScript!", "url": "http://travisjeffery.com/what-is-this-i-dont-even...-bind-this-to-your-object-in-javascript/", "published_at": "2012-03-29T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd518a7007", "title": "JavaScript conditional assignment", "url": "http://travisjeffery.com/javascript-conditional-assignment/", "published_at": "2012-03-20T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd5203ec25", "title": "Generate Rails migrations that automagically add your change", "url": "http://travisjeffery.com/generate-rails-migrations-that-automagically-add-your-change/", "published_at": "2012-03-16T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd52e5aae1", "title": "Using git's include for private configuration information (like github tokens)", "url": "http://travisjeffery.com/using-gits-include-for-private-configuration-information-like-github-tokens/", "published_at": "2012-03-09T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd532878bc", "title": "Find Rails partial references in Vim", "url": "http://travisjeffery.com/find-rails-partial-references-in-vim/", "published_at": "2012-02-23T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd5374b3d1", "title": "Using PostgreSQL's Hstore with Rails", "url": "http://travisjeffery.com/using-postgresqls-hstore-with-rails/", "published_at": "2012-02-20T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd53c33c96", "title": "Vim and the power of :g", "url": "http://travisjeffery.com/vim-and-the-power-of-g/", "published_at": "2012-02-17T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd5491a278", "title": "Modern grep", "url": "http://travisjeffery.com/modern-grep/", "published_at": "2012-02-09T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd5554e562", "title": "Search a git repo like a ninja", "url": "http://travisjeffery.com/search-a-git-repo-like-a-ninja/", "published_at": "2012-02-02T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd5651fb4e", "title": "ZSH's extended glob breaking commands", "url": "http://travisjeffery.com/zshs-extended-glob-breaking-commands/", "published_at": "2012-01-30T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd56ba41f3", "title": "Hide comments with Vim folding", "url": "http://travisjeffery.com/hide-comments-with-vim-folding/", "published_at": "2012-01-17T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd56e06316", "title": "Building regexps in JavaScript", "url": "http://travisjeffery.com/building-regexps-in-javascript/", "published_at": "2012-01-05T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd572bfa09", "title": "Expressive domain specific languages (DSL) in Ruby", "url": "http://travisjeffery.com/expressive-domain-specific-languages-dsl-in-ruby/", "published_at": "2011-12-28T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd58183e1f", "title": "Keeping your git repo clean of .orig files!", "url": "http://travisjeffery.com/keeping-your-git-repo-clean-of-.orig-files/", "published_at": "2011-12-03T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd590d1e50", "title": "Saving files in nonexistent directories with Vim", "url": "http://travisjeffery.com/saving-files-in-nonexistent-directories-with-vim/", "published_at": "2011-11-28T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd5930f000", "title": "Markdown headers in Vim", "url": "http://travisjeffery.com/markdown-headers-in-vim/", "published_at": "2011-11-18T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd59d24c36", "title": "M-x occur for Vim", "url": "http://travisjeffery.com/m-x-occur-for-vim/", "published_at": "2011-10-31T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd5ad09c76", "title": "Mess up a rebase? Reflog your problems away", "url": "http://travisjeffery.com/mess-up-a-rebase-reflog-your-problems-away/", "published_at": "2011-10-31T00:00:00+00:00" }, { "id": "01a08c58-65a7-73b3-b925-c8fd5bc16036", "title": "Hello. Yes, this is blog.", "url": "http://travisjeffery.com/hello.-yes-this-is-blog./", "published_at": "2011-10-29T00:00:00+00:00" } ] posts Claim your blog
Back to travisjeffery.com
Blog · corpus.blog/blogs/travisjeffery.com/posts

travisjeffery.com

travisjeffery.com

2026

2025

2019

2018

2017

2016

2015

2014

2013

2012

2011