https://tomasvotruba.com/rss.xml <![CDATA[ Read about upgrades, static analysis, GPT, Symfony and Laravel ]]> Thu, 07 Mar 2024 00:00:00 +0000 <![CDATA[ Finalize Classes - Automated and Safe ]]> https://tomasvotruba.com/blog/finalize-classes-automated-and-safe Thu, 07 Mar 2024 00:00:00 +0000 <![CDATA[ Rector Book 2024 Release with Brand new Chapter ]]> https://tomasvotruba.com/blog/rector-book-2024-release-with-brand-new-chapter Mon, 05 Feb 2024 00:00:00 +0000 <![CDATA[ 3 Signs Your Project is Becoming Legacy - Mock Rottening ]]> https://tomasvotruba.com/blog/3-signs-your-project-is-becoming-legacy-mock-rottening Sat, 03 Feb 2024 00:00:00 +0000 <![CDATA[ Get Json output for PHPUnit 10 ]]> https://tomasvotruba.com/blog/get-json-output-for-phpunit-10 Sat, 27 Jan 2024 00:00:00 +0000 <![CDATA[ Zen Config in ECS 12 ]]> https://tomasvotruba.com/blog/zen-config-in-ecs Sun, 14 Jan 2024 00:00:00 +0000 <![CDATA[ 5 Books I enjoyed Reading in 2023 ]]> https://tomasvotruba.com/blog/5-books-i-enyjoed-reading-in-2023 Sat, 30 Dec 2023 00:00:00 +0000 <![CDATA[ 3 Signs Your Project is Becoming Legacy - Arrays Creep ]]> https://tomasvotruba.com/blog/3-signs-your-project-is-becoming-legacy-arrays-creep Thu, 28 Dec 2023 00:00:00 +0000 <![CDATA[ 3 Signs Your Project is Becoming Legacy and How to Avoid Them ]]> https://tomasvotruba.com/blog/3-signs-your-project-is-becoming-legacy-and-how-to-avoid-them Fri, 17 Nov 2023 00:00:00 +0000 <![CDATA[ How to Autowire Multiple Instances of Same Type in Symfony and Laravel ]]> https://tomasvotruba.com/blog/how-to-autowire-multiple-instances-of-same-type-in-symfony-laravel Wed, 01 Nov 2023 00:00:00 +0000 <![CDATA[ How to make your Tool Commands List Easy to Ready ]]> https://tomasvotruba.com/blog/how-make-your-tool-commands-list-easy-to-read Fri, 13 Oct 2023 00:00:00 +0000 <![CDATA[ From Symfony to Laravel - 5 Steps to Prepare your Symfony Project for Migration ]]> https://tomasvotruba.com/blog/from-symfony-to-laravel-5-steps-to-prepare-your-symfony-project-for-migration Wed, 06 Sep 2023 00:00:00 +0000 <![CDATA[ From Symfony to Laravel - Can Laravel even Compiler Pass ]]> https://tomasvotruba.com/blog/from-symfony-to-laravel-can-laravel-even-compiler-pass Fri, 25 Aug 2023 00:00:00 +0000 <![CDATA[ How to take Advantage of 3rd party Dependency Injection Container ]]> https://tomasvotruba.com/blog/how-to-take-advantage-of-3rd-party-dependency-container Thu, 24 Aug 2023 00:00:00 +0000 <![CDATA[ Easy and Quick way to Measure lines of Code in PHP ]]> https://tomasvotruba.com/blog/easy-and-quick-way-to-measure-lines-of-code-in-php Sun, 20 Aug 2023 00:00:00 +0000 <![CDATA[ Removing Service from Laravel Container is not that Easy ]]> https://tomasvotruba.com/blog/removing-service-from-laravel-container-is-not-that-easy Fri, 18 Aug 2023 00:00:00 +0000 <![CDATA[ How to Remove Transitional Dependencies You don't Need ]]> https://tomasvotruba.com/blog/how-to-remove-transitional-dependencies-you-dont-need Wed, 16 Aug 2023 00:00:00 +0000 <![CDATA[ Unleash the Power of Simplicity: PHP CLI App with Minimal Dependencies ]]> https://tomasvotruba.com/blog/unleash-the-power-of-simplicity-php-cli-app-with-minimal-dependencies Mon, 31 Jul 2023 00:00:00 +0000 <![CDATA[ Experiment: How I replaced Symfony DI with Laravel Container in ECS ]]> https://tomasvotruba.com/blog/experiment-how-i-replaced-symfony-di-with-laravel-container-in-ecs Tue, 25 Jul 2023 00:00:00 +0000 <![CDATA[ How to avoid Maintaining Classes you Don't Use ]]> https://tomasvotruba.com/blog/how-to-avoid-maintaining-classes-you-dont-use Tue, 18 Jul 2023 00:00:00 +0000 <![CDATA[ Two Kinds of Legacy Code Upgrade ]]> https://tomasvotruba.com/blog/two-kinds-of-legacy-code-upgrade Mon, 10 Jul 2023 00:00:00 +0000 <![CDATA[ Moving from Disqus to Twitter to make Know-how Sharing Easier ]]> https://tomasvotruba.com/blog/moving-from-disqus-to-twitter-to-make-knowhow-sharing-easier Wed, 19 Apr 2023 00:00:00 +0000 <![CDATA[ What I prefer about Laravel Dependency Injection over Symfony ]]> https://tomasvotruba.com/blog/what-i-prefer-about-laravel-dependency-injection-over-symfony Fri, 31 Mar 2023 00:00:00 +0000 <![CDATA[ Introducing Bladestan - PHPStan analysis of Blade templates ]]> https://tomasvotruba.com/blog/introducing-bladestan-phpstan-analysis-of-blade-templates Fri, 24 Mar 2023 00:00:00 +0000 <![CDATA[ To Route or To Action - That is the Question ]]> https://tomasvotruba.com/blog/to-route-or-to-action-thats-the-question Wed, 15 Mar 2023 00:00:00 +0000 <![CDATA[ Introducing Punchcard - Object Configs for Laravel ]]> https://tomasvotruba.com/blog/introducing-punchcard-object-configs-for-laravel Wed, 08 Mar 2023 00:00:00 +0000 <![CDATA[ Why I Migrated This Website From Symfony To Laravel ]]> https://tomasvotruba.com/blog/why-I-migrated-this-website-from-symfony-to-laravel Sun, 26 Feb 2023 00:00:00 +0000 <![CDATA[ How to ask DaVinci and Codex to get the right answer ]]> https://tomasvotruba.com/blog/how-can-we-generate-unit-tests-part-3-how-to-ask-davinci-and-codex-to-get-the-right-answer Tue, 14 Feb 2023 00:00:00 +0000 <![CDATA[ Run Config Transformer Everyday to keep YAML Away ]]> https://tomasvotruba.com/blog/run-config-transformer-in-ci-everyday-to-keep-yaml-away Sun, 12 Feb 2023 00:00:00 +0000 <![CDATA[ Lets Share Fails and Tricks with GPT ]]> https://tomasvotruba.com/blog/lets-share-fails-and-tricks-with-gpt Tue, 31 Jan 2023 00:00:00 +0000 <![CDATA[ Good Bye, Monorepo ]]> https://tomasvotruba.com/blog/good-bye-monorepo Sat, 28 Jan 2023 00:00:00 +0000 <![CDATA[ How can we Generate Unit Tests - Part 2: Building Scoring Script ]]> https://tomasvotruba.com/blog/how-can-we-generate-unit-tests-part-2-building-scoring-script Thu, 12 Jan 2023 00:00:00 +0000 <![CDATA[ How can we Generate Unit Tests - Part 1: Testability Score ]]> https://tomasvotruba.com/blog/how-can-we-generate-unit-tests-part-1-testability-score Wed, 04 Jan 2023 00:00:00 +0000 <![CDATA[ How to release PHP 8.1 and 7.2 package in the Same Repository ]]> https://tomasvotruba.com/blog/how-to-release-php-81-and-72-package-in-the-same-repository Fri, 30 Dec 2022 00:00:00 +0000 <![CDATA[ Keep Cognitive Complexity Low with PHPStan ]]> https://tomasvotruba.com/blog/keep-cognitive-complexity-low-with-phpstan Wed, 28 Dec 2022 00:00:00 +0000 <![CDATA[ How to Measure Your Type Coverage ]]> https://tomasvotruba.com/blog/how-to-measure-your-type-coverage Mon, 07 Nov 2022 00:00:00 +0000 <![CDATA[ How to Develop Sole Package in PHP 8.1 and Downgrade to PHP 7.2 ]]> https://tomasvotruba.com/blog/how-to-develop-sole-package-in-php81-and-downgrade-to-php72 Mon, 25 Jul 2022 00:00:00 +0000 <![CDATA[ 8 News in Config Transformer that Converts Symfony YML to PHP ]]> https://tomasvotruba.com/blog/8-news-in-config-transformer-that-converts-symfony-yml-to-php Mon, 18 Jul 2022 00:00:00 +0000 <![CDATA[ Can PHPStan find Dead Public Methods ]]> https://tomasvotruba.com/blog/can-phpstan-find-dead-public-methods Mon, 04 Jul 2022 00:00:00 +0000 <![CDATA[ Twig Smoke Rendering - Fortune Favors the Bold ]]> https://tomasvotruba.com/blog/twig-smoke-rendering-fortune-favors-the-bold Mon, 27 Jun 2022 00:00:00 +0000 <![CDATA[ Twig Smoke Rendering - Journey of Fails ]]> https://tomasvotruba.com/blog/twig-smoke-rendering-journey-of-fails Mon, 20 Jun 2022 00:00:00 +0000 <![CDATA[ Twig Smoke Rendering - Why do we Even Need it ]]> https://tomasvotruba.com/blog/twig-smoke-rendering-why-do-we-even-need-it Mon, 13 Jun 2022 00:00:00 +0000 <![CDATA[ 5 Pitfalls of Upgrade to Native PHP Enums and How to Avoid Them ]]> https://tomasvotruba.com/blog/five-pitfalls-of-upgrade-to-native-php-enums-and-how-to-avoid-them Mon, 06 Jun 2022 00:00:00 +0000 <![CDATA[ How to Make Configs like RectorConfig or ECSConfig for your Symfony Project ]]> https://tomasvotruba.com/blog/how-to-make-configs-like-rector-config-or-ecs-config-for-your-symfony-project Config` class. After meeting with [Sebastian Schreiber](https://twitter.com/schreiberten) last week, we found an even better generic solution. Are you interested in a better developer experience for your Symfony project? Keep reading. ]]> Mon, 30 May 2022 00:00:00 +0000 <![CDATA[ How to Upgrade Latte 2 Macro to Latte 3 Tag ]]> https://tomasvotruba.com/blog/how-to-upgrade-latte-2-macro-to-latte-3-tag Mon, 23 May 2022 00:00:00 +0000 <![CDATA[ 5 Steps to Get Ready for Latte 3 ]]> https://tomasvotruba.com/blog/5-steps-to-get-ready-for-latte-3 Thu, 19 May 2022 00:00:00 +0000 <![CDATA[ New in ECS: Simpler Config ]]> https://tomasvotruba.com/blog/new-in-ecs-simpler-config Mon, 09 May 2022 00:00:00 +0000 <![CDATA[ How to test Symfony Routes to make Huge Refactoring Safe ]]> https://tomasvotruba.com/blog/how-to-test-symfony-routes-to-make-huge-refactorings-safe Mon, 02 May 2022 00:00:00 +0000 <![CDATA[ How to Remove Dead Mock Calls from PHPUnit Tests ]]> https://tomasvotruba.com/blog/how-to-remove-dead-mock-calls-from-phpunit-tests Mon, 25 Apr 2022 00:00:00 +0000 <![CDATA[ How to Test Latte Macro in 4 Steps ]]> https://tomasvotruba.com/blog/how-to-test-latte-macro-in-4-steps Mon, 18 Apr 2022 00:00:00 +0000 <![CDATA[ 5 Constant Lists That Give Context to your Integers and Strings ]]> https://tomasvotruba.com/blog/5-constant-lists-that-give-context-to-your-integers-and-strings Mon, 07 Mar 2022 00:00:00 +0000 <![CDATA[ How to Create Symfony Kernel for Tests with Different Configs ]]> https://tomasvotruba.com/blog/how-to-create-symfony-kernel-for-tests-with-different-configs Mon, 07 Feb 2022 00:00:00 +0000 <![CDATA[ Get Rid of Mixed Callables with PHPStan ]]> https://tomasvotruba.com/blog/get-rid-of-mixed-callables-with-phpstan Mon, 31 Jan 2022 00:00:00 +0000 <![CDATA[ Not all Mixed Types are Equally Useless ]]> https://tomasvotruba.com/blog/not-all-mixed-types-are-equally-useless Mon, 22 Nov 2021 00:00:00 +0000 <![CDATA[ Introducing Light Kernel for Symfony Console Apps ]]> https://tomasvotruba.com/blog/introducing-light-kernel-for-symfony-console-apps Mon, 15 Nov 2021 00:00:00 +0000 <![CDATA[ How to Run Naked Unit Tests in a New Legacy Project ]]> https://tomasvotruba.com/blog/how-to-run-naked-unit-tests-in-a-new-legacy-project Mon, 08 Nov 2021 00:00:00 +0000 <![CDATA[ Decomposing Symfony Kernel: What does Minimal Symfony Bundle Do ]]> https://tomasvotruba.com/blog/decomposing-symfony-kernel-what-does-minimal-symfony-bundle-do Mon, 01 Nov 2021 00:00:00 +0000 <![CDATA[ When Symfony Http Kernel is a Too Big Hammer to Use ]]> https://tomasvotruba.com/blog/when-symfony-http-kernel-is-too-big-hammer-to-use Mon, 25 Oct 2021 00:00:00 +0000 <![CDATA[ 5 Commands from Easy CI that Makes Your CI Stronger ]]> https://tomasvotruba.com/blog/5-commands-from-easy-ci-that-makes-your-ci-stronger Mon, 18 Oct 2021 00:00:00 +0000 <![CDATA[ Introducing up-to 16 Times Faster Easy Coding Standard ]]> https://tomasvotruba.com/blog/introducing-up-to-16-times-faster-easy-coding-standard Mon, 11 Oct 2021 00:00:00 +0000 <![CDATA[ 7 Steps to Start with Parallel Run in PHP CLI App ]]> https://tomasvotruba.com/blog/7-steps-to-start-with-parallel-run-in-php-cli-app
This post will get you from 0 to padawan in a couple of minutes. ]]>
Mon, 04 Oct 2021 00:00:00 +0000
<![CDATA[ Hidden Productivity Costs of Parallel Run ]]> https://tomasvotruba.com/blog/hidden-productivity-costs-of-parallel-run Mon, 27 Sep 2021 00:00:00 +0000 <![CDATA[ Parallel in PHP for Dummies Cooking a Family Dinner ]]> https://tomasvotruba.com/blog/parallel-in-php-for-dummies-cooking-a-family-dinner Do you have just **60 seconds**? ]]> Mon, 20 Sep 2021 00:00:00 +0000 <![CDATA[ STAMP #5: How do we Know Types of Template Variables ]]> https://tomasvotruba.com/blog/stamp-5-how-do-we-know-types-of-template-variables Today we'll answer one of them. ]]> Mon, 13 Sep 2021 00:00:00 +0000 <![CDATA[ STAMP #4: How to Run PHPStan Rules on Temporary PHP File ]]> https://tomasvotruba.com/blog/stamp-4-how-to-run-phpstan-rules-on-temporary-php-file Mon, 06 Sep 2021 00:00:00 +0000 <![CDATA[ STAMP #3: How to Turn TWIG Helper Functions to Origin Object ]]> https://tomasvotruba.com/blog/stamp-3-how-to-turn-twig-helper-functions-to-origin-object Mon, 30 Aug 2021 00:00:00 +0000 <![CDATA[ STAMP #2: How to Turn Messy TWIG PHP to Something Useful ]]> https://tomasvotruba.com/blog/stamp-2-how-to-turn-messy-twig-php-to-something-useful Mon, 23 Aug 2021 00:00:00 +0000 <![CDATA[ STAMP #1: How to Compile Twig to PHP ]]> https://tomasvotruba.com/blog/stamp-1-how-to-compile-twig-to-php Mon, 16 Aug 2021 00:00:00 +0000 <![CDATA[ STAMP #0: Static Analysis of Templates ]]> https://tomasvotruba.com/blog/stamp-static-analysis-of-templates Mon, 09 Aug 2021 00:00:00 +0000 <![CDATA[ How to Easily Protect your Code Base from Commented PHP Code ]]> https://tomasvotruba.com/blog/how-to-easily-protected-your-code-base-from-commented-php-code Mon, 02 Aug 2021 00:00:00 +0000 <![CDATA[ How I made Huge Mistake with Interpretation of Laravel Downloads ]]> https://tomasvotruba.com/blog/how-i-made-huge-mistake-with-interpretation-of-laravel-downloads Mon, 26 Jul 2021 00:00:00 +0000 <![CDATA[ Improve your Rector, PHPStan and CI Skills with 3 New Trainings ]]> https://tomasvotruba.com/blog/launching-3-trainings-rector-phpstan-and-bulletproof-ci Mon, 19 Jul 2021 00:00:00 +0000 <![CDATA[ A Week in a Life of Employed Open&#8209;Source Developer ]]> https://tomasvotruba.com/blog/a-week-in-a-life-of-employed-open-source-developer Mon, 12 Jul 2021 00:00:00 +0000 <![CDATA[ How to Scope Your PHP Tool in 10 Steps ]]> https://tomasvotruba.com/blog/how-to-scope-your-php-tool-in-10-steps Thu, 08 Jul 2021 00:00:00 +0000 <![CDATA[ Why do we Scope PHP Tools ]]> https://tomasvotruba.com/blog/why-do-we-scope-php-tools Mon, 05 Jul 2021 00:00:00 +0000 <![CDATA[ How to Replace Single Node with Two Nodes in Abstract Syntax Tree ]]> https://tomasvotruba.com/blog/how-to-replace-single-node-with-two-nodes-in-abstract-syntax-tree Mon, 28 Jun 2021 00:00:00 +0000 <![CDATA[ How to make Upgrade Safe with Bridge Testing ]]> https://tomasvotruba.com/blog/how-to-make-upgrade-safe-with-bridge-testing Mon, 21 Jun 2021 00:00:00 +0000 <![CDATA[ Doctrine Annotations and Attributes Living Together in Peace ]]> https://tomasvotruba.com/blog/doctrine-annotations-and-attributes-living-together-in-peace Mon, 14 Jun 2021 00:00:00 +0000 <![CDATA[ Why Should We Talk about Our Mistakes in PHP Community ]]> https://tomasvotruba.com/blog/why-should-we-talk-about-our-mitakes-in-php-community Mon, 07 Jun 2021 00:00:00 +0000 <![CDATA[ How I Redesigned my Website the Way I Refactor Legacy Projects ]]> https://tomasvotruba.com/blog/how-i-redesigned-my-website-the-way-i-refactor-legacy-projects Thu, 03 Jun 2021 00:00:00 +0000 <![CDATA[ How to Refactor Custom Doctrine Annotations to Attributes ]]> https://tomasvotruba.com/blog/how-to-refactor-custom-doctrine-annotations-to-attributes Mon, 31 May 2021 00:00:00 +0000 <![CDATA[ How Exception to the Convention Does More Harm than Good ]]> https://tomasvotruba.com/blog/how-exception-to-the-convention-does-more-harm-than-good Mon, 24 May 2021 00:00:00 +0000 <![CDATA[ Rector - The Power of Automated Refactoring Book Released ]]> https://tomasvotruba.com/blog/rector-the-power-of-automated-refactoring-book-released Mon, 17 May 2021 00:00:00 +0000 <![CDATA[ Introducing ECS Prefixed and Downgraded to PHP 7.1 ]]> https://tomasvotruba.com/blog/introducing-ecs-prefixed-and-downgraded-to-php-71 Thu, 13 May 2021 00:00:00 +0000 <![CDATA[ Write GitHub Actions for Gitlab Too ]]> https://tomasvotruba.com/blog/write-github-actions-for-gitlab-too Mon, 10 May 2021 00:00:00 +0000 <![CDATA[ PHPStan Generics for Dummies - With 2 Parents ]]> https://tomasvotruba.com/blog/phpstan-generics-for-dummies-with-two-parents Mon, 03 May 2021 00:00:00 +0000 <![CDATA[ Dependency Juggling Code Smell ]]> https://tomasvotruba.com/blog/dependency-juggling-code-smell Mon, 26 Apr 2021 00:00:00 +0000 <![CDATA[ How can We use GitHub Actions in Gitlab ]]> https://tomasvotruba.com/blog/how-can-we-use-github-actions-in-gitlab I was like: "that's not possible... you need to switch to GitHub". ]]> Mon, 19 Apr 2021 00:00:00 +0000 <![CDATA[ 2 Ways to Write Big Numbers More Readable ]]> https://tomasvotruba.com/blog/2ways-to-write-big-numbers-more-readable Mon, 12 Apr 2021 00:00:00 +0000 <![CDATA[ Monorepo Split GitHub Action 2.0 with Gitlab split is Out! ]]> https://tomasvotruba.com/blog/monorepo-split-github-action-20-with-gitlab-split-is-out Mon, 05 Apr 2021 00:00:00 +0000 <![CDATA[ How to Traverse PHPDoc and Modify It ]]> https://tomasvotruba.com/blog/how-to-traverse-phpdoc-and-modify-it Mon, 29 Mar 2021 00:00:00 +0000 <![CDATA[ Never Forget Symfony Config Options Again ]]> https://tomasvotruba.com/blog/never-forget-symfony-config-options-again Mon, 15 Mar 2021 00:00:00 +0000 <![CDATA[ The Best Time to Switch Gitlab to GitHub ]]> https://tomasvotruba.com/blog/best-time-to-switch-gitlab-to-github Mon, 01 Mar 2021 00:00:00 +0000 <![CDATA[ It's not Null, it's Enum ]]> https://tomasvotruba.com/blog/its-not-null-null-its-enum Mon, 22 Feb 2021 00:00:00 +0000 <![CDATA[ How Dangerous is Your Nette Template Assign ]]> https://tomasvotruba.com/blog/2021/02/15/how-dangerous-is-your-nette-template-assign Mon, 15 Feb 2021 00:00:00 +0000 <![CDATA[ Tree Coding vs. Bush Coding ]]> https://tomasvotruba.com/blog/2021/02/11/tree-coding-vs-bush-coding Thu, 11 Feb 2021 00:00:00 +0000 <![CDATA[ How to Prepare your Neon Configs for PHP 8 and Make them More Readable ]]> https://tomasvotruba.com/blog/2021/02/08/how-to-prepare-your-neon-config-for-php-8-and-make-them-more-readable Mon, 08 Feb 2021 00:00:00 +0000 <![CDATA[ Effective Debug Tricks: Narrow Scoping ]]> https://tomasvotruba.com/blog/2021/02/01/effective-debug-tricks-narrow-scoping Mon, 01 Feb 2021 00:00:00 +0000 <![CDATA[ 4 PHPStan Rules that Bring Order to Nette Injects ]]> https://tomasvotruba.com/blog/2021/01/25/4-phpstan-rule-that-bring-order-to-nette-injects Mon, 25 Jan 2021 00:00:00 +0000 <![CDATA[ 4 Ways Symplify makes Working With Symfony More Fun ]]> https://tomasvotruba.com/blog/2021/01/18/4-ways-symplify-makes-working-with-symfony-more-fun Mon, 18 Jan 2021 00:00:00 +0000 <![CDATA[ How to detect Complex Duplicated Methods With PHPStan ]]> https://tomasvotruba.com/blog/2021/01/11/how-to-detect-complex-duplicated-methods-with-phpstan Mon, 11 Jan 2021 00:00:00 +0000 <![CDATA[ PHPStan Abstract Parent Generics for Dummies ]]> https://tomasvotruba.com/blog/2021/01/04/phpstan-abstract-parent-generics-dummies Mon, 04 Jan 2021 00:00:00 +0000 <![CDATA[ Why Coding Standards Should Not Be Part of CI ]]> https://tomasvotruba.com/blog/2020/12/28/why-coding-standards-should-not-be-part-of-ci Mon, 28 Dec 2020 00:00:00 +0000 <![CDATA[ 5 New Combos opened by Symfony 5.2 and PHP 8.0 ]]> https://tomasvotruba.com/blog/2020/12/21/5-new-combos-opened-by-symfony-52-and-php-80 Mon, 21 Dec 2020 00:00:00 +0000 <![CDATA[ New in Symplify 9: More than 110 PHPStan Rules ]]> https://tomasvotruba.com/blog/2020/12/14/new-in-symplify-9-more-than-110-phpstan-rules Mon, 14 Dec 2020 00:00:00 +0000 <![CDATA[ New in Symplify 9: Markdown Diff ]]> https://tomasvotruba.com/blog/2020/12/07/new-in-symplify-9-markdown-diff Mon, 07 Dec 2020 00:00:00 +0000 <![CDATA[ New in Symplify 9: Documentation Generator for PHP CS Fixer, Code Sniffer, PHPStan and Rector Rules ]]> https://tomasvotruba.com/blog/2020/11/30/new-in-symplify-9-documentation-generator-for-php-cs-fixer-code-sniffer-phpstan-rector-rules Mon, 30 Nov 2020 00:00:00 +0000 <![CDATA[ How to make a Dynamic Matrix in GitHub Actions ]]> https://tomasvotruba.com/blog/2020/11/16/how-to-make-dynamic-matrix-in-github-actions Mon, 16 Nov 2020 00:00:00 +0000 <![CDATA[ New in Symplify 9: Monorepo Split with GitHub Action ]]> https://tomasvotruba.com/blog/2020/11/09/new-in-symplify-9-monorepo-split-with-github-action Mon, 09 Nov 2020 00:00:00 +0000 <![CDATA[ Symplify Monorepo Builder Split - Fractal of Bad Design ]]> https://tomasvotruba.com/blog/2020/11/02/symplify-monorepo-builder-split-fractal-of-bad-design Mon, 02 Nov 2020 00:00:00 +0000 <![CDATA[ The Bullet Proof Symfony Command Naming ]]> https://tomasvotruba.com/blog/2020/10/26/the-bullet-proof-symfony-command-naming Commands` for the class. What about its console name? If you're like most people, you don't think about such details that at all. But that makes [you think twice every time you create a new command](/blog/2018/08/27/why-and-how-to-avoid-the-memory-lock). If you're lazy like me, you have a convention and create one command after another, knowing the naming is based on... we'll get to it. ]]> Mon, 26 Oct 2020 00:00:00 +0000 <![CDATA[ How to Split Test Monorepo with Composer 2 ]]> https://tomasvotruba.com/blog/2020/10/19/how-to-split-test-monorepo-with-composer-2 Mon, 19 Oct 2020 00:00:00 +0000 <![CDATA[ How We Stopped Merging Pull Requests ]]> https://tomasvotruba.com/blog/2020/10/12/how-we-stopped-merging-pull-requests Mon, 12 Oct 2020 00:00:00 +0000 <![CDATA[ How to Reveal Static Call Relationships in Your Code ]]> https://tomasvotruba.com/blog/2020/10/05/how-to-reveal-static-call-relationships-in-your-code Mon, 05 Oct 2020 00:00:00 +0000 <![CDATA[ How to Add Colors to Continuous Integration Output ]]> https://tomasvotruba.com/blog/2020/09/28/how-to-add-colors-to-continuous-integration-output Mon, 28 Sep 2020 00:00:00 +0000 <![CDATA[ Symfony AutoBind Parameter is Dead, Long live Constant Parameters ]]> https://tomasvotruba.com/blog/2020/09/21/symfony-autobind-parameter-is-dead-long-live-constant-parameters Mon, 21 Sep 2020 00:00:00 +0000 <![CDATA[ How to Apply Coding Standard on PHP Snippets in Markdown Files ]]> https://tomasvotruba.com/blog/2020/09/14/how-to-apply-coding-standard-on-php-snippets-in-markdown-files Mon, 14 Sep 2020 00:00:00 +0000 <![CDATA[ Introducing Object Calisthenics Rules for PHPStan ]]> https://tomasvotruba.com/blog/2020/09/07/introducing-object-calisthenics-rules-for-phpstan Mon, 07 Sep 2020 00:00:00 +0000 <![CDATA[ How Static Methods Kill You Like Corona ]]> https://tomasvotruba.com/blog/2020/08/31/how-static-methods-kills-you-like-corona Mon, 31 Aug 2020 00:00:00 +0000 <![CDATA[ What if We Remove Strings from Symfony Extension Configuration ]]> https://tomasvotruba.com/blog/2020/08/24/what-if-we-remove-strings-from-symfony-extension-configuratoin Mon, 24 Aug 2020 00:00:00 +0000 <![CDATA[ How to Get Rid of Magic, Static and Chaos from Latte Filters ]]> https://tomasvotruba.com/blog/2020/08/17/how-to-get-rid-of-magic-static-and-chaos-from-latte-filters Mon, 17 Aug 2020 00:00:00 +0000 <![CDATA[ 4 Ways to Make Your Nette Project More Readable ]]> https://tomasvotruba.com/blog/2020/08/10/4-ways-to-make-your-nette-project-more-readable Mon, 10 Aug 2020 00:00:00 +0000 <![CDATA[ How to Give Away 1500 € in 1 Tweet and Help 25 People Learn Something New ]]> https://tomasvotruba.com/blog/2020/08/03/how-give-away-1500-eur--in-1-tweet-and-help-25-people-learn-something-new Mon, 03 Aug 2020 00:00:00 +0000 <![CDATA[ How to Switch from YAML Configs to PHP Today with Symplify ]]> https://tomasvotruba.com/blog/2020/07/27/how-to-switch-from-yaml-xml-configs-to-php-today-with-migrify Mon, 27 Jul 2020 00:00:00 +0000 <![CDATA[ How to Update Hundreds of Test Fixtures with Single PHPUnit run ]]> https://tomasvotruba.com/blog/2020/07/20/how-to-update-hundreds-of-test-fixtures-with-single-phpunit-run Mon, 20 Jul 2020 00:00:00 +0000 <![CDATA[ 10 Cool Features You Get after switching from YAML to PHP Configs ]]> https://tomasvotruba.com/blog/2020/07/16/10-cool-features-you-get-after-switching-from-yaml-to-php-configs Thu, 16 Jul 2020 00:00:00 +0000 <![CDATA[ The most Effective Test I found in 7 years of Testing ]]> https://tomasvotruba.com/blog/2020/07/13/the-most-effetive-test-i-found-in-7-years-of-testing Mon, 13 Jul 2020 00:00:00 +0000 <![CDATA[ Cleaning Lady Notes: From Class Mess to PSR-4 Step by Step With Confidence ]]> https://tomasvotruba.com/blog/2020/07/06/cleaning-lady-notes-from-class-mess-to-psr4-step-by-step-with-confidence Mon, 06 Jul 2020 00:00:00 +0000 <![CDATA[ How to Patch a Package in Vendor, Yet Allow its Updates ]]> https://tomasvotruba.com/blog/2020/07/02/how-to-patch-package-in-vendor-yet-allow-its-updates Thu, 02 Jul 2020 00:00:00 +0000 <![CDATA[ How Will Programming look like in 2025 ]]> https://tomasvotruba.com/blog/2020/06/29/how-will-programming-look-like-in-2025 That's only past or present. I'm just finishing the reading of [The Inevitable](https://www.amazon.com/The-Inevitable-Kevin-Kelly-audiobook/dp/B01EB3OR32), written by Wired magazine founder, that focuses solely on the future. Inspired by this book, today, **we look at the future of programming**. ]]> Mon, 29 Jun 2020 00:00:00 +0000 <![CDATA[ Why Class Constants Should be Typed ]]> https://tomasvotruba.com/blog/2020/06/22/why-class-constants-should-be-typed Mon, 22 Jun 2020 00:00:00 +0000 <![CDATA[ How to create a Monorepo from Existing Repositories in 7 Steps ]]> https://tomasvotruba.com/blog/2020/06/15/how-to-create-monorepo-from-existing-repositories-in-7-steps So how to start a monorepo if you already have existing repositories? ]]> Mon, 15 Jun 2020 00:00:00 +0000 <![CDATA[ Drop RobotLoader and let Composer Deal with Autoloading ]]> https://tomasvotruba.com/blog/2020/06/08/drop-robot-loader-and-let-composer-deal-with-autoloading Mon, 08 Jun 2020 00:00:00 +0000 <![CDATA[ @inject or @required will Get You Any Services Fast ]]> https://tomasvotruba.com/blog/2020/06/01/inject-or-required-will-get-you-any-service-fast Mon, 01 Jun 2020 00:00:00 +0000 <![CDATA[ The Bulletproof Event Naming For Symfony Event Dispatcher ]]> https://tomasvotruba.com/blog/2020/05/25/the-bulletproof-event-naming-for-symfony-event-dispatcher Mon, 25 May 2020 00:00:00 +0000 <![CDATA[ The Future of Pehapkari Meetups and Training - You ]]> https://tomasvotruba.com/blog/2020/05/18/the-future-of-pehapkari-meetups-and-trainings-you Mon, 18 May 2020 00:00:00 +0000 <![CDATA[ How to Upgrade to Symplify 8 - From Fixers to Rector Rules ]]> https://tomasvotruba.com/blog/2020/05/11/how-to-upgrade-to-symplify-8-from-fixers-to-rector-rules Mon, 11 May 2020 00:00:00 +0000 <![CDATA[ How to Upgrade to Symplify 8 - From Sniffs to PHPStan Rules ]]> https://tomasvotruba.com/blog/2020/05/04/how-to-upgrade-to-symplify-8-from-sniffs-to-phpstan-rules Mon, 04 May 2020 00:00:00 +0000 <![CDATA[ How to Hydrate Arrays to Objects via Constructor ]]> https://tomasvotruba.com/blog/2020/04/20/how-to-hydrate-arrays-to-objects-via-constructor Mon, 20 Apr 2020 00:00:00 +0000 <![CDATA[ How to Migrate Spaghetti to 304 Symfony 5 Controllers Over Weekend ]]> https://tomasvotruba.com/blog/2020/04/13/how-to-migrate-spaghetti-to-304-symfony-5-controllers-over-weekend Mon, 13 Apr 2020 00:00:00 +0000 <![CDATA[ Don't Show Your Privates to Public ]]> https://tomasvotruba.com/blog/2020/03/30/dont-show-your-privates-to-public Mon, 30 Mar 2020 00:00:00 +0000 <![CDATA[ Doctrine Entity Typed Properties With PHP 7.4 ]]> https://tomasvotruba.com/blog/2020/03/23/doctrine-entity-typed-properties-with-php74 Mon, 23 Mar 2020 00:00:00 +0000 <![CDATA[ Statie is Dead, Long live Symfony Static Dumper ]]> https://tomasvotruba.com/blog/2020/03/16/statie-is-dead-long-live-symfony-static-dumper **What will replace it? How do you migrate?** ]]> Mon, 16 Mar 2020 00:00:00 +0000 <![CDATA[ Art of Letting Go ]]> https://tomasvotruba.com/blog/2020/03/09/art-of-letting-go Mon, 09 Mar 2020 00:00:00 +0000 <![CDATA[ We Do Not Need Senior Developers, We Need Senior Codebases ]]> https://tomasvotruba.com/blog/2020/03/02/we-do-not-need-senior-developers-we-need-senior-code-bases Mon, 02 Mar 2020 00:00:00 +0000 <![CDATA[ Local Packages 3 Years Later ]]> https://tomasvotruba.com/blog/2020/02/17/local-packages-3-years-later Mon, 17 Feb 2020 00:00:00 +0000 <![CDATA[ How to Test Monorepo After Split Before Actual Split ]]> https://tomasvotruba.com/blog/2020/02/10/how-to-test-monorepo-after-split-before-actual-split Mon, 10 Feb 2020 00:00:00 +0000 <![CDATA[ How to run Rector and PHPStan on Huge Project in 3 Seconds with PHPStorm ]]> https://tomasvotruba.com/blog/2020/02/03/how-to-run-rector-and-phpstan-on-huge-project-in-3-seconds-with-phpstorm Mon, 03 Feb 2020 00:00:00 +0000 <![CDATA[ Switch Travis to GitHub Actions to Reduce Stress ]]> https://tomasvotruba.com/blog/2020/01/27/switch-travis-to-github-actions-to-reduce-stress Mon, 27 Jan 2020 00:00:00 +0000 <![CDATA[ Why is First Instant Feedback Crucial to Developers ]]> https://tomasvotruba.com/blog/2020/01/13/why-is-first-instant-feedback-crucial-to-developers Mon, 13 Jan 2020 00:00:00 +0000 <![CDATA[ Migrate Gedmo to KnpLabs ]]> https://tomasvotruba.com/blog/2020/01/06/migrate-gedmo-to-knplabs Month later, we have [KnpLabs\DoctrineBehaviors 2.0](/blog/2019/12/30/doctrine-behaviors-2-0-reloaded/#how-do-you-migrate-from-gedmo-stof-to-knplabs-doctrinebehaviors) with full Symfony 5 support. If you used older Doctrine Behaviors, you're covered with Rector migration path.
But what if you're using old broken Gedmo? **I'll show you how you can migrate Gedmo to KnpLabs**. ]]>
Mon, 06 Jan 2020 00:00:00 +0000
<![CDATA[ Doctrine Behaviors 2.0 - Reloaded ]]> https://tomasvotruba.com/blog/2019/12/30/doctrine-behaviors-2-0-reloaded Mon, 30 Dec 2019 00:00:00 +0000 <![CDATA[ 5 Things I Improve when I Get to new Repository ]]> https://tomasvotruba.com/blog/2019/12/23/5-things-i-improve-when-i-get-to-new-repository Mon, 23 Dec 2019 00:00:00 +0000 <![CDATA[ 8 Steps You Can Make Before Huge Upgrade to Make it Faster, Cheaper and More Stable ]]> https://tomasvotruba.com/blog/2019/12/16/8-steps-you-can-make-before-huge-upgrade-to-make-it-faster-cheaper-and-more-stable Mon, 16 Dec 2019 00:00:00 +0000 <![CDATA[ How to Get Rid of Technical Debt or What We Would Have Done Differently 2 Years ago ]]> https://tomasvotruba.com/blog/2019/12/09/how-to-get-rid-of-technical-debt-or-what-we-would-have-done-differently-2-years-ago Who is *we*? Me and CTO of the [company I worked for](https://spaceflow.io/en), a great leader and technical expert who taught me a lot, [Milan Mimra](https://www.linkedin.com/in/milanmimra). The talk was not full of shallow tips, nor [about framework migration](/blog/2019/08/26/how-we-migrated-54-357-lines-of-code-nette-to-symfony-in-2-people-under-80-hours/). Instead, **we talked about small decisions that were made 2 years. Decisions, which took 3 months to get rid of**. ]]> Mon, 09 Dec 2019 00:00:00 +0000 <![CDATA[ How to Box Symfony App to PHAR without Killing Yourself ]]> https://tomasvotruba.com/blog/2019/12/02/how-to-box-symfony-app-to-phar-without-killing-yourself Mon, 02 Dec 2019 00:00:00 +0000 <![CDATA[ The Single Best Skill to Master Command Line ]]> https://tomasvotruba.com/blog/2019/11/25/the-single-best-skill-to-master-command-line Mon, 25 Nov 2019 00:00:00 +0000 <![CDATA[ How to Delegate Code Reviews to CI ]]> https://tomasvotruba.com/blog/2019/11/18/how-to-delegate-code-reviews-to-ci Mon, 18 Nov 2019 00:00:00 +0000 <![CDATA[ From 0 Doc Types to Full Type Declaration with Dynamic Analysis ]]> https://tomasvotruba.com/blog/2019/11/11/from-0-doc-types-to-full-type-declaration-with-dynamic-analysis Mon, 11 Nov 2019 00:00:00 +0000 <![CDATA[ Still on PHPUnit 4 Come to PHPUnit 8 Together in a Day ]]> https://tomasvotruba.com/blog/2019/11/04/still-on-phpunit-4-come-to-phpunit-8-together-in-a-day Mon, 04 Nov 2019 00:00:00 +0000 <![CDATA[ All You Always Wanted to Know About Monorepo But Were Afraid To Ask ]]> https://tomasvotruba.com/blog/2019/10/28/all-you-always-wanted-to-know-about-monorepo-but-were-afraid-to-ask This is it. ]]> Mon, 28 Oct 2019 00:00:00 +0000 <![CDATA[ How we Upgraded Pehapkari.cz from Symfony 4 to 5 in 25 days ]]> https://tomasvotruba.com/blog/2019/09/09/how-we-upgraded-pehapkari-cz-from-symfony-4-to-5-in-25-days Mon, 09 Sep 2019 00:00:00 +0000 <![CDATA[ How to Speedup Test Coverage on Travis by 95 % ]]> https://tomasvotruba.com/blog/2019/09/02/how-to-speedup-test-coverage-on-travis-by-95-percent **"We should remove it,"** he thought, "CI should give fast feedback... or is there another way?" ]]> Mon, 02 Sep 2019 00:00:00 +0000 <![CDATA[ How we Migrated 54 357-lines Application from Nette to Symfony in 2 People under 80 Hours ]]> https://tomasvotruba.com/blog/2019/08/26/how-we-migrated-54-357-lines-of-code-nette-to-symfony-in-2-people-under-80-hours Mon, 26 Aug 2019 00:00:00 +0000 <![CDATA[ Standalone Symfony Console from the Scratch ]]> https://tomasvotruba.com/blog/2019/08/12/standalone-symfony-console-from-scratch Mon, 12 Aug 2019 00:00:00 +0000 <![CDATA[ Standalone Symfony Event Dispatcher from the Scratch ]]> https://tomasvotruba.com/blog/2019/08/05/standalone-symfony-event-dispatcher-from-the-scratch Mon, 05 Aug 2019 00:00:00 +0000 <![CDATA[ How we Completed Thousands of Missing @var Annotations in a Day ]]> https://tomasvotruba.com/blog/2019/07/29/how-we-completed-thousands-of-missing-var-annotations-in-a-day Mon, 29 Jul 2019 00:00:00 +0000 <![CDATA[ How to Convert Listeners to Subscribers and Reduce your Configs ]]> https://tomasvotruba.com/blog/2019/07/22/how-to-convert-listeners-to-subscribers-and-reduce-your-configs But what can you do, if you'd like to try subscribers, but currently have over 100 listeners in your application? ]]> Mon, 22 Jul 2019 00:00:00 +0000 <![CDATA[ Why use One-Time Migration Scripts ]]> https://tomasvotruba.com/blog/2019/07/15/why-use-one-time-migration-scripts Mon, 15 Jul 2019 00:00:00 +0000 <![CDATA[ 7 Tips to Write Flawless Issue Reports on Github ]]> https://tomasvotruba.com/blog/2019/07/08/7-tips-to-write-flawless-issue-report-on-github Mon, 08 Jul 2019 00:00:00 +0000 <![CDATA[ 5 Workflow Tips every PHP Developer Should Know ]]> https://tomasvotruba.com/blog/2019/07/01/5-workflow-tips-every-php-developer-should-know Mon, 01 Jul 2019 00:00:00 +0000 <![CDATA[ Do you use PHP_CodeSniffer and PHP CS Fixer PHPStorm Plugin You are Slow and Expensive ]]> https://tomasvotruba.com/blog/2019/06/24/do-you-use-php-codesniffer-and-php-cs-fixer-phpstorm-plugin-you-are-slow-and-expensive Mon, 24 Jun 2019 00:00:00 +0000 <![CDATA[ 7 News and Changes in Symplify 6 ]]> https://tomasvotruba.com/blog/2019/06/20/7-news-and-changes-in-symplify-6 Thu, 20 Jun 2019 00:00:00 +0000 <![CDATA[ Don't Ever use Symfony Listeners ]]> https://tomasvotruba.com/blog/2019/05/16/don-t-ever-use-listeners Thu, 16 May 2019 00:00:00 +0000 <![CDATA[ Hidden Gems of PHP Packages: Psalm Fixing Your Code ]]> https://tomasvotruba.com/blog/2019/05/13/hidden-gems-of-php-packages-psalm-fixing-your-code Mon, 13 May 2019 00:00:00 +0000 <![CDATA[ Is Rector Saving you Time Support it on GitHub Sponsors ]]> https://tomasvotruba.com/blog/2019/05/09/is-rector-saving-you-time-support-it-on-patreon Thu, 09 May 2019 00:00:00 +0000 <![CDATA[ Alias as a Code Smell ]]> https://tomasvotruba.com/blog/2019/05/02/alias-as-a-code-smell Thu, 02 May 2019 00:00:00 +0000 <![CDATA[ Rector European Tour in May & June 2019 ]]> https://tomasvotruba.com/blog/2019/04/29/rector-european-tour-in-may-june-2019 Mon, 29 Apr 2019 00:00:00 +0000 <![CDATA[ Don't Give Up Your PHP Code for Compiler Passes so Easily ]]> https://tomasvotruba.com/blog/2019/04/25/don-t-give-up-your-php-code-for-compiler-passes-so-easily Thu, 25 Apr 2019 00:00:00 +0000 <![CDATA[ Symfony 4.2 is used Twice More than Symfony 3.4 ]]> https://tomasvotruba.com/blog/2019/04/18/symfony-4-2-is-used-2-times-more-than-symfony-3-4 Thu, 18 Apr 2019 00:00:00 +0000 <![CDATA[ Pattern Refactoring ]]> https://tomasvotruba.com/blog/2019/04/15/pattern-refactoring Mon, 15 Apr 2019 00:00:00 +0000 <![CDATA[ What You Lose by Switching to Symfony ]]> https://tomasvotruba.com/blog/2019/04/08/what-you-lose-by-switching-to-symfony Mon, 08 Apr 2019 00:00:00 +0000 <![CDATA[ How to Upgrade Twig from Underscored to Namespaces ]]> https://tomasvotruba.com/blog/2019/04/04/how-to-upgrade-twig-from-underscored-to-namespaces Thu, 04 Apr 2019 00:00:00 +0000 <![CDATA[ Removing Static - There and Back Again ]]> https://tomasvotruba.com/blog/2019/04/01/removing-static-there-and-back-again Mon, 01 Apr 2019 00:00:00 +0000 <![CDATA[ How to Mock Final Classes in PHPUnit ]]> https://tomasvotruba.com/blog/2019/03/28/how-to-mock-final-classes-in-phpunit Thu, 28 Mar 2019 00:00:00 +0000 <![CDATA[ How to Instantly Migrate Nette\Tester to PHPUnit ]]> https://tomasvotruba.com/blog/2019/03/25/how-to-instantly-migrate-nette-tester-to-phpunit "We don't use Nette, but we still have many tests in Tester. Can Rector migrate them to PHPUnit?"
"Hold my 🍺" ]]>
Mon, 25 Mar 2019 00:00:00 +0000
<![CDATA[ How to Migrate PhpSpec to PHPUnit ]]> https://tomasvotruba.com/blog/2019/03/21/how-to-instantly-migrate-phpspec-to-phpunit Thu, 21 Mar 2019 00:00:00 +0000 <![CDATA[ How to Detect Dead PHP Code in Code Review in 7 Snippets ]]> https://tomasvotruba.com/blog/2019/03/18/how-to-detect-dead-php-code-in-code-review-in-7-snippets Let's look at 7 snippets of PHP code, that [happily takes your attention](/blog/2018/05/21/is-your-code-readable-by-humans-cognitive-complexity-tells-you/) but **is never run**. ]]> Mon, 18 Mar 2019 00:00:00 +0000 <![CDATA[ Why we Migrated from Nette to Symfony in 3 Weeks - Part 3 - Brain Drain Dead Packages-Lock ]]> https://tomasvotruba.com/blog/2019/03/11/why-we-migrated-from-nette-to-symfony-in-3-weeks-part-3 Mon, 11 Mar 2019 00:00:00 +0000 <![CDATA[ Why we Migrated from Nette to Symfony in 3 Weeks - Part 2 - Escaping Semantic Hell ]]> https://tomasvotruba.com/blog/2019/03/07/why-we-migrated-from-nette-to-symfony-in-3-weeks-part-2 Thu, 07 Mar 2019 00:00:00 +0000 <![CDATA[ How to turn Laravel from Static to Dependency Injection in one Day ]]> https://tomasvotruba.com/blog/2019/03/04/how-to-turn-laravel-from-static-to-dependency-injection-in-one-day Mon, 04 Mar 2019 00:00:00 +0000 <![CDATA[ How to Upgrade Symfony 2.8 to 3.4 ]]> https://tomasvotruba.com/blog/2019/02/28/how-to-upgrade-symfony-2-8-to-3-4 Thu, 28 Feb 2019 00:00:00 +0000 <![CDATA[ 5 Tips to Effective Work with Github Repository ]]> https://tomasvotruba.com/blog/2019/02/25/5-tips-to-effective-work-with-github-repository Mon, 25 Feb 2019 00:00:00 +0000 <![CDATA[ How we Migrated from Nette to Symfony in 3 Weeks - Part 1 ]]> https://tomasvotruba.com/blog/2019/02/21/how-we-migrated-from-nette-to-symfony-in-3-weeks-part-1 Yet, you'd laugh if you knew what took us the most time. ]]> Thu, 21 Feb 2019 00:00:00 +0000 <![CDATA[ How we Automated Shopsys Packages Release from 2 days to 1 Console Command ]]> https://tomasvotruba.com/blog/2019/02/18/how-we-automated-shopsys-packages-release-from-2-days-to-1-console-command Mon, 18 Feb 2019 00:00:00 +0000 <![CDATA[ Why Config Coding Sucks ]]> https://tomasvotruba.com/blog/2019/02/14/why-config-coding-sucks Thu, 14 Feb 2019 00:00:00 +0000 <![CDATA[ What I Learned by Using thecodingmachine/safe ]]> https://tomasvotruba.com/blog/2019/02/07/what-i-learned-by-using-thecodingmachine-safe Thu, 07 Feb 2019 00:00:00 +0000 <![CDATA[ New in Rector: Asterisk Type Match ]]> https://tomasvotruba.com/blog/2019/02/04/new-in-rector-asterisk-type-match Mon, 04 Feb 2019 00:00:00 +0000 <![CDATA[ Monorepo Composer Magic ]]> https://tomasvotruba.com/blog/2019/01/31/monorepo-composer-magic
Today, I'd like to share secrets behind **biggest WTF** that monorepo composer setup has. ]]>
Thu, 31 Jan 2019 00:00:00 +0000
<![CDATA[ 2 Files that Your Symfony Application Misses ]]> https://tomasvotruba.com/blog/2019/01/28/2-files-that-your-symfony-application-misses Mon, 28 Jan 2019 00:00:00 +0000 <![CDATA[ How to Kill Parents ]]> https://tomasvotruba.com/blog/2019/01/24/how-to-kill-parents Thu, 24 Jan 2019 00:00:00 +0000 <![CDATA[ How Writing Posts Helps you to Become Better Programmer ]]> https://tomasvotruba.com/blog/2019/01/17/how-writing-posts-helps-you-to-become-better-programmer Thu, 17 Jan 2019 00:00:00 +0000 <![CDATA[ 9 Steps to Migrate From Jekyll to Statie ]]> https://tomasvotruba.com/blog/2019/01/10/9-steps-to-migrate-from-jekyll-to-statie Thu, 10 Jan 2019 00:00:00 +0000 <![CDATA[ Your Most Favorite Posts in 2018 ]]> https://tomasvotruba.com/blog/2018/12/31/your-most-favorite-posts-in-2018 Mon, 31 Dec 2018 00:00:00 +0000 <![CDATA[ How To Convert All Your Symfony Service Configs to Autodiscovery ]]> https://tomasvotruba.com/blog/2018/12/27/how-to-convert-all-your-symfony-service-configs-to-autodiscovery Thu, 27 Dec 2018 00:00:00 +0000 <![CDATA[ Thank You ]]> https://tomasvotruba.com/blog/2018/12/24/thank-you Mon, 24 Dec 2018 00:00:00 +0000 <![CDATA[ Function create_function() is Deprecated in PHP 7.2 - How to Migrate ]]> https://tomasvotruba.com/blog/2018/12/17/function-create-function-is-deprecated-in-php-72-how-to-migrate Mon, 17 Dec 2018 00:00:00 +0000 <![CDATA[ Kirill Smelov's PHPStorm Tips in 9 Gifs ]]> https://tomasvotruba.com/blog/2018/12/13/kirill-smelov-s-phpstorm-tips-in-9-gifs Thu, 13 Dec 2018 00:00:00 +0000 <![CDATA[ The Rocket Science Behind Migration of Docblock Types to PHP Typehints ]]> https://tomasvotruba.com/blog/2018/12/10/rocket-science-behind-migration-of-docblock-types-to-php-typehints Mon, 10 Dec 2018 00:00:00 +0000 <![CDATA[ Don't Learn to Code ]]> https://tomasvotruba.com/blog/2018/12/06/dont-learn-to-code Thu, 06 Dec 2018 00:00:00 +0000 <![CDATA[ IT Bloggers, Deprecate Your Posts to Stop Spreading Legacy ]]> https://tomasvotruba.com/blog/2018/12/03/it-bloggers-deprecate-your-posts-to-stop-spreading-legacy Mon, 03 Dec 2018 00:00:00 +0000 <![CDATA[ How to Manage Configuration in Symfony without Bundle, Extension, and Configuration ]]> https://tomasvotruba.com/blog/2018/11/29/how-to-manage-configuration-in-symfony-without-bundle-extension-and-configuration Thu, 29 Nov 2018 00:00:00 +0000 <![CDATA[ 14 Tips to Write PHP Code that is Hard to Maintain and Upgrade ]]> https://tomasvotruba.com/blog/2018/11/26/14-tips-to-write-php-code-that-is-hard-to-maintain-and-upgrade Mon, 26 Nov 2018 00:00:00 +0000 <![CDATA[ How to Test Monorepo in 3 Layers ]]> https://tomasvotruba.com/blog/2018/11/22/how-to-test-monorepo-in-3-layers Thu, 22 Nov 2018 00:00:00 +0000 <![CDATA[ When You Should Use Monorepo and When Local Packages ]]> https://tomasvotruba.com/blog/2018/11/19/when-you-should-use-monorepo-and-when-local-packages Mon, 19 Nov 2018 00:00:00 +0000 <![CDATA[ How to Get PHP 7.4 Typed Properties to Your Code in Few Seconds ]]> https://tomasvotruba.com/blog/2018/11/15/how-to-get-php-74-typed-properties-to-your-code-in-few-seconds Thu, 15 Nov 2018 00:00:00 +0000 <![CDATA[ Will Autowired Arrays Finally Deprecate Tags in Symfony and Nette ]]> https://tomasvotruba.com/blog/2018/11/12/will-autowired-arrays-finally-deprecate-tags-in-symfony-and-nette Mon, 12 Nov 2018 00:00:00 +0000 <![CDATA[ Fatal error: Uncaught Error: [] operator not supported for strings in ]]> https://tomasvotruba.com/blog/2018/11/08/fatal-error-uncaught-error-operator-not-supported-for-strings-in Thu, 08 Nov 2018 00:00:00 +0000 <![CDATA[ 7 Tips to Get the Most out of Travis CI ]]> https://tomasvotruba.com/blog/2018/10/29/7-tips-to-get-the-most-out-of-travis-ci How to make Travis **generate code for you**?
And how to make your **tokens safe**? ]]>
Mon, 29 Oct 2018 00:00:00 +0000
<![CDATA[ Why AST Fixes your Coding Standard Better than Tokens ]]> https://tomasvotruba.com/blog/2018/10/25/why-ast-fixes-your-coding-standard-better-than-tokens Thu, 25 Oct 2018 00:00:00 +0000 <![CDATA[ Brief History of Tools Watching and Changing Your PHP Code ]]> https://tomasvotruba.com/blog/2018/10/22/brief-history-of-tools-watching-and-changing-your-php-code Mon, 22 Oct 2018 00:00:00 +0000 <![CDATA[ How I Almost Missed My Talk in PHP Asia Conference ]]> https://tomasvotruba.com/blog/2018/10/18/how-i-almost-missed-my-talk-in-php-asia-conference Thu, 18 Oct 2018 00:00:00 +0000 <![CDATA[ What is Your Third Door - Book Review ]]> https://tomasvotruba.com/blog/2018/10/15/what-is-your-third-door-book-review
But what if the police come to bring you in for your financial frauds and child porn, **what door do you take to run**? ]]>
Mon, 15 Oct 2018 00:00:00 +0000
<![CDATA[ Hi, my name is Tom - Concat vs. Sprintf vs. In-String Variable ]]> https://tomasvotruba.com/blog/2018/10/11/hi-my-name-is-tom-conctat-vs-in-sprintf-vs-in-string-variables Thu, 11 Oct 2018 00:00:00 +0000 <![CDATA[ New in Symplify 5: Create, Merge and Split Monorepo with 1 Command ]]> https://tomasvotruba.com/blog/2018/10/08/new-in-symplify-5-create-merge-and-split-monorepo-with-1-command Mon, 08 Oct 2018 00:00:00 +0000 <![CDATA[ New in Symplify 5: Public Method Order and External Final in CodingStandard ]]> https://tomasvotruba.com/blog/2018/10/04/new-in-symplify-5-public-method-order-and-external-final-in-coding-standard New config options **that shorten your config file** and **2 new checkers to keep your code in order**. ]]> Thu, 04 Oct 2018 00:00:00 +0000 <![CDATA[ Open-Source Behind The Scenes - Finding the Rector Vision ]]> https://tomasvotruba.com/blog/2018/09/27/open-source-behind-the-scenes-finding-the-rector-vision Thu, 27 Sep 2018 00:00:00 +0000 <![CDATA[ New in Symplify 5: 3 News in EasyCodingStandard to Smoother Your Experience ]]> https://tomasvotruba.com/blog/2018/09/24/new-in-symplify-5-3-news-in-easy-coding-standard-to-smoother-your-experience Mon, 24 Sep 2018 00:00:00 +0000 <![CDATA[ New in Symplify 5: 3 New Cool Features of PackageBuilder ]]> https://tomasvotruba.com/blog/2018/09/20/new-in-symplify-5-3-new-cool-features-of-package-builder Thu, 20 Sep 2018 00:00:00 +0000 <![CDATA[ 7 Tips to Write Exceptions Everyone Will Love ]]> https://tomasvotruba.com/blog/2018/09/17/7-tips-to-write-exceptions-everyone-will-love Mon, 17 Sep 2018 00:00:00 +0000 <![CDATA[ Your Brain is Your Garden ]]> https://tomasvotruba.com/blog/2018/09/13/your-brain-is-your-garden Thu, 13 Sep 2018 00:00:00 +0000 <![CDATA[ 5 Advices I Would Love to Get Before Starting to Maintain an Open Source ]]> https://tomasvotruba.com/blog/2018/09/10/5-advices-i-would-love-to-get-before-starting-to-maintain-open-source Mon, 10 Sep 2018 00:00:00 +0000 <![CDATA[ How to Develop Multiple Symfony Applications Fast while Keeping the Quality ]]> https://tomasvotruba.com/blog/2018/09/06/how-to-develop-multiple-symfony-applications-fast-while-keeping-the-quality Thu, 06 Sep 2018 00:00:00 +0000 <![CDATA[ 4 Ways to Add Global Option or Argument to Symfony Console Application ]]> https://tomasvotruba.com/blog/2018/09/03/4-ways-to-add-global-option-or-argument-to-symfony-console-application Mon, 03 Sep 2018 00:00:00 +0000 <![CDATA[ Ways I Fucked Up Open Source Code: Mock Everything and Test Units ]]> https://tomasvotruba.com/blog/2018/08/30/ways-i-fucked-up-open-source-code-mock-everything-and-test-units Thu, 30 Aug 2018 00:00:00 +0000 <![CDATA[ Why and How to Avoid the Memory Lock ]]> https://tomasvotruba.com/blog/2018/08/27/why-and-how-to-avoid-the-memory-lock Mon, 27 Aug 2018 00:00:00 +0000 <![CDATA[ 9 Features of PHPStorm Symfony Plugin You Should Not Miss in Gifs ]]> https://tomasvotruba.com/blog/2018/08/23/9-features-of-symfony-plugin-you-should-not-miss-in-gifs Thu, 23 Aug 2018 00:00:00 +0000 <![CDATA[ Painful Experience over Solutions: Extend Configuration in Easy Admin Bundle ]]> https://tomasvotruba.com/blog/2018/08/20/painful-experience-over-solutions-extend-configuratin-in-easy-admin-bundle-with-collector Instead, let's **dive into real problems I came across while coding and let the code speak the theory between lines**. Today we try to add own config option to YAML of Easy Admin Bundle (without pull-request to the package). ]]> Mon, 20 Aug 2018 00:00:00 +0000 <![CDATA[ What's New in PHP 7.3 in 30 Seconds in Diffs ]]> https://tomasvotruba.com/blog/2018/08/16/whats-new-in-php-73-in-30-seconds-in-diffs Thu, 16 Aug 2018 00:00:00 +0000 <![CDATA[ Hidden Gems of PHP Packages: Symfony\Finder and SplFileInfo ]]> https://tomasvotruba.com/blog/2018/08/13/hidden-gems-of-php-packages-symfony-finder-and-spl-file-info Mon, 13 Aug 2018 00:00:00 +0000 <![CDATA[ Why is Your Company Losing Money By Not Open Sourcing 2: Code Quality ]]> https://tomasvotruba.com/blog/2018/08/09/why-is-your-company-losing-money-by-not-open-sourcing-2-code-quality Thu, 09 Aug 2018 00:00:00 +0000 <![CDATA[ Stylish and Standard Console Output with Symfony Style ]]> https://tomasvotruba.com/blog/2018/08/06/stylish-and-standard-console-output-with-symfony-style Mon, 06 Aug 2018 00:00:00 +0000 <![CDATA[ 5 Gotchas of the Bin File in PHP CLI Applications ]]> https://tomasvotruba.com/blog/2018/08/02/5-gotchas-of-the-bin-file-in-php-cli-applications Thu, 02 Aug 2018 00:00:00 +0000 <![CDATA[ Hidden Gems of PHP Packages: Nette\Utils ]]> https://tomasvotruba.com/blog/2018/07/30/hidden-gems-of-php-packages-nette-utils Mon, 30 Jul 2018 00:00:00 +0000 <![CDATA[ Why is Your Company Losing Money by not Open Sourcing: 1. Hiring ]]> https://tomasvotruba.com/blog/2018/07/26/why-is-your-company-losing-money-by-not-open-sourcing-1-hiring Thu, 26 Jul 2018 00:00:00 +0000 <![CDATA[ 5 Signs You Should Never Have a Talk Abroad ]]> https://tomasvotruba.com/blog/2018/07/23/5-signs-should-never-have-a-talk-abroad Mon, 23 Jul 2018 00:00:00 +0000 <![CDATA[ Notes from 'Peace is Every Step' Book ]]> https://tomasvotruba.com/blog/2018/07/12/20-notes-from-peace-is-every-step-book Thu, 12 Jul 2018 00:00:00 +0000 <![CDATA[ 6 Reasons Why Doctrine is Alive and Kicking ]]> https://tomasvotruba.com/blog/2018/07/09/6-reasons-why-doctrine-is-alive-and-kicking Mon, 09 Jul 2018 00:00:00 +0000 <![CDATA[ How to Convert Latte Templates to Twig in 27 Regular Expressions ]]> https://tomasvotruba.com/blog/2018/07/05/how-to-convert-latte-templates-to-twig-in-27-regular-expressions Thu, 05 Jul 2018 00:00:00 +0000 <![CDATA[ Don't Read Books ]]> https://tomasvotruba.com/blog/2018/06/28/dont-read-books Thu, 28 Jun 2018 00:00:00 +0000 <![CDATA[ Open Source is Selfish ]]> https://tomasvotruba.com/blog/2018/06/21/open-source-is-selfish Thu, 21 Jun 2018 00:00:00 +0000 <![CDATA[ 14 Surprising Tips from Selling is Human to Influence Others ]]> https://tomasvotruba.com/blog/2018/06/18/14-surprising-tip-from-selling-is-human-to-influence-others Mon, 18 Jun 2018 00:00:00 +0000 <![CDATA[ Collector Pattern for Dummies ]]> https://tomasvotruba.com/blog/2018/06/14/collector-pattern-for-dummies Thu, 14 Jun 2018 00:00:00 +0000 <![CDATA[ How to Turn Mocks from Nightmare to Solid Kiss Tests ]]> https://tomasvotruba.com/blog/2018/06/11/how-to-turn-mocks-from-nightmare-to-solid-kiss-tests Mon, 11 Jun 2018 00:00:00 +0000 <![CDATA[ How to Migrate From PHP CS Fixer to ECS in 6 Steps ]]> https://tomasvotruba.com/blog/2018/06/07/how-to-migrate-from-php-cs-fixer-to-easy-coding-standard Thu, 07 Jun 2018 00:00:00 +0000 <![CDATA[ How to Migrate From PHP_CodeSniffer to ECS in 7 Steps ]]> https://tomasvotruba.com/blog/2018/06/04/how-to-migrate-from-php-code-sniffer-to-easy-coding-standard Mon, 04 Jun 2018 00:00:00 +0000 <![CDATA[ Symfony vs Laravel vs Nette - Which PHP Framework Should You Choose ]]> https://tomasvotruba.com/blog/2018/05/31/symfony-vs-laravel-vs-nette-which-php-framework-you-should-choose Thu, 31 May 2018 00:00:00 +0000 <![CDATA[ Build Your First Symfony Console Application with Dependency Injection Under 4 Files ]]> https://tomasvotruba.com/blog/2018/05/28/build-your-first-symfony-console-application-with-dependency-injection-under-4-files Mon, 28 May 2018 00:00:00 +0000 <![CDATA[ The Boss vs. The Masseuse Way to Add Coding Standards to a Big Project ]]> https://tomasvotruba.com/blog/2018/05/24/boss-vs-masseuse-way-to-add-coding-standards-to-big-project Thu, 24 May 2018 00:00:00 +0000 <![CDATA[ Is Your Code Readable By Humans Cognitive Complexity Tells You ]]> https://tomasvotruba.com/blog/2018/05/21/is-your-code-readable-by-humans-cognitive-complexity-tells-you Mon, 21 May 2018 00:00:00 +0000 <![CDATA[ How to Test Private Services in Symfony ]]> https://tomasvotruba.com/blog/2018/05/17/how-to-test-private-services-in-symfony Thu, 17 May 2018 00:00:00 +0000 <![CDATA[ How to Load --config With Services in Symfony Console ]]> https://tomasvotruba.com/blog/2018/05/14/how-to-load-config-with-services-in-symfony-console Mon, 14 May 2018 00:00:00 +0000 <![CDATA[ Rectify: Turn All Action Injects to Constructor Injection in Your Symfony Application ]]> https://tomasvotruba.com/blog/2018/05/10/rectify-turn-all-action-injects-to-constructor-injection-in-your-symfony-application Thu, 10 May 2018 00:00:00 +0000 <![CDATA[ Why You Should Combine Symfony Console and Dependency Injection ]]> https://tomasvotruba.com/blog/2018/05/07/why-you-should-combine-symfony-console-and-dependency-injection Mon, 07 May 2018 00:00:00 +0000 <![CDATA[ How Do You Treat Your Own First AI ]]> https://tomasvotruba.com/blog/2018/05/03/how-do-you-treat-your-own-first-ai Thu, 03 May 2018 00:00:00 +0000 <![CDATA[ Programming = Climbing a Huge Mountain ]]> https://tomasvotruba.com/blog/2018/04/30/programming-climbing-a-huge-mountain Mon, 30 Apr 2018 00:00:00 +0000 <![CDATA[ How I Got into Static Trap and Made Fool of Myself ]]> https://tomasvotruba.com/blog/2018/04/26/how-i-got-into-static-trap-and-made-fool-of-myself Thu, 26 Apr 2018 00:00:00 +0000 <![CDATA[ How to Slowly Turn your Symfony Project to Legacy with Action Injection ]]> https://tomasvotruba.com/blog/2018/04/23/how-to-slowly-turn-your-symfony-project-to-legacy-with-action-injection Mon, 23 Apr 2018 00:00:00 +0000 <![CDATA[ 4 Tips To Get Emotions to Your Blogging About Programming ]]> https://tomasvotruba.com/blog/2018/04/19/4-tips-to-get-emotions-to-your-blogging-about-programming Thu, 19 Apr 2018 00:00:00 +0000 <![CDATA[ 5 Steps to Your First Fixer or Sniff Test ]]> https://tomasvotruba.com/blog/2018/04/16/5-steps-to-your-first-fixer-or-sniff-test Mon, 16 Apr 2018 00:00:00 +0000 <![CDATA[ The Best 5 of 256 Bloghacks Book ]]> https://tomasvotruba.com/blog/2018/04/12/the-best-5-of-256-bloghacks-book Thu, 12 Apr 2018 00:00:00 +0000 <![CDATA[ Try PSR-12 on Your Code Today ]]> https://tomasvotruba.com/blog/2018/04/09/try-psr-12-on-your-code-today Mon, 09 Apr 2018 00:00:00 +0000 <![CDATA[ 4 Ways to Speedup Your Symfony Development with PackageBuilder ]]> https://tomasvotruba.com/blog/2018/04/05/4-ways-to-speedup-your-symfony-development-with-packagebuilder Thu, 05 Apr 2018 00:00:00 +0000 <![CDATA[ Rectify: Turn All Doctrine Repositories From Inheritance To Composition in Seconds ]]> https://tomasvotruba.com/blog/2018/04/02/rectify-turn-repositories-to-services-in-symfony Mon, 02 Apr 2018 00:00:00 +0000 <![CDATA[ New in Coding Standard 4: Long Line Breaks Automated and 3 Legacy Prevention Fixers ]]> https://tomasvotruba.com/blog/2018/03/29/new-in-coding-standard-4-long-line-breaks-automated-and-3-legacy-prevention-fixers Thu, 29 Mar 2018 00:00:00 +0000 <![CDATA[ New in Easy Coding Standard 4: Clean Symfony Standard with Yaml and Services ]]> https://tomasvotruba.com/blog/2018/03/26/new-in-easy-coding-standard-4-clean-symfony-standard-with-yaml-and-services Mon, 26 Mar 2018 00:00:00 +0000 <![CDATA[ How Teaching Suicides Itself by Killing the Passion ]]> https://tomasvotruba.com/blog/2018/03/22/how-teaching-suicides-itself-by-killing-the-passion Thu, 22 Mar 2018 00:00:00 +0000 <![CDATA[ How to Criticize like a Senior Programmer ]]> https://tomasvotruba.com/blog/2018/03/19/how-to-criticize-like-a-senior-programmer Mon, 19 Mar 2018 00:00:00 +0000 <![CDATA[ Monorepo on the Rise in PHP ]]> https://tomasvotruba.com/blog/2018/03/15/monorepo-on-the-rise-in-php Thu, 15 Mar 2018 00:00:00 +0000 <![CDATA[ NEON vs. YAML and How to Migrate Between Them ]]> https://tomasvotruba.com/blog/2018/03/12/neon-vs-yaml-and-how-to-migrate-between-them Mon, 12 Mar 2018 00:00:00 +0000 <![CDATA[ Why is Collector Pattern so Awesome ]]> https://tomasvotruba.com/blog/2018/03/08/why-is-collector-pattern-so-awesome Thu, 08 Mar 2018 00:00:00 +0000 <![CDATA[ Rector: Part 3 - Why Instant Upgrades ]]> https://tomasvotruba.com/blog/2018/03/05/rector-part-3-why-instant-upgrades Mon, 05 Mar 2018 00:00:00 +0000 <![CDATA[ New in Symplify 3: 4 Improvements in EasyCodingStandard ]]> https://tomasvotruba.com/blog/2018/03/01/new-in-symplify-3-4-improvements-in-easy-coding-standard Thu, 01 Mar 2018 00:00:00 +0000 <![CDATA[ Rector: Part 2 - Maturity of PHP Ecosystem and Founding Fathers ]]> https://tomasvotruba.com/blog/2018/02/26/rector-part-2-maturity-of-php-ecocystem-and-founding-fathers Mon, 26 Feb 2018 00:00:00 +0000 <![CDATA[ Rector: Part 1 - What and How ]]> https://tomasvotruba.com/blog/2018/02/19/rector-part-1-what-and-how Mon, 19 Feb 2018 00:00:00 +0000 <![CDATA[ Sleep Shorter to Get 62 % Smarter ]]> https://tomasvotruba.com/blog/2018/02/12/sleep-shorter-to-get-62-percent-smarter Mon, 12 Feb 2018 00:00:00 +0000 <![CDATA[ How to Run Symfony Processes Asynchronously ]]> https://tomasvotruba.com/blog/2018/02/05/how-to-run-symfony-processes-asynchronously Mon, 05 Feb 2018 00:00:00 +0000 <![CDATA[ How to Deal With Haters in Comments and Github ]]> https://tomasvotruba.com/blog/2018/01/29/how-to-deal-with-haters-in-comments-and-github Mon, 29 Jan 2018 00:00:00 +0000 <![CDATA[ How to Get Parameter in Symfony Controller the Clean Way ]]> https://tomasvotruba.com/blog/2018/01/22/how-to-get-parameter-in-symfony-controller-the-clean-way Mon, 22 Jan 2018 00:00:00 +0000 <![CDATA[ Clean and Decoupled Controllers, Commands and Event Subscribers Once and for All with Delegator Pattern ]]> https://tomasvotruba.com/blog/2018/01/08/clean-and-decoupled-controllers-commands-and-event-subscribers-once-and-for-all-with-delegator-pattern Mon, 08 Jan 2018 00:00:00 +0000 <![CDATA[ New in Symplify 3: 4 Time-saving Coding Standard Checkers ]]> https://tomasvotruba.com/blog/2018/01/01/new-in-symplify-3-4-time-saving-coding-standard-checkers Mon, 01 Jan 2018 00:00:00 +0000 <![CDATA[ Composer Local Packages for Dummies ]]> https://tomasvotruba.com/blog/2017/12/25/composer-local-packages-for-dummies Mon, 25 Dec 2017 00:00:00 +0000 <![CDATA[ Life 3.0: What Will You Do When AI Takes Over the World ]]> https://tomasvotruba.com/blog/2017/12/04/life30-what-will-you-do-when-ai-takes-over-the-world Mon, 04 Dec 2017 00:00:00 +0000 <![CDATA[ United PHP 7.1 Adoption 6 Months Later ]]> https://tomasvotruba.com/blog/2017/11/27/united-php-71-adoption-6-months-later Mon, 27 Nov 2017 00:00:00 +0000 <![CDATA[ How to Write Interesting Jobs Offers for Programmers ]]> https://tomasvotruba.com/blog/2017/11/20/how-to-write-interesting-job-offers-for-programmers Mon, 20 Nov 2017 00:00:00 +0000 <![CDATA[ 7 Tips You Should Know Before Going To University ]]> https://tomasvotruba.com/blog/2017/11/13/7-tips-you-should-know-before-going-to-university Mon, 13 Nov 2017 00:00:00 +0000 <![CDATA[ How to change PHP code with Abstract Syntax Tree ]]> https://tomasvotruba.com/blog/2017/11/06/how-to-change-php-code-with-abstract-syntax-tree Mon, 06 Nov 2017 00:00:00 +0000 <![CDATA[ What can You Learn from Menstruation and Symfony Releases ]]> https://tomasvotruba.com/blog/2017/10/30/what-can-you-learn-from-menstruation-and-symfony-releases Mon, 30 Oct 2017 00:00:00 +0000 <![CDATA[ IMbox Zero ]]> https://tomasvotruba.com/blog/2017/10/23/imbox-zero Mon, 23 Oct 2017 00:00:00 +0000 <![CDATA[ How to use Repository with Doctrine as Service in Symfony ]]> https://tomasvotruba.com/blog/2017/10/16/how-to-use-repository-with-doctrine-as-service-in-symfony Mon, 16 Oct 2017 00:00:00 +0000 <![CDATA[ How to Get the Most Valuable Feedback You Can Get ]]> https://tomasvotruba.com/blog/2017/10/09/how-to-get-the-most-valuable-feedback-you-can-get Mon, 09 Oct 2017 00:00:00 +0000 <![CDATA[ 3 non-IT Books That Help you to Become Better Programmer ]]> https://tomasvotruba.com/blog/2017/09/25/3-non-it-books-that-help-you-to-become-better-programmer Mon, 25 Sep 2017 00:00:00 +0000 <![CDATA[ 4 Simple Checkers for Coding Standard Haters but Clean Code Lovers ]]> https://tomasvotruba.com/blog/2017/09/18/4-simple-checkers-for-coding-standard-haters-but-clean-code-lovers Mon, 18 Sep 2017 00:00:00 +0000 <![CDATA[ How to write Open-Source in PHP 3: Deprecating Code ]]> https://tomasvotruba.com/blog/2017/09/11/how-to-write-open-source-in-php-3-deprecating-code Backward Compatibility Promise. It prevents from unexpected and frustrating BC breaks and helps users to upgrade gradually thanks to deprecation messages. In this post I will show you how to work with deprecation messages. ]]> Mon, 11 Sep 2017 00:00:00 +0000 <![CDATA[ How ApiGen Survived its Own Death ]]> https://tomasvotruba.com/blog/2017/09/04/how-apigen-survived-its-own-death Mon, 04 Sep 2017 00:00:00 +0000 <![CDATA[ How to Apply Nette Coding Standard in Your Project ]]> https://tomasvotruba.com/blog/2017/08/14/how-to-apply-nette-coding-standard-in-your-project Pull-requests are more fun thanks to automated coding standard. You don't have explain where to put space or bracket. You can talk about architecture or meaning of the code instead. Moreover in open-source. I wanted to make this possible in Nette, but Coding Standards could be found only in documentation. This year I started to work on a Nette Coding Standard (NCS) that you can put to CLI. And you'll be able set it up in in your project yourself today. ]]> Mon, 14 Aug 2017 00:00:00 +0000 <![CDATA[ 7 New Features in Easy Coding Standard 2.2 ]]> https://tomasvotruba.com/blog/2017/08/07/7-new-features-in-easy-coding-standard-22 Mon, 07 Aug 2017 00:00:00 +0000 <![CDATA[ How PHP Coding Standard Tools Actually Work ]]> https://tomasvotruba.com/blog/2017/07/31/how-php-coding-standard-tools-actually-work PHP CS Fixer or PHP_CodeSniffer? Do you know the way they work is ~80 % the same? Do you wonder how they work under the hood? Today I will share 3 main pillars of their architecture. ]]> Mon, 31 Jul 2017 00:00:00 +0000 <![CDATA[ How to Write Custom Fixer for PHP CS Fixer 3 ]]> https://tomasvotruba.com/blog/2017/07/24/how-to-write-custom-fixer-for-php-cs-fixer-24 Mon, 24 Jul 2017 00:00:00 +0000 <![CDATA[ How to Write Custom Sniff for Code Sniffer 3+ ]]> https://tomasvotruba.com/blog/2017/07/17/how-to-write-custom-sniff-for-code-sniffer-3 know to write your first sniff. ]]> Mon, 17 Jul 2017 00:00:00 +0000 <![CDATA[ How to Deprecate PHP Package Without Leaving Anyone Behind ]]> https://tomasvotruba.com/blog/2017/07/03/how-to-deprecate-php-package-without-leaving-anyone-behind And you take care of them. In time you change a job or switch a programming language and you don't have time to take care of them properly. Number of issues and PRs grows and package is getting obsolete. You can do 2 things in this situation: nothing like most people do or take responsibility, deprecate package and inform your users about better alternative. ]]> Mon, 03 Jul 2017 00:00:00 +0000 <![CDATA[ Thank you David Grudl ]]> https://tomasvotruba.com/blog/2017/06/01/thank-you-david People who work in their free time and put an effort in it. We feel like using a product - it should work and when it doesn't, it's broken. And when our application is constantly broken, we will be angry for them. But if our application is smooth and ready, do we love and say thank you? I'd like to express my gratitude and tribute for you, David - you made my programming life very joyful and curious experience. ]]> Thu, 01 Jun 2017 00:00:00 +0000 <![CDATA[ How to refactor to new Dependency Injection features in Symfony 3.3 ]]> https://tomasvotruba.com/blog/2017/05/07/how-to-refactor-to-new-dependency-injection-features-in-symfony-3-3 but combined together - they are huge jump compare to what we have now. Today I will show you what code can you drop and how to migrate it. ]]> Sun, 07 May 2017 00:00:00 +0000 <![CDATA[ Combine power of PHP_CodeSniffer and PHP CS Fixer in 3 lines ]]> https://tomasvotruba.com/blog/2017/05/03/combine-power-of-php-code-sniffer-and-php-cs-fixer-in-3-lines Wed, 03 May 2017 00:00:00 +0000 <![CDATA[ 3 Symfony and Laravel Patterns that Make Code Easy to Extend Without Modification ]]> https://tomasvotruba.com/blog/2017/04/14/3-symfony-and-laravel-patterns-that-make-code-easy-to-extends-without-modification keep complexity low and add new features. Magic? No, just patterns! Today we look on 3 of them I found and fond in Symfony and Laravel world. ]]> Fri, 14 Apr 2017 00:00:00 +0000 <![CDATA[ Fast and Easy Way to Learn Complex Topics ]]> https://tomasvotruba.com/blog/2017/02/22/fast-and-easy-way-to-learn-complex-topics the simplest step and make learning faster (or machines will). Today I will show you how. ]]> Wed, 22 Feb 2017 00:00:00 +0000 <![CDATA[ Minimalistic Way to Create Your First Nette Extension ]]> https://tomasvotruba.com/blog/2017/02/15/minimalistic-way-to-create-your-first-nette-extension split your application to small and logical chunks of code. Open-source extensions are more complex using many Nette\DI features, but today I will show you, how to start with one Nette\DI method and one service only. ]]> Wed, 15 Feb 2017 00:00:00 +0000 <![CDATA[ Drop all Service Tags in Your Nette and Symfony Applications ]]> https://tomasvotruba.com/blog/2017/02/12/drop-all-service-tags-in-your-nette-and-symfony-applications Sun, 12 Feb 2017 00:00:00 +0000 <![CDATA[ How Monolithic Repository in Open Source saved my Laziness ]]> https://tomasvotruba.com/blog/2017/01/31/how-monolithic-repository-in-open-source-saved-my-laziness talk from Fabien about monorepo and Symfony. I said to myself: "I don't know a thing about it. Let's try it out. I can always return if it sucks." I never did. Today I will show you why I see monorepo approach in open-source so awesome. ]]> Tue, 31 Jan 2017 00:00:00 +0000 <![CDATA[ Why I Switched Scrutinizer for PHPStan and You Should Too ]]> https://tomasvotruba.com/blog/2017/01/28/why-I-switched-scrutinizer-for-phpstan-and-you-should-too Sat, 28 Jan 2017 00:00:00 +0000 <![CDATA[ 7 rad, které bych si dal před odchodem na vysokou školu ]]> https://tomasvotruba.com/blog/2017/01/15/7-rad-ktere-bych-si-dal-pred-odchodem-na-vysokou-skolu Sun, 15 Jan 2017 00:00:00 +0000 <![CDATA[ Jak psát zajímavé inzeráty pro ajťáky ]]> https://tomasvotruba.com/blog/2017/01/10/jak-psat-zajimave-inzeraty-pro-ajtaky Tue, 10 Jan 2017 00:00:00 +0000 <![CDATA[ How to avoid @inject thanks to Decorator feature in Nette ]]> https://tomasvotruba.com/blog/2016/12/24/how-to-avoid-inject-thanks-to-decorator-feature-in-nette Sat, 24 Dec 2016 00:00:00 +0000 <![CDATA[ How to write open-source in PHP 2: Rise value of your package with help of skeleton ]]> https://tomasvotruba.com/blog/2016/09/16/how-to-write-open-source-in-php-2-enjoy-skeletons I will answer all these questions today. ]]> Fri, 16 Sep 2016 00:00:00 +0000 <![CDATA[ How to write open-source in PHP 1: Create a repository on Github ]]> https://tomasvotruba.com/blog/2016/09/09/how-to-write-open-source-in-php-1-create-a-repository Fri, 09 Sep 2016 00:00:00 +0000