---
title: "Coding Architect"
url: https://www.grahambrooks.com/
---

# Coding Architect

# I help AI coding agents work on codebases too big for them

I build open-source tools that give coding agents the context and the checks they need on large and legacy systems: a code knowledge graph, architecture and API-contract rules a commit can fail on, and diagrams and dashboards generated from plain files an agent can write. Forty years of engineering, now aimed at the gap between adopting AI and getting it to work on real code.

[Read the blog](post/) [Subscribe](subscribe/)




## What I'm building

- **[symgraph](https://www.grahambrooks.com/projects/symgraph/)** — a knowledge-graph MCP server that gives agents a real map of a codebase, and says when it isn't sure
- **[tropism](https://www.grahambrooks.com/projects/tropism/)** — architecture rules an agent can actually check: import cycles and layering across ten languages, with no build and no network
- **[brake](https://www.grahambrooks.com/projects/brake/)** — fails the commit when an API change would break a consumer, across OpenAPI, protobuf and GraphQL
- **[forge](https://www.grahambrooks.com/projects/forge/)** — describe, render, and lint architecture from a single file, with [mmd](https://www.grahambrooks.com/projects/mmd/) and [puml](https://www.grahambrooks.com/projects/puml/) rendering Mermaid and PlantUML in pure Rust
- **[teleplot](https://www.grahambrooks.com/projects/teleplot/)** — Kibana dashboards without Kibana: one read-only binary over Elasticsearch, with an MCP endpoint so agents can write the dashboards
- **[increment](https://www.grahambrooks.com/projects/increment/)** — read a change as two aligned files in the terminal, and walk a branch commit by commit
- **[bx](https://www.grahambrooks.com/projects/bx/)** — run local MCP servers as native binaries, without a Node or Python runtime

[What changed in September and October →](https://www.grahambrooks.com/post/open-source-update-october-2026/) · [All projects →](https://www.grahambrooks.com/projects/)







## Start with a series






### [Agents on large codebases](https://www.grahambrooks.com/series/agents-on-large-codebases/)

What a coding agent needs to work on a codebase it can't read in one go: a map of the code, review that sees
relationships rather than lines, and an inner loop with real sensors.




### [Architecture the agent can check](https://www.grahambrooks.com/series/architecture-the-agent-can-check/)

Compilers and tests only know the repository an agent is standing in. Making layering, dependencies and API
contracts something a commit can fail on.




### [Building your own tools](https://www.grahambrooks.com/series/building-your-own-tools/)

Software with one known user can drop its whole configuration layer. What that changes, and what a personal
estate of tools costs to run.








## Featured Content

Looking for where to start? These are the pieces that have held up best — the tools change, the problems don't:

- **[Technical Health over Technical Debt](https://www.grahambrooks.com/post/2018-12-27-technical-health-over-technical-debt/)**: Why internal quality is a health question rather than a ledger you service.
- **[Defending the Domain Model](https://www.grahambrooks.com/post/2017-06-06-defending-the-domain-model/)**: Models decay as the business moves. Keeping yours honest at the boundaries.
- **[Team Distribution Models and Conway's Law](https://www.grahambrooks.com/post/2014-03-31-team-distribution-models/)**: If team shape and system shape must match, decide which one you're choosing.
- **[Zero Down-time Relational Databases](https://www.grahambrooks.com/post/2013-08-29-zero-down-time-relational-databases/)**: Backward and forward compatible schema change. Written in 2013, still how it's done.
- **[Code Review After the Pull Request](https://www.grahambrooks.com/post/code-review-after-the-pull-request/)**: What review becomes once agents write most of the code.






## Latest writing

Essays only — release notes are in [Release notes](https://www.grahambrooks.com/releases/), and the essays have their own [RSS feed](https://www.grahambrooks.com/essays.xml).


- [Open source update: six new tools and what changed, September to October 2026](https://www.grahambrooks.com/post/open-source-update-october-2026/)
- [Reading a change as two aligned files, in a terminal (increment)](https://www.grahambrooks.com/post/increment-aligned-diffs-in-the-terminal/)
- [Mermaid to SVG without a browser, and with the labels still there (mmd)](https://www.grahambrooks.com/post/mmd-mermaid-to-svg-without-a-browser/)
- [When an agent can already write the file, what is an MCP server for?](https://www.grahambrooks.com/post/what-is-an-mcp-server-for/)
- [The release pipeline four tools kept reinventing (release-kit)](https://www.grahambrooks.com/post/release-pipeline-as-a-tool/)

[View All Posts](post/)

- [Notification Event Pattern](https://www.grahambrooks.com/event-driven-architecture/patterns/notification-event-pattern/index.md) (2017-03-16): There are many event patterns or styles in event driven architectures. One of the significant advantages of the notification event pattern is can be introduced into existing systems quite simply to provide a more loosely coupled design.
- [Event-Carried State Transfer Pattern](https://www.grahambrooks.com/event-driven-architecture/patterns/stateful-event-pattern/index.md) (2017-05-18): In contrast to the notification pattern the Event-carried state transfer discourages calls to the publishing service by containing all the required data in the event payload. This decoupling leads to a very clean architecture but not without significant costs.
- [Event Sourcing](https://www.grahambrooks.com/event-driven-architecture/patterns/event-sourcing/index.md) (2017-06-07): Event Sourcing is a fascinating design pattern with some real advantages over maintaining single states within systems. But there is a darker side that requires careful consideration.
- [Consistency](https://www.grahambrooks.com/event-driven-architecture/consistency/index.md) (2017-05-25): Consistency - the absence of contradiction is a challenge in any application. Event driven asynchronous distributed systems turn up the dial of complexity. What does consistency mean?
- [Integrating Event Driven systems](https://www.grahambrooks.com/event-driven-architecture/patterns/integrating-event-driven-systems/index.md) (2017-06-24): It is very rare for an application or system to exist in isolation. Systems need to be integrated to deliver business value.
- [Measuring Consistency](https://www.grahambrooks.com/event-driven-architecture/consistency-measurement/index.md) (2017-05-25): Consistency Measurement - understanding key operational metrics of a distributed event driven system
- [Compensating Actions](https://www.grahambrooks.com/event-driven-architecture/compensating-actions/index.md) (2017-05-25): Consistency - the absence of contradiction is a challenge in any application. Event driven asynchronous distributed systems turn up the dial of complexity. What does consistency mean?
- [Open source update: six new tools and what changed, September to October 2026](https://www.grahambrooks.com/post/open-source-update-october-2026/index.md) (2026-10-25): A roundup of my public GitHub projects from 1 September to 25 October 2026: 92 releases across 27 repositories, six tools released for the first time or never introduced here, the releases that changed behaviour, and the work sitting on main that hasn't shipped yet.
- [Reading a change as two aligned files, in a terminal (increment)](https://www.grahambrooks.com/post/increment-aligned-diffs-in-the-terminal/index.md) (2026-10-25): increment (the command is inc) is a terminal diff viewer built around the aligned side-by-side view: corresponding lines level with each other, word-level highlighting, folding you can undo, moved blocks shown as moves, and a commit-by-commit branch review. An introduction, and an honest comparison with delta and difftastic.
- [Mermaid to SVG without a browser, and with the labels still there (mmd)](https://www.grahambrooks.com/post/mmd-mermaid-to-svg-without-a-browser/index.md) (2026-10-25): mmd renders Mermaid flowcharts, gitGraph and C4 context diagrams to SVG in pure Rust, with real <text> labels so the output survives conversion to PDF. An introduction to what it does, what it deliberately doesn't, and why it's 3,250 lines rather than 40,000.
- [teleplot 2026.10.0: Kibana dashboards without Kibana, in one binary](https://www.grahambrooks.com/post/teleplot-first-release/index.md) (2026-10-25): teleplot v2026.10.0 is the first release of a single-binary, view-only dashboard server that renders Kibana exports and its own YAML dashboards straight from Elasticsearch 8.x and 9.x.
- [infographic v2026.10.1: the first release, with animated SVG explainers from a one-line request](https://www.grahambrooks.com/post/infographic-first-release/index.md) (2026-10-25): infographic v2026.10.1 is the first release of a Claude Code skill and Rust CLI that turn a one-line request into an animated, checked SVG explaining a technical pattern, with prebuilt binaries for macOS and Linux.
- [backstage-catalog-graph v2026.10.24: the first public release, with a graph you can navigate](https://www.grahambrooks.com/post/backstage-catalog-graph-first-release/index.md) (2026-10-25): backstage-catalog-graph v2026.10.24 is the first public release of editor plugins for VS Code and JetBrains IDEs that draw a Backstage catalog-info.yaml as a graph, with dashed placeholders for everything the file references but doesn't declare.
- [symgraph v2026.10.18: a vendored minified file stops topping your dependency graph, and an export for analytics](https://www.grahambrooks.com/post/symgraph-2026-10-18-export/index.md) (2026-10-19): symgraph v2026.10.18 keeps generated and minified code out of the dependency graph and adds `symgraph export`, which writes coupling and per-commit change-impact records as JSON Lines.
- [puml 2026.10.2: diagrams as diagram-scene scenes, and lost messages parse](https://www.grahambrooks.com/post/puml-2026-10-2-scenes/index.md) (2026-10-14): puml 2026.10.2 can hand sequence, class, activity and state diagrams to a host application as diagram-scene scenes, and parses PlantUML's lost-message arrow. The rest is dependency updates.
- [forge 2026.10.2: forge as a library, with views as diagram-scene scenes](https://www.grahambrooks.com/post/forge-2026-10-2-library/index.md) (2026-10-14): forge v2026.10.2 can be used as a Rust library that parses a .forge model and lays its views out as diagram-scene scenes, so a host application can draw them natively. The rest of the release is dependency updates.
- [diagram-scene v2026.10.0: a laid-out diagram as plain data](https://www.grahambrooks.com/post/diagram-scene-first-release/index.md) (2026-10-14): diagram-scene v2026.10.0 is the first release of a Rust library that describes a laid-out software diagram as data, so layout engines and painters stop being coupled to each other.
- [When an agent can already write the file, what is an MCP server for?](https://www.grahambrooks.com/post/what-is-an-mcp-server-for/index.md) (2026-10-04): If an agent can already write your tool's file format, an MCP server has to give it something the file can't: live discovery, validation against the real system, a preview of the result, and a save with rules. Teleplot's endpoint was built only because it passed that gate, and it passed more narrowly than I first thought. Most MCP servers should fail it and be a file format plus a linter.
- [The release pipeline four tools kept reinventing (release-kit)](https://www.grahambrooks.com/post/release-pipeline-as-a-tool/index.md) (2026-09-27): Once you have more than a few single-user tools, the release process is a tool too. Its one user is you, and copying it into every repo is the per-repo config layer all over again. release-kit v2 moved four Rust tools onto one tag-driven pipeline, and a fix to it became a copy rather than four separate repairs.
- [Stop declaring what you can already read (myspec)](https://www.grahambrooks.com/post/stop-declaring-what-you-can-read/index.md) (2026-09-27): Once an agent's toolchain has enough moving parts (plugins, skills, MCP servers, modes, hooks), convention and hope stop being enough, and it needs the discipline of a real system: versioned migrations, deterministic gates, and one source of truth per fact. In myspec, the clearest example was a mode flag the developer had to set by hand. It drifted, and the proposed fix is to read the mode from where it already lives.
- [forge 2026.9.8: a JetBrains preview and models on stdin](https://www.grahambrooks.com/post/forge-2026-9-8-jetbrains-preview/index.md) (2026-09-26): forge 2026.9.8 adds a live diagram preview plugin for JetBrains IDEs and lets build, check and export read a model from stdin, so unsaved editor buffers can be rendered.
- [Letting an agent read your mail: split the reader from the network](https://www.grahambrooks.com/post/letting-an-agent-read-your-mail/index.md) (2026-09-26): An agent that reads your inbox is reading text written by strangers, so whether the model behaves is the wrong question. The useful question is what the process holding that text can do. In the twin's mail reader, the answer is enforced by the OS rather than asked for in a prompt: the one process that can see Mail can't touch the network, and the model that ranks the mail has no tools. Some things still get through, and they're worth naming.
- [Cadence is a budget line: what scheduled automation cost a private repo](https://www.grahambrooks.com/post/cadence-is-a-budget-line/index.md) (2026-09-26): My GitHub Actions budget ran out, and development CI wasn't what used it up. Automation that mostly found nothing to do spent it. In a private repository, how often a scheduled workflow wakes up is a cost decision rather than a latency decision, and automation should be designed around what each wake-up costs.
- [Making a Code Graph Admit What It Doesn't Know (symgraph)](https://www.grahambrooks.com/post/symgraph-admitting-what-it-does-not-know/index.md) (2026-09-22): A code-intelligence index answered every question it was asked. Sixteen percent of its call edges pointed at things that cannot be called, its truncated lists said nothing about being truncated, and one of its tools had never worked at all. The month's work was almost entirely about replacing confident answers with calibrated ones.
- [Building Your Own Tools](https://www.grahambrooks.com/post/building-your-own-tools/index.md) (2026-09-07): Agents made it cheap to build software. The interesting consequence isn't that you can build more of it — it's that you can build software for exactly one known user, and software with one known user gets to delete its entire configuration layer.
- [Giving the Consumer a Representative in the Working Tree (brake)](https://www.grahambrooks.com/post/brake-exit-criteria-for-the-consumer/index.md) (2026-08-24): Every signal an agent uses to decide it is finished — compiler, tests, linter — is a question about the repository it is standing in. The consumers of the API it just changed are somewhere else entirely. brake makes 'who does this break?' answerable from files already in the tree, with no network, no broker, and no running service.
- [Architecture the Agentic Loop Can Actually Check (tropism)](https://www.grahambrooks.com/post/tropism-architecture-in-the-agentic-loop/index.md) (2026-08-08): Coding agents get fast feedback from compilers, tests, and linters — all of which are local. None of them knows the shape of the system. Tropism is an attempt to close that gap: one architecture ruleset, ten languages, no build, no network, sound enough to block a commit.
- [A Control Plane for a Personal GitHub Account](https://www.grahambrooks.com/post/automating-github-account-management/index.md) (2026-07-25): Running 120+ personal repositories as a self-sustaining estate: config-as-code, scheduled workflows, a deliberately non-admin GitHub App, and a bounded role for the model.
- [Porting Midje's Arrow to Rust (facts)](https://www.grahambrooks.com/post/facts-rust-testing-library/index.md) (2026-05-25): Why Clojure's `actual => expected` reads better than the testing toolbox Rust ships with, and what survives the port.
- [Running Local MCP Servers Without a Node or Python Runtime (bx)](https://www.grahambrooks.com/post/bx-lighter-mcp-servers/index.md) (2026-05-23): MCP server configs across the ecosystem default to npx . That quietly forces a Node runtime onto every machine that wants to run a native binary tool. bx is the missing primitive for the other case. I spent the weekend…
- [The Agentic Inner Loop: Sensors, Substrate, and Skills for Polyglot Development](https://www.grahambrooks.com/post/inner-loop-agentic-development/index.md) (2026-05-23): What the developer inner loop becomes when a coding agent is doing most of the iteration — and the substrate, sensors, codemods, and skills you need to build for it.
- [Team Code Review Without the Server: a CLI (casual-review)](https://www.grahambrooks.com/post/casual-review-cli-team-code-review/index.md) (2026-04-30): Most code review tools want to be a service. The interesting question is what falls out when you refuse to run one — and use git itself as the sync layer instead. I’ve spent the last few weeks building casual-review…
- [Code Review After the Pull Request](https://www.grahambrooks.com/post/code-review-after-the-pull-request/index.md) (2026-04-26): The pull request was built for a world where humans wrote most of the code. We don’t live there anymore. The pull request as a unit of review is a recent invention. GitHub shipped it in 2008. Before that, code…
- [A Code Knowledge Graph for Review, Not Generation](https://www.grahambrooks.com/post/code-knowledge-graph-for-review/index.md) (2026-04-26): The same graph that helps an agent write code can help a reviewer trust it. Almost nobody is using it that way. Every AI coding tool I’ve looked at in the last eighteen months — including codemap now called symgraph—…
- [A Rust-Native Architecture Toolchain: forge, puml, and adoc](https://www.grahambrooks.com/post/rust-native-architecture-toolchain/index.md) (2026-04-26): A Rust-Native Architecture Toolchain: forge, puml, and adoc Replacing the JVM and Ruby pieces of the architecture documentation stack with single static binaries Most of the tools I reach for when documenting architecture were built in another era. PlantUML wants…
- [Sandboxing AI Coding Agents: Why Isolation Matters](https://www.grahambrooks.com/post/ai-coding-isolation/index.md) (2026-03-22): The more context and tools an AI coding agent has access to, the better it performs. But more power means more risk. How do we harness the full capability of AI coding assistants while keeping our systems safe? The Problem:…
- [Exploring Your Backstage Catalog Without Backstage](https://www.grahambrooks.com/post/exploring-your-backstage-catalog-without-backstage/index.md) (2026-02-21): Exploring Your Backstage Catalog Without Backstage How bsv gives you instant visibility into your software catalog from the terminal Backstage has become the de facto standard for software catalogs. Thousands of organizations use it to track their services, APIs, teams,…
- [Seeing Your Codebase as a City](https://www.grahambrooks.com/post/seeing-your-codebase-as-a-city/index.md) (2026-02-21): Seeing Your Codebase as a City Why we need better ways to understand code at scale – and how 3D visualization can help Software teams accumulate code the way cities accumulate buildings. One project at a time, one service at…
- [Visualizing Project Structure with rv](https://www.grahambrooks.com/post/visualizing-project-structure-with-rv/index.md) (2026-02-21): Visualizing Project Structure with rv A fast, interactive way to see what’s actually in your project Every developer has had the experience of opening an unfamiliar codebase and trying to figure out what’s where. You run tree , get a…
- [Building a Code Knowledge Graph for AI Agents](https://www.grahambrooks.com/post/building-a-code-knowledge-graph-for-ai-agents/index.md) (2026-02-15): Building a Code Knowledge Graph for AI Agents How I rebuilt codegraph in Rust to give AI coding assistants a semantic map of your codebase There’s a fundamental tension at the heart of agentic coding today. AI models are remarkably…
- [Vibe Coding](https://www.grahambrooks.com/post/vibe-coding/index.md) (2026-01-25): Vibe Coding is an innovative approach to software development that emphasizes creativity, flow, and emotional engagement in the coding process. It encourages developers to tap into their intuition and passion for coding, fostering a more enjoyable and productive work environment.…
- [Pair Programming, Mob Programming, and AI Co-Pilots: A Comparative Analysis](https://www.grahambrooks.com/post/2023-07-05-pair-mob-programming-ai-co-pilots/index.md) (2023-07-05): Hello there, fellow tech enthusiasts! Today, we dive into a stimulating topic that has been stirring the world of software development: a comparison between pair programming, mob programming, and working with AI co-pilots. Let’s explore how these methodologies play out…
- [Working in Interesting Times: Generative AI as Disruptive Tech in Software Development](https://www.grahambrooks.com/post/2023-07-03-interesting-times-gen-ai/index.md) (2023-07-03): As someone delving into the world of software development, the journey seemed smooth and set. With incremental releases, continuous integration, and agile methodologies, it appeared the path was that of constant and iterative improvement. But just as I started getting…
- [Iteration Zero - the first iteration](https://www.grahambrooks.com/post/2022-11-25-iteration-zero/index.md) (2022-11-25): There has been quite a lot of commentary on various social media channels about agile ceremonies and the traps that they often pose to enterprises. if not taken in the context of the value that they provide. This is not…
- [Kilpse Blogging](https://www.grahambrooks.com/post/2021-09-11-kilpse-bloging/index.md) (2021-09-11): Interactive web applications are always more appealing than static sites. This blog explores using the klipse plugin to add interactive code snippets to this blog. Very often seeing the output of running code is key. I was really excited when…
- [User-defined build settings for Bazel builds](https://www.grahambrooks.com/post/2021-08-30-user-defined-bazel-arguments/index.md) (2021-08-30)
- [Text fingerprints](https://www.grahambrooks.com/post/2021-06-06-text-fingerprinting/index.md) (2021-06-06)
- [Installing built binaries locally with Bazel](https://www.grahambrooks.com/post/2021-05-31-bazel-local-install/index.md) (2021-05-31)
- [Go and Bazel to build containers](https://www.grahambrooks.com/post/2020-04-05-go-bazel-container/index.md) (2020-04-05): Yesterday I spent some time experimenting with building containerized Go applications. Writing a small restful web service in go is really quite straightforward and there are many better examples out there on the web. What was interesting for me was…
- [Technical Health over Technical Debt](https://www.grahambrooks.com/post/2018-12-27-technical-health-over-technical-debt/index.md) (2018-12-27): Ward Cunningham is credited with the first use of the team Complexity as Debt or Technical Debt (YouTube video) as a metaphor poor software implementation. For a software application or system technical debt refers to the internal code quality. We…
- [](https://www.grahambrooks.com/post/2018-12-09-of-languages-and-containers/index.md) (2018-12-09): At the start of my career I worked with fairly dumb terminals and mainframes. Programs were natively compiled but resources were limited and shared with the other users of the system. Shared computing power meant that we favored languages that…
- [](https://www.grahambrooks.com/post/2018-04-29-orchestration-and-choreography/index.md) (2018-04-29): Orchestration and Choreography are often discussed as design options for event driven systems. Some use the term interchangeably while others feel that the two are very distinct. I am in the later group in thinking that the two are very…
- [](https://www.grahambrooks.com/post/2018-02-17-quantifying-commit-risk/index.md) (2018-02-17): Risk is typically expressed as a function of likelihood and severity or impact. Probability is an important factor but this article is about understanding the potential impact of change on a production software environment. All changes carry an element of…
- [The path to a million (loc)](https://www.grahambrooks.com/post/2017-07-07-path-to-a-million/index.md) (2017-07-07): Over the last month or so I have been writing some data collection and simple analysis routines for the things we (developers) use every day. The ultimate goal is to have a system that can collect, interpret and recommend actions…
- [Builder anti-patterns](https://www.grahambrooks.com/post/2017-06-19-builder-antipatterns/index.md) (2017-06-19)
- [Commit History Metrics](https://www.grahambrooks.com/post/2017-06-15-commit-history-metrics/index.md) (2017-06-15): For the last few years I have been very interested in what we can learn about our software development processes by looking at the data generated by the tools that we use to manage and deploy our work. This work…
- [Defending the Domain Model](https://www.grahambrooks.com/post/2017-06-06-defending-the-domain-model/index.md) (2017-06-06): Creating useful software models that represent the buisness they serve is hard. Creating a single model for a business at a point in time might be possible but as the business changes models need to be continually updated. Because these…
- [Testing Logging](https://www.grahambrooks.com/post/2017-05-26-testing-logging/index.md) (2017-05-26): As a developer I recognise the importance of generating logs for the systems that I help design and develop. At the outset often everyone recognizes the importance of logging but somehow it’s very difficult to engage stake-holders in requirements. Building…
- [Templated styles](https://www.grahambrooks.com/post/2017-05-20-templated-styles/index.md) (2017-05-20): While developing web applications I have often needed to change the style of one or more elements based on the state of the data model used by the application. I have an inherent aversion to conditionals in views so went…
- [Emacs es-mode - REPL experiences for ElasticSearch development](https://www.grahambrooks.com/post/2016-08-09-elasticsearch-emacs-mode/index.md) (2016-08-09): I don’t usually write reviews but I was so deleted by es-mode for emacs that I felt compelled to share. If you have worked with REST APIs and ElasticSearch in particular you probably have had similar experiences of using something…
- [Dependency Inversion - Applying the principle](https://www.grahambrooks.com/post/2016-07-11-dependency-inversion/index.md) (2016-07-11)
- [The Value of Value Types](https://www.grahambrooks.com/post/2015-01-25-the-value-of-value-types/index.md) (2015-01-25): In domain driven design (DDD) we talk a lot about entities; objects that have identity and lifetimes that typically outlive their values. e.g. An account lives longer than the email address, name, postal address etc. Value types might be mentioned…
- [Build Analytics - better development understanding](https://www.grahambrooks.com/post/2015-01-19-build-analytics/index.md) (2015-01-19): Working with small teams is a lot of fun and I find it fairly easy to keep track of what is happening with version control and build systems. Errors and failures don’t come up that often and when they do…
- [Container-less web apps](https://www.grahambrooks.com/post/2014-04-07-container-less-web-applications/index.md) (2014-04-07): In his keynote ‘This is water’ Neal Ford talks about “Yesterday’s best practices become tomorrow’s anti-patterns”. This seems to be the case for application servers like WebSphere, WebLogic and JBoss. When these containers started to become popular (typically in large…
- [Service IoC containers](https://www.grahambrooks.com/post/2014-04-07-service-ioc-containers/index.md) (2014-04-07): How can we get the benefits of IoC containers at a higher level - the services that we deploy into environments? Typical service tiers are implemented with a fronting load balancer that allocates servers to satisfy requests. Applications or services…
- [Team Distribution Models and Conways Law](https://www.grahambrooks.com/post/2014-03-31-team-distribution-models/index.md) (2014-03-31): If Conway’s law applies the how we set up and organise teams should either be aligned to the architecture of the applicaiton or system being developed or application/system architecture will shift to match the team structure. Conways law organizations which…
- [lazybuilder v0.3](https://www.grahambrooks.com/post/2014-02-23-lazybuilder-v0-3/index.md) (2014-02-23): The idea for lazybuilder came up during a recent coding dojo doing code kata. We were using Vim and a separate terminal to run the tests. Switching back and forth between two windows when trying to move quickly seemed like…
- [CODE keyboard](https://www.grahambrooks.com/post/2014-01-28-code-keyboard/index.md) (2014-01-28): After a long wait CODE keyboard s are available again and I received mine last night. I have to confess that I am a bit of a keyboard junkie. I am reluctant to count them all but I am edging…
- [Cling A C++ REPL?!](https://www.grahambrooks.com/post/2013-12-19-cling-a-c-repl/index.md) (2013-12-19): Browsing some blogs recently I came across some interesting C++11 lambda code and thought it would be cool to try it out for myself. The idea of spinning up a project or even putting a new test in an existing…
- [Boost program_options](https://www.grahambrooks.com/post/2013-12-06-boost-program_options/index.md) (2013-12-06): I have been spending time recently writing command line apps in C++11. Each time I wanted a way of handling command line arguments flexibly. I chose to use the boost::program_options library. The documentation is pretty good but there are some…
- [Java build tools 2013](https://www.grahambrooks.com/post/2013-11-15-java-build-tools-2013/index.md) (2013-11-15): I am about to embark on a new Java project so I thought I would take a look at the current state of build tools for Java projects. First I thought I would draw up some assessment criteria to use…
- [ci console 0.0.2 released](https://www.grahambrooks.com/post/2013-10-12-ci-console-0-0-2-released/index.md) (2013-10-12): I like to commit code frequently when working on a project. I also like to use the command line for building, testing and committing code. So I thought it would be nice to have a way to check the build…
- [Zero Down-time - relational databases](https://www.grahambrooks.com/post/2013-08-29-zero-down-time-relational-databases/index.md) (2013-08-29): Continuous Deployment is the act of automatically deploying an application every time the build is successful. I am currently working with a development team that is working towards continuous deployment as part of their continuous delivery adoption plans. The system…
- [word-finder](https://www.grahambrooks.com/post/2013-08-13-word-finder/index.md) (2013-08-13): Following up on the [next_permutation]({% post_url 2013-08-03-next_permutation %}) from a couple of weeks ago word finder uses next_permutation to find words in character sequences. Uses the aspell C api to look up each permutation. Searching for 3,4,5 and 6 character…
- [What's in a name?](https://www.grahambrooks.com/post/2013-08-10-whats-in-a-name/index.md) (2013-08-10): Graham Brooks: Architect, Software Engineer Over the years I have been described as a programmer, analyst programmer, software developer, software engineer and many other derivation of software X professional. For most of the time it has not seemed to be…
- [next_permutation](https://www.grahambrooks.com/post/2013-08-03-next_permutation/index.md) (2013-08-03): Working on a small program recently I found a quirk in next_permutation. The prorgam read a sequence of characters from the command line and then tried to find words by testing each permuation. For a sequence of 3 characters there…
- [Emacs Sharing](https://www.grahambrooks.com/post/2013-07-25-emacs-sharing/index.md) (2013-07-25): I like Emacs. Some people like VI(M) but emacs has been in my toolbox for a long time and I feel very at home working with it. Updating the editor has become easier over the years and installing an update…
- [Campaign for better IO](https://www.grahambrooks.com/post/2013-03-03-campaign-for-better-io/index.md) (2013-03-03): Over the last 30 years I have used a lot of computers ranging from teletypes to laptops. I have also visited a lot of offices and seen the standard keyboards that people are using on a daily basis. In my…
- [All truth](https://www.grahambrooks.com/post/2013-02-14-all-truth/index.md) (2013-02-14): “All truth passes through three stages. First, it is ridiculed. Second, it is violently opposed. Third, it is accepted as being self-evident.” Arthur Schopenhauer, German philosopher (1788 – 1860)
- [If](https://www.grahambrooks.com/post/2013-02-14-if/index.md) (2013-02-14): Quotes: Things that inspire and be remembered “If you can dream - and not make dreams your master; If you can think - and not make thoughts your aim; If you can meet with Triumph and Disaster And treat those…
- [I can't believe I missed this!](https://www.grahambrooks.com/post/2013-02-06-i-cant-believe-i-missed-this/index.md) (2013-02-06): Just over 20 years ago Jack W. Reeves wrote an article in the C++ Journal entitled “What is Software Design?” and I missed it. Not only that but no one thought to point out that I was missing a very…
- [DRYing out code](https://www.grahambrooks.com/post/2012-12-31-drying-out-code/index.md) (2012-12-31): Removing duplicate code is a great way to improve the internal quality of your application code. Duplications mean that you have more code than you should and are often the source of more subtle bugs of the “I’ve already fixed…
- [Integrating GPUs in Application Development - From Concept to Deployment](https://www.grahambrooks.com/post/2012-12-24-integrating-gpus-in-application-development-from-concept-to-deployment/index.md) (2012-12-24): This post is a little overdue :( In June I presented at QCon NYC on using GPUs. It was a great chance to catch up on all the changes to C and C++ that I have missed out on in…
- [Automated refactoring for library updates](https://www.grahambrooks.com/post/2012-07-23-autmated-refactoring-for-library-updates/index.md) (2012-07-23): After watching Clang MapReduce – Automatic C++ Refactoring at Google Scale I was struck with the idea that this could help with the upgrade problem. Almost every application uses libraries. Those libraries need to be updated from time but each…
- [Metrics based Refactoring for cleaner code](https://www.grahambrooks.com/post/2012-01-02-metrics-based-refactoring-for-cleaner-code/index.md) (2012-01-02): Refactoring is a key practice to improved code hygiene. Making refactoring part of your next project is one thing but if you have just joined a team or project with a significant amount of debt how do you work on…
- [Oh My ZSH shell productivity](https://www.grahambrooks.com/post/2011-12-27-oh-my-zsh/index.md) (2011-12-27): oh-my-zsh is framework for managing zsh configuration. The default configuration adds some interesting enhancements. The following shows all the Java files in the current and sub directories. ls **/*.java Ryan Bates has a nice Railscast episode covering oh-my-zsh I have…
- [AgileDC - Introduction to Continuous Delivery](https://www.grahambrooks.com/post/2011-10-27-agiledc-introduction-to-continuous-delivery/index.md) (2011-10-27): Yesterday I presented a talk entitled Introduction to Continuous Delivery at AgileDC . The audience was great and the room packed which is always a recipe for success. I really enjoyed talking about Continuous Delivery and there were some really…
- [Agile DC](https://www.grahambrooks.com/post/2011-10-25-agile-dc/index.md) (2011-10-25): I am really syched about talking at AgileDC tomorrow. The topic of my talk is an Introduction to Continuous Delivery
- [Encapsulating Databases](https://www.grahambrooks.com/post/2011-08-11-encapsulating-databases/index.md) (2011-08-11): Small systems grow with success. As these systems grow they often take on more and more functionality either directly into the main system component or into sub-systems. As the systems grow in complexity and responsibility their database requirements grow at…
- [Insulating against failure using Caching Reverse Proxies](https://www.grahambrooks.com/post/2011-07-07-insulating-against-failure-using-caching-reverse-proxies/index.md) (2011-07-07): Reverse proxies have been around for a very long time and depending on your application either interesting additions or a key element to your architecture. Despite their long history I was recently reminded of some interesting applications of Caching reverse…
- [asciidoc experiments](https://www.grahambrooks.com/post/2011-06-26-asciidoc-experiments/index.md) (2011-06-26): I have always been interested in text processing systems. This is probably rooted in the time that I discovered computing and programming. At that time the state of the art was ROFF (T)ROFF and a whole family of plain text…
- [Open Source project durations](https://www.grahambrooks.com/post/2011-04-28-open-source-project-durations/index.md) (2011-04-28): During a recent discussion about open source development we wondered how long these projects lasted. In particular if there was a rapid drop off in activity. One of the great things about recent open source code repositories is that they…
- [Stabilizing Velocity](https://www.grahambrooks.com/post/2011-03-26-stabilizing-velocity/index.md) (2011-03-26): I came across this post by Michael Norton and thought I would reference it here: Stabilising Velocity Michael makes some keen observations on both causes and effects of unstable velocity. Predictable velocity is a key agile planning metric. There is…
- [Create MySQL database with Capistrano](https://www.grahambrooks.com/post/2011-01-24-create-mysql-database-with-capistrano/index.md) (2011-01-24): I was playing about with Capistrano over the weekend. I wanted to automate the deployment of a Rails application to my server. The server was (I thought) just about ready to accept the app but I did not want to…
- [Rake db:migrate MySQL gem dependency](https://www.grahambrooks.com/post/2011-01-24-rake-dbmigrate-mysql-gem-dependency/index.md) (2011-01-24): If you have already added gem ‘mysql2’ to your Gemfile but get a message saying that it is missing when you try to migrate Make sure that you have installed libmysql-ruby sudo apt-get install libmysql-ruby This one caught me out…
- [Five Ws sitting on a bench](https://www.grahambrooks.com/post/2011-01-22-five-ws-sitting-on-a-bench/index.md) (2011-01-22): Over the past year I have been involved in preparing quite a few documents, proposals, presentations etc. I have also been asked to review quite a few of these documents. As an author or reviewer I like test what I…
- [Pulse Camp 1.0 and RHoK](https://www.grahambrooks.com/post/2011-01-07-pulse-camp-1-0-and-rhok/index.md) (2011-01-07): One of the great things about working at a consultancy is that I get to meet a wide range of interesting clients with interesting problems that need solving. One of the most interesting for me was Pulse Camp 1.0 ,…
- [The new Mac App Store](https://www.grahambrooks.com/post/2011-01-07-the-new-mac-app-store/index.md) (2011-01-07): When Apple announced the new App Store for OS X I have to say I was a little underwhelmed at the prospect and did not think the new store would hold much interest. After all I have been pretty happy…
- [Emacs Package manager](https://www.grahambrooks.com/post/2010-12-24-emacs-package-manager/index.md) (2010-12-24): I have a long history with text editors and I have always been facinated with the different flavours of interfaces and capabilities. After working my way through ED and then VI Emacs was a bit of a revalation. I found…
- [Progressive Enhancement](https://www.grahambrooks.com/post/2010-12-24-progressive-enhancement/index.md) (2010-12-24): Progressive Enhancement is a web development technique or pattern. The basic premise is that a web site should be accessible to all users and then to overlay additional functionality based on the client’s capability. Web technologies and good web development…
- [Haml](https://www.grahambrooks.com/post/2010-12-19-haml/index.md) (2010-12-19): Haml is a markup language for generating xml and other markup - most popularly HTML. Over the past few weeks I have been writing a few Ruby on Rails applications and chose Haml as the templating language. For someone who…
- [Watching the white horses on the Hudson ...](https://www.grahambrooks.com/post/2010-12-12-watching-the-white-horses-on-the-hudson/index.md) (2010-12-12): Watching the white horses on the Hudson today and wondering why I am flying on a day like today.
- [A good day of discussions in Chicago tod...](https://www.grahambrooks.com/post/2010-11-16-a-good-day-of-discussions-in-chicago-tod/index.md) (2010-11-16): A good day of discussions in Chicago today. Although I should say yesterday given the time.
- [Test Driven Talks](https://www.grahambrooks.com/post/2010-11-07-test-driven-talks/index.md) (2010-11-07): Taking a leaf out of the XP book and in particular test driven development I have had some successes in using this idea when doing a presentation. I have dubbed the idea ‘Test driven talks’. The basic idea is to…
- [Technology Synergy](https://www.grahambrooks.com/post/2010-10-20-technology-synergy/index.md) (2010-10-20): I started writing this post quite some time ago but never got around to wrapping up the loose ends. The article is really a summary of what I learnt during a pretty intense media web site development project. Since pictures…
- [Testing - what to test when](https://www.grahambrooks.com/post/2010-10-20-testing-what-to-test-when/index.md) (2010-10-20): After tweeting that I wanted to have suggestions for blog entries I got a single reply asking for my thoughts on DAO and unit testing – essentially asking should DAO be unit tested. The problem with me answering this question…
- [Eben Bayer: Are mushrooms the new plastic?](https://www.grahambrooks.com/post/2010-10-06-eben-bayer-are-mushrooms-the-new-plastic/index.md) (2010-10-06): Fascinating TED video on using mushrooms to create materials with plastic characteristics. It looks like Nature got there first...
- [Fighting layout bugs](https://www.grahambrooks.com/post/2010-10-06-fighting-layout-bugs/index.md) (2010-10-06): Finding problems in the layout of web pages is just plain hard. But fighting layout bugs seems to hold a glimmer of light for web developers. Definitely something to check out. Michael Tamm presenting his brainchild is available http://www.infoq.com/presentations/Fighting-Layout-Bugs
- [Dallas geek night](https://www.grahambrooks.com/post/2010-08-18-dallas-geek-night/index.md) (2010-08-18): Last week I happened to be in Dallas for a client and was invited along to the Dallas Geeknight held at the ThoughtWorks offices there. The Dallas Geeknight is ‘oldschool’ which is not surprising since Paul Hammant informed me he…
- [Using a local Wiki for personal knowledge management](https://www.grahambrooks.com/post/2010-08-03-using-a-local-wiki-for-personal-knowledge-management/index.md) (2010-08-03): For sometime I have been wondering how best to manage all the information that collects in my laptop. I don’t even have to try to collect data it just arrives in an irregular stream of emails, instant messenger and other…
- [Agile Software Development and Golf](https://www.grahambrooks.com/post/2010-06-30-agile-software-development-and-golf/index.md) (2010-06-30): ![Golf putting]({{ site.url }}/images/golf-putting-banner.jpg) Faced with the question ‘What do you do?’ from family and friends is more challenging than it should be. Most other professions have been around longer than a generation but writing software applications is different. Especially…
- [Optimising build times](https://www.grahambrooks.com/post/2010-06-28-optimising-build-times/index.md) (2010-06-28): I just came across this post and want to remember it so posing here. http://doublebuffered.com/2009/02/11/optimizing-build-times-for-large-c-projects/ . I am most interested in the uplift in compilation time based on unused #includes and build reductions for SSDs.
- [New BTree algorithms for virtual memory systems](https://www.grahambrooks.com/post/2010-06-20-new-btree-algorithms-for-virtual-memory-systems/index.md) (2010-06-20): This is a very interesting article http://queue.acm.org/detail.cfm?id=1814327 which demonstrates that we should not take things for granted - including algorithms that have been around for a long time.
- [Blogging from emacs](https://www.grahambrooks.com/post/2010-05-05-blogging-from-emacs/index.md) (2010-05-05): After installing WebloggerMode some time ago I had not gotten around to trying it out so I thought I would take it for a spin with this entry. Nothing earth shattering but the interface is clean and I have a…
- [Performance testing web applications](https://www.grahambrooks.com/post/2010-04-25-performance-testing-web-applications/index.md) (2010-04-25): When performance testing a web application (as in raw operations per second) I have seem many people try to benchmark their new system against the agreed performance level right off the bat. The problem with this approach is that most…
- [7 days with the iPad](https://www.grahambrooks.com/post/2010-04-10-7-days-with-the-ipad/index.md) (2010-04-10): So it has been 7 days since buying an iPad. Has it been the life changing event promised by all the pre-launch advertising? In my case I don’t think my life has changed but it has been enhanced by having…
- [ReleaseIt partial review](https://www.grahambrooks.com/post/2010-04-10-releaseit-partial-review/index.md) (2010-04-10): I have been catching up on my reading recently and one of the books I have been trying looking forward to reading is ReleaseIt . I had heard very good things about the book and to my delight they are…
- [Scraping Railscasts](https://www.grahambrooks.com/post/2010-04-07-scraping-railscasts/index.md) (2010-04-07): I had a few moments today to get reacquainted with Ruby and Rails programming. It has been a while but I have found time to watch the occasional Railscast . I want to watch these videos while on the move…
- [iPad and keyboards](https://www.grahambrooks.com/post/2010-04-06-ipad-and-keyboards/index.md) (2010-04-06): There are some quirks to the way the apple bluetooth keyboard works with the iPad. Most of the keys work as you might expect and the pairing system works just fine. There is no real way to navigate around applications…
- [iPad first day on the road](https://www.grahambrooks.com/post/2010-04-05-ipad-first-day-on-the-road/index.md) (2010-04-05): Today I took my new iPad for a day at work: A colleague had a 3G card for his laptop and shared the connection. Strangely this caused the iPad to pause quite often as if it were trying to connect…
- [iPad first impressions](https://www.grahambrooks.com/post/2010-04-04-ipad-first-impressions/index.md) (2010-04-04): There has been a lot of hype around the iPad and I have to confess that after watching the original advertisement I was hooked. But was all the hype justified? On first use if you are an iPhone user there…
- [Post Redirect Get web interaction pattern](https://www.grahambrooks.com/post/2010-03-27-post-redirect-get-web-interaction-pattern/index.md) (2010-03-27): Post/Redirect/Get or Redirect after Post is an HTTP interaction pattern that can be used when developing web applications. I have been mentioning it quite a few times in my consulting work and thought I would take a stab a at…
- [Collaborating distributed teams](https://www.grahambrooks.com/post/2010-03-23-collaborating-distributed-teams/index.md) (2010-03-23): Internet Relay Chat (IRC) has been around for a very long time (1988) and Instant Messaging (IM) for even longer – although IM did not become really popular until the mid 90’s with the emergence of GUI clients. There are…
- [It always takes a second](https://www.grahambrooks.com/post/2010-03-18-it-always-takes-a-second/index.md) (2010-03-18): Why do application developers think that adding more functionality is always a good thing for the user? When I first started working on GUI applications (Windows 1.0) we worked very hard to get sub-second response times. Now in theory applications…
- [Inclined Keyboard on MBP](https://www.grahambrooks.com/post/2010-03-06-inclined-keyboard-on-mbp/index.md) (2010-03-06): ![Raising the MBP Keyboard]({{ site.url }}/images/raised-mbp-keyboard.jpg) As anyone who knows me will say I have a thing about keyboards and have a few in my current collection. On a whim today I bought the apple wireless keyboard thinking that I…
- [Face to Face pairing](https://www.grahambrooks.com/post/2010-02-28-face-to-face-pairing/index.md) (2010-02-28): Since joining ThoughtWorks in 2004 I have enjoyed Pair Programming and my programming skills have improved significantly. Working on a problem with someone else full time is one of those practices that is difficult to convince people off until they…
- [Server Rebuild - Part II](https://www.grahambrooks.com/post/2010-02-25-server-rebuild-part-ii/index.md) (2010-02-25): So after having the server nicely set up and ready for configuration I could not resist just ‘getting on with it’. I had grand plans to plan it out and record everything (good practice) but each step seemed so simple…
- [Age discrimination in technology](https://www.grahambrooks.com/post/2010-02-18-age-discrimination-in-technology/index.md) (2010-02-18): This article post ‘ The painful truth about age discrimination in tech ’ left me a little confused. Am I still considered a developer or have I given up the mantle and considered a statistic. Do I cut code? -…
- [Don't use application Zoom](https://www.grahambrooks.com/post/2010-02-18-dont-use-application-zoom/index.md) (2010-02-18): A plaintive call to not over use the lovely zoom features in Excel and Word. The zoom parameters are stored in the document so when you receive them it is very unlikely that your zoom setting will match my zoom…
- [Look after your tools](https://www.grahambrooks.com/post/2010-02-18-look-after-your-tools/index.md) (2010-02-18): Look after your tools and they will look after you! I was very lucky to grow up in the country with a father who enjoyed teaching me practical skills like carpentry, motor mechanics and just about every other skill needed…
- [Server rebuild – part 1](https://www.grahambrooks.com/post/2010-02-18-server-rebuild-part-1/index.md) (2010-02-18): I have been running my own server for some time now but my requirements have changed and the current underlying VM architecture does not conveniently support what I want to do. The current linux server is running under OpenVZ which…
- [The rise and fall of waterfall - on you tube](https://www.grahambrooks.com/post/2010-02-09-the-rise-and-fall-of-waterfall-on-you-tube/index.md) (2010-02-09): If you have been in software development for a while this might make you chuckle :) The Rise And Fall Of Waterfall
- [Switching back and forth - Intellij IDEA and Eclipse](https://www.grahambrooks.com/post/2010-02-05-switching-back-and-forth-intellij-idea-and-eclipse/index.md) (2010-02-05): I have to confess that I am an IntelliJ Idea fan. I will confess that the key bindings take a little getting used to - especially on a Mac but I find I am most productive using it. I do…
- [XP and the cost of change](https://www.grahambrooks.com/post/2010-02-01-xp-and-the-cost-of-change/index.md) (2010-02-01): I have found myself drawing the classic cost of change graph a few times recently so thought I would blog about it. The graph was popular a few year ago in explaining the differences between and eXtream Programming (XP) team…
- [Screen casting](https://www.grahambrooks.com/post/2010-01-31-screen-casting/index.md) (2010-01-31): There have been a number of threads recently talking about screen/podcasting and the software required to do a decent job so I thought I would blog about the setup I am using. After trying a few applications I eventually settled…
- [Wordpress theme update failure](https://www.grahambrooks.com/post/2010-01-30-wordpress-theme-update-failure/index.md) (2010-01-30): If like me you installed WordPress and added some themes before understanding that WordPress has a great way of adding themes through the UI then make sure that you have changed the ownership of the folders containing those themes. Otherwise…
- [Web application testing - episode 1](https://www.grahambrooks.com/post/2010-01-20-web-application-testing-episode-1/index.md) (2010-01-20): This is my first screencast so all and any comments welcome!! This screencast is about adding an acceptance test to validate the title element in the returned HTML from the application. [flowplayer src=http://www.grahambrooks.com/video/testing-web-apps-episode-1.mp4 width=550 height=413 ] The companion code for…
- [Cross post: A Brief And Incomplete History Of Build Pipelines](https://www.grahambrooks.com/post/2009-12-13-cross-post-a-brief-and-incomplete-history-of-build-pipelines/index.md) (2009-12-13): Sam Newman has just published a Brief And Incomplete History Of Build Pipelines which makes interesting reading. It will be interesting to see where the concepts take us in the next few years.
- [Subway reading](https://www.grahambrooks.com/post/2009-12-13-subway-reading/index.md) (2009-12-13): Over the last month I have been reading Prmodoro Technique Illustrated a fascinating book detailing a technique to apply real focus to problem solving and work in general. One problem I have with almost any kind of reading is finding…
- [Testing abstrations](https://www.grahambrooks.com/post/2009-11-18-testing-abstrations/index.md) (2009-11-18): These ideas were presented as at ThoughtWorks Agile Southeast conference in Atlanta. The idea for these diagrams came about after the first time I spoke about web test driven development at Agile East in Philadelphia and New York. I am…
- [How the Pendulum Swings](https://www.grahambrooks.com/post/2009-11-05-how-the-pendulum-swings/index.md) (2009-11-05): ![Car parts in a box]({{ site.url }}/images/car-parts-in-a-box.jpg) A couple of decades ago I spent quite a lot of time working on my car. To be honest it was near the end of its life when I bought it at auction…
- [Prag Pro Wri Mo](https://www.grahambrooks.com/post/2009-10-31-prag-pro-wri-mo/index.md) (2009-10-31): I am going to take part in Prag Pro Wri Mo to find out if I have the inclination and capacity to write or if I am one of those people who would have liked to have written a book.…
- [WebTDD at Agile East](https://www.grahambrooks.com/post/2009-10-31-webtdd-at-agile-east/index.md) (2009-10-31): Just a quick note to say thank you to everyone who attended my talk on Test Driven Web Development at Agile East this week.
- [Agile East WebTDD](https://www.grahambrooks.com/post/2009-10-26-agile-east-webtdd/index.md) (2009-10-26): On Thursday this week I will presenting a talk entitled ‘WebTDD’ at the ThoughtWorks Agile East conference in Conshohocken PA. It is the first outing for this talk and I have been working on the supporting software for some time.…
- [Wednesday evening in Seattle](https://www.grahambrooks.com/post/2009-10-08-wednesday-evening-in-seattle/index.md) (2009-10-08): ![Hyatt Regency]({{ site.url }}/images/IMG_0018.jpg) This photo was taken from the hotel bar on the top floor of the Hyatt Regency . We were lucky to arrive just as the sun was setting. If you look closely at the horizon you…
- [Its Tuesday in Seattle](https://www.grahambrooks.com/post/2009-10-07-its-tuesday-in-seattle/index.md) (2009-10-07): Not that I have seen anything of the city but I now find myself on the west cost after arriving on the east cost just over a week ago. The Hyatt Regency here is a pretty nice hotel though and…
- [Another excellent talk on Ted](https://www.grahambrooks.com/post/2009-10-02-another-excellent-talk-on-ted/index.md) (2009-10-02)
- [The big apple](https://www.grahambrooks.com/post/2009-10-02-the-big-apple/index.md) (2009-10-02): ![New York]({{ site.url }}/images/IMG_0009.jpg) October finds me in New York and for the last couple of days I have been walking to and from work (about 10 blocks). One thing that has struck me is that finding your way around…
- [Adium 1.4ß](https://www.grahambrooks.com/post/2009-08-24-adium-1-4s/index.md) (2009-08-24): I have just discovered that Adium - my favourite IM client for the mac has a new ß version available and now supports IRC so one less application to run every day.
- [Relaxation](https://www.grahambrooks.com/post/2009-07-19-relaxation/index.md) (2009-07-19): Another photo from the trip to Shenandoah. Yours truly taking time out… I remember there was a cool breeze drifting up the river - it was a warm day
- [Shenandoah '06](https://www.grahambrooks.com/post/2009-07-19-shenandoah-06/index.md) (2009-07-19): I found this whilst going through some old(ish) photos taken in Shenandoah national park in 2006. It brought a lot of memories back about that trip - which was just a weekend away but a little adventurous - the first…
- [Ultimate agility?](https://www.grahambrooks.com/post/2009-07-19-ultimate-agility/index.md) (2009-07-19): The truly amazing Dan Osman This has got to be one of the ultimate demonstrations of agility, confidence and poise....
- [Java Properties handling - 1](https://www.grahambrooks.com/post/2009-07-18-java-properties-handling-1/index.md) (2009-07-18): I have been on a number of Java projects recently and one of the things I end up brewing for each of these projects is some enhanced management of runtime properties. Having said there are problems with using .properties files…
- [Search](https://www.grahambrooks.com/search/index.md)
