NIH v praxi – syntax highlighter pro WordPress

Když jsem nedávno psal o syndromu Not Invented Here, netušil jsem, že tak brzo pocítím “zářný” příklad na vlastní kůži. Potřeboval jsem pro tento blog sehnat syntax highlighter, na který jsem měl skutečně velmi základní požadavky:

  1. V bloku kódu obarvit klíčová slova
  2. Nějak rozumně spolupracovat s Windows Live Writerem

Nic dalšího jsem nepotřeboval. K počítači jsem sedal v jedenáct večer s tím, že do půl hodiny mám hotovo a jdu spát. Používám přece WordPress, na kterém běží tuna vývojářských blogů a syntax highlighting je dávno vyřešená věc.

I zadal jsem do Googlu první dotaz, co mě napadl, a dostal se na stránku Posting Source Code na webu wordpress.com (služba pohánějící miliony blogů). Perfektní, říkal jsem si, kód půjde zadat pomocí syntaxe [sourcecode language="xyz"], existuje pro to plugin do Live Writeru, a když se jedná o “oficiální” řešení na wordpress.com, určitě s tím nebude žádný problém.

Nainstaloval jsem tedy plugin SyntaxHighlighter Evolved, který je odkazován z článku, a celý blog se mi rozes..ypal. Místo zvýrazněné syntaxe se zobrazovaly nesmyslné HTML značky, útržek kódu obsahující otevírací PHP značku zadaný přes Live Writer se do databáze uložil tak divně, že po dalším načtení se různé kusy kódu ztratily, atd.

Bylo půl dvanácté a já začínal tušit, že noc teprve začíná.

Následovalo zběsilé hledání chyb, při kterém se ukázalo, že si SyntaxHighlighter Evolved nerozumí s pluginem pro podporu Markdownu v komentářích, že plugin pro Live Writer obsahuje svou samostatnou chybu, která speciální HTML znaky pošle špatně zakódované a ty se po roundtripu do databáze ztratí atd. A že i když se to všechno jakž takž rozchodí, tak používaná JavaScriptová knihovna (SyntaxHighlighter od Alexe Gorbatcheva) má pro mé potřeby dost nepoužitelný výstup (chci jen obarvit klíčová slova, ne definovat background všem řádkům, přidat ke kódu toolbar, čísla řádků a kde co).

Byla jedna.

V tuto chvíli byl čas rezignovat na oficiální plugin a kouknout se po alternativách. Nejdřív jsem zkusil lovit mezi desítkami pluginů pro zvýrazňování syntaxe v oficiálním repozitáři na wordpress.org, ale to bylo dost zoufalé.

wordpress-syntax-highlighting-plugins

Nastal tedy čas si zanadávat, trochu se uklidnit a podívat se na problém znovu.

Základem bylo zvolit, jakou knihovnou vlastně ve výsledku kód obarvovat. Měl jsem jasno, že to má dělat JavaScript (serverové obarvování má IMO víc nevýhod než výhod a Gisty mají zase nevýhodu, že se nezobrazí v GReaderu), a jako nejméně intruzivní a relativně nejvíc rozšířená mi přišla knihovna Prettify od Googlu (mimochodem, krásné porovnání JS knihoven je zde). Používá ji Stack Overflow, na tomto webu plugin pro komentáře a navíc má výhodu, že není potřeba určovat jazyk kódu – Prettify nějak umí obarvit cokoliv, ačkoliv přesně nechápu, jak to vlastně funguje. Kvůli jednoduchosti syntaxe (v podstatě se jen elementu

 přidá class="prettyprint") je zásadně jednodušší (a funkční) i plugin pro Live Writer a rovněž přidání do stránky je snadné.

Byly dvě ráno.

Cítil jsem se jako vítěz, měl jsem jasno v JavaScriptové knihovně a pro její přidání jsem na wordpress.org našel několik pětihvězdičkových pluginů, takže no problem. Ale asi jsem nepoučitelný. Pluginy jsem vyzkoušel čtyři a dva z nich generovaly PHP warningy, jeden kolem kódu přidával nějaký nesmyslný rámeček a poslední nefungoval vůbec. Zkoušet další jsem už neměl nervy.

Bylo půl třetí a měl jsem toho dost.

Otevřel jsem editor, v druhém okně dokumentaci Prettify a WordPressu a za dvacet minut jsem měl funkční plugin pro zvýrazňování syntaxe.

Zastřelte mě, pokud ho někdy budu chtít vystavit na wordpress.org.

12 thoughts on “NIH v praxi – syntax highlighter pro WordPress
  1. Takový je IMHO bohužel svět open-source – člověk se musí prokousat hromadou s***ek, než najde něco použitelného (pokud vůbec) :(

  2. Přesně jak říkáš, ale stejně jsem to nečekal – WP je hodně používaný, pluginy jsou v repozitáři hodnocené dost velkou komunitou, dokonce tam je i boxík s infem o kompatibilitě verzí a stejně nic, pořád se člověk prodírá jednou velkou kupou hnoje.

  3. Tak vítej do WordPress komunity. Slepený blogovací systém, šílený kód a architektura (The Loop), hloupá komunita.

    Z toho nic dobrého vzejít nemůže. A přesto to používáme. Po pár letech totiž už máš set osvědčených pluginů a rozběhnout libovolný web je otázkou maximálně půl hodinky. Na údržbu se pak najme kterýkoliv studentík a jede se dál.

  4. Borku, takovéhle martýritum znám moc dobře. A dokonce i s placenými pluginy. Ale úplně nejlepší chvíle přichází ve chvíli, kdy někomu ukazuji nadšeně svůj výtvor a on jen nade mnou kroutí hlavou a říká: Nastavit WordPress a nainstalovat tyhle tři pluginy Tě stálo 15 hodin? … připadám si pak jak neúspěšný absolvent zvláštní školy. ;)

  5. @Honza Co to zařídit tak, aby říkal “Nastavit WordPress a nainstalovat tyhle tři pluginy stálo 15 hodin?” :) Jinak je aspoň částečně utěšující, že v tom nejsem sám.

    @Martin Blbé je, že jsem pár let strávil s daleko lépe navrženým Drupalem (říká se to obecně a z pohledu do kódu bych i souhlasil), a přesto byl vývoj webů nad tím poměrně peklo. Jak jsem psal, svět na ideální CMSko stále čeká.

  6. A já tak čekal, až najdeš nějaký pěkný plugin, abych ho mohl nasadit i u sebe :D No holt budu muset projít taky nějaké ty pluginy, abych @jirkapenzes neshazoval jeho milovanou Operu :)

  7. Ano, a to je také důkazem, proč většina programátorských dogmat jsou naprosté ptákoviny. Psané jen někým, kdo prostě chtěl být chytrý.

    Programuji 25 let a pokud chci mít něco bez problémů, programuji si to sám.

    Stejně tak jsem se nedal ohledně trendu XHTML a vždy jsem zůstal na HTML. Nikdo mi ještě nebyl schopen vysvětlit jedinou výhodu XHTML oproti HTML kromě toho, že je to in. Nakonec stejně došlo na mě a máme tu HTML5 a ne žádné XHTML. Stejně tak jsem dělal tabulkový design webů ještě roky poté, co byl fuj, ale s klidem jsem si počkal až se prohlížeče dostatečně naučí CSS a nebude třeba mít deset variant hacků jen proto abych byl in.

    Dnes je nízká laťka pro programování ohledně znalostí – a nutně s tím přichází nižší kvalita kódu. A tím také pozbývá platnost „not invented here“. V předlinuxovských dobách, kdy ještě neexistoval Linux (nebo jen někde ve Švédsku) a o GPL licenci jste neslyšeli a vše bylo zásadně public domain lítaly velmi kvalitní kódy. Mohli jste se de facto betonově spolehnout, že co stáhnete bude super a problémy budou naprosto minimální. Tehdy vzniklo heslo „not invented here“ a mělo smysl.

    Heslo „nevynálej znovu kolo“ má smysl v každém oboru, kde je vysoká laťka pro vstup a je tedy vysoká koncentrace virtuozních odborníků. Pak prakticky vše co stvoří je použitelné a nemá smysl znovu vynalézat kolo. Jakmile se daný obor stane masovou záležitostí, protože se sníží vstup – pak kvalita věcí v oboru jde silně dolů a pak heslo „nevynalézat znovu kolo“ je nesmysl.

    Stejné je to třeba v potravinách. Když před 15 lety a více byly všude kvalitní potraviny za rozumnou cenu, nemělo moc smysl si to doma pěstovat. Dnes, kdy jsou všude párky se separáty, křehčené kuřecí, sýry, které nejsou z mléka, vyčichlý česnek z Číny, atd. – má smysl si to dělat a pěstovat sám.

    A stejné je to s programováním. Dnes se chválí kódy, knhovny a programy jen proto, že jsou open source i když kvalitativně je to pod bodem mrazu. Protože programování se stalo masové a snadné.

    Tím nekritizuji masovost programování, ale prostě masovost oboru má určité důsledky a jedním z nich je prudký pokles kvality všeho co se vyskytne.

    Každé pravidlo platí jen za určitých podmínek a v určité době a za určitého kontextu.

Blog byl staticky vyexportován, nové komentáře již nelze přidávat.