Teď se učím se němčinu čtením

Před nějakou dobou jsem psal, že se mi na učení němčiny líbí Duolingo. To už teď neplatí, Duolingo mě přestalo bavit. Asi hlavně proto, že věty, které tam překládáte, jsou někdy dost divné, a mají hodně náhodou obtížnost. Třeba mu zas někdy dám šanci, ale teď to chtělo něco jiného.

Když jsem vzpomínal, čím jsem si dřív posouval dál angličtinu, tak jsem si uvědomil, že už někdy v kvartě na gymplu (~9. třída) jsem si přečetl Harryho Pottera v angličtině. Byl to pátý díl, který v té době byl jen anglicky (fan překlady se rozjely až později). Sice jsem si docela dost slovíček musel hledat (HP je ještě specifický tím, že tam jsou slovíčka kolem kouzlení – kotlík, hůlka atd.), ale myslím, že to docela nastartovalo moje učení angličtiny. Pak jsem se pustil do dalších anglických knížek (třeba Hobit a Pán prstenů) a začal jsem poslouchat anglické audioknihy (Eragon + pokračování).

Rozhodl jsem se tedy podobnou věc naaplikovat na němčinu. Vzhledem k tomu, že německy teď umím pořád míň, než jsem tenkrát uměl anglicky, tak jsem usoudil, že na Harryho Pottera to zatím není. Jako v angličtině existují Penguin Readers knihy (převyprávěné knihy, aby na jejich přečtení stačila menší slovní zásoba a jednodušší gramatika), tak němčina má něco podobného. Pro začátek jsem si našel minidetektivky od Felix & Theo. Mají vždycky tak 20–30 stránek a relativně jednoduchou slovní zásobu.

Zatím jsem přečetl dvě – Oh Maria a Ein Mann zu Viel. Čtu je na Kindlu, kde mám i německý slovník, takže nemusím každé neznámé slovíčko hledat někde jinde. Aby mě to posouvalo dále, tak si slovíčka, která neznám, označuju. Po dočtení knížky si je projdu, upravím (1. pád/1. osoba, jednotné číslo), přeložím si je a dám do Quizletu (webová aplikace na flashcards). Odtamtud si je pak stahuju do telefonu (používám MemeCards, který si umí stáhnout sadu slovíček z Quizletu). Naučím se je a pak si znovu přečtu tu knížku – ale už bez toho, abych si musel ty slovíčka hledat.

Za cca 2 měsíce jsem takhle zvládl ty dvě knížky. Z první umím +170 slovíček, z druhé +130 dalších. To myslím není špatné – minimálně to je o 300 slovíček více, než bych se naučil bez toho. Když jsem teď byl pár dní v Linzi, tak jsem některá z těch nově naučených slovíček viděl někde na plakátech a měl jsem radost, že díky té troše učení rozumím nápisům, kterým bych dřív nerozuměl :-)

Plán je, abych byl schopný si v červenci přečíst alespoň jeden díl Harryho Pottera v němčině. Zároveň se chci pustit do čtení článků na Deutsche Welle a zas si z nich vypisovat (a učit se) slovíčka.

Takže když to shrnu, tak to je vlastně hrozně jednoduché

  1. Přečíst jednoduchou knížku německy
  2. Označovat si neznámá slovíčka
  3. Ty se pak naučit
  4. Přečíst knížku znovu, už bez hledání slovíček
  5. Znovu na bod 1.

Co na to říkáte? Nechcete to taky zkusit? Pokud někam dojíždíte MHD, tak je tohle ideální metoda, protože nezabere žádný čas navíc.

3MS Malé a střední podniky v tržním prostředí – zhodnocení

Občas se mě někdo ptá, jestli se mi líbila vedlejška, kterou jsem na VŠE studoval a jestli bych mu ji doporučil.

Nevím, jestli je koncept vedlejších specializací běžný i jinde než na VŠE. Každopádně funguje to tak, že si na magistru kromě svého oboru (hlavní specializace, major) vyberete a odstudujete další mini-obor (minor). Je na to vyhrazených 30 ECTS kreditů, tedy jeden semestr. A typicky si vedlejšku vybíráte z úplně jiného oboru, než je váš hlavní.

Já si jako vedlejšku vybral 3MS Malé a střední podniky v tržním prostředí

Výstupem mělo být: „Vedlejší specializace je koncipována jako samostatný program umožňující budoucímu absolventovi snazší zvládnutí a výkon řídicí funkce v malém a středním podniku nebo založení a řízení vlastní firmy.“, což mi dávalo smysl.

A jaké to teda vlastně bylo?

  • zajímavé, zábavné a inspirativní
  • náročné ?
  • užitečné ?
  • lišilo se to předmět od předmětu

Zajímavé, zábavné, inspirativní

Vzhledem k tomu, že naprostá většinu přednášek v celé VS mají na starosti hosté, většinou podnikatelé (Radim Jančura, Tomáš Březina, Martin Hausenblas, a další), tak to není o nějaké nalévárně teoretických znalostí, ale spíše o poznatcích z praxe. Na druhou stranu je otázka, kolik těch poznatků z praxe je přenositelných i pro moje použití. Ale vzhledem k tomu, že jsem na podobné přednášky občas chodil i dříve, tak tohle hodnotím jako plus.

Náročné?

Mám to naschvál s otazníkem, protože je to diskutabilní. Obecně nemám moc rád předměty, kde se přes semestr nic moc neděje, ale je nutné se toho spoustu jednorázově naučit ke zkoušce. Většina vedlejšky byla opačná – jednotlivé zkoušky a testy byly docela jednoduché. V každém předmětu ale byla obrovská nálož různých seminárek, semestrálek, esejí a týmových projektů. Vzhledem k tomu, že mám docela zvládnutý timemanagement a jsem zvyklý věci řešit průběžně, tak mi to přišlo docela na pohodu. Ale chápu, že někdo preferuje nic moc neřešit a pak se nadrtit na zkoušku.

Užitečné?

Tohle je opět s otazníkem, protože nemám pocit, že by mi vedlejška něco moc dala, co bych mohl využít do praxe. Vzhledem k tomu, že už jsem něco o podnikání věděl a českou startupovou scénu sleduji, tak ty základní věci pro mě nebyly nové a zbytek je použitelný „až budu mít firmu s 50 zaměstnanci“. Ale třeba se nějaká užitečnost projeví později, nějak neočekávaně. Ale určitě pro mě bylo přínosné to, že se dělá spoustu týmových projektů, semestrálek a podnikatelských plánů, které se prezentují a prezentují, takže jsem si potrénoval prezentační dovednosti.

3MA544 Podnikání malých a středních firem 1 (LS 2012/13)

Přednášejí externisté, což je fajn (viz výše). Nicméně jako velký fail beru to, že přednášky jsou prezentované jako nepovinné, ale za každý napsaný feedback přednášejícímu (co si z přednášky odnáším) jsou 2b, za semestr tedy 20b (takže jsou de facto povinné „nemusíte tam chodit, ale za trest dostanete o stupeň horší známku“). Externí přednášející se pak diví, že i na přednášku v 18h je učebna plná. Dávalo by mi větší smysl, kdyby na přednášce bylo místo 40 lidí jen 15, které téma opravdu zajímá, než plná učebna, kdy většina lidí stejně řeší něco jiného. Cvičení byla středně k ničemu, po 3–4 členných týmech se postupně zpracovávala a prezentovala témata z učebnice.

3MA545 Podnikání malých a středních firem 2 (ZS 2013/14)

Podobné jako 3MA544, s tím že externisté jsou spíše odborníci na jednotlivé oblasti a mají na starosti i cvičení. A z toho co povídají, je potom test, na který neexistuje jiný rozumný zdroj než přednášky + cvičení + slidy, takže přednášky opět povinné. V LS 2012/13 to bylo tak, že zbytek VS byl po-út a tenhle předmět až v pátek, takže jsem si ho o semestr odložil.

3MA546 Strategie a podnikatelský plán v MSP (LS 2012/13)

Pro mě asi nejužitečnější předmět, jak už je jasné z názvu, tak se v předmětu řeší hlavně sestavení podnikatelského plánu (je to těžší, než by člověk na první pohled řekl). Fajn je, že podnikatelský plán vám pak okomentuje reálný investor. A také se trochu řeší strategie podniku (což už mi přišlo méně přínosné, protože to je abstraktnější a víc závislé na konkrétní firmě).

3MA547 Moderní trendy v malém a středním podnikání (LS 2012/13)

Hodně zábavný, zajímavý a inspirativní předmět. Přednášky opět externí, zajímaví lidé, kteří mají něco do činění s jednotlivými probíranými oblastmi – ale od 7:30 :( Cvičení byla jedna z mála za celou VŠE, na která jsem se těšil (ještě SoMaDo!).

3MA543 Podnikatelské praktikum (LS 2012/13)

Haluzný předmět, který zrovna v tom semestru, kdy jsem ho měl, epicky pivotoval. Na přednáškách se střídaly dvě zmatené nepříjemné dámy. Přednášky byly spíš workshopy, kde se měl řešit rozjet nějakého vlastního podnikání (povinně). A neumím si představit, že by někdo rozumný šel do podnikání s lidmi, které zná asi den. Vzhledem k tomu, že asi pivotovali nějak na poslední chvíli, tak cvičící byl překvapený, když jsme mu říkali, že je všechno jinak a pak se šel podívat na druhou přednášku, aby věděl, co se vlastně děje :D No, ještě že už to je za mnou (další semestr to prý nebylo o nic lepší).

Státnice

Byly víceméně o tom, co nejpřesněji odříkat, co je v knížkách. Tím, že jsem je měl o semestr později než většinu předmětů VS, tak se občas v předmětech něco změnilo Třeba 3MA546 se více zaměřilo na povídání o nějakých strategiích, které jsme v předchozím semestru moc neřešili – byl místo nich Lean Canvas (takže jsem strategie v knížce jen prolétl). Podobně 3MA547, na které existují skripta v PDF, ale ta mají v ISISu studenti přístupná jen v daném semestru, takže mezitím vyšla nová rozšířená edice :-/

Shrnutí

Vedlejší specializaci 3MS Malé a střední podniky v tržním prostředí bych doporučil někomu, kdo toho o podnikání mnoho neví. Případně plánuje v nejbližší době začít podnikat. V takovém případě by se z vedlejšky daly vytěžit užitečné kontakty a případně konzultace s lidmi z praxe, ke kterým je jinak mnohem těžší se dostat. Ale asi bych ji už nedoporučil jako oddechovou nenáročnou vedlejšku, protože těch věcí přes semestr byla fakt fůra a co jsem slyšel, tak poslední semestr toho ještě přibylo. Zároveň bych ji ani nedoručil těm, kteří už něco o podnikání a startupech vědí.

Doufám, že se článek nikoho nedotkne, ale dává mi smysl říkat věci na rovinu, protože jen tak se něco může posunout dále.

Co si tom myslíte? Studovali jste také tuhle vedlejšku? Nebo jinou a lepší?

Necháte si ukrást Facebook účet? aneb Dvouúrovňové přihlašování

Dnešní článek je spíše pro neIT čtenáře. Počítám (doufám!), že pro všechny, kdo se kolem IT pohybují více, nebude dvoustupňové přihlašování ničím novým.

Než má smysl se začít bavit o dvouúrovňovém přihlašování, tak bych si rád ověřil jednu věc:

Používáte pro e-mailovou schránku heslo, které nepoužíváte nikde jinde?

Pokud jste heslo pro e-mail použili i někde jinde, tak si ho změňte. Jde o to, že občas nějakým firmám uteče špatně zabezpečená databáze hesel uživatelů (stalo se to třeba i LinkedIn nebo Adobe). A pokud máte stejné heslo i pro e-mail, tak případný útočník získá přístup nejen k vašim e-mailům, ale také ke všem službám, ve kterých jste se registrovali daným e-mailem – pomocí Obnovení zapomenutého hesla v těch službách.


Tak, pokud máte pro e-mail už nastavené unikátní heslo, tak se můžeme pustit do dalšího zabezpečování.

Předpokládám, že všichni používáte elektronické bankovnictví, takže jste si určitě všimli, že při potvrzování transakcí (a u ČSOB i při přihlášení), vám pomocí SMS přijde kód, kterým transakci autorizujete. Když jde o peníze, tak banka chce mít jistotu, že to jste opravdu vy – a to nejen tím, že něco víte (přihlašovací údaje), ale také tím, že něco máte (mobilní telefon s číslem nastaveným při zřizování účtu).

Teď je na čase se zamyslet, jestli by byl větší problém, kdyby se vám někdo dostal k bankovnímu účtu (kde jsou peníze přeci jen dobře vysledovatelné) nebo k Gmailu, Facebooku, Githubu, Live účtu, Dropboxu,… (kde by podle mě mohl napáchat mnohem větší škody).

A právě všechny tyto služby nabízejí obdobu toho, co elektronické bankovnictví – a to nutnost potvrzení přihlášení pomocí kódu, který vám zadarmo zašlou SMSkou. Tedy za cenu toho, že při přihlašování budete muset opsat kód z SMS, získáte mnohem větší jistotu, že váš účet jen tak někdo nezneužije. Počítač, ze kterého se přihlašujete často, si většinou můžete nastavit jako „důvěryhodný“, takže tam nebude muset opisovat kód z SMS.

Jak nastavit dvouúrovňové přihlašování na Gmailu?

Můžete jít buď přímo přes odkaz a nebo si to proklikat sami:

  1. V GMailu klikněte vpravo nahoře na svůj obrázek
  2. Vyberte „Account“ (mám GMail anglicky, takže případně hledejte CZ alternativu)
  3. Nahoře klikněte na záložku „Security“
  4. V sekci „Password“ hledejte „2-step verification“

Poté už to je jednoduché. Zvolíte, že chcete aktivovat „2-Step Verification“, zadáte své telefonní číslo, přijde vám ověřovací kód a dvouúrovňové přihlašování bude zapnuté. Případně se mrkněte na Návod od Google.

Místo SMS je možné používat mobilní aplikaci, kam vložíte vstupní kód (případně vyfotíte QR kód) a ta už vám bude ověřovací kódy generovat. Já osobně její použití nedoporučuji – sice jsem si sám používal, ale když jsem poté smartphone poslal na reklamaci, tak jsem stejně všude musel měnit na potvrzení pomocí SMS.

Další věcí, kterou je potřeba vyřešit, je mít jistotu, že v případě ztráty telefonu, můžete snadno získat novou SIM se stejným číslem. Také dejte pozor na převody čísel mezi operátory – tam se může stát, že vaše číslo prostě nějakou dobu nebude fungovat.

Většina služeb umožňuje předgenerování kódů, které můžete použít v případě, že nebudete mít přístup ke svému telefonu (ty opravdu doporučuju vytisknout a někam bezpečně uložit). GMail navíc umožňujte přidání druhého záložního telefonního čísla.

Aplikace musí dvouúrovňové přihlašování podporovat

Aplikace, do které se přihlašujete, musí dvouúrovňové přihlášení podporovat. Většina oficiálních ho podporuje, ale třeba zabudované e-mailové programy ve smartphonech většinou ne. Pro ně je nutné vygenerovat tzv. App-specific password – jednorázové heslo, které se použije jen pro tu aplikaci.

Závěrem

Za cenu drobného nepohodlí si můžete mnohem lépe zabezepečit služby, které jsou pro vás důležité. A to se vyplatí, ne?

Nastavte si dvouúrovňové přihlašování i na další služby:

  • Facebook (jmenuje se to „Login Approvals“)
  • Live.com účet
  • Dropbox
  • Github
  • podívejte se, jestli i nějaké další služby, které používáte, náhodou dvoustupňové přihlašování neumějí

Dejte mi v komentářích vědět, jestli už jste dvouúrovňové přihlašování používali dříve? Uvažujete teď o jeho nastavení? Nebo ho používat nebudete – proč?

Jak třídit a řadit fotky? + Výzva!

Už jsem psal o tom, jak dát dohromady fotky z více foťáků, dnes se budu zabývat tím, jak si pak fotky z různých akcí uspořádat v počítači.

Začal bych tím, že pro práci s fotkami nepoužívam žádný specializovaný program, jen IrfanView a TotalCommander, kde si pomocí CTRL+SHIFT+F1 přepínám na zobrazení náhledů.

Jak organizovat fotografie v počítači

Častý způsob, jak si pojmenovávat složky s fotkami je podle události a připojit k tomu rok. Pak vzniknou složky jako Vánoce 2013, Velikonoce 2013, nebo Řecko 2013. Velkou nevýhodou je, že když je seřadíme abecedně, tak nejsou seřazené chronologicky. Jako nejlepší způsob se mi osvědčilo je pojmenovávat ROK-MĚSÍC-DEN AKCE (YYYY-MM-DD AKCE). U vícedenních akcí používám jako datum poslední den akce. Takže to pak vypadá jako 2013-12-04 Ples VŠE nebo 2014-01-01 Silvestrovský Outdoor (důležité jsou i počáteční nuly). Pak se složky s fotkami řadí správně.

Jak zálohovat fotografie

zálohování obecně už jsem psal. Fotky mám uložené ve Skydrive a zároveň je ještě pravidelně ukládám na exterňák (při zálohování jen na exterňák pozor na to, že pokud vám zloděj ukradne notebook, tak dost možná vezme i exterňák, který bude vedle na stole).

Jak probrat fotografie

Když se dříve fotilo na film, tak si každý fotku rozmyslel a fotil jen zajímavé věci, protože každý fotka přišla na několik korun. Dnes se jich na každé akci nafláká spoustu a maximálně se vymažou rozmazané a zařadí do správně pojmenované složky. Kdy jste si naposledy prohlíželi fotky zpátky? Já už dlouho ne, protože se mi nechce prohlížet 500 fotek z dvoudenní akce. Dává mi smysl si nechat jen 30–50 nejhezčích z akce (případně x počet dnů akce), protože to už se dá prohlédnout a bude mě to bavit.

Výzva!

Pouštím se do třídění fotek (aktuálně mám 18 GB a 11 tisíc fotek) a postupně je budu probírat a nechávat si jen ty nejhezčí. Nechcete se připojit a dát si pravidlo, že každý den večer místo sezení u Facebooku protřídíte jednu složku fotek? Pokud se chcete společně motivovat, tak napište jako nový komentář, kolik fotek máte a kolik místa zabírají (pravé tlačítko v průzkumníkovi na složku s fotkami). A řekněme každých 14 dní napište jako odpověď na svůj komentář aktuální stav. Já ho budu dopisovat přímo sem, na konec článku.

  • 2. 1. 2014: 11 009 fotek (18,1 GB)
  • 15. 1. 2014: 10 267 fotek (17,4 GB)
  • 30. 1. 2014: …
  • 6. 4. 2014: 10 894 fotek (18,4 GB) //nějak se mi to vymklo a spíš přibývají než ubývají

Budu také rád, pokud se v komentářích podělíte o svůj systém na organizaci a zálohování fotek.

VŠE: Zkoušky z ISISu do kalendáře

Aktualizoval jsem svoje rozšíření pro Google Chrome, které do ISISu přidá tlačítka pro uložení zkouškového termínu do iCal formátu (pro Outlook) a pro přidání do Google Calendar.

Teď to zajímavé: zdrojáky jsou k dispozici na Githubu. Chtěl jsem si hlavně vyzkoušet Typescript a TDD v JavaScriptu – a není to špatné. Když už se PHP nástroje konečně naučily code-completion a refactoring, tak by se mi nechtělo do jazyka, kde to rozumně nejde.

Co jsem se zajímavého naučil?

  • vytvářet rozšíření pro Google Chrome je docela fajn
  • Z JavaScriptu jde stáhnout soubor pomocí data-URI (location.href = data:…), ale ten nejde pojmenovat. Lepší finta je vytvořit si a element, použít download atribut a pak na něj „kliknout“:
var link = document.createElement('a');
link.download = 'zk-' + ident + '.ics';
link.href = data;
link.click();
  • iCal soubor pro Outlook jde generovat docela snadno.
  • Přidání události do Google Calendar je ještě snazší – parametry se jen předají v URL.

Znáte Duolingo? Super věc na učení jazyků

Znáte Duolingo? Je to pěkná webová aplikace na učení jazyků. Můžete se učit němčinu, španělštinu, italštinu, francouzštinu nebo portugalštinu. Drobnou nevýhodou může být to, že výchozím jazykem je angličtina, takže se neučíte čeština → němčina, ale angličtina → němčina. Na druhou stranu si zas prosvištíte i spelling anglických slov.

Funguje to na principu interaktivních cvičení, kdy buď vybíráte správnou odpověď z nabídky nebo ji píšete sami. Případně tam jsou poslechová cvičení (musíte napsat, to co vám řekli) nebo naopak musíte sami něco říci a kontroluje vám to výslovnost (funguje to až překvapivě dobře).

Jednotlivá cvičení jsou v lekcích, které jsou uspořádány do stromu a postupně se vám odemykají:

Během toho, co děláte cvičení si Duolingo sbírá data o tom, jak vám to jde, takže pak vám v lekcích může nabízet slovíčka, která často motáte. A tím, že ta učící data sbírají od spoustu lidí, tak vidí, s kterými věcmi je problém a mohou je vylepšovat.

Mají i aplikace pro Android/iOS (i pro tablety) (doufám, že WP8 bude brzy), takže se nemusíte učit jen u počítače. Aplikace si dokonce umí stáhnout několik lekcí dopředu offline, takže se můžete učit i bez internetu (a ono se to pak sesynchronizu­je zpět).

Z jedné studie vychází, že se po 34 hodin používání Duolinga umí člověk stejně španělsky jako po semestru španělštiny na VŠ (a to je pěkné, ne?).

Jo a celé to je zadarmo. Jak je to možné? Mají to vymyšlené tak, že peníze budou získávat za crowdsourcované překlady (pokud se 5 lidí shodne na stejném překladu, tak to asi bude správně). Aby měl kdo překládat, tak je potřeba lidi ten jazyk nejdříve naučit a pak teprve jim nabízet překládání jako procvičování. Nicméně pokud nechcete, tak se těmi překlady vůbec nemusíte zabývat a můžete jen dělat cvičení.

Duolingo je i gamifikované, takže za úspěšně splněné lekce a procvičování sbíráte body, můžete vidět, kolik bodů mají vaši kamarádi apod. U jazyka se říká, že je dobré se učit pravidelně, takže vám Duolingo ukazuje i kolik dní v řadě jste získali alespoň nějaké body (teď mám 29). A snažím se každý den (hned ráno) udělat alespoň několik cvičení, aby to dalo kolem 50 bodů.

Dříve to pár lidí používalo, ale teď už tam jsem sám a ostatní to flákají. Mám podobný pocit jako tenkrát, když jsem hrál WoW na serveru, který jsem si rozjel u sebe na počítači… Takže až si dočtete článek a zaregistrujete se na Duolingu, tak si mě tam nezapomeňte přidat.

Samozřejmě Duolingo nestačí jako jediný zdroj pro učení cizího jazyka, ale je to pořád lepší než nic. Já se na Duolingu učím němčinu a vzhledem k tomu, že i přes můj odpor mě na gymplu trochu gramatiky a slovíček naučili, tak to jde docela dobře. Kdo si pamatuje, jaký byl můj vztah k němčině na gymplu, tak mu musí být jasné, jak je Duolingo super :-)

Integrating JavaScript files with JSHint, Phing and Jenkins [EN]

I wrote an article about integrating JavaScript Node.js projects with Jenkins more than year ago. Recently I wanted to solve a bit different issue. I wanted to add JSHint validation as a part of a Phing build (our project is PHP/Zend Framework based with some JS files).

It can be done it a few steps (I will go through them in more detail later):

  1. Install Node.js
  2. Install JSHint
  3. Add JSHint task to a buildfile
  4. Set up reporting in Jenkins

1) Installing Node.js

Node.js can be installed via MSI installer on Windows, via package manager in most Linux distros (except for Debian stable which we are using). So I had to compile it myself (Ubuntu PPA packages does not work because of unmet dependencies). As long as we use Node.js just for JSHint validation, there is no need to upgrade it to latest versions, and therefore I put the package in our salt repository and it can be installed automatically next time (we have whole Jenkins server salted).

2) Installing JSHint

If you have the Node.js running, installing JSHint is pretty easy. You just run

npm install jshint -g

To verify that it is installed correctly, run jshint -v which should print the jshint version.

3) Adding JSHint task to a buildfile

This is the hardest step in the whole process. There was no JsHintTask in the standard Phing distribution, so I had to write it myself. I have issued a PullRequest, so it may be part of some future version of Phing.

The first step is to download the task and put it somewhere, where Phing can access it. Next code snippet assumes, that it is a part of the project and it is located in the support/phing/JsHintTask.php file.

Second step is to link the file from the buildfile:

<path id="project.class.path">
        <pathelement dir="${project.basedir}/support/phing/"/>
</path>

<taskdef name="jshint" classname="JsHintTask">
        <classpath refid="project.class.path"/>
</taskdef>

Last step is to create a jshint target (you can check the detailed description of the parameters in the docs). Most important is the checkstyleReportPath attribute, which defines where the checkstyle report will be saved and the fileset element, which defines which files should be checked.

<target name="jshint" description="Javascript Lint">
        <mkdir dir="${project.basedir}/build/checkstyle-jshint"/>
        <jshint
                        haltOnError="false"
                        haltOnWarning="false"
                        checkstyleReportPath="${project.basedir}/build/checkstyle-jshint/checkstyle-jshint.xml"
                >
                <fileset dir="${project.basedir}/public_html/www/js">
                        <include name="**/**.js"/>
                        <exclude name="js-cache/**"/>
                        <exclude name="jquery-1.*.min.js"/>
                        <exclude name="bootstrap/bootstrap.js"/>
                </fileset>
        </jshint>
</target>

JSHint supports config file, where you can set which issues you want to get reported. It is easy – you just create .jshintrc file in the project root directory and JSHint will load it automatically. File should contain a JSON object with configuration options. See the docs. And you can check the .jshintrc file we are using:

{
        "maxerr"        :       1000,
        "camelcase"     :       true,
        "immed"         :       true,
        "latedef"       :       true,
        "newcap"        :       true,
        "quotmark"      :       "single",
        "trailing"      :       true,
        "jquery"        :       true,
        "white"         :       true,
        "globals"       :       {}
}

4) Setting up the reporting in Jenkins

Just add a Post-build action – Report Violations and put the path in there. 

After the build finishes, you can check the errors in the Violations section of the build report.

Conclusion

It is really easy to set-up JavaScript files validation in a PHP project, so why not have it? If you have any trouble setting it up, just ask in the comments and I'll try to help you. I would be also happy, if you share your way of validating JS files.

Jak dát dohromady fotky z více foťáků?

Určitě už jste na nějaké dovolené fotili na více foťáků, takže jste po návratu měli něco jako Fotky Morava Kuba, Fotky Morava Tomáš a Fotky Martin mobil. Teď je chcete spojit dohromady, protože na nějaký výlet se třeba bral jen jeden foťák, fotky z večera jsou zas na druhém atd.

Fotky typicky bývají pojmenované jako DSCN0123.jpg, 100_9123.jpg nebo podobně, takže pokud je dáte do jedné složky, tak samozřejmě budou v pořadí nejdříve jedny, pak druhé, takže si moc nepomůžeme. Bylo by vhodné je přejmenovat do něčeho jako YYYY-MM-DD_HH-MM-SS (rok-měsíc-den_hodina-minuta-sekunda), aby byly v pořadí podle vyfocení a ne podle toho, jak je foťák pojmenovává.

DŮLEŽITÉ: Před prvním focením si zkontrolujte, že na všech foťácích a telefonech je nastavené správné datum a čas! Dávat to pak dohromady je mnohem těžší.

Prvním způsobem, který popíši, je přejmenování podle data a času souboru. To funguje, pokud se na fotky nešahalo – neladily barvy, neotáčely – jak to řešit ukážu dále.

Přejmenování fotek podle data souboru

  1. Máš Total Commander? Pokud ne, tak stáhnout (64-bit+32-bit combined), nainstalovat (ideálně do C:/Users/%uživatel%/totalcmd/ – kdy %uživatel% je uživatelské jméno).
  2. Udělat zálohu fotek – aby byla jedna složka s těmi, které se budou přejmenovávat a někde jinde kopie, kdyby se tohle nezadařilo.
  3. Jdi do složky s fotkama, vyber všechny, dej CTRL+M (nebo Files → MultiRename tool) – spustí se hromadné přejmenování
  4. Do prvního pole vlevo nahoře zadat [Y]-[M]-[D]_[h]-[m]-[s]_[N] – před název souboru poskládáme datum souboru. Pod tím bude seznam souborů s náhledem, jak bude název vypadat po přejmenování. V druhém sloupečku zkontrolujte, že ty názvy dávají smysl.
  1. Vpravo dole kliknout na Start!
  2. To stejné zopakovat pro fotky z dalších foťáků a pak je přesunou do jedné složky a seřadit podle názvu → Hotovo :-)

Problém nastane ve chvíli, kdy se na ty fotky šahalo a změnilo se jejich datum čas. Případně, pokud jsou stahované z telefonu – tam je také většinou datum vytvoření souboru a ne vyfocení. Naštěstí foťáky a telefony ukládají k fotkám tzv. EXIF informace – zjednodušeně řečeno jde o metadata snímku, která obsahují informace o foťáku, expozici, GPS souřadnice, a hlavně i datum a čas pořízení snímku.

Přejmenování fotek podle data z EXIF

Většina kroků je stejná s předchozím postupem, jen některé se liší.

  • 1a) Stáhnout plugin pro EXIF a otevřít ho v Total Commanderu – mělo by se nabídnout, že se chce do TC nainstalovat

Pokud se to nezdaří (například máte Total Commander nainstalovaný v Program Files a běžící TC tam nemá oprávnění zapisovat), tak tam je potřeba plugin nakopírovat ručně. Takže pokud je nainstalovaný v C:/Program Files/totalcmd, tak do C:/Program Files/totalcmd/Plugins/wdx/wdx_exif/ nakopírujte soubory z wdx_exif.zip, který jste si stáhli.

  • 4a) Že jste plugin dobře nainstalovali můžete ověřit kliknutím na tlačítko [=?] Plugin v okně pro přejmenování. Mělo by se tam objevit tc a exif. Teď už je možné jako masku pro přejmenování použít i data z EXIF. V našem případě to bude: [=exif.DateOriginal.Y-M-D]_[=exif.TimeOriginal.h]-[=exif.TimeOriginal.m]-[=exif.TimeOriginal.s]_[N]. Opět ověřte, že názvy souborů dávají smysl a můžete přejmenovávat.

A co v případě, že jste měli špatně nastavené datum na foťácích? Já to řešil PHP skriptem, ale to asi není pro každého…

Doufám, že se vám postup bude hodit, pokud narazíte na nějakou nefunkčnost, tak napište do komentářů a pokusím se poradit.

Testing Zend Framework 1 apps with PHPUnit 3.7+ [EN]

Great Zend Framework apps definitely should have automated tests. ZF helps you with that by providing PHPUnit extension which allows you to test controllers – adds special asserts for response and DOM queries. But there is a big downside – it works only with PHPUnit 3.4. I agree with the goal to maintain ultimate backwards compatibility, but I prefer to use latest versions of my tools. So I have latest PHPUnit installed for testing other apps and 3.4 for testing ZF1 apps (see this tutorial to install PHPUnit 3.4 and the latest one). I hate having to set up two PHPUnits after reinstall (and setting them up on CI server).

So I decided to fix the Zend_Test (for myself) to work with latest PHPUnit. I originally thought I would have to do it myself, but then I found this patch (thanks!) which I have applied to a branch in my fork of ZF1.

After that, I needed to fix my tests to work with latest PHPUnit. Luckily it meant just replacing assertType() with assertInstanceOf().

Shortly, you need to do this:

  1. Fix the Zend_Test (see diff)
  2. Fix your tests
  3. Get rid of the old PHPUnit 3.4
  4. Profit

After that the tests run fine with latest PHPUnit.

If you have any questions or trouble fixing ZF1 and tests for latest PHPUnit, feel free to ask in the comments.