SlideShare una empresa de Scribd logo
1 de 20
Descargar para leer sin conexión
Ondra Machulda
@OndraM
Jak jsme přepisovali
Jobs.cz na Symfony
1. sraz přátel Symfony Praha
29. říjen 2015
Anotovaná verze přednášky
LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu2
CREDIT GOES TO...
@jirka_novak @robinpokorny @s7anley @vvondra
@krejcek @cizinskamartina @davidkmenta @PopluharPeter
Takto vypadaly Jobs.cz do září 2014. Design se od roku 2005 změnil
jen málo; vnitřnosti byly sice trochu novější, ale také letité.
Titulka Jobs.cz od října 2014
Titulka i nové části webu jsou responzivní.
Teď máme ještě i mobilní verzi m.jobs.cz,
kterou ale chceme brzy vypnout.
LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu6
●
postupně nahrazujeme jednotlivé části
– přepsat to najednou by nešlo – trvalo by to hrozně dlouho a nemohli bychom to průběžně testovat
– napíšeme novou část, vyzkoušíme na části lidí, vyladíme a pak tam pošleme všechny
– starou část pak necháme „vyhnít“, neztrácíme čas mazáním – až budou přepsané všechny části, odstraníme
rovnou celou starou aplikaci
●
28. července 2014 – první commit nových Jobs.cz
●
1. říjen 2014 – titulka, login, Inspirace a rady
– i zbytek Jobs.cz obalený „novým“ designem (ale pouze v desktopové neresponzivní variantě)
●
listopad, prosinec – detail inzerátů, odpovídání
●
duben-červen 2015 – opt-in beta hledání, postupné dodělávání a testování funkcionalit
●
červenec – opt-out beta hledání
●
srpen – nové hledání spuštěno prakticky všem
●
říjen – hledání brigád, vypnutí starého hledání
JAK ŠEL ČAS
LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu7
●
na to, že se na první pohled jedná o pár stránek to ale vypadá, že
jsme to na Symfony přepisovali dlouho
– nepředělávali jsme ale jen PHP backend
●
backend
– přepis z interního frameworku na Symfony
– search engine z Microsoft FAST na Apache SOLR
●
frontend
– responzivita + částečný redesign (vč. uživatelského a A/B testování)
– Twig
– React.js (vyhledávací pole, filtry)
●
přešli jsme z dvoutýdenních releasů na continuous delivery
– což klade na aplikace také trochu jiné nároky
CO JSME PŘEDĚLÁVALI
LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu8
LESSONS LEARNED
co jsme se naučili, co nám pomohlo, co bychom dělali jinak
LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu9
●
novou aplikaci jsme měli v repozitáři spolu se starou
– což v několika případech vedlo k provázání mezi nimi (hardcoded
autoloading kvůli šablonám, javascript byl u staré aplikace aj.)
●
provázání staré <=> nové = katastrofa
●
všechny závislosti musí být transparentní
●
nezávislost i za cenu dočasné duplikace kódu
– i když má člověk nutkání nedávat si do nové aplikace nic „nečistého“,
nepřepsaného ze staré (všechno ale nejde přepsat hned)
ZÁVISLOSTI ODDĚLIT CO NEJDŘÍVE
LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu10
●
UI pattern library (styleguide)
– http://www.jobs.cz/ui/
●
instalovaná přes bower (=> oddělená závislost)
●
ve starých i nových Jobs.cz
NEZÁVISLÁ UI KNIHOVNA
LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu11
●
začalo se v něm psát už dříve
– jakmile člověk předpokládá, že bude přepisovat do Symfony,
může začít psát šablony ve Twigu
●
Twig jde snadno napasovat kamkoliv
– do jiného frameworku i do vlastní legacy aplikace
●
šablony se pak snadno přesunou
TWIG
LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu12
●
přenositelné komponenty jde psát i do „staré“ aplikace
– když člověk zdědí starou „zbastlenou“ aplikaci, svádí to k tomu do ní
nové věci také bastlit „postaru“
– to je ale chyba – psaním přenositelných komponent si člověk může
ušetřit práci do budoucna, až bude přecházet na novou aplikaci
●
tedy hlavně: transparentní závislosti, testy (!), „čisté“
třídy bez stromu závislostí aj.
– dělat DI jde i bez kontejneru – „dependency injection pro chudé“
●
jejich přesun je pak snazší
– přidáte do service containeru, pustíte testy a máte hotovo
NEČEKAT S PSANÍM PŘENOSITELNÝCH KOMPONENT
LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu13
ŠKOLENÍ SYMFONY
●
když člověk začíná s novou technologií, často nestojí
první věc co v ní udělá za moc – to jsme si ale nemohli
dovolit
●
školení od Hugo Hamona ze Sensia nás v mnoha
věcech nasměrovalo dobrým směrem a zabránilo
různým začátečnickým chybám
LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu14
●
dělali jsme napojení na historické interní backoffice systémy
– nechtěli jsme ztrácet čas jejich přepisem
– přepis se navíc špatně businessově obhajuje
– ve výsledku jsme ale propojováním (systémy moc nemají dokumentaci ani
rozumné API), opravou následných bugů a nepohodlnou prací s nimi možná
strávili více času, než kdybychom to přepsali
●
ne vše ze starých systémů je třeba
– často obsahují robustní, komplikovanou nebo historicky nanesenou
funkcionalitu, která dnes nemusí být třeba a při přepisu by se dala
zahodit/zjednodušit
●
⇒ být radikálnější při hodnocení, co přepsat a co hackovat
MOC JSME HACKOVALI
LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu15
– struktura aplikace (členění tříd apod.)
– názvosloví (Abstract/Interface v názvech tříd, routy, servicy...)
– codestyle (u nás PSR2 + části Symfony coding standards)
●
zavést co nejdříve
– je skoro jedno, jaké budou (jen když zvolíte něco netypického tak si možná ztížíte
zapracování nováčků), musí být ale jednotné
●
co jde, hlídat na CI serveru, zbytek v code-review
– v code-review neztrácet čas tím, co jde hlídat automatizovaně!
– na codestyle PHP_CodeSniffer a php-cs-fixer
●
změna konsensu je v pořádku, musí se to ale pak hned sjednotit
– sjednotit napříč aplikací a nejlépe přidat pravidlo do codestyle checků
KONVENCE FTW
LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu16
●
performance měřit od začátku
– aby později bylo srovnání v čase
●
https://blackfire.io/ + performance assertions
●
lazy services v Symfony DIC
MĚŘENÍ PERFORMANCE
když se performance nehlídá automatizovaně, může
si člověk aplikaci zpomalit a ani si toho nevšimne...
LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu17
FUNKČNÍ TESTY
●
Často se na ně zapomíná, jsou ale
nezbytnou součástí continuous integration
●
Článek o tom, k čemu čemu funkční testy:
http://prvnivcesku.cz/systemove-testovani/
●
Když doděláme nějakou část webu,
napíšeme funkční testy na hlavní scénáře
●
Klidnější spaní vývojářů
– když testy projdou, minimalizuje se šance, že se
v aplikaci něco rozbilo
●
Vlastní nástroj Steward
– PHPUnit + Selenium
– lmc-eu/steward
x
y
LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu18
●
součást aplikace:
– FrontBundle, BackBundle, CompaniesBundle
●
samostatné, sdílené v LMC
– ApiBundle, LoggingBundle, CacheBundle, UserBundle
– semver, nebo se z toho zblázníš
– satis/Toran Proxy, nebo se upíšeš
NAŠE BUNDLY
LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu19
●
controllery nemáme jako service – volíme pragmatičtější přístup
●
private/protected metody v controlleru
– zlo, mělo by se to zakázat, když už má smysl něco vyčlenit do metody, nemá to
být neotestované a netestovatelné v controlleru
●
services definované v xml
– lépe se popisuje sématika, doporučoval nám to i Hugo Hamon na školení a osvědčilo se to
●
vlastní DataCollector do Symfony Profileru
– šel vcelku snadno napsat, nebojte se toho
●
solarium + solarium bundle
●
pagerfanta + pagerfanta bundle
●
FOSJsRoutingBundle
– export otagovaných rout do javascriptu, kde se pak dají sestavovat URL podobně jako ve twigu
●
PhpStorm + Symfony plugin
RANDOM – RŮZNÉ POZNATKY
Ondra Machulda
@OndraM

Más contenido relacionado

Similar a Ondra Machulda - Jak jsme přepisovali Jobs.cz na Symfony (1. sraz přátel Symfony v Praze)

Deployment PHP aplikací | WebExpo 2011
Deployment PHP aplikací | WebExpo 2011Deployment PHP aplikací | WebExpo 2011
Deployment PHP aplikací | WebExpo 2011
Jan Mittner
 
Rich Internet Applications 2009 (Czech)
Rich Internet Applications 2009 (Czech)Rich Internet Applications 2009 (Czech)
Rich Internet Applications 2009 (Czech)
Pavel Růžička
 
DisCo 2013: Vlasák a Císařová a Kopetschke - Advanced Learning Space bilance ...
DisCo 2013: Vlasák a Císařová a Kopetschke - Advanced Learning Space bilance ...DisCo 2013: Vlasák a Císařová a Kopetschke - Advanced Learning Space bilance ...
DisCo 2013: Vlasák a Císařová a Kopetschke - Advanced Learning Space bilance ...
8th DisCo conference 2013
 
Odpoledne se Seznamem II - Provozní bezpečnost
Odpoledne se Seznamem II - Provozní bezpečnostOdpoledne se Seznamem II - Provozní bezpečnost
Odpoledne se Seznamem II - Provozní bezpečnost
chaplin06
 
Strasti a slasti vývoje wp7 aplikací
Strasti a slasti vývoje wp7 aplikacíStrasti a slasti vývoje wp7 aplikací
Strasti a slasti vývoje wp7 aplikací
René Stein
 
20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně
Jiří Mareš
 

Similar a Ondra Machulda - Jak jsme přepisovali Jobs.cz na Symfony (1. sraz přátel Symfony v Praze) (18)

Product API in MallGroup
Product API in MallGroupProduct API in MallGroup
Product API in MallGroup
 
Data Restart 2023: Viet Anh Chu Jakub Kříž - Od teorie k praxi: Efektivní prá...
Data Restart 2023: Viet Anh Chu Jakub Kříž - Od teorie k praxi: Efektivní prá...Data Restart 2023: Viet Anh Chu Jakub Kříž - Od teorie k praxi: Efektivní prá...
Data Restart 2023: Viet Anh Chu Jakub Kříž - Od teorie k praxi: Efektivní prá...
 
Prohlášení informatiků Úřadů práce ČR k současnému stavu na ÚP ČR
Prohlášení informatiků Úřadů práce ČR k současnému stavu na ÚP ČR Prohlášení informatiků Úřadů práce ČR k současnému stavu na ÚP ČR
Prohlášení informatiků Úřadů práce ČR k současnému stavu na ÚP ČR
 
Entity Framework: Optimalizace a záludnosti
Entity Framework: Optimalizace a záludnostiEntity Framework: Optimalizace a záludnosti
Entity Framework: Optimalizace a záludnosti
 
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
 
Deployment PHP aplikací | WebExpo 2011
Deployment PHP aplikací | WebExpo 2011Deployment PHP aplikací | WebExpo 2011
Deployment PHP aplikací | WebExpo 2011
 
Bezpečnost WordPress pro začátečníky
Bezpečnost WordPress pro začátečníkyBezpečnost WordPress pro začátečníky
Bezpečnost WordPress pro začátečníky
 
Rich Internet Applications 2009 (Czech)
Rich Internet Applications 2009 (Czech)Rich Internet Applications 2009 (Czech)
Rich Internet Applications 2009 (Czech)
 
DisCo 2013: Vlasák a Císařová a Kopetschke - Advanced Learning Space bilance ...
DisCo 2013: Vlasák a Císařová a Kopetschke - Advanced Learning Space bilance ...DisCo 2013: Vlasák a Císařová a Kopetschke - Advanced Learning Space bilance ...
DisCo 2013: Vlasák a Císařová a Kopetschke - Advanced Learning Space bilance ...
 
2015 09 08 - vkp - ka_i
2015 09 08 - vkp - ka_i2015 09 08 - vkp - ka_i
2015 09 08 - vkp - ka_i
 
Rockaway AWS Hackaton – Kick-off Meeting
Rockaway AWS Hackaton – Kick-off MeetingRockaway AWS Hackaton – Kick-off Meeting
Rockaway AWS Hackaton – Kick-off Meeting
 
Bezpečnost Wordpressu - 4. WP konference
Bezpečnost Wordpressu - 4. WP konferenceBezpečnost Wordpressu - 4. WP konference
Bezpečnost Wordpressu - 4. WP konference
 
Odpoledne se Seznamem II - Provozní bezpečnost
Odpoledne se Seznamem II - Provozní bezpečnostOdpoledne se Seznamem II - Provozní bezpečnost
Odpoledne se Seznamem II - Provozní bezpečnost
 
Strasti a slasti vývoje wp7 aplikací
Strasti a slasti vývoje wp7 aplikacíStrasti a slasti vývoje wp7 aplikací
Strasti a slasti vývoje wp7 aplikací
 
Malware Houdiny
Malware HoudinyMalware Houdiny
Malware Houdiny
 
Moderní Server Side UI Rendering v PHP
Moderní Server Side UI Rendering v PHPModerní Server Side UI Rendering v PHP
Moderní Server Side UI Rendering v PHP
 
Ndk
NdkNdk
Ndk
 
20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně
 

Más de Péhápkaři

Más de Péhápkaři (20)

Startup vs korporace vs Previo
Startup vs korporace vs PrevioStartup vs korporace vs Previo
Startup vs korporace vs Previo
 
RabbitMQ a ElasticSearch v Previu
RabbitMQ a ElasticSearch v PreviuRabbitMQ a ElasticSearch v Previu
RabbitMQ a ElasticSearch v Previu
 
Martin Froněk - Jak využít soft skills ve svůj prospěch 2 (15. sraz přátel PH...
Martin Froněk - Jak využít soft skills ve svůj prospěch 2 (15. sraz přátel PH...Martin Froněk - Jak využít soft skills ve svůj prospěch 2 (15. sraz přátel PH...
Martin Froněk - Jak využít soft skills ve svůj prospěch 2 (15. sraz přátel PH...
 
Čtvrtkon #53 - Štěpán Zikmund
Čtvrtkon #53 - Štěpán ZikmundČtvrtkon #53 - Štěpán Zikmund
Čtvrtkon #53 - Štěpán Zikmund
 
Václav Makeš - Infrastructure as code - Jak nahazovat stroje a nic moc nevědě...
Václav Makeš - Infrastructure as code - Jak nahazovat stroje a nic moc nevědě...Václav Makeš - Infrastructure as code - Jak nahazovat stroje a nic moc nevědě...
Václav Makeš - Infrastructure as code - Jak nahazovat stroje a nic moc nevědě...
 
Tomáš Klíma - Implementace BitCoinut v praxi (13. sraz přátel PHP v Praze)
Tomáš Klíma - Implementace BitCoinut v praxi (13. sraz přátel PHP v Praze)Tomáš Klíma - Implementace BitCoinut v praxi (13. sraz přátel PHP v Praze)
Tomáš Klíma - Implementace BitCoinut v praxi (13. sraz přátel PHP v Praze)
 
PHP Evening #1 - Automatizace [Jan Klat]
PHP Evening #1 - Automatizace [Jan Klat]PHP Evening #1 - Automatizace [Jan Klat]
PHP Evening #1 - Automatizace [Jan Klat]
 
PHP Evening #1 - Propel ORM [Martin Sojka]
PHP Evening #1 - Propel ORM [Martin Sojka]PHP Evening #1 - Propel ORM [Martin Sojka]
PHP Evening #1 - Propel ORM [Martin Sojka]
 
Tomáš Kazatel - Jsme přece vývojáři, ne textaři (12. sraz přátel PHP v P...
Tomáš Kazatel - Jsme přece vývojáři, ne textaři (12. sraz přátel PHP v P...Tomáš Kazatel - Jsme přece vývojáři, ne textaři (12. sraz přátel PHP v P...
Tomáš Kazatel - Jsme přece vývojáři, ne textaři (12. sraz přátel PHP v P...
 
Jakub Kratina - Když si dva vývojáři založí s.r.o. (12. sraz přátel PHP v Pra...
Jakub Kratina - Když si dva vývojáři založí s.r.o. (12. sraz přátel PHP v Pra...Jakub Kratina - Když si dva vývojáři založí s.r.o. (12. sraz přátel PHP v Pra...
Jakub Kratina - Když si dva vývojáři založí s.r.o. (12. sraz přátel PHP v Pra...
 
Petr Pavel - Co musí programátor umět kromě programování (12. sraz přátel PHP...
Petr Pavel - Co musí programátor umět kromě programování (12. sraz přátel PHP...Petr Pavel - Co musí programátor umět kromě programování (12. sraz přátel PHP...
Petr Pavel - Co musí programátor umět kromě programování (12. sraz přátel PHP...
 
Tomáš Strejček - Velikost týmu vs. monolith a mikroservicy (11. sraz přátel ...
Tomáš Strejček - Velikost týmu vs. monolith a mikroservicy  (11. sraz přátel ...Tomáš Strejček - Velikost týmu vs. monolith a mikroservicy  (11. sraz přátel ...
Tomáš Strejček - Velikost týmu vs. monolith a mikroservicy (11. sraz přátel ...
 
Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...
Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...
Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...
 
Jakub Kratina - Jak testovat aplikace s radostí díky Codeception (11. sraz př...
Jakub Kratina - Jak testovat aplikace s radostí díky Codeception (11. sraz př...Jakub Kratina - Jak testovat aplikace s radostí díky Codeception (11. sraz př...
Jakub Kratina - Jak testovat aplikace s radostí díky Codeception (11. sraz př...
 
Ako nespáliť server - Monit [Jozef Lami] (7. sraz, Praha)
Ako nespáliť server - Monit [Jozef Lami] (7. sraz, Praha)Ako nespáliť server - Monit [Jozef Lami] (7. sraz, Praha)
Ako nespáliť server - Monit [Jozef Lami] (7. sraz, Praha)
 
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
 
Blackfire.io - Fire up your php app performance [Jan Kopp] (7. sraz, Praha)
Blackfire.io - Fire up your php app performance [Jan Kopp] (7. sraz, Praha)Blackfire.io - Fire up your php app performance [Jan Kopp] (7. sraz, Praha)
Blackfire.io - Fire up your php app performance [Jan Kopp] (7. sraz, Praha)
 
Automatizace jednoduše [Martin Zeman] (6. sraz, Praha, 31.3.2016)
Automatizace jednoduše [Martin Zeman] (6. sraz, Praha, 31.3.2016)Automatizace jednoduše [Martin Zeman] (6. sraz, Praha, 31.3.2016)
Automatizace jednoduše [Martin Zeman] (6. sraz, Praha, 31.3.2016)
 
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)
 
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...
 

Ondra Machulda - Jak jsme přepisovali Jobs.cz na Symfony (1. sraz přátel Symfony v Praze)

  • 1. Ondra Machulda @OndraM Jak jsme přepisovali Jobs.cz na Symfony 1. sraz přátel Symfony Praha 29. říjen 2015 Anotovaná verze přednášky
  • 2. LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu2 CREDIT GOES TO... @jirka_novak @robinpokorny @s7anley @vvondra @krejcek @cizinskamartina @davidkmenta @PopluharPeter
  • 3. Takto vypadaly Jobs.cz do září 2014. Design se od roku 2005 změnil jen málo; vnitřnosti byly sice trochu novější, ale také letité.
  • 4. Titulka Jobs.cz od října 2014
  • 5. Titulka i nové části webu jsou responzivní. Teď máme ještě i mobilní verzi m.jobs.cz, kterou ale chceme brzy vypnout.
  • 6. LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu6 ● postupně nahrazujeme jednotlivé části – přepsat to najednou by nešlo – trvalo by to hrozně dlouho a nemohli bychom to průběžně testovat – napíšeme novou část, vyzkoušíme na části lidí, vyladíme a pak tam pošleme všechny – starou část pak necháme „vyhnít“, neztrácíme čas mazáním – až budou přepsané všechny části, odstraníme rovnou celou starou aplikaci ● 28. července 2014 – první commit nových Jobs.cz ● 1. říjen 2014 – titulka, login, Inspirace a rady – i zbytek Jobs.cz obalený „novým“ designem (ale pouze v desktopové neresponzivní variantě) ● listopad, prosinec – detail inzerátů, odpovídání ● duben-červen 2015 – opt-in beta hledání, postupné dodělávání a testování funkcionalit ● červenec – opt-out beta hledání ● srpen – nové hledání spuštěno prakticky všem ● říjen – hledání brigád, vypnutí starého hledání JAK ŠEL ČAS
  • 7. LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu7 ● na to, že se na první pohled jedná o pár stránek to ale vypadá, že jsme to na Symfony přepisovali dlouho – nepředělávali jsme ale jen PHP backend ● backend – přepis z interního frameworku na Symfony – search engine z Microsoft FAST na Apache SOLR ● frontend – responzivita + částečný redesign (vč. uživatelského a A/B testování) – Twig – React.js (vyhledávací pole, filtry) ● přešli jsme z dvoutýdenních releasů na continuous delivery – což klade na aplikace také trochu jiné nároky CO JSME PŘEDĚLÁVALI
  • 8. LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu8 LESSONS LEARNED co jsme se naučili, co nám pomohlo, co bychom dělali jinak
  • 9. LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu9 ● novou aplikaci jsme měli v repozitáři spolu se starou – což v několika případech vedlo k provázání mezi nimi (hardcoded autoloading kvůli šablonám, javascript byl u staré aplikace aj.) ● provázání staré <=> nové = katastrofa ● všechny závislosti musí být transparentní ● nezávislost i za cenu dočasné duplikace kódu – i když má člověk nutkání nedávat si do nové aplikace nic „nečistého“, nepřepsaného ze staré (všechno ale nejde přepsat hned) ZÁVISLOSTI ODDĚLIT CO NEJDŘÍVE
  • 10. LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu10 ● UI pattern library (styleguide) – http://www.jobs.cz/ui/ ● instalovaná přes bower (=> oddělená závislost) ● ve starých i nových Jobs.cz NEZÁVISLÁ UI KNIHOVNA
  • 11. LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu11 ● začalo se v něm psát už dříve – jakmile člověk předpokládá, že bude přepisovat do Symfony, může začít psát šablony ve Twigu ● Twig jde snadno napasovat kamkoliv – do jiného frameworku i do vlastní legacy aplikace ● šablony se pak snadno přesunou TWIG
  • 12. LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu12 ● přenositelné komponenty jde psát i do „staré“ aplikace – když člověk zdědí starou „zbastlenou“ aplikaci, svádí to k tomu do ní nové věci také bastlit „postaru“ – to je ale chyba – psaním přenositelných komponent si člověk může ušetřit práci do budoucna, až bude přecházet na novou aplikaci ● tedy hlavně: transparentní závislosti, testy (!), „čisté“ třídy bez stromu závislostí aj. – dělat DI jde i bez kontejneru – „dependency injection pro chudé“ ● jejich přesun je pak snazší – přidáte do service containeru, pustíte testy a máte hotovo NEČEKAT S PSANÍM PŘENOSITELNÝCH KOMPONENT
  • 13. LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu13 ŠKOLENÍ SYMFONY ● když člověk začíná s novou technologií, často nestojí první věc co v ní udělá za moc – to jsme si ale nemohli dovolit ● školení od Hugo Hamona ze Sensia nás v mnoha věcech nasměrovalo dobrým směrem a zabránilo různým začátečnickým chybám
  • 14. LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu14 ● dělali jsme napojení na historické interní backoffice systémy – nechtěli jsme ztrácet čas jejich přepisem – přepis se navíc špatně businessově obhajuje – ve výsledku jsme ale propojováním (systémy moc nemají dokumentaci ani rozumné API), opravou následných bugů a nepohodlnou prací s nimi možná strávili více času, než kdybychom to přepsali ● ne vše ze starých systémů je třeba – často obsahují robustní, komplikovanou nebo historicky nanesenou funkcionalitu, která dnes nemusí být třeba a při přepisu by se dala zahodit/zjednodušit ● ⇒ být radikálnější při hodnocení, co přepsat a co hackovat MOC JSME HACKOVALI
  • 15. LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu15 – struktura aplikace (členění tříd apod.) – názvosloví (Abstract/Interface v názvech tříd, routy, servicy...) – codestyle (u nás PSR2 + části Symfony coding standards) ● zavést co nejdříve – je skoro jedno, jaké budou (jen když zvolíte něco netypického tak si možná ztížíte zapracování nováčků), musí být ale jednotné ● co jde, hlídat na CI serveru, zbytek v code-review – v code-review neztrácet čas tím, co jde hlídat automatizovaně! – na codestyle PHP_CodeSniffer a php-cs-fixer ● změna konsensu je v pořádku, musí se to ale pak hned sjednotit – sjednotit napříč aplikací a nejlépe přidat pravidlo do codestyle checků KONVENCE FTW
  • 16. LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu16 ● performance měřit od začátku – aby později bylo srovnání v čase ● https://blackfire.io/ + performance assertions ● lazy services v Symfony DIC MĚŘENÍ PERFORMANCE když se performance nehlídá automatizovaně, může si člověk aplikaci zpomalit a ani si toho nevšimne...
  • 17. LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu17 FUNKČNÍ TESTY ● Často se na ně zapomíná, jsou ale nezbytnou součástí continuous integration ● Článek o tom, k čemu čemu funkční testy: http://prvnivcesku.cz/systemove-testovani/ ● Když doděláme nějakou část webu, napíšeme funkční testy na hlavní scénáře ● Klidnější spaní vývojářů – když testy projdou, minimalizuje se šance, že se v aplikaci něco rozbilo ● Vlastní nástroj Steward – PHPUnit + Selenium – lmc-eu/steward x y
  • 18. LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu18 ● součást aplikace: – FrontBundle, BackBundle, CompaniesBundle ● samostatné, sdílené v LMC – ApiBundle, LoggingBundle, CacheBundle, UserBundle – semver, nebo se z toho zblázníš – satis/Toran Proxy, nebo se upíšeš NAŠE BUNDLY
  • 19. LMC s.r.o. Lighthouse Towers, Jankovcova 1569/2c, 170 00 Praha 7, Tel.: +420 224 810 053, www.lmc.eu19 ● controllery nemáme jako service – volíme pragmatičtější přístup ● private/protected metody v controlleru – zlo, mělo by se to zakázat, když už má smysl něco vyčlenit do metody, nemá to být neotestované a netestovatelné v controlleru ● services definované v xml – lépe se popisuje sématika, doporučoval nám to i Hugo Hamon na školení a osvědčilo se to ● vlastní DataCollector do Symfony Profileru – šel vcelku snadno napsat, nebojte se toho ● solarium + solarium bundle ● pagerfanta + pagerfanta bundle ● FOSJsRoutingBundle – export otagovaných rout do javascriptu, kde se pak dají sestavovat URL podobně jako ve twigu ● PhpStorm + Symfony plugin RANDOM – RŮZNÉ POZNATKY