https://tomasvotruba.com/rss.xmlThu, 07 Mar 2024 00:00:00 +0000https://tomasvotruba.com/blog/finalize-classes-automated-and-safeThu, 07 Mar 2024 00:00:00 +0000https://tomasvotruba.com/blog/rector-book-2024-release-with-brand-new-chapterMon, 05 Feb 2024 00:00:00 +0000https://tomasvotruba.com/blog/3-signs-your-project-is-becoming-legacy-mock-rotteningSat, 03 Feb 2024 00:00:00 +0000https://tomasvotruba.com/blog/get-json-output-for-phpunit-10Sat, 27 Jan 2024 00:00:00 +0000https://tomasvotruba.com/blog/zen-config-in-ecsSun, 14 Jan 2024 00:00:00 +0000https://tomasvotruba.com/blog/5-books-i-enyjoed-reading-in-2023Sat, 30 Dec 2023 00:00:00 +0000https://tomasvotruba.com/blog/3-signs-your-project-is-becoming-legacy-arrays-creepThu, 28 Dec 2023 00:00:00 +0000https://tomasvotruba.com/blog/3-signs-your-project-is-becoming-legacy-and-how-to-avoid-themFri, 17 Nov 2023 00:00:00 +0000https://tomasvotruba.com/blog/how-to-autowire-multiple-instances-of-same-type-in-symfony-laravelWed, 01 Nov 2023 00:00:00 +0000https://tomasvotruba.com/blog/how-make-your-tool-commands-list-easy-to-readFri, 13 Oct 2023 00:00:00 +0000https://tomasvotruba.com/blog/from-symfony-to-laravel-5-steps-to-prepare-your-symfony-project-for-migrationWed, 06 Sep 2023 00:00:00 +0000https://tomasvotruba.com/blog/from-symfony-to-laravel-can-laravel-even-compiler-passFri, 25 Aug 2023 00:00:00 +0000https://tomasvotruba.com/blog/how-to-take-advantage-of-3rd-party-dependency-containerThu, 24 Aug 2023 00:00:00 +0000https://tomasvotruba.com/blog/easy-and-quick-way-to-measure-lines-of-code-in-phpSun, 20 Aug 2023 00:00:00 +0000https://tomasvotruba.com/blog/removing-service-from-laravel-container-is-not-that-easyFri, 18 Aug 2023 00:00:00 +0000https://tomasvotruba.com/blog/how-to-remove-transitional-dependencies-you-dont-needWed, 16 Aug 2023 00:00:00 +0000https://tomasvotruba.com/blog/unleash-the-power-of-simplicity-php-cli-app-with-minimal-dependenciesMon, 31 Jul 2023 00:00:00 +0000https://tomasvotruba.com/blog/experiment-how-i-replaced-symfony-di-with-laravel-container-in-ecsTue, 25 Jul 2023 00:00:00 +0000https://tomasvotruba.com/blog/how-to-avoid-maintaining-classes-you-dont-useTue, 18 Jul 2023 00:00:00 +0000https://tomasvotruba.com/blog/two-kinds-of-legacy-code-upgradeMon, 10 Jul 2023 00:00:00 +0000https://tomasvotruba.com/blog/moving-from-disqus-to-twitter-to-make-knowhow-sharing-easierWed, 19 Apr 2023 00:00:00 +0000https://tomasvotruba.com/blog/what-i-prefer-about-laravel-dependency-injection-over-symfonyFri, 31 Mar 2023 00:00:00 +0000https://tomasvotruba.com/blog/introducing-bladestan-phpstan-analysis-of-blade-templatesFri, 24 Mar 2023 00:00:00 +0000https://tomasvotruba.com/blog/to-route-or-to-action-thats-the-questionWed, 15 Mar 2023 00:00:00 +0000https://tomasvotruba.com/blog/introducing-punchcard-object-configs-for-laravelWed, 08 Mar 2023 00:00:00 +0000https://tomasvotruba.com/blog/why-I-migrated-this-website-from-symfony-to-laravelSun, 26 Feb 2023 00:00:00 +0000https://tomasvotruba.com/blog/how-can-we-generate-unit-tests-part-3-how-to-ask-davinci-and-codex-to-get-the-right-answerTue, 14 Feb 2023 00:00:00 +0000https://tomasvotruba.com/blog/run-config-transformer-in-ci-everyday-to-keep-yaml-awaySun, 12 Feb 2023 00:00:00 +0000https://tomasvotruba.com/blog/lets-share-fails-and-tricks-with-gptTue, 31 Jan 2023 00:00:00 +0000https://tomasvotruba.com/blog/good-bye-monorepoSat, 28 Jan 2023 00:00:00 +0000https://tomasvotruba.com/blog/how-can-we-generate-unit-tests-part-2-building-scoring-scriptThu, 12 Jan 2023 00:00:00 +0000https://tomasvotruba.com/blog/how-can-we-generate-unit-tests-part-1-testability-scoreWed, 04 Jan 2023 00:00:00 +0000https://tomasvotruba.com/blog/how-to-release-php-81-and-72-package-in-the-same-repositoryFri, 30 Dec 2022 00:00:00 +0000https://tomasvotruba.com/blog/keep-cognitive-complexity-low-with-phpstanWed, 28 Dec 2022 00:00:00 +0000https://tomasvotruba.com/blog/how-to-measure-your-type-coverageMon, 07 Nov 2022 00:00:00 +0000https://tomasvotruba.com/blog/how-to-develop-sole-package-in-php81-and-downgrade-to-php72Mon, 25 Jul 2022 00:00:00 +0000https://tomasvotruba.com/blog/8-news-in-config-transformer-that-converts-symfony-yml-to-phpMon, 18 Jul 2022 00:00:00 +0000https://tomasvotruba.com/blog/can-phpstan-find-dead-public-methodsMon, 04 Jul 2022 00:00:00 +0000https://tomasvotruba.com/blog/twig-smoke-rendering-fortune-favors-the-boldMon, 27 Jun 2022 00:00:00 +0000https://tomasvotruba.com/blog/twig-smoke-rendering-journey-of-failsMon, 20 Jun 2022 00:00:00 +0000https://tomasvotruba.com/blog/twig-smoke-rendering-why-do-we-even-need-itMon, 13 Jun 2022 00:00:00 +0000https://tomasvotruba.com/blog/five-pitfalls-of-upgrade-to-native-php-enums-and-how-to-avoid-themMon, 06 Jun 2022 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/how-to-upgrade-latte-2-macro-to-latte-3-tagMon, 23 May 2022 00:00:00 +0000https://tomasvotruba.com/blog/5-steps-to-get-ready-for-latte-3Thu, 19 May 2022 00:00:00 +0000https://tomasvotruba.com/blog/new-in-ecs-simpler-configMon, 09 May 2022 00:00:00 +0000https://tomasvotruba.com/blog/how-to-test-symfony-routes-to-make-huge-refactorings-safeMon, 02 May 2022 00:00:00 +0000https://tomasvotruba.com/blog/how-to-remove-dead-mock-calls-from-phpunit-testsMon, 25 Apr 2022 00:00:00 +0000https://tomasvotruba.com/blog/how-to-test-latte-macro-in-4-stepsMon, 18 Apr 2022 00:00:00 +0000https://tomasvotruba.com/blog/5-constant-lists-that-give-context-to-your-integers-and-stringsMon, 07 Mar 2022 00:00:00 +0000https://tomasvotruba.com/blog/how-to-create-symfony-kernel-for-tests-with-different-configsMon, 07 Feb 2022 00:00:00 +0000https://tomasvotruba.com/blog/get-rid-of-mixed-callables-with-phpstanMon, 31 Jan 2022 00:00:00 +0000https://tomasvotruba.com/blog/not-all-mixed-types-are-equally-uselessMon, 22 Nov 2021 00:00:00 +0000https://tomasvotruba.com/blog/introducing-light-kernel-for-symfony-console-appsMon, 15 Nov 2021 00:00:00 +0000https://tomasvotruba.com/blog/how-to-run-naked-unit-tests-in-a-new-legacy-projectMon, 08 Nov 2021 00:00:00 +0000https://tomasvotruba.com/blog/decomposing-symfony-kernel-what-does-minimal-symfony-bundle-doMon, 01 Nov 2021 00:00:00 +0000https://tomasvotruba.com/blog/when-symfony-http-kernel-is-too-big-hammer-to-useMon, 25 Oct 2021 00:00:00 +0000https://tomasvotruba.com/blog/5-commands-from-easy-ci-that-makes-your-ci-strongerMon, 18 Oct 2021 00:00:00 +0000https://tomasvotruba.com/blog/introducing-up-to-16-times-faster-easy-coding-standardMon, 11 Oct 2021 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/hidden-productivity-costs-of-parallel-runMon, 27 Sep 2021 00:00:00 +0000https://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 +0000https://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 +0000https://tomasvotruba.com/blog/stamp-4-how-to-run-phpstan-rules-on-temporary-php-fileMon, 06 Sep 2021 00:00:00 +0000https://tomasvotruba.com/blog/stamp-3-how-to-turn-twig-helper-functions-to-origin-objectMon, 30 Aug 2021 00:00:00 +0000https://tomasvotruba.com/blog/stamp-2-how-to-turn-messy-twig-php-to-something-usefulMon, 23 Aug 2021 00:00:00 +0000https://tomasvotruba.com/blog/stamp-1-how-to-compile-twig-to-phpMon, 16 Aug 2021 00:00:00 +0000https://tomasvotruba.com/blog/stamp-static-analysis-of-templatesMon, 09 Aug 2021 00:00:00 +0000https://tomasvotruba.com/blog/how-to-easily-protected-your-code-base-from-commented-php-codeMon, 02 Aug 2021 00:00:00 +0000https://tomasvotruba.com/blog/how-i-made-huge-mistake-with-interpretation-of-laravel-downloadsMon, 26 Jul 2021 00:00:00 +0000https://tomasvotruba.com/blog/launching-3-trainings-rector-phpstan-and-bulletproof-ciMon, 19 Jul 2021 00:00:00 +0000https://tomasvotruba.com/blog/a-week-in-a-life-of-employed-open-source-developerMon, 12 Jul 2021 00:00:00 +0000https://tomasvotruba.com/blog/how-to-scope-your-php-tool-in-10-stepsThu, 08 Jul 2021 00:00:00 +0000https://tomasvotruba.com/blog/why-do-we-scope-php-toolsMon, 05 Jul 2021 00:00:00 +0000https://tomasvotruba.com/blog/how-to-replace-single-node-with-two-nodes-in-abstract-syntax-treeMon, 28 Jun 2021 00:00:00 +0000https://tomasvotruba.com/blog/how-to-make-upgrade-safe-with-bridge-testingMon, 21 Jun 2021 00:00:00 +0000https://tomasvotruba.com/blog/doctrine-annotations-and-attributes-living-together-in-peaceMon, 14 Jun 2021 00:00:00 +0000https://tomasvotruba.com/blog/why-should-we-talk-about-our-mitakes-in-php-communityMon, 07 Jun 2021 00:00:00 +0000https://tomasvotruba.com/blog/how-i-redesigned-my-website-the-way-i-refactor-legacy-projectsThu, 03 Jun 2021 00:00:00 +0000https://tomasvotruba.com/blog/how-to-refactor-custom-doctrine-annotations-to-attributesMon, 31 May 2021 00:00:00 +0000https://tomasvotruba.com/blog/how-exception-to-the-convention-does-more-harm-than-goodMon, 24 May 2021 00:00:00 +0000https://tomasvotruba.com/blog/rector-the-power-of-automated-refactoring-book-releasedMon, 17 May 2021 00:00:00 +0000https://tomasvotruba.com/blog/introducing-ecs-prefixed-and-downgraded-to-php-71Thu, 13 May 2021 00:00:00 +0000https://tomasvotruba.com/blog/write-github-actions-for-gitlab-tooMon, 10 May 2021 00:00:00 +0000https://tomasvotruba.com/blog/phpstan-generics-for-dummies-with-two-parentsMon, 03 May 2021 00:00:00 +0000https://tomasvotruba.com/blog/dependency-juggling-code-smellMon, 26 Apr 2021 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2ways-to-write-big-numbers-more-readableMon, 12 Apr 2021 00:00:00 +0000https://tomasvotruba.com/blog/monorepo-split-github-action-20-with-gitlab-split-is-outMon, 05 Apr 2021 00:00:00 +0000https://tomasvotruba.com/blog/how-to-traverse-phpdoc-and-modify-itMon, 29 Mar 2021 00:00:00 +0000https://tomasvotruba.com/blog/never-forget-symfony-config-options-againMon, 15 Mar 2021 00:00:00 +0000https://tomasvotruba.com/blog/best-time-to-switch-gitlab-to-githubMon, 01 Mar 2021 00:00:00 +0000https://tomasvotruba.com/blog/its-not-null-null-its-enumMon, 22 Feb 2021 00:00:00 +0000https://tomasvotruba.com/blog/2021/02/15/how-dangerous-is-your-nette-template-assignMon, 15 Feb 2021 00:00:00 +0000https://tomasvotruba.com/blog/2021/02/11/tree-coding-vs-bush-codingThu, 11 Feb 2021 00:00:00 +0000https://tomasvotruba.com/blog/2021/02/08/how-to-prepare-your-neon-config-for-php-8-and-make-them-more-readableMon, 08 Feb 2021 00:00:00 +0000https://tomasvotruba.com/blog/2021/02/01/effective-debug-tricks-narrow-scopingMon, 01 Feb 2021 00:00:00 +0000https://tomasvotruba.com/blog/2021/01/25/4-phpstan-rule-that-bring-order-to-nette-injectsMon, 25 Jan 2021 00:00:00 +0000https://tomasvotruba.com/blog/2021/01/18/4-ways-symplify-makes-working-with-symfony-more-funMon, 18 Jan 2021 00:00:00 +0000https://tomasvotruba.com/blog/2021/01/11/how-to-detect-complex-duplicated-methods-with-phpstanMon, 11 Jan 2021 00:00:00 +0000https://tomasvotruba.com/blog/2021/01/04/phpstan-abstract-parent-generics-dummiesMon, 04 Jan 2021 00:00:00 +0000https://tomasvotruba.com/blog/2020/12/28/why-coding-standards-should-not-be-part-of-ciMon, 28 Dec 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/12/21/5-new-combos-opened-by-symfony-52-and-php-80Mon, 21 Dec 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/12/14/new-in-symplify-9-more-than-110-phpstan-rulesMon, 14 Dec 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/12/07/new-in-symplify-9-markdown-diffMon, 07 Dec 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/11/30/new-in-symplify-9-documentation-generator-for-php-cs-fixer-code-sniffer-phpstan-rector-rulesMon, 30 Nov 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/11/16/how-to-make-dynamic-matrix-in-github-actionsMon, 16 Nov 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/11/09/new-in-symplify-9-monorepo-split-with-github-actionMon, 09 Nov 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/11/02/symplify-monorepo-builder-split-fractal-of-bad-designMon, 02 Nov 2020 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2020/10/19/how-to-split-test-monorepo-with-composer-2Mon, 19 Oct 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/10/12/how-we-stopped-merging-pull-requestsMon, 12 Oct 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/10/05/how-to-reveal-static-call-relationships-in-your-codeMon, 05 Oct 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/09/28/how-to-add-colors-to-continuous-integration-outputMon, 28 Sep 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/09/21/symfony-autobind-parameter-is-dead-long-live-constant-parametersMon, 21 Sep 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/09/14/how-to-apply-coding-standard-on-php-snippets-in-markdown-filesMon, 14 Sep 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/09/07/introducing-object-calisthenics-rules-for-phpstanMon, 07 Sep 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/08/31/how-static-methods-kills-you-like-coronaMon, 31 Aug 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/08/24/what-if-we-remove-strings-from-symfony-extension-configuratoinMon, 24 Aug 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/08/17/how-to-get-rid-of-magic-static-and-chaos-from-latte-filtersMon, 17 Aug 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/08/10/4-ways-to-make-your-nette-project-more-readableMon, 10 Aug 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/08/03/how-give-away-1500-eur--in-1-tweet-and-help-25-people-learn-something-newMon, 03 Aug 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/07/27/how-to-switch-from-yaml-xml-configs-to-php-today-with-migrifyMon, 27 Jul 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/07/20/how-to-update-hundreds-of-test-fixtures-with-single-phpunit-runMon, 20 Jul 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/07/16/10-cool-features-you-get-after-switching-from-yaml-to-php-configsThu, 16 Jul 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/07/13/the-most-effetive-test-i-found-in-7-years-of-testingMon, 13 Jul 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/07/06/cleaning-lady-notes-from-class-mess-to-psr4-step-by-step-with-confidenceMon, 06 Jul 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/07/02/how-to-patch-package-in-vendor-yet-allow-its-updatesThu, 02 Jul 2020 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2020/06/22/why-class-constants-should-be-typedMon, 22 Jun 2020 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2020/06/08/drop-robot-loader-and-let-composer-deal-with-autoloadingMon, 08 Jun 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/06/01/inject-or-required-will-get-you-any-service-fastMon, 01 Jun 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/05/25/the-bulletproof-event-naming-for-symfony-event-dispatcherMon, 25 May 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/05/18/the-future-of-pehapkari-meetups-and-trainings-youMon, 18 May 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/05/11/how-to-upgrade-to-symplify-8-from-fixers-to-rector-rulesMon, 11 May 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/05/04/how-to-upgrade-to-symplify-8-from-sniffs-to-phpstan-rulesMon, 04 May 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/04/20/how-to-hydrate-arrays-to-objects-via-constructorMon, 20 Apr 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/04/13/how-to-migrate-spaghetti-to-304-symfony-5-controllers-over-weekendMon, 13 Apr 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/03/30/dont-show-your-privates-to-publicMon, 30 Mar 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/03/23/doctrine-entity-typed-properties-with-php74Mon, 23 Mar 2020 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2020/03/09/art-of-letting-goMon, 09 Mar 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/03/02/we-do-not-need-senior-developers-we-need-senior-code-basesMon, 02 Mar 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/02/17/local-packages-3-years-laterMon, 17 Feb 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/02/10/how-to-test-monorepo-after-split-before-actual-splitMon, 10 Feb 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/02/03/how-to-run-rector-and-phpstan-on-huge-project-in-3-seconds-with-phpstormMon, 03 Feb 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/01/27/switch-travis-to-github-actions-to-reduce-stressMon, 27 Jan 2020 00:00:00 +0000https://tomasvotruba.com/blog/2020/01/13/why-is-first-instant-feedback-crucial-to-developersMon, 13 Jan 2020 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2019/12/30/doctrine-behaviors-2-0-reloadedMon, 30 Dec 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/12/23/5-things-i-improve-when-i-get-to-new-repositoryMon, 23 Dec 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/12/16/8-steps-you-can-make-before-huge-upgrade-to-make-it-faster-cheaper-and-more-stableMon, 16 Dec 2019 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2019/12/02/how-to-box-symfony-app-to-phar-without-killing-yourselfMon, 02 Dec 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/11/25/the-single-best-skill-to-master-command-lineMon, 25 Nov 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/11/18/how-to-delegate-code-reviews-to-ciMon, 18 Nov 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/11/11/from-0-doc-types-to-full-type-declaration-with-dynamic-analysisMon, 11 Nov 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/11/04/still-on-phpunit-4-come-to-phpunit-8-together-in-a-dayMon, 04 Nov 2019 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2019/09/09/how-we-upgraded-pehapkari-cz-from-symfony-4-to-5-in-25-daysMon, 09 Sep 2019 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2019/08/26/how-we-migrated-54-357-lines-of-code-nette-to-symfony-in-2-people-under-80-hoursMon, 26 Aug 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/08/12/standalone-symfony-console-from-scratchMon, 12 Aug 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/08/05/standalone-symfony-event-dispatcher-from-the-scratchMon, 05 Aug 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/07/29/how-we-completed-thousands-of-missing-var-annotations-in-a-dayMon, 29 Jul 2019 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2019/07/15/why-use-one-time-migration-scriptsMon, 15 Jul 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/07/08/7-tips-to-write-flawless-issue-report-on-githubMon, 08 Jul 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/07/01/5-workflow-tips-every-php-developer-should-knowMon, 01 Jul 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/06/24/do-you-use-php-codesniffer-and-php-cs-fixer-phpstorm-plugin-you-are-slow-and-expensiveMon, 24 Jun 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/06/20/7-news-and-changes-in-symplify-6Thu, 20 Jun 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/05/16/don-t-ever-use-listenersThu, 16 May 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/05/13/hidden-gems-of-php-packages-psalm-fixing-your-codeMon, 13 May 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/05/09/is-rector-saving-you-time-support-it-on-patreonThu, 09 May 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/05/02/alias-as-a-code-smellThu, 02 May 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/04/29/rector-european-tour-in-may-june-2019Mon, 29 Apr 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/04/25/don-t-give-up-your-php-code-for-compiler-passes-so-easilyThu, 25 Apr 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/04/18/symfony-4-2-is-used-2-times-more-than-symfony-3-4Thu, 18 Apr 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/04/15/pattern-refactoringMon, 15 Apr 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/04/08/what-you-lose-by-switching-to-symfonyMon, 08 Apr 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/04/04/how-to-upgrade-twig-from-underscored-to-namespacesThu, 04 Apr 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/04/01/removing-static-there-and-back-againMon, 01 Apr 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/03/28/how-to-mock-final-classes-in-phpunitThu, 28 Mar 2019 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2019/03/21/how-to-instantly-migrate-phpspec-to-phpunitThu, 21 Mar 2019 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2019/03/11/why-we-migrated-from-nette-to-symfony-in-3-weeks-part-3Mon, 11 Mar 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/03/07/why-we-migrated-from-nette-to-symfony-in-3-weeks-part-2Thu, 07 Mar 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/03/04/how-to-turn-laravel-from-static-to-dependency-injection-in-one-dayMon, 04 Mar 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/02/28/how-to-upgrade-symfony-2-8-to-3-4Thu, 28 Feb 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/02/25/5-tips-to-effective-work-with-github-repositoryMon, 25 Feb 2019 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2019/02/18/how-we-automated-shopsys-packages-release-from-2-days-to-1-console-commandMon, 18 Feb 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/02/14/why-config-coding-sucksThu, 14 Feb 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/02/07/what-i-learned-by-using-thecodingmachine-safeThu, 07 Feb 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/02/04/new-in-rector-asterisk-type-matchMon, 04 Feb 2019 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2019/01/28/2-files-that-your-symfony-application-missesMon, 28 Jan 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/01/24/how-to-kill-parentsThu, 24 Jan 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/01/17/how-writing-posts-helps-you-to-become-better-programmerThu, 17 Jan 2019 00:00:00 +0000https://tomasvotruba.com/blog/2019/01/10/9-steps-to-migrate-from-jekyll-to-statieThu, 10 Jan 2019 00:00:00 +0000https://tomasvotruba.com/blog/2018/12/31/your-most-favorite-posts-in-2018Mon, 31 Dec 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/12/27/how-to-convert-all-your-symfony-service-configs-to-autodiscoveryThu, 27 Dec 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/12/24/thank-youMon, 24 Dec 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/12/17/function-create-function-is-deprecated-in-php-72-how-to-migrateMon, 17 Dec 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/12/13/kirill-smelov-s-phpstorm-tips-in-9-gifsThu, 13 Dec 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/12/10/rocket-science-behind-migration-of-docblock-types-to-php-typehintsMon, 10 Dec 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/12/06/dont-learn-to-codeThu, 06 Dec 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/12/03/it-bloggers-deprecate-your-posts-to-stop-spreading-legacyMon, 03 Dec 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/11/29/how-to-manage-configuration-in-symfony-without-bundle-extension-and-configurationThu, 29 Nov 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/11/26/14-tips-to-write-php-code-that-is-hard-to-maintain-and-upgradeMon, 26 Nov 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/11/22/how-to-test-monorepo-in-3-layersThu, 22 Nov 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/11/19/when-you-should-use-monorepo-and-when-local-packagesMon, 19 Nov 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/11/15/how-to-get-php-74-typed-properties-to-your-code-in-few-secondsThu, 15 Nov 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/11/12/will-autowired-arrays-finally-deprecate-tags-in-symfony-and-netteMon, 12 Nov 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/11/08/fatal-error-uncaught-error-operator-not-supported-for-strings-inThu, 08 Nov 2018 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2018/10/25/why-ast-fixes-your-coding-standard-better-than-tokensThu, 25 Oct 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/10/22/brief-history-of-tools-watching-and-changing-your-php-codeMon, 22 Oct 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/10/18/how-i-almost-missed-my-talk-in-php-asia-conferenceThu, 18 Oct 2018 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2018/10/11/hi-my-name-is-tom-conctat-vs-in-sprintf-vs-in-string-variablesThu, 11 Oct 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/10/08/new-in-symplify-5-create-merge-and-split-monorepo-with-1-commandMon, 08 Oct 2018 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2018/09/27/open-source-behind-the-scenes-finding-the-rector-visionThu, 27 Sep 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/09/24/new-in-symplify-5-3-news-in-easy-coding-standard-to-smoother-your-experienceMon, 24 Sep 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/09/20/new-in-symplify-5-3-new-cool-features-of-package-builderThu, 20 Sep 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/09/17/7-tips-to-write-exceptions-everyone-will-loveMon, 17 Sep 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/09/13/your-brain-is-your-gardenThu, 13 Sep 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/09/10/5-advices-i-would-love-to-get-before-starting-to-maintain-open-sourceMon, 10 Sep 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/09/06/how-to-develop-multiple-symfony-applications-fast-while-keeping-the-qualityThu, 06 Sep 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/09/03/4-ways-to-add-global-option-or-argument-to-symfony-console-applicationMon, 03 Sep 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/08/30/ways-i-fucked-up-open-source-code-mock-everything-and-test-unitsThu, 30 Aug 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/08/27/why-and-how-to-avoid-the-memory-lockMon, 27 Aug 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/08/23/9-features-of-symfony-plugin-you-should-not-miss-in-gifsThu, 23 Aug 2018 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2018/08/16/whats-new-in-php-73-in-30-seconds-in-diffsThu, 16 Aug 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/08/13/hidden-gems-of-php-packages-symfony-finder-and-spl-file-infoMon, 13 Aug 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/08/09/why-is-your-company-losing-money-by-not-open-sourcing-2-code-qualityThu, 09 Aug 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/08/06/stylish-and-standard-console-output-with-symfony-styleMon, 06 Aug 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/08/02/5-gotchas-of-the-bin-file-in-php-cli-applicationsThu, 02 Aug 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/07/30/hidden-gems-of-php-packages-nette-utilsMon, 30 Jul 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/07/26/why-is-your-company-losing-money-by-not-open-sourcing-1-hiringThu, 26 Jul 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/07/23/5-signs-should-never-have-a-talk-abroadMon, 23 Jul 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/07/12/20-notes-from-peace-is-every-step-bookThu, 12 Jul 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/07/09/6-reasons-why-doctrine-is-alive-and-kickingMon, 09 Jul 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/07/05/how-to-convert-latte-templates-to-twig-in-27-regular-expressionsThu, 05 Jul 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/06/28/dont-read-booksThu, 28 Jun 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/06/21/open-source-is-selfishThu, 21 Jun 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/06/18/14-surprising-tip-from-selling-is-human-to-influence-othersMon, 18 Jun 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/06/14/collector-pattern-for-dummiesThu, 14 Jun 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/06/11/how-to-turn-mocks-from-nightmare-to-solid-kiss-testsMon, 11 Jun 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/06/07/how-to-migrate-from-php-cs-fixer-to-easy-coding-standardThu, 07 Jun 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/06/04/how-to-migrate-from-php-code-sniffer-to-easy-coding-standardMon, 04 Jun 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/05/31/symfony-vs-laravel-vs-nette-which-php-framework-you-should-chooseThu, 31 May 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/05/28/build-your-first-symfony-console-application-with-dependency-injection-under-4-filesMon, 28 May 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/05/24/boss-vs-masseuse-way-to-add-coding-standards-to-big-projectThu, 24 May 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/05/21/is-your-code-readable-by-humans-cognitive-complexity-tells-youMon, 21 May 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/05/17/how-to-test-private-services-in-symfonyThu, 17 May 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/05/14/how-to-load-config-with-services-in-symfony-consoleMon, 14 May 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/05/10/rectify-turn-all-action-injects-to-constructor-injection-in-your-symfony-applicationThu, 10 May 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/05/07/why-you-should-combine-symfony-console-and-dependency-injectionMon, 07 May 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/05/03/how-do-you-treat-your-own-first-aiThu, 03 May 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/04/30/programming-climbing-a-huge-mountainMon, 30 Apr 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/04/26/how-i-got-into-static-trap-and-made-fool-of-myselfThu, 26 Apr 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/04/23/how-to-slowly-turn-your-symfony-project-to-legacy-with-action-injectionMon, 23 Apr 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/04/19/4-tips-to-get-emotions-to-your-blogging-about-programmingThu, 19 Apr 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/04/16/5-steps-to-your-first-fixer-or-sniff-testMon, 16 Apr 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/04/12/the-best-5-of-256-bloghacks-bookThu, 12 Apr 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/04/09/try-psr-12-on-your-code-todayMon, 09 Apr 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/04/05/4-ways-to-speedup-your-symfony-development-with-packagebuilderThu, 05 Apr 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/04/02/rectify-turn-repositories-to-services-in-symfonyMon, 02 Apr 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/03/29/new-in-coding-standard-4-long-line-breaks-automated-and-3-legacy-prevention-fixersThu, 29 Mar 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/03/26/new-in-easy-coding-standard-4-clean-symfony-standard-with-yaml-and-servicesMon, 26 Mar 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/03/22/how-teaching-suicides-itself-by-killing-the-passionThu, 22 Mar 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/03/19/how-to-criticize-like-a-senior-programmerMon, 19 Mar 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/03/15/monorepo-on-the-rise-in-phpThu, 15 Mar 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/03/12/neon-vs-yaml-and-how-to-migrate-between-themMon, 12 Mar 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/03/08/why-is-collector-pattern-so-awesomeThu, 08 Mar 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/03/05/rector-part-3-why-instant-upgradesMon, 05 Mar 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/03/01/new-in-symplify-3-4-improvements-in-easy-coding-standardThu, 01 Mar 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/02/26/rector-part-2-maturity-of-php-ecocystem-and-founding-fathersMon, 26 Feb 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/02/19/rector-part-1-what-and-howMon, 19 Feb 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/02/12/sleep-shorter-to-get-62-percent-smarterMon, 12 Feb 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/02/05/how-to-run-symfony-processes-asynchronouslyMon, 05 Feb 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/01/29/how-to-deal-with-haters-in-comments-and-githubMon, 29 Jan 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/01/22/how-to-get-parameter-in-symfony-controller-the-clean-wayMon, 22 Jan 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/01/08/clean-and-decoupled-controllers-commands-and-event-subscribers-once-and-for-all-with-delegator-patternMon, 08 Jan 2018 00:00:00 +0000https://tomasvotruba.com/blog/2018/01/01/new-in-symplify-3-4-time-saving-coding-standard-checkersMon, 01 Jan 2018 00:00:00 +0000https://tomasvotruba.com/blog/2017/12/25/composer-local-packages-for-dummiesMon, 25 Dec 2017 00:00:00 +0000https://tomasvotruba.com/blog/2017/12/04/life30-what-will-you-do-when-ai-takes-over-the-worldMon, 04 Dec 2017 00:00:00 +0000https://tomasvotruba.com/blog/2017/11/27/united-php-71-adoption-6-months-laterMon, 27 Nov 2017 00:00:00 +0000https://tomasvotruba.com/blog/2017/11/20/how-to-write-interesting-job-offers-for-programmersMon, 20 Nov 2017 00:00:00 +0000https://tomasvotruba.com/blog/2017/11/13/7-tips-you-should-know-before-going-to-universityMon, 13 Nov 2017 00:00:00 +0000https://tomasvotruba.com/blog/2017/11/06/how-to-change-php-code-with-abstract-syntax-treeMon, 06 Nov 2017 00:00:00 +0000https://tomasvotruba.com/blog/2017/10/30/what-can-you-learn-from-menstruation-and-symfony-releasesMon, 30 Oct 2017 00:00:00 +0000https://tomasvotruba.com/blog/2017/10/23/imbox-zeroMon, 23 Oct 2017 00:00:00 +0000https://tomasvotruba.com/blog/2017/10/16/how-to-use-repository-with-doctrine-as-service-in-symfonyMon, 16 Oct 2017 00:00:00 +0000https://tomasvotruba.com/blog/2017/10/09/how-to-get-the-most-valuable-feedback-you-can-getMon, 09 Oct 2017 00:00:00 +0000https://tomasvotruba.com/blog/2017/09/25/3-non-it-books-that-help-you-to-become-better-programmerMon, 25 Sep 2017 00:00:00 +0000https://tomasvotruba.com/blog/2017/09/18/4-simple-checkers-for-coding-standard-haters-but-clean-code-loversMon, 18 Sep 2017 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2017/09/04/how-apigen-survived-its-own-deathMon, 04 Sep 2017 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2017/08/07/7-new-features-in-easy-coding-standard-22Mon, 07 Aug 2017 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2017/07/24/how-to-write-custom-fixer-for-php-cs-fixer-24Mon, 24 Jul 2017 00:00:00 +0000https://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 +0000https://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 +0000https://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 +0000https://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 +0000https://tomasvotruba.com/blog/2017/05/03/combine-power-of-php-code-sniffer-and-php-cs-fixer-in-3-linesWed, 03 May 2017 00:00:00 +0000https://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 +0000https://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 +0000https://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 +0000https://tomasvotruba.com/blog/2017/02/12/drop-all-service-tags-in-your-nette-and-symfony-applicationsSun, 12 Feb 2017 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2017/01/28/why-I-switched-scrutinizer-for-phpstan-and-you-should-tooSat, 28 Jan 2017 00:00:00 +0000https://tomasvotruba.com/blog/2017/01/15/7-rad-ktere-bych-si-dal-pred-odchodem-na-vysokou-skoluSun, 15 Jan 2017 00:00:00 +0000https://tomasvotruba.com/blog/2017/01/10/jak-psat-zajimave-inzeraty-pro-ajtakyTue, 10 Jan 2017 00:00:00 +0000https://tomasvotruba.com/blog/2016/12/24/how-to-avoid-inject-thanks-to-decorator-feature-in-netteSat, 24 Dec 2016 00:00:00 +0000https://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 +0000https://tomasvotruba.com/blog/2016/09/09/how-to-write-open-source-in-php-1-create-a-repositoryFri, 09 Sep 2016 00:00:00 +0000