Upgrade na El Capitan

Celé to vlastně vznilo kvůli tomu, že jsem si koupil Apple Magic Mouse 2. Už dlouho jsem po ní pošilhával. Na Bubenské je tak zarušeno WiFi a Bluetooth, že mi tam jakákoliv bezdrávotá myš funguje o poznání hůř, než jinde, ale když jsem u kolegy zkoušel Magic Mouse, bylo to v pohodě.
Problém nastal se scrollováním v Yosemite, které se mi nepodařilo rozchodit a u ženy na El Capitan fungovalo v pořádku.

Rozhodl jsem se pro čistou instalaci (z USB flash, kterou jsem vytvářel pro přeinstalaci MacBooku ženy nedávno), protože už snad 3 roky OS X pouze upgraduji a zdá se mi, že na mém 128GB SSD disku je zbytečně moc věcí a poslední dobou se častěji potýkám s nedostatkem místa na systémovém disku.

Co bylo tedy nutné nastavit?

Číst dále

Když se nedaří

Lidi si pořád stěžovali, že web Olomouckých špeků se načítá nějak pomalu. Vůbec se mi to nezdálo, protože tam nebylo nijak moc obsahu, pár obrázků a celé to běží na VPS, kde je 1GB RAM a kromě Špeků a mailserveru k nim, tam jedou asi dva projekty, na které chodí 0 lidí.

Zkoušel jsem nástroje od Googlu, které mi doporučily asynchronní načítání některých javascriptů, což jsem vylepšil, ale moc to nepomohlo. Pořád jsem si s tím lámal hlavu, až včera jsem přišel na bug ve svém kódu.

Nedávno jsem někde zahlídnul control, který generuje náhledy obrázků až ve chvíli, kdy jsou potřeba. Má to dvě výhody: nemusíte v adminu řešit resize při uploadu. Finální velikost obrázků a způsob jeho ořezu si řekne kodér zavoláním správného controlu až na frontendu. A jako bonus, když se redesignuje, nemusí se náhledy hromadně mazat a přegenerovávat, prostě se změní volání controlu v šablonách a časem se přegenerují samy (když je někdo poptá). Průšvih byl v tom, že jsem zapoměl v kódu naimplementovat větev, která zajistí použití již vygenerovaného náhledu, pokud existuje. Takže se všechny obrázky na webu při každém načtení resizovaly znova! Což při 10 obráucích na jedné stránce, které v originále mají třeba 1MB, který se musí načíst do paměti, a když přijde víc lidí najednou, není pro RAM serveru úplně příjemné. Takže to jsem opravil, ale server byl podezřele vytížený dál a mailové služby na něm pořád padaly.

Zjistil jsem, že virtuální server vůbec nemá swap, což je nepříjemné ve chvíli, kdy dojde RAM. Linuxový systém pak odstřelí některé procesy, takže vám potichu spadnou některé služby. Na podpoře mi napsali, že používání swapu zpomaluje server. To je sice pravda, ale jeho nepoužívání úplně odstřeluje služby. Řešením je samozřejmě přikoupit RAM, což se mi hned nechtělo. Navíc mám podobné řešení i na jiných virtuálech, které to zvládají.

Rozhodl jsem se přidat swap, což si tady popíšu, ať to někde mám poznamenané:).
Jsou dvě cesty: buď si přerozdělit partitions na disku a vytvořit místo pro swap, čehož jsem se trochu bál. Dnešní Linux kernel ale prý už pracuje stejně rychle se swapem v souboru

  1. pomocí dd vytvoříme soubor o požadované velikosti (v příkladu 512MB jako 1024*512) do umístění /swapfile1:
    # dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
  2. řekneme, že to bude swap:
    # mkswap /swapfile1
  3. nastavíme práva, aby swap nemohl nikdo neoprávněný číst:
    # chown root:root /swapfile1
    # chmod 0600 /swapfile1
  4. a konečně řekneme systému, že swap může používat:
    # swapon /swapfile1
  5. dobré je si do /etc/fstab přidat záznam, který swap namountuje po startu systému:
    /swapfile1 swap swap defaults 0 0

Dál jsem si nainstaloval pěkný sledovací nástroj htop, který je přehlednější, než notoricky známý top a líp se ovládá. Swap začal pracovat (což se dá ověřit i pomocí free -m), ale objevil jsem jinou zajímavou věc. Na serveru běžel zapomenutý elasticsearch z nějakých pokusů. A protože je napsaný v jave, měl velké nároky na pamět. Protože už není potřeba, vypnul jsem ho a swap už není potřeba:).

Takže celé cvičení zakončím jednoduchým příkazem swapoff, který swap zase deaktivuje, chvíli na to budu koukat v htop, ale předpokládám, že vše už bude v pohodě.

Novinky ze americké startupové bubliny

Ještě jsem ani nestihl dovymyslet, co bych udělal, kdybych vyhrál 200 milionů ve Sportce, jako se to nedávno stalo nějakýmu chlápkovi z Chomutovska. Taky si vůbec nedovedu představit, jak naložit s miliardou dolarů, za kterou Facebook koupil Instagram (jasně, mělo to víc akcionářů asi). No a dneska se dočtu, že se Facebook a Google můžou přetrhnout, kdo dá víc nějakýmu klučinovi, co udělal Snapchat. Padaly částky jako 3 a 4 miliardy dolarů, ale chlapec odmítnul, protože to prej nedosahuje hodnoty, kterou Snapchat bude mít!

Taky jsem nechápal, jak skvělá ta nová sociální síť musí být, aby takhle zaujala, a tak jsem si stáhnul jejich appku a vyzkoušel jí. To můžete udělat taky (a něco mi poslat, protože nikdo z mých kamarádů Snapchat zatím nemá), nebo kouknout na následující video s úchylnejma závodama želv:

Jde teda o to, že kamarádovi pošlete kraťoučké video, které se mu chvíli po přehrátí samo smaže! Nechápete? Síť je prý pro mladé.. Jediné dobré využití mě napadá na opilecké videjka, za jejichž odeslání bych se ráno styděl. Příjemce ho uvidí jen jednou a pak na něj snad zapomene.
Ale pořád nemůžu pochopit, kde je v tom ten obrovský finanční potenciál. Facebook nebo Google se asi cítí ohroženi a chtějí všechny sociální věci mít pod sebou, aby mohli dobře cílit reklamu. Takže myslím, že by to koupili, team převeleli na nějaký svůj produkt a Snapchat zrušili.

Obrázkový a videjkový startupy v Americe prostě frčej. Reálná hodnota a přínos je ale imho přinejmenším diskutabilní.

Bubenská

Info o pár pracovních změnách posledního měsíce.

S Milanem jsme si pronajali kancelář v baráku Bubenská 1. Máme tady veganský akvárko, ale hlavní důvod, proč tu sedíme je, že chcem dělat to co umíme: vyrábět weby.

image

Plán se zatím daří, práce je dost. Měli jsme i chvilku zajet do Olomouce a s kamarádama tam vymyslet kulturní magazín Olomoucké špeky, který spustíme asi začátkem prosince.

Pak jsem taky vyrobil web ségře, která chce dělat grafiku: www.eliskavanova.cz. Pokud by někdo potřeboval vyrobit pozvánku/plakát/vizitky apod. určitě se jí ozvěte.
Při tvorbě jsem se naučil dědit WordPress téma a zjistil, že nová WordPress template TwntyThirteen je pěkná.

Když už jsem byl u těch osobních webů, trochu jsem si zlepšil www.fabian.cz

Kalendarove exporty

Uz delsi dobu me stve, ze mi Facebook dava do kalendaroveho exportu i eventy, na ktere me nekdo jen pozve, ale ja neodkliknu, ze na ne pujdu. Nasynchronizuje se mi to pak do mobilu a otravuje to.

Zkusil jsem se teda dneska na Facebooku najit, jestli to jde nekde nastavit. Na strance eventu v nastaveni (ozubene kolecko vpravo nahore) jsem zaskrtnul “Hide Suggested Events” a pro jistotu i “Hide Declined Events”.

Po odebrani kalendare z Google calendar a opetovnem pridani, jsem ovsem eventy, na ktere nejdu, videl porad! V exportu od Facebooku uz ale nebyly. Google asi silne cachuje, takze jsem za URL exportu pridal vymysleny parametr “&t=2”, coz uz Google povazoval za novy kalendar.

Podobny problem jsem resil s Doodle, kde se mi zobrazovaly vsechny navrzene casy eventu. Stacilo odebrat starou metodu exportu pres ics soubor a nastavit propojeni pres Google API.

WordPress plugin s Nette formularem

WordPress je skvely nastroj, pokud potrebuji udelat rychle web s publikaci clanku a nekolika strankami, ktere se meni jednou za cas. Opruz obvykle nastava ve chvili, kdy je potreba udelat neco na miru. Existuje spoustu pluginu, ale ne vzdy najdu vyhovujici.

Pri programovani v Nette jsem si zvyknul na jednoduchost formularu a jejich pohodlnou validaci. Rozhodl jsem se je tedy pouzit i ve WordPressu.

Zkusim jednoduse popsat, jak vytvorit formular pomoci Nette na pluginu, ktery bude zobrazen na frontendu. Predpokladam zakladni znalost tvorby WordPress pluginu.

Napr. do adresare _libs/ si dame minified verzi Nette. Potom v php souboru s pluginem pripravim funkci, ktera bude vytvaret formular:

function createNetteForm() {
    include_once $_SERVER['DOCUMENT_ROOT'] . '/_libs/nette.min.php';

    $form = new NetteFormsForm;
    $form->addText('title', 'Jméno')
        ->setRequired('Zadejte prosím jméno');
    $form->addText('email', 'E-mail:')
        ->addRule(NetteApplicationUIForm::FILLED, 'Zadejte prosím email')
        ->addRule(NetteApplicationUIForm::EMAIL, 'email nemá správný formát');
    $form->addTextArea('pozn', 'Poznámka');
    $form->addSubmit('send', 'Odeslat');
    
    return $form;
}

Dale vytvorime funkci pro zobrazeni:

add_shortcode('nette-form', 'myplugin_nette_form');
function myplugin_nette_form() {
    return createNetteForm();
}

Ve wordpress strance, kde chceme mit formular, potom vlozime pouzity shortcode: [nette-form]

A nakonec funkce na zpracovani odeslanych dat:

function nette_form_post() {
    $form = createNetteForm();
    
    if ($form->isSuccess()) {
        $data = $form->getValues();
        
        // ulozit data atd. 

        wp_redirect('/');
        exit;
    }
}
add_action('init','nette_form_post');

Tato funkce je diky akci typu init volana pri kazdem nacteni stranky s pluginem, takze je dulezite vzdy kontrolovat, jestli formular byl odeslan a az potom delat nejake ukladani dat.
Po ulozeni je dobre uzivatele nekam presmerovat, aby nemohl reloadnout stranku a odeslat tak data znovu.

Sikovne je take pridat Nette javascript pro validace, treba do pouzivane template:

<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/js/netteForms.js"></script>