Weblog

.NET 2.0: Nulové základné dátové typy

Niekedy je výhodné mať v základnom dátovom type ako int, float, double, DateTime a pod. uloženú hodnotu null. Všetko sú to hodnotové typy, čiže musia byť vždy inicializované na určitú hodnotu.

Problém nastáva pri práci s databázami, ktoré pri týchto dátových typoch umožňujú použitie hodnoty NULL, v .NETe reprezentovanej ako trieda DBNull.

Často sa teda do týchto štruktúr ukladali hodnoty, ktoré boli mimo rozsahu definovaného architektúrov programu (napr. máme tabuľku produktov, v ktorej sú produkty bez uvedenej ceny. Stĺpec je dátového typu money alebo decimal a umožňuje mať aj nulové hodnoty. Pri načítaní dát z DB treba kontrolovať, či hodnota nie je typu DBNull a ak je, vložiť do premennej hodnotu -1M, pretože zápornú cenu produkt nemôže mať.)

.NET 2.0 obsahuje novú triedu System.Nullable, ktorá umožňuje uchovať v hodnotových typoch aj hodnotu null. Je teda lepšie rozpoznateľné, či je hodnota nezadaná, alebo zadaná hodnota je z povoleného rozsahu, alebo nie. Jazyk C# obsahuje nový operátor ?? pre prácu s triedou Nullable<T> a umožňuje skrátený zápis pre nulový hodnotový typ.

Nulový hodnotový typ sa definuje napísaním ? za názov hodnotvého typu.

int? x;

Tento zápis je ekvivalentný zápisu

Nullable<int> x;

Na zistenie, či premenná obsahuje nejakú hodnotu, je možné použiť vlastnosť Nullable<T>.Has­Value alebo pri priraďovaní operátor ??.

Do hodnotového typu je operátorom ?? vložená hodnota nulového hodnotového typu ak je v ňom priradená nejaká hodnota. Ak je hodnota nulová, do hodnotového typu sa vloží hodnota na pravej strane operandu ??.

Taktiež je možné zavolať metódu Nullable<T>.Get­ValueOrDefault().

int? x = null;

// prvá možnosť – určenie vlastnej hodnoty v prípade „null“
int j = x ?? 0;
// druhá možnosť
int k = x.GetValueOrDe­fault(); // k = 0
// tretia možnosť
int j = 0;
int? x = null;
if (x.HasValue)
j = x.Value;

Poznámka: DBNull trieda existuje v pamäti vždy len jedna a to jej inštancia DBNull.Value. DBNull sa nikdy nerovná žiadnemu inému dátovému typu.

PS: Dnes to bolo bohužiaľ bez praktickej ukážky.

.NET 2.0: Prázdny alebo nulový reťazec

Zistiť, či je text nulový (null) alebo prázdny (String.Empty, "") je častou zálažitosťou v programoch. Veľmi dobrá novinka v .NET 2.0 je statická metóda String.IsNullO­rEmpty(string). Táto metóda je oveľa prehľadnejšia a efektívnejšia, ako text == null || text == "". Dokonca je rýchlejšia, ako častý trik text.Length == 0. Totiž porovnanie text == "" je veľmi pomalé.

Pri testoch nie je String.IsNullO­rEmpty() rýchlejší, ako text.Length == 0, ale často sa zabúda na skontrolovanie, či je text nulový a po pridaní podmieny text == null je String.IsNullO­rEmpty() tým najrýchlejším zistením, či je text prázdny.

Využitie nájde napr. v triedach, ktoré načítavajú konfiguráciu. Trieda má v sebe napevno nakódované defaultné hodnoty nastavení, potom načíta zmenené hodnoty z konfiguračného súboru alebo databázy a zmení ich. Ak sa nové nastavenia načítavajú do nejakého poľa, napr. HashTable alebo niečoho podobného, tak kontrola, či nastavenie v HashTable má nejakú hodnotu je pomocou String.IsNullO­rEmpty veľmi efektívna.

string dataDir = „/App_Data“;

HashTable customSettings = LoadSettings();

if (!String.IsNu­llOrEmpty(cus­tomSettings[„da­taDir“]))
   dataDir = customSettings[„da­taDir“].ToStrin­g();

Nekupujte PC Secure od ST!

Pozeral som si balíček od Slovak Telecom, ktorý by mal ochrániť Váš počítač pred vírusmi, červami a hackermi a keď som zbadal cenu, za akú to ponúkajú, tak som bol veľmi zhrozený (ako pri ostatných službách od ST). Balíček stojí 99,– Sk mesačne bez dane! Za nižšiu cenu (cca 95,– Sk s DPH) môžete mať neprekonateľný antivírusový systém NOD32, ktorý vás ochráni nie len pred vírusmi, ale aj spyware alebo rootkitmi. K tomu ešte vynikajúci osobný firewall Kerio Personal Firewall, ktorý je zdarma a máte rádovo lepšie zabezpečený počítač ako s balíčkom „PC Secure“.

NOD32 a Kerio PF sa nedajú porovnávať s programami Panda, ktoré sú dodávané v balíčku PC Secure. A ešte k tomu sú dostupné v slovenčine alebo češtine, čo obyčajný užívateľ určite ocení viac, ako angličtinu. A skúsený užívateľ ich už používa ;-)

Ak však používate dial-upové pripojenie, tak určite si nainštalujte bezplatný program proti tzv. dialerom – AntiDialer, ktorý ST ponúka. Predídete tak až niekoľko desaťtisícovým účtom za surfovanie na internete, ak by sa vám takýto program dostal do PC.

.NET 2.0: Rýchlejšie parsovanie čísel

Veľmi častou úlohou pri programovaní je previesť text na číslo alebo dátum. Najčastejšie pri spracovaní vstupu od užívateľa, alebo spracovaní vystupných dát, ktoré nie sú „strongly typed“ (teda nenesú informácie o dátových typoch).

V .NET 1.0 a 1.1 sa používala načastejšie trieda Convert, ktorá obsahuje statické metódy pre konverziu medzi jednoduchými dátovými typmi (čísla, dátumy, logické hodnoty).

Problém nastáva v zložitom manažmente týchto konverzií. Ak sa totiž argument nedá previesť na daný dátový typ, tak vyhodia výnimku. Tzn. že celý blok kódu treba obaliť do try{} catch{}, ktoré zbytočne znižujú výkonnosť programu.

.NET 2.0 prináša nový prístup ku konverzii základných dátových typov. Je oveľa pohodlnejší a vyžaduje menej systémových prostriedkov. Stará koncepcia je totiž zlá – výnimky by sa mali používať naozaj vo výnimočnom prípade. Ak však užívateľ zadáva vo WinForm aplikácii do TextBoxu číslo a zadá ho zle, tak sa dosť časť nejde o výnimočný prípad ;-).

Preto existuje v .NET 2.0 v každom základnom dátovom type metóda TryParse(). Ako názov napovedá, metóda sa pokúsi spracovať zadaný vstup. Ak sa jej to podarí, vráti true, v opačnom prípade false. Čo však s konvertovanou hodnotou? Metóda má len návrtovú hodnotu bool… Použiť na vstupný text jednu z metód z Convert v bloku if() po úspešnom spracovaní textu metódou TryParse() by bolo jedno z riešení. Je vša neefektívne, pretože dochádza k dvojnásobnému spracovaniu vstupných dát.

Metóda TryParse() má parameter výstupný (out). Ide o premennú, do ktorej bude uložená skonvertovaná hodnota, ak bude konverzia úspešná. Toľko teória a teraz jeden jasný príklad:

int vek;
string input;

Console.Write(„Za­dajte Váš vek: ");

input = Console.ReadLine();

if (Int32.TryPar­se(input, out vek))
{
// správne zadané číslo, od dnešného datáumu odpočítame roky
DateTime rokNarodenia = DateTime.Toda­y.AddYears(-vek);

Console.Write­Line(“Narodili ste sa v roku {0}.„,
rokNarodenia.Year
);
}
else
{
Console.Write­Line(“Prosím, zadajte číslo.");
 }

Zdrojový kód programu: TryParse.cs.

Ukážku je možné vylepšiť o pridanie parametru NumberStyles.No­ne, ktorý neumožňí spracovaniezá­porného čísla. TryParse() by vyzeral takto:

Int32.TryParse(
    input,
    System.Globali­zation.Number­Styles.None,
    System.Globali­zation.Culture­Info.CurrentCul­ture.NumberFor­mat,
    out vek)

Paramater CurrentCulture­.NumberFormat podľa aktuálneho jazyka poskytne metóde informácie o kladnom, zápornom alebo desatinnom znamienku v číslach v aktuálnom jazyku (a aj ostatné dôležité informácie o číslach).

Bulvár horší ako na Bleskovky.cz

Na našom veľkom informačnom portáli, kde nájdete všetko o počítačoch a internete, Živě.sk, nájdete v spolednej dobe už len všetok bulvár o počítačoch.

Článok Nový font vo Windows Vista či Office 12 zrejme nie je až taký nový hovorí o podobnosti nového písma Segoe UI z Windows Vista s písmom Frutiger. To, že Segoe UI je licencované písmo typu Monotype. Čo je však podstatné: Segoe UI je optimalizovaný pre ClearType (zobrazovanie na LCD) a obsahuje vyše 2200 znakov. tieto podstatné „drobnosti“ Živě.sk, ako správny bulvár, neuvádza. Hlavne, že vydal v ten deň nejaký článok.

Zaujímavá je aj psychologická sonda v komentároch: to, že Microsoft písmo licencoval a upravil, sa samozrejme nepáči lenivým slovákom. Tí (nielen zo Živě.sk) samozrejme na jednej strane Microsoft obviňujú z plagiátorstva. Na strane druhej nemajú problém napísať:

co keby som zacal podnikat tymto sposobom aj ja? novy winblows vista nazvem doors rasta, pridam zopar zvuciek kapely doors, zopar grafickych tem v zlto zeleno cervenej a poviem ze som to neukradol ale vylepsil. kto ide do toho so mnou?

Lenivému slovákovi vôbec nerobí problém ukradnúť cudzí softvér a cudziu muziku. Možno paradoxne aj tento „podnikateľský nápad“ je realizovateľný. Problém je v tom, že by sa lenivému slovákovi nepáčil, pretože by musel zaplatiť licenciu za Windows a licenciu za hudbu od Doors a farby by si doupravoval. Plno výrobcov notebookov dodáva Windows s témou, ktorá je zmenená, aby zodpovedala ich obchodnej značke. A robia to plne legálne.

Ďalší článok Nebezpečné WMF obrázky: eliminujeme riziká nezaplátanej chyby vo Windows je úžasný PR článok pre Živě.sk – informuje neskúsených užívateľov v dostatočnej miere, uvedie odkazy na relevatné zdroje a keďže ide o bezpečnostnú chybu, v dostatočnej miere nakydá na Microsoft.

Áno, uvedená chyba je nebezpečná. Problém je v podaných informáciách: podľa samotného zdroja – F-Secure Blog – chyba bola objavená 28.12. 2005. To je včera! Napriek tomu si Filip Hanker dovolí 29.12. 2005 napísať vetu:

Microsoft na spomínanú chybu do dnešného dňa nevydal žiadnu záplatu.

Informácie o bezpečnostnej chybe 28.12. 2005 uverejnil F-Secure Blog, Secunia a vyšiel aj článok s popisom a postupom pre elimináciu chyby  na Microsoft Technet. Aby článok vyzeral fundovane a hackersky, tak ako zdroj opravy uvedieme „bezpečnostné fórum Full-disclosure“. Samozrejme že sa jedná o postup uvedený v oficiálnom článku na Microsoft Technet – Vulnerability in Graphics Rendering Engine Could Allow Remote Code Execution. A pre istotu na záver článku, aby sme nevyzerali, že iba kopírujeme informácie z ostatných serverov, uvedieme vetu:

Pre pokročilých užívateľov dodávame, že sme sa pokúšali docieliť pomocou rôznych editácií systémového registra aj to, aby Internet Explorer neotváral WMF súbory (MIME typ image/x-wmf) automaticky. Dospeli sme k záveru, že takáto možnosť takmer iste neexistuje.

(Samozrejme, že veľmi často existujú červy, ktoré zneužívajú chybu, dlhú dobu pred jej objavením. Ale kým nie je objavená, nie je čo opravovať.) 

Obidva uvedené články sú o Microsoft-e a nikdy som sa netajil sympatiami k Microsoft-u. Nejde však o bezhlavé obhajovanie Microsoft-u. Vôbec nie som nadšený, že existuje takáto chyba, ale určite nejde o jediné neprofesionálne články s nepresnými informáciami na Živě.sk. Ostatné články na Živě.sk nesledujem.

LCD za web – ako to dopadlo

Súťaž usporiadaná Microsoft-om LCD za web, v ktorej súťaziaci mali pomocou nových, free verzií nástrojov pre vývoj v ASP.NET 2.0 vytvoriť webovú stránku, alebo komponentu v tomto prostredí.

Aj táto súťaž má svoju čiernu ovcu. Stránka look.aspweb.cz obsahuje 4 galérie vygenerované programom Zoner Photo Studio 7. Stránka obsahuje 3 (určite statické) ASP.NET stránky.

Ostatných 9 súťažiacich si za svoje weby LCD zaslúžia. Ja som skončil na 25. mieste.

Vyhľadávame doma rýchlo a pohodlne

Google Desktop logo

Najlepší webový vyhľadávač Google vydal konečne po dlhom čase 2. verziu svojho programu pre vyhľadávanie na vlastnom počítači, ktorá je kompatibilná s antivírusom NOD 32 v2.

Google Desktop predstavuje najrýchlejšie a najpresnejšie vyhľadávanie obsahu vo vašom PC. Okrem indexovania súborov na disku, e-mailových správ z klientov Outlook a Outlook Express, dokumentov Word, Excel, PDF a iných, podporuje GD pomocou plug-inov aj indexovanie správ v Mirande a iných typov dokumentov.

Vďaka instatnému vyhľadávaniu sa vám zobrazia výsledky už po napísaní prvých pár písmen hľadaného výrazu.

Zaujímavé fíčury (features):

  • Po chvíli indexovania (60 000 IM správ) sa objaví nový odkaz vedľa vyhľadávacieho boxu: Browse Timeline. Slúži na zobrazenie índexovaných položiek podľa dátumu.
  • Integrácia: všetko je na jednom mieste: vyhľadávanie na disku, mailov v Gmail-i, správ z IM Miranda, webová história a tzv. WebClips (Atom zdroje).
  • Konverzácie aj v Outlook-u a IM správach: GD dokáže zistiť, ktoré e-mailové správy spolu súvisia a dokáže ich zobraziť ako konverzáciu podobne, ako to robí Gmail. Aj IM správy zoskupuje do konverzácií – za 2 konverzácie sa považujú správy napísané s rozdielom viac ako 5 minút.

Čo mi chýba: Integrácia s Google Personal Homepage, zobrazovanie dátumov v slovenskom formáte a slovenská lokalizácia.

Užitočné plug-iny:


Ako to dopadlo s logickými systémami?

Aktualizácia: e-mail z ŠP.

Ahoj Jozef
stretli sme sa doc. Galanovou. Predniesli sme jej nase vyhrady k jej postupu a ona nam trochu objasnila situaciu.

Teda mate 3 zapoctove pisomky z ktorych mozete mat max. 40bodov na ziskanie zapoctu a k pripusteniu ku skuske musite mat min 20. Ta 4 pisomka bude za 10bodov a rata sa ako cast skusky. Prezentovala nam to ako vyhodou pre vas s cim by som ciastocne suhlasil, lebo nakolko v poslednych dvoch tyzdnoch semestra bude preberat technicku realizaciu logickych obvodov a vlastne hned nato budete mat s toho tu pisomku s tym ze sa tato tema uz neobjavi na skuske.

Z tejto pisomky budete musiet ziskat nejaky minimalny pocet bodov, ako z ostatnych casti uciva, ktore budete mat na skuske. S tym ze este nevie aka ta minimalna hranica bude. Tu viac menej urci podla toho aby priepustnost predmetu bola dostatocne vysoka (toto nepovedala ona to je moja skusenost:)

Zatial tolko, dufam ze to bude pre vas trochu ukludnujuci element a podari sa vam uspesne skusku absolvovat. Poprosim ta potom ak by si nam mohol priebezne poskytnut nejake postrehy tykajuce sa tohto predmetu, ktore sa objavia… Dakujem S pozdravom

--
Karol Krasnan

predseda Studentskej Komory AS FEI STU
clen Studentskeho Parlamentu FEI STU
Ilkovicova 3
812 19 Bratislava
karol.krasnan@fei.sk

Počas školského roku študent zažije veľa zaujímavých vecí. A zažitie tiež plno zmien, ktoré sa mu nemusia páčiť. Hlavne keď sa zmeny týkajú zmeny hodnotenia žiakov. Na výške to funguje totiž tak, že katedra pred začatím výučby uverejní podmienky pre hodnotenie žiakov. Čiže pred semestrom každý žiak vie, čo musí splniť, aby prešiel daným predmetom. Za tieto podmienky zodpovedá vedúci katedry. A potom ešte vyučujúci na prvej hodine povie nejaké bližšie detaily, tieto však tiež musia byť uverejnené.

U nás KMAT uverejnila podmienky a aj keď to bolo dosť neprehľadné, pretože to uverejnila na svojích webových stránkach, kde sú staré i nové informácie, tieto podmienky nám oznámila aj doc. Galanová na prvej hodine LS.

Pred približne mesiacom si však niekto zmyslel, že si ich pomení. Pani docentkou nám bolo oznámené, že jednu písomku budeme musieť napísať aspoň na 50%. To znamenalo získať aspoň 5 bodov z 10. V podmienkach sa však nič také nepísalo. Začal som si teda zisťovať, ako to je s podmienkami, našiel som si študijný poriadok a preštudoval ho. Samozrejme nič podobné nedovoľuje!

Medzi tým prišla ďalšia hodina LS a ďalšia zmena podmienok: údajne sa neučíme a teda budeme musieť mať aspoň polovicu teoretických otázok na skúške správne, aby sme prešli. Ďalšia vec, ktorá sa v podmienkach zo začiatku roka nespomínala. Je totiž možné na písomkách získať napr. 32 bodov, do minimálnych 56 teda chýba 24, čo je približne tretina zo 60 bodov zo skúšky. Takže ak by niekto, kto tomu rozumie a nie je len nabiflený, spravil príklady na dosť veľký počet bodov a nejaké by možno získal z teórie, stačí mu to a predmetom prejde. Niekomu sa však zrejme takáto „ľahká“ podmienka nepáči(la)…

Rozhodol som sa teda kontaktovať Študentský parlament, a zistiť si, čo a ako. Bol som na schôdzi parlamentu a bolo mi prisľúbené, že sa pôjdu spýtať doc. Galanovej, ako je to s podmienkami. Dozvedel som sa tu aj to, že každá paralelka v ročníku musí mať rovnaké študijné podmienky. Ako som si zistil v iných zameraniach, nemali (by) sme ich.

Na dnešnej hodine nám doc. Galanová zase oznámila, že na udelenie zápočtu stačí pôvodných 20 bodov. (Teda polovica z možných bodov na písomkách. Ako to je uvedené v podmienkach určených na začiatku semestra.)

Samozrejme toto nám bolo povedané tak, že plno nezainteresovaných ľudí (do tohto) teraz vôbec netuší, že tie podmienky povedané predtým neplatia. Toto už pani docentka samozrejme nepovedala. Iný ako arogantný prístup k študentom som však nečakal.

Ešte mi zo ŠP nenapísali, ako to celé vlastne bolo a dopadlo, zrejme sa však už s našou vyučujúcou stretli a bolo to na niečo dobré.

Preto ak sa vám niečo nezdá, ak máte pocit, že škola koná proti Študijnému poriadku a podobne, kotaktujte svoj Študentský parlament.