{"tag":"framework","articles":{"blog\/technology\/how-and-why-i-ve-built-and-killed-a-php-framework":{"key":"blog\/technology\/how-and-why-i-ve-built-and-killed-a-php-framework","type":"article","published":true,"meta":{"createdAt":"2018-09-22T14:26:34+02:00","publishedAt":"2018-09-22T14:24:00+02:00","group":null,"category":"blog","subcategory":"technology","slug":"how-and-why-i-ve-built-and-killed-a-php-framework"},"content":{"en":{"slug":"how-and-why-i-ve-built-and-killed-a-php-framework","title":"How and why I\u0027ve built and killed a PHP framework","intro":"\u003Cfigure\u003E\n                \u003Cnoscript\u003E\n                    \u003Cimg src=\u0022https:\/\/avris.it\/image\/micrus-rip_small.png\u0022 alt=\u0022\u0022 class=\u0022border-bottom\u0022 width=\u0022480\u0022 height=\u0022235.46694648478\u0022\u003E                \n                \u003C\/noscript\u003E\n                \u003Cspan class=\u0022hide-noscript\u0022\u003E\u003Cimg src=\u0022data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAARCAYAAAC1tw6GAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEeElEQVRIiZ2WvW8UVxDAf\/P27d7tnT\/uDP4I4AQsDMSJkLBS0EWKRJEqFTQpQhPlP6ADKRUl\/4ClpIuUzojIKYmUpLBpEqBIMAihGNsnWyf77Fvf7r43KfZ8xjbYSkZavX1fM7+ZN292xTmnvEOSJCFNU0AQAREAwXuPtZY0TYnjmHK5\/Nb93jlar5aJqzHtPCGqDSEixHH8LpPIzNxTVRGk6HaNAm+M9Qa16KKHfdg3pMXS\/fP6xpz2+qoKqoVqAbuxleJ7EF2oLlDRyO4IRgSvigh4LSi0Byh7EF0Dh4APQqhSvBZ9I2Brsd0D2vVgL0w9xZfG63x8ts5qMyEuW35+9ArV7nzXkIgQlwLCwOC8YkzhSruT00lzvO86ql3du051wYyAHeu37HhIHVRCqFjIFUIDzUQphwHlyPDRmX58lvPBcJXmZpvps3UazW1UYXPHs9LKUZTQCrE1hBbiUHj57Cluu8FgxbK4uMjSapNzU1c5e\/EKcWTInMdAEXkUufX9I7XWIAjbqSPJHCKCESF1ijWGi8MWgzJeC3mvPyDpOKRUxncSfnmZ8dd6hndKaA3lKOgdWXX9D778bIqFhQVGR0eZmpqiWq3y4MEDXjR2WK99QlQqMTFYRC00ILe+m1cFktzjFTwgKhgjtDs57dTTzhznx\/qpV0IAIhuw3GyTpI6OUzLnEDFE1hAaQ5I5tteX+fpqH8l2C2MM4+PjjI6OIiLkec7c3Bw\/PnFEwxfwqnivvH6+iL3Qn\/L3WoYl4MMzg9Rjw\/O1jBdrCZ3MYVQJcDxbaqKq2CCgFAaUQkOae5bXWySdlCAwlKOQWl+ZkVqVK+f7mbo0ydraGiMjI7TbbZxzdDodKpUKfX19fHrBs9DYYfWfFRqrK2xvb2F\/erQMUiRlq7nJxJk67586wdhQhdwrae7ZyTxOwfvd2yNkztHJHOdHqxgprrL3RZIbhFO1iEajwZ07d5ienmZkZISJiQlu377NvXv3CMOQwVLKgM0x9TL1eAQ4if3h2y96tUFEUO226F4d+h\/y5PGfjI2Nce3aNdI0pV6vc\/nyZa5fv87k5CSNRoNzYwN889XniHTLhir2KKXGGJ4vLlKv1wms5eSJE3vAb1z1g6KqJEkCwI0bN\/atv3nzJqqKcw7n\/aG9RwIBnD59mizL8N7vr67A5uYmeZ5TLpepVCq9Pd57BgYGjtTrvT9czgFzHJAxgogQBAHNZpM0zXpRybKM3HnEloqKfuA5SqIo4m1ExwJpN5nzPMcYQ6u1WXgH2LgfjfrYTt1xat4q\/i1HdixQlmUkSZs0TXv5k2UZAJIn6M4G2VaT10tL3T8Dup+Cd\/5EFHtFaCcJzuX\/DSiKIuI4Jq5UEBGGhoYolUpdwxAYQxAE2NDSarVIkoT5+Xnm5uZYXl5mY2ODlZUVtra2AJidne2te\/L4Mffvz+6zd2xS7344vXP0HUjUIAiw1uK9JwgiEo0YKpcxxnD37l1mZmYYHh7uRW5gYICHDx9Sq9XI8yIyv\/72+z6d\/wKYTk2khRKRbgAAAABJRU5ErkJggg==\u0022 data-src=\u0022https:\/\/avris.it\/image\/micrus-rip_small.png\u0022 alt=\u0022\u0022 class=\u0022border-bottom\u0022 width=\u0022480\u0022 height=\u0022235.46694648478\u0022\u003E\u003C\/span\u003E\n                \n            \u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EThe PHP ecosystem is full of frameworks: \u003Ca href=\u0022https:\/\/symfony.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Symfony\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/laravel.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Laravel\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/www.yiiframework.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Yii\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/framework.zend.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Zend\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/phalconphp.com\/en\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Phalcon\u003C\/a\u003E, and so many, many, many more... All of them built by professionals and supported by big communities. So why on earth would a junior developer, who has just started his first job, try his hand in building yet another one?\u003C\/p\u003E\n\u003Cp\u003EWell, here\u2019s why:\u003C\/p\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","content":"\u003Cfigure\u003E\n                \u003Cnoscript\u003E\n                    \u003Cimg src=\u0022https:\/\/avris.it\/image\/micrus-rip_big.png\u0022 alt=\u0022\u0022 class=\u0022border\u0022 width=\u0022960\u0022 height=\u0022470.93389296957\u0022\u003E                \n                \u003C\/noscript\u003E\n                \u003Cspan class=\u0022hide-noscript\u0022\u003E\u003Cimg src=\u0022data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAARCAYAAAC1tw6GAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEeElEQVRIiZ2WvW8UVxDAf\/P27d7tnT\/uDP4I4AQsDMSJkLBS0EWKRJEqFTQpQhPlP6ADKRUl\/4ClpIuUzojIKYmUpLBpEqBIMAihGNsnWyf77Fvf7r43KfZ8xjbYSkZavX1fM7+ZN292xTmnvEOSJCFNU0AQAREAwXuPtZY0TYnjmHK5\/Nb93jlar5aJqzHtPCGqDSEixHH8LpPIzNxTVRGk6HaNAm+M9Qa16KKHfdg3pMXS\/fP6xpz2+qoKqoVqAbuxleJ7EF2oLlDRyO4IRgSvigh4LSi0Byh7EF0Dh4APQqhSvBZ9I2Brsd0D2vVgL0w9xZfG63x8ts5qMyEuW35+9ArV7nzXkIgQlwLCwOC8YkzhSruT00lzvO86ql3du051wYyAHeu37HhIHVRCqFjIFUIDzUQphwHlyPDRmX58lvPBcJXmZpvps3UazW1UYXPHs9LKUZTQCrE1hBbiUHj57Cluu8FgxbK4uMjSapNzU1c5e\/EKcWTInMdAEXkUufX9I7XWIAjbqSPJHCKCESF1ijWGi8MWgzJeC3mvPyDpOKRUxncSfnmZ8dd6hndKaA3lKOgdWXX9D778bIqFhQVGR0eZmpqiWq3y4MEDXjR2WK99QlQqMTFYRC00ILe+m1cFktzjFTwgKhgjtDs57dTTzhznx\/qpV0IAIhuw3GyTpI6OUzLnEDFE1hAaQ5I5tteX+fpqH8l2C2MM4+PjjI6OIiLkec7c3Bw\/PnFEwxfwqnivvH6+iL3Qn\/L3WoYl4MMzg9Rjw\/O1jBdrCZ3MYVQJcDxbaqKq2CCgFAaUQkOae5bXWySdlCAwlKOQWl+ZkVqVK+f7mbo0ydraGiMjI7TbbZxzdDodKpUKfX19fHrBs9DYYfWfFRqrK2xvb2F\/erQMUiRlq7nJxJk67586wdhQhdwrae7ZyTxOwfvd2yNkztHJHOdHqxgprrL3RZIbhFO1iEajwZ07d5ienmZkZISJiQlu377NvXv3CMOQwVLKgM0x9TL1eAQ4if3h2y96tUFEUO226F4d+h\/y5PGfjI2Nce3aNdI0pV6vc\/nyZa5fv87k5CSNRoNzYwN889XniHTLhir2KKXGGJ4vLlKv1wms5eSJE3vAb1z1g6KqJEkCwI0bN\/atv3nzJqqKcw7n\/aG9RwIBnD59mizL8N7vr67A5uYmeZ5TLpepVCq9Pd57BgYGjtTrvT9czgFzHJAxgogQBAHNZpM0zXpRybKM3HnEloqKfuA5SqIo4m1ExwJpN5nzPMcYQ6u1WXgH2LgfjfrYTt1xat4q\/i1HdixQlmUkSZs0TXv5k2UZAJIn6M4G2VaT10tL3T8Dup+Cd\/5EFHtFaCcJzuX\/DSiKIuI4Jq5UEBGGhoYolUpdwxAYQxAE2NDSarVIkoT5+Xnm5uZYXl5mY2ODlZUVtra2AJidne2te\/L4Mffvz+6zd2xS7344vXP0HUjUIAiw1uK9JwgiEo0YKpcxxnD37l1mZmYYHh7uRW5gYICHDx9Sq9XI8yIyv\/72+z6d\/wKYTk2khRKRbgAAAABJRU5ErkJggg==\u0022 data-src=\u0022https:\/\/avris.it\/image\/micrus-rip_big.png\u0022 alt=\u0022\u0022 class=\u0022border\u0022 width=\u0022960\u0022 height=\u0022470.93389296957\u0022\u003E\u003C\/span\u003E\n                \n            \u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EThe PHP ecosystem is full of frameworks: \u003Ca href=\u0022https:\/\/symfony.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Symfony\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/laravel.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Laravel\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/www.yiiframework.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Yii\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/framework.zend.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Zend\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/phalconphp.com\/en\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Phalcon\u003C\/a\u003E, and so many, many, many more... All of them built by professionals and supported by big communities. So why on earth would a junior developer, who has just started his first job, try his hand in building yet another one?\u003C\/p\u003E\n\u003Cp\u003EWell, here\u2019s why:\u003C\/p\u003E\n\u003Cp\u003EWhen I learned PHP, the URLs I knew how to build and use looked like this: \u003Ccode\u003E\/index.php?module=user\u0026amp;action=show\u0026amp;id=123\u003C\/code\u003E. I had no idea, how to make them nice like this: \u003Ccode\u003E\/user\/show\/123\u003C\/code\u003E. Symfony knew though, and I could just use it.\u003C\/p\u003E\n\u003Cp\u003EBut I was used to coding things from scratch and understanding how they work internally, I didn\u2019t like the magic of \u201cit just works\u201d. I know, stupid, if I were still doing that, I\u2019d never finish any project. At the time it did make sense, though.\u003C\/p\u003E\n\u003Cp\u003EI was curious if I can replicate the behaviour. I stole the \u003Ccode\u003E.htaccess\u003C\/code\u003E config from Symfony, I\u2019ve expanded my knowledge about regular expressions, and eventually, I did it! It was buggy and ugly, but it worked and it was mine, and I was so proud of it!\u003C\/p\u003E\n\u003Cp\u003EAnd then I couldn\u2019t stop. Every time I had had to dig into Symfony\u2019s code and had gotten overwhelmed by its complexity, I realised how simple the overall logic actually is, even though it\u2019s overblown by trying to keep it generic and open for modification\/extension. So just like I did with the router, I also rewrote from scratch the event dispatcher, the security layer, the DI container and a couple of other components, eventually ending up with a fully usable framework.\u003C\/p\u003E\n\u003Cp\u003EI don\u2019t think I have access to its source code anymore, but I think it was only 10 files or so. It was crappy, didn\u2019t comply with PSR-4, wasn\u2019t published as a Composer package, and probably was full of bugs that I\u2019ve never found.\u003C\/p\u003E\n\u003Cp\u003EIt didn\u2019t really make much sense to further develop it. Nobody\u2019s gonna use it anyway. It\u2019s not gonna be better than any of the frameworks that have plenty of people working on them. I\u2019ve already learned a lot, isn\u2019t it enough to call it a day?\u003C\/p\u003E\n\u003Cp\u003EBut I took some criticism for the version 0.0 from people who knew better how to code, so I had to address their advice and to make Micrus better. And it turned out to be a great decision because I still had \u003Cem\u003Ea lot\u003C\/em\u003E more to learn.\u003C\/p\u003E\n\u003Cp\u003EThe biggest challenge was managing dependencies. I couldn\u2019t put all the modules like \u201cMailer\u201d, \u201cTwig\u201d, \u201cSocial login\u201d, \u201cCRUD\u201d etc. in one huge package and still call it \u201cMicrus\u201d. But I was developing all of them at once! I had to learn more about the internals of Composer in order to treat local directories as if they were packages, without pushing or tagging them (only later I found out about \u003Ca href=\u0022https:\/\/getcomposer.org\/doc\/05-repositories.md#path\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Repository of type \u201cpath\u201d\u003C\/a\u003E \u2013 really useful!). I had to learn how to organise the code better so that adding or removing entire modules could be as seamless as possible. I had to keep them consistent, simple, powerful, extendable. I spent hours and hours, and days and days, on figuring out their architecture...\u003C\/p\u003E\n\u003Cp\u003EThe second biggest challenge was the forms. They\u2019re just awful. The form abstraction layer has to move data around between the actual object that holds data, a form and it\u2019s HTML representation. It needs to map the data both ways, it needs to validate it, it\u2019s just a mess. At work at \u003Ca href=\u0022https:\/\/www.rocket-internet.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Rocket Internet\u003C\/a\u003E, even though we were using a Phalcon-based framework, many ventures decided to use the standalone \u003Ca href=\u0022https:\/\/symfony.com\/doc\/current\/components\/form.html\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Symfony Form\u003C\/a\u003E component instead of Phalcon forms, because that was the least troublesome one.\u003C\/p\u003E\n\u003Cp\u003EStill, they weren\u2019t simple enough for me. Sure, they\u2019re way, way better than handling the forms without any framework, but whenever I needed to do anything even slightly non-standard, I really missed the option of just writing down some HTML. Instead, I had to learn about the internals of the framework. I didn\u2019t like it, so, I\u2019ve spent ages trying to prove to myself, that one can make the best of two worlds.\u003C\/p\u003E\n\u003Cp\u003EThe same with the security layer. I really hate how Symfony implements it. It\u2019s a piece of cake to configure the most simple cases, they hide everything behind a veil of magic. But as soon as you need something non-standard, you need to go through their documentation, get into their way of thinking, understand their ideas... You can\u2019t just write down the simple logic you need, you need wrappers, voters, providers, listeners, etc. etc. I decided to try to implement it my way.\u003C\/p\u003E\n\u003Cp\u003EAnd it worked for me. I\u2019ve released \u003Ca href=\u0022\/projects\/micrus-tiny-yet-powerful-php-framework\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-cogs\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Micrus \u2022 Tiny, yet powerful, PHP framework\u003C\/a\u003E that later become  \u003Ca href=\u0022\/projects\/micrus-v4\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-cogs\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Micrus v4 \u2022 Beauty of simplicity\u003C\/a\u003E. I\u2019ve built a couple of projects based on Micrus (listed at \u003Ca href=\u0022https:\/\/micrus.avris.it\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E micrus.avris.it\u003C\/a\u003E). I had fun, seeing how easy it was for me to build apps with Micrus.\u003C\/p\u003E\n\u003Cp\u003EWhenever I would encounter something worth improving, I did so. How exhausting was that! On one hand disappointing (I wasn\u2019t expecting anyone else to use it), on the other really rewarding (it is an accomplishment after all). When I discovered \u003Ca href=\u0022\/blog\/the-non-magic-of-autowiring\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-computer-speaker\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E The non-magic of autowiring\u003C\/a\u003E, I implemented that as well. I covered 100% of my code with unit tests (which was quite a challenging type of code to cover).\u003C\/p\u003E\n\u003Cp\u003EBut then, Symfony has released its version four. And it\u2019s amazing. It has \u003Ca href=\u0022https:\/\/symfony.com\/doc\/current\/setup\/flex.html\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Flex\u003C\/a\u003E, it\u2019s flexible, it\u2019s fast... Maybe it\u2019s not as simple as I would wish it to be, but it\u2019s undeniably way better than anything I could ever create myself. Also, I simply got tired of building Micrus already. It grew bigger than I thought it would, it started resembling Symfony more and more, while I understood more and more of Symfony\u2019s design... \u003C\/p\u003E\n\u003Cp\u003ESo there I am: having learned an awful lot about standards, modularisation, architecture, framework internals, autoloading, autowiring, testing, managing dependencies, and much much more. Having created something irrelevant, but quite impressive nevertheless.\u003C\/p\u003E\n\u003Cp\u003EI\u2019m still gonna keep putting Micrus in my CV, I\u2019m still gonna keep most of my Micrus-based-projects running it, but I\u2019m not gonna improve it anymore or start any new projects on it.\u003C\/p\u003E\n\u003Cp\u003EIt\u2019s been a wonderful adventure. Now it\u2019s time to move on \ud83d\ude0a\u003C\/p\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","tags":["framework","micrus","php","programming"],"hasMore":true,"image":"https:\/\/avris.it\/image\/micrus-rip_small.png","introLite":"\u003Cfigure\u003E\u003Ca href=\u0022https:\/\/avris.it\/image\/micrus-rip_big.png\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Cimg src=\u0022https:\/\/avris.it\/image\/micrus-rip_mini.png\u0022 alt=\u0022\u0022 width=\u0022240\u0022 height=\u0022117.73347324239\u0022 loading=\u0022lazy\u0022\u003E\u003C\/a\u003E\u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EThe PHP ecosystem is full of frameworks: \u003Ca href=\u0022https:\/\/symfony.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Symfony\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/laravel.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Laravel\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/www.yiiframework.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Yii\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/framework.zend.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Zend\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/phalconphp.com\/en\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Phalcon\u003C\/a\u003E, and so many, many, many more... All of them built by professionals and supported by big communities. So why on earth would a junior developer, who has just started his first job, try his hand in building yet another one?\u003C\/p\u003E\n\u003Cp\u003EWell, here\u2019s why:\u003C\/p\u003E","contentLite":"\u003Cfigure\u003E\u003Ca href=\u0022https:\/\/avris.it\/image\/micrus-rip_big.png\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Cimg src=\u0022https:\/\/avris.it\/image\/micrus-rip_mini.png\u0022 alt=\u0022\u0022 width=\u0022240\u0022 height=\u0022117.73347324239\u0022 loading=\u0022lazy\u0022\u003E\u003C\/a\u003E\u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EThe PHP ecosystem is full of frameworks: \u003Ca href=\u0022https:\/\/symfony.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Symfony\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/laravel.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Laravel\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/www.yiiframework.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Yii\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/framework.zend.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Zend\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/phalconphp.com\/en\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Phalcon\u003C\/a\u003E, and so many, many, many more... All of them built by professionals and supported by big communities. So why on earth would a junior developer, who has just started his first job, try his hand in building yet another one?\u003C\/p\u003E\n\u003Cp\u003EWell, here\u2019s why:\u003C\/p\u003E\n\u003Cp\u003EWhen I learned PHP, the URLs I knew how to build and use looked like this: \u003Ccode\u003E\/index.php?module=user\u0026amp;action=show\u0026amp;id=123\u003C\/code\u003E. I had no idea, how to make them nice like this: \u003Ccode\u003E\/user\/show\/123\u003C\/code\u003E. Symfony knew though, and I could just use it.\u003C\/p\u003E\n\u003Cp\u003EBut I was used to coding things from scratch and understanding how they work internally, I didn\u2019t like the magic of \u201cit just works\u201d. I know, stupid, if I were still doing that, I\u2019d never finish any project. At the time it did make sense, though.\u003C\/p\u003E\n\u003Cp\u003EI was curious if I can replicate the behaviour. I stole the \u003Ccode\u003E.htaccess\u003C\/code\u003E config from Symfony, I\u2019ve expanded my knowledge about regular expressions, and eventually, I did it! It was buggy and ugly, but it worked and it was mine, and I was so proud of it!\u003C\/p\u003E\n\u003Cp\u003EAnd then I couldn\u2019t stop. Every time I had had to dig into Symfony\u2019s code and had gotten overwhelmed by its complexity, I realised how simple the overall logic actually is, even though it\u2019s overblown by trying to keep it generic and open for modification\/extension. So just like I did with the router, I also rewrote from scratch the event dispatcher, the security layer, the DI container and a couple of other components, eventually ending up with a fully usable framework.\u003C\/p\u003E\n\u003Cp\u003EI don\u2019t think I have access to its source code anymore, but I think it was only 10 files or so. It was crappy, didn\u2019t comply with PSR-4, wasn\u2019t published as a Composer package, and probably was full of bugs that I\u2019ve never found.\u003C\/p\u003E\n\u003Cp\u003EIt didn\u2019t really make much sense to further develop it. Nobody\u2019s gonna use it anyway. It\u2019s not gonna be better than any of the frameworks that have plenty of people working on them. I\u2019ve already learned a lot, isn\u2019t it enough to call it a day?\u003C\/p\u003E\n\u003Cp\u003EBut I took some criticism for the version 0.0 from people who knew better how to code, so I had to address their advice and to make Micrus better. And it turned out to be a great decision because I still had \u003Cem\u003Ea lot\u003C\/em\u003E more to learn.\u003C\/p\u003E\n\u003Cp\u003EThe biggest challenge was managing dependencies. I couldn\u2019t put all the modules like \u201cMailer\u201d, \u201cTwig\u201d, \u201cSocial login\u201d, \u201cCRUD\u201d etc. in one huge package and still call it \u201cMicrus\u201d. But I was developing all of them at once! I had to learn more about the internals of Composer in order to treat local directories as if they were packages, without pushing or tagging them (only later I found out about \u003Ca href=\u0022https:\/\/getcomposer.org\/doc\/05-repositories.md#path\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Repository of type \u201cpath\u201d\u003C\/a\u003E \u2013 really useful!). I had to learn how to organise the code better so that adding or removing entire modules could be as seamless as possible. I had to keep them consistent, simple, powerful, extendable. I spent hours and hours, and days and days, on figuring out their architecture...\u003C\/p\u003E\n\u003Cp\u003EThe second biggest challenge was the forms. They\u2019re just awful. The form abstraction layer has to move data around between the actual object that holds data, a form and it\u2019s HTML representation. It needs to map the data both ways, it needs to validate it, it\u2019s just a mess. At work at \u003Ca href=\u0022https:\/\/www.rocket-internet.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Rocket Internet\u003C\/a\u003E, even though we were using a Phalcon-based framework, many ventures decided to use the standalone \u003Ca href=\u0022https:\/\/symfony.com\/doc\/current\/components\/form.html\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Symfony Form\u003C\/a\u003E component instead of Phalcon forms, because that was the least troublesome one.\u003C\/p\u003E\n\u003Cp\u003EStill, they weren\u2019t simple enough for me. Sure, they\u2019re way, way better than handling the forms without any framework, but whenever I needed to do anything even slightly non-standard, I really missed the option of just writing down some HTML. Instead, I had to learn about the internals of the framework. I didn\u2019t like it, so, I\u2019ve spent ages trying to prove to myself, that one can make the best of two worlds.\u003C\/p\u003E\n\u003Cp\u003EThe same with the security layer. I really hate how Symfony implements it. It\u2019s a piece of cake to configure the most simple cases, they hide everything behind a veil of magic. But as soon as you need something non-standard, you need to go through their documentation, get into their way of thinking, understand their ideas... You can\u2019t just write down the simple logic you need, you need wrappers, voters, providers, listeners, etc. etc. I decided to try to implement it my way.\u003C\/p\u003E\n\u003Cp\u003EAnd it worked for me. I\u2019ve released \u003Ca href=\u0022\/projects\/micrus-tiny-yet-powerful-php-framework.lite\u0022\u003E Micrus \u2022 Tiny, yet powerful, PHP framework\u003C\/a\u003E that later become  \u003Ca href=\u0022\/projects\/micrus-v4.lite\u0022\u003E Micrus v4 \u2022 Beauty of simplicity\u003C\/a\u003E. I\u2019ve built a couple of projects based on Micrus (listed at \u003Ca href=\u0022https:\/\/micrus.avris.it\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E micrus.avris.it\u003C\/a\u003E). I had fun, seeing how easy it was for me to build apps with Micrus.\u003C\/p\u003E\n\u003Cp\u003EWhenever I would encounter something worth improving, I did so. How exhausting was that! On one hand disappointing (I wasn\u2019t expecting anyone else to use it), on the other really rewarding (it is an accomplishment after all). When I discovered \u003Ca href=\u0022\/blog\/the-non-magic-of-autowiring.lite\u0022\u003E The non-magic of autowiring\u003C\/a\u003E, I implemented that as well. I covered 100% of my code with unit tests (which was quite a challenging type of code to cover).\u003C\/p\u003E\n\u003Cp\u003EBut then, Symfony has released its version four. And it\u2019s amazing. It has \u003Ca href=\u0022https:\/\/symfony.com\/doc\/current\/setup\/flex.html\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Flex\u003C\/a\u003E, it\u2019s flexible, it\u2019s fast... Maybe it\u2019s not as simple as I would wish it to be, but it\u2019s undeniably way better than anything I could ever create myself. Also, I simply got tired of building Micrus already. It grew bigger than I thought it would, it started resembling Symfony more and more, while I understood more and more of Symfony\u2019s design... \u003C\/p\u003E\n\u003Cp\u003ESo there I am: having learned an awful lot about standards, modularisation, architecture, framework internals, autoloading, autowiring, testing, managing dependencies, and much much more. Having created something irrelevant, but quite impressive nevertheless.\u003C\/p\u003E\n\u003Cp\u003EI\u2019m still gonna keep putting Micrus in my CV, I\u2019m still gonna keep most of my Micrus-based-projects running it, but I\u2019m not gonna improve it anymore or start any new projects on it.\u003C\/p\u003E\n\u003Cp\u003EIt\u2019s been a wonderful adventure. Now it\u2019s time to move on \ud83d\ude0a\u003C\/p\u003E","words":1080,"readTime":5,"lang":"en"}}},"projects\/micrus-v4":{"key":"projects\/micrus-v4","type":"article","published":true,"meta":{"createdAt":"2018-01-28T12:45:41+01:00","publishedAt":"2018-01-28T12:40:00+01:00","group":"micrus","links":[{"icon":"globe-europe","colour":"primary","url":"https:\/\/micrus.avris.it","displayUrl":null},{"icon":"brands gitlab","colour":"secondary","url":"https:\/\/gitlab.com\/Avris\/Micrus","displayUrl":null}],"category":"projects","subcategory":null,"slug":"micrus-v4"},"content":{"en":{"slug":"micrus-v4","title":"Micrus v4 \u2022 Beauty of simplicity","intro":"\u003Cfigure\u003E\n                \u003Cnoscript\u003E\n                    \u003Cimg src=\u0022https:\/\/avris.it\/image\/micrus-demo_small.png\u0022 alt=\u0022\u0022 class=\u0022border-bottom\u0022 width=\u0022480\u0022 height=\u0022279.53757225434\u0022\u003E                \n                \u003C\/noscript\u003E\n                \u003Cspan class=\u0022hide-noscript\u0022\u003E\u003Cimg src=\u0022data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAUCAYAAADlep81AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEgklEQVRIicWWy44bRRSGv1NdfbE9Y0+scTJBIQosgGwQICEWvAAb3oGX4hV4CRYsWCAuEkgIERCCEEKSGWcSz3hst12Xw6K6fZkJGyTgqOVqd50+9Z\/z\/12nRJMBoKocHx9js4yyqphOz+l293BuRZZllGXJ+fkZZdkhhgAC+\/0+ZVGwbSKCqq5HgOn9x2CUjsk5mzyEm7fpdDo45zg4OFj7ydc\/nTR365\/d4AiKrmc2znrFtzVtp7bChRAQbSKIIMZceikN9tNvHzVZtRGkvV4IcAeG6g423XFSaJJ50Zyy\/Z4imkZrshZMm5SuqyVyeaUX1UV3cekmEb2CtPVpqJRNXkgarTXbgJoZEaTxfve1Ef1uzlc\/j\/ngnVt8\/sMTnjxfbBaj1ckmKxE47HfwMRKjEiMU1hBUmdeeehV2C9mMqmC7uUkwRLbKmji7ddjj\/bvXAXjtpT5lnvHhe7f55LNfWPmwlfbm3cIaepUlaMQKRAMYwaAYIwy6lk4uzGq\/RaYkyhTszf0ilasJGJvggvDmnSHf3Dum3yt45eaAr348ZtArePuVIb8+Pmv8dxWcW6HKM0JstCFCjBEQoiohRHLJsC2l2nLWAHLBUUdDP1dqDw\/PA93c8PqhZfL0Kb52nM5gfjbB157xDLpVzlEvBfAq3Bs7vn9c40NEEbql4VrHMqgyEBhUBh8Ua2C+ijyfJ9qu7+csHIwvPMNuxqtDi3z08RdqAMQkLWkqcSZw93rJG7eukZtIgWe\/EDCG356teKlyfPfI8eWfnplLWhGgU2YMewXj6RIUjEDtGnpjREXxARZL3yqW3BgQMIDNTSvEVF4UFivP09pztnB8+fuMw\/2CvdJiM4OqMl04AKbLgI9KbpQoSbz1MvKwdolKTV9giMrKe0IjchCMQGYSzT5GUJLu3nq5h\/Pw5HzJn88WTOYOVYiAc46lD5yeC3lmyDJDlVvKPCMzwnLlGE8umNcritxSFJZeVXLQK7GZTV+ZQoxKCIaoEGLER8UAEUWi4pvqirHYUancO3c4Hxn2CoZ7JSjUPuBaZ92IPjOCaspouXL0OgXdKifGiI9wUS+Zzmuu7XW4PdonzwwhJBAtIEEQ02zDknqBUXDBI4t6+fc94H8wK+tdMfFts+w\/BaCqW1uHYtPAmpPT06c8ePCAo6MbIIaqLBmNRuvu3Qb5J\/fbz9ZgoqaTA01rXNSrLYVAWeT\/SiX+zmKMOB9ou6Hd9ONkIQTOziY450GVvCgYDodXAi0Wc+7f\/x3JLEVnnzu3jjCXDgchBMbjE55Pa4y1HFwbcuOgt3NO2vTA9N+mRtrSlh4aY9a9zTnHyckJVVUxGAzWi4kYBoMBe3t7O89baxfM84JBT4nVAf1etaZsG9Q2jetT0lZrJUZFYyTGyGqZTosXFxdMJpPNipIxz\/qcectv4xlLH7ey3nKr9lnmA0SETm6uzF9K46qoE7i0e9osw+YZIQSMMcxms3U1DJFunJI5IUZlcnpBCJHR6JA83+jQhprKXWCC4Y9TJSjcGfVecPRLBP0FlaGMv+a4vYsAAAAASUVORK5CYII=\u0022 data-src=\u0022https:\/\/avris.it\/image\/micrus-demo_small.png\u0022 alt=\u0022\u0022 class=\u0022border-bottom\u0022 width=\u0022480\u0022 height=\u0022279.53757225434\u0022\u003E\u003C\/span\u003E\n                \n            \u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EA framework doesn\u2019t have to be overly complex! Micrus provides you with a quick, easy and comfortable way of creating neatly structured, modular MVC websites, which can be easily extended and configured.\u003C\/p\u003E\n\u003Cp\u003EOur goal is to keep the framework as simple as possible, while offering all the most important features.\u003C\/p\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","content":"\u003Cfigure\u003E\n                \u003Cnoscript\u003E\n                    \u003Cimg src=\u0022https:\/\/avris.it\/image\/micrus-demo_big.png\u0022 alt=\u0022\u0022 class=\u0022border\u0022 width=\u0022960\u0022 height=\u0022559.07514450867\u0022\u003E                \n                \u003C\/noscript\u003E\n                \u003Cspan class=\u0022hide-noscript\u0022\u003E\u003Cimg src=\u0022data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAUCAYAAADlep81AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEgklEQVRIicWWy44bRRSGv1NdfbE9Y0+scTJBIQosgGwQICEWvAAb3oGX4hV4CRYsWCAuEkgIERCCEEKSGWcSz3hst12Xw6K6fZkJGyTgqOVqd50+9Z\/z\/12nRJMBoKocHx9js4yyqphOz+l293BuRZZllGXJ+fkZZdkhhgAC+\/0+ZVGwbSKCqq5HgOn9x2CUjsk5mzyEm7fpdDo45zg4OFj7ydc\/nTR365\/d4AiKrmc2znrFtzVtp7bChRAQbSKIIMZceikN9tNvHzVZtRGkvV4IcAeG6g423XFSaJJ50Zyy\/Z4imkZrshZMm5SuqyVyeaUX1UV3cekmEb2CtPVpqJRNXkgarTXbgJoZEaTxfve1Ef1uzlc\/j\/ngnVt8\/sMTnjxfbBaj1ckmKxE47HfwMRKjEiMU1hBUmdeeehV2C9mMqmC7uUkwRLbKmji7ddjj\/bvXAXjtpT5lnvHhe7f55LNfWPmwlfbm3cIaepUlaMQKRAMYwaAYIwy6lk4uzGq\/RaYkyhTszf0ilasJGJvggvDmnSHf3Dum3yt45eaAr348ZtArePuVIb8+Pmv8dxWcW6HKM0JstCFCjBEQoiohRHLJsC2l2nLWAHLBUUdDP1dqDw\/PA93c8PqhZfL0Kb52nM5gfjbB157xDLpVzlEvBfAq3Bs7vn9c40NEEbql4VrHMqgyEBhUBh8Ua2C+ijyfJ9qu7+csHIwvPMNuxqtDi3z08RdqAMQkLWkqcSZw93rJG7eukZtIgWe\/EDCG356teKlyfPfI8eWfnplLWhGgU2YMewXj6RIUjEDtGnpjREXxARZL3yqW3BgQMIDNTSvEVF4UFivP09pztnB8+fuMw\/2CvdJiM4OqMl04AKbLgI9KbpQoSbz1MvKwdolKTV9giMrKe0IjchCMQGYSzT5GUJLu3nq5h\/Pw5HzJn88WTOYOVYiAc46lD5yeC3lmyDJDlVvKPCMzwnLlGE8umNcritxSFJZeVXLQK7GZTV+ZQoxKCIaoEGLER8UAEUWi4pvqirHYUancO3c4Hxn2CoZ7JSjUPuBaZ92IPjOCaspouXL0OgXdKifGiI9wUS+Zzmuu7XW4PdonzwwhJBAtIEEQ02zDknqBUXDBI4t6+fc94H8wK+tdMfFts+w\/BaCqW1uHYtPAmpPT06c8ePCAo6MbIIaqLBmNRuvu3Qb5J\/fbz9ZgoqaTA01rXNSrLYVAWeT\/SiX+zmKMOB9ou6Hd9ONkIQTOziY450GVvCgYDodXAi0Wc+7f\/x3JLEVnnzu3jjCXDgchBMbjE55Pa4y1HFwbcuOgt3NO2vTA9N+mRtrSlh4aY9a9zTnHyckJVVUxGAzWi4kYBoMBe3t7O89baxfM84JBT4nVAf1etaZsG9Q2jetT0lZrJUZFYyTGyGqZTosXFxdMJpPNipIxz\/qcectv4xlLH7ey3nKr9lnmA0SETm6uzF9K46qoE7i0e9osw+YZIQSMMcxms3U1DJFunJI5IUZlcnpBCJHR6JA83+jQhprKXWCC4Y9TJSjcGfVecPRLBP0FlaGMv+a4vYsAAAAASUVORK5CYII=\u0022 data-src=\u0022https:\/\/avris.it\/image\/micrus-demo_big.png\u0022 alt=\u0022\u0022 class=\u0022border\u0022 width=\u0022960\u0022 height=\u0022559.07514450867\u0022\u003E\u003C\/span\u003E\n                \n            \u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EA framework doesn\u2019t have to be overly complex! Micrus provides you with a quick, easy and comfortable way of creating neatly structured, modular MVC websites, which can be easily extended and configured.\u003C\/p\u003E\n\u003Cp\u003EOur goal is to keep the framework as simple as possible, while offering all the most important features.\u003C\/p\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","tags":["container","dependency injection","doctrine","event dispatcher","framework","full-stack","micrus","mvc","php","routing","twig"],"hasMore":false,"image":"https:\/\/avris.it\/image\/micrus-demo_small.png","introLite":"\u003Cfigure\u003E\u003Ca href=\u0022https:\/\/avris.it\/image\/micrus-demo_big.png\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Cimg src=\u0022https:\/\/avris.it\/image\/micrus-demo_mini.png\u0022 alt=\u0022\u0022 width=\u0022240\u0022 height=\u0022139.76878612717\u0022 loading=\u0022lazy\u0022\u003E\u003C\/a\u003E\u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EA framework doesn\u2019t have to be overly complex! Micrus provides you with a quick, easy and comfortable way of creating neatly structured, modular MVC websites, which can be easily extended and configured.\u003C\/p\u003E\n\u003Cp\u003EOur goal is to keep the framework as simple as possible, while offering all the most important features.\u003C\/p\u003E","contentLite":"\u003Cfigure\u003E\u003Ca href=\u0022https:\/\/avris.it\/image\/micrus-demo_big.png\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Cimg src=\u0022https:\/\/avris.it\/image\/micrus-demo_mini.png\u0022 alt=\u0022\u0022 width=\u0022240\u0022 height=\u0022139.76878612717\u0022 loading=\u0022lazy\u0022\u003E\u003C\/a\u003E\u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EA framework doesn\u2019t have to be overly complex! Micrus provides you with a quick, easy and comfortable way of creating neatly structured, modular MVC websites, which can be easily extended and configured.\u003C\/p\u003E\n\u003Cp\u003EOur goal is to keep the framework as simple as possible, while offering all the most important features.\u003C\/p\u003E","words":51,"readTime":null,"lang":"en"}}},"blog\/technology\/brand-new-blog":{"key":"blog\/technology\/brand-new-blog","type":"article","published":true,"meta":{"createdAt":"2017-04-30T21:22:09+02:00","publishedAt":"2017-04-30T21:05:00+02:00","group":"redesign","category":"blog","subcategory":"technology","slug":"brand-new-blog"},"content":{"en":{"slug":"brand-new-blog","title":"Brand new blog","intro":"\u003Cfigure\u003E\n                \u003Cnoscript\u003E\n                    \u003Cimg src=\u0022https:\/\/avris.it\/image\/new-avris_small.png\u0022 alt=\u0022\u0022 class=\u0022border-bottom\u0022 width=\u0022480\u0022 height=\u0022250.4347826087\u0022\u003E                \n                \u003C\/noscript\u003E\n                \u003Cspan class=\u0022hide-noscript\u0022\u003E\u003Cimg src=\u0022data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAYAAAAzI3woAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFD0lEQVRIia2Wz4tdWRHHP1Xn3Pt+dNuvO+m0GY2jOATHzDBmoy5E3Sgogrh14d6\/wIUr3fgfjBtBXLgRN6OIIDKIoMK4GCGgTMCJmR9J6CTTmZ5+\/d6995yqcnFfMll0Bgc8m1N1qjj1rTp1v3UlIoIz1u3btymlsFjssru7OMuFo3feISKYb22xXJ6ws7Pg\/v377O\/v8+DBA5qmQVXp+57JZEI66Zg\/tU8\/DMznc0SEiEBEAEb5Z7\/8VSAgqogqDogk3J1mOkUF0ASipJSJpIgIWRKBsLkLBUISouOBANRKRECAh1PKAEkJq4RV3AyvhbAAN1RApp96LnQ6JU1mpJRxnEDI0zm5acnTGeRMmswgNaTpjEYSOSlIptpAAhRBRGimc6pVdOgRB\/ERTB06hnDCg269xLolpe\/x9Ql1tcLLwEQSudVEO5mRZ9tIkxmGNeHBpG1xTeCG9IaKItMM3Sky3xkhWCEVw1QgTVE3ymqF1YqaM53vUK0Q3QohoUOHu6MB7qC1UiUhzYTkguPkWh1fvsd2bmjaltUwYC6gKyqJlBs8KU1AUwvNdI6dntBOJ1goeWvB1myHWn2s4HrN0o8xK1z5+AVidcxr12\/RVwerDH2PheOrY7wMYAbmuBsaTrYQwhPH7x4jqzWqiUgN666gjRJiaG759le\/RDuZ8cdXr\/GtL36Ol\/7yDybbC2S+YN1sEQyIKLu7mY\/plJyE1eoU6QuXLh4gAsuTJW++fQdD8DzFhop7hWqEGR6Q8s6FH3kYooJ5ECi+adRmOqfZ3uP5z1zm1z\/5AQh892tf5sXf\/ol3B6NPE8pg9N0pw9DRrU+o61PObc2IqLQ5oznhtdJKcOvOIe91A1EGrFSslBGQVbwWkkD2cNAGcxAFs0pKCXKLaSIi+PrnX+D1t+\/wr\/+8xYsvvcxyqGhqiG6NJSMINAIPo20yxbbAjW4oZAlKGejNKO50\/Rpxx6oRCBGCx1gIEKS5+NkgJyQl0AbJCZl9hDTbxsNA4MrlZ7h0YZ\/ejINze\/zmb69iCJoTmltAUDNwx7xyaW9BrRW8kiLACtTK4eFd+m5FVAeCqAPhPtJAKbSayBEOoeCBpA2X1Ep0HSEBqtw7vIfUyt3jJSdPnRLrDgS8aYhhQDSBCF7HJn3r9ilujoYRpRJWEDe8VsKciAJDIawiHkQ4EgJhSDp4NiQlIo3ZelJSnoxfl8jIcAJoi6SM5rw5UzSN\/aYBgcOGZ3AjfHzGsIJbRZ1Nr9gIxHrCIGwgzBCEVgX5819fCUR4RLmim10eUTpsgG2YOZCHLgRAvC\/LRg8CiRif5uFwCh89wkfnx3VARJC+7+Oh8nCuPL4\/vs6y\/b\/lfObUBG7evEnOmel0SkSwWCxo2\/aR\/caNG+zt7VFrRVU5f\/78k676UOuJgI4Ob3Jut+V0DZNJw9Jakiqq0M4OODg4IKWRFh5m+XhF\/xf5QwH6xc9\/zNVn3yU5\/O73d7m4P+M739hnZydx\/pnv8emr36dpGgBevnaXi3sdz31iB4BSCsAj+\/VbJxwe93zlyj4AtVbc\/cy4+iRAR1Wwy3v84e8d33z+C5R7c3740zd4bfccw+KFMXB1+mJsTzOTrPTFqPZ+oIigmpOTMMlKN9gHVucDK3S07Hnlnys+Wc9x\/c271GIcHxauvX7E6Rv\/5umPXsVC6Abj0gJg4N7RwKxN5E2aKSXWgzFX5+k9pesHlPFfS\/XsWvwX97wRJTQmN3gAAAAASUVORK5CYII=\u0022 data-src=\u0022https:\/\/avris.it\/image\/new-avris_small.png\u0022 alt=\u0022\u0022 class=\u0022border-bottom\u0022 width=\u0022480\u0022 height=\u0022250.4347826087\u0022\u003E\u003C\/span\u003E\n                \n            \u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EFinally. I got to work and rewrote the code of my sweet blog. Brand new design, new framework, \u003Ca href=\u0022\/projects\/micrus-tiny-yet-powerful-php-framework\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-cogs\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Micrus\u003C\/a\u003E, better support for language versions, a couple of new features in the admin panel, ditching custom comments for the awesomeness of \u003Ca href=\u0022https:\/\/disqus.com\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Disqus\u003C\/a\u003E, ditching TinyMCE for the beauty and simplicity of Markdown. It was a lot of work, but it was definitely worth it!\u003C\/p\u003E\n\u003Cp\u003EHope you like it! :)\u003C\/p\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","content":"\u003Cfigure\u003E\n                \u003Cnoscript\u003E\n                    \u003Cimg src=\u0022https:\/\/avris.it\/image\/new-avris_big.png\u0022 alt=\u0022\u0022 class=\u0022border\u0022 width=\u0022960\u0022 height=\u0022500.86956521739\u0022\u003E                \n                \u003C\/noscript\u003E\n                \u003Cspan class=\u0022hide-noscript\u0022\u003E\u003Cimg src=\u0022data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAYAAAAzI3woAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFD0lEQVRIia2Wz4tdWRHHP1Xn3Pt+dNuvO+m0GY2jOATHzDBmoy5E3Sgogrh14d6\/wIUr3fgfjBtBXLgRN6OIIDKIoMK4GCGgTMCJmR9J6CTTmZ5+\/d6995yqcnFfMll0Bgc8m1N1qjj1rTp1v3UlIoIz1u3btymlsFjssru7OMuFo3feISKYb22xXJ6ws7Pg\/v377O\/v8+DBA5qmQVXp+57JZEI66Zg\/tU8\/DMznc0SEiEBEAEb5Z7\/8VSAgqogqDogk3J1mOkUF0ASipJSJpIgIWRKBsLkLBUISouOBANRKRECAh1PKAEkJq4RV3AyvhbAAN1RApp96LnQ6JU1mpJRxnEDI0zm5acnTGeRMmswgNaTpjEYSOSlIptpAAhRBRGimc6pVdOgRB\/ERTB06hnDCg269xLolpe\/x9Ql1tcLLwEQSudVEO5mRZ9tIkxmGNeHBpG1xTeCG9IaKItMM3Sky3xkhWCEVw1QgTVE3ymqF1YqaM53vUK0Q3QohoUOHu6MB7qC1UiUhzYTkguPkWh1fvsd2bmjaltUwYC6gKyqJlBs8KU1AUwvNdI6dntBOJ1goeWvB1myHWn2s4HrN0o8xK1z5+AVidcxr12\/RVwerDH2PheOrY7wMYAbmuBsaTrYQwhPH7x4jqzWqiUgN666gjRJiaG759le\/RDuZ8cdXr\/GtL36Ol\/7yDybbC2S+YN1sEQyIKLu7mY\/plJyE1eoU6QuXLh4gAsuTJW++fQdD8DzFhop7hWqEGR6Q8s6FH3kYooJ5ECi+adRmOqfZ3uP5z1zm1z\/5AQh892tf5sXf\/ol3B6NPE8pg9N0pw9DRrU+o61PObc2IqLQ5oznhtdJKcOvOIe91A1EGrFSslBGQVbwWkkD2cNAGcxAFs0pKCXKLaSIi+PrnX+D1t+\/wr\/+8xYsvvcxyqGhqiG6NJSMINAIPo20yxbbAjW4oZAlKGejNKO50\/Rpxx6oRCBGCx1gIEKS5+NkgJyQl0AbJCZl9hDTbxsNA4MrlZ7h0YZ\/ejINze\/zmb69iCJoTmltAUDNwx7xyaW9BrRW8kiLACtTK4eFd+m5FVAeCqAPhPtJAKbSayBEOoeCBpA2X1Ep0HSEBqtw7vIfUyt3jJSdPnRLrDgS8aYhhQDSBCF7HJn3r9ilujoYRpRJWEDe8VsKciAJDIawiHkQ4EgJhSDp4NiQlIo3ZelJSnoxfl8jIcAJoi6SM5rw5UzSN\/aYBgcOGZ3AjfHzGsIJbRZ1Nr9gIxHrCIGwgzBCEVgX5819fCUR4RLmim10eUTpsgG2YOZCHLgRAvC\/LRg8CiRif5uFwCh89wkfnx3VARJC+7+Oh8nCuPL4\/vs6y\/b\/lfObUBG7evEnOmel0SkSwWCxo2\/aR\/caNG+zt7VFrRVU5f\/78k676UOuJgI4Ob3Jut+V0DZNJw9Jakiqq0M4OODg4IKWRFh5m+XhF\/xf5QwH6xc9\/zNVn3yU5\/O73d7m4P+M739hnZydx\/pnv8emr36dpGgBevnaXi3sdz31iB4BSCsAj+\/VbJxwe93zlyj4AtVbc\/cy4+iRAR1Wwy3v84e8d33z+C5R7c3740zd4bfccw+KFMXB1+mJsTzOTrPTFqPZ+oIigmpOTMMlKN9gHVucDK3S07Hnlnys+Wc9x\/c271GIcHxauvX7E6Rv\/5umPXsVC6Abj0gJg4N7RwKxN5E2aKSXWgzFX5+k9pesHlPFfS\/XsWvwX97wRJTQmN3gAAAAASUVORK5CYII=\u0022 data-src=\u0022https:\/\/avris.it\/image\/new-avris_big.png\u0022 alt=\u0022\u0022 class=\u0022border\u0022 width=\u0022960\u0022 height=\u0022500.86956521739\u0022\u003E\u003C\/span\u003E\n                \n            \u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EFinally. I got to work and rewrote the code of my sweet blog. Brand new design, new framework, \u003Ca href=\u0022\/projects\/micrus-tiny-yet-powerful-php-framework\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-cogs\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Micrus\u003C\/a\u003E, better support for language versions, a couple of new features in the admin panel, ditching custom comments for the awesomeness of \u003Ca href=\u0022https:\/\/disqus.com\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Disqus\u003C\/a\u003E, ditching TinyMCE for the beauty and simplicity of Markdown. It was a lot of work, but it was definitely worth it!\u003C\/p\u003E\n\u003Cp\u003EHope you like it! :)\u003C\/p\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","tags":["blog","comments","design","disqus","framework","markdown","php","programming","redesign","tinymce","work"],"hasMore":false,"image":"https:\/\/avris.it\/image\/new-avris_small.png","introLite":"\u003Cfigure\u003E\u003Ca href=\u0022https:\/\/avris.it\/image\/new-avris_big.png\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Cimg src=\u0022https:\/\/avris.it\/image\/new-avris_mini.png\u0022 alt=\u0022\u0022 width=\u0022240\u0022 height=\u0022125.21739130435\u0022 loading=\u0022lazy\u0022\u003E\u003C\/a\u003E\u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EFinally. I got to work and rewrote the code of my sweet blog. Brand new design, new framework, \u003Ca href=\u0022\/projects\/micrus-tiny-yet-powerful-php-framework.lite\u0022\u003E Micrus\u003C\/a\u003E, better support for language versions, a couple of new features in the admin panel, ditching custom comments for the awesomeness of \u003Ca href=\u0022https:\/\/disqus.com\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Disqus\u003C\/a\u003E, ditching TinyMCE for the beauty and simplicity of Markdown. It was a lot of work, but it was definitely worth it!\u003C\/p\u003E\n\u003Cp\u003EHope you like it! :)\u003C\/p\u003E","contentLite":"\u003Cfigure\u003E\u003Ca href=\u0022https:\/\/avris.it\/image\/new-avris_big.png\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Cimg src=\u0022https:\/\/avris.it\/image\/new-avris_mini.png\u0022 alt=\u0022\u0022 width=\u0022240\u0022 height=\u0022125.21739130435\u0022 loading=\u0022lazy\u0022\u003E\u003C\/a\u003E\u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EFinally. I got to work and rewrote the code of my sweet blog. Brand new design, new framework, \u003Ca href=\u0022\/projects\/micrus-tiny-yet-powerful-php-framework.lite\u0022\u003E Micrus\u003C\/a\u003E, better support for language versions, a couple of new features in the admin panel, ditching custom comments for the awesomeness of \u003Ca href=\u0022https:\/\/disqus.com\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Disqus\u003C\/a\u003E, ditching TinyMCE for the beauty and simplicity of Markdown. It was a lot of work, but it was definitely worth it!\u003C\/p\u003E\n\u003Cp\u003EHope you like it! :)\u003C\/p\u003E","words":66,"readTime":null,"lang":"en"},"pl":{"slug":"nowiutki-blog","title":"Nowiutki blog","intro":"\u003Cfigure\u003E\n                \u003Cnoscript\u003E\n                    \u003Cimg src=\u0022https:\/\/avris.it\/image\/new-avris_small.png\u0022 alt=\u0022\u0022 class=\u0022border-bottom\u0022 width=\u0022480\u0022 height=\u0022250.4347826087\u0022\u003E                \n                \u003C\/noscript\u003E\n                \u003Cspan class=\u0022hide-noscript\u0022\u003E\u003Cimg src=\u0022data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAYAAAAzI3woAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFD0lEQVRIia2Wz4tdWRHHP1Xn3Pt+dNuvO+m0GY2jOATHzDBmoy5E3Sgogrh14d6\/wIUr3fgfjBtBXLgRN6OIIDKIoMK4GCGgTMCJmR9J6CTTmZ5+\/d6995yqcnFfMll0Bgc8m1N1qjj1rTp1v3UlIoIz1u3btymlsFjssru7OMuFo3feISKYb22xXJ6ws7Pg\/v377O\/v8+DBA5qmQVXp+57JZEI66Zg\/tU8\/DMznc0SEiEBEAEb5Z7\/8VSAgqogqDogk3J1mOkUF0ASipJSJpIgIWRKBsLkLBUISouOBANRKRECAh1PKAEkJq4RV3AyvhbAAN1RApp96LnQ6JU1mpJRxnEDI0zm5acnTGeRMmswgNaTpjEYSOSlIptpAAhRBRGimc6pVdOgRB\/ERTB06hnDCg269xLolpe\/x9Ql1tcLLwEQSudVEO5mRZ9tIkxmGNeHBpG1xTeCG9IaKItMM3Sky3xkhWCEVw1QgTVE3ymqF1YqaM53vUK0Q3QohoUOHu6MB7qC1UiUhzYTkguPkWh1fvsd2bmjaltUwYC6gKyqJlBs8KU1AUwvNdI6dntBOJ1goeWvB1myHWn2s4HrN0o8xK1z5+AVidcxr12\/RVwerDH2PheOrY7wMYAbmuBsaTrYQwhPH7x4jqzWqiUgN666gjRJiaG759le\/RDuZ8cdXr\/GtL36Ol\/7yDybbC2S+YN1sEQyIKLu7mY\/plJyE1eoU6QuXLh4gAsuTJW++fQdD8DzFhop7hWqEGR6Q8s6FH3kYooJ5ECi+adRmOqfZ3uP5z1zm1z\/5AQh892tf5sXf\/ol3B6NPE8pg9N0pw9DRrU+o61PObc2IqLQ5oznhtdJKcOvOIe91A1EGrFSslBGQVbwWkkD2cNAGcxAFs0pKCXKLaSIi+PrnX+D1t+\/wr\/+8xYsvvcxyqGhqiG6NJSMINAIPo20yxbbAjW4oZAlKGejNKO50\/Rpxx6oRCBGCx1gIEKS5+NkgJyQl0AbJCZl9hDTbxsNA4MrlZ7h0YZ\/ejINze\/zmb69iCJoTmltAUDNwx7xyaW9BrRW8kiLACtTK4eFd+m5FVAeCqAPhPtJAKbSayBEOoeCBpA2X1Ep0HSEBqtw7vIfUyt3jJSdPnRLrDgS8aYhhQDSBCF7HJn3r9ilujoYRpRJWEDe8VsKciAJDIawiHkQ4EgJhSDp4NiQlIo3ZelJSnoxfl8jIcAJoi6SM5rw5UzSN\/aYBgcOGZ3AjfHzGsIJbRZ1Nr9gIxHrCIGwgzBCEVgX5819fCUR4RLmim10eUTpsgG2YOZCHLgRAvC\/LRg8CiRif5uFwCh89wkfnx3VARJC+7+Oh8nCuPL4\/vs6y\/b\/lfObUBG7evEnOmel0SkSwWCxo2\/aR\/caNG+zt7VFrRVU5f\/78k676UOuJgI4Ob3Jut+V0DZNJw9Jakiqq0M4OODg4IKWRFh5m+XhF\/xf5QwH6xc9\/zNVn3yU5\/O73d7m4P+M739hnZydx\/pnv8emr36dpGgBevnaXi3sdz31iB4BSCsAj+\/VbJxwe93zlyj4AtVbc\/cy4+iRAR1Wwy3v84e8d33z+C5R7c3740zd4bfccw+KFMXB1+mJsTzOTrPTFqPZ+oIigmpOTMMlKN9gHVucDK3S07Hnlnys+Wc9x\/c271GIcHxauvX7E6Rv\/5umPXsVC6Abj0gJg4N7RwKxN5E2aKSXWgzFX5+k9pesHlPFfS\/XsWvwX97wRJTQmN3gAAAAASUVORK5CYII=\u0022 data-src=\u0022https:\/\/avris.it\/image\/new-avris_small.png\u0022 alt=\u0022\u0022 class=\u0022border-bottom\u0022 width=\u0022480\u0022 height=\u0022250.4347826087\u0022\u003E\u003C\/span\u003E\n                \n            \u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EWreszcie. Wzi\u0105\u0142em si\u0119 do roboty i przepisa\u0142em od zera kod mojego blogaska. Zupe\u0142nie nowy design, nowy framework, \u003Ca href=\u0022\/projects\/micrus-tiny-yet-powerful-php-framework\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-cogs\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Micrus\u003C\/a\u003E, lepsze wsparcie dla wersji j\u0119zykowych, par\u0119 nowych ficzer\u00f3w w panelu administracyjnym, rzucenie w\u0142asnego systemu komentarzy na rzecz zajebisto\u015bci \u003Ca href=\u0022https:\/\/disqus.com\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Disqusa\u003C\/a\u003E, rzucenie TinyMCE dla pi\u0119kna i prostoty Markdownu. Zaj\u0119\u0142o to sporo pracy, ale zdecydowanie by\u0142o warto!\u003C\/p\u003E\n\u003Cp\u003EMam nadziej\u0119, \u017ce si\u0119 spodoba! :)\u003C\/p\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","content":"\u003Cfigure\u003E\n                \u003Cnoscript\u003E\n                    \u003Cimg src=\u0022https:\/\/avris.it\/image\/new-avris_big.png\u0022 alt=\u0022\u0022 class=\u0022border\u0022 width=\u0022960\u0022 height=\u0022500.86956521739\u0022\u003E                \n                \u003C\/noscript\u003E\n                \u003Cspan class=\u0022hide-noscript\u0022\u003E\u003Cimg src=\u0022data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAYAAAAzI3woAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFD0lEQVRIia2Wz4tdWRHHP1Xn3Pt+dNuvO+m0GY2jOATHzDBmoy5E3Sgogrh14d6\/wIUr3fgfjBtBXLgRN6OIIDKIoMK4GCGgTMCJmR9J6CTTmZ5+\/d6995yqcnFfMll0Bgc8m1N1qjj1rTp1v3UlIoIz1u3btymlsFjssru7OMuFo3feISKYb22xXJ6ws7Pg\/v377O\/v8+DBA5qmQVXp+57JZEI66Zg\/tU8\/DMznc0SEiEBEAEb5Z7\/8VSAgqogqDogk3J1mOkUF0ASipJSJpIgIWRKBsLkLBUISouOBANRKRECAh1PKAEkJq4RV3AyvhbAAN1RApp96LnQ6JU1mpJRxnEDI0zm5acnTGeRMmswgNaTpjEYSOSlIptpAAhRBRGimc6pVdOgRB\/ERTB06hnDCg269xLolpe\/x9Ql1tcLLwEQSudVEO5mRZ9tIkxmGNeHBpG1xTeCG9IaKItMM3Sky3xkhWCEVw1QgTVE3ymqF1YqaM53vUK0Q3QohoUOHu6MB7qC1UiUhzYTkguPkWh1fvsd2bmjaltUwYC6gKyqJlBs8KU1AUwvNdI6dntBOJ1goeWvB1myHWn2s4HrN0o8xK1z5+AVidcxr12\/RVwerDH2PheOrY7wMYAbmuBsaTrYQwhPH7x4jqzWqiUgN666gjRJiaG759le\/RDuZ8cdXr\/GtL36Ol\/7yDybbC2S+YN1sEQyIKLu7mY\/plJyE1eoU6QuXLh4gAsuTJW++fQdD8DzFhop7hWqEGR6Q8s6FH3kYooJ5ECi+adRmOqfZ3uP5z1zm1z\/5AQh892tf5sXf\/ol3B6NPE8pg9N0pw9DRrU+o61PObc2IqLQ5oznhtdJKcOvOIe91A1EGrFSslBGQVbwWkkD2cNAGcxAFs0pKCXKLaSIi+PrnX+D1t+\/wr\/+8xYsvvcxyqGhqiG6NJSMINAIPo20yxbbAjW4oZAlKGejNKO50\/Rpxx6oRCBGCx1gIEKS5+NkgJyQl0AbJCZl9hDTbxsNA4MrlZ7h0YZ\/ejINze\/zmb69iCJoTmltAUDNwx7xyaW9BrRW8kiLACtTK4eFd+m5FVAeCqAPhPtJAKbSayBEOoeCBpA2X1Ep0HSEBqtw7vIfUyt3jJSdPnRLrDgS8aYhhQDSBCF7HJn3r9ilujoYRpRJWEDe8VsKciAJDIawiHkQ4EgJhSDp4NiQlIo3ZelJSnoxfl8jIcAJoi6SM5rw5UzSN\/aYBgcOGZ3AjfHzGsIJbRZ1Nr9gIxHrCIGwgzBCEVgX5819fCUR4RLmim10eUTpsgG2YOZCHLgRAvC\/LRg8CiRif5uFwCh89wkfnx3VARJC+7+Oh8nCuPL4\/vs6y\/b\/lfObUBG7evEnOmel0SkSwWCxo2\/aR\/caNG+zt7VFrRVU5f\/78k676UOuJgI4Ob3Jut+V0DZNJw9Jakiqq0M4OODg4IKWRFh5m+XhF\/xf5QwH6xc9\/zNVn3yU5\/O73d7m4P+M739hnZydx\/pnv8emr36dpGgBevnaXi3sdz31iB4BSCsAj+\/VbJxwe93zlyj4AtVbc\/cy4+iRAR1Wwy3v84e8d33z+C5R7c3740zd4bfccw+KFMXB1+mJsTzOTrPTFqPZ+oIigmpOTMMlKN9gHVucDK3S07Hnlnys+Wc9x\/c271GIcHxauvX7E6Rv\/5umPXsVC6Abj0gJg4N7RwKxN5E2aKSXWgzFX5+k9pesHlPFfS\/XsWvwX97wRJTQmN3gAAAAASUVORK5CYII=\u0022 data-src=\u0022https:\/\/avris.it\/image\/new-avris_big.png\u0022 alt=\u0022\u0022 class=\u0022border\u0022 width=\u0022960\u0022 height=\u0022500.86956521739\u0022\u003E\u003C\/span\u003E\n                \n            \u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EWreszcie. Wzi\u0105\u0142em si\u0119 do roboty i przepisa\u0142em od zera kod mojego blogaska. Zupe\u0142nie nowy design, nowy framework, \u003Ca href=\u0022\/projects\/micrus-tiny-yet-powerful-php-framework\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-cogs\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Micrus\u003C\/a\u003E, lepsze wsparcie dla wersji j\u0119zykowych, par\u0119 nowych ficzer\u00f3w w panelu administracyjnym, rzucenie w\u0142asnego systemu komentarzy na rzecz zajebisto\u015bci \u003Ca href=\u0022https:\/\/disqus.com\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Disqusa\u003C\/a\u003E, rzucenie TinyMCE dla pi\u0119kna i prostoty Markdownu. Zaj\u0119\u0142o to sporo pracy, ale zdecydowanie by\u0142o warto!\u003C\/p\u003E\n\u003Cp\u003EMam nadziej\u0119, \u017ce si\u0119 spodoba! :)\u003C\/p\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","tags":["design","framework","komentarz","markdown","php","praca","programowanie","redesign","tinymce"],"hasMore":false,"image":"https:\/\/avris.it\/image\/new-avris_small.png","introLite":"\u003Cfigure\u003E\u003Ca href=\u0022https:\/\/avris.it\/image\/new-avris_big.png\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Cimg src=\u0022https:\/\/avris.it\/image\/new-avris_mini.png\u0022 alt=\u0022\u0022 width=\u0022240\u0022 height=\u0022125.21739130435\u0022 loading=\u0022lazy\u0022\u003E\u003C\/a\u003E\u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EWreszcie. Wzi\u0105\u0142em si\u0119 do roboty i przepisa\u0142em od zera kod mojego blogaska. Zupe\u0142nie nowy design, nowy framework, \u003Ca href=\u0022\/projects\/micrus-tiny-yet-powerful-php-framework.lite\u0022\u003E Micrus\u003C\/a\u003E, lepsze wsparcie dla wersji j\u0119zykowych, par\u0119 nowych ficzer\u00f3w w panelu administracyjnym, rzucenie w\u0142asnego systemu komentarzy na rzecz zajebisto\u015bci \u003Ca href=\u0022https:\/\/disqus.com\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Disqusa\u003C\/a\u003E, rzucenie TinyMCE dla pi\u0119kna i prostoty Markdownu. Zaj\u0119\u0142o to sporo pracy, ale zdecydowanie by\u0142o warto!\u003C\/p\u003E\n\u003Cp\u003EMam nadziej\u0119, \u017ce si\u0119 spodoba! :)\u003C\/p\u003E","contentLite":"\u003Cfigure\u003E\u003Ca href=\u0022https:\/\/avris.it\/image\/new-avris_big.png\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Cimg src=\u0022https:\/\/avris.it\/image\/new-avris_mini.png\u0022 alt=\u0022\u0022 width=\u0022240\u0022 height=\u0022125.21739130435\u0022 loading=\u0022lazy\u0022\u003E\u003C\/a\u003E\u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EWreszcie. Wzi\u0105\u0142em si\u0119 do roboty i przepisa\u0142em od zera kod mojego blogaska. Zupe\u0142nie nowy design, nowy framework, \u003Ca href=\u0022\/projects\/micrus-tiny-yet-powerful-php-framework.lite\u0022\u003E Micrus\u003C\/a\u003E, lepsze wsparcie dla wersji j\u0119zykowych, par\u0119 nowych ficzer\u00f3w w panelu administracyjnym, rzucenie w\u0142asnego systemu komentarzy na rzecz zajebisto\u015bci \u003Ca href=\u0022https:\/\/disqus.com\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Disqusa\u003C\/a\u003E, rzucenie TinyMCE dla pi\u0119kna i prostoty Markdownu. Zaj\u0119\u0142o to sporo pracy, ale zdecydowanie by\u0142o warto!\u003C\/p\u003E\n\u003Cp\u003EMam nadziej\u0119, \u017ce si\u0119 spodoba! :)\u003C\/p\u003E","words":67,"readTime":null,"lang":"pl"}}},"projects\/micrus-tiny-yet-powerful-php-framework":{"key":"projects\/micrus-tiny-yet-powerful-php-framework","type":"article","published":true,"meta":{"createdAt":"2017-04-28T19:43:38+02:00","publishedAt":"2017-03-11T12:00:00+01:00","group":"micrus","links":[{"icon":"globe-europe","colour":"primary","url":"https:\/\/micrus.avris.it","displayUrl":null},{"icon":"brands gitlab","colour":"secondary","url":"https:\/\/gitlab.com\/Avris\/Micrus","displayUrl":null}],"category":"projects","subcategory":null,"slug":"micrus-tiny-yet-powerful-php-framework"},"content":{"en":{"slug":"micrus-tiny-yet-powerful-php-framework","title":"Micrus \u2022 Tiny, yet powerful, PHP framework","intro":"\u003Cfigure\u003E\n                \u003Cnoscript\u003E\n                    \u003Cimg src=\u0022https:\/\/avris.it\/image\/micrus_small.png\u0022 alt=\u0022\u0022 class=\u0022border-bottom\u0022 width=\u0022480\u0022 height=\u0022267.5\u0022\u003E                \n                \u003C\/noscript\u003E\n                \u003Cspan class=\u0022hide-noscript\u0022\u003E\u003Cimg src=\u0022data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAUCAYAAADlep81AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAGCUlEQVRIiU2Wy45dVxGGv6q19u2cvuC2u9NJhIkcCRSQAhKXF2DChAED3odX4Rl4A2CAxEWKlBBQiBOTqON0226f0+eyL6uqGOxj45L2YA\/W0r\/++uv\/S4DgUKKKdDXy1jH66BQi8PVA7Lakmx5dQULIIgy+R0RINJRfnOGdQwpw8PUAvRBjgSggExQHC\/S\/Ai5EBCICQEQQ4UQE+TUYAV0oehLYuMKvB\/SsI192lG9BXwgqUIkyeSEIQIhHS+qfLyk3e8KE6A3JDb4OxBNIS+wK4T2yBG0DGQJBEFE8HPeCWQBvAIpWMAIfHGol1oXYbLD6jvxOIl9m2h00wKqPw8tAukS+l4khE0XwBJ4SqYEoQuwnZKEQCT3N6EVG\/3gLIYDg4QdCBNAZkHSJyEAWIoNk5kvqhAC2Ekwm2p+1NI8z9s2AiOAXNeUE8mhIoyCQTjJ6lMCdGA0fBUkJ0QqpE\/J2xv5zBF+v8XDiAOhVZWQGQpORNkGtSJeQCkggR3mWmSurXWH\/CGTI+LogHx4RJbDbCW0zcpQAATPAASWiQTSBClILooL+6pTp93t0mnAgwl5rSaTOwf0WuoS0h29ZoccZaSCGQrihywQl8MFInRKPd\/DeKVIV6veWSFeRjjIkxfsRLEBnXNoK0iQkKZIzoAz\/2FL+dEO53mOr4bWoRe8tg+8ukEVGjzJ6kmZmMkgF2iraKbYx8CAmRxqhejtDmQgXdFEjbYO2EIMR4WiV53tUkLZC64RUig\/gm6C8HPHNRPQT9mTD9NmW8q87siwFvWzQ4wrtBO0CaQWpBEnz+Ekj5IsGUKarEXtpMMG7lxdUtzVX4wvMChDE3tB7NZIFyRldNogKYeA7JyaIcX4cEfgeLHXI+xX6dCTrsCXdTsjJEelsSXW+RLqM5ABxKDOV+IRo0H2wpP\/3yPjFlt+e\/5o7u+N29xy6gr5sqaj5g\/0Fe5CJKaNFMRuJsRBjzMD6iegN3zs+ODEEsVckZUSSRKqEtBDkoZJ\/sqT6wX2ah2dIlSAc0QB1iCAmQxcdu7+vOF59h4ePLlmvv+aoKzTpmOd75enxS8gxj73NbQsH74OwwDcTtjJsY\/jGsWeF2Bn62S0ChIigqmgSqnPQH2fSh6c033+HfHbvMLazBs6\/rGhTZlFqHq0u+d75gmfrFR\/ffEyjJ2w9UeiRSln5jqsHqxlE7\/hg2KrgeyN284D42rHribgbSFc78iv7BnALpmvl6K8JuV2zeznQfNBTvXUfbWtEMtfvBnko2Ljh0y8+5zcnP+XkvGJVNryonOtPrqgeNkRArit8PLDSF3w7EQNgc6L4OrAXE7Ebif1IhJPlVW4c3LLLFctSM3xaKN9swb9Fcqa6uEDqCrLgyxZNHT988oCPnnyF3I7Y04p7R8rZw\/f58vwlviuUYvid4bsCATEK4YFvA3tRsNVErAdivYfdNMtDZG6ZKFQ5s6xq8GDdj6BC\/Q7wy2OaH13OTFU1uqiBTJQRbQLvJ\/b\/XIGPhENYEDuIaRYtDt77bBsWxN7xreHPB\/zZFu4GohhqQRKR34mAKqQsFJz9WDCf80o3gtyO+JkhtaANs9tFgARSgy4r0ukCSQU08P0IGLE3oi\/4\/jBVdxN2M+I3A347zqz0ZbaB4oQdwlUlkWXWkIcRQK6F0KAUJ74S9M9rpM1IVlIYkgtp2RFlTn1tanRZ4\/2EZCEGA43ZMmJO8nBAAypgcMJmEPghaYJZ1HJI7lIABNFAMugicAe2wOfOeLFClw3aZGjBtk5aVERxCJujsU5om7E7A7dDDgIWiMwtwwKKHXakA9uHrSxHBCVsPgSoKqD4GPOO1AUsIHqIj0aG+2u0bcjnC0TAh5gzJhRM0LrG24K2gg2BJMF9dmjv47VTR5lBiR+MlxlUnn\/eBHNg2BUZYhZiciIFbKH8bcN0voScSYsKaUCbBFKwu4Kt9kiroDrHR5pZ8LtC7IIYHHYGQyEmP7D05vrxRv0fXCCiRAiYIAHhjlsQV4Xx8XaeNFESgk0FyQaSCRfsZgRRIBHms\/gbiBHoD9oZHSab23domTj8DzmtyTndp0MuAAAAAElFTkSuQmCC\u0022 data-src=\u0022https:\/\/avris.it\/image\/micrus_small.png\u0022 alt=\u0022\u0022 class=\u0022border-bottom\u0022 width=\u0022480\u0022 height=\u0022267.5\u0022\u003E\u003C\/span\u003E\n                \n            \u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EHow big does a framework need to be to provide you with a quick, easy and comfortable way of creating neatly structured MVC websites? That can easily be extended and configured?\u003C\/p\u003E\n\u003Cp\u003EWell, not big at all. Just try Micrus! Its goal is to keep it as simple as possible, while offering all the most important features, as listed here:\u003C\/p\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","content":"\u003Cfigure\u003E\n                \u003Cnoscript\u003E\n                    \u003Cimg src=\u0022https:\/\/avris.it\/image\/micrus_big.png\u0022 alt=\u0022\u0022 class=\u0022border\u0022 width=\u0022960\u0022 height=\u0022535\u0022\u003E                \n                \u003C\/noscript\u003E\n                \u003Cspan class=\u0022hide-noscript\u0022\u003E\u003Cimg src=\u0022data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAUCAYAAADlep81AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAGCUlEQVRIiU2Wy45dVxGGv6q19u2cvuC2u9NJhIkcCRSQAhKXF2DChAED3odX4Rl4A2CAxEWKlBBQiBOTqON0226f0+eyL6uqGOxj45L2YA\/W0r\/++uv\/S4DgUKKKdDXy1jH66BQi8PVA7Lakmx5dQULIIgy+R0RINJRfnOGdQwpw8PUAvRBjgSggExQHC\/S\/Ai5EBCICQEQQ4UQE+TUYAV0oehLYuMKvB\/SsI192lG9BXwgqUIkyeSEIQIhHS+qfLyk3e8KE6A3JDb4OxBNIS+wK4T2yBG0DGQJBEFE8HPeCWQBvAIpWMAIfHGol1oXYbLD6jvxOIl9m2h00wKqPw8tAukS+l4khE0XwBJ4SqYEoQuwnZKEQCT3N6EVG\/3gLIYDg4QdCBNAZkHSJyEAWIoNk5kvqhAC2Ekwm2p+1NI8z9s2AiOAXNeUE8mhIoyCQTjJ6lMCdGA0fBUkJ0QqpE\/J2xv5zBF+v8XDiAOhVZWQGQpORNkGtSJeQCkggR3mWmSurXWH\/CGTI+LogHx4RJbDbCW0zcpQAATPAASWiQTSBClILooL+6pTp93t0mnAgwl5rSaTOwf0WuoS0h29ZoccZaSCGQrihywQl8MFInRKPd\/DeKVIV6veWSFeRjjIkxfsRLEBnXNoK0iQkKZIzoAz\/2FL+dEO53mOr4bWoRe8tg+8ukEVGjzJ6kmZmMkgF2iraKbYx8CAmRxqhejtDmQgXdFEjbYO2EIMR4WiV53tUkLZC64RUig\/gm6C8HPHNRPQT9mTD9NmW8q87siwFvWzQ4wrtBO0CaQWpBEnz+Ekj5IsGUKarEXtpMMG7lxdUtzVX4wvMChDE3tB7NZIFyRldNogKYeA7JyaIcX4cEfgeLHXI+xX6dCTrsCXdTsjJEelsSXW+RLqM5ABxKDOV+IRo0H2wpP\/3yPjFlt+e\/5o7u+N29xy6gr5sqaj5g\/0Fe5CJKaNFMRuJsRBjzMD6iegN3zs+ODEEsVckZUSSRKqEtBDkoZJ\/sqT6wX2ah2dIlSAc0QB1iCAmQxcdu7+vOF59h4ePLlmvv+aoKzTpmOd75enxS8gxj73NbQsH74OwwDcTtjJsY\/jGsWeF2Bn62S0ChIigqmgSqnPQH2fSh6c033+HfHbvMLazBs6\/rGhTZlFqHq0u+d75gmfrFR\/ffEyjJ2w9UeiRSln5jqsHqxlE7\/hg2KrgeyN284D42rHribgbSFc78iv7BnALpmvl6K8JuV2zeznQfNBTvXUfbWtEMtfvBnko2Ljh0y8+5zcnP+XkvGJVNryonOtPrqgeNkRArit8PLDSF3w7EQNgc6L4OrAXE7Ebif1IhJPlVW4c3LLLFctSM3xaKN9swb9Fcqa6uEDqCrLgyxZNHT988oCPnnyF3I7Y04p7R8rZw\/f58vwlviuUYvid4bsCATEK4YFvA3tRsNVErAdivYfdNMtDZG6ZKFQ5s6xq8GDdj6BC\/Q7wy2OaH13OTFU1uqiBTJQRbQLvJ\/b\/XIGPhENYEDuIaRYtDt77bBsWxN7xreHPB\/zZFu4GohhqQRKR34mAKqQsFJz9WDCf80o3gtyO+JkhtaANs9tFgARSgy4r0ukCSQU08P0IGLE3oi\/4\/jBVdxN2M+I3A347zqz0ZbaB4oQdwlUlkWXWkIcRQK6F0KAUJ74S9M9rpM1IVlIYkgtp2RFlTn1tanRZ4\/2EZCEGA43ZMmJO8nBAAypgcMJmEPghaYJZ1HJI7lIABNFAMugicAe2wOfOeLFClw3aZGjBtk5aVERxCJujsU5om7E7A7dDDgIWiMwtwwKKHXakA9uHrSxHBCVsPgSoKqD4GPOO1AUsIHqIj0aG+2u0bcjnC0TAh5gzJhRM0LrG24K2gg2BJMF9dmjv47VTR5lBiR+MlxlUnn\/eBHNg2BUZYhZiciIFbKH8bcN0voScSYsKaUCbBFKwu4Kt9kiroDrHR5pZ8LtC7IIYHHYGQyEmP7D05vrxRv0fXCCiRAiYIAHhjlsQV4Xx8XaeNFESgk0FyQaSCRfsZgRRIBHms\/gbiBHoD9oZHSab23domTj8DzmtyTndp0MuAAAAAElFTkSuQmCC\u0022 data-src=\u0022https:\/\/avris.it\/image\/micrus_big.png\u0022 alt=\u0022\u0022 class=\u0022border\u0022 width=\u0022960\u0022 height=\u0022535\u0022\u003E\u003C\/span\u003E\n                \n            \u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EHow big does a framework need to be to provide you with a quick, easy and comfortable way of creating neatly structured MVC websites? That can easily be extended and configured?\u003C\/p\u003E\n\u003Cp\u003EWell, not big at all. Just try Micrus! Its goal is to keep it as simple as possible, while offering all the most important features, as listed here:\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003EObject oriented\u003C\/li\u003E\n\u003Cli\u003EVery clear MVC structure\u003C\/li\u003E\n\u003Cli\u003EDependency Injection Container\u003C\/li\u003E\n\u003Cli\u003EEvent dispatching\u003C\/li\u003E\n\u003Cli\u003EORM agnostic, support for Doctrine and RedBean\u003C\/li\u003E\n\u003Cli\u003EREST-ful routing\u003C\/li\u003E\n\u003Cli\u003ECRUD generator\u003C\/li\u003E\n\u003Cli\u003ETemplate engine agnostic, support for Twig and plain PHP\u003C\/li\u003E\n\u003Cli\u003EAuthentication and authorization\u003C\/li\u003E\n\u003Cli\u003EEasy configuration with YAML\u003C\/li\u003E\n\u003Cli\u003EConsole tasks using Symfony Console\u003C\/li\u003E\n\u003Cli\u003EForms\u003C\/li\u003E\n\u003Cli\u003ELocalization\u003C\/li\u003E\n\u003Cli\u003ELogging with Monolog (PSR-3 compliant)\u003C\/li\u003E\n\u003Cli\u003ECaching (PSR-6 compliant)\u003C\/li\u003E\n\u003Cli\u003EFlash messages\u003C\/li\u003E\n\u003C\/ul\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","tags":["extendable","framework","full-stack","php","plugins","programming"],"hasMore":true,"image":"https:\/\/avris.it\/image\/micrus_small.png","introLite":"\u003Cfigure\u003E\u003Ca href=\u0022https:\/\/avris.it\/image\/micrus_big.png\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Cimg src=\u0022https:\/\/avris.it\/image\/micrus_mini.png\u0022 alt=\u0022\u0022 width=\u0022240\u0022 height=\u0022133.75\u0022 loading=\u0022lazy\u0022\u003E\u003C\/a\u003E\u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EHow big does a framework need to be to provide you with a quick, easy and comfortable way of creating neatly structured MVC websites? That can easily be extended and configured?\u003C\/p\u003E\n\u003Cp\u003EWell, not big at all. Just try Micrus! Its goal is to keep it as simple as possible, while offering all the most important features, as listed here:\u003C\/p\u003E","contentLite":"\u003Cfigure\u003E\u003Ca href=\u0022https:\/\/avris.it\/image\/micrus_big.png\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Cimg src=\u0022https:\/\/avris.it\/image\/micrus_mini.png\u0022 alt=\u0022\u0022 width=\u0022240\u0022 height=\u0022133.75\u0022 loading=\u0022lazy\u0022\u003E\u003C\/a\u003E\u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EHow big does a framework need to be to provide you with a quick, easy and comfortable way of creating neatly structured MVC websites? That can easily be extended and configured?\u003C\/p\u003E\n\u003Cp\u003EWell, not big at all. Just try Micrus! Its goal is to keep it as simple as possible, while offering all the most important features, as listed here:\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003EObject oriented\u003C\/li\u003E\n\u003Cli\u003EVery clear MVC structure\u003C\/li\u003E\n\u003Cli\u003EDependency Injection Container\u003C\/li\u003E\n\u003Cli\u003EEvent dispatching\u003C\/li\u003E\n\u003Cli\u003EORM agnostic, support for Doctrine and RedBean\u003C\/li\u003E\n\u003Cli\u003EREST-ful routing\u003C\/li\u003E\n\u003Cli\u003ECRUD generator\u003C\/li\u003E\n\u003Cli\u003ETemplate engine agnostic, support for Twig and plain PHP\u003C\/li\u003E\n\u003Cli\u003EAuthentication and authorization\u003C\/li\u003E\n\u003Cli\u003EEasy configuration with YAML\u003C\/li\u003E\n\u003Cli\u003EConsole tasks using Symfony Console\u003C\/li\u003E\n\u003Cli\u003EForms\u003C\/li\u003E\n\u003Cli\u003ELocalization\u003C\/li\u003E\n\u003Cli\u003ELogging with Monolog (PSR-3 compliant)\u003C\/li\u003E\n\u003Cli\u003ECaching (PSR-6 compliant)\u003C\/li\u003E\n\u003Cli\u003EFlash messages\u003C\/li\u003E\n\u003C\/ul\u003E","words":114,"readTime":null,"lang":"en"},"pl":{"slug":"micrus-drobny-lecz-skuteczny-framework-dla-php","title":"Micrus \u2022 Drobny, lecz skuteczny, framework dla PHP","intro":"\u003Cfigure\u003E\n                \u003Cnoscript\u003E\n                    \u003Cimg src=\u0022https:\/\/avris.it\/image\/micrus_small.png\u0022 alt=\u0022\u0022 class=\u0022border-bottom\u0022 width=\u0022480\u0022 height=\u0022267.5\u0022\u003E                \n                \u003C\/noscript\u003E\n                \u003Cspan class=\u0022hide-noscript\u0022\u003E\u003Cimg src=\u0022data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAUCAYAAADlep81AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAGCUlEQVRIiU2Wy45dVxGGv6q19u2cvuC2u9NJhIkcCRSQAhKXF2DChAED3odX4Rl4A2CAxEWKlBBQiBOTqON0226f0+eyL6uqGOxj45L2YA\/W0r\/++uv\/S4DgUKKKdDXy1jH66BQi8PVA7Lakmx5dQULIIgy+R0RINJRfnOGdQwpw8PUAvRBjgSggExQHC\/S\/Ai5EBCICQEQQ4UQE+TUYAV0oehLYuMKvB\/SsI192lG9BXwgqUIkyeSEIQIhHS+qfLyk3e8KE6A3JDb4OxBNIS+wK4T2yBG0DGQJBEFE8HPeCWQBvAIpWMAIfHGol1oXYbLD6jvxOIl9m2h00wKqPw8tAukS+l4khE0XwBJ4SqYEoQuwnZKEQCT3N6EVG\/3gLIYDg4QdCBNAZkHSJyEAWIoNk5kvqhAC2Ekwm2p+1NI8z9s2AiOAXNeUE8mhIoyCQTjJ6lMCdGA0fBUkJ0QqpE\/J2xv5zBF+v8XDiAOhVZWQGQpORNkGtSJeQCkggR3mWmSurXWH\/CGTI+LogHx4RJbDbCW0zcpQAATPAASWiQTSBClILooL+6pTp93t0mnAgwl5rSaTOwf0WuoS0h29ZoccZaSCGQrihywQl8MFInRKPd\/DeKVIV6veWSFeRjjIkxfsRLEBnXNoK0iQkKZIzoAz\/2FL+dEO53mOr4bWoRe8tg+8ukEVGjzJ6kmZmMkgF2iraKbYx8CAmRxqhejtDmQgXdFEjbYO2EIMR4WiV53tUkLZC64RUig\/gm6C8HPHNRPQT9mTD9NmW8q87siwFvWzQ4wrtBO0CaQWpBEnz+Ekj5IsGUKarEXtpMMG7lxdUtzVX4wvMChDE3tB7NZIFyRldNogKYeA7JyaIcX4cEfgeLHXI+xX6dCTrsCXdTsjJEelsSXW+RLqM5ABxKDOV+IRo0H2wpP\/3yPjFlt+e\/5o7u+N29xy6gr5sqaj5g\/0Fe5CJKaNFMRuJsRBjzMD6iegN3zs+ODEEsVckZUSSRKqEtBDkoZJ\/sqT6wX2ah2dIlSAc0QB1iCAmQxcdu7+vOF59h4ePLlmvv+aoKzTpmOd75enxS8gxj73NbQsH74OwwDcTtjJsY\/jGsWeF2Bn62S0ChIigqmgSqnPQH2fSh6c033+HfHbvMLazBs6\/rGhTZlFqHq0u+d75gmfrFR\/ffEyjJ2w9UeiRSln5jqsHqxlE7\/hg2KrgeyN284D42rHribgbSFc78iv7BnALpmvl6K8JuV2zeznQfNBTvXUfbWtEMtfvBnko2Ljh0y8+5zcnP+XkvGJVNryonOtPrqgeNkRArit8PLDSF3w7EQNgc6L4OrAXE7Ebif1IhJPlVW4c3LLLFctSM3xaKN9swb9Fcqa6uEDqCrLgyxZNHT988oCPnnyF3I7Y04p7R8rZw\/f58vwlviuUYvid4bsCATEK4YFvA3tRsNVErAdivYfdNMtDZG6ZKFQ5s6xq8GDdj6BC\/Q7wy2OaH13OTFU1uqiBTJQRbQLvJ\/b\/XIGPhENYEDuIaRYtDt77bBsWxN7xreHPB\/zZFu4GohhqQRKR34mAKqQsFJz9WDCf80o3gtyO+JkhtaANs9tFgARSgy4r0ukCSQU08P0IGLE3oi\/4\/jBVdxN2M+I3A347zqz0ZbaB4oQdwlUlkWXWkIcRQK6F0KAUJ74S9M9rpM1IVlIYkgtp2RFlTn1tanRZ4\/2EZCEGA43ZMmJO8nBAAypgcMJmEPghaYJZ1HJI7lIABNFAMugicAe2wOfOeLFClw3aZGjBtk5aVERxCJujsU5om7E7A7dDDgIWiMwtwwKKHXakA9uHrSxHBCVsPgSoKqD4GPOO1AUsIHqIj0aG+2u0bcjnC0TAh5gzJhRM0LrG24K2gg2BJMF9dmjv47VTR5lBiR+MlxlUnn\/eBHNg2BUZYhZiciIFbKH8bcN0voScSYsKaUCbBFKwu4Kt9kiroDrHR5pZ8LtC7IIYHHYGQyEmP7D05vrxRv0fXCCiRAiYIAHhjlsQV4Xx8XaeNFESgk0FyQaSCRfsZgRRIBHms\/gbiBHoD9oZHSab23domTj8DzmtyTndp0MuAAAAAElFTkSuQmCC\u0022 data-src=\u0022https:\/\/avris.it\/image\/micrus_small.png\u0022 alt=\u0022\u0022 class=\u0022border-bottom\u0022 width=\u0022480\u0022 height=\u0022267.5\u0022\u003E\u003C\/span\u003E\n                \n            \u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EJak du\u017cy musi by\u0107 framework, aby umo\u017cliwia\u0142 szybkie, \u0142atwe i wygodne tworzenie \u0142adnie uporz\u0105dkowanych stron MVC? Aby by\u0142 \u0142atwo rozszerzalny i konfigurowalny?\u003C\/p\u003E\n\u003Cp\u003ENo w\u0142a\u015bnie wcale nie tak du\u017cy. Wypr\u00f3buj Micrusa!  Jego celem jest bycie tak ma\u0142ym, jak to tylko mo\u017cliwe, lecz oferowa\u0107 wszytkie najwa\u017cniejsze funkcjonalno\u015bci:\u003C\/p\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","content":"\u003Cfigure\u003E\n                \u003Cnoscript\u003E\n                    \u003Cimg src=\u0022https:\/\/avris.it\/image\/micrus_big.png\u0022 alt=\u0022\u0022 class=\u0022border\u0022 width=\u0022960\u0022 height=\u0022535\u0022\u003E                \n                \u003C\/noscript\u003E\n                \u003Cspan class=\u0022hide-noscript\u0022\u003E\u003Cimg src=\u0022data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAUCAYAAADlep81AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAGCUlEQVRIiU2Wy45dVxGGv6q19u2cvuC2u9NJhIkcCRSQAhKXF2DChAED3odX4Rl4A2CAxEWKlBBQiBOTqON0226f0+eyL6uqGOxj45L2YA\/W0r\/++uv\/S4DgUKKKdDXy1jH66BQi8PVA7Lakmx5dQULIIgy+R0RINJRfnOGdQwpw8PUAvRBjgSggExQHC\/S\/Ai5EBCICQEQQ4UQE+TUYAV0oehLYuMKvB\/SsI192lG9BXwgqUIkyeSEIQIhHS+qfLyk3e8KE6A3JDb4OxBNIS+wK4T2yBG0DGQJBEFE8HPeCWQBvAIpWMAIfHGol1oXYbLD6jvxOIl9m2h00wKqPw8tAukS+l4khE0XwBJ4SqYEoQuwnZKEQCT3N6EVG\/3gLIYDg4QdCBNAZkHSJyEAWIoNk5kvqhAC2Ekwm2p+1NI8z9s2AiOAXNeUE8mhIoyCQTjJ6lMCdGA0fBUkJ0QqpE\/J2xv5zBF+v8XDiAOhVZWQGQpORNkGtSJeQCkggR3mWmSurXWH\/CGTI+LogHx4RJbDbCW0zcpQAATPAASWiQTSBClILooL+6pTp93t0mnAgwl5rSaTOwf0WuoS0h29ZoccZaSCGQrihywQl8MFInRKPd\/DeKVIV6veWSFeRjjIkxfsRLEBnXNoK0iQkKZIzoAz\/2FL+dEO53mOr4bWoRe8tg+8ukEVGjzJ6kmZmMkgF2iraKbYx8CAmRxqhejtDmQgXdFEjbYO2EIMR4WiV53tUkLZC64RUig\/gm6C8HPHNRPQT9mTD9NmW8q87siwFvWzQ4wrtBO0CaQWpBEnz+Ekj5IsGUKarEXtpMMG7lxdUtzVX4wvMChDE3tB7NZIFyRldNogKYeA7JyaIcX4cEfgeLHXI+xX6dCTrsCXdTsjJEelsSXW+RLqM5ABxKDOV+IRo0H2wpP\/3yPjFlt+e\/5o7u+N29xy6gr5sqaj5g\/0Fe5CJKaNFMRuJsRBjzMD6iegN3zs+ODEEsVckZUSSRKqEtBDkoZJ\/sqT6wX2ah2dIlSAc0QB1iCAmQxcdu7+vOF59h4ePLlmvv+aoKzTpmOd75enxS8gxj73NbQsH74OwwDcTtjJsY\/jGsWeF2Bn62S0ChIigqmgSqnPQH2fSh6c033+HfHbvMLazBs6\/rGhTZlFqHq0u+d75gmfrFR\/ffEyjJ2w9UeiRSln5jqsHqxlE7\/hg2KrgeyN284D42rHribgbSFc78iv7BnALpmvl6K8JuV2zeznQfNBTvXUfbWtEMtfvBnko2Ljh0y8+5zcnP+XkvGJVNryonOtPrqgeNkRArit8PLDSF3w7EQNgc6L4OrAXE7Ebif1IhJPlVW4c3LLLFctSM3xaKN9swb9Fcqa6uEDqCrLgyxZNHT988oCPnnyF3I7Y04p7R8rZw\/f58vwlviuUYvid4bsCATEK4YFvA3tRsNVErAdivYfdNMtDZG6ZKFQ5s6xq8GDdj6BC\/Q7wy2OaH13OTFU1uqiBTJQRbQLvJ\/b\/XIGPhENYEDuIaRYtDt77bBsWxN7xreHPB\/zZFu4GohhqQRKR34mAKqQsFJz9WDCf80o3gtyO+JkhtaANs9tFgARSgy4r0ukCSQU08P0IGLE3oi\/4\/jBVdxN2M+I3A347zqz0ZbaB4oQdwlUlkWXWkIcRQK6F0KAUJ74S9M9rpM1IVlIYkgtp2RFlTn1tanRZ4\/2EZCEGA43ZMmJO8nBAAypgcMJmEPghaYJZ1HJI7lIABNFAMugicAe2wOfOeLFClw3aZGjBtk5aVERxCJujsU5om7E7A7dDDgIWiMwtwwKKHXakA9uHrSxHBCVsPgSoKqD4GPOO1AUsIHqIj0aG+2u0bcjnC0TAh5gzJhRM0LrG24K2gg2BJMF9dmjv47VTR5lBiR+MlxlUnn\/eBHNg2BUZYhZiciIFbKH8bcN0voScSYsKaUCbBFKwu4Kt9kiroDrHR5pZ8LtC7IIYHHYGQyEmP7D05vrxRv0fXCCiRAiYIAHhjlsQV4Xx8XaeNFESgk0FyQaSCRfsZgRRIBHms\/gbiBHoD9oZHSab23domTj8DzmtyTndp0MuAAAAAElFTkSuQmCC\u0022 data-src=\u0022https:\/\/avris.it\/image\/micrus_big.png\u0022 alt=\u0022\u0022 class=\u0022border\u0022 width=\u0022960\u0022 height=\u0022535\u0022\u003E\u003C\/span\u003E\n                \n            \u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EJak du\u017cy musi by\u0107 framework, aby umo\u017cliwia\u0142 szybkie, \u0142atwe i wygodne tworzenie \u0142adnie uporz\u0105dkowanych stron MVC? Aby by\u0142 \u0142atwo rozszerzalny i konfigurowalny?\u003C\/p\u003E\n\u003Cp\u003ENo w\u0142a\u015bnie wcale nie tak du\u017cy. Wypr\u00f3buj Micrusa!  Jego celem jest bycie tak ma\u0142ym, jak to tylko mo\u017cliwe, lecz oferowa\u0107 wszytkie najwa\u017cniejsze funkcjonalno\u015bci:\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003EZorientowany obiektowo\u003C\/li\u003E\n\u003Cli\u003EPrzejrzysta struktura MVC\u003C\/li\u003E\n\u003Cli\u003EKontener DI\u003C\/li\u003E\n\u003Cli\u003EEvent dispatching\u003C\/li\u003E\n\u003Cli\u003EAgnotyczny wobec ORM, wsparcie dla Doctrine i RedBean\u003C\/li\u003E\n\u003Cli\u003EREST-ful routing\u003C\/li\u003E\n\u003Cli\u003EGenerator CRUD\u003C\/li\u003E\n\u003Cli\u003EAgnostyczny wobec silnik\u00f3w szablon\u00f3w, wsparcie dla Twiga i czystego PHP\u003C\/li\u003E\n\u003Cli\u003EAutentykacja i autoryzacja\u003C\/li\u003E\n\u003Cli\u003E\u0141atwa konfiguracja w YAML-u\u003C\/li\u003E\n\u003Cli\u003ETaki konsolowe dzi\u0119ki Symfony Console\u003C\/li\u003E\n\u003Cli\u003EFormularze\u003C\/li\u003E\n\u003Cli\u003ELocalizacja\u003C\/li\u003E\n\u003Cli\u003ELogowanie z u\u017cyciem Monolog (zgodne z PSR-3)\u003C\/li\u003E\n\u003Cli\u003ECaching (zgodne z PSR-6)\u003C\/li\u003E\n\u003Cli\u003EKomunikaty flash\u003C\/li\u003E\n\u003C\/ul\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","tags":["framework","full-stack","micrus","php","plugins","programowanie"],"hasMore":true,"image":"https:\/\/avris.it\/image\/micrus_small.png","introLite":"\u003Cfigure\u003E\u003Ca href=\u0022https:\/\/avris.it\/image\/micrus_big.png\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Cimg src=\u0022https:\/\/avris.it\/image\/micrus_mini.png\u0022 alt=\u0022\u0022 width=\u0022240\u0022 height=\u0022133.75\u0022 loading=\u0022lazy\u0022\u003E\u003C\/a\u003E\u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EJak du\u017cy musi by\u0107 framework, aby umo\u017cliwia\u0142 szybkie, \u0142atwe i wygodne tworzenie \u0142adnie uporz\u0105dkowanych stron MVC? Aby by\u0142 \u0142atwo rozszerzalny i konfigurowalny?\u003C\/p\u003E\n\u003Cp\u003ENo w\u0142a\u015bnie wcale nie tak du\u017cy. Wypr\u00f3buj Micrusa!  Jego celem jest bycie tak ma\u0142ym, jak to tylko mo\u017cliwe, lecz oferowa\u0107 wszytkie najwa\u017cniejsze funkcjonalno\u015bci:\u003C\/p\u003E","contentLite":"\u003Cfigure\u003E\u003Ca href=\u0022https:\/\/avris.it\/image\/micrus_big.png\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Cimg src=\u0022https:\/\/avris.it\/image\/micrus_mini.png\u0022 alt=\u0022\u0022 width=\u0022240\u0022 height=\u0022133.75\u0022 loading=\u0022lazy\u0022\u003E\u003C\/a\u003E\u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EJak du\u017cy musi by\u0107 framework, aby umo\u017cliwia\u0142 szybkie, \u0142atwe i wygodne tworzenie \u0142adnie uporz\u0105dkowanych stron MVC? Aby by\u0142 \u0142atwo rozszerzalny i konfigurowalny?\u003C\/p\u003E\n\u003Cp\u003ENo w\u0142a\u015bnie wcale nie tak du\u017cy. Wypr\u00f3buj Micrusa!  Jego celem jest bycie tak ma\u0142ym, jak to tylko mo\u017cliwe, lecz oferowa\u0107 wszytkie najwa\u017cniejsze funkcjonalno\u015bci:\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003EZorientowany obiektowo\u003C\/li\u003E\n\u003Cli\u003EPrzejrzysta struktura MVC\u003C\/li\u003E\n\u003Cli\u003EKontener DI\u003C\/li\u003E\n\u003Cli\u003EEvent dispatching\u003C\/li\u003E\n\u003Cli\u003EAgnotyczny wobec ORM, wsparcie dla Doctrine i RedBean\u003C\/li\u003E\n\u003Cli\u003EREST-ful routing\u003C\/li\u003E\n\u003Cli\u003EGenerator CRUD\u003C\/li\u003E\n\u003Cli\u003EAgnostyczny wobec silnik\u00f3w szablon\u00f3w, wsparcie dla Twiga i czystego PHP\u003C\/li\u003E\n\u003Cli\u003EAutentykacja i autoryzacja\u003C\/li\u003E\n\u003Cli\u003E\u0141atwa konfiguracja w YAML-u\u003C\/li\u003E\n\u003Cli\u003ETaki konsolowe dzi\u0119ki Symfony Console\u003C\/li\u003E\n\u003Cli\u003EFormularze\u003C\/li\u003E\n\u003Cli\u003ELocalizacja\u003C\/li\u003E\n\u003Cli\u003ELogowanie z u\u017cyciem Monolog (zgodne z PSR-3)\u003C\/li\u003E\n\u003Cli\u003ECaching (zgodne z PSR-6)\u003C\/li\u003E\n\u003Cli\u003EKomunikaty flash\u003C\/li\u003E\n\u003C\/ul\u003E","words":118,"readTime":null,"lang":"pl"}}},"projects\/picco-golfy-php-framework":{"key":"projects\/picco-golfy-php-framework","type":"article","published":true,"meta":{"createdAt":"2017-04-28T19:43:56+02:00","publishedAt":"2016-07-13T21:16:00+02:00","group":"micrus","links":[{"icon":"globe-europe","colour":"primary","url":"https:\/\/picco.avris.it\/","displayUrl":null},{"icon":"brands gitlab","colour":"secondary","url":"https:\/\/gitlab.com\/Avris\/Picco","displayUrl":null}],"category":"projects","subcategory":null,"slug":"picco-golfy-php-framework"},"content":{"en":{"slug":"picco-golfy-php-framework","title":"Picco \u2013 Golfy PHP framework","intro":"\u003Cfigure\u003E\n                \u003Cnoscript\u003E\n                    \u003Cimg src=\u0022https:\/\/avris.it\/image\/picco-golfy-php-framework_small.png\u0022 alt=\u0022\u0022 class=\u0022border-bottom\u0022 width=\u0022480\u0022 height=\u0022274.28571428571\u0022\u003E                \n                \u003C\/noscript\u003E\n                \u003Cspan class=\u0022hide-noscript\u0022\u003E\u003Cimg src=\u0022data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAUCAYAAADlep81AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAHOklEQVRIiU2Vy2+dVxXFf\/uc8z3uw\/f6XtvXdh5OIE2TtrShDyraKqESA6RKVMyZIP4B5ogRY4ZM+BeQGDJACCQUQaXSVrQpCbiJ2sauE79i+9r33u\/7zmMzuB4w2LMjnbXXWnstKTZ+q7Zt6by0gh316T6\/ytlfHnD29VeY3GC7XWh1MZ0WJreUOTR1hRGBIoNWAWWOEWG1ZSliYGvrCB8TKo6ERb2CT5SlJcss9bhm8vUe9bN9iA0AKjlIhiMvyEYt7EIBvqH57xMWbi7jn+0TYwPWYEqHaWVIbvHqsUWGAFJk0M6hzEGEZ7VHpg0qgnEWzRxIhrqEZIm85bDOEOqIyS3GGcCRogcSAE6uX4bpEWoEaw1OEuZ4il3sISJoqDG5Q1oZJjeYBCbIOSAHZQadHASSJqgt65myPU3YpRUkK4mTU9K0ZnzmkZCQJhBjoDMYQAOz00N8iACYfLRMEwzhpMaY+UfTnWNi8Ej09F++Qb7YnbNUZhTtnEG\/xGaOvMy5OGrT6uXYToZtZ5jCceelEbZsMfj+LTbefx03WMKUGVI4kjF4nxBnSSlA8mhsEFVAcfXd\/+BeHTE7OcMfHmJJpPoUYxryjaucPfqK9XdvcTypiJMZGhQfwWSOXq\/g6qiDRNirIxoS6aTiB6+s8\/sHp6TGM50FJBdM4XBGyLs5yzeH+OM+s50DmmkkftMwPRwDigHBf7pFamakUQ9Z7CFWMEbQsyOGz22w\/2ALjCUb9bGFY7lfYl3GJAqb08CRM5h2hm1luLrm7dcuYSQx+\/IhJ5\/cB50hheXlG0v86N0NynZGnluuPL+KM4Z8oQvoXDJFEQGOqvmsL+IWu\/SXFjFNRZEL+XKP1FTQ1Jh+i71ZYnEhZ2lQcq1juVnPyDuOfq\/gjcs92q0MYw0iERGPyQTJLZ89HvPXj3ex1nD1Uo+6iaxfH5J3C0TMXDI0gAHJLIRI3NwhW1sBPcM4x\/gs0Hv924x3DzBOiaczOqq8UES+dyHjzesDPnx8zHG3wArc6Q4AEGsxmUVzi4pigjLsZAxajpPdCYeHY\/o9x3TS0Fob0BnXnG49w4kGEMAZcAaRRHi6hY76rF27xJPHTxh\/3HDnrUtc0cDbbwx5+9YFegslqoqI8JsH+6xeKJiOJ9x+YWVOvTEYZ0iZmV9kSFwedRCF5qyhPnNYASNgAFfmc4ZUAyIZZr2LvbCAaTw8ntAbH\/JOp8\/tn7\/GO6+ssbrSnW8ugupcb4Dj8YztIqPjDK2TKS9cu0lVeUQEsWY+ScEato9qhqVl\/2DGdOuIKxe7iII2gdnO03PJiMigi6x0kU5GvtFFCNRb2zzcGfPJH+7xqz9+ga50uXO5Tz6r2Nya8N6NIb\/46S3+ubnH8vURT6zhlX6JCGS55Zc\/vISUDjWCKpAUjcrJyYy\/hTEfHR6zfXCIhJqTgwOamQdZwAlpnrR5jpiMi2td9nbG1EZ4NvX43gK+20EXe2wO+nRtxq4FdQ6AneMZ7dUBK2p4a6UNQOYsP3v\/RUSEqg58+PkT7m4ecvfhMZ9uT4mhoBwOkMN9mukUjR40IaI4UJgmcAVYw9bnB7B1QKgqdnYTkgytpT7GGXZ2T1kpzDzEzmW7f9KQAuw+2uX2q6ukpNx78JS\/\/3uPfzw55aOxp+4toMmQTBtZzpHDM5wzBFU0RVLygKAoDhGQHH3mSAnC4QRzOsGkRPAeGxK1T5igIHC0P+XSc2sYO+XR4yP+1BjccUUxqfn1nx\/x2eYZTeWYJk8Y5eh6DxsgVvNqKHPLRAynkwadTQj1KaoRVM6DUQSKDix00JCjlc57LkWIEU2JGBMx6dwHIXLwaJ+ysNy9t4uUBamK+AtDPmh3mRTteXkChIRGRTn3kRiqKIjNWBwt0l8aYhA0xblkCgYxUBRwUaCdoWIgJTRGUMW1O7hegSbQqNiktGJFM6354NEx2kRSFfCTQG4dqfaE6ex8oYQmRZMCBjUZuIKlC0PeuX2NwcqIxeGF+VvS\/zHkLPSBzIAKGhPEiOAQsaw\/P5yfcYIrvYyffHfAqF9yf6\/CuYzkIdWRXqtEqwatG8LplOHGOhoBLNgMydtIawHb6fLwaUWKc9ZJ\/tyTigGdM7IPqVE0JTQmNHhidUqcTNn+dI\/URIhK1wg31rp89q+vmMwCnX6Pi99aIzXK7uM9UlWT6prUeMZ7x9iyAJtD0UW6bejkHBx4jnZOOTt6Rl563vzxe9y48yYiwvx2Q4Pugao\/BxPRGFCN+JMjzEEf6XYIKbF5eMrvvtxn7+EBfnWJ8TfHjK0j1onSlUxrj3iPW+yhRBY2hpwFi6aIMZHxUyXUgaf3t4k7X3DjO1cRsfTXV8jaOzhUwVfoeIK6iPo4BxQ8akC9J\/mICUqSxPikptof42yLMKsJO\/u4XkmxukYrKJV9grEVREjRUAfIRgaTCyfbEdOA8TW+rkih5vH9e1x6UTgZT2gmM\/4H\/a7DbmCi0BgAAAAASUVORK5CYII=\u0022 data-src=\u0022https:\/\/avris.it\/image\/picco-golfy-php-framework_small.png\u0022 alt=\u0022\u0022 class=\u0022border-bottom\u0022 width=\u0022480\u0022 height=\u0022274.28571428571\u0022\u003E\u003C\/span\u003E\n                \n            \u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003ECode golf\u003C\/strong\u003E is a type of recreational computer programming competition in which participants strive to achieve the shortest possible source code that implements a certain algorithm. \u003Ca href=\u0022https:\/\/en.wikipedia.org\/wiki\/Code_golf\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E [source]\u003C\/a\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EPicco\u003C\/strong\u003E is a tiny PHP web framework that only takes \u003Cstrong\u003E~2,5 kB\u003C\/strong\u003E of space and has no dependencies on other libraries, while still providing quite a lot of features, being extensible and reasonably easy to use.\u003C\/p\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","content":"\u003Cfigure\u003E\n                \u003Cnoscript\u003E\n                    \u003Cimg src=\u0022https:\/\/avris.it\/image\/picco-golfy-php-framework_big.png\u0022 alt=\u0022\u0022 class=\u0022border\u0022 width=\u0022700\u0022 height=\u0022400\u0022\u003E                \n                \u003C\/noscript\u003E\n                \u003Cspan class=\u0022hide-noscript\u0022\u003E\u003Cimg src=\u0022data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAUCAYAAADlep81AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAHOklEQVRIiU2Vy2+dVxXFf\/uc8z3uw\/f6XtvXdh5OIE2TtrShDyraKqESA6RKVMyZIP4B5ogRY4ZM+BeQGDJACCQUQaXSVrQpCbiJ2sauE79i+9r33u\/7zmMzuB4w2LMjnbXXWnstKTZ+q7Zt6by0gh316T6\/ytlfHnD29VeY3GC7XWh1MZ0WJreUOTR1hRGBIoNWAWWOEWG1ZSliYGvrCB8TKo6ERb2CT5SlJcss9bhm8vUe9bN9iA0AKjlIhiMvyEYt7EIBvqH57xMWbi7jn+0TYwPWYEqHaWVIbvHqsUWGAFJk0M6hzEGEZ7VHpg0qgnEWzRxIhrqEZIm85bDOEOqIyS3GGcCRogcSAE6uX4bpEWoEaw1OEuZ4il3sISJoqDG5Q1oZJjeYBCbIOSAHZQadHASSJqgt65myPU3YpRUkK4mTU9K0ZnzmkZCQJhBjoDMYQAOz00N8iACYfLRMEwzhpMaY+UfTnWNi8Ej09F++Qb7YnbNUZhTtnEG\/xGaOvMy5OGrT6uXYToZtZ5jCceelEbZsMfj+LTbefx03WMKUGVI4kjF4nxBnSSlA8mhsEFVAcfXd\/+BeHTE7OcMfHmJJpPoUYxryjaucPfqK9XdvcTypiJMZGhQfwWSOXq\/g6qiDRNirIxoS6aTiB6+s8\/sHp6TGM50FJBdM4XBGyLs5yzeH+OM+s50DmmkkftMwPRwDigHBf7pFamakUQ9Z7CFWMEbQsyOGz22w\/2ALjCUb9bGFY7lfYl3GJAqb08CRM5h2hm1luLrm7dcuYSQx+\/IhJ5\/cB50hheXlG0v86N0NynZGnluuPL+KM4Z8oQvoXDJFEQGOqvmsL+IWu\/SXFjFNRZEL+XKP1FTQ1Jh+i71ZYnEhZ2lQcq1juVnPyDuOfq\/gjcs92q0MYw0iERGPyQTJLZ89HvPXj3ex1nD1Uo+6iaxfH5J3C0TMXDI0gAHJLIRI3NwhW1sBPcM4x\/gs0Hv924x3DzBOiaczOqq8UES+dyHjzesDPnx8zHG3wArc6Q4AEGsxmUVzi4pigjLsZAxajpPdCYeHY\/o9x3TS0Fob0BnXnG49w4kGEMAZcAaRRHi6hY76rF27xJPHTxh\/3HDnrUtc0cDbbwx5+9YFegslqoqI8JsH+6xeKJiOJ9x+YWVOvTEYZ0iZmV9kSFwedRCF5qyhPnNYASNgAFfmc4ZUAyIZZr2LvbCAaTw8ntAbH\/JOp8\/tn7\/GO6+ssbrSnW8ugupcb4Dj8YztIqPjDK2TKS9cu0lVeUQEsWY+ScEato9qhqVl\/2DGdOuIKxe7iII2gdnO03PJiMigi6x0kU5GvtFFCNRb2zzcGfPJH+7xqz9+ga50uXO5Tz6r2Nya8N6NIb\/46S3+ubnH8vURT6zhlX6JCGS55Zc\/vISUDjWCKpAUjcrJyYy\/hTEfHR6zfXCIhJqTgwOamQdZwAlpnrR5jpiMi2td9nbG1EZ4NvX43gK+20EXe2wO+nRtxq4FdQ6AneMZ7dUBK2p4a6UNQOYsP3v\/RUSEqg58+PkT7m4ecvfhMZ9uT4mhoBwOkMN9mukUjR40IaI4UJgmcAVYw9bnB7B1QKgqdnYTkgytpT7GGXZ2T1kpzDzEzmW7f9KQAuw+2uX2q6ukpNx78JS\/\/3uPfzw55aOxp+4toMmQTBtZzpHDM5wzBFU0RVLygKAoDhGQHH3mSAnC4QRzOsGkRPAeGxK1T5igIHC0P+XSc2sYO+XR4yP+1BjccUUxqfn1nx\/x2eYZTeWYJk8Y5eh6DxsgVvNqKHPLRAynkwadTQj1KaoRVM6DUQSKDix00JCjlc57LkWIEU2JGBMx6dwHIXLwaJ+ysNy9t4uUBamK+AtDPmh3mRTteXkChIRGRTn3kRiqKIjNWBwt0l8aYhA0xblkCgYxUBRwUaCdoWIgJTRGUMW1O7hegSbQqNiktGJFM6354NEx2kRSFfCTQG4dqfaE6ex8oYQmRZMCBjUZuIKlC0PeuX2NwcqIxeGF+VvS\/zHkLPSBzIAKGhPEiOAQsaw\/P5yfcYIrvYyffHfAqF9yf6\/CuYzkIdWRXqtEqwatG8LplOHGOhoBLNgMydtIawHb6fLwaUWKc9ZJ\/tyTigGdM7IPqVE0JTQmNHhidUqcTNn+dI\/URIhK1wg31rp89q+vmMwCnX6Pi99aIzXK7uM9UlWT6prUeMZ7x9iyAJtD0UW6bejkHBx4jnZOOTt6Rl563vzxe9y48yYiwvx2Q4Pugao\/BxPRGFCN+JMjzEEf6XYIKbF5eMrvvtxn7+EBfnWJ8TfHjK0j1onSlUxrj3iPW+yhRBY2hpwFi6aIMZHxUyXUgaf3t4k7X3DjO1cRsfTXV8jaOzhUwVfoeIK6iPo4BxQ8akC9J\/mICUqSxPikptof42yLMKsJO\/u4XkmxukYrKJV9grEVREjRUAfIRgaTCyfbEdOA8TW+rkih5vH9e1x6UTgZT2gmM\/4H\/a7DbmCi0BgAAAAASUVORK5CYII=\u0022 data-src=\u0022https:\/\/avris.it\/image\/picco-golfy-php-framework_big.png\u0022 alt=\u0022\u0022 class=\u0022border\u0022 width=\u0022700\u0022 height=\u0022400\u0022\u003E\u003C\/span\u003E\n                \n            \u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003ECode golf\u003C\/strong\u003E is a type of recreational computer programming competition in which participants strive to achieve the shortest possible source code that implements a certain algorithm. \u003Ca href=\u0022https:\/\/en.wikipedia.org\/wiki\/Code_golf\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E [source]\u003C\/a\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EPicco\u003C\/strong\u003E is a tiny PHP web framework that only takes \u003Cstrong\u003E~2,5 kB\u003C\/strong\u003E of space and has no dependencies on other libraries, while still providing quite a lot of features, being extensible and reasonably easy to use.\u003C\/p\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","tags":["code golf","framework","microframework","php","programming"],"hasMore":false,"image":"https:\/\/avris.it\/image\/picco-golfy-php-framework_small.png","introLite":"\u003Cfigure\u003E\u003Ca href=\u0022https:\/\/avris.it\/image\/picco-golfy-php-framework_big.png\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Cimg src=\u0022https:\/\/avris.it\/image\/picco-golfy-php-framework_mini.png\u0022 alt=\u0022\u0022 width=\u0022240\u0022 height=\u0022137.14285714286\u0022 loading=\u0022lazy\u0022\u003E\u003C\/a\u003E\u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003ECode golf\u003C\/strong\u003E is a type of recreational computer programming competition in which participants strive to achieve the shortest possible source code that implements a certain algorithm. \u003Ca href=\u0022https:\/\/en.wikipedia.org\/wiki\/Code_golf\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E [source]\u003C\/a\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EPicco\u003C\/strong\u003E is a tiny PHP web framework that only takes \u003Cstrong\u003E~2,5 kB\u003C\/strong\u003E of space and has no dependencies on other libraries, while still providing quite a lot of features, being extensible and reasonably easy to use.\u003C\/p\u003E","contentLite":"\u003Cfigure\u003E\u003Ca href=\u0022https:\/\/avris.it\/image\/picco-golfy-php-framework_big.png\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Cimg src=\u0022https:\/\/avris.it\/image\/picco-golfy-php-framework_mini.png\u0022 alt=\u0022\u0022 width=\u0022240\u0022 height=\u0022137.14285714286\u0022 loading=\u0022lazy\u0022\u003E\u003C\/a\u003E\u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003ECode golf\u003C\/strong\u003E is a type of recreational computer programming competition in which participants strive to achieve the shortest possible source code that implements a certain algorithm. \u003Ca href=\u0022https:\/\/en.wikipedia.org\/wiki\/Code_golf\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E [source]\u003C\/a\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EPicco\u003C\/strong\u003E is a tiny PHP web framework that only takes \u003Cstrong\u003E~2,5 kB\u003C\/strong\u003E of space and has no dependencies on other libraries, while still providing quite a lot of features, being extensible and reasonably easy to use.\u003C\/p\u003E","words":62,"readTime":null,"lang":"en"}}},"projects\/avris-stringer-old":{"key":"projects\/avris-stringer-old","type":"article","published":true,"meta":{"createdAt":"2017-04-28T19:43:32+02:00","publishedAt":"2015-05-09T17:59:00+02:00","group":null,"links":[{"icon":"brands gitlab","colour":"primary","url":"https:\/\/gitlab.com\/Avris\/Stringer","displayUrl":null},{"icon":"brands gitlab","colour":"secondary","url":"https:\/\/gitlab.com\/Avris\/Stringer-Micrus","displayUrl":null},{"icon":"brands gitlab","colour":"secondary","url":"https:\/\/gitlab.com\/Avris\/Stringer-Symfony","displayUrl":null}],"category":"projects","subcategory":null,"slug":"avris-stringer-old"},"content":{"pl":{"slug":"avris-stringer-old","title":"Avris Stringer","intro":"\u003Cfigure\u003E\n                \u003Cnoscript\u003E\n                    \u003Cimg src=\u0022https:\/\/avris.it\/image\/avris-stringer-old_small.png\u0022 alt=\u0022\u0022 class=\u0022border-bottom\u0022 width=\u0022480\u0022 height=\u0022270.42253521127\u0022\u003E                \n                \u003C\/noscript\u003E\n                \u003Cspan class=\u0022hide-noscript\u0022\u003E\u003Cimg src=\u0022data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAUCAYAAADlep81AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAH1UlEQVRIiS3U249cdQHA8e\/vci5z5ro77e6WbksprQVB0FLwnmjQKGi8PRrDH2Di\/+CDz0bDm4nGB2Mwmhh50MTEKCTwooKKQC2ltLPbdi8zO3Pm3M\/5XXzQP+LzET9+6RW\/WqX8+vU3+eLVp\/je1z\/D7vYAEOA8ZdVyvMy4v1ixyHJiFZBWJfOyRnrH4TLj6CRFCMnsaIEHDpdrmrol7xoO52taZ9FBzCCJufTAFuemEwpjODrJOEgz0rLGW4+ToH7ywx99\/\/RkwEbS45V3\/sPhqubcxibjQYQUgrJuKduOZV6xv1gyO0kpOssqK0iLio1hgjGeUZKwPZ2w2QuYDAY0naG1niiOQGpaY+msozaWIOqhpSBvDZ2Hznl0FJDEPXTSCzizOebaoxc5SDNe\/fd1tIDnn36MC6fHjIcxw86AsKR1y735Ei0USgm61tA1LY2xLPOSfj\/m2atPINqGl177O8N+n3VdkxUttxdLqtZgpCKQiiQM2R4JtAoY9Ps4Y9kcD9GR1vQGCceLNR95+ByLrOTO8QnHyzUbccjOmQE6TNhe9tmMQo61om46lJN0zlNVlqbr6LyHsmaU9OgNenz2kUssioqqbbhzkjKdDMhrw1OPXOTLVx9lFGjeur3PrcWaum6xUvHMlQfRAFZJNsYJ6kDQ78VkRcfeIuXx8zussxbTGTohQUsCpWlcS+s8rXM0TUtpDAhJP4rZP1nzxIUzXLtygfcO57z53ozjrOLUZMyXLj\/EtUtnmQ4STm0M2JokXM0b8rrhoCjohyH63XsrTFVgrCcOAwKt6HxNg2OR5TRdy7qqOMpyFnnJqqioOksSSwYupzq5y+bkNF5JsoMZ13uW28cLJI778xMO1zXOCUb9hEWWcbAq+PD5HUY9RaJH9Hst1\/ePwMNsmaFv3D0mLwsqa4m1Yme6waDXw1vPe4dzgkDRdi1Hq5w7h0uWRUU\/ibj56m+oy4ydrdP85Q+\/xHvPx57+BH\/652uEcZ8zn\/gWkQqwUjAZDSnalo\/unOfTV86xcSpCSoFLYZUVZFXD3bRgmdXoVdMgHAzDgJOsZDoe89DpCcdZwb00xxuD8bAuctxqn7d\/\/ysEnjxdMj21xe264ZlvfZfOOT54\/WUwDfN7M5R\/iePjOc9+4zv40YN88zNXuXZpmyhRCCXwjWOxyrl3knJc1gzjCO1BvPjbv\/nNXsBRuqbqHGVZsbU5QYiOddHQjwKysiYrKqJAMu5J7l\/\/K+Ots\/jhDm\/NFtw6WlG1HWcmYz5+eYfq7rsczW7y7Ndf4KRoOb+9w1eevkxvECDwmNqyXGS8f7iiNIZlWXO4riiMR1sv8N7SWkNeNrTGkeYV01HCoKdQEqYjTWsd870b\/PHPLyNxHOzd5tyFixR5waXPfo0msMxe\/RmvvTHg7uw2Tz71DD9\/8Qd87mvfZvPyRbK8QgswrWGZlhykOYMkgkqwFi3Ow6qs0PfmKcMHNpj2+3QGTNmQVg1hqIijgFBrxpFiVTfUyTa7n38Bi2B681Xu3XiL3bO7\/P13P0VKySOPP8He3h6PffJZplef44xUVFHAv2YH4DwXTk8YxZLSWM5vbWCsoers\/8WCNR799uEc4x270yFhHBA7kIB3UBtDqAL6ccww1MRBiI0Ed7OSbucZLl\/+FHU65+qTz+E8NNmSh5\/8KmkF87xhGIV4IclqQ4UgCRXeeTrnmC3WOO\/ZX6TMlgWLoqV2Hj3PKoRYklU1\/UBhvEdLySiJmUQRQjhaa1i3HSdVy6Jo6DzUCG6khlBu4NYO7z3OjlCZQwO26wikZDLsE4ch67ojbQymqTha1zjnWVvDcdVRtQ68Z9jroS2eVVVhrGEQxYTCI7QCpUiigH4ckVYNN+8vWTeWqSoooxFXzm4g25LD0rOlSnIbkvRCdNhjXhoCrUjiEIdnXjQ8JGGxzunajlXd4YUiUIqe1oxGCX0nqDuDjgOFhP+tawwq0FRNS6QjtieSzjne2j\/i5qJgNyg4XdzCO8tGeJa9G2\/z5LUvkJQpeVdx6\/o9HtzeZDsImM326A8HqIc\/TS1C1pVhdxBhcbTeM+xpJoGisp6h9txdFsyWJTqIIjAWL6DpOpz3KCUJBHjn2JuvuHGcIVVAHm+RxVsYZ\/FOEl25yJ3DBqF2UQja3csstGJIhb18hTQaIqwicoa883QIgjBgQwhwlv3MkNaGm\/M1J5XDCYV+YGNMWhTUxtEYi7WOvlJ4Bau65R\/3F5TGE2pNi8BZT209EkfVWYwH2xgMAglUxpPKEKUUgTdsJAHT8YCtcZ\/pKKGrWualZVVbDvOa+2lFayRxpAgDhT496PP8Y+f54zsfcHtV4gGvNcILPlisWdUW5QXWe0IESkMiIwQeLwTOOzrncc7jBAghCZUkDkMmSY8HJkM+tDPhwWnCsmy5fphyP+9YVg15Y1FSoUKBkILGCXQrNFmn+OrjD\/GLN26yqg0OxaxsyOoWqQMAnJR4JEpKlBKAwElP50Fbi\/PgASklSRByZXvCIAwZ9yO2BxF3TjKuH+dkraVxMB4k9HuetOlonSeJQgIl0HfLmvTWfXZHMRaN1pLSOZz3oENCPAiBxGGUQgqBlYJQejQSYaFBIBUIJQmEZGsyYtCLSSLFtB\/x\/sGS\/brj1KDP7qkem9qzfWqMrAr+8EFK6SWRlhgL\/wU7BW9dIEbl2gAAAABJRU5ErkJggg==\u0022 data-src=\u0022https:\/\/avris.it\/image\/avris-stringer-old_small.png\u0022 alt=\u0022\u0022 class=\u0022border-bottom\u0022 width=\u0022480\u0022 height=\u0022270.42253521127\u0022\u003E\u003C\/span\u003E\n                \n            \u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EUwaga, projekt przeniesiony: \u003Ca href=\u0022\/projects\/avris-stringer\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-cogs\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Avris Stringer\u003C\/a\u003E\u003C\/strong\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EAvris Stringer\u003C\/strong\u003E to otwarta biblioteka PHP upraszczaj\u0105ca wiele operacji na stringach zwi\u0105zanych z tworzeniem interfejsu u\u017cytkownika, a przede wszystkim z dostosowywaniem form gramatycznych \u003Cstrong\u003Ej\u0119zyka polskiego\u003C\/strong\u003E do dynamicznych danych.\u003C\/p\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","content":"\u003Cfigure\u003E\n                \u003Cnoscript\u003E\n                    \u003Cimg src=\u0022https:\/\/avris.it\/image\/avris-stringer-old_big.png\u0022 alt=\u0022\u0022 class=\u0022border\u0022 width=\u0022710\u0022 height=\u0022400\u0022\u003E                \n                \u003C\/noscript\u003E\n                \u003Cspan class=\u0022hide-noscript\u0022\u003E\u003Cimg src=\u0022data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAUCAYAAADlep81AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAH1UlEQVRIiS3U249cdQHA8e\/vci5z5ro77e6WbksprQVB0FLwnmjQKGi8PRrDH2Di\/+CDz0bDm4nGB2Mwmhh50MTEKCTwooKKQC2ltLPbdi8zO3Pm3M\/5XXzQP+LzET9+6RW\/WqX8+vU3+eLVp\/je1z\/D7vYAEOA8ZdVyvMy4v1ixyHJiFZBWJfOyRnrH4TLj6CRFCMnsaIEHDpdrmrol7xoO52taZ9FBzCCJufTAFuemEwpjODrJOEgz0rLGW4+ToH7ywx99\/\/RkwEbS45V3\/sPhqubcxibjQYQUgrJuKduOZV6xv1gyO0kpOssqK0iLio1hgjGeUZKwPZ2w2QuYDAY0naG1niiOQGpaY+msozaWIOqhpSBvDZ2Hznl0FJDEPXTSCzizOebaoxc5SDNe\/fd1tIDnn36MC6fHjIcxw86AsKR1y735Ei0USgm61tA1LY2xLPOSfj\/m2atPINqGl177O8N+n3VdkxUttxdLqtZgpCKQiiQM2R4JtAoY9Ps4Y9kcD9GR1vQGCceLNR95+ByLrOTO8QnHyzUbccjOmQE6TNhe9tmMQo61om46lJN0zlNVlqbr6LyHsmaU9OgNenz2kUssioqqbbhzkjKdDMhrw1OPXOTLVx9lFGjeur3PrcWaum6xUvHMlQfRAFZJNsYJ6kDQ78VkRcfeIuXx8zussxbTGTohQUsCpWlcS+s8rXM0TUtpDAhJP4rZP1nzxIUzXLtygfcO57z53ozjrOLUZMyXLj\/EtUtnmQ4STm0M2JokXM0b8rrhoCjohyH63XsrTFVgrCcOAwKt6HxNg2OR5TRdy7qqOMpyFnnJqqioOksSSwYupzq5y+bkNF5JsoMZ13uW28cLJI778xMO1zXOCUb9hEWWcbAq+PD5HUY9RaJH9Hst1\/ePwMNsmaFv3D0mLwsqa4m1Yme6waDXw1vPe4dzgkDRdi1Hq5w7h0uWRUU\/ibj56m+oy4ydrdP85Q+\/xHvPx57+BH\/652uEcZ8zn\/gWkQqwUjAZDSnalo\/unOfTV86xcSpCSoFLYZUVZFXD3bRgmdXoVdMgHAzDgJOsZDoe89DpCcdZwb00xxuD8bAuctxqn7d\/\/ysEnjxdMj21xe264ZlvfZfOOT54\/WUwDfN7M5R\/iePjOc9+4zv40YN88zNXuXZpmyhRCCXwjWOxyrl3knJc1gzjCO1BvPjbv\/nNXsBRuqbqHGVZsbU5QYiOddHQjwKysiYrKqJAMu5J7l\/\/K+Ots\/jhDm\/NFtw6WlG1HWcmYz5+eYfq7rsczW7y7Ndf4KRoOb+9w1eevkxvECDwmNqyXGS8f7iiNIZlWXO4riiMR1sv8N7SWkNeNrTGkeYV01HCoKdQEqYjTWsd870b\/PHPLyNxHOzd5tyFixR5waXPfo0msMxe\/RmvvTHg7uw2Tz71DD9\/8Qd87mvfZvPyRbK8QgswrWGZlhykOYMkgkqwFi3Ow6qs0PfmKcMHNpj2+3QGTNmQVg1hqIijgFBrxpFiVTfUyTa7n38Bi2B681Xu3XiL3bO7\/P13P0VKySOPP8He3h6PffJZplef44xUVFHAv2YH4DwXTk8YxZLSWM5vbWCsoers\/8WCNR799uEc4x270yFhHBA7kIB3UBtDqAL6ccww1MRBiI0Ed7OSbucZLl\/+FHU65+qTz+E8NNmSh5\/8KmkF87xhGIV4IclqQ4UgCRXeeTrnmC3WOO\/ZX6TMlgWLoqV2Hj3PKoRYklU1\/UBhvEdLySiJmUQRQjhaa1i3HSdVy6Jo6DzUCG6khlBu4NYO7z3OjlCZQwO26wikZDLsE4ch67ojbQymqTha1zjnWVvDcdVRtQ68Z9jroS2eVVVhrGEQxYTCI7QCpUiigH4ckVYNN+8vWTeWqSoooxFXzm4g25LD0rOlSnIbkvRCdNhjXhoCrUjiEIdnXjQ8JGGxzunajlXd4YUiUIqe1oxGCX0nqDuDjgOFhP+tawwq0FRNS6QjtieSzjne2j\/i5qJgNyg4XdzCO8tGeJa9G2\/z5LUvkJQpeVdx6\/o9HtzeZDsImM326A8HqIc\/TS1C1pVhdxBhcbTeM+xpJoGisp6h9txdFsyWJTqIIjAWL6DpOpz3KCUJBHjn2JuvuHGcIVVAHm+RxVsYZ\/FOEl25yJ3DBqF2UQja3csstGJIhb18hTQaIqwicoa883QIgjBgQwhwlv3MkNaGm\/M1J5XDCYV+YGNMWhTUxtEYi7WOvlJ4Bau65R\/3F5TGE2pNi8BZT209EkfVWYwH2xgMAglUxpPKEKUUgTdsJAHT8YCtcZ\/pKKGrWualZVVbDvOa+2lFayRxpAgDhT496PP8Y+f54zsfcHtV4gGvNcILPlisWdUW5QXWe0IESkMiIwQeLwTOOzrncc7jBAghCZUkDkMmSY8HJkM+tDPhwWnCsmy5fphyP+9YVg15Y1FSoUKBkILGCXQrNFmn+OrjD\/GLN26yqg0OxaxsyOoWqQMAnJR4JEpKlBKAwElP50Fbi\/PgASklSRByZXvCIAwZ9yO2BxF3TjKuH+dkraVxMB4k9HuetOlonSeJQgIl0HfLmvTWfXZHMRaN1pLSOZz3oENCPAiBxGGUQgqBlYJQejQSYaFBIBUIJQmEZGsyYtCLSSLFtB\/x\/sGS\/brj1KDP7qkem9qzfWqMrAr+8EFK6SWRlhgL\/wU7BW9dIEbl2gAAAABJRU5ErkJggg==\u0022 data-src=\u0022https:\/\/avris.it\/image\/avris-stringer-old_big.png\u0022 alt=\u0022\u0022 class=\u0022border\u0022 width=\u0022710\u0022 height=\u0022400\u0022\u003E\u003C\/span\u003E\n                \n            \u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EUwaga, projekt przeniesiony: \u003Ca href=\u0022\/projects\/avris-stringer\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-cogs\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Avris Stringer\u003C\/a\u003E\u003C\/strong\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EAvris Stringer\u003C\/strong\u003E to otwarta biblioteka PHP upraszczaj\u0105ca wiele operacji na stringach zwi\u0105zanych z tworzeniem interfejsu u\u017cytkownika, a przede wszystkim z dostosowywaniem form gramatycznych \u003Cstrong\u003Ej\u0119zyka polskiego\u003C\/strong\u003E do dynamicznych danych.\u003C\/p\u003E\n\u003Cp\u003EJe\u015bli na przyk\u0142ad u\u017cytkownik strony zdoby\u0142 X punkt\u00f3w, to w zale\u017cno\u015bci od X powinni\u015bmy mu powiedzie\u0107 np.: \u201czdoby\u0142e\u015b 1 punkt\u201d, \u201c2 punkt\u003Cstrong\u003Ey\u003C\/strong\u003E\u201d albo \u201c5 punkt\u003Cstrong\u003E\u00f3w\u003C\/strong\u003E\u201d.Albo i \u201czdoby\u0142\u003Cstrong\u003Ea\u015b\u003C\/strong\u003E\u201d, je\u015bli to kobieta. Mo\u017cemy te\u017c chcie\u0107 pokazywa\u0107 daty w jakim\u015b przyjemniejszym formacie ni\u017c liczbowe, na przyk\u0142ad zamiast \u201c2015-05-09 17:15\u201d, po prostu \u201cgodzin\u0119 temu\u201d. Stringer zatroszczy si\u0119 o to wszystko, i o wiele wi\u0119cej!\u003C\/p\u003E\n\u003Cp\u003EOpr\u00f3cz samej biblioteki stworzy\u0142em tak\u017ce bundle integruj\u0105ce j\u0105 z \u003Ca href=\u0022http:\/\/symfony.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Symfony\u003C\/a\u003E oraz z \u003Ca href=\u0022http:\/\/micrus.avris.it\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Micrusem\u003C\/a\u003E, dzi\u0119ki kt\u00f3rym wszystkie jej funkcje s\u0105 dost\u0119pne tak\u017ce jako serwisy oraz jako filtry \u003Ca href=\u0022http:\/\/twig.sensiolabs.org\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Twiga\u003C\/a\u003E. Wszystko mo\u017cna zainstalowa\u0107 jedn\u0105 linijk\u0105 w konsoli za pomoc\u0105 \u003Ca href=\u0022https:\/\/getcomposer.org\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E Composera\u003C\/a\u003E.\u003C\/p\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","tags":["biblioteka","composer","framework","interfejs u\u017cytkownika","j\u0119zyk polski","micrus","odmiana","php","string","symfony2","tekst"],"hasMore":true,"image":"https:\/\/avris.it\/image\/avris-stringer-old_small.png","introLite":"\u003Cfigure\u003E\u003Ca href=\u0022https:\/\/avris.it\/image\/avris-stringer-old_big.png\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Cimg src=\u0022https:\/\/avris.it\/image\/avris-stringer-old_mini.png\u0022 alt=\u0022\u0022 width=\u0022240\u0022 height=\u0022135.21126760563\u0022 loading=\u0022lazy\u0022\u003E\u003C\/a\u003E\u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EUwaga, projekt przeniesiony: \u003Ca href=\u0022\/projects\/avris-stringer.lite\u0022\u003E Avris Stringer\u003C\/a\u003E\u003C\/strong\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EAvris Stringer\u003C\/strong\u003E to otwarta biblioteka PHP upraszczaj\u0105ca wiele operacji na stringach zwi\u0105zanych z tworzeniem interfejsu u\u017cytkownika, a przede wszystkim z dostosowywaniem form gramatycznych \u003Cstrong\u003Ej\u0119zyka polskiego\u003C\/strong\u003E do dynamicznych danych.\u003C\/p\u003E","contentLite":"\u003Cfigure\u003E\u003Ca href=\u0022https:\/\/avris.it\/image\/avris-stringer-old_big.png\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Cimg src=\u0022https:\/\/avris.it\/image\/avris-stringer-old_mini.png\u0022 alt=\u0022\u0022 width=\u0022240\u0022 height=\u0022135.21126760563\u0022 loading=\u0022lazy\u0022\u003E\u003C\/a\u003E\u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EUwaga, projekt przeniesiony: \u003Ca href=\u0022\/projects\/avris-stringer.lite\u0022\u003E Avris Stringer\u003C\/a\u003E\u003C\/strong\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EAvris Stringer\u003C\/strong\u003E to otwarta biblioteka PHP upraszczaj\u0105ca wiele operacji na stringach zwi\u0105zanych z tworzeniem interfejsu u\u017cytkownika, a przede wszystkim z dostosowywaniem form gramatycznych \u003Cstrong\u003Ej\u0119zyka polskiego\u003C\/strong\u003E do dynamicznych danych.\u003C\/p\u003E\n\u003Cp\u003EJe\u015bli na przyk\u0142ad u\u017cytkownik strony zdoby\u0142 X punkt\u00f3w, to w zale\u017cno\u015bci od X powinni\u015bmy mu powiedzie\u0107 np.: \u201czdoby\u0142e\u015b 1 punkt\u201d, \u201c2 punkt\u003Cstrong\u003Ey\u003C\/strong\u003E\u201d albo \u201c5 punkt\u003Cstrong\u003E\u00f3w\u003C\/strong\u003E\u201d.Albo i \u201czdoby\u0142\u003Cstrong\u003Ea\u015b\u003C\/strong\u003E\u201d, je\u015bli to kobieta. Mo\u017cemy te\u017c chcie\u0107 pokazywa\u0107 daty w jakim\u015b przyjemniejszym formacie ni\u017c liczbowe, na przyk\u0142ad zamiast \u201c2015-05-09 17:15\u201d, po prostu \u201cgodzin\u0119 temu\u201d. Stringer zatroszczy si\u0119 o to wszystko, i o wiele wi\u0119cej!\u003C\/p\u003E\n\u003Cp\u003EOpr\u00f3cz samej biblioteki stworzy\u0142em tak\u017ce bundle integruj\u0105ce j\u0105 z \u003Ca href=\u0022http:\/\/symfony.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Symfony\u003C\/a\u003E oraz z \u003Ca href=\u0022http:\/\/micrus.avris.it\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Micrusem\u003C\/a\u003E, dzi\u0119ki kt\u00f3rym wszystkie jej funkcje s\u0105 dost\u0119pne tak\u017ce jako serwisy oraz jako filtry \u003Ca href=\u0022http:\/\/twig.sensiolabs.org\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Twiga\u003C\/a\u003E. Wszystko mo\u017cna zainstalowa\u0107 jedn\u0105 linijk\u0105 w konsoli za pomoc\u0105 \u003Ca href=\u0022https:\/\/getcomposer.org\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E Composera\u003C\/a\u003E.\u003C\/p\u003E","words":155,"readTime":null,"lang":"pl"}}}}}