pátek 21. prosince 2012

Austrálie - vyřizování ve škole

Hned po dostání  víza jsem začal zařizovat potřebné dokumenty pro studium. Ve škole je nutné mít Learning Agreement a pak volitelně podat žádost o stipendium o 10k Kč.

Learning Agreement se skládá ze tří kroků (aspoň co zatím vím). Prvně je potřeba jít za p. Voříškem, což  je garant oboru Informační technologie a systémy. Důvod je ten, že jsem potřeboval poradit, zda ty předměty, co jsem si zvolil, by mi uznal do oborově volitelných a celoškolsky volitelných. Jeden předmět se mu moc nelíbil (Relational Database System), tvrdil, že to samé se učilo na bakaláři (což má pravdu :)). Prý by mi to i uznal, kdybych to fakt chtěl, ale já jsem si pak zvolil Human-Computer Interaction místo toho. Jinak další 3 předměty Programming in the Large, Web Information Systems & Introduction to web design mi v pohodě uznal za 6 kreditů jeden předmět (soudí se podle toho, kolik hodin musíte bejt týdně na tom předmětu). Po novém roce mu mám přinést Learning Agreement s nahrazeným předmětem a bude všechno v chillu. Pak se s tím musí zajít k proděkanům - prvně k p. Arltovi a pak k p. Mazouchovi. Ti to jen podepíšou, ale kecy k tomu už mít nebudou.

Žádost o stipendium 10k Kč je volitelná věc, ale vzhledem k její jednoduchosti je to skoro povinnost, pokud máte rádi peníze, které padají z nebes do dlaně. Stačí prý napsat žádost na studijní oddělení (jsem ještě nenapsal) a požádat o to. Za to dostanete 5k Kč před odjezdem. Dalších 5k Kč se dostává, pokud student po návratu napíše zprávu. Možnost žádat o toto stýpko mají ale jen studenti, kteří jedou do zámoří, a ne na Erasmus.

středa 19. prosince 2012

Austrálie - vízum je tu

Konečně mi přidělili vízum! A že jim to na ambasádě trvalo. Podal jsem žádost 7.11.2012 a vízum jsem dostal až 19.12.2012. Pořád je to ale lepší než nic.

Přes týden trvalo, než se poslaly výsledky zdravotní prohlídky z ČR do Vídně. Problém byl v tom, že jsem neměl číslo, kterým by se mohla paní doktorka přihlásit do systému ambasády, kam se posílají ty výsledky. Přes týden trvalo jen požádání o toto číslo. Minulý týden jsem urgoval doktorku i na ambasádě, ale bez výsledku. Dokonce pan z ambasády mi napsal, že žádat o zdravotnické číslo na ambasádu by měla jen doktorka a ne já. Tento týden jsem urgoval znova na ambasádu, a pan z ambasády mi tentokrát poslal zdravotní číslo (?). Hned jsem dal vědět doktorce a ten den večer doktorka poslala výsledky. A dnes už mám vízum. Prostě od poslání výsledku zdravotní prohlídky k vízu to trvá pár hodin, ale přidělení zdravotního čísla trvá přes týden.

Vízum mám od 19.12.2012 (Visa Grant Date) do 22.7.2013 (Stay for/until), takže dnes začnu zařizovat letenku.

P.S. Číslo pro zdravotní prohlídku se nazývá HAP ID a je ve tvaru H1234567.

pondělí 3. prosince 2012

Austrálie - vízum pokračuje

Už je to skoro měsíc a vízum pořád nemám. Asi před týdnem jsem dostal email, ve kterém bylo napsáno, že si musím doplnit ještě zdravotní vyšetření a kopie vysvědčení 1.- 4. ročníku na střední a maturitní vysvědčení. Abych vůbec dostal tyto informace, musel jsem zavolat 2x na ambasádu. Poprvé po 15 dnech, kdy se vůbec neozvali, podruhé asi po 21 dnech, kdy mi nepřišel od nich slíbený email.

Zdravotní vyšetření je velmi drahá záležitost vzhledem k tomu, co se dělá. Je to v podstatě běžná zdravotní kontrola - měření krevního tlaku, dýchání, zad, zraku, moč apod. Stojí neskutečných 4 000 Kč (VZP neplatí) a musí být provedena u doktora/ky, která je napsaná v došlém emailu z ambasády (u mě to byla Mudr Patočková, Vítězné náměstí 9, Praha). Je potřeba si domluvit schůzku přes telefon, pak s sebou na kontrolu přinést 2 fotky na pas, formuláře 26 a 160, nějaké aplikační číslo (to jsem si radši vytiskl celou přílohu v emailu z ambasády), a 4 000 Kč in cash. Součástí vyšetření je i rentgen, za který se platí dalších 500 Kč. Takže dohromady za lékařské vyšetření 4 500 Kč.

Co se týče vysvědčení, našel jsem jen 3. a 4. ročník na střední + maturitní vysvědčení. Zase jsem tam musel zavolat, a řekli mi, že to stačí. Naštěstí stačilo zaslat emailem. Nechápu, proč to chtějí, když jsem poslal bakalářský diplom a škola v Austrálii jim poslala mou nominaci.

Každopádně Austrálie už nyní vychází přes 20 litrů (11 500 Kč vízum + 4 500 lékařské vyšetření + 4 500 OSHC + nějaké ty stovky za telefonování apod.), a to nemám ještě letenku.

středa 7. listopadu 2012

Austrálie - žádost o vízum doručena

Dnes konečně potvrdili z vídeňské ambasády příjem mé zásilky se žádostí o vízum. Včera měli lidi z FedEx problém doručit moji zásilku, tak jsem jim musel poslat číslo na ambasádu (kontaktoval mě ten týpek od společnosti, kde jsem zásilku odeslal).
Dnes už někdo převzal a hned mi poslali email s podrobnostmi a také s číslem, pod kterým se bude mé vízum zpracovávat. V mailu jinak není nic podstatného, samé obecné kecy, které lze dočíst ze stránek.
Také jsem si všiml, že už mi strhly prachy z účtu. 11 366,39 Kč stojí administrativní poplatek! Tak snad brzy dorazí i official vízum, abych mohl zařizovat letenku.

Čau

čtvrtek 1. listopadu 2012

Austrálie - vízum

Tak jsem dnes poslal dopis na australskou ambasádu ve Vídni. Chtěl jsem se registrovat online, bohužel nejde to pro mě, ale pokud máte české občanství, tak by to mělo jít. Tak jsem poslal jako zásilku pomocí epskuryr.cz tyto papery:


  • dodatek k diplomu - Bc. dodatek
  • 4 fotografie se jménem napsaný na zadní straně
  • žádost - formulář 157A - UTFG; zde je několik částí, se kterými jsem si nebyl jistý: About your family - nevyplňuje se, pokud nemáte vlastní rodinu (ženu a děti); Previous visa applications - tvrzení se týkají australské vízi; telefonní čísla - do country code se vyplní ( +420), area code nic, a do number vaše telefonní číslo (777 777 777).
  • Confirmation of Enrolment - to se dostává od školy, je na něm napsaná i adresa, kam se má posílat, a i potvrzení o zaplacení OSHC pojištění
  • Acceptance letter - tohle se nemusí posílat, ale dal jsem to do zásilky pro jistotu


Poslal jsem to ekonomicky, tzn. trvání 3-4 dny za cenu 590 Kč. Docela drahé, ale je mi to fuk. Hola.

pondělí 22. října 2012

Upload souboru do Box.net v Grails

O víkendu jsem tvořil CMS a chtěl jsem vyzkoušet nějakou službu, kam bych mohl ukládat obrázky. Mezi službami jsem zkoušel i Box.net. Cílem bylo umožnit upload obrázku do mého osobního box.net (mám 50 GB místa a neuložil jsem tam zatím nic).

V dokumentaci box.net bylo něco takového:

curl https://www.box.com/api/2.0/files/content \ -H "Authorization: BoxAuth api_key=API_KEY&auth_token=AUTH_TOKEN" \ -F filename=@FILE_NAME \ -F folder_id=FOLDER_ID

Je to pomocí nástroje cURL. Jednoduše vysvětleno, pro upload je potřeba provést POST na adresu https://api.box.com/2.0/files/content spolu s hlavičkou Authorization, kde uvedete nějaké ty tokeny, a dva formulářové elementy filename a folder_id + uploadovaný soubor.

private String sendHttps(String httpUrl, byte[] data, String filename) {

        HttpClient httpclient = new DefaultHttpClient()
        httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1)
        HttpPost httppost = new HttpPost(httpUrl)

        Map headers = ["Authorization": "BoxAuth api_key=${apiKey}&auth_token=${authToken}"]  // hlavička s autorizačními údaji
        headers.each {k, v ->
            httppost.addHeader(k, v)
        }

        MultipartEntity mpEntity = new MultipartEntity()  // pro POST formuláře s přílohou
        ContentBody cbFile = new ByteArrayBody(data, filename)
        mpEntity.addPart("filename", cbFile)  // tato část mi dělala největší potíže
        mpEntity.addPart("folder_id", new StringBody("445743883")) // ID složky na box.net
        httppost.setEntity(mpEntity)
       
        HttpResponse response = httpclient.execute(httppost)
        HttpEntity resEntity = response.getEntity()
       
        httpclient.getConnectionManager().shutdown()
...
    }
Pro připojení jsem použil knihovnu Apache HttpComponents. Zkoušel jsem i nějaký plugin do Grails, ale u nich jsem měl problém vytvořit formulářový element spolu s tím souborem a poslat to celé.

pondělí 8. října 2012

Austrálie - acceptance letter

Konečně jsem přijatý na University of Queensland! Mám už přístup do IS školy, ale provádět akce budu moci až od 19.11.2012.

Přihlášky z předchozího článku jsem nakonec vytiskl, podepsal, oscanoval a poslal emailem do Austrálie. Při  vyplňování jsem si nebyl jistý u jedné položky, a to je Student ID. Nakonec jsem poslal 2x ten samý papír, jednou se Student ID jako ISIC číslo, a podruhé jako číslo uvedené v přihlášce.
Obavy jsem měl také z placení pojištění, nakonec it was easy. Prachy za pojištění se strhávají tak, že stačí mít kartu, kterou lze platit přes net (klasický VISA). Do přihlášky se vypíše číslo karty, datum platnosti a vlastnoruční podpis a další den už na účtu jste chudší o nějaké litry.

 Nyní již zbývá jen zařídit vízum a koupit letenky do Austrálie. V novém emailu jsem dostal dokument, se kterým se mám dostavit do Vídně. Není tam uvedený žádný email, kam žádost o vízum poslat, takže možná budu muset zajít osobně do Vídně. We'll see.

středa 19. září 2012

Austrálie - nabídka ke studiu

Dnes 19.9. jsem dostal mail od paní koordinátorky z VŠE, která mi přeposlala dopis s nabídkou ke studiu v Austrálii. Přihlášku jsem poslal expresně dne 7.9.2012.
Nabídka ke studiu obsahuje nějaké kecy o tom, že mě přijali, ale je potřeba dále odeslat nějaké věci ke vyřízení vízy. Email z Austrálie tedy obsahuje jedno PDF o tom, co udělat dál. Druhé PDF je o tom, že mi uznali předměty, které jsem si navolil. A třetí PDF obsahuje formuláře, které se musí vyplnit, ručně podepsat a poslat zpět spolu s prachy. Mělo by to stačit jen emailem, tak uvidíme.

sobota 15. září 2012

Haskell - 3. kapitola

Vzory (patterns)


- můžeme definovat pro každý parametr jiné tělo fce

  1. lucky :: (Integral a) => a -> String  
  2. lucky 7 = "LUCKY NUMBER SEVEN!"  
  3. lucky x = "Sorry, you're out of luck, pal!"   

Pro číslo 7 a pro ostatní čísla jsou definovány různá těla fce.

Poznámka: tady jsem si všiml zajímavosti. První řádek specifikuje typ fce (viz předchozí kapitola). Když ho dáme pryč, typ fce bude: lucky :: (Eq a, Num a) => a -> [Char]. Nejspíš je to způsobený odvozováním typu. Když nechám jen poslední řádek s podmínkou pro x obecně, typ fce bude: lucky :: t -> [Char].

Příklad: fce pro výpočet faktoriálu pomocí vzorů (řešení str.36 dole)? A pak zkuste vypočítat faktoriál pro 100 000 a koukejte se na Matrix.

Sčítání 2 vektorů


  1. addVectors :: (Num a) => (a, a) -> (a, a) -> (a, a)  
  2. addVectors (x1, y1) (x2, y2) = (x1 + x2, y1 + y2)  



Vlastní implementace fce head


  1. head' :: [a] -> a  
  2. head' [] = error "Can't call head on an empty list, dummy!"  
  3. head' (x:_) = x  

(x:_) - x zde reprezentuje první prvek z listu a _ jsou zbývající prvky - díky znaku : je zajištěno, že to musí být list. ( a ) jsou potřeba, pokud parsujeme více prvků najednou (zde parsujeme první prvek a zbytek listu)

As patterns

Někdy je potřeba získat celý výraz a i výraz rozdělený podle patternu.

  1. ghci> capital "Dracula"  
  2. "The first letter of Dracula is D"  

Fce capital vrátí větu, která obsahuje původní výraz i první písmeno z původního výrazu. Lze to udělat takto:

  1. capital :: String -> String  
  2. capital "" = "Empty string, whoops!"  
  3. capital (x:xs) = "The first letter of " ++ x:xs ++ " is " ++ [x]  


ale i hezčím způsobem:


  1. capital :: String -> String  
  2. capital "" = "Empty string, whoops!"  
  3. capital all@(x:xs) = "The first letter of " ++ all ++ " is " ++ [x]  


Guards

- jedna z možností větvení


    1. bmiTell :: (RealFloat a) => a -> a -> String  
    2. bmiTell weight height  
    3.     | weight / height ^ 2 <= 18.5 = "You're underweight, you emo, you!"  
    4.     | weight / height ^ 2 <= 25.0 = "You're supposedly normal. Pffft, I bet you're ugly!"  
    5.     | weight / height ^ 2 <= 30.0 = "You're fat! Lose some weight, fatty!"  
    6.     | otherwise                   = "You're a whale, congratulations!"  
Začátek každé podmínky je označen znakem | (pipe) a pak následuje zápis podmínky. Pozor na mezeru před  |, musí tam být min. 1 mezera, jinak je to chyba.


Where

Předchozí příklad není moc DRY. To lze spravit pomocí konstrukce where:


    1. bmiTell :: (RealFloat a) => a -> a -> String  
    2. bmiTell weight height  
    3.     | bmi <= skinny = "You're underweight, you emo, you!"  
    4.     | bmi <= normal = "You're supposedly normal. Pffft, I bet you're ugly!"  
    5.     | bmi <= fat    = "You're fat! Lose some weight, fatty!"  
    6.     | otherwise     = "You're a whale, congratulations!"  
    7.     where bmi = weight / height ^ 2  
    8.           skinny = 18.5  
    9.           normal = 25.0  
    10.           fat = 30.0  


definujeme jednu vnitřní funkci a tři konstanty na konci vnější funkce. Scope těchto vnitřních fcí a konstant je pro celou vnější fci. Pozor na odsazení jejich odsazení, musejí být stejně odsazené.

Lze použít i pattern matching:

  1. initials :: String -> String -> String  
  2. initials firstname lastname = [f] ++ ". " ++ [l] ++ "."  
  3.     where (f:_) = firstname  
  4.           (l:_) = lastname   



where funkce mohou být i složitější:

  1. calcBmis :: (RealFloat a) => [(a, a)] -> [a]  
  2. calcBmis xs = [bmi w h | (w, h) <- xs]  
  3.     where bmi weight height = weight / height ^ 2  

Zde definujeme vnější funkci calcBmis, kterou používá ve svém těle vnitřní funkci bmi. Vnitřní fce bmi není dostupná zvenku, ale jen uvnitř calcBmis.

Let


  1. cylinder :: (RealFloat a) => a -> a -> a  
  2. cylinder r h = 
  3.     let sideArea = 2 * pi * r * h  
  4.         topArea = pi * r ^2  
  5.     in  sideArea + 2 * topArea  


let na rozdíl od where prvně přiřazuje a až pak provádí funkci v bloku in. Rozdíl je též ve scope definovaných funkcí. Let není vidět mezi guardy jako u wherelet je také výraz:


  1. ghci> 4 * (let a = 9 in a + 1) + 2  
  2. 42  


Přepis funkce calcBmis do podoby s let:


  1. calcBmis :: (RealFloat a) => [(a, a)] -> [a]  
  2. calcBmis xs = [bmi | (w, h) <- xs, let bmi = w / h ^ 2]  


Rozdíl ve scope, když v ghci napíšeme let s konstrukcí in či bez ní:


  1. ghci> let zoot x y z = x * y + z  
  2. ghci> zoot 3 9 2  
  3. 29  
  4. ghci> let boot x y z = x * y + in boot 3 4 2  
  5. 14  
  6. ghci> boot  
  7. <interactive>:1:0Not in scope: `boot'  



Case

  1. describeList :: [a] -> String  
  2. describeList xs = "The list is " ++ case xs of [] -> "empty."  
  3.                                                [x] -> "a singleton list."   
  4.                                                xs -> "a longer list."  

Klasika, lze tu použít i pattern matching.