41554 blogs · [ { "id": "01a087a4-c99d-73c0-bfb7-43301ebcced0", "title": "The Problem With Your AI Tests", "url": "https://www.michaelbromley.co.uk/blog/the-problem-with-your-ai-tests/", "published_at": "2026-09-07T07:00:00+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f5178e8a22", "title": "Zooming Out", "url": "https://www.michaelbromley.co.uk/blog/zooming-out/", "published_at": "2026-08-11T07:00:00+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f517f23825", "title": "AI Made Me Write This", "url": "https://www.michaelbromley.co.uk/blog/ai-made-me-write-this/", "published_at": "2026-07-31T07:00:00+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f51847b0fb", "title": "High Modernism & Software Design", "url": "https://www.michaelbromley.co.uk/blog/high-modernism-software-design/", "published_at": "2022-01-18T08:00:00+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f518584a3c", "title": "What Might Happen If You Share It", "url": "https://www.michaelbromley.co.uk/blog/what-might-happen-if-you-share-it/", "published_at": "2022-01-02T13:00:00+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f518bda838", "title": "But What About the Bus Factor?", "url": "https://www.michaelbromley.co.uk/blog/but-what-about-the-bus-factor/", "published_at": "2021-12-01T07:00:59+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f5191c4037", "title": "Welcome to the Twitterscape", "url": "https://www.michaelbromley.co.uk/blog/welcome-to-the-twitterscape/", "published_at": "2019-04-10T07:00:59+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f5199e99c7", "title": "On Working Alone", "url": "https://www.michaelbromley.co.uk/blog/on-working-alone/", "published_at": "2018-11-22T07:00:59+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f519e8029f", "title": "Mocking Classes with TypeScript", "url": "https://www.michaelbromley.co.uk/blog/mocking-classes-with-typescript/", "published_at": "2018-05-08T07:00:59+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f51a3352fd", "title": "Museum of the Analog Native", "url": "https://www.michaelbromley.co.uk/blog/museum-of-the-analog-native/", "published_at": "2018-04-10T20:15:59+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f51a6e6375", "title": "A Tale of Two Issues", "url": "https://www.michaelbromley.co.uk/blog/a-tale-of-two-issues/", "published_at": "2018-01-20T18:52:59+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f51ad966b8", "title": "Notes on AngularConnect 2017", "url": "https://www.michaelbromley.co.uk/blog/notes-on-angularconnect-2017/", "published_at": "2017-11-09T08:45:59+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f51b078d8d", "title": "The Covert Opt-In", "url": "https://www.michaelbromley.co.uk/blog/the-covert-opt-in/", "published_at": "2017-08-04T18:52:59+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f51b90a64b", "title": "Going Static with Hugo", "url": "https://www.michaelbromley.co.uk/blog/going-static-with-hugo/", "published_at": "2017-07-30T18:52:59+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f51c284a9d", "title": "About", "url": "https://www.michaelbromley.co.uk/about/", "published_at": "2017-06-11T19:28:35+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f51c598b55", "title": "Productivity Is Happiness", "url": "https://www.michaelbromley.co.uk/blog/productivity-is-happiness/", "published_at": "2017-03-06T19:45:31+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f51d3fef1c", "title": "The Elevator of Infinite Abstraction", "url": "https://www.michaelbromley.co.uk/blog/the-elevator-of-infinite-abstraction/", "published_at": "2017-02-16T16:19:08+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f51d841e34", "title": "Some notes on Angular 2 AoT mode with Webpack, Sass & ngtools", "url": "https://www.michaelbromley.co.uk/blog/some-notes-on-angular-2-aot-mode-with-webpack-sass-ngtools/", "published_at": "2016-10-09T07:18:10+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f51e103e78", "title": "SKQW: JavaScript Audio Visualizer", "url": "https://www.michaelbromley.co.uk/project/2016-09-08-skqw-javascript-audio-visualizer/", "published_at": "2016-09-08T12:08:31+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f51eedcd13", "title": "An Early Look at SKQW: JavaScript Audio Visualizer", "url": "https://www.michaelbromley.co.uk/blog/an-early-look-at-skqw-javascript-audio-visualizer/", "published_at": "2016-08-26T08:25:07+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f51f135ecf", "title": "Why I Haven’t Fixed Your Issue Yet", "url": "https://www.michaelbromley.co.uk/blog/why-i-havent-fixed-your-issue-yet/", "published_at": "2016-05-13T14:22:02+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f51f262afa", "title": "Components with Custom Templates in Angular 2 (beta.7)", "url": "https://www.michaelbromley.co.uk/blog/components-with-custom-templates-in-angular-2-beta.7/", "published_at": "2016-02-26T09:10:03+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f51f9b88e4", "title": "Angular 2, CommonJS and Circular Dependencies", "url": "https://www.michaelbromley.co.uk/blog/angular-2-commonjs-and-circular-dependencies/", "published_at": "2016-01-29T08:50:04+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f51fa0983f", "title": "AngularConnect: Summary and Analysis", "url": "https://www.michaelbromley.co.uk/blog/angularconnect-summary-and-analysis/", "published_at": "2015-10-22T19:36:00+00:00" }, { "id": "01a087a4-c99e-72da-8634-a5f5200e92a5", "title": "The Republic of Virtue: Terror, Tolerance and the Internet", "url": "https://www.michaelbromley.co.uk/blog/the-republic-of-virtue-terror-tolerance-and-the-internet/", "published_at": "2015-07-18T04:58:22+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644ada5b487", "title": "Fixing Chrome Autofill: Mysterious Wrong Values Solved", "url": "https://www.michaelbromley.co.uk/blog/fixing-chrome-autofill-mysterious-wrong-values-solved/", "published_at": "2015-07-10T14:52:17+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644ade25134", "title": "Automatic @import of Less/Sass files with Gulp", "url": "https://www.michaelbromley.co.uk/blog/automatic-@import-of-less/sass-files-with-gulp/", "published_at": "2015-04-15T20:13:57+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644ae9d9777", "title": "angular-wordpress-seed: A complete example project with AngularJS and the WordPress JSON REST API", "url": "https://www.michaelbromley.co.uk/blog/angular-wordpress-seed-a-complete-example-project-with-angularjs-and-the-wordpress-json-rest-api/", "published_at": "2015-03-28T10:16:33+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644aeed5aff", "title": "A Note on Angular Expressions And JavaScript Identifiers", "url": "https://www.michaelbromley.co.uk/blog/a-note-on-angular-expressions-and-javascript-identifiers/", "published_at": "2015-03-13T09:39:41+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644af2cf4aa", "title": "Chromata: A Generative Art Tool", "url": "https://www.michaelbromley.co.uk/project/2015-03-02-chromata-a-generative-art-tool/", "published_at": "2015-03-02T17:18:43+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644b028ac81", "title": "Book Review: Responsive Web Design with AngularJS; plus Musings on Technical Writing", "url": "https://www.michaelbromley.co.uk/blog/book-review-responsive-web-design-with-angularjs-plus-musings-on-technical-writing/", "published_at": "2015-02-02T22:05:56+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644b0dfd6c5", "title": "Exploring ES6 Classes In AngularJS 1.x", "url": "https://www.michaelbromley.co.uk/blog/exploring-es6-classes-in-angularjs-1.x/", "published_at": "2015-01-28T17:10:14+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644b1d3b2d6", "title": "The Programmer Dad", "url": "https://www.michaelbromley.co.uk/blog/the-programmer-dad/", "published_at": "2015-01-07T09:52:06+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644b2059299", "title": "One Year of GitHub and Open Source", "url": "https://www.michaelbromley.co.uk/blog/one-year-of-github-and-open-source/", "published_at": "2014-12-23T15:53:28+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644b26f6d69", "title": "Heavenly Glory: Instant Kung Fu with WebRTC + Web Audio", "url": "https://www.michaelbromley.co.uk/project/2014-12-08-heavenly-glory-instant-kung-fu-with-webrtc-web-audio/", "published_at": "2014-12-08T08:12:38+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644b2e38765", "title": "Building a 3D Game with CSS + HTML", "url": "https://www.michaelbromley.co.uk/blog/building-a-3d-game-with-css--html/", "published_at": "2014-11-09T21:06:16+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644b3ddf536", "title": "CSS Space Shooter", "url": "https://www.michaelbromley.co.uk/project/2014-11-09-css-space-shooter/", "published_at": "2014-11-09T16:58:27+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644b4826c2b", "title": "My Thoughts on ngEurope 2014 and AngularJS 2.0", "url": "https://www.michaelbromley.co.uk/blog/my-thoughts-on-ngeurope-2014-and-angularjs-2.0/", "published_at": "2014-10-24T08:30:18+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644b4b44b59", "title": "Writing Multi-Element Directives in AngularJS", "url": "https://www.michaelbromley.co.uk/blog/writing-multi-element-directives-in-angularjs/", "published_at": "2014-10-14T09:52:55+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644b51f6b07", "title": "CSS + JavaScript 3D Butterfly: A Case Study", "url": "https://www.michaelbromley.co.uk/blog/css--javascript-3d-butterfly-a-case-study/", "published_at": "2014-09-24T05:39:39+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644b57c5d23", "title": "Experiences Building a Website with AngularJS + WP-API (WordPress API)", "url": "https://www.michaelbromley.co.uk/blog/experiences-building-a-website-with-angularjs--wp-api-wordpress-api/", "published_at": "2014-09-19T15:26:15+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644b59f8dab", "title": "Horizonal.js", "url": "https://www.michaelbromley.co.uk/project/2014-09-19-horizonal-js/", "published_at": "2014-09-19T10:23:21+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644b670434b", "title": "Draw A Cat", "url": "https://www.michaelbromley.co.uk/project/2014-09-19-draw-a-cat/", "published_at": "2014-09-19T10:10:08+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644b7416a47", "title": "SoundCloud Visualizer", "url": "https://www.michaelbromley.co.uk/project/2014-09-19-soundcloud-visualizer/", "published_at": "2014-09-19T09:50:50+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644b7de9847", "title": "A Note on Touch (Pointer) Events in Internet Explorer", "url": "https://www.michaelbromley.co.uk/blog/a-note-on-touch-pointer-events-in-internet-explorer/", "published_at": "2014-08-07T08:08:29+00:00" }, { "id": "01a087a4-c99f-724c-a64d-3644b7e7a73b", "title": "Enable Rich Social Sharing in Your AngularJS App", "url": "https://www.michaelbromley.co.uk/blog/enable-rich-social-sharing-in-your-angularjs-app/", "published_at": "2014-07-02T06:08:36+00:00" }, { "id": "01a087a4-c9a0-725d-9df7-317aa221307e", "title": "A Killer Startup Idea", "url": "https://www.michaelbromley.co.uk/blog/a-killer-startup-idea/", "published_at": "2014-06-18T08:20:34+00:00" }, { "id": "01a087a4-c9a0-725d-9df7-317aa271ea2a", "title": "What Makes A Good Tech Talk?", "url": "https://www.michaelbromley.co.uk/blog/what-makes-a-good-tech-talk/", "published_at": "2014-06-16T14:25:34+00:00" }, { "id": "01a087a4-c9a0-725d-9df7-317aa2de6ef3", "title": "Site-Wide Split Tests With Google Analytics Content Experiments", "url": "https://www.michaelbromley.co.uk/blog/site-wide-split-tests-with-google-analytics-content-experiments/", "published_at": "2014-06-13T07:39:28+00:00" }, { "id": "01a087a4-c9a0-725d-9df7-317aa3d3189d", "title": "Paginate (almost) Anything in AngularJS", "url": "https://www.michaelbromley.co.uk/blog/paginate-almost-anything-in-angularjs/", "published_at": "2014-05-09T19:46:45+00:00" }, { "id": "01a087a4-c9a0-725d-9df7-317aa44a29da", "title": "Auto-breadcrumbs with angular-ui-router", "url": "https://www.michaelbromley.co.uk/blog/auto-breadcrumbs-with-angular-ui-router/", "published_at": "2014-04-04T13:19:51+00:00" }, { "id": "01a087a4-c9a0-725d-9df7-317aa4fc800f", "title": "Simple 1D Noise in JavaScript", "url": "https://www.michaelbromley.co.uk/blog/simple-1d-noise-in-javascript/", "published_at": "2014-03-14T07:15:00+00:00" }, { "id": "01a087a4-c9a0-725d-9df7-317aa519c48a", "title": "Confessions of an Intermediate Programmer", "url": "https://www.michaelbromley.co.uk/blog/confessions-of-an-intermediate-programmer/", "published_at": "2014-02-18T18:14:52+00:00" }, { "id": "01a087a4-c9a0-725d-9df7-317aa580a827", "title": "Audio Visualization with Web Audio, Canvas and the Soundcloud API", "url": "https://www.michaelbromley.co.uk/blog/audio-visualization-with-web-audio-canvas-and-the-soundcloud-api/", "published_at": "2014-01-27T13:54:41+00:00" }, { "id": "01a087a4-c9a0-725d-9df7-317aa586d9f3", "title": "Using Disqus with AngularJS", "url": "https://www.michaelbromley.co.uk/blog/using-disqus-with-angularjs/", "published_at": "2014-01-24T16:41:37+00:00" }, { "id": "01a087a4-c9a0-725d-9df7-317aa65109e9", "title": "An Overview of the ng-conf 2014 Presentations", "url": "https://www.michaelbromley.co.uk/blog/an-overview-of-the-ng-conf-2014-presentations/", "published_at": "2014-01-22T19:10:39+00:00" }, { "id": "01a087a4-c9a0-725d-9df7-317aa6bfa4e6", "title": "An Ordinal Date Filter for AngularJS", "url": "https://www.michaelbromley.co.uk/blog/an-ordinal-date-filter-for-angularjs/", "published_at": "2014-01-19T15:29:46+00:00" }, { "id": "01a087a4-c9a0-725d-9df7-317aa7009935", "title": "How I got Zurb Foundation 4 to work with IE8 with zero lines of code", "url": "https://www.michaelbromley.co.uk/blog/how-i-got-zurb-foundation-4-to-work-with-ie8-with-zero-lines-of-code/", "published_at": "2014-01-19T06:14:03+00:00" } ] posts Claim your blog
Back to michaelbromley.co.uk
Blog · corpus.blog/blogs/michaelbromley.co.uk/posts

michaelbromley.co.uk

michaelbromley.co.uk

2026

2022

2021

2019

2018

2017

2016

2015

2014