\

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


 Monday, July 25, 2005
Změna umístění blogu

Konečně jsem se dostal k přestěhování blogu na vlastní doménu. Děkuji Michalovi za dosavadní hostování blogu i za pomoc při exportování spotů z .TEXTu. Důvodem mého odchodu není nějaký truc vůči Michalovi, ale jak jsem psal již dříve, moje zvláštní úchylka, která se projevuje tím, že jsem nerad na komkoli závislý, byť by šlo o tak příjemného a vstřícného člověka jako je Michal. Myslím, že Nikos Kazantzakis v Řeku Zorbovi říká, že zvětšování naší svobody je jen iluze a že se jen zvětšuje délka provazu, na kterém jsme uvázáni, takže můžeme dělat stále větší okruhy kolem stromu, k němuž je provaz upevněn. I kdyby to bylo pravda, cítím se teď s delším (a ne snad šibeničním) provazem na krku lépe.

Pár základních informaci na úvod.

URL
http://blog.renestein.net

RSS
http://blog.renestein.net/SyndicationService.asmx/GetRss

ATOM
 http://blog.renestein.net/SyndicationServiceExperimental.asmx/GetAtom

  1. Blog již neběží na TEXTu, ale na DASBlogu. DASBlog jsem si vybral, protože mi přijde lépe napsaný a umožňuje kromě dalších vychytávek třeba publikaci spotů přes mail. Bohužel zatím ukládá data do XML, ale dá se žít i s touto drobnou vadou. Protože jsem do útrob DASBlogu dostatečně nahlédl. pokusím se pár spotů o DASBlogu napsat. Důvodem k přechodu na DASBlog bylo také odpoutání se od toho, co kolega Daniel Steigerwald v hyperbole nazval zárodkem fašismu v podobě .TEXTu v .NET komunitě. :)

  2. Při převádění spotů jsem je znovu všechny roztřídil do nových kategorií, protože staré kategorie nevyhovovaly a mnohdy nebyly ani v původních kategoriích spoty správně zařazeny.

  3. Trochu později jsem zjistil, že se mi zatím nepodařilo korektně převést všechny komentáře. Na tom budu muset ještě zapracovat.

  4. Přišlo mi docela dost emailů od lidí, kteří se ptali, kdy vyjde další článek o UML na Interval.cz. Dobrou zprávou pro všechny tazatele snad bude to, že další díl seriálu jsme již redakci poslal a snad se mi podaří v seriálu pokračovat rychlejším tempem než dosud. Dále díky benevolenci serveru Interval.cz a jeho šéfredaktora Viléma Málka budu moci s měsíčním zpožděném publikovat články z Intervalu na svých stránkách. Takže brzy se zde objeví všechny mé články v ucelené podobě.

  5. Články zmíněné v předchozím odstavci chci publikovat na samostatné subdoméně a moji ambicí je vytvořit stránky o návrhu, designu a vývoji aplikací, které budou v ideálním případě pro všechny zájemce ekvivalentem toho, co představují vynikající stránky JakPsátWeb pro html kodéry.

  6. Když už jsem u toho inspirování se jinde. Na weblogu je také sekce Zaujalo mě, ve které budou bez další kategorizace odkazy na kvalitní články, které mě v poslední době zaujaly. Zcela nepokrytě se přiznávám, že nápad jsem zkopíroval od Jirky Macicha.

  7. Frekvence publikování na blogu bude (snad) vyšší než doposud.

  8. Pár lidí mělo zájem o reklamu na blogu. Nyní je možné se na reklamě domluvit - kontaktujte mě a domluvíme si podmínky.

To nejlepší na konec: Jestliže se vám líbila Malá typologie českých vývojářů, a bylo vás asi dost, když do celkového počtu čtenářů započítám i rozzuřené emaily od jistých rozkošně se vyjadřujících anonymních přátel, můžete se těšit na pokračování.

Nikdy bych nevěřil, že spot, který jsem napsal za 20 minut kvůli katarzi a vůběc očištění od špatných nekřesťanských myšlenek týkajících se humánní anihilace špatných vývojářů sklidí takový ohlas a že se v něm tolik lidí pozná. Inu, co Čech, to vývojář:). Kromě typologie vývojářů se připravuje i typologie projektových vedoucích - sondu do světa SW firem je potřeba zasunout co nejhlouběji a nezůstat na povrchu.

Zajímavé a trochu smutné je, že moje technické spoty si přečetla přibližně jedna třetina z počtu čtenářů, kteří zhlédli typologii vývojářů - raději z toho nebudu induktivně dovozovat, proč se tak v Čechách daří bulváru a jinému škváru.

BTW: Také jste zaregistrovali, že seriál o VB.NET přestal konečně vycházet? Boží mlýny melou pomalu, ale nakonec nezapomínají ani na svět SW. ;)

Takže vítejte;)



Monday, July 25, 2005 1:32:16 PM (Central Europe Standard Time, UTC+01:00)       
Comments [4]  


 Wednesday, April 13, 2005
Ještě jedna prezentace z přednášky o návrhových vzorech

Jak mě upozornil jeden kolega, tak jsem nedal ke stažení prezentaci z přednášky o návrhových vzorech a .Net Frameworku z listopadového programátorského večera.

Takže pro zájemce napravuji:

V archivu ČVUT je i videozáznam přednášky, i když já sám jsem nenašel odvahu se na sebe narcisticko-kriticky podívat ;)

Prezentace, velikost 675 KB

 



Wednesday, April 13, 2005 11:36:00 AM (Central Europe Standard Time, UTC+01:00)       
Comments [0]  Návrhové vzory | UML


 Tuesday, April 12, 2005
Prezentace a příklady z přednášky o C# 2.0

Uvolnil jsem prezentaci a příklady ze včerejší přednášky o C# 2.0

Stažení prezentace, velikost 313 KB

Stažení příkladů (testovány na prosincovém CP buildu VS.NET), velikost 170 KB

Protože při diskuzi zazněl zajímavý dotaz na téma dynamického vytváření uzavřeného konstruovaného generického typu pomocí reflection, přidal jsem další příklad, který ukazuje, že máme v C# (a v .Net Frameworku obecně) i za běhu aplikace k dispozici všechny informace o generickém typu, a proto můžeme provádět "kouzla", která jsou v C++ nebo v JAVĚ zapovězená a nedostupná.

        static void Main(string[] args)         
        {
            //Získání generického typu
            Type poolType = typeof(ObjectPool<>);
           
            //Vytvoření generických argumentů
            //(typ SomeResource substituující generický parametr T z třídy ObjectPool)
            Type[] genArguments = new Type[]{typeof(SomeResource)};
            //Dynamické vytvoření uzavřeného konstruovaného typu ObjectPool<SomeResource>
            Type constructedType = poolType.BindGenericParameters(genArguments);
            //Vytvoření instance typu ObjectPool<SomeResource>
            Object conType = Activator.CreateInstance(constructedType, new Object[]{10});
           
            Console.WriteLine(conType.ToString());
        }



Tuesday, April 12, 2005 12:58:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [3]  


 Sunday, April 03, 2005
Prezentace z .NET Developer Group o UML ke stažení
Hádanka

Na čtvrteční přednášce o UML jsem do svého rezervoáru životních paradoxů přidal pár dalších :)

1) I když sebekriticky zredukuju prezentaci o 150 slidech na 70, poté se intenzivní a zostřenou psychoanalytickou rychloseancí, na které by i těžkotonážní barokně rozsochatá lady Halina Pawlowská prodělala akutní záchvat mentální anorexie, jenž by byl excelentně konvertibilní na finační částku za nějakou další a zatraceně rychle natočenou reklamu na hubnutí s bonusem ve formě nezbytných JoJo baculatých efektů pro frustrované paničky, které jako ona chytře snídají dietní Colu s čokoládovými tyčinkami. :), vypořádám s pocity viny, jejichž zdrojem je obsedantní představa, že svatokrádežně zjednodušuju svá milovaná témata hodná nejvyšší úcty,  a přesto nenásleduje kýžená odměna, jíž měl suplovat fakt, že jsem ve vyhrazených 3 hodinách vykleštěné téma alespoň stihl probrat. ;)

2) Je zvláštní přijít tak rozpolcený z přednášky na výsostné půdě Microsoftu, protože jsem navzdory svému obdivu vůči mnoha MS produktům musel po dotazech posluchačů doporučovat modelovací nástroje od jiných firem a dát najevo svoji vytříbenou nechuť k "vytváření návrhů" ve Visiu a také si opět otravně povzdychnout nad tím, že Visual Studio Team System, MSF a UML nejsou a nebudou nerozlučným triem - killerem konkurenčních nástrojů pro návrh a vývoj aplikací. ;)

Zájemci si mohou stáhnout prezentaci, i když na návrhové vzory nezbyl ve čtvrtek čas a budou v rozšířené podobě tématem až nějaké další .Net Developer Group.



Sunday, April 03, 2005 6:28:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [5]  Návrhové vzory | UML


 Wednesday, March 30, 2005
Programátorsko-analytická hádanka
Hádanka

Máte třídu objednávky, která může nabývat 3 stavů (Nová, Schválená, Zamítnutá) . Dokážete určit, co všechno je v následujícím kódu špatně?

 
 
 public enum OrderState
    {
        New,
        Rejected,
        Approved
    }
    
    
    public class Order
    {
        protected OrderState m_state;
        public Order()
        {
            m_state = OrderState.New;
        }
        public virtual void Approve()
        {
            if (m_state != OrderState.New)
            {
                throw new InvalidOperationException();
            }
            m_state = OrderState.Approved;
        }
        
        public virtual void Reject()
        {
            if (m_state != OrderState.New)
            {
                throw new InvalidOperationException();
            }
            m_state = OrderState.Rejected;
        }
    }
    
    public class SpecialOrder : Order
    {
        public SpecialOrder() : base()
        {
            
        }
        
        public override void Approve()
        {
            
            throw new InvalidOperationException();
        }
        public override void Reject()
        {
            if ((m_state != OrderState.New) && (m_state != OrderState.Approved))
            {
                throw new InvalidOperationException();
            }
            
            m_state = OrderState.Rejected;
        }
        
    }
    


Wednesday, March 30, 2005 7:31:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [24]  Programátorské hádanky


 Tuesday, March 29, 2005
Třída XmlSerializer - pár tipů

Dnes se na Emwacu objevil dotaz ke třídě XmlSerializer. K neoblíbené a podezřelými chybovými hláškami prolezlé třídě XmlSerializer dodám ještě dva tipy pro neštastníky, kteří s ní stále vedou nerovný podpásový zápas.;)

V aplikaci je vyvolána výjimka s informací "System.IO.FileNotFoundException: File or assembly name <nejaka blbina - jméno dynamické assembly>.dll, or one of i
ts dependencies, was not found.
" Tuto hlášku můžete dostat i ve webových službách, které interně XmlSerializer používají.

Jaké jsou příčiny této chybové hlášky?

1) XmlSerializer emituje za běhu dynamickou assembly pro rychlou serializaci typu předaného do jeho konstruktoru. Dynamická assembly se vytváří v pracovním adresáři (aktuálně požívaný TEMP adresář získáte voláním Path.GetTempPath) a k selhání dojde, protože účet, pod kterým běží aplikace, nemá práva na zápis a čtení z adresáře. Účtu aplikace stačí přidělit vyžadovaná práva na TEMP adresář a vše se zdá být v pořádku, alespoň k dalšímu neúspěšnému pokusu o spuštění aplikace.

2) Výše zmíněnou výjimku totiž XmlSerializer používá jako univerzální informaci o takřka jakémkoli selhání. Jste-li si jisti, že práva na temp adresář nastavena máte, přidejte do konfiguračního souboru aplikace následující switch.

<system.diagnostics>

   <switches>

     <add name="XmlSerialization.Compilation" value="1" />

   </switches>

</system.diagnostics>

V TEMP adresáři pak naleznete textový soubor <jméno generované assembly>.out, ve kterém jsou zalogovány chyby - tentokrát ty "pravé" bez ochranných mimikrů iritujícího XmlSerializeru :)



Tuesday, March 29, 2005 6:03:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [2]  


 Sunday, March 27, 2005
Pozvání na přednášky o návrhových vzorech a C# 2.0
UML

Po delší době úplného mediálního klidu na svém blogu bych Vás všechny rád pozval na dvě přednášky. Tedy alespoň vytrvalce, kteří jsou tak trpěliví nebo nepořádní, že při jarním úklidu svých počítačů nevymetli můj blog ze svých RSS čteček jako loňské zahnívající názorové smetí. ;)


31.3.2005 od 18:00 mám přednášku pro .NET Developer Group s názvem "UML a návrhové vzory" a podtitulem "Od letmých doteků k nestřídmé zamilovanosti" ;)
Podrobnosti o akci naleznete na hlavní stránce serveru Vyvojar.cz. Kvůli vymezenému času půjde samozřejmě jen o povrchní seznámení, ale na počátku nestřídmé zamilovanosti stojí většinou jen pár (ještě ;)) cudných pohledů na objekt zájmu.

Původ a historie jazyka UML

  1. Základní konstitutivní prvky jazyka UML
  2. Požadavky na systém - případy užití
  3. Třídy a objekty - diagram tříd, diagram objektů
  4. Diagramy interakce (diagram spolupráce a sekvenční diagram)
  5. Diagram aktivit
  6. Stavové diagramy
  7. Diagram komponent a diagram nasazení
  8. Návrhové vzory – úvod
  9. Unit of Work
  10. Component configurator
  11. Special Case object
  12. Thread specific storage (PseudoSingleton)
  13. Interceptor
  14. Volná diskuze

Na programátorském večeru ČVUT 11.4.2005 budu přednášet o C# 2.0. Přednášku jsem uvedl takto.

V přednášce budou vysvětleny nové vlastnosti jazyka C# ve verzi 2.0, motivace pro zavedeni novych jazykovych konstrukci . Součástí přednášky budou také ukázky kodu, ktere demonstrují na typizovaných problémech i raritnich hřičkách sílu a eleganci C# 2.0 v praxi.

Pro "zmrtvýchvstáni" všeho druhu jsou Velikonoce příhodný čas, takže přeji Vám všem, abyste plně sdíleli smysl tohoto nádherného symbolického zpřítomnění naddějinné události, která tak libozvučně zní jen v řečtině - "Christos Anesti". Je dobré vědět, že vše má smysl...



Sunday, March 27, 2005 8:43:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [12]  


 Thursday, December 23, 2004
Vánoce 2004

Přeji Vám všem prožití Vánočních svátků v radosti z Kristova narození a rychlé zhojení všech šrámů na těle i na duši, ať už těch, které jste možná utrpěli při zběsilém a a na poslední chvíli odkládaném nakupování dárků od frustrovaných obchodníků, nebo jakýchkoli jiných naakumulovaných za celý rok. ;)

 

Betlém

Thursday, December 23, 2004 2:00:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [3]  Ostatní


 Tuesday, November 09, 2004
Další listopadové úterý s programátorskou hádankou

Hádanka Dokážete (opět bez spuštění programu ;) ) určit, co vypíše tento program, a zdůvodnit jeho chování?

 
 
 
using System;
namespace RSTein.Blog
{
    struct NumberStruct
    {
        public int Number;
    }
    
    
    public class Test 
    {
        private  static Object Add(Object obj) 
        {
        
            if (obj is NumberStruct)
            {
                NumberStruct numb = (NumberStruct) obj;
                numb.Number += 1;
                return numb;
                
            }
            
            return obj;
        
        }
        public static void Main()
        {
            NumberStruct numberStruct = new NumberStruct();
            numberStruct.Number = 10;
            
            Object retNumberStructObject = Add(numberStruct);
            object originalStructObject =  numberStruct;
            
            Console.WriteLine(numberStruct.Number);
            Console.WriteLine(((NumberStruct)retNumberStructObject).Number);
            Console.WriteLine((originalStructObject == retNumberStructObject));
            Console.Read();
        }
    }

}


Tuesday, November 09, 2004 9:16:00 AM (Central Europe Standard Time, UTC+01:00)       
Comments [7]  Programátorské hádanky


 Sunday, November 07, 2004
První termín kurzu o OOP a UML za mnou, co chystám dál?

V pátek bylo prvním účastníkům kurzu o návrhu aplikaci předáno osvědčení o jeho úspěšném absolvování ;)

Všem, kdo se zúčastnili prvního běhu, a byli tak chtě nechtě laboratorními zvířátky;), na nichž jsem si ověřoval , jaká témata musím zdůraznit a jaká naopak mohu jen letmo ve vyhrazeném čase zmínit, děkuji za věcné připomínky a náměty, které budou mít vliv na podobu kurzu v dalších termínech. Nejbližší další temín kurzu je 15.12-17.12 2004 a je, stejně jako následující jarní termín, plně obsazen.

Aby spot nebyl jen ozvěnou toho, co bylo nebo v dalších variacích bude, zde je předběžný a neúplný seznam věcí, které bych chtěl do konce tohoto roku a během příštího roku stihnout a které záležejí jen na mně.

22.11.2004 - přednáška Návrhové vzory nejen pro komerční aplikace a jejich implementace v .Net Frameworku na programátorských večerech ČVUT. Přednáška se soustředí na srovnání návrhových vzorů na odlišné úrovni abstrakce, bude se zabývat rozdíly mezi tradičními GoF vzory, vzory kodifikovanými Martinem Fowlerem, vzory pro integrační scénáře a způsobem implementace vzorů v .NET Frameworku.

Během příštího roku bych rád vydal knihu (nevím zatím, zda jen v podobě e-booku nebo v nějakém kamenném nakladatelství) o návrhových vzorech a aplikačních frameworcích, kde bych uvedl i některé své vlastní vzory a idiomy, které při návrhu aplikací používám. (největším lákadlem by měla být plně generická Identity Map).

V první polovině příštího roku chci spustit již dříve avizovanou vlastní doménu.

Ve druhé polovině roku by se mělo objevit pokračování kurzu o OOP a UML, které by u každého účastníka předpokládalo znalosti v rozsahu právě probíhajícího kurzu, takže bez jakýchkoli zdržování a srovnávání znalostí bychom se všemi účastníky ihned přikročili k návrhu informačního systému od analýzy přes systémový design a skončili bychom vytvořením tří různých klientů ve VS.NET 2005 (Windows Forms, ASP.NET, compact .NET Framework).



Sunday, November 07, 2004 11:27:00 AM (Central Europe Standard Time, UTC+01:00)       
Comments [2]  Kurzy UML a OOP | Ostatní | UML