41554 blogs · [ { "id": "01a08792-84c6-734a-a506-e8f546726e0f", "title": "A skill for single-player agentic knowledge management", "url": "https://justin.abrah.ms/blog/2026-08-26-a-skill-for-single-player-agentic-knowledge-management.html", "published_at": "2026-08-26T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f546f00532", "title": "Concept to Cash: Initiative retrospectives and visualization", "url": "https://justin.abrah.ms/blog/2026-08-14-concept-to-cash-initiative-retrospectives-and-visualization.html", "published_at": "2026-08-14T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f547d87360", "title": "A framework for cataloguing technical debt", "url": "https://justin.abrah.ms/blog/2026-07-30-a-framework-for-cataloguing-technical-debt.html", "published_at": "2026-07-30T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f5487108e0", "title": "Tools I use: Ghostty", "url": "https://justin.abrah.ms/configs/ghostty.html", "published_at": "2026-03-17T07:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f54969b6b5", "title": "Scaling at the mediumest company: half-measures save the day", "url": "https://justin.abrah.ms/blog/2026-03-09-scaling-at-the-mediumest-company-half-measures-save-the-day.html", "published_at": "2026-03-09T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f549beb568", "title": "On MCPs vs CLIs", "url": "https://justin.abrah.ms/blog/2026-03-07-on-mcps-vs-clis.html", "published_at": "2026-03-07T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f549dca6a0", "title": "CI Theater: we deleted our flaky tests and nothing broke", "url": "https://justin.abrah.ms/blog/2026-02-26-ci-theater-we-deleted-our-flaky-tests-and-nothing-broke.html", "published_at": "2026-02-26T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f54a4385a0", "title": "Claws Don't Need to Be Complicated: A Personal AI Agent in Go", "url": "https://justin.abrah.ms/blog/2026-02-21-claws-don-t-need-to-be-complicated.html", "published_at": "2026-02-21T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f54b19ae02", "title": "How to diff a book against your mind", "url": "https://justin.abrah.ms/blog/2026-02-18-how-to-diff-a-book-against-your-mind.html", "published_at": "2026-02-18T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f54c080391", "title": "Announcing FRM, a CLI based CRM... 15 years in the making", "url": "https://justin.abrah.ms/blog/2026-02-17-frm-a-cli-based-crm-15-years-in-the-making.html", "published_at": "2026-02-17T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f54c1814da", "title": "How to generate demo videos with playwright", "url": "https://justin.abrah.ms/blog/2026-02-12-generating-demo-videos-with-playwright.html", "published_at": "2026-02-12T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f54c7ec0a1", "title": "Recommended reviewers to build your council", "url": "https://justin.abrah.ms/blog/2026-02-06-recommended-reviewers-to-build-your-council.html", "published_at": "2026-02-06T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f54d1b85cb", "title": "AI Doesn't Work Without Good Inputs (And Neither Do Humans)", "url": "https://justin.abrah.ms/blog/2026-01-27-ai-doesn-t-work-without-good-inputs-and-neither-do-humans.html", "published_at": "2026-01-27T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f54d3e30dd", "title": "agent-chat: a way to monitor multi-agent orchestration", "url": "https://justin.abrah.ms/blog/2026-01-24-agent-chat-a-way-to-monitor-multi-agent-orchestration.html", "published_at": "2026-01-24T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f54dd94934", "title": "multiclaude, a different take on llm orchestration", "url": "https://justin.abrah.ms/blog/2026-01-20-multiclaude-a-different-take-on-llm-orchestration.html", "published_at": "2026-01-20T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f54e73ea81", "title": "A Tuesday in 2027: What orchestrated LLMs might look like", "url": "https://justin.abrah.ms/blog/2026-01-09-a-tuesday-in-2027-what-orchestrated-llms-might-look-like.html", "published_at": "2026-01-09T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f54ea900f9", "title": "Yegge's Developer-Agent Evolution Model", "url": "https://justin.abrah.ms/blog/2026-01-08-yegge-s-developer-agent-evolution-model.html", "published_at": "2026-01-08T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f54ed00c01", "title": "Gas Town: Running Dozens of Claude Code Instances at Once", "url": "https://justin.abrah.ms/blog/2026-01-05-wrapping-my-head-around-gas-town.html", "published_at": "2026-01-05T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f54f97950d", "title": "LLM Session Sharer: Easily share a claude code session without clutter", "url": "https://justin.abrah.ms/blog/2026-01-04-easily-share-a-claude-code-session-without-clutter.html", "published_at": "2026-01-04T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f54fa8b56c", "title": "Using your (Backstage) service catalog for compliance", "url": "https://justin.abrah.ms/blog/2026-01-01-using-your-service-catalog-for-compliance.html", "published_at": "2026-01-01T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f54fb8020e", "title": "Consul leader election issues", "url": "https://justin.abrah.ms/blog/2023-07-20-consul-leader-election-issues.html", "published_at": "2023-07-20T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f54fe6d9e5", "title": "Nix", "url": "https://justin.abrah.ms/configs/nix.html", "published_at": "2023-06-10T07:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f550102fbc", "title": "A risk-based approach to open source strategy", "url": "https://justin.abrah.ms/blog/2023-04-19-a-risk-based-approach-to-open-source-strategy.html", "published_at": "2023-04-19T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f550a6d3fe", "title": "SREcon 2023 trip report", "url": "https://justin.abrah.ms/blog/2023-03-27-srecon-trip-report.html", "published_at": "2023-03-27T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f5516b7417", "title": "Feature Flags, Dynamic Config and Experimentation (oh my!)", "url": "https://justin.abrah.ms/blog/2022-11-15-feature-flags-dynamic-config-and-experimentation.html", "published_at": "2022-11-15T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f551d897cd", "title": "Understanding Etsy's search service migration", "url": "https://justin.abrah.ms/blog/2022-11-15-understanding-etsys-search-service-migration.html", "published_at": "2022-11-15T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f5524310a7", "title": "Git Pre-Receive Hooks: Deploy Automatically When You Push", "url": "https://justin.abrah.ms/blog/2022-11-09-git-pre-receive-hooks-for-deployment.html", "published_at": "2022-11-09T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f552bbac29", "title": "re: Zettelkasten concerns", "url": "https://justin.abrah.ms/blog/2022-09-12-re-zettelkasten-concerns.html", "published_at": "2022-09-12T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f552d82285", "title": "An attempt at defining an ideal pipeline", "url": "https://justin.abrah.ms/blog/2022-08-16-an-attempt-at-an-ideal-pipeline.html", "published_at": "2022-08-16T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f552e1cf92", "title": "My thoughts on crypto: 2022", "url": "https://justin.abrah.ms/blog/2022-01-27-my-thoughts-on-crypto.html", "published_at": "2022-01-27T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f553c3111c", "title": "the function '..' is not known to be defined", "url": "https://justin.abrah.ms/blog/2021-08-13-the-function-is-not-known-to-be-defined.html", "published_at": "2021-08-13T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55437b682", "title": "Governance versus Stewardship", "url": "https://justin.abrah.ms/blog/2021-08-09-governance-versus-stewardship.html", "published_at": "2021-08-09T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55469f87d", "title": "Federated GraphQL Ops with Apollo Studio", "url": "https://justin.abrah.ms/blog/2021-07-28-federated-graphql-ops-with-apollo-studio.html", "published_at": "2021-07-28T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f555577295", "title": "Learning from Production Incidents", "url": "https://justin.abrah.ms/blog/2020-12-15-learning-from-production-incidents.html", "published_at": "2020-12-15T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55599e316", "title": "First and Second order metrics", "url": "https://justin.abrah.ms/blog/2020-10-31-first-and-second-order-metrics.html", "published_at": "2020-10-31T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f555c25b1a", "title": "Biogas Digestion system.", "url": "https://justin.abrah.ms/blog/2020-06-04-biogas-digestion-system.html", "published_at": "2020-06-04T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f5567d4d38", "title": "Is web scraping ethical?", "url": "https://justin.abrah.ms/blog/2020-06-04-is-webscraping-ethical.html", "published_at": "2020-06-04T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f556c9651a", "title": "How to make a font on Ubuntu with PPAs", "url": "https://justin.abrah.ms/blog/2019-09-19-how-to-make-a-font-on-ubuntu-ppa.html", "published_at": "2019-09-19T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55780dde6", "title": "Whiteboard photo snapper", "url": "https://justin.abrah.ms/blog/2019-02-10-automatic-whiteboard-snapper.html", "published_at": "2019-02-10T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f5578d6d23", "title": "Serene Lake", "url": "https://justin.abrah.ms/blog/2018-04-17-serene-lake.html", "published_at": "2018-04-17T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f557b31446", "title": "Software engineering vs other engineering", "url": "https://justin.abrah.ms/blog/2018-04-17-software-engineering-vs-other-engineering.html", "published_at": "2018-04-17T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f557ee07fc", "title": "Stub Stewart Bike Ride", "url": "https://justin.abrah.ms/blog/2018-04-17-stub-stewart.html", "published_at": "2018-04-17T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f5587130c0", "title": "Understanding the formal definition of Big-O", "url": "https://justin.abrah.ms/blog/2018-04-17-understanding-big-o-formal-definition.html", "published_at": "2018-04-17T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f5593b17df", "title": "What is an algorithm?", "url": "https://justin.abrah.ms/blog/2018-04-17-what-is-an-algorithm.html", "published_at": "2018-04-17T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55a36930d", "title": "Will binary always be the lowest level way to program?", "url": "https://justin.abrah.ms/blog/2018-04-17-will-binary-always-be-the-lowest-level.html", "published_at": "2018-04-17T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55a3e5cd7", "title": "What Is Google Guice? Java Dependency Injection Explained", "url": "https://justin.abrah.ms/blog/2016-08-23-an-overview-of-guice-java-dependency-injection.html", "published_at": "2016-08-23T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55ac1d2fd", "title": "Nifty tools for my system", "url": "https://justin.abrah.ms/configs/nifty-tools.html", "published_at": "2016-03-24T00:15:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55bb76744", "title": "Literate API Testing with Dredd", "url": "https://justin.abrah.ms/blog/2015-11-12-literate-api-testing-with-dredd.html", "published_at": "2015-11-12T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55c85b29d", "title": "Altruism in the job hunt", "url": "https://justin.abrah.ms/blog/altruism-in-the-job-hunt.html", "published_at": "2015-11-11T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55c88ef60", "title": "MicroConf 2015 Recap", "url": "https://justin.abrah.ms/blog/2015-04-20-microconf-2015-recap.html", "published_at": "2015-04-20T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55cf8bf35", "title": "Real-time code coverage analysis", "url": "https://justin.abrah.ms/blog/2015-04-09-real-time-code-coverage-analysis.html", "published_at": "2015-04-09T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55dadccda", "title": "Emacs", "url": "https://justin.abrah.ms/configs/emacs.html", "published_at": "2014-08-24T00:51:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55dbf0eff", "title": "Imhotep helps you enforce your styleguide during code review", "url": "https://justin.abrah.ms/blog/2014-08-23-imhotep-code-review-assistance.html", "published_at": "2014-08-23T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55e085f82", "title": "Inheritence versus Composition", "url": "https://justin.abrah.ms/blog/2014-08-23-inheritence-vs-composition.html", "published_at": "2014-08-23T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55e173519", "title": "Meaning of Community", "url": "https://justin.abrah.ms/blog/2014-08-23-meaning-of-community.html", "published_at": "2014-08-23T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55e96b680", "title": "Setuptools Entrypoints Explained", "url": "https://justin.abrah.ms/blog/2014-08-23-setuptools-entrypoints-explained.html", "published_at": "2014-08-23T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55ebd34f8", "title": "Thinking like a programmer: Inputs & outputs", "url": "https://justin.abrah.ms/blog/2014-08-23-thinking-like-a-programmer--inputs-and-outputs.html", "published_at": "2014-08-23T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55ee46509", "title": "Why a community might want a Python Software Foundation", "url": "https://justin.abrah.ms/blog/2014-08-23-the-whys-of-the-python-software-foundation.html", "published_at": "2014-08-23T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55f3b0945", "title": "NodeConf 2014: A story of aspiration and community", "url": "https://justin.abrah.ms/blog/2014-06-04-nodeconf-2014-story-of-aspiration-and-community.html", "published_at": "2014-06-04T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f55fbb9b0a", "title": "Pull request templates make code review easier", "url": "https://justin.abrah.ms/blog/2014-06-04-pull-request-templates-make-code-review-easier.html", "published_at": "2014-06-04T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f5607f1a06", "title": "PyCon 2014 was awesome", "url": "https://justin.abrah.ms/blog/2014-06-04-pycon-2014-was-awesome.html", "published_at": "2014-06-04T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f56087b132", "title": "Node Knockout: A chance to play & experiment", "url": "https://justin.abrah.ms/blog/2013-11-10-node-knockout-play-and-experiment.html", "published_at": "2013-11-10T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f560e51f9a", "title": "Obseletion through Programming", "url": "https://justin.abrah.ms/blog/2013-11-10-obsoletion-through-programming.html", "published_at": "2013-11-10T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f5611ac6c8", "title": "Book Review: Backbone.js Testing by Ryan Roemer", "url": "https://justin.abrah.ms/blog/2013-11-03-book-review-backbonejs-testing.html", "published_at": "2013-11-03T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f5615a9061", "title": "Selenium's Page Object Pattern: The Key to Maintainable Tests", "url": "https://justin.abrah.ms/blog/2013-11-03-selenium-page-object-pattern--the-key-to-maintainable-tests.html", "published_at": "2013-11-03T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f5616b41bc", "title": "Javascript Refactoring without an IDE", "url": "https://justin.abrah.ms/blog/2013-10-16-javascript-reafactoring-without-ides.html", "published_at": "2013-10-16T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f561acab77", "title": "A list of scary topics.", "url": "https://justin.abrah.ms/blog/2013-10-14-a-list-of-scary-topics.html", "published_at": "2013-10-14T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f56237c3d9", "title": "Big-O is easy to calculate, if you know how", "url": "https://justin.abrah.ms/blog/2013-10-14-how-to-calculate-big-o.html", "published_at": "2013-10-14T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f562f1ba4d", "title": "Pricing books as a function of risk", "url": "https://justin.abrah.ms/blog/2013-10-14-book_price_based_on_risk.html", "published_at": "2013-10-14T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f563cf4571", "title": "The State of GitHub's Code Review", "url": "https://justin.abrah.ms/blog/2013-10-14-state_of_githubs_code_review.html", "published_at": "2013-10-14T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f564111cdd", "title": "Thinking of Databases as an Excel file", "url": "https://justin.abrah.ms/blog/2013-10-14-databases-as-an-excel-file.html", "published_at": "2013-10-14T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f564714ad5", "title": "Big-O notation explained by a self-taught programmer", "url": "https://justin.abrah.ms/blog/2013-07-23-big-o-notation-explained.html", "published_at": "2013-07-23T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f5651a80ac", "title": "Finding Unused files with Require.js imports", "url": "https://justin.abrah.ms/blog/2013-07-17-finding_unused_requirejs_imports.html", "published_at": "2013-07-17T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f565ebd1df", "title": "PyATOM for static site syndication", "url": "https://justin.abrah.ms/blog/2013-07-17-pyatom_as_static_site_syndication.html", "published_at": "2013-07-17T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f566c140ed", "title": "setup.py, distutils and testing.", "url": "https://justin.abrah.ms/blog/2013-07-17-setuppy_distutils_testing.html", "published_at": "2013-07-17T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f566d5ee35", "title": "Why Pisces?", "url": "https://justin.abrah.ms/blog/2013-07-17-why_pisces.html", "published_at": "2013-07-17T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f5678bb91d", "title": "Securing your email", "url": "https://justin.abrah.ms/blog/2013-07-03-securing-your-email.html", "published_at": "2013-07-03T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f567910751", "title": "Meaning is not zero-sum", "url": "https://justin.abrah.ms/blog/2013-05-30-meaning-is-not-zero-sum.html", "published_at": "2013-05-30T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f568606598", "title": "Converting from MySQL to Postgres", "url": "https://justin.abrah.ms/blog/2013-05-21-converting_from_mysql_to_postgres.html", "published_at": "2013-05-21T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f568f3d9e3", "title": "Ignore Django, write testable code", "url": "https://justin.abrah.ms/blog/2013-05-21-ignore_django_write_tests.html", "published_at": "2013-05-21T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f569c51056", "title": "Project Structure for Advanced Beginners", "url": "https://justin.abrah.ms/blog/2013-03-12-projects-for-advanced-beginners.html", "published_at": "2013-03-12T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f56a2f5d4c", "title": "Why I changed my name", "url": "https://justin.abrah.ms/blog/2012-11-01-why-i-changed-my-name.html", "published_at": "2012-11-01T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f56a980a27", "title": "Cellphone Plans for Geeks", "url": "https://justin.abrah.ms/blog/2012-09-23-cellphone-plan-for-geeks.html", "published_at": "2012-09-23T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f56ae7bfdc", "title": "Gittip: New, Interesting, Important", "url": "https://justin.abrah.ms/blog/2012-09-23-gittip.html", "published_at": "2012-09-23T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f56b9a83d7", "title": "Personal Philosophy", "url": "https://justin.abrah.ms/blog/2012-09-15-personal_philosophy.html", "published_at": "2012-09-15T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f56bfd7c30", "title": "Literate programming with org-babel", "url": "https://justin.abrah.ms/blog/2012-01-15-literate_programming.html", "published_at": "2012-01-15T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f56c282ea3", "title": "Things I Use: Zsh", "url": "https://justin.abrah.ms/configs/zsh.html", "published_at": "2012-01-12T23:02:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f56c609b5c", "title": "Tools I use: Git", "url": "https://justin.abrah.ms/configs/git.html", "published_at": "2012-01-12T23:02:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f56cdaa2dd", "title": "Tools I use: Tmux", "url": "https://justin.abrah.ms/configs/tmux.html", "published_at": "2012-01-12T23:01:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f56d8901ea", "title": "EasyMock for mere mortals", "url": "https://justin.abrah.ms/blog/2011-08-04-easymock_for_mortals.html", "published_at": "2011-08-04T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f56e3d6970", "title": "Django at 30,000ft: A Manager's View", "url": "https://justin.abrah.ms/blog/2011-07-25-django_at_30000ft.html", "published_at": "2011-07-25T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f56e8ff685", "title": "Vim & Python: Making yourself at home", "url": "https://justin.abrah.ms/blog/2011-07-25-vim_and_python.html", "published_at": "2011-07-25T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f56f36c882", "title": "Writing a static site generator using org-mode.", "url": "https://justin.abrah.ms/blog/2011-07-14-orgmode_static_site_generator.html", "published_at": "2011-07-14T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f56fa8e31b", "title": "6 things I learned about setuptools", "url": "https://justin.abrah.ms/blog/2011-06-17-setuptools_lessons.html", "published_at": "2011-06-17T00:00:00+00:00" }, { "id": "01a08792-84c6-734a-a506-e8f56fd05abc", "title": "Bash: Your forgotten friend (part 1)", "url": "https://justin.abrah.ms/blog/2011-06-17-forgotten_friend_1.html", "published_at": "2011-06-17T00:00:00+00:00" }, { "id": "01a08792-84c7-70af-a0bc-d9b7825aa1fa", "title": "Bash: Your forgotten friend (part 2)", "url": "https://justin.abrah.ms/blog/2011-06-17-forgotten_friend_2.html", "published_at": "2011-06-17T00:00:00+00:00" }, { "id": "01a08792-84c7-70af-a0bc-d9b78346263a", "title": "Bash: Your forgotten friend (part 3)", "url": "https://justin.abrah.ms/blog/2011-06-17-forgotten_friend_3.html", "published_at": "2011-06-17T00:00:00+00:00" }, { "id": "01a08792-84c7-70af-a0bc-d9b78408d0b3", "title": "Customizing Django Forms Multiwidgets", "url": "https://justin.abrah.ms/blog/2011-06-17-django_multiwidget.html", "published_at": "2011-06-17T00:00:00+00:00" }, { "id": "01a08792-84c7-70af-a0bc-d9b7840fc3c6", "title": "Developing a Personal Brand", "url": "https://justin.abrah.ms/blog/2011-06-17-developing_a_personal_brand.html", "published_at": "2011-06-17T00:00:00+00:00" }, { "id": "01a08792-84c7-70af-a0bc-d9b78460027a", "title": "Django Portfolio Application", "url": "https://justin.abrah.ms/blog/2011-06-17-django_portfolio.html", "published_at": "2011-06-17T00:00:00+00:00" } ] posts Claim your blog
Back to justin.abrah.ms
Blog · corpus.blog/blogs/justin.abrah.ms/posts

justin.abrah.ms

justin.abrah.ms

2026

2023

10 Jun 2023

2022

2021

2020

2019

2018

2016

2015

2014

2013

2012

2011