Linux na Windows

Neptejte se mě proč, sám z toho občas nejsem nadšený, ale jako jeden z posledních lidí na světě jsem stále na Windows. V praxi se s nimi dá žít, ale nebudu zastírat, že souhlasím s filosofií “čím linuxovatější, tím pro vývoj lepší“. Dobře to uchopil Mac, kterému se historicky podařilo skloubit dobrý hardware, použitelné uživatelské prostředí a unixový základ systému. Pro mě osobně je pak ještě lákavější Linux, zvlášť v době zařízení typu Dell XPS 13 Developer Edition, ale případné úvahy na toto téma nechme na jindy. Teď bych se chtěl podívat na to, jak jsou na tom Windows s linuxovými nástroji dnes.

“Linux” jde do systému dostat třemi základními způsoby:

  1. Cygwin nebo MSYS2, v podstatě emulace UNIX-like / POSIX prostředí. Mimochodem, v MSYS2 je plný pacman, package manager z Arch linuxu, takže je to docela ‘real deal’.
  2. Git for Windows, se kterým přijde “Git Bash”. Do začátku dobrá a jednoduchá možnost, založená na MSYS2 (zde jsou detaily).
  3. Windows Subsystem for Linux (WSL), známý především skrze “Bash on Ubuntu on Windows” (Microsoft pojmenování vždycky uměl!).

První dvě možnosti jsou dobré v tom, že z cmd.exe lze snadno dělat věci jako rm -rf nebo grep, aktivně to využívám a už to Windows povyšuje na jinou úroveň.

Hodně zajímavá je ale třetí možnost, WSL. To je totiž (zjednodušeně řečeno) plné Ubuntu běžící “nativně” ve Windows. WSL emuluje Linux kernel a umožňuje spouštět normální Linux binárky, takže třeba když donedávna pro Windows chyběl kubectl klient, šlo ho doinstalovat pomocí apt-get install a frčet. Další důležitý use case je výkon, např. přefiltrovat Git historii je daleko rychlejší ve WSL než v Git for Windows. Nevýhodou pak je, že je to v podstatě systém v systému: binárky se instalují dvakrát, sync mezi počítači si jinak řeší Windows a Ubuntu, apod.

Windows (včetně WSL) mají ještě jeden zásadní problém, a to je výkon. Např. Git operace jsou na čistém Linuxu rychlejší minimálně o řád. Nevím, jestli to je pomalostí NTFS nebo je něco špatně v jádře Windows, ale zatímco lehký opruz se zpětnými lomítky, tupým základním shellem apod. se dá řešit, výkon bohužel ne.

Naštěstí se poslední dobou dějí v Microsoftu věci. Pro samostatný blog post si nechám to, co dělají kolem Gitu, a zatím postnu toto:

NTFS změny v příštích Windows

Nebo se podívejte na tento komentář na GitHubu. V Microsoftu vědí, že mají problém, a snaží se. Celkem nemám pochybnosti, že technicky se stanou velké věci: např. nativní běh Dockeru na WSL je IMO jen otázkou času (a byla by to pecka!). Pak je ještě otázka, nakolik se podaří propojit historicky dva oddělené světy, například bych si ve svém oblíbeném klikacím Git klientovi rád nastavil git binárku tu z Linuxu, půjde to? A kde se bude ukládat klíč k GitHub účtu, ve Windows Credential Storu nebo v Linuxovém ekvivalentu? Frikci bohužel očekávám a “Mac je stále Mac”, ale za posledních mnoho let je zrovna teď čas, kdy je naděje na vývojářsky silné Windows asi největší.

VersionPress na WordCampu v Praze

Minulou sobotu proběhl WordCamp v Praze, kde už docela tradičně ukazujeme progres VersionPressu za poslední dobu a kde mi taky pravidelně failují dema 🙂

Moje prezentace (spíš doprovodná k obecnému povídání; co na plat, když mě dali do místnosti pro uživatele):

A skvělá technická prezentace Honzy Voráčka:

Mimochodem, zrovna dneska je pro VersionPress velký den, na hostovaném prostředí s pracovním názvem ‘versionpress.com’ běží první externí web, a to hned pořádný: GripTV. Někdy o tom napíšu víc.

VS Code

Není to tak dávno, co jsem si myslel, že na poli IDEček a editorů nás už nic zajímavého nečeká. Kdo chtěl chytré, ale “těžké” IDE, měl něco od JetBrains nebo Visual Studio, a kdo preferoval lehčí editory, měl něco jako Vim, Sublime Text nebo Atom. Tyto editory sice šly nějakou chytrostí dovybavit, ale rozdíl byl v praxi pořád citelný.

VS Code

Pak přišlo Visual Studio Code. To navzdory svému jménu nemá s plným Visual Studiem nic společného (zaplať pánbůh!), vzniklo od nuly a podle mě dokonale trefuje balanc mezi editorem a IDEčkem. Jeho základní charakteristiky:

  • Je velmi “text-oriented” a působí lehce, ve stylu Sublime Textu.
  • Obsahuje dvě klíčové IDE funkce: code intelligence vč. refaktoringu (pro pár jazyků out of the box, ostatní skrze rozšíření) a umí debugovat.
  • Je celé napsané v TypeScriptu a zabalené do Electronu, takže běží všude, od Macu po Linux. (BTW rychlost není problém – nevím, jak je na tom Atom teď, ale před rokem to byla docela katastrofa; Code je rychlý.)
  • Má jednoduchý extensibility model a už dnes pro něj existují mraky šikovných rozšíření.

Code je navíc fascinující příklad projektového managementu, určitě u open source projektu a možná i obecně: na GitHubu mají iterační plány (pro zajímavost, vede je Erich Gamma) a objem změn doručených každý měsíc je úctyhodný, např. změny v 1.8 nebo 1.9. Zkrátka love produkt, no.

Jak použitelný je Code na vývoj právě teď, a dokáže už nahradit “velká IDEčka”?

  • Pro TypeScript / JavaScript / Node.js bych řekl, že úplně v pohodě. WebStorm už moc velkou přidanou hodnotu nemá.
  • PHP: díky rozšířením Felixe Beckera to není špatné, ale sílu PhpStormu to zatím nemá. Microsoft pro mě trochu nepochopitelně PHP roky zanedbával, ale už píší tolerant PHP parser.
  • C# (osobně v tom už nic nedělám ani dělat neplánuju, ale pro úplnost): veškerou chytrost dodává OmniSharp, podpora je tedy dobrá.
  • Přehled dalších jazyků podporovaných skrze extensiony je tady.

A na závěr pár tipů na rozšíření:

  • Settings Sync – nutnost, pokud člověk používá Code na více počítačích. Synchronizuje nastavení skrze Gist.
  • Rozšíření pro Git: nejužitečnější je GitLens, šikovná drobnost pak Open in GitHub.
  • EditorConfig – povinnost.
  • Markdown Shortcuts pro Ctrl+B, Ctrl+I a podobné.
  • REST Client je super, skoro zvažuju, jestli do .http souborů nepřepsat naše API Blueprinty 😃
  • No a pak už jen různá rozšíření specifická pro různé jazyky a technologie, např. Terraform, Docker apod.

Code rozhodně zkuste, má velkou budoucnost.

Startup

Kromě technických věcí sem budu psát i střípky z VersionPressu jakožto firmy, kde se dřív nebo později musím vypořádat se slovem startup. Napůl je to jedno, protože to slovo je poměrně subjektivní, na druhou stranu mi vadí, jak je (aspoň zde v ČR) používáno pro firmy, které startupy nejsou, nebo naopak není používáno tam, kde by dobře vystihlo situaci.

Asi nejslavnější definice od Paula Grahama zní “a startup is a company designed to grow fast“. Měl jsem s ní vždycky trochu problém, protože se v ní nevyskytují slova, které si se startupem intuitivně spojuji, např. inovativnost, riskantnost atd., ale je v podstatě velmi dobrá. Startup je totiž snaha udělat něco velkého, a pokud má jedna firma během pár let změnit, jak se lidi ubytovávají na cestách, jak hledají letenky, jak fungují taxíky apod., je masivní růst jedinou možností. Že na to musejí jít inovativně, že to skoro určitě nepůjde ufinancovat běžnými prostředky, že je to extrémně nepravděpodobné apod., to všechno z toho jen vyplývá.

Startup zkrátka není jen jiné slovo pro firmu. Česká republika nemá mnoho skutečných globálních startupů, asi nejlepším příkladem z poslední doby je Apiary:

  • Vznikli v roce 2011.
  • Několikrát málem zkrachovali, celé to pohromadě udrželi holýma rukama.
  • V podstatě pořád ve ztrátě, firma žila z více než 200 milionů korun investorských peněz.
  • Letos je koupil Oracle za víc než miliardu.

Můžete si o tom myslet cokoliv, třeba že “být ve ztrátě je špatně”, ale ono to má všechno svou vnitřní logiku, jen není moc zřejmá (dobrý námět na budoucí blog posty..). Ale vybudovat za šest let něco, co někdo reálně koupí za miliardu.. no zkuste si to sami.

VersionPress je tzv. early-stage startup. Jako projekt vznikl pár let zpátky, jako startup bych ho označil od podzimu 2015 po vstupu investorů. Trochu nám trvalo si ujasnit, co vlastně bude náš reálný produkt (VersionPress jako takový je open source na GitHubu; náš reálný produkt jsou různé cloudové služby okolo), ale přesně o tomto hledání první fáze života startupu je. Letos se ukáže, jestli budu moct psát zkušenosti i z pozdějších etap vývoje 😃

Mimochodem, pokud vás k tématu startupů zajímá víc, tento čtvrtek se v rámci Topmonks Caffe uskuteční “Startup Evening”, kde vystoupí Andrej Kiska z Credo Ventures (naši investoři), který dokáže startupy popsat velmi přesně (a tvrdě!), vedle něj pak ještě Cedric Maloux ze StartupYardu a Filemon z Topmonks. Doporučuji!

Nexus 5X

O Vánocích, co čert nechtěl, se mi rozbil mobil. Neměním je často, chovám se k nim dobře a moje filosofie obecně je “radši koupit drahý high-end než se trápit s levným Androidem” (jsem tomuto systému oddaný, iPhonista ze mě nebude). Teď jsem ale narychlo potřeboval něco pořídit a dávat za to dvacku se mi nechtělo.

Ideální příležitost zkusit čistou Android experience, řekl jsem si, a odpoledne mi na stole přistál Nexus 5x. Oproti Xperii je to hrozný rozvrzaný plasťáček, ale ten software, přátelé, ten software!

Sony má údajně jednu z nejlehčích nadstaveb (nevím, přehled v mnoha značkách nemám) a ani jsem to nevnímal moc otravně, ale čistý Android je o nějakých 10, 20% “čistší” a to dělá pro uživatelský prožitek ohromný rozdíl. Hardwarově je Nexus podstatně slabší než Xperia, ale foťák naběhne asi 10x rychleji (to si nedělám srandu; focení mě vůbec na Xperii zklamalo nejvíc), start aplikací jakbysmet, nikde žádný Sony-spam, novinky v Nugátu jsou boží (většina non-Google zařízení stále čeká) a celý systém vůbec pracuje krásně svižně.

Můj příští telefon bude Pixel 2 (pokud na něj teda budu mít; ty ceny se nějak zvrhávají).

Monorepo

Dva týdny zpátky jsme ve VersionPressu přešli na monorepo, tj. jedno velké repo namísto řady menších. Byl to interně trochu kontroverzní krok a i na webu se najdou silné názory na obě strany, tak sem hodím pár našich poznámek a zkušeností. (Ahoj Alice!)

Proč monorepo?

Jednou větou hlavně proto, že nás už štvala režie kolem správy více repozitářů. V reálu jen jejich kombinace reprezentovala projekt jako celek, jedna logická změna byla často v několika pull requestech v různých repech, nebylo vždy jasné, kde vůbec založit issue, atd.

Zbytečný overhead.

Na co myslet

Monorepo některé věci komplikuje. Konkrétně:

  • CI je náročnější na správně nastavení. Např. zbuildit je potřeba jen změněné věci a detekce toho je složitější.
  • Labely u issues potřebují víc struktury a disciplíny.
  • Emailové notifikace jsou komplikovanější. GitHub umožňuje sledovat jen mentions, assignments apod., ale úplně srovnatelné se sledováním samostatného repa to není.
  • Sdílení repa se subkontraktory budeme muset nějak pořešit, nejspíš subtree splitem a manuální synchronizací; nemám s tím zkušenost a trochu tady očekávám opruz.

U opravdu velkých rep pak může být problém s jejich škálováním, ale tam ještě zdaleka nejsme a kdoví, jestli vůbec někdy budeme. Zajímavé by bylo slyšet od Jakuba Vrány, jak jim to funguje v Googlu (tam je nejen monorepo, ale i single line of history).

Po dvou týdnech jsme zatím spokojení.

Jak mergnout repa

Tady je skript, který jsme několikrát použili (jsem Bash lama, ale funguje to):

Push je normálně do branche, otevřeme k tomu (trošku větší 🙂 ) pull request, můžou se pak udělat ještě nějaké dodatečné úpravy např. v README a nakonec merge.

Máte někdo s monorepem zkušenosti a dobré rady pro nás ostatní?

WordPress

Tento blog běží na WordPressu. Kvůli VersionPressu vlastně “nemám jinou volbu”, ale ani ji mít nechci – to je koneckonců konečným cílem našeho snažení. Přesto je pro mě vždycky zajímavé zažít WordPress od začátku, jako běžný uživatel.

Zabrouzdal jsem do archívů a tohle jsem psal čtyři roky zpátky:

Redakční systém, do kterého bych se zamiloval, jsem ještě nepotkal, takže bylo potřeba vybrat nějaký “špatný”. Volba padla na WordPress hlavně proto, že jsem si s Drupalem dostatečně užil na svém předchozím blogu a Joomla je principiálně podobná.

WordPress je bastl, ale velmi úspěšný bastl. To má své výhody, např.: na skoro cokoliv seženete plugin (je jich snad až moc), existuje nepřeberně témat vzhledu, pro WordPress existují komerční hostingy, Android aplikace, importéry / exportéry do jiných systémů atd. atd.

Pak ale začnete narážet na realitu, která úzce souvisí s tím, že WordPress je uvnitř jeden velký bordel. Například: pluginy jsou v různé kvalitě a různě (ne)kompatibilní. WordPress neřeší testovací prostředí. Tím, že je něco v souborech a něco v databázi, je sync mezi testovacím a živým prostředím komplikovaný a žádný pohodlný postup nebo plugin na to není.

Navzdory tomu všemu, navenek je WordPress docela hezký a příjemně použitelný software, ačkoliv si pořád někde vzadu říkám – to vážně v roce 2012 neexistuje pořádný CMS?

Pořád překvapivě platné, akorát na testovacím prostředí se pilně pracuje 🙂 Nemůžu říct, že by experience s WordPressem byla dnes nějak dramaticky lepší než pár let zpátky.

Přesto, nebo právě proto, je fascinující, jak se WordPressu daří. Je na 27 % webu a stále roste, navíc nejvíc ze všech platforem. Taky je pravda, že užitečných věcí vzniklo dost:

  • WordPress má krásné CLI rozhraní, např. wp post create namísto klikání v UI.
  • Od čerstvě vydaného WordPressu 4.7 je každý web malým REST API nodem v distribuované síti čtvrtiny webu. Tohle ještě bude zajímavé.
  • PhpStorm má špičkovou podporu WP. I PHP samo za poslední roky udělalo slušný pokrok, ačkoliv TypeScript to pořád není, no.
  • Docker a podobné věci dávají nové možnosti, jak WordPress hostovat (tohoto se jako firma brzo začneme účastnit).
  • Celkově WP komunita hodně vyspěla, jsou zde specializované “managed hostingy”, agentury, konference apod.

Přesto pro občasného WP uživatele celkový gut feeling zůstává dost podobný: brouzdání miliardou polofunkčních a polohezkých témat je vyčerpávající, úpravy webu člověk nejradši sfoukne klikáním na živém webu nebo přes FTP (brrr, ale o moc líp to nejde), atd. Nebyl jsem z budování tohoto jednoduchoučkého blogu vůbec nadšený, a ani výsledek není moc super, ale už se mi tím nechtělo trávit víc času. A to je blogování pořád jedním z hlavních use casů pro WP…

Pokud WordPress používáte a trochu trpíte v podobném stylu, co vám vadí / chybí nejvíc?

Git a konce řádků

Věčný boj, částečně daný Windows, ale především nějakým dobrákem Git-vývojářem, který se snažil být nápomocný. Co je verzovacímu systému po konci řádků? Tady jsou poznámky, co jsem si udělal asi před půl rokem (v “originále”; občas prosím omluvte jazykovou rozpolcenost):

  • this is really fucked up
  • CRLF is fucked up
  • core.autocrlf false is fine until you want to enforce LF in the repo using * text=auto
  • when you do that, Git ignores core.autocrlf and will look at core.eol to see how to handle files on checkout, and it will use native by default which will convert LF to CRLF
  • there is NO WAY to tell Git “leave files alone on checkout” if you have .gitattributes. this is really sad
  • * text=auto eol=lf is fucked up too because for some reason, the eol=lf will also be applied to binary files.
  • (Git cannot force CRLF in the repo, only LF.)
  • (!eol – http://blog.subgit.com/tag/lf-will-be-replaced-by-crlf/)
  • Good read: http://www.hanselman.com/blog/YoureJustAnotherCarriageReturnLineFeedInTheWall.aspx

Naštěstí to vypadá, že Git 2.10 to opravil! Mělo by tak fungovat jednoduché * text=auto eol=lf v .gitattributes. Hurá!

Nový blog (už zase)

Hmm, vypadá to, že mě víc baví zakládání nových blogů než psaní na ty staré. Tento bude z životní etapy, kterou mi vyplňuje VersionPress, takže to tu bude občas technologické, občas byznysové. V obou oblastech si upřímně připadám dost jako lama – v programování už, v budování firmy teprve – ale tak proč se o to trápení nepodělit, že.

Několik “BTW”s:

  • Kratší věci pořád nejradši dávám na Twitter.
  • Blog “musí” být na WordPressu, ale Tillda má úplnou pravdu“ne, nemůžeme mít hezký, dobře čitelný wordpressový téma, páč všude musej bejt zpíčený stajlový FOTKY!”. Trpělivost s hledáním mi nakonec došla u Independent Publisheru, který je taky v mnoha ohledech problematický, ale co, budete se muset soustředit na obsah.
  • Vy vtipálci, samozřejmě že česky. (UPDATE: některé starší drafty mám anglicky, takže to bude občas mix.) 

blog-cs-vs-en