\

Školení Návrhové vzory, OOP a UML


 Saturday, February 18, 2006
O směšnosti jednoho z přežívajících mýtů o Microsoftu
mýty

Na úvod jedna terminologická poznámka. Myslím, že Lion Feuchtwanger říkal, že mýtus je na rozdíl od historie nejen to, co nikdy nebylo, ale kupodivu i to, co v současnosti stále je.

Když mluvím o mýtech kolem Microsoftu, mám tím na mysli všeobecně rozšířená přesvědčení a předsudky, které se donekonečna uměle vyživují zveličováním a zkreslením některých nešťastných přehmatů a chyb Microsoftu v minulosti. Chyby ale byly dodatečně exkulpovány razantní marketingovou kanonádou, takže se nestaly pro Microsoft tím osudovým klopýtnutím, o něž všichni jeho konkurenti pochopitelně tak stáli. O tom, proč takové marketingové kanonády nebyli schopni samotní konkurenti, když se bili v prsa, jak dobré produkty mají, psát nechci - snad jen podotknu, že rychlé pronikání Microsoftu do různých oblastí softwaru a spotřební elektroniky je někdy docela ukázkovým příběhem o neschopnosti a rigiditě řízení ostatních firem, kdy se lze jen dohadovat, proč v nich nedošlo ke stínání hlav neschopného managementu ihned při náznaku razantního poklesu tržního podílu dříve dominující společnosti zcela ve prospěch Microsoftu.  Kdyby se psaly dějiny neschopnosti, měl by v nich mít čestné místo management Palm platformy - přeci jen cpát lidem, že méně (funkcí) je více (funkcí), je přinejmenším neomaleně drzé a nové Treo s Windows Mobile je potupnou kapitulací dokazující, že nelze donekonečna primitivnost svého OS vydávat za úžasný klad. I marketing má své hranice - Q.E.D. ;-)

Takže jeden z mýtů o Microsoftu - Microsoft nemá kvalitní produkty, nabízí jen omalovánky (barvičky, klikátka, vějičky na BFU, průvodce, sponky - dosaďte dle libosti), ale jeho marketing dokáže v lidech vzbudit iluzi, že je to lepší než naše úžasné <dosaďte dle libosti>. Neříkám, že Microsoft má vždy nejlepší produkty ve všech oblastech, nebo že jeho marketing nepodává při podpoře prodeje produktů skvělé výkony - skvělé z hlediska prodejních výsledků, mě osobně toto pojetí marketingu nijak neoslovuje. Ani ale není pravda, že produkty Microsoftu prodává jen marketing, protože produkty kvalitativně stejné nebo lepší než konkurence nemá, a proto je nucen podlézat hloupé a tupé mase uživatelů nějakými líbivými grafickými pozlátky.

Podezřívavý a apriori zaujatý člověk se teď určitě ptá, proč vlastně tohle píšu? Třeba za nějaký mrzký jidášský peníz z marketingového budgetu Microsoftu. Konspirace musí být, já vím, a všichni rozumní přece vědí, kdo je dneska ďábel. ;-) Hlavní myšlenka tohoto spotu mě napadla při používání Nokie N90 (OS Symbian - Series 60)  - zvláště při přímém srovnání s platformou Windows Mobile, za jejíž zástupce a přímé konkurenty Nokie N90 můžeme považovat QTEK 8310 nebo i MDA Vario (Pocket PC Phone Edition).

Jak na mě zapůsobila Nokia.

Nečekal jsem od ní nic jiného, než to co jsem vyžadoval od dřívější 6230 - to znamená hlavně schopnost telefonovat a připojit se na internet. Neměl jsem žádnou potřebu na ni instalovat další programy, protože jako komunikátor mi slouží MDA Vario. Jaké však bylo moje překvapení, když jsem zjistil, že Nokia je nechutně pomalá třeba při přístupu do menu - toleroval bych zpožděný přístup při prvním otevření menu, ale menu se vykresluje při dalším otevření jen o malinko rychleji než při prvním přístupu. Dobře, zvyknout se dá skoro na vše. Skoro - již třetí týden musím pravidelně asi tak po sedmi dnech Nokii resetovat, protože se systém začne chovat velmi velmi podivně. Vstoupíte do menu, vyberete nějakou položku... a nic - jen zůstanete viset v menu a nic se nestane - žádná chybová hláška. Milostivě vám Nokia dovolí návrat do pohotovostního displeje a to je vše - pak proveďte reset, jestli chcete pracovat dále. A jen připomínám - Nokia je zcela holá, žádné programy jsem neinstaloval! Nokia PC Data Suite je slušný program, který konečně dokáže dobře nadetekovat telefon i synchronizovat data mezi telefonem a počítačem - nechápu ale vyžadování verze 1.4 nebo vyšší Widcomm ovladačů. Na svém domácím počítači s MSI USB BT klíčem jsem měl nižší verzi Widcommu, přes kterou se už připojilo bez reptání dost telefonů, ale teď jsem musel podstoupit upgrade, který nebude pro většinu "masových" uživatelů zase tak bezbolestný. Navíc připojení s Nokií přes GPRS/EDGE nepravidelně padá  - je to zcela evidentně chyba Nokie, protože ve stejnou dobu se stejným operátorem připojení přes Vario drží. Na čem si Nokia dala záležet jsou blbinky jako grafické motivy, hned v prohlížeči  telefonu máte záložku, abyste si mohli nahrát nové hry, no a hlavní je přece displej s vysokým rozlišením a úúúžasným počtem barev. Co na tom, že displej telefonu je docela malý při jeho porovnání s trochu zbytečně přerostlými rozměry telefonu. No a ten foťák, to je teprve radost pro pokročilé uživatele - ty mazanice s puncem Carla Zeisse jsou asi opravdu jedny z nejlepších v současných mobilních telefonech, jak se dočtete ve většině recenzí. V praxí to znamená pouze to, že místo rozmazané šmouhy vidíte občas docela dobře zaostřenou šmouhu.

Co tím chci říct - Nokia vyrobila telefon, který hýří různými multimediálními pozlátky a dokonce se pyšní podporou 3G sítí. Jenže místo dobrého nástroje dostanete nedotažený polotovar s operačním systémem, který mě o svých kvalitách nepřesvědčil. Celá N90 je drahé pozlátko bez pořádného obsahu a s operačním systémem, který je potřeba pořád restartovat. Marketing ale dokáže produkt na trhu dobře etablovat - nepřipomíná vám to něco? ;-)

Microsoft s platformou Windows Mobile jako by ani nebyl tím profláknutým Microsoftem. kterého všichni znají. Místo operačního systému hýřícího grafickými prostředky nabízí (v základním nastavení!) strohou, ale dobře funkční  obrazovku Dnes, fádní tlačítko Start a obyčejné zástupce nainstalovaných programů. Ne že by jeho OS (respektive samotná zařízení) netrpěl problémy - sám jsem se natrápil s rozchozením synchronizace s novým ActiveSyncem 4.1, ale i když si na Vario s "pomalým" Omap procesorem nainstalujete další aplikace, systém běží, nijak drasticky se nezpomaluje, navíc mi oproti Nokii nabídne připojení přes Wi-Fi. Jen ten foťák na Carla Zeisse nemá, nabídne mi jen staré známé šmouhy vhodné pro MMS. A ještě ke všemu člověk dostane od Microsoftu jen nějaké trapné a graficky chudé hry - skandál.  Vario nebo Qtek 8310  a další zařízení jsou jen takový nudný pracovní nástroj, který sice má své chyby, ale nijak zásadní a určitě ne neodstranitelné. V základní konfiguraci nudný pracovní nástroj - nic více. Na podbízivý a pestrobarevnými fanglemi hýřící Microsoft chabá vizitka. Dokonce se těm uživatelům málo vtírá, protože některá nastavení má umístěna z hlediska běžného uživatele na nečekaných místech - empiricky ověřeno. ;) A co je docela šokantní - do Pocket Wordu nebyl přenesen pan Sponka.

Takže ten mýtus, jak Microsoft prodává nefunkční software v bombastickém pozlátku, nějak nefunguje. Na předražené fangle a líbivá pozlátka zakrývající, že král je nahý,  je tady spíš Nokia. Na marketingový "imageový" balast je tu zase Nokia. Proč jen ten Microsoft nefunguje podle mýtotvorců? Divné, opravdu divné, vždyť ten mýtus je tak působivý - a co záleží na tom, že je lživý?

Mimochodem, ty takzvané srovnávací testy Symbianu a Windows Mobile "populárních" serverů a časopisů o mobilech, které vždy končí zcela "šokujícím" a dokola od sebe opisovaným tvrzením, že Windows Mobile jsou pro práci a Symbian pro zábavu, nemají oporu v realitě. Na Windows Mobile i Symbian existuje dostatek programů i her, které vám umožní udělat z jednoho i druhého zařízení buď multimediální výstřelek, nebo pracanta, anebo kupodivu dokonce obojí. Hlavní otázka je jiná. Jak vám pracant nebo multimediální nástroj bude ze zvolenou SW výbavou sloužit? A tomu se většinou v testech redaktoři vyhnou, protože by to znamenalo přejít od obecných plků k pořádnému testování.

Pár poznámek (i několik osobních) na závěr:

  1. Platforma Windows Mobile 5 není dokonalá. Microsoft dělá některé pro mě nepochopitelné kroky - Smartphone specifikace neobsahuje Pocket Word ani Pocket Excel, k dispozici máte jen prohlížeče office formátů. Absence Compact .Net Frameworku 2.0 v prvních verzích ROM s Windows Mobile 5 kvůli neexistujícímu načasování dokončení platformy Windows Mobile 5.0 s dokončením Compact .Net Frameworku 2.0 je neodpustitelná. Dlouhé čekání na uvedeni "push" emailu jako konkurenta BlackBerry  také nesvědčí o nějakém silném tahu na bránu. Kupodivu to ale na konkurenty (viz Palm) s přehledem stačí. O specifikaci SmartPhone 2002 nebo 2003 nemluvě - ze strany Microsoftu šlo spíš o první nástřely a rekognoskaci trhu s mobily, než že by byl schopen uvést se svými partnery na trh nějaká "killer" zařízení.
  2. Asi před rokem jsem při nějakém povídání s příznivcem Symbianu v nadsázce řekl, že má-li nějaké akcie Symbianu, měl by začít hledat vhodný okamžik, kdy je prodá. Nedávno ale i Gartner vydal studii, ve které  přestává Nokii a jejímu protežování Symbianu věřit. Navíc Nokia zakoupila licenci k ActiveSyncu ;)
  3. Tento článek není zamýšlen jako výzva k zuřivému flamu, ve kterém začnete vypočítávat, co všechno Nokia nebo Microsoft dělají špatně,  a pak přejdete plynule k urážkám oponentů. Takového flamu si do sytosti užijete na MobilManii, takže se na ni místo osočování se tady v komentářích raději rovnou přesuňte. Jsem příznivcem Windows Mobile, ale nejsem žádný nemilosrdný nepřítel Nokie. Používal jsem a používám různé telefony - od Nokie, Siemense, Sony Ericssonu po Philips atd. a nemám předsudky vůči žádnému ovládání ani platformě a smyslem článku není podat "totální" důkaz, co je lepší.
  4. Je o mně známo a nijak to nezastírám, že jsem Microsoft MVP, takže mě můžete "lacino" nařknout ze zaujatosti a z protežování jedné společnosti. Proti tomu se nelze bránit. Kdo mě zná, ví, že názorovou loajalitu k jedné firmě, produktu, světonázoru nebo bůhvíčemu dalšímu si u mě nelze prosadit.

 



Saturday, February 18, 2006 9:37:18 PM (Central Europe Standard Time, UTC+01:00)       
Comments [15]  Mobilitky | Ostatní


 Tuesday, February 14, 2006
Svatý Valentin - aneb o přitažlivosti kýče
srdce

Posledních pět let vždy o Svatém Valentinu slavím výročí uvědomění (no alespoň tedy to moje) si kapitulace běžné mužské racionality před ženskou kapriciozností. A v poslední době to dokonce už ani nebolí,  s moji malou prohru se asi dokázala vyrovnat i moje ješitnost. Když jsem se svou budoucí ženou teprve začínal "chodit"¨, tak jsme kromě zjišťování jiných příjemnějších rozdílů mezi oběma pohlavími in concreto vzájemně "ladili" a vyjasňovali si své názory na různé záležitosti. Samozřejmě v lednu a tedy v dostatečném předstihu došlo i na svátek Svatého Valentina. Použil jsem veškerou svoji výmluvnost, abych z mého pohledu brilantně a nevyvratitelně a s použitím jen velmi decentní psychologické manipulace zdůvodnil zbytečnost takového svátku:

  1. Co má tento narychlo importovaný svátek kdoví odkud společného s námi? (pokud by něco takového v Petře bylo, snažil jsem se, aby její nacionalisticko-izolacionistické smýšlení neškodně udeřilo v souladu s mými intencemi přímo na globální solar plexus McDonaldizovaného svátku :-D).
  2. Nebudeme přece slavit něco takového se všemi zamilovanými, zase nějaká stádní akce tentokrát "jen" pro všechny zamilované, ale přeci si nevyhradíme na lásku jeden den v roce a nebudeme jak nějací akurátní škrobení úředníci ze zamilovanosti dělat pravidelnou ordinérní položku v diáři (rafinovaný apel na respektování výjimečnosti každého a hlavně našeho vztahu).
  3. K dobru jsem dal i svou soukromou teorii, že svátek 14. února stanovil nejdříve nějaký velký obchodní řetězec, který potřeboval eliminovat pravidelný výrazný propad v tržbách mezi vánočními a velikonočními žněmi. Všechny obchodní řetězce tento trik další rok adoptovaly a poté jejich marketingová mašinérie ve svém momentálně vítězném a ryčném dějinném pochodu přesvědčila takzvané zamilované, že nejlepší co mohou v únoru dělat, je vyhazovat peníze za různé cetky. (Fikaná dehonestace svátku jeho přímou vazbou na "špinavé" obchody).
  4. Kdyby nic nezabralo, snazil jsem se v Petře rozehrát antikatolickou strunu - co já, mě by ten svátek vadit nemusel, ale víš sama, jak lhostejná jsi k církevnímu provozu a pověsti o svatých považuješ jen za bizarní smyšlenky z prehistorických dob, kdy bylo "in" nechat se sežrat  v aréně lvy nebo si nechat setnout hlavu pro přesvědčení, u nějž dokážes vnímat jen jeho absurditu. Navíc Svatý Valentin je podivný světec, o němž toho není moc známo a který navíc nebyl dlouho zařazen ani do církevního liturgického kalendáře a teprve teď na něj ta horší podbízivá část církve nabaluje nečekaná moudra - třeba že nesl pochodeň lásky (tady se mi vždy vybaví navíc slovo lampion a odplivnu si, asi deformace z dětství) ve špatných časech a je důkazem toho, že láska je silnější než nenávist, blablabla.

A jak se moje argumenty ujaly? Petra se jejich údernosti ani nijak nevzpírala, dokonce se mi zdálo, že se mnou v mnoha konkluzích souhlasí. Byl jsem spokojen, jak brilantně se mi daří formovat další osobu k obrazu svému. ;)

Když jsem 14. února inkriminovaného roku dorazil domů, přišla mi Petra otevřít v načančaných šatech, které běžně doma nenosí (útok na smysly), po stěnách byly rozvěseny barevné balónky (slušný kýč) a dostal jsem nějaké přáníčko a dárky.

No a další rok i ty všechny následující jsem Valentínku a nějaké dárky začal kupovat i já. Žádnou zvláštní pointu nečekejte - já jsem jen zjistil, že mnohem raději mám lidi, co se mi nepodřizují, protože jsou zajímavější a není s nimi nuda, a že i excelentní kýč může být docela příjemným zpestřením života. ;) A na závěr jsem samozřejmě provedl jednu očistnou falešnou racionalizaci, kterou jsem z ješitnosti prostě vytvořit musel -  pořád lepší slavit svátek Svatého Valentina, u nějž nám alespoň legendy poskytují snesitelnou zástěrku pro tato sladkobolná pnutí, než 1. máje na chudáka Máchu kydat tuny lyrického kýče, když on sám měl ve své tvorbě slabost pro titánská byronská gesta, než že by si potrpěl na rozněžnělá tokání mladých samečků a samiček, a ve svých denících navíc dokázal, že by byl výborným studijním materiálem i se svou Lori pro teorie jistého doktora Freuda, protože v nich popisuje sex bez jakékoli "romantické" omáčky a zbytečných rituálních mileneckých tanečků.

Tohle vše ale neznamená, že bych skousl svátek zamilovaných v libovolném dni v roce a pod každou záminkou - až bude přicházet království velkokýče, poznáme to neklamně třeba podle toho, že budeme slavit svátek zamilovaných ve výroční den stvoření dvouhlavé saně vystupující pod uměleckým pseudonymem Bratři Nedvědi aka "na dlani jednu z tvých řas". A takového dne bych se dožít nechtěl ;-)

Tak to vše jen na okraj, aby v blogu nebyly jen spoty o navigaci, PDA a analýze, když si i tyto drobné zálety mohu dovolit, protože blog je výsostně soukromý žánr, moji milí čtenáři :-)



Tuesday, February 14, 2006 9:29:17 PM (Central Europe Standard Time, UTC+01:00)       
Comments [2]  Ostatní


 Tuesday, February 07, 2006
Malá utilitka pro navigaci TomTom
TomTom

Podnět k vytvoření tohoto malého prográmku vyšel z jedné diskuze na ce4you od MilanaSu. K čemu prográmek slouží? TomTom má výrobcem dodávané (ne uživatelem vytvořené) body zájmu uloženy v souboru POI.dat - poměrně snadno můžete vlastní body zájmu, které je možné pro Čechy stáhnout ze skvělého webu www.poi.cz, zkompilovat do vlastního souboru POI.dat. Když ale jedete do ciziny, většinou chcete TomToma spouštět s výrobcem dodaným souborem POI.dat, a ne se svým vlastním, který se hodí jen pro Čechy.

Přejmenování souborů a spuštění TomToma řeší utilitka RenameFile.exe, která by se mohla hodit i ostatním. Popis , jak utilitku používat,  zkopíruji z ce4you, abych jej nemusel psát znovu.

Psáno zcela záměrně bez diakritiky ;)

"
1) Vytvorte zastupce na Pocket PC (treba Total Commanderem nebo File Explorerem)

2) Zastupce zkopirujte do PC (pro lepsi editaci) a vytvorte
17#"\RenameFile.exe" "STORAGE CARD\DE_AT_CH_PL_CZ_PLUS-MAP\POI2.dat" "STORAGE CARD\DE_AT_CH_PL_CZ_PLUS-MAP\POI.dat" "STORAGE CARD\DE_AT_CH_PL_CZ_PLUS-MAP\POI3.dat" "Program Files\Navigator\TomTom navigator.exe"

1. argument - 17#"\RenameFile.exe" cislicka a cestu k programu (vse se muze lisit) ponechte beze zmeny.

2. argument "STORAGE CARD\DE_AT_CH_PL_CZ_PLUS-MAP\POI2.dat" - soubor, ktery ma byt prejmenovan tak, jak urcuje treti argument (POI.DAT)

3. argument - "STORAGE CARD\DE_AT_CH_PL_CZ_PLUS-MAP\POI.dat" - soubor ve 2. argumentu bude prejmenovan na soubor v tomto argumentu.

4. argument - "STORAGE CARD\DE_AT_CH_PL_CZ_PLUS-MAP\POI3.dat" - jak se bude nove jmenovat puvodni soubor (v nasem pripade POI.DAT - 3.argument).

5. argument - "Program Files\Navigator\TomTom navigator.exe"
Program, ktery ma byt spusten (TomTom).


Je potreba spravne napsat uvozovky a cesty - programek nema zadne UI. Vytvoreneho zastupce zkopirujte zpet do Pocket PC.

Program pracuje takto:

1) Jestlize neexistuje soubor v argumentu 2 (to znamena, ze POI.dat predstavuje pozadovany soubor), je spusten program v argumentu 5.

Jinak

2) Soubor v argumentu 3 je prejmenovan na soubor v argumentu 4 A
soubor v argumentu 2 je prejmenovan na soubor urceny argumentem 3 A Je spusten program v argumentu 5."

Použito jen "čisté" C++ a WIN API, takze by vám prográmek měl fungovat na všech verzích Windows Mobile.


 



Tuesday, February 07, 2006 11:58:54 PM (Central Europe Standard Time, UTC+01:00)       
Comments [0]  Mobilitky | Navigace


 Sunday, February 05, 2006
Ukázka použití třídy BusinessObjectBase

Máme-li napsanou třídu BusinessObjectBase, která hraje roli společného předka všech objektů v business vrstvě všech našich aplikací, je čas ukázat, jak vypadají typičtí potomci.



Předchozí spoty

Bázová třída pro business objekty - návrhový vzor Layer Supertype
Cachování řádků z databáze pro business objekty - třída DataCacheHelper

Zobrazit kód

Třída Order reprezentuje v našem systému objednávku. U objednávky nás zajímá, jakému patří zákazníkovi (vlastnost Customer), rozhodli jsme se, že budeme vyžadovat u každé instance objednávky popisek (vlastnost Description) a samořejmě samotná objednávka je složena z položek objednávky (kolekce Items). Položkou objednávky budeme rozumět třídu, v níž je uloženo, jaké zboží a kolik kusů si zákazník objednal a celková cena položky (kusová cena objednaného zboží * počet). Celková cena objednávky je sumou cen jednotlivých položek. Pro jednoduchost vidíte v kódu zatím jen třídu Objednávka.

  1. Třída Objednávka má dva konstruktory. Prvni konstruktor, přijímající popisek objednávky a zákazníka, vyvolává bezparamerický konstruktor třídy BusinessObjectBase. Jak jsem psal v předchozím spotu, bezparametrický konstruktor slouží k sestrojení objektů bez obrazu v databázi. Chcete-li založit novou objednávku, stačí když si uložíte odkazy na objekty předané v konstruktoru a zbytek práce delegujete na BusinessObjectBase, která nastaví všechny potřebné příznaky nutné pro práci s objektem bez perzistence. Druhý konstruktor přijímá Id (unikátní identifikátor) objednávky, která je uložena v databázi. Jeho tělo je prázdné, veškerou činnost provádí BusinessObjectBase - nastavení příznaků a uložení Id pro pozdější nahrání objektu z databáze. Objekt je po vykonání konstruktoru "prázdnou schránkou", duchem (GHOST), který načte svá data z databáze teprve tehdy, když použijeme některou metodu nebo vlastnost pracující s instančními a perzistovanými proměnnými. Z hlediska uživatele naší třídy (myšleno programátora)  je ale vše ve starých kolejích - rozhraní objektu bude reagovat tak, jak očekává,  a existenci pozdní incializace objektu (Lazy Load) může ignorovat. Poslední větu si přečtěte ještě jednou a tiše s k ní přidejte pravidlo: Nikdy nesmím nutit uživatele svých tříd volat nějaké speciální "Init" metody předtím, než začnou s třídou pracovat. Jedinou legální "Init" metodou je konstruktor.
  2.  Jak k pozdní incializaci a tedy nahrání dat objektu dojde? Vlastnosti, jejichž hodnoty jsou uložené v databázi (Id zákazníka jako klíč v tabulce Objednávek a popisek (Description) objednávky) mají na prvním řádku svých get/set přístupových metod volání metody TriggerLoad. Jak víme, jde o volání metody z BusinessObjectBase, která sama rozhoduje, zda již byla data objektu nahrána z databáze. Pokud data nebyla nahrána, třída BusinessObjectBase řídí scénář nahrávání objektu v metodě Load. Jestliže jsou data pro objednávku v třídě DataCacheHelper, je volána metoda DoInternalLoad(DataRow row), která načte data objednávky z předaného řádku. Když v třídě DataCacheHelper data pro aktuální instanci nemáme, BusinessObjectBase volá variantu metody DoInternalLoad bez argumentů. Metoda DoInternalLoad vyzvedne řádek z databáze s využitím databázové komponenty (což je Singleton nebo Thread specific storage - jednoduše třída zapoudřující  API pro práci s datovým zdrojem) a tento řádek předá své stejně nazvané sestřičce, o níž byla řeč výše.
    Důležité je, že celý scénář nahrávání řídí bázová třída - v odvozené třídě jen v přesně vymezených bodech scénáře "dosazuje" třída Order své vlastní specifické chování a používá své speciální atributy.
  3. V set přístupových metodách u vlastností využíváme metodu CheckEquals z BusinessObjectBase. Jak už víte z minulého spotu, metoda CheckEquals zkontroluje rovnost dvou objektů a podle toho nastaví příznak IsDirty - byl objekt změněn proti datům v databázi a musí tedy dojít k jeho uložení?
  4. Jak je to nahráním položek objednávky  - vlastnost Items? Často se stává, že potřebujete pracovat se samotným objektem, ale je zbytečné při nahrání dat objektu  z databáze ihned plnit i všechny jeho kolekce. Kolekce Items je naplněna při prvním přístupu ke kolekci  - příznak, zda byla kolekce nahrána nese pomocná instanční proměnná m_itemsLoaded. Jestliže kolekce naplněna nebyla, je volána privátní metoda loadItems, v níž s pomocí databázové komponenty vyzvedneme z databáte všechny položky objednávky - filtrem, který je použit v SQL dotazu je samozřejmě Id objednávky. Poté projdeme vrácenou tabulku a všechny řádky uložíme do třídy DataCacheHelper. Zde přepokládáme, že metoda DbComponent.Instance.OrderItem_GetByOrderId, vrací z databáze všechna data potřebná pro obnovení objektu z databáze, nejen jejich Id. To je běžná praxe, pokud máte uloženou proceduru, která vybírá záznamy z jedné tabulky (pro jednu třídu) podle různých podmínek. Důležité je, že za pomoci identitní mapy (Identity Map) sestrojíme objekty - "duchy" - OrderItem, kterým předáme jejich Id,  a třída BusinessObjectBase již zajistí, že když instance OrderItem budou chtít nahrát svá data z databáze, tak jí bude vrácen řádek uložený v instanci třídy DataCacheHeper. To znamená, že třída OrderItem nebude zbytečně zatěžovat databázi duplicitními dotazy a přitom kontrola na existenci cachovaného řádku pro instance jakékoli třídy je součástí společného předka BusinessObjectBase a "nezasviníme" si stejným kódem celou business vrstvu.
  5. Metoda Order také přepisuje metodu DoInternalSave, v níž uloží své atributy do databáze. Jak uvidíme dále, metodě Order_Update předáváme hodnotu zděděného a bázovou třídou spravovaného příznaku IsNew - tento příznak metoda interně použije k rozhodnutí, zda provede SQL příkaz INSERT nebo UPDATE1. Opět - po volání metody Save uživatelem jen třída BusinessObjectBase jakožto finální instance rozhoduje, zda je potřeba data ukládat a zda je tedy vubec nutné a účelné volat metodu DoInternalSave. Opět vidíte čistý řez mezi kontrolou, kdy je nutné objekt uložit (třída BusinessObjectBase),  a samotným ukládáním (třída Order i další potomci BusinessObjectBase). Kromě uložení vlastních hodnot odpovídá třída za uložení agregovaných objektů OrderItem. Proto v metodě DoInternalSave nejprve zkontroluje, jestli byly objekty v kolekci nahrány (příznak m_itemsLoaded) a pokud ano, tak jen zavolá pomocnou metodu SaveCollection, která je implementována, jak jinak že;), v třídě BusinessObjectBase.

I když z příkladu byste měli začít tušit, proč je BusinessObjectBase tak výhodná, stále neřešíme některé problémy.

  1. V příkladu není vůbec řešeno odebírání a přidávání položek do kolekce - to znamená nastavování/zrušení "rodiče" u agregovaných objektů. Nijak jsme neřešili m:n relace a odpovědnost za zakládání/rušení záznamů ve vazebních tabulkách. Myslíte, že i zde půjde využít třída BusinesObjectBase? ;)
  2. Co když si budeme chtít u některých potomků  BusinessObjectBase "vynutit" jiné chování - třeba zamezit použití DataCacheHelperu?
  3. A co transakce? V našem příkladu zatím nijak neřešíme ukládání objektů v transakci, což bychom měli, protože určitě nechceme mít v systému objednávky s polovinou objednaných položek. Jaký objekt má spouštět a řídit transakci? Kdo musí ošetřit chyby vzniklé při ukládání objektu?

To be continued... :)

Poznámky:

  1. Jsem si vědom střídavé soudržnosti metody související s "přepínačem" IsNew . V dalších dílech bude vysvětleno, proč střídavá soudržnost zrovna u této metody nevadí.


Sunday, February 05, 2006 2:44:36 PM (Central Europe Standard Time, UTC+01:00)       
Comments [7]  Návrhové vzory


 Tuesday, January 31, 2006
Nová verze programu (1.1) pro import oblíbených položek z Pocket IE do Opery Mobile

Download

Změny:

1) Opravena chyba, která se projevovala při importu více vnořených položek.

2) Import je funkční i v oficiální verzi Opery pro Windows Mobile 2003 a 2005. Trial verze Opery Mobile.

Postup instalace a další informace jsou v  úvodním spotu.



Tuesday, January 31, 2006 11:26:52 PM (Central Europe Standard Time, UTC+01:00)       
Comments [0]  Compact .Net Framework | Mobilitky


Proč neaktivovat režim "WiFi G" na MDA Variu (HTC Wizard)?
MDA

Minulý týden proběhla internetem informace, že na MDA Vario je možné jednoduchým zásahem do registry změnit režim B WiFi komunikace na rychlejší G. Tedy abychom byli přesní, žádné zázračné zvýšení rychlosti se nekoná, ale úprava slouží pouze k tomu, abyste se mohli s Variem připojit ke "G only" přístupovým bodům. Vypadá to jako užitečná věc.

Stačí změnit/přidat následující 2 klíče:

HKEY_LOCAL_MACHINE\COMM\TNETWLN1\PARMS: dot11SupportedRateMask=1
HKEY_LOCAL_MACHINE\COMM\TNETWLN1\PARMS: dot11SupportedRateMaskG=8

Přemýšlivější jedince ale určitě napadne, proč HTC jakožto výrobce zařízení nebo sám mobilní operátor prodává takto podivně zkriplované zařízeni? Odpověď už asi znám, protože jsem si G režim aktivoval v sobotu a včera jsem přešel zpět na režim B.

Důvod - s mým routerem Draytek Vigor v "mixed" módu (B + G), s nímž Vario od prvního dne spolupracovalo bez sebemenších zádrhelů, si po aktivaci G režimu  přestalo rozumět. Sice WiFi síť stále vidělo, občas se dokonce dokázalo připojit, ale většinou jsem se do sítě nedostal, nebo jsem  přes DHCP nezískal IP adresu. Po návratu k B normě je opět připojení funkční.

Takže důvody "zkriplováni" WiFi na MDA Variu už po osobni zkušenosti chápu ;)



Tuesday, January 31, 2006 12:43:22 PM (Central Europe Standard Time, UTC+01:00)       
Comments [8]  Mobilitky


 Thursday, January 26, 2006
MDA Vario a synchronizace přes USB s programem ActiveSync 4.1

Po dnešní probdělé noci kvůli synchronizaci přes USB, dávám na blog několik tipů pro nešťastníky, kteří se s ní budou stejně jako já potýkat. ActiveSync 4.1 je tak možná beta testovaná na lidech, kterou Microsoft rychle vydal po zabugované alfě kamuflované jako release 4.0. Změna způsobu komunikace mezi PC a PPC na čisté TCP/IP připojení vypadá jako dobrá idea, ale stabilita a rychlost AS 4.x při přímém srovnání se starší a docela slušně odladěnou verzí 3.8 ukazuje, jak vývojáři  MS dobrou ideu sadisticky přibili na kříž špatné praktické implementace.¨

U PDA s Windows Mobile 5.0 nemáte na výběr a musíte synchronizaci s AS 4.0 rozchodit a pomalost synchronizace prozatím přetrpět. Takže na co si dávat pozor a jak postupovat, když se zařízení s AS nespojí nebo když synchronizace neběží?

ActiveSync
  1. Ukončete firewall a všechny antiviry. Jestliže firewall neukončíte, ujistěte se alespoň, že AS (procesy WCESCOMM.EXE,  WCESMGR.EXE, RAPIMGR.EXE, CEAPPMGR.EXE) je povolena komunikace přes porty 990, 999, 5678, 5679, 5721.
  2. Po připojení zařízeni k USB portu by se měl nainstalovat ovladač pro Generic RNDIS device a poté by se měla objevit informace o novém Pocket PC zařízení.
  3. Po úspěšném připojení zařízení k USB portu a instalaci ovladačů se vám v síťových připojeních objeví nové připojení (Windows mobile device)  - ujistěte se, že ve vlastnostech připojení je zaškrtnuta položka Internet protocol (tcp/ip).
  4. Jestliže je zařízení připojeno a vy jste vybrali v průvodci položky k synchronizaci, mějte velkou trpělivost při první synchronizaci. První synchronizace je totiž velmi pomalá a může trvat i několik minut.
  5. Jestliže synchronizace selže, podívejte se do logů v %temp% adresáři počítače (soubory WCESCOMM.LOG, WCESLog.log, WCESMgr.log, WcesView.log) na příčinu problému.
  6. Jestliže synchronizace selže a vy dostanete chybu  "Server is busy Support code 85010017", na nic nečekejte a odeberte Outlook ze seznamu nainstalovaných programů (Add/Remove programs, Microsoft Office - volba Change), restartujte počítač, znovu nainstalujte Outlook a restartujte počítač. Pořadí těchto kroků musíte přesně dodržet (hlavně kvůli této chybě jsem šel docela nas*anej spát ve čtvrt na pět ;) )
  7. Jestliže se vám nedaří synchronizovat všechny typy vybraných položek (Kontakty, Oblíbené, Kalendář, Emaily), přidávejte je do synchronizace postupně - nejprve zaškrtněte Kontakty, sesynchronizujte a při úspěchu přidejte Kalendář, sesynchronizujte atd. Podle mých zkušeností největší problémy činí maily, proto je synchronizujte až nakonec.
  8. Když se vám nedaří synchronizovat maily, vytvořte v Outlooku nový pst soubor a ve správě účtů (Tools/Email Accounts) tento soubor nastavte jako výchozí pro doručování pošty. Maily překopírujte do složek v novém pst souboru. Po změně souboru pro ukládání položek musíte restartovat Outlook.
  9. Modlete se,  hříšníci,  za lepší mobilní zítřky bez šedozeleného loga ActiveSyncu, které bylo Microsoftem asi podvědomě zvoleno a do binárního světa transponováno jako symbol podvědomé vlastní frustrace, že i u jejich synchronizace platí "šedivá  je všechna teorie a strom života se zelená". :-D

 



Thursday, January 26, 2006 10:37:26 PM (Central Europe Standard Time, UTC+01:00)       
Comments [6]  Mobilitky


 Tuesday, January 17, 2006
Prodám MDA II
Dynavix

Protože mi Ježíšek přinesl nové MDA Vario, s těžkým srdcem;) prodávám své MDA II.

Komunikátor MDA II je plně funkční, v ceně je SD karta Kingstone 256 MB, synchronizační a nabíjecí USB kabel, originální synchronizační kolébka, původní pouzdro. K zařízení není síťová nabíječka, kterou zlikvidovala moje dcerka, ale není problém koupit si v Sunnysoftu nabíječku kompatibilní s dodávaným nabíjecim USB kabelem, nebo koupit od TMO novou nabíječku. MDA II má poškrábaný displej - jde o pracovní nástroj  používaný denně. ;)

Původni cena: 20 900 bez SD karty, prodám jej za 6 000. Zájemci pište prosím na adresu rene@renestein.net.

ROM: 1.72.00WWE (oficiální od TMO - Windows Mobile 2003),
Radio:1.17.00
Extended Rom: 1.72.176

Další technické údaje (přebrány z CEYOU.cz)

Rozměry & Hmotnost
     69,9 mm x 130 mm x 18 mm :: 185 g

Procesor
      Intel PXA263 (XScale) @ 400 MHz

Paměť
     RAM 128 MB :: SDRAM
     ROM 32 MB :: ??? :: přepisovatelná :: 16 MB pro bezpečné uložení dat
     ??? 32 MB

Grafický procesor
     ATI Imageon 3200

Displej
     Transflective TFT :: LED podsvícení :: 11 úrovní
     240 x 320 bodů :: 65536 barev
     úhlopříčka 88,9 mm / 3,5 palců

Telefonní část
     900/1800/1900 MHz
     GPRS Class 10

Komunikace
     USB (ver. 1.1)
     IrDA (ver. 1.1)
     Bluetooth :: 1

Možnosti rozšíření
     SD / MMC :: plné SDIO

Baterie
     Lithium-Ion Polymer :: 1200 mAh :: life up to 13 hodin :: vyměnitelná :: dobíjecí
     Coin záložní baterie :: vyměnitelná

Možnosti vkládání textu
     dotyková obrazovka
     joypad :: 4 konfigurovatelných tlačítek :: tlačítko pro nahrávání :: Hlasitost

Audio
     reproduktor :: mikrofon
     Stereo 2.5mm s mikrofonem

Integrovaný digitální fotoaparát
     300K pixels CMOS Camera module
     Obrázek :: BMP, JPEG :: 240 x 320
     Film :: MPEG4, M-JPEG :: 480 x 640
     Optický zoom :: 0

Update 18.1. 2005 : MDA II prodáno



Tuesday, January 17, 2006 5:38:20 PM (Central Europe Standard Time, UTC+01:00)       
Comments [0]  Ostatní


 Wednesday, January 11, 2006
Malé srovnání navigačních aplikací Dynavix a TomTom
Dynavix

Protože mi v poslední době dorazilo více mailů, jejichž odesílatelé se ptali, zda si mají koupit pro navigaci po Čechách Dynavix nebo TomTom a mně se nechce neustále hledat a kopírovat každému zvlášť následující malé srovnání, dávám jej veřejně na blog, abych mohl posílat jen odkaz. Jednoznačný soud u mě nehledejte, ani se propagandisticky nedozvíte, že byste měli podporovat Dynavix, protože jde o "český" program, jak občas zaznívá v diskuzích, kde se i výrobce snaží rozechvět tak dojemně nostalgickou nacionalisticko-obrozeneckou strunu sugescí, že "co je české, to je hezké". V 19. století by si Dynavix určitě nadšeně koupili i Jungmann s Dobrovským, ale v 21. století může zabrat vlastenecká propaganda produktů snad jen na posledního obrozeneckého mohykána, věrného syna vlasti a hlavně dětinského euroskeptika Václava Klause. ;) Stejně jako jsem si nevybral Škodovku, protože mi nedokázala nabídnout vhodný vůz, nevybírám si ani svůj navigační SW podle země původu, ale překvapivě podle kvality nebo poměru výkon/cena. Sentimentální nebo heroické vlastenectví je dneska levné zboží vhodné tak do reklamy na prodej toho  "echt českého - Czech made" moku "echt českým" barochům, ale to by bylo na jinou úvahu ;) . Chtěl jsem jen říct, že tak kvalitní produkt jako je Dynavix, by se nemusel snažit "vtírat" do přízně uživatelů stejně nebo podobně pokleslými marketingovými triky.

DYNAVIX
+ pravděpodobně nejpodrobnější mapové podklady ČR (více čísel popisných než TomTom)
+ Nejlepší hlasová navigace - dá se podle ní i v Praze jet bez koukání na displej.
+ Rychlá reakce firmy na připomínky uživatelů
+ Velké množství POI

- Chybí 3D pohled (v TomTomovi jsem si na něj zvykl)
- Horší stabilita programu. Aktuální verze 1.3 se tak často neukončuje jako předchozí verze, ale přesto na některých PDA jsou problémy nepříjemné (hlavně HP 4700 + zařízení s Widcomm BT stackem). Při navigaci neni nic horšiho než nečekané ukončení programu v centru Prahy.
- Občas neintuitivni a neergonomické ovládání ve srovnání s TomTomem
- Vyšší cena
- Špatně se pracuje s mapou, neexistuje plynule scrollovani mapy
- Horší simulace a prohlížení trasy po naplánování (itinerář cesty je nepřehledný)
- Uživatel nemůže nahrávat jiná POI.

TomTom
+ Jeden z nejlepších a a nejdéle vyvíjených navigačních SW na světě. Dle všech zahraničních recenzí jde o etalon třídy.
+ Skvělý 3D pohled
+ Dobrá hlasová navigace -Dynavix ji má ale citelně lepší, u TomToma je přeci je nutné občas kouknout na displej. TomTom má také méně typů instrukcí než Dynavix.
+ Kvalitní mapové podklady. (kromě Severní Moravy, na které nelze vybírat jako cíl města a podrobnost je bídná - výběr měst řeší ale uživatelské POI). Dynavix má sice mapy o něco podrobnější , ale v praxi jsem na žádné velké rozdíly v podrobnosti map mezi oběma programy nenarazil. Tato poznámka platí jen pro starší verzi map - v současné době se objevily nové mapy, kde je de ohlasů kvalitně zpracována i Morava a mapové podklady se zcela vyrovnají Dynavixu. Dynavix má "pouze" více čísel popisných.
+Špičkové ovládání jedním prstem i za jízdy
+ Skvělý simulační režim a dobrá orientace v různých aspektech naplánované trasy
+ Plynulá práce s mapu (scrollování, zoom)
+ Stabilita programu. Za celou dobu mi TT ani jednou nespadl, spojení s BT GPS je také bez jakýchkoli problémů
+ Možnost vytvářet vlastni POI (viz seznam POI na http://www.poi.cz/)
+Velmi dobrá cena

- Autoři určitě nebudou reagovat na připomínky pár uživatelů jako TeleMatix, který se teprve snaží získat významnější podíl na trhu.
- O něco horší hlasová navigace i mapové podklady ve srovnání s Dynavixem.

Shrnutí. Chcete-li jezdit hlavně podle hlasové navigace, vyberte si Dynavix. Preferujete-li stabilitu a 3D pohled, berte TomToma.



Wednesday, January 11, 2006 5:43:51 PM (Central Europe Standard Time, UTC+01:00)       
Comments [7]  Mobilitky | Navigace


 Sunday, January 08, 2006
Program na import oblíbených položek z Pocket IE do Opery Mobile 8.5
MDA

Download programu.

Operu 8.5 Mobile pro Pocket PC je možné stáhnout zde - verzi určenou původně jen pro Willcom W-ZERO3 lze  "opatchovat" ;) tak, aby byla použitelná i na  dalších zařízeních. Crack ode mě ale nečekejte. ;) Další informace o Opeře naleznete na msmobiles.

Protože se dá očekávat, že i kvůli tomuto poněkud trapnému úniku ;), který těžko zbagatelizuje i vášnivý apologet a nekritický fanoušek Opery Radek Hulán, poněvadž jde o takové diletanství, jež dle mnoha indicií vede jedině k podezření na infiltraci Opery neschopnými zaměstnanci Apple ;),  společnost Opera  nabídne na svých stránkách mobilní Operu oficiálně pro všechny zařízení s Windows Mobile 5.0, mohl by se vám hodit prográmek, který jednorázově přenese všechny oblíbené položky z Pocket Internet Exploreru do Opery. Program jsem napsal (link na stažení je v prvním řádku tohoto spotu) - prosím vás tedy o otestování a o reportování nalezených chyb.

Jak program funguje?

1) Stažený soubor RStein.ImportOperaFavorites.exe nakopírujte do zařízení.

2) Soubor spusťte - pokud import proběhne úspěšně, jste informováni, že import byl dokončen, jinak je zobrazen text výjimky.

  • Program kopíruje oblíbené položky ze složky, jejíž cesta je uložena v registry pod klíčem System\Explorer\Shell Folders\Favorites. Pokud klíč neexistuje, kopíruje se ze složky \Windows\Favorites.
  • Program rekurzivně kopíruje i všechny složky a podsložky.
  • Data pro Operu jsou ukládána do souboru Application Data\opera6.adr
  • Původní oblíbené položky v Opeře jsou zazálohovány do souboru Application Data\opera6.adr.bak

  • Otestováno na MDA Vario (HTC Wizard).

Update: Dle prvnich ohlasů jsem vytvořil novou verzi:

1) Pokud neexistuje soubor opera6.adr, program pokračuje dál i bez zálohy původních oblíbených položek.

2) Při chybě by měl program nahlásit, jaká položka mu dělá potíže. Jestliže máte v IE položku s nějakým "velmi dlouhým názvem", zkraťte název - vypada to, ze v CNF 1.x je nějaká chyba, kvůli které nelze otevřít stream, pokud je předán "dlouhý" název souboru.



Sunday, January 08, 2006 5:25:19 PM (Central Europe Standard Time, UTC+01:00)       
Comments [2]  Compact .Net Framework | Mobilitky