Xabatcha blog - Prázdný Exception.StackTrace
Při použití vnitrofiremní knihovny pro logování v Net aplikacích jsem se dostal do problému, kdy se zpráva logovala do databáse. V tomto případě SQL Server 2000. Při hledání řešení jsem narazil na několik chyb. Zde musím říci, že je mimo mou moc něco změnit v této knihovně. Což mě nečiní moc šťastným, spíše naopak.Chybou bylo, že pokud byla nějaká vstupní hodnota rovna null, v mém případě StackTrace z Exception objektu, tak to padalo jemně na pusu. Důvodem je, že SQL Server neakceptuje null hodnotu tak jak ji interpretuje Dot.Net. Musí se provést test hodnoty na null hodnotu a pokud je object roven null, musí se přiřadit jiná null hodnota, které SQL Server rozumí. V tomto případě System.DBNull.Value.Tento problém se dal ještě řešit na úrovni SQL serveru a to přiřazením default NULL hodnoty pro vstupní parametr v insertovací stored proceduře. Pak to projde i bez změn v logovací knihovně. Tedy něco jakoCREATE PROCEDURE dbo.insert_errorlog @errormessage nvarchar(500) = NULL, @errorsource nvarchar(100) = NULL, @stacktrace nvarchar(300) = NULL, as ...Zajímavostí, které mě ale nejvíce zaujala jest zjištění, že na to aby se naplnil StackTrace v Exception musí být sama Exception vyhozena (vyhozena ... legrační, že). Tedy nestačí ji jen vytvořit pomocí new konstrukce ale musí se použít navíc i throw konstrukce. Viz příklad.CODEstatic void Main(string[] args){ UserFriendlyException exc = new UserFriendlyException("test"); Console.WriteLine("1. Exception created"); Console.WriteLine(string.Format("Reading Stacktrace: {0}",exc.StackTrace)); try { Console.WriteLine("2. Exception thrown"); throw exc; } catch (UserFriendlyException ex) { Console.WriteLine("3. Exception caught as UserFriendlyException"); Console.WriteLine(string.Format("Reading Stacktrace: {0}",ex.StackTrace)); } catch(Exception ex) { Console.WriteLine("4. Exception caught as Exception"); Console.WriteLine(string.Format("Reading Stacktrace: {0}",ex.StackTrace)); } Console.WriteLine("**************************"); Console.WriteLine("Press any key to close it."); Console.ReadLine();}Věc se má vlastně tak, že jsem se snažil přijít na to, jak bych mohl nastavit nějakou hodnotu do StackTrace vlastnosti. Bohužel StackTrace má pouze Getter a nelze ho vložit jako input parametr do konstruktoru, takže zde není šance jak ho nastavit z venku.Btw. podobná situace je s další Exception vlastností a to je Source, ale ten jde naštěstí nastavit, jelikož má i Setter.Source:
ExceptionTest.zip ( 17.07k )
Počet stažení: 0]
Při použití vnitrofiremní knihovny pro logování v Net aplikacích jsem se dostal do problému, kdy se zpráva logovala do databáse. V tomto případě SQL Server 2000. Při hledání řešení jsem narazil na několik chyb. Zde musím říci, že je mimo mou moc něco změnit v této knihovně. Což mě nečiní moc šťastným, spíše naopak.Chybou bylo, že pokud byla nějaká vstupní hodnota rovna null, v mém případě StackTrace z Exception objektu, tak to padalo jemně na pusu. Důvodem je, že SQL Server neakceptuje null hodnotu tak jak ji interpretuje Dot.Net. Musí se provést test hodnoty na null hodnotu a pokud je object roven null, musí se přiřadit jiná null hodnota, které SQL Server rozumí. V tomto případě System.DBNull.Value.Tento problém se dal ještě řešit na úrovni SQL serveru a to přiřazením default NULL hodnoty pro vstupní parametr v insertovací stored proceduře. Pak to projde i bez změn v logovací knihovně. Tedy něco jakoCREATE PROCEDURE dbo.insert_errorlog @errormessage nvarchar(500) = NULL, @errorsource nvarchar(100) = NULL, @stacktrace nvarchar(300) = NULL, as ...Zajímavostí, které mě ale nejvíce zaujala jest zjištění, že na to aby se naplnil StackTrace v Exception musí být sama Exception vyhozena (vyhozena ... legrační, že). Tedy nestačí ji jen vytvořit pomocí new konstrukce ale musí se použít navíc i throw konstrukce. Viz příklad.CODEstatic void Main(string[] args){ UserFriendlyException exc = new UserFriendlyException("test"); Console.WriteLine("1. Exception created"); Console.WriteLine(string.Format("Reading Stacktrace: {0}",exc.StackTrace)); try { Console.WriteLine("2. Exception thrown"); throw exc; } catch (UserFriendlyException ex) { Console.WriteLine("3. Exception caught as UserFriendlyException"); Console.WriteLine(string.Format("Reading Stacktrace: {0}",ex.StackTrace)); } catch(Exception ex) { Console.WriteLine("4. Exception caught as Exception"); Console.WriteLine(string.Format("Reading Stacktrace: {0}",ex.StackTrace)); } Console.WriteLine("**************************"); Console.WriteLine("Press any key to close it."); Console.ReadLine();}Věc se má vlastně tak, že jsem se snažil přijít na to, jak bych mohl nastavit nějakou hodnotu do StackTrace vlastnosti. Bohužel StackTrace má pouze Getter a nelze ho vložit jako input parametr do konstruktoru, takže zde není šance jak ho nastavit z venku.Btw. podobná situace je s další Exception vlastností a to je Source, ale ten jde naštěstí nastavit, jelikož má i Setter.Source:
ExceptionTest.zip ( 17.07k )
Počet stažení: 0]
Související články
Firma jež zaměstnává guru of CSLA, Rockforda Lhotku, hledá nové zaměstnance. Hádám, že nic pro našince, jelikož všechny její pobočky jsou v USA, ale určitě je zajímavý jejich vstupní test, který je online dostupný na internetu. Kriterium pro možnost přijetí je dosažení 70 bodů ze 100. Obsahem testu jsou v podstatě elementární otázky týkajicí se Net frameworku. Nic o CSLA, jen základy. Teoreticky, ten kdo pilně studoval celý Henselmanuv seznam otázek by neměl mít větší problémy dosáhnout velmi vysokého hodnocení. Určitě je zajímavé zjistit, jak na tom jsme....osobně jsem dosáhl 50 bodů a test jsem vyplnil behěm 10 minut bez toho abych se vracel zpět. Tak co, jak dobří jste?]

28. listopadu 07, 03:11
megaBLOG.cz Seznam blogů
Některé věci jsou opravdu mimo mé chápání.Můj tchán je tak trochu samorost a beran a některé věci prostě řeší tak nějak po svém....ale co je moc to je moc....jeden příklad za všechny.V baráku máme v obývacím pokoji krb. Krb bohužel nemá záklopku a tak jsem ustí komína vrazil takovou ucpávku, kterou lze v případě potřeby šlo vyndat. Můj tchán je vášnivý pyromen a snílek, rád pálí ohníčky. A tak zatím co jsem uspával ratolesti, tak se jal pálit ohýnek. Když jsem se ho později zeptal, kam že to dal tu ucpávku, odpověděl mi z dětským výrazem ve tváři, že ji spálil. A tohle prostě nechápu. Ta vycpávka byla specificky vyrobena za účelem nahrazení záklopky. Primitivní, ale funkční. A on to spálí jako by se nechumelilo. Opravdu tohle přichází z věkem na každého? Budu taky takový?????]
Tak se postupně snažím pochopit smysl všech těch pro mě nových výrazů v programování, např. MVP, MVC, Dependency injection, Smart parts a mnoho dalších. Musím říci, že to není vůbec jednoduché a pokud to člověk nepotřebuje během své normální pracovní doby, tak se do toho člověk dostává dost těžko, alespoň takhle po večerech.Tento příspěvek píší ze záměrem pomocí případným zájemcům o SCSF implementaci usnadnit pátrání po případné dokumentaci, příkladům či průvodcům.Ačkoli by člověk předpokládal, že největším informačním zdrojem budou stránky SCSF, tak podle mě nejvíce začátečníkovi pomůže seriál jež na svém blogu zveřejňuje Rich Newman. Pokud se rozhodnete použít SCSF pro svůj budoucí projekt, určitě se budete muset seznámit s Composite Application Block, což je vlastně podstata věci.Dle svých zkušeností bych doporučil tyto dostupné zdroje: (Seznam seřazen dle priorit)1 . seriál od Riche Newmana2. Cabpedia - wiki dokumentace shrnující dostupné informace k SCSF, plus pár tipů k vývoji3. SCSF - officiální stránky Smart klienta (za pozornost určitě stojí nově otevřená znalostní databáze)Za zmínku stojí určitě i pár blogů, například #2782, David Hayden, Tom Hollander a již zmiňovaný Rich NewmanCo se týče příkladů s použitím SCSF, tak bych doporučil mimo příkladů dostupných přímo od SCSF týmu těchto pár implementací:1. kombinace CSLA a SCSF - použití SCSF u příkladu distribuovaného s CSLA2. Example ke knize o SCSF od Davida Platta3. třetím implementací je Petshop od Szymona KobalczykaOsobně shledávám problém v pochopení, a to hlavně v roztřístřeností možných řešení implementace. Zatím pro mne není zřejmé, kdy a kde co použít pro docílení nejoptimálnějšího řešení. Když na to musí člověk přicházet sám, tak to vždy trvá, zase na druhou stranu tomu bude plně rozumět. Hlavně vytrvat...P.S. pokud budete mít nějaké další tipy, nerozpakujte se a přidejte je do diskuze.
Sasha Barber, jeden z mnoha MVP používá usměvnou poznámku pod čarou:Originál:Your best friend is you.I"m my best friend too. We share the same views, and hardly ever argueNeoriginální překlad:Ty jsi svůj nejlepší přítel.Já jsem můj nejlepší přátel také. Máme stejný názor na věc a nikdy se nepřeme.
Již nějakou dobu používám CSLA.Net pro business objekty. Za tu dobu jsem si vytvořil pár templates, které by se mohli případně hodit i někomu jinému. Originály jsou z šablon, které se dodávají volně s frameworkem. Templates kombinují CSLA objekty s Enterprise Library data block, Pro získání dat z database se volají stored procedure. Pro C# kód jsem dříve používal jen princip Copy, Past, Replace. Teď používám ReSharper, tak to jde jednodušeji přes templates, které tam jsou zabudované. Pro začátek začneme jedním z nejvíce používaných objektů a to je RootEditable object.
Přiložené soubory
Pro ty kdo ještě neví co je to SCSF alias Smart Client Software Factory nechť následují bílého králíka.Začal jsem se seznamovat s tímto programovacím modelem a narazil jsem na pár záludných chyb.První byl problém po instalaci při vytváření nového SCSF projektu ve VS2005, kdy celý proces spadl a zahlásil chybu, že nemůže vytvořit nové solution a v error message byl odkaz na nějaké chybějící VB soubory. Dle informaci na stránkách projektu jde o dnes již vyřešený bug a to buď nutnou doinstalací Visual Basicu nebo s modifikací instalačního balíčku případně nainstalované verze.Druhý bug je docela legrační, protože si myslím, že mohl dost lidem přivodit pár neradostných okamžiků. Při použití recipe Add Event Publication nad View docházelo k padání generování kódu s nějakou nesmyslnou chybou. Ale co mě fakt dostalo je řešení. Stačí zapnout odřádkování složených závorek na nový řádek pro formátování metod. Tedy něco jako toto:public void CloseView(....){}Fakt jsem obdivoval toho borce co na to přišel.]
Na Codesqueeze jsem narazil na skvělý článek, akorát nevím jestli je k smíchu nebo pláči.Osobně jsem nemohl udržet smích v rozumných mezích. :-)]
Ten kdo má, měl možnost potýkat se s klonováním objektů v Net aplikacích jistě řešil jak správně a jak hluboko :-) se má klonovat. Mým problémem je, že chci do svých Base objektů implementovat metodu, která vrátí Deep copy objektu v nové instanci. Tedy, že v paměti vzniknou dva různé avšak identické objekty.Pod tlakem událostí jsem to řešil né příliš efektivní cestou o to tím, že jsem metodu implementoval až na úrovni zděděných objektů, přičemž jsem ovšem porušil pravidlo viditelnosti Base objektů a zpřístupnil jsem některé privátní proměnné jako protected tak aby šli nastavit. Spokojený s tím moc nejsem, takže se mi snad podaří prosadit změnu ve smyslu implementace na úrovni Base objektů a navrácení viditelnosti změněných vlastností.Na toto téma jsem trochu googloval a našel jsem velmi vydařený článek, který obsahuje i praktické příklady.]
Ten kdo má, měl možnost potýkat se s klonováním objektů v Net aplikacích jistě řešil jak správně a jak hluboko :-) se má klonovat. Mým problémem je, že chci do svých Base objektů implementovat metodu, která vrátí Deep copy objektu v nové instanci. Tedy, že v paměti vzniknou dva různé avšak identické objekty.Pod tlakem událostí jsem to řešil né příliš efektivní cestou o to tím, že jsem metodu implementoval až na úrovni zděděných objektů, přičemž jsem ovšem porušil pravidlo viditelnosti Base objektů a zpřístupnil jsem některé privátní proměnné jako protected tak aby šli nastavit. Spokojený s tím moc nejsem, takže se mi snad podaří prosadit změnu ve smyslu implementace na úrovni Base objektů a navrácení viditelnosti změněných vlastností.Na toto téma jsem trochu googloval a našel jsem velmi vydařený článek, který obsahuje i praktické příklady.[Update]Tak jsem si vyzkoušel jak to funguje a nakonec jsem použil verzi s metodou MemberwiseClone(). Tady se můžete podívat na zdrojáky:
CLone.zip ( 76.29k )
Počet stažení: 12
Velmi rád čtu blog Johna Vanhara. Jméno zní dost agnlicky, ale jde o našince, který žije dlouhodobě v US. Pan Vanhara zde píše o svých zkušenostech s podnikáním v US a jde o velmi poutavé a inspirující čtení. Velmi mě zaujal jeden z jeho posledních článků. Řeč je o placení daní.Nejvíce mě zaujal tento odstavec, dovolím si citovat: "Kdyby každý vložil stejné usilí do rozvoje svých podnikání, tak garantuji, že vydělá více než přemýšlením jak ušetřit na daních.". Parafrází je další vyřčená myšlenka z blogu Miroslava Macka, bohužel jsem nenašel originální text, ale dovolím si vyjádřit podstatu myšlenky: "Je lepší přemýšlet nad tím jak vydělat než kde ušetrit."
Na světě jsou lidi, kteří mají dar. Rudolf Havlík je jedním z nich. Každý nový článek na jeho blogu je jak záblesk z čistého nebe. Prostě Vás dostane. Mě alespoň jo.
Pokud se alespoň trochu zajímáte o věci jako je Dependency Injection, Model-View-Presenter nebo SCSF doporučuji se ponořit do série článků od Jeremiho Millera. Jeho obšírné články o tom proč nepoužít CAB je velmi poučný a obsahují mnoho informací, jež pomohou pochopit jak implementovat MVC nebo MVP patterns ve vašich skvělých aplikacích.
Při použití toolbaru v MDI aplikaci je častým cílem, v tomto případě i mým, měnit sestavu jednotlivých položek toolbaru dle zobrazeného (aktivního) okna. Klasická konstrukce použitá v SCSF předpokládá využití v podstatě statického toolbaru, který je nahrán při načtení business modulu. Tj. v třídě ModuleController v metodě. Tento přístup nelze tedy použít v případě MDI. Jak tedy na to?
Přiložené soubory
100 knih, které by měl nejlepší z nejlepších programátorů mít přečtené ... uff (to bych asi nedělal nic jiného) publikoval na svém blogu Jurgen Appelo, šéf jedné holandské IT firmy. Takovýchto rádoby seznamů existuje stovky, ale tento je zajímavý způsobem, jakým byl vytvořen. Výběr byl tvořen 4 kritérii, které již mají jistou vypovídající hodnotu, viz dále:1) počet uživatelských hodnocení na Amazon2) průměrné hodnocení na Amazon, 3) Google hits4) Jolt awards
Snažím jsem se trochu vzdělávat a tak se prokousávám skrze knihu Code Complete 2nd edition. Docela mě pobavil odstavec 28.3 Managing your Manager. Speciálně tyto odstavce:"Educate your manager about the right way to do things. This is an ongoing job because managers are often promoted, transferred, or fired."Tato věta mě dovedla k závěru, že jedině já sám můžu být sám sobě tím nejlepším manažerem."Refuse to do what your manager tells you, and insist on doing your job the right way."Tohle mě docela dostalo, v podstatě tato věta vybízí k rebelii, pokud si domníváte, že váš manažer dělá špatné rozhodnutí. Alá...Hrr na ně, bij, bij slamáka do hlavy, ať lítají piliny.Rozcupuj mu černé sáčko, ukaž mu, že nejsi žádné bečko.

28. červenece 08, 12:07
megaBLOG.cz Seznam blogů
Ten, kdo je uprostřed hledání zaměstnání, případně zakázek, určitě ocení dnešní odkaz. Shivprasad Koirala z Indie sepsal pěkný článek na pokračování o programových vzorech a týkajících se otázek u přijímacího pohovoru. Článek mimo jiné obsahuje linky na otázky z dalších oblastí, např. SQL Server, Net programování, Java, atd.
Měl bych tu pro vás jednu vypečenou otázku z přijímacího pohovoru. Vyzkoušeno na vlastní kůži :-) Já jsem měl k dispozici jen tabuli, fixu a představivost, tak jestli to budete zkoušet, tak to nejdříve zkuste nanečisto bez googlování.A otázka zní: Vytvořte kód, který obrátí pořadí slov ve vstupním řetězci. Tedy něco jako toto:CODEpublic string ReverseWords(string input){
Jste programátor, hledáte novou práci a chcete poradit jak napsat ten správný životopis?Tak tady je odkaz a pár rad jak na to.

19. listopadu 08, 05:11
megaBLOG.cz Seznam blogů
GodsmackInfo: Založení kapely v podstatě inicializoval bubeník Sully Erna, kterého asi přestalo bavit po dvaceti letech bouchat jen do bicích :-) Proto oslovil Robbie Merrilla, aby mu psal texty a připojil se k vzniknuvší kapele. Kapelu doplnil kytarista Lee Richards a bubeník Tommy Stewart. V roce 1995 tak vznikla v Bostonu kapela, která zprvu hrála muziku ve stylu Alice In Chains, ale rychle přehodila výhybku a začala prosazovat svůj osobitý styl. V počátcích hráli dost po lokálních klubech, ale raketový obrat nastal, když Bostonské rádio WAAF (FM) začalo hrát jejich hit "Keep Away". Nebylo cesty zpět. jejich album se začalo prodávat po tisících. V létě 1998 podepsali smlouvu s nahrávací společností The Universal Motown/Universal Republic Group a vydali svoje debutové album Godsmack.Kapela se pak několikrát účastnila turné "Ozzfest", taktéž hráli na Woodstocku99 a účastnili se evropského turné s kapelou Limp Bizkit.Zatím posledním počinem kapely bylo vydání Greatest hits alba obsahující dvd záznam akustického představení z Las Vegas, cover písně "Good times bad times" od Led Zeppelinu a samozřejmě nejúspěšnější písní kapely.Zajímavosti:- jméno kapely lze z angličtiny přeložit jako boží plácnutí a v takovémto smyslu se o něm zmiňuje i Sully Erna, frotman kapely. Prý to byla v podstatě boží odplata za to, že si dělal srandu z člověka, který měl opar a druhý den ho měl on také. A někdo z davu řekl: "It s godsmack."- Sully Erna je příznivcem hnutí Wicca, což hodně zjednodušeně je spolek lidí, kteří věří v kouzla, přírodní síly, bohy a podobné věci. Mimoděk je také vášnivým hráčem pokeru a ještě ke všemu je stejně vysoký jako já :-).- Lee Richards opustil kapelu poté co zjistil že má šestiletou dceru o níž nevěděl. Tipy:Faceless - Re-AlignIV - SpeakAlba:- Godsmack (1998)- Awake (2000)- Faceless (2003)- IV (2006)Odkazy:- Official site of the Godsmack- Godsmack on WikiHistorie Grunge cyklu - Trapt - Thornley - Smile Empty Soul]