{"generator":"Jekyll","link":[{"@attributes":{"href":"https:\/\/roberthopman.com\/feed.xml","rel":"self","type":"application\/atom+xml"}},{"@attributes":{"href":"https:\/\/roberthopman.com\/","rel":"alternate","type":"text\/html"}}],"updated":"2026-08-09T18:39:10+00:00","id":"https:\/\/roberthopman.com\/feed.xml","title":"Blog","subtitle":"Technical blog by Robert Hopman with practical guides on syntax, patterns, upgrades, and software development best practices for developers","author":{"name":"Robert Hopman","email":"robert@bonaroo.nl"},"entry":[{"title":"Diagnose a bug: build the feedback loop first","link":{"@attributes":{"href":"https:\/\/roberthopman.com\/diagnose-a-bug\/","rel":"alternate","type":"text\/html","title":"Diagnose a bug: build the feedback loop first"}},"published":"2026-08-09T00:00:00+00:00","updated":"2026-08-09T00:00:00+00:00","id":"https:\/\/roberthopman.com\/diagnose-a-bug","content":{"@attributes":{"type":"html"}},"author":{"name":"Robert Hopman","email":"robert@bonaroo.nl"},"category":[{"@attributes":{"term":"debugging"}},{"@attributes":{"term":"testing"}},{"@attributes":{"term":"process"}}],"summary":{"@attributes":{"type":"html"}}},{"title":"Building a B2B CRUD app with Postgres and TypeScript","link":{"@attributes":{"href":"https:\/\/roberthopman.com\/building-a-b2b-crud-app-with-postgres-and-javascript\/","rel":"alternate","type":"text\/html","title":"Building a B2B CRUD app with Postgres and TypeScript"}},"published":"2026-07-05T00:00:00+00:00","updated":"2026-07-05T00:00:00+00:00","id":"https:\/\/roberthopman.com\/building-a-b2b-crud-app-with-postgres-and-javascript","content":{"@attributes":{"type":"html"}},"author":{"name":"Robert Hopman","email":"robert@bonaroo.nl"},"category":[{"@attributes":{"term":"javascript"}},{"@attributes":{"term":"typescript"}},{"@attributes":{"term":"postgresql"}},{"@attributes":{"term":"crud"}}],"summary":{"@attributes":{"type":"html"}}},{"title":"Drawing Open Circular Cycle Diagrams with a Python SVG Generator","link":{"@attributes":{"href":"https:\/\/roberthopman.com\/drawing-open-circular-cycle-diagrams-in-svg\/","rel":"alternate","type":"text\/html","title":"Drawing Open Circular Cycle Diagrams with a Python SVG Generator"}},"published":"2026-05-31T00:00:00+00:00","updated":"2026-05-31T00:00:00+00:00","id":"https:\/\/roberthopman.com\/drawing-open-circular-cycle-diagrams-in-svg","content":{"@attributes":{"type":"html"}},"author":{"name":"Robert Hopman","email":"robert@bonaroo.nl"},"category":[{"@attributes":{"term":"svg"}},{"@attributes":{"term":"graphviz"}},{"@attributes":{"term":"mermaid"}},{"@attributes":{"term":"plantuml"}},{"@attributes":{"term":"diagrams"}},{"@attributes":{"term":"python"}}],"summary":{"@attributes":{"type":"html"}}},{"title":"The Agile Process","link":{"@attributes":{"href":"https:\/\/roberthopman.com\/the-agile-process\/","rel":"alternate","type":"text\/html","title":"The Agile Process"}},"published":"2026-05-30T00:00:00+00:00","updated":"2026-05-30T00:00:00+00:00","id":"https:\/\/roberthopman.com\/the-agile-process","content":{"@attributes":{"type":"html"}},"author":{"name":"Robert Hopman","email":"robert@bonaroo.nl"},"category":[{"@attributes":{"term":"agile"}},{"@attributes":{"term":"process"}},{"@attributes":{"term":"planning"}},{"@attributes":{"term":"release"}},{"@attributes":{"term":"sprint"}},{"@attributes":{"term":"personas"}},{"@attributes":{"term":"epics"}},{"@attributes":{"term":"stories"}}],"summary":{"@attributes":{"type":"html"}}},{"title":"linecounter: a fast quality read for a Ruby repo","link":{"@attributes":{"href":"https:\/\/roberthopman.com\/linecounter-fast-quality-signals-for-ruby-repos\/","rel":"alternate","type":"text\/html","title":"linecounter: a fast quality read for a Ruby repo"}},"published":"2026-05-24T00:00:00+00:00","updated":"2026-05-24T00:00:00+00:00","id":"https:\/\/roberthopman.com\/linecounter-fast-quality-signals-for-ruby-repos","content":{"@attributes":{"type":"html"}},"author":{"name":"Robert Hopman"},"category":[{"@attributes":{"term":"ruby"}},{"@attributes":{"term":"gem"}},{"@attributes":{"term":"code-quality"}},{"@attributes":{"term":"open-source"}},{"@attributes":{"term":"tools"}}],"summary":{"@attributes":{"type":"html"}}},{"title":"Measuring Memory for Ruby Methods","link":{"@attributes":{"href":"https:\/\/roberthopman.com\/measuring-memory-for-ruby-methods\/","rel":"alternate","type":"text\/html","title":"Measuring Memory for Ruby Methods"}},"published":"2026-03-29T00:00:00+00:00","updated":"2026-03-29T00:00:00+00:00","id":"https:\/\/roberthopman.com\/measuring-memory-for-ruby-methods","content":{"@attributes":{"type":"html"}},"author":{"name":"Robert Hopman","email":"robert@bonaroo.nl"},"category":[{"@attributes":{"term":"ruby"}},{"@attributes":{"term":"rails"}},{"@attributes":{"term":"performance"}},{"@attributes":{"term":"memory"}}],"summary":{"@attributes":{"type":"html"}}},{"title":"A History of Quality in Software Engineering","link":{"@attributes":{"href":"https:\/\/roberthopman.com\/history-of-quality-in-software-engineering\/","rel":"alternate","type":"text\/html","title":"A History of Quality in Software Engineering"}},"published":"2026-02-03T00:00:00+00:00","updated":"2026-02-03T00:00:00+00:00","id":"https:\/\/roberthopman.com\/history-of-quality-in-software-engineering","content":{"@attributes":{"type":"html"}},"author":{"name":"Robert Hopman","email":"robert@bonaroo.nl"},"category":[{"@attributes":{"term":"quality"}},{"@attributes":{"term":"tdd"}},{"@attributes":{"term":"bdd"}},{"@attributes":{"term":"xp"}},{"@attributes":{"term":"testing"}},{"@attributes":{"term":"agile"}}],"summary":{"@attributes":{"type":"html"}}},{"title":"Rule-Based OOP: Git, Methods, Classes","link":{"@attributes":{"href":"https:\/\/roberthopman.com\/oop-rules-for-git-methods-and-classes\/","rel":"alternate","type":"text\/html","title":"Rule-Based OOP: Git, Methods, Classes"}},"published":"2026-01-10T00:00:00+00:00","updated":"2026-01-10T00:00:00+00:00","id":"https:\/\/roberthopman.com\/oop-rules-for-git-methods-and-classes","content":{"@attributes":{"type":"html"}},"author":{"name":"Robert Hopman","email":"robert@bonaroo.nl"},"category":[{"@attributes":{"term":"oop"}},{"@attributes":{"term":"rules"}},{"@attributes":{"term":"git"}},{"@attributes":{"term":"design"}}],"summary":{"@attributes":{"type":"html"}}},{"title":"Moving from GitLab to GitHub","link":{"@attributes":{"href":"https:\/\/roberthopman.com\/migrate-gitlab-to-github\/","rel":"alternate","type":"text\/html","title":"Moving from GitLab to GitHub"}},"published":"2026-01-09T00:00:00+00:00","updated":"2026-01-09T00:00:00+00:00","id":"https:\/\/roberthopman.com\/migrate-gitlab-to-github","content":{"@attributes":{"type":"html"}},"author":{"name":"Robert Hopman","email":"robert@bonaroo.nl"},"category":[{"@attributes":{"term":"git"}},{"@attributes":{"term":"migration"}},{"@attributes":{"term":"gitlab"}},{"@attributes":{"term":"github"}}],"summary":{"@attributes":{"type":"html"}}},{"title":"Rails application boilerplates","link":{"@attributes":{"href":"https:\/\/roberthopman.com\/rails-application-boilerplates\/","rel":"alternate","type":"text\/html","title":"Rails application boilerplates"}},"published":"2026-01-04T00:00:00+00:00","updated":"2026-05-26T00:00:00+00:00","id":"https:\/\/roberthopman.com\/rails-application-boilerplates","content":{"@attributes":{"type":"html"}},"author":{"name":"Robert Hopman","email":"robert@bonaroo.nl"},"category":[{"@attributes":{"term":"ruby"}},{"@attributes":{"term":"rails"}}],"summary":{"@attributes":{"type":"html"}}}]}