Transact-SQL funkce AVG() na sloupci typu INT vrací typ ... ?

by Petr Voneš 18. dubna 2012 17:50

Hádejte Laughing

LINQ extension metoda Enumerable.Average pro enumerátor hodnot typu Int32 vrací logicky typ Double. Co ovšem taková Transact-SQL funkce AVG() pro výraz typu INT ? Překvapivě opět INT místo očekávaného FLOAT ! To vede samozřejmě k neočekávaným chybám při výpočtech. Jiné Transact-SQL funkce jsou v tomto dokonce ještě nekonzistentní.

Pokud si pro unit test kódu ve kterém se pak volá tato Transact-SQL funkce AVG() vyberete zrovna hodnoty jako (5,5,1,1) kde je náhodou výsledkem celé číslo, tak se tato chyba v takovém testu ani neprojeví. Je tedy vhodné vybírat takové hodnoty, aby se otestoval i tento případ.

 

Tags: ,

Unit Testing

Vytváření inline tasků pomocí jazyka C# v MSBuild skriptech

by Petr Voneš 15. dubna 2012 23:20

Další příjemnou novinkou v MSBuild 4.0 je možnost vytvoření jednoduchého tasku přímým zápisem C# kódu do XML souboru MSBuild scriptu, aniž by se kvůli tomu musela vytvářet celá assembly. Toto bylo sice již dříve možné taskem Script z MSBuild Community Tasks, ovšem podpora ve verzi 4.0 umožňuje i předávání parametrů (včetně seznamů) do/z takového tasku.

Více v MSDN MSBuild Inline Tasks a v příkladu s předáváním parametrů Walkthrough: Creating an Inline Task odstavec Defining the RegX Task.

Chybové zprávy

Při experimentování se jistě povede vyrobit chybu v zapsaném C# kódu, tak že nejde vůbec přeložit. V takovém případě dojde k následující sekvenci chybových hlášek z MSBuildu:

error : The source file for this compilation can be found at: "...Temp\MSBUILDCodeTaskFactoryGeneratedFileab18fb75-b51d-459e-bd5c-f82fc5eebef2.txt"

error MSB3758: An error has occurred during compliation. ...Temp\jk2r21hx.0.cs(49,55) : error CS1026: ) expected

error MSB4175: The task factory "CodeTaskFactory" could not be loaded from the assembly "c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll". Object reference not set to an instance of an object.

V prvním souboru který zůstane v TEMP adresáři je vidět vygenerovaný C# kód tasku k překladu. Error MSB3758 obsahuje chybu z kompilátoru. Třetí error MSB4175 je poněkud komický, protože vyjímka Object reference not set to an instance of an object asi není přesně to, co by mělo při chybném překladu vzniknout Wink Nejedná se tedy o vyjímku ve vlastním C# kódu.

Tags: ,

MSBuild

Skype 5.9 přináší ... reklamy (které lze vypnout)

by Petr Voneš 14. dubna 2012 14:03

Právě se objevila nová verze Skype 5.9. Seznam novinek je uveden například zde.

Od verze 4 je bohužel každá další verze spíše horší. Například ve verzi 5 má seznam kontaktů zbytecně velké mezery mezi jednotlivými řádky, takže je více vyplýtváno dnes již tak vzácné vertikální rozlišení. Verze 5.9 ovšem posunula hranici opět dále, protože obsahuje otravné reklamy ve spodní části hlavního okna.

Několikrát  jsem to zavřel tlačítkem (X) vpravo nahoře a objevovalo se to stále znovu. Po kliknutí na reklamu se otevře odkaz v prohlížeči, který vede na web Skype. Od té doby to přestalo asi na čtvrt hodiny otravovat, ovšem pak znovu. Stejně tak se reklama objeví hned po příštím spustění Skype. Je otázkou, zda-li zmizí dobitím kreditu.

Opět to tedy zmenšuje plochu pro seznam kontaktů, zaplácanou již teď zbytečně velkými tlačítky Add a Contact a Group.

Uvidíme jak dále. Například otravné okno Skype Home Screen ve verzi 5.5 bylo nakonec také odstraněno. Naštěstí to nevypadá, že by ve verzi 5.8 byla nějaká bezpečnostní chyba, kvůli které by bylo nutné hned instalovat novější verzi.

 

Aktualizace: Podle komentáře lze reklamy (znovu) vypnout v nastavení Options -> Notifications -> Alerts & Messages. Změna se projeví až po restartu Skype. Vypadá to, že je třeba po instalaci verze 5.9 zkontrolovat, zda se toto nastavení znovu neaktivovalo. Děkuji za upozornění.

Tags:

Software

Adobe Flash Player 11.2 a volitelná (ne)bezpečnost

by Petr Voneš 9. dubna 2012 18:30

Navzdory obecnému nadšení ze stále neexistujícího HTML 5, které má být onou spásou pro uživatelské rozhraní tohoto století, se bohužel web stále zcela neobejde bez Adobe Flash Playeru. Jak je to ale s jeho bezpečností ?

Obecně platí, že jakýkoli software který nějakým způsobem interpretuje obsah stažený s Internetu (HTML parser, JavaScript engine, video přehrávač atd.) je potenciálně nebezpečný, především díky možných chybám typu buffer overflow. Základní zásadou by tedy měla být pravidelná, včasná a bezpečná aktualizace, která tyto chyby (donekonečna) záplatuje a samozřejmě nespouštět tyto aplikace s právy administrátora. Ponechme teď stranou, že tento druh chyb vzniká především z nepozornosti a nedůslednosti programátorů v nativním kódu. To je také důvod, proč se objevují snahy převést i klientské aplikace do řízeného (managed) kódu.

Statistika ze serveru Secunia

Podíváme-li se na statistiky bezpečnostních chyb Adobe Flash Playeru na serveru Secunia, zjistíme že ve verzi 10 bylo celkem 194 bezpečnostních chyb, ve verzi 11 je jich zatím "jen" 24. Rozložení závažnosti je vidět na tomto grafu. Je až neuvěřitelné, že v tak relativně jednoduchém software je možné nadělat takové množství závažných bezpečnostních chyb.

Automatické aktualizace

Veškerý software obsahuje chyby. Nicméně různí výrobci mají různou strategii jak upozornit na novou aktualizaci a jak ji nainstalovat. Microsoft používá svůj Windows Update, kde si lze nastavit jakým způsobem se bude na aktualizace upozorňovat a jak se budou instalovat. Někteří jiní jdou podstatně vlezlejší cestou, která prakticky znemožňuje kontrolu nad aktualizacemi a vzniká tak paradoxně situace, kdy vlastní způsob aktualizace muže být potenciálně nebezpečnější, než jim opravované chyby. Odstrašujícím příkladem budiž Google a jeho "slavný" Google Updater který si ovšem oni sami ještě chválí.

Instalace Adobe Flash Player 11.2

Nová verze Adobe Flash Playeru 11.2 se při instalaci ptá, zda-li chcete používat nové automatické aktualizace nebo si toto budete coby pokročilý uživatel hlídat sami.

Pokud zvolíme Never check for updates, což přirozeně není doporučeno, očekáváme že se nám do počítače nenainstaluje nic, co by nekontrolovatelně cosi dělalo. Typicky jde o nějaký process spuštěný ještě ke všemu s vysokými právy.

Po instalaci to ještě zkontrolujeme v Control Panelu, a opravdu:

Protože se ale vyplatí být nedůvěřivý, podívejme se co se nám opravdu nainstalovalo.

Nejdříve si prohlédneme Windows Services a co nevidíme ...

Nainstalovala se Windows Service Adobe Flash Player Update Service běžící pod účtem Local System. Jediné plus je, že není automaticky spouštěna.

To ovšem není vše, co takový Task Scheduler ?

Zde vidíme další způsob, kterým se nepozorovaně spouští automatická aktualizace, opět pod systémovým účtem:

Závěr

Je samozřejmě na každém, jaký způsob automatických aktualizací si zvolí. Pro běžného uživatele, kterému je obvykle jedno co se mu v počítači děje a chce "ať to hlavně nějak funguje" je výchozí doporučené nastavení v pořádku. Zvláště když je většinou stejně přihlášem pod účtem s právy administrátora (nebo deaktivovaným UAC), což již z principu jakoukoli bezpečnost vylučuje.

Pokud ovšem na tento až příliš automatický postup za cenu malé kontroly nad ním nechceme přistoupit, je třeba po každé instalaci znovu kontrolovat, jakým důmyslným způsobem se nám výrobce software snaží "usnadnit" život. Když k tomu přičteme velké množství chyb ve vlastním Flash Playeru, jak na tom asi bude tato aktualizační aplikace ? Raději nevědet Smile

Tags: ,

Software