\

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


 Saturday, May 15, 2004
S-Video, SCART - trnitá cesta za černobílým obrazem

Dneska dopoledne jsem se rozhodl, že naplno využiji dřímajícího multimediálního potenciálu :) v přiděleném firemním notebooku IBM ThinkPad R40, který pracovně používám od listopadu, ale zatím jsem nevděčně ignoroval jeho výstup S-Video. Protože jsem v této oblasti úplný laik, nechal jsem se poučit, že S-Video mohu používat i s mojí obstarožní domácí televizí přes SCART konektor. Ráno jsem pln nadšení v místním obchodě s elekronikou u evidentně mým požadavkem  konsternovaného prodavače zakoupil S-Video kabel a redukci na SCART. První varovnou indicií měl být fakt, že redukci distribuuuje firma HAMA, s níž mám ty nejhorší zkušenosti. Ale moje chtivost podívat se na nějaký pěkný film byla silnější.

Po návratu domů jsem vytáhl SCART kabel od videa, vložil jeden konec S-Video kabelu do notebooku, druhý konec do SCART redukce a redukci do televize. Po chvilce laborování ve Windows XP se na televizi objevil vytoužený obraz. Skvělý! Ihned po výkřiku radosti přišlo zklamání, protože moje zornice zaregistrovaly, že obraz je pouze černobílý.  Sice mým oblíbeným filmům od I. Bergmanna černobílá sluší, ale přeci jen by se výhradní orientace na černobílou produkci podobného ražení mohla podepsat na mém kulturním rozhledu a i tak dost rozháraném duševním zdraví.:)

Po neúspěšných hrátkách s nastavením grafické karty ATI Radeon 7500 a zbytečné instalaci nových ovladačů z IBM centra jsem hledal na Netu vysvětlení té neústupné černobílé anomálie. Výsledek mě příliš nepotěšil - jak to tak vypadá, čeká mě koupě další redukce. Viz http://www.svideo.com/svideoscart.html. Kdyby mi někdo zkušenější mohl doporučit konkrétní typ adaptéru a prodejnu na Netu nebo v Praze, byl bych mu vděčný. Zatím tedy nechám S-Video konektor na notebooku ležet ladem.



Saturday, May 15, 2004 5:26:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [14]  Ostatní


 Friday, May 14, 2004
PDA klient pro blogovací systém .Text
Neznáte někdo  PDA aplikaci pro psaní spotů pro .TEXT? Já jsem na netu hledal, ale prozatím marně. Rád bych spoty psal přímo z PDA. Jestliže žádný PDA klient neexistuje, tak si jej napíšu, ale bych bych rád, kdyby se našlo více zájemců. Program by byl zdarma, pouze bez zdrojových kódů, což pro ty z vás, kdo mě znají, asi není žádné překvapení:). Moje představa je taková, že by aplikace nejdříve podporovala webovou službu SimpleBlogService pro .TEXT. Nepotřebuji zatím nic jiného než poslat spot do blogu, což tato WWW služba zvládá. V případě zájmu bych napsal i další modul, který by umožnil přístup k blogům podporujícím standardní rozhraní MetaBlog API. Takže moje otázka, milí majitelé PDA, zní. Víte o klientovi, který podporuje blog .TEXT anebo žádný takový není a Vy byste o něj měli zájem? Přeci jen, psát si blog editor jen pro sebe mi přijde jako zbytečný luxus.:) 
Teď mě také napadlo, že by bylo příjemné mít klienta pro J2ME v mobilních telefonech nebo mít přístup přes MMS, aby se daly výhledově publikovat zprávy odkudkoli z čehokoli .:)

Friday, May 14, 2004 8:35:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [8]  Mobilitky


Kniha Network programming for the Microsoft .Net Framework

Kniha Network programming for the Microsoft .Net Framework je úvodem do síťového programování. Slovo úvodem bych zdůraznil, protože žádné rozsáhlé případové studie v ní nenaleznete.
Po obligátním a  povrchním úvodu do .Net Frameworku, nás autoři seznámí se “streamy” a pochopitelně se soustředí na třídu NetworkStream. Následuje popis práce s thready a ukázky asynchronního návrhového vzoru (metody Begin*, End*)- i když je problematice věnováno plných 19 stran, nečekejte žádné "best practices", ale spíše upovídaný přepis toho, co je v MSDN. Ukázek asynchronního návrhového vzoru je v celé knize hříšně opulentní množství , takže tato kapitola je jen "lákavou" návnadou.
Dále je v knize vysvětlen význam serializace a probrány jsou XML, binární a SOAP serializace. Když už je serializace probírána do takových detailů, jakými jsou XML atributy, mohla být zmíněna i dynamická redefinice atributů za asistence třídy XmlAttributeOverrides.
Lehký úvod do jmenného prostoru System.Net, jehož smysl mi v kompozici knihy uniká, je vystřídán popisem protokolů IPV4 a IPV6 a metod třídy DNS. Tato kapitola mi připadá z celé knihy nejpovedenější, protože z ní čiší, že její autor své téma podrobně zná, ale přitom dokáže na vyhrazeném prostoru vybrat to podstatné a nezabíhat do zdržujících detailů.
Následující dvě kapitoly tvoří jádro knihy, protože se zabývají klientskými a serverovými sokety a také jejich nadstavbami s jednodušším API (TcpClient, TcpListener). Bohužel tyto kapitoly trpí také největší nevyvážeností ve zpracování tématu. Přístup autorů kolísá od pasivního přejímání informací z MSDN k neustálému zdůrazňování, že pro většinu synchronních metod existují jejich asynchronní doplňky. Když jsem se tuto zajímavou informaci dověděl potřetí a prohlédl si další úmorný Step By Step příklad určený pravděpodobně programátorům po akutní lobotomii provedené brokovnicí, měl jsem chuť připojit se dobře cíleným výstřelem k zástupu šťastných idiotů, abych dokázal kapitoly dočíst. Tam, kde by měla být tématika zpracována velmi prodrobně i s ukázkami, se autoři omezí na shrnující tabulky, jejichž pravděpodobně jediným smyslem je rychlé navýšení počtu popsaných normostran. Moje výtka směřuje hlavně k zcela nedostatečné dokumentaci enumerace SocketOption.
Kromě TCP/IP protokolu jsou zde i ukázky UDP protokolu a implementace takzvaných "Raw" soketů. "Raw" sokety jsou vysvětleny na příkladu ICMP protokolu (což není nic jiného než všem důvěrně známý PING). Slušelo by se zmínit, že na Windows 2000 a XP mohou "Raw" sokety otevřít pouze administrátoři. (ping.exe může spustit každý uživatel, jde asi o jedinou výjimku).
Důležitost tříd WebClient, WebResponse a WebRequest je vyzdvižena v kapitole nazvané "Using the Network". Tato kapitola je povedená, i když zde asi nenaleznete nic překvapivého. Zmíněny jsou cookies, různé způsoby autentizace, certifikáty, SSL.
Z dalších kapitol rychle získáte pocit, že se autoři zavázali dodat dílko o vyšším počtu stran, a proto zařadili témata jako jsou Web Services a .Net Remoting. Sice jsou vždy naťuknuty pokročilé vlastnosti (SOAP extenze, Channel sinks), ale z jejich odfláknutého vysvětlení si začátečník bude brzy zoufat a slabší nátura se k těmto konceptům kvůli neumětelství autorů již nikdy nevrátí. Jako leitmotiv knihy:) se zde objevuje podrobné vysvětlení asynchronního volání WWW služeb.
Autoři se také s těžko pochopitelnou vervou pustí i do vysvětlování Code Acces Security. Jejich snaha se ale omezí na výčet oprávnění a hrubý přehled významu konstitutivních složek CAS, takže kdybych se s CAS setkal poprvé, získám mylný dojem, že CAS je nesmysl bez jakékoli užitné hodnoty. Jsme také poučeni, že bychom měli komunikaci mezi sokety kryptovat, protože svět plný hackerů čeká na naše pakety. Děkuji za osvětu, hned se cítím jako up-to-date vývojář, teď si najdu jen ve slovníku cizích slov význam termínu kryptovat, abych ty hackery svými programy sejmul. :)
Doporučení pro psaní výkonných aplikací jsou shrnuta v mozaice nazvané "Network performance and scalability. Zajímavá je hlavně část týkající se doporučení pro používání "Nagle" algoritmu, ale ani ostatní rady vašim aplikacím neublíží.
Zcela do počtu je kratičká poslední kapitola Advancements in .Net Framework programming, jejíž originální teze by se dala shrnout "Nebojte se, v příští verzi bude zase vše lepší, výkonnější a bezpečnější".
Co říci závěrem? Jestliže se sokety začínáte a jste úplní zelenáči, kniha se Vam bude hodit, i když si z ní odnesete hlavně poznatek, že sokety jsou tady proto, aby bylo na čem demonstrovat dokonalý asynchronní návrhový vzor. :) Jste-li pokročilý vývojář a v knize hledáte neotřelé rady starých zkušených harcovníků, schovejte peněženku, zamáčkněte slzu kanoucí za odpíraným poznáním a vyberte si jiný titul.
Anotace
Název: Network Programming For the Microsoft .Net Framework
Autoři: Jones, A; Ohlund, J; Olson, L;
Nakladatelství: Microsoft Press 2004



Friday, May 14, 2004 8:05:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [0]  .NET Framework | .Net Remoting | ASP.NET | Web Services


 Tuesday, May 11, 2004
Zkrocení zlé ženy - "Merge" replikace na MSSQL aneb co v MSDN nenaleznete

"Merge" replikace v MSSQL se používá hlavně tehdy, když má více uživatelů paralelně pořizovat data v odpojeném (offline) režimu. Bonbónkem je u "merge" replikace podpora mobilních klientů (PDA). Uživatelé se připojí, pořízená data odreplikují na server a server jim na oplátku doručí změny v datech provedené ostatními uživateli. Typickými kandidáty na integraci "merge" replikace do designu aplikace jsou systémy pro podporu obchodních zástupců v terénu. Proč se psát s vlastní komponentou pro replikaci, když je zde komponenta již dostatečně otestovaná Microsoftem na nezanedbatelném množství pokusných králíků.:) . Provoz systému s replikacemi ale přesto není triviální, protože se po čase začnou objevovat problémy, jejichž řešení po mobilním telefonu s obchodním zástupcem vyžaduje velkou dávku sebezapření a neustálého sebeujišťování, že si právě teď zasluhujete plat, takže není žádoucí mezi zuby procedit jadrné hodnocení ohledně intelektální potence protějšku, s nímž právě hovoříte.
Proto jsem pro replikace napsal manažera replikaci, jenž je natolik inteligentní, že uživatele většinou ignoruje a jen občas mu dovolí kliknout na nějaké tlačítko :) Na co byste tedy při návrhu vlastního manažera replikací neměli zapomenout?

Ještě upozorňuji, že tato doporučení se týkají hlavně mně důvěrně známé konfigurace, kdy uživatelé přistupují přes VPN k MSSQL serveru s publikací a na svém počítači jsou přihlášení pod lokálním (ne doménovým) účtem. Uživatelé mají na svém počítači databázi MSDE 2000.

1) Ověření dostupnosti lokálního databázového serveru.


2) Kontrola existence lokální databáze, do níž jsou replikována data.


3) Manažer má v rozhraní metody pro založení a zrušení lokální databáze. V konfiguračním souboru je cesta k souborům se skripty pro zrušení a založení databáze.


4) Ověření dostupnosti serveru (počítače) s replikacemi - "Ping".


5) Zjištění, že na serveru běží MSSQL. Prakticky se jedná o ověření, že se lze připojit na port, na němž "poslouchá" MSSQL (standardně se jedná o port 1433).


6) Manažer musí umět založit novou "subscription". "Subscription" je aktivní relace mezi jedním klientem replikace a MSSQL. Na "subscription" je navázána kompletní historie provedených replikací a prohlédnout si ji můžete v Enterprise Manageru. Po uplynutí nastaveného intervalu neaktivity replikace jsou "subscription" na serveru vymazány. Když obchodní zástupce odjede na čtrnáctidenní dovolenou, tak za existenci této metody si můžete dát pořádného panáka Four Roses. Lépe dva:)


7) Komplementární k metodě pro založení "subscription" je pochopitelně metoda pro zrušení staré "subscription".


8) Reinicializace "subscription" bez ztráty existujících lokálních dat. Například při podezření na neúplné schéma databáze u klienta je nutné znovu doručit inicializační snapshot se schématem. Je zbytečné zakládat novou "subscription", postačí reinicializace stávající.


9) Ověření dostupnosti složek, ve kterých je uložen snapshot. Inicializační snapshot musí být před zahájením replikace dostupný. Ověření dostupnosti složek probíhá až po impersonaci uživatele (viz bod 11).


10) Ověření dostupnosti pracovní složky na lokálním počítači, ve které je rozbalován snapshot. Ověření dostupnosti složky probíhá opět až po impersonaci uživatele (viz bod 11).


11) Impersonace speciálního uživatele, který má doménový účet v síti s MSSQL serverem, na němž je vytvořena publikace. Účet má přístup jen k složkám se snapshoty a k lokálnímu pracovnímu adresáři replikace. Celá replikace běží pod tímto speciálním účtem. Impersonaci nemůžete provádět na počítačích, na kterých jsou nainstalovány operační systémy Windows 98 nebo ME.


12) A samozřejmě musíte mít metodu pro spuštění replikace.

A na konec. Měli byste zájem o nějaký podrobný tutorial o vytváření replikací?



Tuesday, May 11, 2004 9:41:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [9]  .NET Framework | (MS)SQL tipy a triky


 Monday, May 10, 2004
ftxPBrowser - Pocket PC prohlížeč zobrazující najednou více WWW stránek!
Jestliže používáte na svém Pocket PC PDA verzi Internet Exploreru, asi také stejně jako já nejste nadšeni z toho, že si nemůžete najednou prohlížet více stránek. S každou novou verzí operačního systému  Windows Mobile čekám, že se v sekci "New Features" tato funkcionalita objeví. Zatím marně.
Naštěstí již pár let existuje výborný doplněk pro Pocket PC MultiIE, který Internet Explorer o možnost prohlížení více dokumentu doplní.
Nedávno jsem našel program ftxPBrowser , jehož stabilní prerelease verze je volně ke stažení. Jedná se o opravdu pěkný kus softwaru.
ftxPBrowser se nainstaluje prostým nakopírováním exe souboru na PDA. Nejedná se o doplněk IE, ale o samostatný program, který ale pravděpodobně pro renderování stránek využívá engine IE, protože stránky v obou programech vypadají totožně. Hlavní funkce ftxPBrowseru:
1) Možnost prohlížení více stránek v samostatných záložkách.
2) U hypertextového odkazu lze zobrazit kontextové menu a v něm zvolit, že odkaz má být otevřen v nové záložce.
3) Ve spodním menu každé záložky je přepínač, kterým se nastavuje, zda chceme odkazy na záložce otevírat v původním nebo novém okně.
4) ftxPBrowser podporuje prohlížení stránek na celé obrazovce (full screen) bez jakýchkoli rušivých ovládacích prvků. Skvělá věc.
5) Zobrazení zdrojového textu stránky. Nádhera:)
ftxPBrowser je pro tyto operační systémy - HandHeld PC 2000, Pocket PC 2002 a Windows Mobile 2003.
Ve verzi 0.1e, kterou používám, mi vadí, že není možné přidávat odkazy do Favorites. Je to ale asi jediný důvod k otevření standardního Internet Exploreru. ftpxBrowser stojí za vyzkoušení a až autor (snad) uvolní ostrou verzi, tak já si ji rád koupím.

Monday, May 10, 2004 3:23:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [0]  Mobilitky


 Sunday, May 09, 2004
Poezie spářená s technickými spoty

Jak jsem avizoval ve svém prvním příspěvku, v blogu by se měly objevit i příspěvky z literatury a příbuzných humanitních oborů. Uznávám, že doména vyvojar.cz vzbuzuje u lačných návštěvníků asi jiná očekávání a aktivuje spíše jejich technicky orientované kognitivní touhy, ale snad se nikdo z Vás nezačne barbarsky kuckat hned, jak uvidí první strofy nějaké básně. Ani pan domácí zatím neprotestoval :) a nejen neosobními  a většinou fádními novinkami v IT živ je člověk. Přemýšlel jsem, čím bych měl literární sekci otevřít. Protože je weblog subjektivní žánr, ve kterém by ale rozšafný autor neměl od pohodlné klávesnice dle svého naturelu pouze kritizovat nebo chválit tvorbu ostatních, rozhodl jsem se premiérově dát v plen něco ze  svých pokusů v oblasti poezie, abych zřetelně subjektivní charakter spotu umocnil. Usnadněno jsem to měl tím, že na „lyrický věk“, jak trefně období, kdy je nutkání psát poezii nejsilnější, nazval Milan Kundera, jsem již asi definitivně zanevřel. Takže Vaše interpretace, názory, nadávky, averze jsou vítány, a protože nevládnu mocí zneuznaného dandyho, šílence a císaře Nera, nemusíte se ani obávat následků svých výlevů :).

Prosívám

Prosívám nerozumění Tebou darované

Mě do žil zvolna ztrácejících tep dechu

Aby se tok horkosti v zpěněné šílenosti sevřené

Dechem odmítání a krásy padlého prachu

Otevřel –

Les úzkosti vystavěný ze snů a praskotů temnoty

Rozevlátá moc svou dlaň obtiskává do hmoty

Z níž jak z már nečekání a odevzdání

Naprasklé zlaté hrany – vlání, vlání –

A otvírání –

Klečívám v modlitbách a pokora plenění

Příkazem shora i zdola – obemykající vlasy

V nichž mé oči zjitřené v tvém pásu obklíčení

Škvírami zúženými na smuteční hlasy

Se otevřou –

Prostor srůstání přechodných stavů

I ztišení neviditelných v trhlinách stenů

Vyluzujících rozedrávající morkodření

Pro obyvatele nevinnosti i procitání

A otvírání

Vzývávám vyzývavě jazykem zapálení

Průzračné i znovuhynoucí tvořivosti

Jíž v rukou mnou již nevlastněných zachvívá se

Třepotání křídel a jíž se brána malosti naší

Otvírá –

Vydýchání krve – mé či tvé – snad ničí

Kde ještě život ve zlou apoteózu smrti

Vchází a srůstá s mlhou – mlčí

I pak – i pak – i pak sám rozkrývati

Na těle tvém otevřeném

A vlahém mým dechem

O slitování rouhat budu se

Když les úzkosti odkazovaný

Od věků a klamný

Vláním, Vláním

A všepohlcujícím

Otvíráním

Temným

Stráním

Jež jsem zvolil a přijal

Tebe uzavřel

 

Hříčka o jaru

Je jaro a mně se zdá

 že vichr na zem dopadá

Neodpouští, co v nás umírá –

Je jaro – z výšky si nás obzírá

Za oknem zprůsvitnělým raší stromy

Do nebe hrozí – na něm rány

Erbovní symptomy dlouhé nemoci svírající svět

Hle hlupáčku! Vždyť tamhle raší květ!

A někde další, další

Ach moji lidé plaší

Co na jaře se to v nás splaší

Že radujem se a ke křiku jsme hluší

Však vichr na zem dopadá

A nevěstu znásilňuje – ta vždy uvadá

Kam zmizí ženská paráda

Když nás pak zimě prodává



Sunday, May 09, 2004 1:31:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [1]  Literární a jiné humanitní úlety


 Friday, May 07, 2004
Uložení důležitého stavu serverových ovládacích prvků v ASP.NET 2.0

ASP.NET 1.0 přineslo pro vývojáře WWW aplikací několik zásadních novinek. Jednou z nejlepších je simulace stavového chovaní prvků pomocí ViewState. U každého serverového ovládací prvku je před vyrenderováním stránky volána metoda SaveViewState, ve které prvek uloží všechny informace potřebné k obnovení stavu. Kompletní stavová informace stránky je poté uložena ve skrytém (hidden) poli na klientovi. Po odeslání formuláře (PostBacku) je volána metoda LoadViewState všech prvků a je jí předán stav uložený metodou SaveViewState. Metoda LoadViewState obnoví stav prvku a poskytne tak vývojáři i uživateli skoro dokonalou iluzi stavového chování známého hlavně z těžkých klientů. Slovo "skoro" jsem použil záměrně, protože je často nutné z výkonnostních důvodů ukládání ViewState zakázat, aby na klienta a pak zpět na server nebyly přenášeny velké objemy dat. Můžeme sice přepsat metody LoadViewStateFromPersistenceMedium a SaveViewStateToPersistenceMedium třídy Page a ukládat ViewState například do databáze na serveru, ale v praxi se tento postup příliš neujal. Ukládání ViewState můžeme zakázat všem ovládacím prvkům na stránce, častěji ale ukládání ViewState zakážeme pouze u vybraných prvků, jež by do ViewState přidaly nejobjemnější položky. Po zakázání ViewState se ale většinou setkáme s problémy, jejichž řešení zabere nezanedbatelné množství času. Například DropDownList si po zákazu ViewState "nepamatuje" vybranou položku (SelectedIndex), takže uložení a nastavení indexu vybrané položky musíme při každém odeslání formuláře řešit sami. ViewState v .Net Frameworku 1.0 vyznává zásadu "všechno nebo nic", ale my bychom často potřebovali ukládat důležitý stav bez ohledu na nastavení ViewState vývojářem. Nemusíme ukládat do ViewState zrovna celý číselník, ale index vybrané položky přenosovou linku nijak nezatíží a programování extrémně zjednoduší.
ASP.NET 2.0 proto přichází s novinkou - kromě ViewState lze ukládat i takzvaný ControlState. O ukládání do ControlState rozhoduje výhradně vývojář serverového ovládacího prvku, jehož odpovědností je, aby do ControlState byla uložena jen data důležitá pro základní činnost prvku. Určitě ale do ControlState nesmí být ukládány DataSety, kolekce ani jiné objemné objekty. Dále platí, že stavová data jsou uložena do ControlState nebo do ViewState, nikdy ne do obou stavových úložišť! Výsledný ControlState celé stránky je ukládán na klientovi ve skrytém poli s nepřekvapivým názvem __CONTROLSTATE.
Ukládání do ControlState se příliš neliší od ukládání do ViewState. Hlavním rozdílem je to, že serverový ovládací prvek si musí vynutit ukládání a načítání ControlState voláním metody RegisterRequiresControlState třídy Page.

protected override void OnInit(EventArgs e)
{
   base.OnInit(e);
  Page.RegisterRequiresControlState(this);
}


Ve veřejné metodě SaveControlState před vyrenderováním stránky uložíme důležitý stav prvku a vrátíme jej. Návratovým typem metody je typ object, takže můžeme vrátit jakýkoli serializovatelný(!) objekt. V ukázkovém kódu je ukládán ControlState bázové třídy a poté hodnota vlastnosti SelectedIndex.

public override object SaveControlState()
{
  object baseState = base.SaveControlState();
   object[] savedSate = { baseState, this.SelectedIndex};
   return savedState;
}

Metoda LoadControlState po odeslání formuláře obnoví dříve uložený ControlState. Z argumentu state je po přetypování obnoven nejdříve ControlState bázové třídy a poté hodnota vlastnosti SelectedIndex.

public override void LoadControlState(object state)
{
   object[] savedState =(object[]) state;
   base.LoadControlState(savedState[0]);
   this.SelectedIndex = (int) savedState[1] ;
}



Friday, May 07, 2004 3:47:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [2]  ASP.NET


 Thursday, May 06, 2004
Windows forms combobox jen pro čtení

Nedávno jsem potřeboval zakázat v detailu uživateli výběr z comboboxu, ale zjistil jsem, že první nabízející se cesta přes vlastnost Enabled není vhodná. Když nastavíte vlastnost Enabled na false, tak sice uživatel žádnou položku nevybere, ale combobox působí na formuláři jako grafický "umrlec",  protože dříve vybraná položka je "zašeděná". Potřeboval jsem vlastnost, která by ponechala vizuální vzhled comboboxu beze změny, ale nedovolila provést nový výběr.
Žádnou takovou vlastnost jsem nenašel, a proto jsem vytvořil potomka comboboxu, kterému jsem přidal vlastnost DisableDropDown. Když je vlastnost DisableDropDown true, tak combobox v přepsané metodě OnWndProc ignoruje zprávy o stisku tlačítka myši (WM_LBUTTONDOWN a WM_LBUTTONDBLCLK) a zprávy z klávesnice (WM_KEYDOWN, WM_KEYUP) . V další přepsané metodě OnKeyPress combobox zamezí zadání nové položky do textového pole nastavením vlastnosti Handled argumentu e na true. To je celý trik, snad se bude odvozený combobox hodit i Vám.

using

System;

using

System.Windows.Forms;

namespace

RStein.UI

{

  /// <summary>

  /// Combobox, u nějž je možné zakázat rozbalení seznamu položek a editaci textového pole

  /// </summary>

  public class ComboBoxEx : ComboBox

  {

    private const int WM_KEYDOWN = 0x0100;

    private const int WM_KEYUP = 0x0101;

    private const int WM_LBUTTONDOWN = 0x0201;

    private const int WM_LBUTTONDBLCLK = 0x0203;

 

   #region

private fields

   private bool m_disableDropDown = false ;

   #endregion

private fields

   /// <summary>

   /// Konstruktor

   /// </summary>

   public ComboBoxEx()

   {

     m_disableDropDown =

false ;

   }

  #region

public properties

  /// <summary>

  /// Zakázat zobrazení položek?

  /// </summary>

  public bool DisableDropDown

  {

    get

    {

      return m_disableDropDown;

    }

   set

   {

      m_disableDropDown =

value ;

   }

  }

  #endregion

public properties

 

  #region

protected methods

  protected override void OnKeyPress(KeyPressEventArgs e)

  {

    if (!DisableDropDown)

     base .OnKeyPress(e);

    else

     e.Handled = true;

   }

  protected override void WndProc(ref Message m)

  {

    if (!DisableDropDown)

      base.WndProc (ref m);

    else if ((m.Msg != WM_KEYDOWN) &&

                (m.Msg != WM_LBUTTONDOWN ) &&

               (m.Msg != WM_LBUTTONDBLCLK) &&

             (m.Msg != WM_KEYUP))

              base.WndProc (ref m);

  }

  #endregion

protected methods

  }

}



Thursday, May 06, 2004 9:15:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [0]  Windows Forms


DIGI TRADE součástí skupiny PC-WARE
Firma DIGI TRADE, ve kterém jsem zaměstnán, se včera stala součástí mezinárodní skupiny PC-WARE. Další krok za námi, vypadá to, že se můžeme těšit na rozsáhlé a doufám i komplikované mezinárodní projekty. Nové zkušenosti, příležitosti, žádný stereotyp, přesně to, co mám rád. U sklenky šampaňského také doufám, že se nám vyhnou mezinárodní průšvihy, ty internacionalizovat nemusíme.:)

Thursday, May 06, 2004 1:44:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [3]  Ostatní


 Wednesday, May 05, 2004
Moderní architektura očima Microsoftu aneb rozpaky nad vizemi

Na konferenci, jejíž název je v titulku spotu, jsem strávil dnešní den. Microsoft na ní po úvodní přednášce prezentoval hlavně BizTalk, takže jsem ji bral jako pokračování praktického semináře z minulého týdne. Úvodní přednášku měl Michael Juřek a vysvětloval v ní, jak Microsoft reaguje na požadavky firem integrovat existující aplikace bez velkých nákladů, ale přitom způsobem, který mezi aplikacemi nevytváří více a více se svírající osudové kruhy.
Určitě osudové kruhy znáte, aplikace A využívá databázi aplikace B, ta si sáhne do databáze aplikace C pro autorizované uživatele a na oplátku v aplikaci A vyřídí faktury. Aplikace D si také ráda sosne z jiných zdrojů a máme zde solidní mikromodel chaosu. Aplikace jsou těsně provázány a přitom neexistuje jediný závazný model jejich komunikace. Ano, nebojte se, padlo i magické zaklínadlo dnešních dnů, SOA, ale kupodivu v sále hysterie nepropukla, potože Michal Juřek naštěstí nepronáší pojem SOA tak vznešeně, jak by si fanoušci buzzwords asi přáli.:) Pokud tento spot čtou šťastlivci, kteří o SOA (Service oriented architecture) neslyšeli, tak vězte, že Microsoft se přklonil k této definici služby - "Služba je autonomní část software, která implementuje logiku v podobě kódu, spravuje svůj stav, komunikuje prostřednictvím zpráv, je řízena politikou a je dostupná po síti". Když se nad touto definicí zamyslíte, tak zjistíte, že ji asi můžete napasovat na jakoukoli komponentu. Dosti žertování, bez ohledu na zbytečný humbuk kolem SOA je opravdu zřejmé, že se již dnes stále více prosazují integrace na bázi WWW služeb, u nichž nás nezajímá implementace, ale pouze struktura platformně a infrastrukturně nezávislých zpráv, které jim mohu zaslat a které mi pošlou jako odpověď. Jinými slovy, zajímá mě jen závazný protokol pro výměnu zpráv (kontrakt) mezi mnou a službou, vše ostatní je zcela irelevantní. Cílem integrací je také zrušení těsných závislostí mezi aplikacemi nasazením inteligentního prostředníka, který jejich spolupráci koordinuje. Na platformě Microsoftu je tímto integrátorem (brokerem) BizTalk.

Mimochodem - víte, kdy začnu respektovat fanoušky SOA? Až dokážou napsat WSDL WWW služby ke komponentě z hlavy - tomu říkám znalost technologie a respekt k ní:)

Nejen tato, ale i další přednášky Michala Juřka se mi líbily. Horší to bylo s částmi, které měl na starosti Miloš Sobotka.  Jeho prezentace byly velmi nekonvenční, takže jsem brzy nabyl dojmu, že ho Microsoft předtím omylem vyslal na kurz asertivity místo potřebného kurzu prezentačních dovedností . Jeho ústní projev byl plný pomocných frází, zaumných přeřeknutí a rozverných anglicismů, přednáška neměla žádnou logickou kostru, prezentace dema vetšinou nedopadla podle jeho představ, ale všechnny tyto nedostatky zvládl s labilním smíchem asertivně bagatelizovat a vystavit jako přednost.:) Nebyly to informačně hodnotné přednášky, ale docela jsem se pobavil.:)


Na konci konference byly zodpovězeny naše dotazy a dostalo se i na vztah Microsotu k UML. UML 2.0 má silnou podporu pro modelování dynamického chování, a proto asi nejen mě zajímalo, jestli se v BizTalku i dalších produktech návrh procesů v UML objeví. Zvláště poté, co prosákly zprávy, že Microsoft k UML dobrý vztah nemá. Bohužel, nešlo o žádné pomluvy, Microsoft si s UML opravdu nerozumí. Já ale zase asi nerozumím Microsoftu. Jak může na konferenci o moderní architektuře bezelstně přiznat, že mu jeden z nejdůležitějších nástrojů analytika, designéra a architekta nesedí? Proč se chce vydělit z MDA iniciativy?

Oficiálně byly sděleny zatím tyto důvody pro vlažný vztah k UML.
1) UML je pro běžného vývojáře příliš komplikované. Microsoft se vždy údajně orientoval na "masového" vývojáře, který nemá žádné komplikované věci rád,  a UML by tuto orientaci popřelo. Opravdu je pro Vás, kdo tento spot čtete, UML složité? A hlavně,  v čem je pro Vás složité? Mně přijde jako jednoduché, čisté a elegantní. Znamená to, že JAVA vývojáří UML zvládnou, ale C# vývojář má potíže? Já myslím, že ne a že jde o pouhý alibismus kvůli bodu 2. Jsem také skeptický v tom, že Microsoft by přišel s něčím stejně výkonným jako je UML a přitom by šlo o jednodušší jazyk. Nechci hračky vhodné na splácání projektu o 10 třídách a odškrtnutí kolonky "Analýza hotova" v projektovém plánu.
2) Firma Rational Rose byla koupena IBM a IBM je konkurence, takže podpora UML by byla pro Microsoft schizofrenní. Tenhle argument už vypadá věrohodněji, protože Microsoft zcela jistě nebude podporovat konkurenci. Ale přesto, UML nepatří IBM, UML je průmyslový standard. Nevylévejte s vaničkou dítě, které má skvělé geny. A ty geny nejsou po adoptivních rodičích-vlastnících. Zásadovost je správná a konkurenci je třeba potřít, ale UML s tímhle bojem nemá nic společného. Vývojáři mohou použitím UML jen získat, ale UML je nesvede k laškování s IBM technologiemi. Věřte mi, jsem živý důkaz:)



Wednesday, May 05, 2004 8:14:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [15]  Analytické drobky