Shhhh - vysílá se speaker

webexpo Takové bylo téma celého Webexpa 2016 – shhhh. Nebo alespoň páteční části. Pro ty nejlepší a nejzajímavější řečníky byl totiž připraven velký sál, kam se podle cedulek na dveřích vejde až 2500 lidí. A nápad to byl zcela zajisté skvělý. Ovšem jen do chvíle, než začala první přednáška. V davu lidí totiž existuje efekt, kdy pokud něco říkám a jsem špatně slyšet – začnu mluvit více nahlas. A tak to udělá každý. Takže to byl první den megašrumec. A do toho přednášky. Úplně si dovedu představit, že to byla pro přednášející jedna z nejnáročnějších přednášek vůbec. I ze strany posluchače to bylo náročné – dokonce jsem párkrát přestal vnímat přednášku, protože to bylo fakt maso. Nechtělo se mi vracet se do toho sálu zpět na další skvělé přednášky. V sobotu už to bylo relativně ok. Ale řešit hluk, když jsem si mohl poslechnout spoustu skvělých přednášek by bylo malicherné. Věc se má tak. Pokaždé, když jedu na nějakou akci tohoto typu, jsem na vážkách. Na jednu stranu vím, že si poslechnu…  přečtěte si více

10 obsesí na WebExpu 2016

webexpo Obsese ž. kniž. chorobně utkvělá představa, myšlenka; med. nutkavé jevy, nejčastěji myšlenky, popudy k jednání apod., jež jsou nesmyslné a bezdůvodně ovládají mysl nemocného, ačkoliv se je snaží potlačit Obsession it's kind of like a passion for something that crosses the line into crazy territory (source) Trpíte nějakou obsesí? Letošní WebExpo nabízí lék ve formě přednášek, které jsou rozděleny do deseti okruhů – obsesí – po vzoru zahraničního magazínu Quartz. Hlavním cílem je lépe uspořádat jednotlivá témata podle společných problémů, takže si každý snadno najde co jej zajímá. Zároveň každou obsesi zosobňuje celá řada (většinou) světově známých jmen, takže je na…  přečtěte si více

More awesome Monolog for #nettefw

DIC nette Nedávno mi přišel požadavek na vytvoření takového jednoduchého způsobu, jak logovat uživatelské akce – konkrétně zatím jen přihlášení uživatele (do databáze). Mohl jsem to udělat jednoduše a prostě to někam do kódu nahákovat. A nebo jsem to mohl udělat tak, jak jsem to také nakonec udělal – složitě. Samozřejmě je třeba dopředu dostatečně promyslet, jestli to za tu práci stojí, ale měl jsem dostatek argumentů proto, že ano. Jedna z nejdůležitějších myšlenek byla, že časem bude pravděpodobně potřeba logovat do databáze i další akce, než je jen přihlašování. Druhým velmi silným faktorem (který ovlivnil celé řešení) bylo, že používáme Monolog. Konkrétně Kdyby\Monolog…  přečtěte si více

Dva šablonovací systémy zároveň

latte nette smarty Možná pracujete na nějakém projektu, který používá jiný šablonovací systém než je Latte, ale Latte se vám natolik líbí, že ho chcete používat také. Nebo naopak používáte Latte, ale [doplň název šablonovacího systému] se vám natolik líbí, že ho chcete používat také. A nebo prostě nemáte na výběr a musíte používat více šablonovacích systémů. V takovém případě existuje asi jediné přímočaré řešení a tím je vlastní implementace Nette\Application\UI\ITemplate. TemplateFactory Ono to vlastně zase až tak přímočaré není. Je v tom totiž malý háček. V současné době fungují Latte šablony tak, že existuje továrna TemplateFactory, jejíž úkolem je vytvářet Template objekty. Originální implementace, kterou používá většina lidí (Nette\Bridges\ApplicationLatte\Template) pouze deleguje renderování přímo na Latte. Nabízelo by se tedy nahradit tento objekt svým vlastním a delegovat renderování jednak na Latte a jednak třeba na Smarty. Háček je však v tom, že Template není služba zaregistrovaná v DIC,…  přečtěte si více

Testbench 2.3 is out (finally)

nette php tester Yeah, you heard that correctly. Testbench 2.3 has been released and it brings a lot of new features. I don't want to write about small bugfixes but about real improvements in testing environment. There was always one important mission in Testbench – to make testing easier for newcomers. And I am happy to show you biggest feature in this release: scaffold. Imagine you have your own application but without tests (this is the best situation for scaffolding). Now you can generate whole testing environment using this single command: vendor/bin/run-tests --scaffold tests/bootstrap.php As you can see, you have to prepare bootstrap.php before scaffold. You can find default one in readme. Content of this file can be very simple: ?php require __DIR__ . '/../vendor/autoload.php'; Testbench\Bootstrap::setup(__DIR__ . '/_temp', function (\Nette\Configurator $configurator) { $configurator-addDirectory([ __DIR__ . '/../app', ])- $configurator-addParameters([ …  přečtěte si více

Fix compatibility with Nette 2.4

legacy nette php Právě v těchto dnech přichází další významná minor verze Nette balíčků do vašich vendorů. Událo se velké množství změn a to zejména pod kapotou. To si však s sebou nese určitou daň a tou je potřeba učinit pár úprav v kódu, které zajistí kompatibilitu. Těchto úprav není mnoho. A když už jsou, tak na ně Nette upozorní třeba prostřednictvím E_USER_DEPRECATED. Pokud však pracujete se složitější aplikací, která třeba nebyla původně postavená na Nette, může být taková úprava docela lopota. Zde se tedy nedočtete co je v Nette nového, ale jak co upravit a na co jsem narazil, když jsem tuto kompatibilitu re­šil. Úpravy v Latte Jelikož pracuji na starším projektu, který je…  přečtěte si více

PSR-4 autoloader aplikace

composer nette Nikdy jsem moc nelpěl na PSR-FIG pravidlech. Částečně možná proto, že jsem je nikdy moc nechápal, částečně možná proto, že nemám rád, když mi někdo něco nutí. Nekterá pravidla jsou ale docela fajn (i když se vždy něco najde). Jedním z jich je PSR-4: Improved Autoloading. Jenže proč řešit nějaký autoloading, když v Nette funguje skvěle, ani o tom člověk neví? Fakticky jsou v každém sandboxu použity minimálně 2 autoloadery a mohl bych se tedy ohánět rychlostí, protože: If there must be multiple autoload functions, spl_autoload_re­gister() allows for this. It effectively creates a queue of autoload functions, and runs through each of them in the order they are…  přečtěte si více

Magie zvaná mapping presenterů

nette Ona to vlastně ani není taková magie jako to není nikde pořádně popsané. Než se pustím to obludných složitostí, bylo by vhodné zmínit se co to vlastně mapping presenterů je. Viděli jste někde toto v konfiguraci? application: mapping: *: App\*Module\Presenters\*Presenter Určitě ano, je to totiž vykopírované ze sandboxu. Tato konfigurace říká, kde má Nette hledat presentery. Resp. pod jakým namespace. To je důležité. Na adresářové struktuře totiž v tomto případě vůbec nezáleží. Kdyby v konfiguračním souboru nebyl mapping vůbec uvedený, presenter by musel být bez namespace, tedy například \HomepagePresenter. Pokud by pak zase někdo měl raději MVC, mohl by si jednoduše změnit mapping: application: mapping: *: App\*Module\Controllers\*Controller A používat tak třídu \App\Controllers\HomepageController. Opět na umístění v adresářové struktuře nezávisle. Pojďme se ale ponořit hlouběji a rozeberme si co vlastně jednotlivé části mappingu znamenají. Do hlubin…  přečtěte si více

Rozšíření pro DIC

DIC nette Jednu z věcí, které jsem zde na blogu moc nepopsal jsou rozšíření pro DIC (Dependency Injection Container, potomek Nette\DI\Container). A protože se chci vrátit jednodušším článkům, zaměřím se na úplně základy. Jaká je motivace k psaní rozšíření DIC a co to vlastně je? Své aplikace rozděluji poměrně důsledně na jakési balíčky (bundles – název ze Symfony). Cílem je rozškatulkovat celou aplikaci podle logických celků, tzn. každý bundle by se měl starat pouze o tu svojí věc a zároveň si s sebou nést vše potřebné. Jedná se o balíčky typu Articles, který se stará (jak sám název napovídá) pouze a jenom o články, nebo Eshop, GoPay, Media, Users, atd. Výhodou tohoto přístupu je to, že mohu kdykoliv z balíčku udělat Composer balíček a úplně ho oddělit od aplikace. Zároveň některé balíčky směřují k jednoduchému oddělení do microservices. Nevýhodou je pak to, že je to oproti běžným způsobům jak navrhovat aplikaci poměrně složité. Napsat takto aplikaci většinou zamená zasahovat do nějaký…  přečtěte si více

Jednoduché testování pro úplně každého

nette tester Konec slibů, článek je tu. Tentokrát se rozepíšu o nástroji Testbench. Testbench by měl pomoci s rychlým testováním Nette aplikace. Je zaměřen spíše integračně a vhodně doplňuje Nette\Tester, který je zaměřen spíše jednotkově. Myšlenka, která stála za vytvořením tohoto nástroje je velmi prostá – testování je složité. Je složité hlavně pro lidi, kteří dokonale nerozumí problému. Proto je tento nástroj zaměřen na rychlý start pro úplně každého (kdo si prošel alespoň quickstart a chce testovat). To se projevuje v tom, jak je Testbench postaven (viz další povídání). Testbench se sestává z různých nápadů, které jsem všude možně okoukal za posledních X měsíců a něco mě na…  přečtěte si více