Doctrine 2 není pomalá!*

*pokud ji umíte používat a správně si ji nakonfigurujete

Rozmáhá se nám tu takový nešvar. Čas od času se objeví někdo s tvrzením, že Doctrine je pomalá a tudíž nepoužitelná na reálných projektech. Tento omyl plyne z několika mýtů, kterými je Doctrine 2 opředená.

Jak už jsem psal před třemi a půl lety, hlavní motivace pro používání ORM je reprezentace dat z databáze v aplikaci prostřednictvím konzistentních objektů. Objektů, které nejsou obecné univerzální hashmapy s neznámým obsahem, ale objektů, které mají pevné dané rozhraní a tudíž vím, jaká data z nich mohu získat a jak s nimi manipulovat. Po ORM tedy nechci, aby mi ušetřilo psaní SQL dotazů a nechci ani odstínit od konkrétní databáze, kterou používám. Mohu si tedy dovolit optimalizovat výběr dat velmi podobně, jako s jinými “lightweight” knihovnami, které podle výše odkazovaných zlých jazyků již pomalé nejsou.

Pokud tedy chci výkonnou aplikaci, nenechávám většinu SQL dotazů generovat Doctrine, ale píšu je sám za pomoci DQL, což je příbuzný jazyk, který Doctrine používá. Namísto tabulek sloupců se v něm odkazujete na entitní třídy a atributy. Je snadno rozšiřitelný, což se hodí, pokud potřebujete využít nějakou vlastnost vaší databáze, kterou DQL v základu nepodporuje.

V případě, že chci z databáze vybrat data pouze pro čtení (typicky pro výpis v šabloně), není třeba přenášet celé objekty. V takovém případě v DQL vyjmenuji sloupce, které mě zajímají a Doctrine mi výsledek dotazu vrátí v obyčejných polích. Díky DQL se dá vyhnout i 1+N problému (lazy loading uvnitř cyklu). Avšak od určité návštěvnosti si nemůžete dovolit stále sahat na čerstvá data z databáze s žádným nástrojem a musíte nasadit aplikační cachování tak jako tak.

Odpůrci Doctrine často argumentují tím, že je to moloch. Nevím, co tím přesně myslí. Asi se jim nelíbí, že jsou její zdrojáky v mnoha souborech, a je jim daleko sympatičtější přístup mPDF. V každém případě ale velikost knihovny nemá dopad na výkon, pokud si zapnete a správně nakonfigurujete OpCache, která výrazně ulehčí práci PHP.

Dále byste si na produkci měli vypnout automatické generování proxy tříd:

$config->setAutoGenera­teProxyClasses(FAL­SE);

Doctrine jinak totiž bude při každém požadavku pro každou entitu generovat proxy (sloužící k lazy loadingu), což je, ano, pomalé.

Také je třeba nastavit cache pro metadata (konfigurace entit) a zkompilované DQL dotazy. Viz výpis všech dostupných driverů.

$cache = new \Doctrine\Com­mon\Cache\ApcCache();
$config->setMetadataCache­Impl($cache);
$config->setQueryCache­Impl($cache);

Správnost těchto nastavení vám ověří CLI command orm:ensure-production-settings.

Nejhorší nápad, jaký můžete dostat, je psát si vlastní ORM. Jedná se o neuvěřitelně komplexní a náročnou oblast. Problémy, které budete řešit, za vás již dávno vyřešili autoři Doctrine. Pokud ale máte dva roky čas na full-time vyvíjet vlastní ORM a myslíte si, že to zvládnete líp než oni, nebudu vám bránit.

Deprese softwarových vývojářů

Fascinující seriál popisující několik příběhů ze života v malých i velkých firmách. Ačkoli popisované překážky a problémy většina z nás nebere tak vážně, s jejich určitou variací se setkal snad každý.

Tablety, PC a Office

Benedict Evans o tom, jak jsou obecné nástroje typu Office postupně nahrazovány jednoúčelovými, ale efektivními aplikacemi, čímž klesá i potřeba klasických počítačů s klávesnicí a myší:

When I worked at Orange there was a multi-megabyte Excel file on the network drive called, I believe, ‘sum_of_x.xls’ containing complex macros and every major operating metric for the entire company, there for anyone who needed to analyze high-level data. That should probably not, really, be in Excel today.

The same applies to Powerpoint - it’s a very good tool for that 150 slide deck, but what if you’re making a 10-slide deck each week that consists entirely of operating metrics pulled out of a back-end system, manipulated in Excel and pasted into slides, plus commentary, that are emailed to 25 people? Shouldn’t that change from a 2 hour task to a SAAS dashboard and a 30-second task? And would it still need a mouse and keyboard?

Jak se webař stal mobilním vývojářem

Na své profesní dráze jsem si prošel několika fázemi. S programováním jsem začal naklikáváním a psaním jednoduchých okenních aplikací v C++Builderu. Pak přišlo připojení na Internet a já upřel svoji pozornost na web. Naučil jsem se HTML a vyzkoušel slepou větev v podobě Microsoft FrontPage. Dlouhou dobu jsem si s ním vystačil. Okolo roku 2005 jsem se začal učit PHP a vydělával si pravidelně pár tisíc korun malými zakázkami. Zároveň se začátkem studia na ČVUT FEL jsem se naučil Nette a ve druhém ročníku se přihlásil na inzerát do firmy, kde jsem zažil a stále zažívám největší posuny ve svých znalostech a dovednostech.

Moje pokroky v programování za posledních 15 let vždycky pramenily z toho, že jsem ostatním záviděl jejich výtvory a chtěl mít vlastní. Ať už šlo o zkompilované .exe soubory, webové stránky, redakční systémy, rozšíření do Nette – prostě všechno, co bylo v dané době středem mého zájmu.

Už tři a půl roku mám iPhone. Za tu dobu jsem si ke všem těm ikonkám na homescreen vytvořil vřelý vztah. Zblízka sleduju novinky o Applu a vím o všem, co se v iOS a Mac komunitě šustne. Vytříbil jsem si díky tomu smysl pro kvalitu a user experience, který se snažím aplikovat i při tvorbě webů.

Ale to mi samozřejmě nestačí. Potřeboval jsem zjistit, jak mobilní vývojáři dělají mé oblíbené aplikace. Nainstaloval jsem Xcode a začal se učit z přednášek ze Stanfordu. Napsal jsem si pár jednoduchých aplikací, abych pochopil probírané principy.

Mobilní vývoj je něco úplně jiného než web – nestačí odpovědět na bezstavový HTTP požadavek a umřít. Aplikace může běžet třeba i desítky minut a musí se chovat správně při libovolných kombinacích uživatelských vstupů. Náročné výpočty je třeba odsouvat do vedlejších vláken, protože uživatelské rozhraní musí být stále plynulé. Vše běží o hodně blíže železu a občas je to na nízkoúrovňovosti kódu poznat. Celé je to pořádná výzva a ty já rád.

Uživatel na telefonu nemá k dispozici klávesnici a myš, takže si neporadí s pekelně naprogramovanými formuláři, které jsou na webu běžné, ale veškerou funkcionalitu je potřeba detailně promyslet a připravit mu ji na zlatém podnose, ať svého cíle dosáhne co nejjednodušeji. Zatímco na webu vám projde, že za den vychrlíte čtyři formuláře, u kterých stačí, že se budou chovat nějak takhle, na iOS můžete strávit tvorbou jedné obrazovky třeba měsíc a nikdo se tomu nebude divit.

Po šesti měsících vývoje dnes vydávám svou první aplikaci, kterou jsem vyvinul společně s Michalem Langmajerem – jsme na ni pořádně pyšní. Pokud máte guláš v tom, kterým přátelům dlužíte a kdo dluží vám, určitě ji omrkněte.

SettleApp

Mobilní vývoj je pro mě zatím jen hobby na dlouhé zimní i letní večery, ale možná se z toho jednoho dne stane seriózní obživa. Držte mi palce!

Strukturovaná prokrastinace

Skutečně fungující lifehack, jak dosáhnout vysoké produktivity. Přišel jsem si na něj už dávno sám, ale je super ho vidět popsaný černý na bílém.

Ve zkratce jde o to, že pokud potřebujete udělat úkol X, najdete si zdánlivě daleko důležitější úkol Y, kterému se vyhýbáte a jehož prokrastinací dosáhnete dokončení úkolu X. Pokud poté potřebujete udělat Y, najdete si k vyhýbání urgentnější úkol Z.

Don't Just Eat Your Own Dog Food. Be The Dog!

Pokud chcete vytvářet skutečně užitečný software, musíte se na něj dívat očima jeho uživatelů.

Describe all you like how your job works, but the listener will never understand what it is like to be you doing that work. I’ve worked on tills during my student days, and there’s more to it than whoever wrote the software for them obviously knew. Which is why we often see till operators fighting against the software to get the job done.

Merlin Mann o životě, vesmíru a vůbec

Známý odborník na produktivitu, řečník a host populárních podcastů ve velmi otevřeném rozhovoru, který stojí za to přečíst, protože si z něj odnesete nejen střípky z Mannova života.

Několik vybraných citací:

I think we sometimes overlook things we don’t realize we’re already good at or have limited experience with. You may be beating yourself up about not having good enough grades in biology to go to medical school while overlooking the fact that you’ve been working in your family’s hardware store over the summer for eight years and have an extraordinary sense of how to deal with people.

How many people out there say, “Gosh, I wish I could own a house”? Everybody I know who owns houses are losing their minds trying to make their mortgage payment or they’re scared to death about having to replace the roof. Anybody who wants more money, a better job, or a bigger house is ultimately just wishing for a new set of anxieties.

There’s no reason to think that you would be able to do something that other people have spent years preparing for. It’s not realistic, yet you beat yourself up about it, so then you feel incapable of doing other things.

Hledání alternativy k Gmailu

Od doby, kdy Google zrušil svůj Reader, se od něj snažím odejít a decentralizovat služby, které používám. To, že za produkt mohu zaplatit, považuji za příjemnou a nikoli přitěžující okolnost, protože se tím přesouvám z pozice nabízeného zboží (kterému jsou zobrazovány reklamy) do pozice zákazníka.

Vedle RSS čtečky patří mezi mé nejpoužívanější aplikace samozřejmě e-mail. Zrušení Gmailu se nebojím, protože je to se stovkami milionů uživatelů jeden z nejpoužívanějších produktů Googlu. Ten se ho ale stále zoufaleji snaží monetizovat; např. již strká reklamy mezi řadové e-maily a zhoršuje použitelnost Google Talku, resp. nyní již Hangouts, jako Jabber klienta. Jelikož chci mít únikový plán pro případ dalšího mrzačení, jal jsem se ohlížet po alternativách.

Fastmail

Jako první jsem vyzkoušel Fastmail, který donedávna provozovala Opera. Četl jsem na něj hodně chvály, podle ohlasů na Internetu je to asi nejpoužívanější e-mail po Gmailu.

Bohužel jsem ve zkušební době narazil na několik fatálních nedostatků, které mi znemožňují na Fastmail přejít. Obecně mi přišlo, že jeho vývoj zamrzl před několika lety.

Import archivu e-mailů jsem musel dělat nadvakrát a využít při tom své znalosti IMAP protokolu, což si u běžných uživatelů neumím představit. Kromě serveru, jména a hesla se nastavuje ještě tzv. IMAP prefix. Když jsem provedl import s prefixem [Gmail] podle návodu, naimportovaly se mi jen e-maily bez štítku. Musel jsem ho spustit znovu bez prefixu, navzdory varování, že import byl navržen jen pro jednorázové spuštění, protože jinak by mohlo dojít k duplikaci e-mailů.

K tomu naštěstí nedošlo a všechny e-maily jsem úspěšně přesunul. Výsledné zaplnění schránky ± 50 MB odpovídalo tomu na Gmailu a při letmé kontrole jsem nalezl e-maily z různých období a v různých složkách tam, kde měly být.

E-mailová schránka je vstupní brána ke všem ostatním účtům, protože si do ní odevšad můžete nechat zaslat požadavek na zapomenuté heslo. Považuji tedy za nutnost mít nastavenou dvoufázovou autentizaci. Fastmail se tváří, že ji umí, ale oproti Gmailu nepředstavuje tak vysokou úroveň zabezpečení, jak bych si představoval. Podporuje několik alternativních metod přihlašování, ale společně s nimi stále funguje přihlášení hlavním heslem, které vám žádný bezpečnostní kód na mobil nezašle a rovnou vás přihlásí. Takové zabezpečení teoreticky umožňuje bruteforce útok, který u Gmailu principiálně není možný, protože po vás vždy chce opsat kód z SMS.

Rozhodl jsem se v sobě potlačit svého vnitřního Spazeho a tento nedostatek překousnout. Fastmail mi v nastavení umožnil zadat mé telefonní číslo, ale v momentě, kdy jsem do přihlašovacího formuláře zadal uživatelské jméno a heslo, které má spustit zaslání autorizační SMS, formulář vypsal chybu, že v ČR zatím SMSky nepodporuje. Aby mi o tom aplikace dala vědět již při jeho nastavování by asi bylo moc mainstream.

Dále jsem chtěl využít Jabber na vlastní doméně tak, jak ho mám u Googlu. Po letmém hledání v nastavení a na Internetu jsem dospěl k tomu, že pokud nechci používat @fastmail.fm doménu a nenutit všechny mé kontakty k opětovné autorizaci, musel bych přejít na Family tarif. Ten má ovšem horší parametry - za $40 ročně dostanete namísto 10 GB místa pouze 8 GB, což už je na hraně mých potřeb.

Moje trpělivost přetekla ještě předtím, než jsem začal Fastmail naplno využívat, takže jsem se rozhodl hledat dál.

Outlook.com

Slábnoucí pozice Microsoftu na trhu ho nutí k nevídaným věcem a je otevřenější než kdy předtím. Uměli jste si ještě před několika lety představit, že bude poskytovat službu ušitou na míru vývojářům konkurenční platformy a mít na webu videa s člověkem před Macbookem, který vysvětluje výhody Windows Azure pro iOS? Evilizace opouští Microsoft a požírá Google.

Při výběru náhrady za Gmail jsem tedy ochotný zvážit i odpověď Microsoftu. V jeho prospěch mluví i to, že údajně neskenuje e-maily - zobrazené reklamy nemají kontextem nic společného s tím, co vám chodí za poštu. Navíc má obchodní model postavený na bázi freemium - můžete si připlatit $20 ročně, aby vám žádné reklamy vůbec neukazoval. So far so good.

Nastavení služby je přehledné, ale zabugované. Na některé odkazy jsem musel kliknout několikrát, abych na ně mohl přejít. Jednou jsem v prohlížeči musel potvrdit “načíst nezabezpečený skript”, abych se dostal do další sekce.

Nastavení dvoufázové autentizace proběhlo bez problémů a je na úrovni Gmailu. Včetně app-specific hesel pro klienty, které ji nepodporují.

Příjemně mě překvapil iOS přímou podporou Outlook.com při přidávání účtu do systému, takže jsem nemusel opisovat žádné názvy serverů ani porty. Zabudovaná aplikace Mail pro Outlook.com podporuje push notifikace, takže se o e-mailu dozvím okamžitě a ne v patnáctiminutových obnovovacích intervalech, což se o Gmailu říct nedá.

Horší to je s importem e-mailů. Sám Microsoft na svém webu odkazuje na vlastní službu TrueSwitch, která ovšem byla zrušena. E-maily lze vždy přesunout ručně v běžném mailovém klientovi díky IMAPu, ale stejně bych tu práci radši přenechal automatizovanému nástroji.

Absence doménového koše není problém. Když jsem se včera vůbec poprvé podíval do koše v Google Apps, 99% e-mailů nebylo určených mně, šlo jen o spam. Bez něj se obejdu.

Poštu jsem si tedy přemigroval k Microsoftu a zatím s tím žádný další problém nemám. V oprošťování se od okovů Googlu se chystám pokračovat. Další na řadě bude instant messaging.