41554 blogs · [ { "id": "01a08c56-ed21-703a-8114-ef81077cafb5", "title": "How I use Agents to Extract Hidden Feedback from Github and Improved Rector", "url": "https://tomasvotruba.com/blog/how-I-use-agents-to-extract-hidden-feedback-from-github-and-improved-rector", "published_at": "2026-07-14T00:00:00+00:00" }, { "id": "01a08c56-ed21-703a-8114-ef81080a4811", "title": "7 tips to Improve your ECS Config", "url": "https://tomasvotruba.com/blog/7-tips-to-improve-your-ecs-config", "published_at": "2026-06-15T00:00:00+00:00" }, { "id": "01a08c56-ed21-703a-8114-ef81083758f7", "title": "ECS 13.2: Lighter, Smarter and More Fun for Large/Legacy Projects", "url": "https://tomasvotruba.com/blog/ecs-13-2-lighter-smarter-more-fun-for-large-legacy-projects", "published_at": "2026-06-13T00:00:00+00:00" }, { "id": "01a08c56-ed21-703a-8114-ef8108e3d1ec", "title": "Find the One PHPStan Rule You Need, Beyond the Core", "url": "https://tomasvotruba.com/blog/find-the-one-phpstan-rule-you-need-beyond-the-core", "published_at": "2026-05-29T00:00:00+00:00" }, { "id": "01a08c56-ed21-703a-8114-ef81097484a9", "title": "Introducing CTOR: Prefer Constructor over Always-Called Setters", "url": "https://tomasvotruba.com/blog/introducing-ctor-prefer-constructor-over-always-called-setters", "published_at": "2026-05-27T00:00:00+00:00" }, { "id": "01a08c56-ed21-703a-8114-ef810a4192ad", "title": "Alice, Nelmio, Hautelook, Faker - How to Upgrade Doctrine Fixtures - Part 3", "url": "https://tomasvotruba.com/blog/alice-nelmio-hautelook-faker-and-how-to-upgrade-doctrine-fixtures-part-3", "published_at": "2026-05-11T00:00:00+00:00" }, { "id": "01a08c56-ed21-703a-8114-ef810b19b5e5", "title": "5 Books I Enjoyed Reading in 2025", "url": "https://tomasvotruba.com/blog/5-books-2025", "published_at": "2026-01-12T00:00:00+00:00" }, { "id": "01a08c56-ed21-703a-8114-ef810b6b7e81", "title": "The Patch for Laravel Container", "url": "https://tomasvotruba.com/blog/the-patch-for-laravel-container", "published_at": "2025-05-06T00:00:00+00:00" }, { "id": "01a08c56-ed21-703a-8114-ef810be4cb0f", "title": "How we Maintain Dozens of Symfony Workflows with Peace", "url": "https://tomasvotruba.com/blog/how-we-maintain-dozens-of-symfony-workflows-with-peace", "published_at": "2025-04-17T00:00:00+00:00" }, { "id": "01a08c56-ed21-703a-8114-ef810c884160", "title": "Upgrading Sensio Security Annotation: The Full Story", "url": "https://tomasvotruba.com/blog/upgrading-sensio-security-annotation-the-full-story", "published_at": "2025-04-09T00:00:00+00:00" }, { "id": "01a08c56-ed21-703a-8114-ef810d8112f7", "title": "Create Weird Fun PHPStan Rules like Nobody's Watching", "url": "https://tomasvotruba.com/blog/create-weird-fun-phpstan-rules", "published_at": "2025-03-12T00:00:00+00:00" }, { "id": "01a08c56-ed21-703a-8114-ef810e47a5a6", "title": "Why AST beats GPTs - featuring php-parser, ChatGPT 4.5 and Grok 3", "url": "https://tomasvotruba.com/blog/why-ast-beats-gpt", "published_at": "2025-03-07T00:00:00+00:00" }, { "id": "01a08c56-ed21-703a-8114-ef810efcd0b7", "title": "Custom PHPStan Rules to Improve Every Symfony project", "url": "https://tomasvotruba.com/blog/custom-phpstan-rules-to-improve-every-symfony-project", "published_at": "2025-03-03T00:00:00+00:00" }, { "id": "01a08c56-ed21-703a-8114-ef810f14fec1", "title": "Cost-effective Container Smoke Tests every Symfony Project must have", "url": "https://tomasvotruba.com/blog/cost-effective-container-smoke-tests-every-symfony-project-must-have", "published_at": "2025-01-22T00:00:00+00:00" }, { "id": "01a08c56-ed21-703a-8114-ef810f3ec3f0", "title": "5 Books I enjoyed Reading in 2024", "url": "https://tomasvotruba.com/blog/5-books-i-enjoyed-reading-in-2024", "published_at": "2025-01-18T00:00:00+00:00" }, { "id": "01a08c56-ed21-703a-8114-ef810fe97aeb", "title": "Alice, Nelmio, Hautelook, Faker - How to upgrade Doctrine Fixtures - Part 2", "url": "https://tomasvotruba.com/blog/alice-nelmio-hautelook-faker-and-how-to-upgrade-doctrine-fixtures-part-2", "published_at": "2025-01-14T00:00:00+00:00" }, { "id": "01a08c56-ed21-703a-8114-ef81109a0c03", "title": "Symfony @required - Avoid the Temptation and Use it Right", "url": "https://tomasvotruba.com/blog/symfony-required-avoid-the-temptation-and-use-it-right", "published_at": "2025-01-08T00:00:00+00:00" }, { "id": "01a08c56-ed21-703a-8114-ef8110e095af", "title": "Unused Definitions with Behat Static Analysis", "url": "https://tomasvotruba.com/blog/unused-definitions-with-behat-static-analysis", "published_at": "2025-01-06T00:00:00+00:00" }, { "id": "01a08c56-ed21-703a-8114-ef8111bb9a23", "title": "Why Final Classes make Rector and PHPStan more powerful", "url": "https://tomasvotruba.com/blog/why-final-classes-make-rector-and-phpstan-more-powerful", "published_at": "2025-01-03T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37beeb63a4", "title": "Off the Beaten Path to Upgrade Symfony 2.8 to 7.2", "url": "https://tomasvotruba.com/blog/off-the-beaten-path-to-upgrade-symfony-28-to-72", "published_at": "2024-12-17T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37bf8026fa", "title": "How to flip Doctrine ODM repositories to Services", "url": "https://tomasvotruba.com/blog/how-to-flip-doctrine-odm-repositories-to-services", "published_at": "2024-11-19T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c020e36e", "title": "Alice, Nelmio, Hautelook, Faker - How to upgrade Doctrine Fixtures - Part 1", "url": "https://tomasvotruba.com/blog/alice-nelmio-hautelook-faker-and-how-to-upgrade-doctrine-fixtures-part-1", "published_at": "2024-11-14T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c05efbdc", "title": "5 Ways to Extract Value from Overmocked Tests", "url": "https://tomasvotruba.com/blog/5-ways-to-extract-value-from-overmocked-tests", "published_at": "2024-11-05T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c069d9e6", "title": "How to Upgrade deprecated PHPUnit withConsecutive()", "url": "https://tomasvotruba.com/blog/how-to-upgrade-deprecated-phpunit-with-consecutive", "published_at": "2024-10-10T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c0ab288a", "title": "PHP is the Best Choice for Long‑Term Business", "url": "https://tomasvotruba.com/blog/php-is-the-best-choice-for-long-term-business", "published_at": "2024-08-27T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c0f76422", "title": "Scope and Downgrade your PHP Tools for Everyone to Use", "url": "https://tomasvotruba.com/blog/scope-and-downgrade-your-php-tool-for-everyone-to-use", "published_at": "2024-07-12T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c1eb87ed", "title": "Awesome PHP Packages from Japan", "url": "https://tomasvotruba.com/blog/awesome-php-packages-from-japan", "published_at": "2024-06-17T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c2a95e49", "title": "2 Tricks to get your Symfony configs lines to minimum", "url": "https://tomasvotruba.com/blog/2-tricks-to-get-your-symfony-configs-lines-to-minimum", "published_at": "2024-06-10T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c2d30ed1", "title": "How to reload code highlighter on Livewire 3 component update", "url": "https://tomasvotruba.com/blog/how-to-reload-code-highlighter-on-livewire-3-component-update", "published_at": "2024-06-03T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c3381df6", "title": "How to add visibility to 338 Class Constants in 25 seconds", "url": "https://tomasvotruba.com/blog/how-to-add-visbility-to-338-class-constants-in-25-seconds", "published_at": "2024-05-29T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c398869e", "title": "Cool features of Swiss Knife", "url": "https://tomasvotruba.com/blog/cool-features-of-swiss-knife", "published_at": "2024-05-15T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c415f071", "title": "Get Quick Error Count for each PHPStan level", "url": "https://tomasvotruba.com/blog/get-quick-error-count-for-each-phpstan-level", "published_at": "2024-05-10T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c4a53fa2", "title": "How adding Type Declarations makes Your Code Dangerous", "url": "https://tomasvotruba.com/blog/how-adding-type-declarations-makes-your-code-dangerous", "published_at": "2024-05-01T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c509a60c", "title": "Master the Change", "url": "https://tomasvotruba.com/blog/master-the-change", "published_at": "2024-04-17T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c5744eb1", "title": "Finalize Classes - Automated and Safe", "url": "https://tomasvotruba.com/blog/finalize-classes-automated-and-safe", "published_at": "2024-03-07T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c5fab98e", "title": "Rector Book 2024 Release with Brand new Chapter", "url": "https://tomasvotruba.com/blog/rector-book-2024-release-with-brand-new-chapter", "published_at": "2024-02-05T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c64470a9", "title": "3 Signs Your Project is Becoming Legacy - Mock Rottening", "url": "https://tomasvotruba.com/blog/3-signs-your-project-is-becoming-legacy-mock-rottening", "published_at": "2024-02-03T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c6fe4dce", "title": "Get Json output for PHPUnit 10", "url": "https://tomasvotruba.com/blog/get-json-output-for-phpunit-10", "published_at": "2024-01-27T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c749e5d6", "title": "Zen Config in ECS 12", "url": "https://tomasvotruba.com/blog/zen-config-in-ecs", "published_at": "2024-01-14T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c76b3fc6", "title": "5 Books I enjoyed Reading in 2023", "url": "https://tomasvotruba.com/blog/5-books-i-enyjoed-reading-in-2023", "published_at": "2023-12-30T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c8039936", "title": "3 Signs Your Project is Becoming Legacy - Arrays Creep", "url": "https://tomasvotruba.com/blog/3-signs-your-project-is-becoming-legacy-arrays-creep", "published_at": "2023-12-28T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c8cc6f19", "title": "3 Signs Your Project is Becoming Legacy and How to Avoid Them", "url": "https://tomasvotruba.com/blog/3-signs-your-project-is-becoming-legacy-and-how-to-avoid-them", "published_at": "2023-11-17T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37c98f6754", "title": "How to Autowire Multiple Instances of Same Type in Symfony and Laravel", "url": "https://tomasvotruba.com/blog/how-to-autowire-multiple-instances-of-same-type-in-symfony-laravel", "published_at": "2023-11-01T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37ca0c80e5", "title": "How to make your Tool Commands List Easy to Ready", "url": "https://tomasvotruba.com/blog/how-make-your-tool-commands-list-easy-to-read", "published_at": "2023-10-13T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37ca5b0218", "title": "From Symfony to Laravel - 5 Steps to Prepare your Symfony Project for Migration", "url": "https://tomasvotruba.com/blog/from-symfony-to-laravel-5-steps-to-prepare-your-symfony-project-for-migration", "published_at": "2023-09-06T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37cade337d", "title": "From Symfony to Laravel - Can Laravel even Compiler Pass", "url": "https://tomasvotruba.com/blog/from-symfony-to-laravel-can-laravel-even-compiler-pass", "published_at": "2023-08-25T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37caf8669c", "title": "How to take Advantage of 3rd party Dependency Injection Container", "url": "https://tomasvotruba.com/blog/how-to-take-advantage-of-3rd-party-dependency-container", "published_at": "2023-08-24T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37cbabfeb2", "title": "Easy and Quick way to Measure lines of Code in PHP", "url": "https://tomasvotruba.com/blog/easy-and-quick-way-to-measure-lines-of-code-in-php", "published_at": "2023-08-20T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37cc911573", "title": "Removing Service from Laravel Container is not that Easy", "url": "https://tomasvotruba.com/blog/removing-service-from-laravel-container-is-not-that-easy", "published_at": "2023-08-18T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37cd2d5e23", "title": "How to Remove Transitional Dependencies You don't Need", "url": "https://tomasvotruba.com/blog/how-to-remove-transitional-dependencies-you-dont-need", "published_at": "2023-08-16T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37cd6e2187", "title": "Unleash the Power of Simplicity: PHP CLI App with Minimal Dependencies", "url": "https://tomasvotruba.com/blog/unleash-the-power-of-simplicity-php-cli-app-with-minimal-dependencies", "published_at": "2023-07-31T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37cdb20bbd", "title": "Experiment: How I replaced Symfony DI with Laravel Container in ECS", "url": "https://tomasvotruba.com/blog/experiment-how-i-replaced-symfony-di-with-laravel-container-in-ecs", "published_at": "2023-07-25T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37ce419227", "title": "How to avoid Maintaining Classes you Don't Use", "url": "https://tomasvotruba.com/blog/how-to-avoid-maintaining-classes-you-dont-use", "published_at": "2023-07-18T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37ceaa502e", "title": "Two Kinds of Legacy Code Upgrade", "url": "https://tomasvotruba.com/blog/two-kinds-of-legacy-code-upgrade", "published_at": "2023-07-10T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37cf6d2ff4", "title": "Moving from Disqus to Twitter to make Know-how Sharing Easier", "url": "https://tomasvotruba.com/blog/moving-from-disqus-to-twitter-to-make-knowhow-sharing-easier", "published_at": "2023-04-19T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37d007b2ea", "title": "What I prefer about Laravel Dependency Injection over Symfony", "url": "https://tomasvotruba.com/blog/what-i-prefer-about-laravel-dependency-injection-over-symfony", "published_at": "2023-03-31T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37d0daac59", "title": "Introducing Bladestan - PHPStan analysis of Blade templates", "url": "https://tomasvotruba.com/blog/introducing-bladestan-phpstan-analysis-of-blade-templates", "published_at": "2023-03-24T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37d123f985", "title": "To Route or To Action - That is the Question", "url": "https://tomasvotruba.com/blog/to-route-or-to-action-thats-the-question", "published_at": "2023-03-15T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37d1648ad9", "title": "Introducing Punchcard - Object Configs for Laravel", "url": "https://tomasvotruba.com/blog/introducing-punchcard-object-configs-for-laravel", "published_at": "2023-03-08T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37d1e8ed30", "title": "Why I Migrated This Website From Symfony To Laravel", "url": "https://tomasvotruba.com/blog/why-I-migrated-this-website-from-symfony-to-laravel", "published_at": "2023-02-26T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37d2bf317e", "title": "How to ask DaVinci and Codex to get the right answer", "url": "https://tomasvotruba.com/blog/how-can-we-generate-unit-tests-part-3-how-to-ask-davinci-and-codex-to-get-the-right-answer", "published_at": "2023-02-14T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37d3b0f138", "title": "Run Config Transformer Everyday to keep YAML Away", "url": "https://tomasvotruba.com/blog/run-config-transformer-in-ci-everyday-to-keep-yaml-away", "published_at": "2023-02-12T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37d3e6a6ad", "title": "Lets Share Fails and Tricks with GPT", "url": "https://tomasvotruba.com/blog/lets-share-fails-and-tricks-with-gpt", "published_at": "2023-01-31T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37d3ffb17b", "title": "Good Bye, Monorepo", "url": "https://tomasvotruba.com/blog/good-bye-monorepo", "published_at": "2023-01-28T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37d4a93f14", "title": "How can we Generate Unit Tests - Part 2: Building Scoring Script", "url": "https://tomasvotruba.com/blog/how-can-we-generate-unit-tests-part-2-building-scoring-script", "published_at": "2023-01-12T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37d5339e99", "title": "How can we Generate Unit Tests - Part 1: Testability Score", "url": "https://tomasvotruba.com/blog/how-can-we-generate-unit-tests-part-1-testability-score", "published_at": "2023-01-04T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37d5cde3e2", "title": "How to release PHP 8.1 and 7.2 package in the Same Repository", "url": "https://tomasvotruba.com/blog/how-to-release-php-81-and-72-package-in-the-same-repository", "published_at": "2022-12-30T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37d68d1fe3", "title": "How to Measure Your Type Coverage", "url": "https://tomasvotruba.com/blog/how-to-measure-your-type-coverage", "published_at": "2022-11-07T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37d7257648", "title": "How to Develop Sole Package in PHP 8.1 and Downgrade to PHP 7.2", "url": "https://tomasvotruba.com/blog/how-to-develop-sole-package-in-php81-and-downgrade-to-php72", "published_at": "2022-07-25T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37d8247b4a", "title": "8 News in Config Transformer that Converts Symfony YML to PHP", "url": "https://tomasvotruba.com/blog/8-news-in-config-transformer-that-converts-symfony-yml-to-php", "published_at": "2022-07-18T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37d8c4f717", "title": "Can PHPStan find Dead Public Methods", "url": "https://tomasvotruba.com/blog/can-phpstan-find-dead-public-methods", "published_at": "2022-07-04T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37d983d5ae", "title": "Twig Smoke Rendering - Fortune Favors the Bold", "url": "https://tomasvotruba.com/blog/twig-smoke-rendering-fortune-favors-the-bold", "published_at": "2022-06-27T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37da12246b", "title": "Twig Smoke Rendering - Journey of Fails", "url": "https://tomasvotruba.com/blog/twig-smoke-rendering-journey-of-fails", "published_at": "2022-06-20T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37da5e5a4a", "title": "Twig Smoke Rendering - Why do we Even Need it", "url": "https://tomasvotruba.com/blog/twig-smoke-rendering-why-do-we-even-need-it", "published_at": "2022-06-13T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37db5b909b", "title": "5 Pitfalls of Upgrade to Native PHP Enums and How to Avoid Them", "url": "https://tomasvotruba.com/blog/five-pitfalls-of-upgrade-to-native-php-enums-and-how-to-avoid-them", "published_at": "2022-06-06T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37db86d4ff", "title": "How to Make Configs like RectorConfig or ECSConfig for your Symfony Project", "url": "https://tomasvotruba.com/blog/how-to-make-configs-like-rector-config-or-ecs-config-for-your-symfony-project", "published_at": "2022-05-30T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37db935fef", "title": "New in ECS: Simpler Config", "url": "https://tomasvotruba.com/blog/new-in-ecs-simpler-config", "published_at": "2022-05-09T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37dc92e766", "title": "How to test Symfony Routes to make Huge Refactoring Safe", "url": "https://tomasvotruba.com/blog/how-to-test-symfony-routes-to-make-huge-refactorings-safe", "published_at": "2022-05-02T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37dcc06e15", "title": "How to Remove Dead Mock Calls from PHPUnit Tests", "url": "https://tomasvotruba.com/blog/how-to-remove-dead-mock-calls-from-phpunit-tests", "published_at": "2022-04-25T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37ddb21e8e", "title": "5 Constant Lists That Give Context to your Integers and Strings", "url": "https://tomasvotruba.com/blog/5-constant-lists-that-give-context-to-your-integers-and-strings", "published_at": "2022-03-07T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37ddbfc2bf", "title": "How to Create Symfony Kernel for Tests with Different Configs", "url": "https://tomasvotruba.com/blog/how-to-create-symfony-kernel-for-tests-with-different-configs", "published_at": "2022-02-07T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37de8aef4b", "title": "Get Rid of Mixed Callables with PHPStan", "url": "https://tomasvotruba.com/blog/get-rid-of-mixed-callables-with-phpstan", "published_at": "2022-01-31T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37df3e79cb", "title": "Not all Mixed Types are Equally Useless", "url": "https://tomasvotruba.com/blog/not-all-mixed-types-are-equally-useless", "published_at": "2021-11-22T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37df57f894", "title": "How to Run Naked Unit Tests in a New Legacy Project", "url": "https://tomasvotruba.com/blog/how-to-run-naked-unit-tests-in-a-new-legacy-project", "published_at": "2021-11-08T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37dfa95bdb", "title": "Decomposing Symfony Kernel: What does Minimal Symfony Bundle Do", "url": "https://tomasvotruba.com/blog/decomposing-symfony-kernel-what-does-minimal-symfony-bundle-do", "published_at": "2021-11-01T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37dffada09", "title": "When Symfony Http Kernel is a Too Big Hammer to Use", "url": "https://tomasvotruba.com/blog/when-symfony-http-kernel-is-too-big-hammer-to-use", "published_at": "2021-10-25T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37e02e3cc8", "title": "5 Commands from Easy CI that Makes Your CI Stronger", "url": "https://tomasvotruba.com/blog/5-commands-from-easy-ci-that-makes-your-ci-stronger", "published_at": "2021-10-18T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37e04ec439", "title": "Introducing up-to 16 Times Faster Easy Coding Standard", "url": "https://tomasvotruba.com/blog/introducing-up-to-16-times-faster-easy-coding-standard", "published_at": "2021-10-11T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37e081f8fd", "title": "7 Steps to Start with Parallel Run in PHP CLI App", "url": "https://tomasvotruba.com/blog/7-steps-to-start-with-parallel-run-in-php-cli-app", "published_at": "2021-10-04T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37e17fb130", "title": "Hidden Productivity Costs of Parallel Run", "url": "https://tomasvotruba.com/blog/hidden-productivity-costs-of-parallel-run", "published_at": "2021-09-27T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37e21ed76c", "title": "Parallel in PHP for Dummies Cooking a Family Dinner", "url": "https://tomasvotruba.com/blog/parallel-in-php-for-dummies-cooking-a-family-dinner", "published_at": "2021-09-20T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37e2d71d2c", "title": "STAMP #5: How do we Know Types of Template Variables", "url": "https://tomasvotruba.com/blog/stamp-5-how-do-we-know-types-of-template-variables", "published_at": "2021-09-13T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37e2f4bd02", "title": "STAMP #4: How to Run PHPStan Rules on Temporary PHP File", "url": "https://tomasvotruba.com/blog/stamp-4-how-to-run-phpstan-rules-on-temporary-php-file", "published_at": "2021-09-06T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37e3e71694", "title": "STAMP #3: How to Turn TWIG Helper Functions to Origin Object", "url": "https://tomasvotruba.com/blog/stamp-3-how-to-turn-twig-helper-functions-to-origin-object", "published_at": "2021-08-30T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37e4cb3b7a", "title": "STAMP #2: How to Turn Messy TWIG PHP to Something Useful", "url": "https://tomasvotruba.com/blog/stamp-2-how-to-turn-messy-twig-php-to-something-useful", "published_at": "2021-08-23T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37e52bd319", "title": "STAMP #1: How to Compile Twig to PHP", "url": "https://tomasvotruba.com/blog/stamp-1-how-to-compile-twig-to-php", "published_at": "2021-08-16T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37e537338a", "title": "STAMP #0: Static Analysis of Templates", "url": "https://tomasvotruba.com/blog/stamp-static-analysis-of-templates", "published_at": "2021-08-09T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37e628925d", "title": "How to Easily Protect your Code Base from Commented PHP Code", "url": "https://tomasvotruba.com/blog/how-to-easily-protected-your-code-base-from-commented-php-code", "published_at": "2021-08-02T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37e670e4e0", "title": "How I made Huge Mistake with Interpretation of Laravel Downloads", "url": "https://tomasvotruba.com/blog/how-i-made-huge-mistake-with-interpretation-of-laravel-downloads", "published_at": "2021-07-26T00:00:00+00:00" }, { "id": "01a08c56-ed22-73a2-80b0-bd37e68a4c39", "title": "A Week in a Life of Employed Open‑Source Developer", "url": "https://tomasvotruba.com/blog/a-week-in-a-life-of-employed-open-source-developer", "published_at": "2021-07-12T00:00:00+00:00" } ] posts Claim your blog
Back to tomasvotruba.com
Blog · corpus.blog/blogs/tomasvotruba.com/posts

tomasvotruba.com

tomasvotruba.com

2026

2025

2024

2023

2022

2021