iPod touch 1.1.3 jailbreak

Pokúsil som sa upgradovať svoj jailbreaknutý iPod touch 1.1.2 na firmware 1.1.3 s jailbre­akom. Na internete sú rône návody pre iPhone a iPod, niektoré sú len pre Mac, iné pre Windows a niektoré nevyžadujú použitie počítača vôbec. Mne fungoval až druhý program, ktorý som použil – iJailBreak.

Jailbreaknutý iPod touch 1.1.3 umožňuje spúšťať nové iPod aplikácie (Mail, Maps, nové Safari s widgets) bez nutnosti ich kúpenia cez iTunes Store (čo u nás nie je zatiaľ možné).

Veľmi dobrým zdrojom informácií o jailbreakovaní všetkých verzií iPod touchov je blog RupertGee’s i­Blog.

Na upgrade na firmware 1.1.3 je potrebné mať jailbreaknutý firmware 1.1.2. Treba mať firmware 1.1.1, ísť na http://jailbre­akme.com, nainštalovať Installer.app, nainštalovať októbrový update, upgradovať na 1.1.2 a aplikovať JailBreak 1.1.2.

Pred aplikovaním iJailBreak treba vypnúť Auto-Lock (Settings > General > Auto-Lock > Never) a nainštalovať BSD Subsystem. Z repozitáru http://ijailbreak.com/repo.plist si treba nainštalovať iJailBreakMobile 1.1.2 package. iJailBreak aplikácia si stiahne firmware 1.1.3, opatchuje ho a flashne. Celý proces trval približne 45 minút. Po manuálnom reštarte som mal úspešne nainštalovaný najnovší firmware a aj dostupný Installer.app.

Nasledovala honba za najnovšími iPod touch aplikáciami :-) V kategórii iJailBreakMobile totiž package iPod touch Software Upgrade nefunguje. Treba použiť repozitár http://ipodtouchmaster.com/files/repo.xml, ktorý pridá kategóriu iPhone 1.1.3 Applications a v nej je package The iPhone 1.1.3 Apps. Enjoy Mail a Google Maps ;-)

Celý popis ako aplikovať iJailBreak: Let’s Jailbreak the iPod touch 1.1.3 with the iJailbreak.com Met­hod

Informácia o dostupnosti iPod touch aplikácií: AriX at iJailBreak.com restored; certain emails should be resent!

Prehľad o systéme na pozadí desktopu

Ak spravujete veľa serverov a stráce prehľad v tom, s ktorým serverom práve robíte, určite vám pomôže Sysinternals utilitka BgInfo.

BgInfo generuje pozadie plochy s aktuálnymi hodnotami systémových premenných, ako je názov stroja, meno prihláseného užívateľa, všetky používané IP adresy, DHCP server, default gateway, verzia OS a mnohé iné. Ak hodnota, ktorú potrebujete, nie je medzi štandardnými, BgInfo vie načítavať údaje aj cez WMI, čiže si môžete zobraziť hodnotu čohokoľvek.

BgInfo je veľmi užitočná utilitka aj v prostredí virtuálnych strojov, pri prezentáciách, či HOL laboch.

.NET Framework uvoľnený v licencii Microsoft Reference Licence

Scott Guthrie na svojom blogu dnes oznámil, že zdrojový kód .NET Frameworku bude uvoľnený pod licenciou Microsoft Reference Licence.

V praxi to znamená, že budeme môcť debugovať aj procesy v microsofťáckych knižniciach. Zdrojový kód má byť dostupný na stiahnutie, ale aj pomocou webovej služby, ktorú bude využívať Visual Studio 2008.

Po nastavení adresy serveru vo Visual Studio 2008 bude VS automaticky on-demand sťahovať potrebné zdrojové kódy počas debugovania. Výhoda tejto služby je, že vždy sa stiahnu aktuálne kódy pre používanú verziu frameworku (vo VS 2008 bude možné nastaviť, voči ktorej verzii .NET sa má vyvíjať – 2.0, 3.0 alebo 3.5).

Viacej podrobností v článku Releasing the Source Code for the .NET Framework Libraries.

Microsoft okopíroval Javu

Toto je časté revanie malých detí, ktoré si myslia, že keď napíšu kód v Jave, tak sú programátori. Je to naozaj silný pocit prehnať kód javac kompilátorom a potom si myslieť, že toto je „programový kód“. java je však v skutočnosti interpretovaná, preto sa jedná o „skriptovací kód“.

Mýtus: Microsoft okopíroval Javu.

Fakt: citácia z knihy JSP – Java Server Pages, Barry Burd, 2003 Computer Pres­s:

Poohlédněme se teda za historií objektů typu JavaBeans. Ke knoci devadesátých let minulého století se programátoři ve vývojovém týmu firmy Sun Micrososystems dívali přes rameno svým kolegům v Redmondu. A co spatřili? Dozrávajíci model komponentového softwaru známý jako COM – neboli Microsoft Component Object Model. Objekty modelu COM byly z oblibou používány na webových stránkach známých pod označením ASP – Active Server Pages. Odpovědí firmy Sun byla specifikace JavaBeans (jako součást sady JDK 1.1).

Tento odstavec presne naznačuje, že Sun sa nechal inšpirovať komponentovým modelom COM od Microsoft-u.

Java jazyk vs. C#

Microsoft, ktorý údajne okopíroval Javu, sa pri návrhu jazyka C# (ktorý je syntakticky oveľa viacej podobný na C++ než na Javu) inšpiroval: autori C# zistili, že checked a unchecked exceptions sú úplná zbytočnosť, C# má narozdiel od Javy aj Vlastnosti, Delegátov, skutočné Udalosti a iné vymoženosti.

.NET narozdiel od Javy má skutočné generické typy – Java kompilátor odstráni informáciu o typovosti generických typov (tzv. erasures) – teda tieto informácie, nerozdiel od .NET, nie sú dostupné pomocou reflexie za behu programu. Podobne je tomu aj s atribútovým programovaním. Zatiaľ čo Java má v poslednej verzii úbohú podporu pre anotácie (veľmi zjednodušená obdoba atribútov), .NET už vo svojej prvej verzii podporuje plnohodnotnú prácu s atribútmi i pomocou reflexie. Plno „killing“ (alebo „that rocks!“) vlastností .NET-u je založených práve na atribútoch.

Ďalšie rozdiely medzi C# a Javou: Java vytvára všetky metódy ako virtuálne (explicitne treba zákazať pomocou final). C# (a .NET MSIL kód) ide presne opačnou cestou: virtuálne metódy treba explicitne označiť. Deklarácia implementácie rozhrania alebo rozširovania triedy sa v C# označuje operátorom : (ako v C++). Java používa kľúčové slová extends a implements. .NET (a teda aj C#) umožňujú explicitnú implementáciu rozhrania – Java nie.

Hodnotové a referenčné typy

Java obsahuje primitívne typy (ktoré sú naozaj primitívne a nedá sa s nimi robiť pomocou OOP – iba pomocou procedúr zaobalených do tried). .NET dotiahol unifikovanú OOP prácu s dátovými typmi takmer k dokonalosti – existujú hodnotové a referenčné typy, ktoré všetky dedia zo System.Object. Takto je skutočne zaručené, že všetky dátové typy dedia z jediného rootového typu. V Jave je toto obchádzané pomocou zaobalovacích tried. Základné dátové typy (bool, int, long, double, DateTime) sú hodnotové – tzn. vždy majú priradenú hodnotu. Takto sa vás nestane, že kompilátor za vás boxuje/unboxuje hodnoty, vy máte podmienku if (!isEditMode) { … } a zrazu dostanete NullPointerEx­ception.

Java Virtual Machine vs. .NET Runtime

Javisti si celkovo mýlia pojmy s dojmami a ani poriadne nerozlišújú medzi jazykom Java, jazykom C# a ich spúšťacími prostrediami – Java Virtual Machine a .NET Runtime. Mýtus okopírovania .NET modulu manažovanej správy pamäte vychádza práve z podobnosti správy pamäte v Jave. Treba však podotknúť, že manažovanú správu pamäti má aj PHP, Python, či JavaScript.

Finalizácia objektov je v .NETe oveľa lepšie vymyslená ako v JVM. .NET Garbage Collector umožňuje volať finalizátory (C# deštruktory) a podporuje IDisposable pattern. Ako som sa dočítal na webe, v Jave nie je vôbec zaručené vykonanie finalize() metódy a zdroje sa uvoľňujú v try/catch bloku. Vďaka definovanie IDisposable patternu a deštruktorom je možné správne uvoľniť zdroje, aj keď programátor spraví chybu a nepoužije napr. using() blok. Čo je ďalšia vec, ktorú jazyk Java nemá: blok using vygeneruje pre IDisposable objekty kompletný try/finally blok a dojde teda k správnemu a včasnému odstráneniu zdrojov.

No, to som sa ale rozpísal 🙂 Ako je vidieť, .NET ponúka oveľa bohatší programový model, ktorý je konzistentný a je založený na zdrojovom kóde (to je moje označenie. Java totiž strašne veľa vecí definuje iba v rôznych dokumentoch a špecikáciách (napr. JavaBeans a ich „vlastnosti“ = get, set, is). .NET vďaka využitiu atribútov poskytuje celé riadenie kompilátora, alebo vývojového prostredia zo zdrojového kódu.).

Človeka, ktorý píše skripty v Jave a hovorí si „programátor“, som určite nepresvedčil, že .NET a C# nie sú kópiou Javy. Ale ponúkol som prehľad výborných funkcií, ktoré nemajú svoj ekvivalent v Jave a vďaka ktorým viem, že som sa pred niekoľkými rokmi rozhodol správne, keď som sa začal učiť používať .NET platformu.

Aktulizácia: A skoro som zabudol na to, že pre .NET už môžete programovať vo vyše 30 jazykoch.

Klonované virtuálne počítače

Potreboval som si vytvoriť skúšobnú sieť o 3 serveroch (doména, DB, Sharepoint), tak som skúsil použiť VMware Workstation namiesto Virtual PC. Nainštaloval som Windows Server 2003 R2 Enterprise Edition, aplikoval Service Pack 2 a zaktualizoval. Potom som naklonoval tento virtuálny stroj a začal nastavovať počítače. Po vytvorení domény a pripojení serverov do nej som však začal mať problém ? nedalo sa prihlásiť do domény. Problém bol v duplicitnom SID počítačov. (Chybová hláška The name or SID of the domain specified is inconsistent with the trust information for that domain.)

Sysinternals však má dobrú utilitku NewSID, ktorá vygeneruje počítaču nové SID. Pred vygenerovaním a aplikovaním nového SID však je potrebné počítač odpojiť z domény, pretože novo aplikované SID nebude mať žiadne práva v doméne. Bude sa dať prihlásiť do domény avšak bude problém s právami počítača.

PS: 4GB disk je málo pre Windows Server 2003 R2 Enterprise Edition SP2. Po inštalácii zaberá 3GB.

Počítač vo vašej dlani

Najdôležitejší obsah svojho PC, ktorý potrebujete mať na cestách, môžete mať vo svojej dlani už dávnejšie (a aj z Mac-u). SoonR služba umožňuje prístup k súborom, e-mailom, kalendáru a aj Skype chatom cez mobilný telefón. Teraz však získate ešte rýchlejší a pohodlnejší prístup k svojim údajom: je tu jedna z prvých Ajax aplikácii pre mobily!

Ak vlastníte mobilný telefón na ktorom dokáže bežať Opera Mobile, máte možnosť si už teraz vyskúšať jednu z prvých Ajax aplikácií pre mobilné prehliadače. Ajaxové stránky sme optimalizovali pre rýchly prenos dát, takže sú oveľa rýchlejšie ako klasický mobilný HTML interface a podstatne s ním ušetríte dátový prenos. Vďaka Ajaxu je možné si priečinok s obrázkami spustiť ako slide-show prezentáciu.

Marketingové info: SoonR Sizzles on AJAX

Načítavanie údajov z DB pomocou SqlDataReader-u

SqlDataReader je veľmi efektívny pri načítavaní údajov z databázy, pretože obsahuje vždy jeden riadok a načítava údaje postupne. Koncept (algoritmus) načítavania údajov je defacto je pri každom načítavaní jednotný. Problémom je ako dostať dáta z readeru a spracovať ich a mať počas toho aj otvorené pripojenie do databázy (SqlDataReader samozrejme vyžaduje počas čítania aktívne pripojenie).

Najľahšie sa dá napísať všeobecná metóda pre vykonávanie SQL príkazov cez metódu SqlCommand.Exe­cuteNonQuery(). Jej návratová hodnota je void, netreba ju teda nijako spracovať a nič vracať z vlastnej metódy.

Metóda ExecuteScalar() sa dá ľahko zaobaliť: buď bude metóda vracať Object, ktorý vracia ExecuteScalar(), alebo pri použití generík môže zaobaľujúca metóda vracať špecifický typ daný generickým parametrom.

Pri použití ExecuteReader() treba údaje nejako spracovať.

Práca so SqlDataReader-om

  • Pripravíme si objekt SqlConnection a SqlCommand
  • Otvoríme spojenie do databázy
  • Spracujeme údaje zo SqlDataReader-u
  • Uzatvoríme spojenie s databázou
  • Zrušíme objekty pomocou Dispose() metódy
  • Vrátime spracované údaje

Ako som spomenul, problém spočíva v tom, ako vytvoriť všeobecnú metódu, ktorá údaje zo SqlDataReader-u vytvorí špecifický dátový typ (IList, dátová tabuľka, užívateľské konto, produkt…) a vráti ho.

Prvá časť, ktorá je generická v tejto metóde, je návratová hodnota. Pred otvorením spojenia s databázou nainštancujeme návratovú premennú na východziu hodnotu operátorom default(). (Operátor default() inicializuje číselné typy na hodnotu 0, referenčné typy na null a v štruktúrach nastaví číselné a referenčné typy obdobne.) Po získaní objektu SqlDataReader vytvoríme inštanciu návratového objektu, poupratujeme za sebou a vrátime výsledok.

Ukážka 1.

Druhá generická časť je vytvorenie objektu. Na vstupe máme objekt SqlDataReader, na výstupe generický typ T. Generická metóda by vyzerala takto:

public T DataReaderHan­dle<T>(SqlData­Reader reader); 

Keď túto metódu zavoláme v časti ?spracovanie údajov?, vykonávanie sa tak presunie do užívateľského kódu a po vytvorení objektu sa vráti k štandardnému toku programu. Tu využijeme callback pomocou delegátov. Delegát určuje predpis metódy, ktorá má byť zavolaná a je možné ho použiť ako parameter funkcie. Ukážková metóda DataReaderHandle bude ako delegát vyzerať takto:

public delegate T DataReaderHan­dle<T>(SqlData­Reader reader); 

Ešte treba pridať delegát ako parameter do metódy a vyvolať metódu, na ktorú ukazuje:

Ukážka 2.

Už len stačí napísať metódy, ktoré budú spracovávať SqlDataReader a vytvárať patričné objekt. Keď máme triedu User so statickou metódou ParseUser vracajúcu objekt User, stačí zavolať ExecuteReader takto:

User user = DbLayer.Execu­teReader<User>(U­ser.ParseUser, „UserDetails“, sqlParams); 

Knižnica DbLayer: /weblog/media/dot­net/DbLayer.cs

Prečo programujeme v C-jazykoch?

Či už píšeme programy v jazyku C++, C#, Java a iných jazykoch založených na C (jedna prípustná syntax v PHP je podobná C, ale v PHP sa neprogramuje), nie je problém prečítať kód napísaný v inom C-style jazyku (i keď pochopenie je už ťažšie :-)). Prečo však bol jazyk C pomenovaný týmto písmeno a nie iným?

Jazykom, ktorý mal na históriu programovacích jazykov veľmi veľký vplyv bol ALGOL (algorithmic language) z roku 1958. Populárnym sa stal v roku 1960 po vzniku jednoduchšej varianty ALGOL-60. Jazyk bol portovateľný, s nízkou abstrakciou hardware a vyvinutý pre písanie algoritmov. ALGOL-68 pridal do jazyka nové vlastnosti, ale zvýšil jeho komplexnosť a abstrakciu hardwaru.

Roku 1963 Compoter Lab of Cambridge University prišiel s jazykom CPL. CPL bol založený na ALGOL-e, znižoval abstrakciu HW, ale zachovala sa v ňom komplexnosť ALGOL-u. Martin Richards navrhol Basic CPL (BCPL), ktorý bol okresanou verziou CPL. Tento jazyk ešte zlepšil Ken Thompson z Bell Labs svojím B jazykom.

Jazyk B bol oveľa vhodnejší na systémové programovanie, jednoduchší a rýchlejší. Jeho nástupca, C, vyšiel z Bell Labs roku 1972. So zachovaním jednoduchosti priniesol nový jazyk vyššiu abstrakciu hardware ako jeho predchodca.Pôvodne určený jazyk pre UNIXové systémy sa stal univerzálne použiteľný programovací jazyk.

Samostatne od procedurálnych programovacích jazykov bol navrhnutý jazyk na tvorbu simulácií ? Simula, vyvinul sa však na univerzálny objektovo orientovaný jazyk. Priniesol hlavné koncepty OPP: triedy, dedičnosť, dynamické väzby.

Kombináciou C a Simula vznikol priamy nástupca C ? C++ (1983) s novými vlastnosťami ako šablóny alebo výnimky.

Informačný portál

Moja iniciatívna maličkosť navrhla, aby v robote nasadili nejaký portál na správu dokumentov. Mám skúsenosti s pár inštaláciami SharePoint Services, tak sme sa rozhodli pre ne. Požiadavka na portál bola, aby vedel pracovať aj s dokumentami na zdiľaných priečinkoch a s mailami v Exchange. Čiže sme potrebovali nasadiť SharePoint Portal Server 2003.

Rozchodiť SPS Portál už nie je taká sranda, ako rozchodiť len WSS. Trápili sme sa s kolegom, trápili, celý deň. Úspech v rozchodení Portálu spočíva v tom, že konto, pod ktorým beží Application Pool portálu na IIS, má prístup do SQL Server-u a je owner konfiguračnej databázi Portálu.

SharePoint Portal má úžasnú vec, ktorou je crawler. Tento indexovací robot prechdáza stránkami portálu a indexuje ich. Týmto spôsobom dokáže naindexovať Portál, Sites, Exchange alebo zdieľané priečinky. Verejné priečinky Exchange, ktoré sa majú zdieľať, treba vystaviť cez Exchange HTTP Virtual Server s použitím Windows integrated authentication a bez formulárového prihlasovania. Potom stačí crawleru povoliť adresu http://exchange/public/verejný_priečinok a spustiť indexáciu.

Vyhľadávanie je jedna z najlepších vecí na Portále. Z jediného vyhľadávacieho políčka máte možnosť vyhľadať vo full textovo indexovanom obsahu (kategorizovanom na základe metadát v dokumentoch) , ktorý nepozostáva len z obsahu dokumentov v knižniciach na SharePoint-e, ale aj zo súborov na zdieľaných priečinkoch, v Exchang-i a na mnohých iných miestach. Všeobecne sa dá povedať, že čokoľvek, čo sa dá reprezentovať URI adresou, sa cez portál dá nájsť.

Ukladanie dokumentov do knižníc na SharePoint Services je geniálne jednoduché. Stačí otvoriť Word, napísať svoj dokument a uložiť ho na adresu http://sharepoint/sites/project/documen­ts. Word, Excel a PowerPoint dokážu prechádzať štruktúrou SharePoint-u ako priečinkami na disku, ?root? však nie je Tento počítač, ale SharePoint Server.

Pre správne fungovanie balíka Office so SharePointom treba mať doinštalovanú súčasť SharePoint Services Components, bez ktorej Office nevie takto pracovať so SharePointom.

Windows Sidebar Gadgets

Windows Vista a portál Live.com umožňujú spúšťanie tzv. Gadgetov, čo sú mini aplikácie využívajúce DHTML alebo Web 2.0. Najnovšie informácie pre vývojárov o gadgetoch sú na MicrosoftGadget­s.com. Sú tu dva tutoriály o vytváraní gadgetov pre Live.com a Windows Sidebar. Jediný rozdiel pre Gadgety medzi týmito dvoma prostrediami je XML manifest, ktorý popisuje Gadget.

Live.com používa rozšírený RSS formát. Windows Sidebar používa vlastný XML formát, ktorý popisuje Gadget v podstate rovnakým spôsobom, ako RSS formát, len tagy majú iné názvy.

Na vývoj Gadgetov vám stačí Visual Studio Express (Web Edition pre Live.com Gadgety) a prípadne Windows Vista, ak by ste chceli testovať Gadgety vo Windows Sidebar-e. Potrebujete mať znalosť HTML, CSS a JavaScript-u a potom už stačí si prejsť SDK.

Nastavenie vývojového prostredia pre Live.com gadgety je pracnejšie, poskytuje však aj ladenie JavaScriptov z prostredia Visual Studia (podpora pre breakpointy, step in/out… klasické debugovanie).

Portál Live.com nepoužívam, tak som začal pracovať na Gadgete do Windows Sidebar. Podľa tutoriálu som vytvoril šablónu pre Visual Studio, ktorá vytvorí nový C# projekt so základnou štruktúrou, predpripravenou prvou stránkou a stránku s nastaveniami Gadgetu a nejakú tú aplikačnú logiku na pozadí. C# projekt po zbuildovaní nakopíruje súbory do správneho priečinku, aby ho Windows Sidebar videl. V tomto type projektu však nebude možné ladiť JS, pretože Windows Sidebar nepracuje so zdrojákmi, ktoré má Visual Studio, ale s ich kópiou a neexistuje žiaden PDB súbor, ktorý by umožnil ladenie.

Šablónu Windows Sidebar Gadget treba nakopírovať do priečinku My Document\Visual Studio 2005\Templates.