Jozef Izso

Problém s WMI query v čistej inštalácii Windows 7 SP1

11. October 2011

Inštaloval som Windows Server 2008 R2 SP1 na nový server a hneď po inštalácii som kontroloval, či je server v dobrom stave a či Event Log neobsahuje nejaké zaznamenané chyby. V logu Application sa nachádzalo niekoľko chýb z WMI s Event ID 10. V popise bola nejaká WMI query, ktorú sa nepodarilo vykonať. Podobná hláška mi bola známa aj z Windows Vista, či Windows 7 ale tam som tomu nevenoval veľkú pozornosť.

Event filter with query "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA "Win32_Processor" AND TargetInstance.LoadPercentage > 99" could not be reactivated in namespace "//./root/CIMV2" because of error 0x80041003. Events cannot be delivered through this filter until the problem is corrected.

Rýchle googlenie ma priviedlo k článku KB 2545227 ktorý popisuje túto chybu. Pri tvorbe obrazu inštalačných DVD pre Windows 7 SP1 a Windows Server 2008 R2 SP1 sa táto WMI query dostala omylom do systému a je možné ju zmazať. Podobný problém sa nachádza aj vo Windows Vista SP1 a Windows Server 2008 SP1 a je popísaný v článku KB 950375. Problém môžete odstrániť pomocou skriptu priloženého v spomínaných článkoch, alebo vo Windows 7 respektívne Windows Server 2008 R2 môžete spustiť FixIt opravu, ktorá automaticky opraví systém.

Táto chyba s WMI query nie je nijako škodlivá a iba zbytočne zapĺňa Event Log chybovými hláškami. Bohužiaľ ju však treba odstraňovať na každom novom nainštalovanom Windows systéme, pokiaľ chcete mať pekný Event Log. :)

Znovupoužiteľné .NET knižnice pomocou Portable Library Tools

28. June 2011

Portable Library Tools sú nástroje pre Visual Studio, ktoré umožňujú vytvoriť jednu .NET knižnicu ktorá bude podporovať viacero platforiem: .NET 4 Framework, Silverlight 4, Windows Phone 7 a XNA hry. Doteraz bolo potrebné mať jeden spoločný projekt so zdrojovými súbormi a pre každú cieľovú platformu vytvoriť zvlášť projekt a do neho pomocou linkovania pridať zdrojáky zo zdieľaného projektu. Takto bolo možné vyriešiť portovanie zdieľaného kódu existujúcej Silverlight 4 aplikácie do Phone 7 aplikácie. Lenže toto riešenie má veľké problémy so spravovaním súborov – všetky súbory trebalo ručne synchronizovať, jeden súbor sa dá vo Visual Studio otvoriť iba jeden krát, ďalší pokus o otvorenie skončí chybovou hláškou, ktorú treba odklikávať a tak podobne. Hľadanie správnych API, ktoré fungujú na všetkých potrebných platformách, tiež nebolo jednoduché. Veľmi ľahko sa programátor mohol odviazať a použiť niečo, čo zrazu v inom projekte spôsobilo kompilačnú chybu, alebo závislosť na inej DLLke (niektoré triedy z .NET 4 sú v Silverlighte 4 v inej fyzickej DLL a tak istom na Phone 7 sa nachádzajú v inej DLL). Portable Library Tools tak prinášajú obrovské zjednodušenie písania knižnice, ktorú plánujeme použiť v aplikáciách pre rôzne platformy.

Pri vývoji Windows Phone 7 aplikácie, ktorá bude používať FogBugz API, som najprv mal vytvorený Phone 7 projekt, do ktorého som prepisoval moju existujúcu implementáciu klienta pre FogBugz API. Tento klient bol obrovský, napísaný cez WCF a so synchrónnymi volaniami. Pre Phone 7 bolo potrebné kompletne prepísať veľkú čast kódu, pretože tak ako Silverlight, aj Phone 7 API obsahuje iba asynchrónne volania pri prácii s I/O a sieťou. Mohol som sa zároveň zbaviť závislosti na WCF a kód poriadne zoštíhliť. Keď som mal Phone 7 knižnicu hotovú, tak vyšla finálna verzia Portable Library Tools nástrojov a rozhodol som sa, že projekt zmením tak, aby som ho v budúcnosti mohol použiť kdekoľvek. To so sebou prinieslo niekoľko zmien v kóde, ktoré nie sú na prvý pohľad jasné a vyžadovali si trochu googlenia.

Boolean.ToString()

Jedna pomocná metóda používala volanie Boolean.ToString(CultureInfo.InvariantCulture);, ktoré nie je v PLT podporované. InvariantCulture som použil z „best-practices“ dôvodov. Boolean hodnotu som formátoval do query stringu a POST dát, takže som použil InvariantCulture, ktorá zabezpečí, že primitívny dátový typ bude naformátovaný do takéto textového formátu, ktorý bude bez problémov spracovateľný inou aplikáciou. PTL však podporuje iba Boolean.ToString() metódu. Podľa dokumentácie pre Boolean preťaženie metódy, ktoré som ja volal, úplne ignoruje parameter IFormatProvider a teda je jednoduché opraviť volanie na jednoduché ToString() bez zmeny chovania kódu.

PS: Pôvodná idea za použitím CultureInfo.In­variantCulture bola, aby som vždy dostal iba „true“ alebo „false“ stringy. Lokalizované .NETy dokážu vracať texty ako „Pravda“ a „Nepravda“. A samozrejme FogBugz server nedokáže spracovať takýto lokalizovaný text. Nemám však momentálne dôkaz, že Boolean.ToString() naozaj vráti lokalizovaný text v niektorých špeciálnych prípadoch a MSDN dokumentácia v iných jazykoch hovorí o „true“ a „false“ stringoch. Predpokladám teda, že o tento potencionálny bug sa vôbec nemusím starať, lebo neexistuje :)

Uri.EscapeUriS­tring(string) a Uri.EscapeDataS­tring(string)

Ako webový vývojár som zvyknutý používať triedu HttpUtility na zakódovanie textu do správne formátu, ak má byť text súčasťou URL adresy, HTML obsahu alebo atribútu. Táto trieda je však z knižnice System.Web.dll ktorá je dosť veľká a nie je vhodná ani pre desktopové aplikácie, a už vôbec nie pre Silverlight či Windows Phone. HttpUtility trieda je v týchto dvoch platformách ale prítomná v System.Window­s.Browser.dll knižnici. V Portable Library Tools ju však nenájdeme a potrebujeme náhradu. Existujú však nové metódy v triede Uri, ktoré boli pridané v .NET 3.5 SP1, ktoré rátajú s tým, že vývojári často pracujú s HTTP protokolom aj mimo webových aplikácií. Máme teda k dispozícii dve nové metódy: Uri.EscapeUriString(string) a Uri.EscapeDataString(string) ktoré sú súčasťou základnej systémovej knižnice a umožnia nám správne kódovať URL/URI adresy, query stringy a POST dáta.

Uri.EscapeUriString(string) metóda slúži pre prácu so stringami, ktoré budú súčasťou URL/URI adresy – napr. cesta k súboru na serveri a query string dáta.

-    fullServiceUrl.Query = "cmd=" + HttpUtility.UrlEncode(command);
+    fullServiceUrl.Query = "cmd=" + Uri.EscapeUriString(command);

Uri.EscapeDataString(string) metóda zase zakóduje správne stringy, ktoré budú súčasťou POST údajov.

StreamWriter writer = new StreamWriter(webRequest.EndGetRequestStream(asyncResult);
-    string name = HttpUtility.UrlEncode(param.Key);
-    string value = HttpUtility.UrlEncode(param.Value);
+    string name = Uri.EscapeDataString(param.Key);
+    string value = Uri.EscapeDataString(param.Value);
writer.Write(name + "="+ value + "&");

Synchronizati­onContext

Všetky API pre prácu s I/O sú v Silverlighte a na Windows Phone výhradne asynchrónne. Treba si preto uvedomiť, že kód aplikácia si vyžiada údaje zo serveru a tieto údaje dojdú späť asynchrónne – v inom threade. Ak teda používateľ klikne na tlačidlo „Načítaj údaje so serveru“ a handler metóda zavolá WebClient.Dow­nloadStringAsyn­c(), tak metóda okmažite skončí a grafické rozhranie aplikácie nezamrzne, lebo nečaká, kým sa stiahnu údaje zo serveru. Namiesto toho treba počkať, kým sa nezavolá ďalší handler, ktorý už dostane stiahnuté údaje. Toto sa však deje v samostatnom vlastné, ktorý je iný od UI vlákna. Načítané údaje teda môžu byť spracované a grafické rozhranie aplikácie stále nemusí byť blokované. Až po spracovaní môžeme aktualizovať UI – napr. zobraziť stiahnutý text. Toto však nemôžeme urobiť kedykoľvek. UI sa vykresluje vo svojom vlastnom vlákne a preto musíme vyslať požiadavku o zmenu UI pomocou triedy Dispatcher. Dispatcher je špeciálna trieda, ktorá vie, ako sa vykresľujú WPF, Silverlight a Phone 7 aplikácie a nie je dostupná v Portable Library Tools. Pretože PLT knižnica môže bežať v rôznych prostrediach, treba použiť namiesto špeciálneho Dispatcheru všeobecnú triedu, ktorá zabezpečí správnu synchronizáciu kódu, ktorý potrebujeme vykonať. Takouto triedou je SynchronizationContext s dvoma metódami: Post() a Send(). Ide o asynchrónny a synchrónny variant spustenia kódu v správnom vlákne, ktoré môže upravovať aj grafické rozhranie. PLT knižnica získa aktuálny synchronizačný kontext pomocou vlastnosti SynchronizationContext.Current a podľa toho, či je aplikácia napísaná pre Win Forms, WPF, Silverlight či Phone 7, tak sa použije správny synchronizačný kontext na vykonanie kódu.

Portable Library Tools sú zaujímavá vec, pokiaľ potrebujete vyvinúť aplikáciu pre rôzne .NET platformy a použiť v nich spoločný zdieľaný kód. Samozrejme treba mať namysli, že PLT sprístupnia v projekte iba tie API, ktoré sú dostupné na všetkých platformách, pre ktoré je knižnica vytvárané a z počiatku to môže byť dosť obmedzujúce. Mnohé veci sa však dajú napísať v .NETe veľmi univerzálne, avšak treba použiť správnu sadu API. Toto bol hlavne prípad odstránenia HttpUtility, na ktorú som ako webový vývojár veľmi zvyknutý. .NET sa vyvíja a niekedy je ťažké udržať krok so všetkými novými a lepšími API. Na druhej strane táto evolúcia .NETu so sebou prináša aj duplicitu API a treba sa vedieť správne zorientovať, ktoré triedy a metódy použiť v danom projekte.

Phishing z neoficiálneho obchodného registra Firmdata

25. June 2011

Pár dní po založení živnosti mi došiel list označený ako Register obchodu a živnosti z Kopčianskej 15. Vyzeralo to skoro ako niečo úradné, so známkou pána prezidenta, na čo som si povedal, že štátne inštitúcie asi nepoužívajú paušálne platby za listy, ale pekne lepia známky. Po otvorení na mňa vyskočil 59? šek od firmy FIRMDATA. Hneď som si zanadával, že čo to má byť za skryté poplatky, veď pri zakladaní živnosti som zaplatil kolky za všetko potrebné.

Google mi však veľmi rýchlo objasnil, že sa jedná o podvodný poplatok za zápis do Registra obchodu a živnosti. Firma FIRMDATA Slovenská Republika s.r.o., a jej podobné podvodné firmy ako Informatik s.r.o., či INFODAT, prevádzkujú duplicitné, neoficiálne, nepoužiteľné a zbytočné kópie obchodných registrov a žiadajú za zápis do týchto ich kópií správne poplatky. V prípade e-mailov by sa hovorilo o phishingu, či scame, kedy firma uvádza prijímateľa do omylu.

O neserióznosti firmy FIRMDATA a jej registra hovorí samotný list, ktorý nijako nepredstavuje firmu, jej portfólio a v čom je register také „terno“, že by sa novozačínajúci podnikateľ do neho mal zaregistrovať. To že ponúkajú nejaký CD-ROM za poplatok 100? a označujú to ako databázu, podľa ktorej firmy môžu sledovať svoju konkurenciu, nebudem rozoberať, lebo je to zbytočné. Jedná sa o prázdne žvásty, ktoré majú nalákať ľudí, aby nadobudli pocit, že ich produkt má nejakú hodnotu.

Ich zavádzajúci list obsahuje len suché informácie o ponuke zápisu informácií o živnosti do Registra obchodu a živnosti, ktorý príjemca potvrdí zaplatením poplatku. Ľudia takto nadobudnú pocit, že sa jedná o poplatok, ktorý musia zaplatiť. Vzhľadom na to, že rakúsky majitelia firmy FIRMDATA majú firmy aj v iných štátoch – Rakúsku, Českej republike, Chorvátsku a Bosne a Hercegovine, predpokladám, že text listu je z právneho hľadiska korektný. Z morálneho hľadiska je to však iba trápne obohacovanie sa na základe nevedomosti a neskúsenosti iných.

Takýto list pripomína „60-eurové faktúry, ktoré SOI označila ako nekalú obchodnú praktiku“. Znovu však pripomeniem, že tieto prípady sú zrejme právne strašne odlišné, ale z hľadiska dobrých mrav úplne totožné. A záver? Treba si dávať pozor na poplatky od podivných spoločností, či už prídu klasickou poštou, alebo do e-mailovej schránky. A list buď zahodiť, alebo sa pokúsiť podať podnet na SOI.

Automatizované buildovanie softvéru

30. May 2011

V bývalej práci som sa naučil, že je výborné mať na softvérovom projekte bug tracker (používali sme, a ešte stále používam(e) FogBugz), verziovanie zdrojového kódu (Subversion alebo Mercurial Hg) a automatické buildy (CuiseControl­.NET). Mám skúsenosť s tým, že firmy používajú repozitár so zdrojovým kódom a bug tracker systém, ale málokedy majú nainštalovaný a funkčný systém, ktorý zautomatizuje kompiláciu a nasadenie aplikácie. Súvisí to aj s tým, že buildovacie systémy sa komplikovane nastavujú a treba sa o ne starať viacej, ako Subversion repozitár či bug tracker.

Pri mojich prvých automatických buildoch, ktoré som mal možnosť konfigurovať, som používal NAnt. Kolega bol expert na Ant, NAnt a ostatné veci okolo projektového manažmentu a pred niekoľkým rokmi bol NAnt jediný spôsob, ako jednoducho napísať skript, ktorý skompiluje zdrojový kód, spustí unit testy, vytvorí balíček aplikácie (ZIP so súbormi webovej aplikácie, alebo spustí nástroje pre vytvorenie inštalačného balíčku) a zarchivuje výsledný build. Toto sú základné veci, ktoré sa zídu snáď na každom projekte a v dobe .NET 1.0 a 1.1 bolo v NAnt-e potrebné skriptovať kompiláciu na úrovni jednotlivých zdrojový súborov a manuálneho volania. V prípade C# projektu to znamenalo zobrať všetky .cs súbory a použiť csc.exe kompilátor, nájsť výslednú DLL/EXE assembly a niečo s ňou spraviť. Nevýhoda tohto postupu bola, že treba všetko ručne písať a Visual Studio robilo vlastnú kompiláciu podľa projektového súboru .csproj a NAnt robil druhú podľa vlastných nastavení. Bol to však vynikajúci a silný nástroj, ako celý proces zautomatizovať.

S .NET Frameworkom 2.0 prišiel systém MSBuild, ktorý sa stal základom pre kompiláciu nielen zdrojového kódu, ale celého projektu. MSBuild spracuváva projektové súbory (.csproj, .vbproj) vo formáte XML a okrem kompilovania dokáže aj spracovať resource súbory .resx, XAML súbory, digitálne podpísať assemblies a skopírovať výsledné súbory do výstupného priečinku. MSBuild obsahuje pre každý typ projektu vlastnú sadu úloh, ktoré vedia, ako správne konkrétny typ projektu spracovať. Windows aplikácie teda dokáže správne pripraviť na Click-Once nasadenie a webové aplikácie zase zabaliť do balíčku, ktorý je možné poslať na IIS a nasadiť tak aplikáciu na web. A ani poslanie tohto balíčku nemusíte robiť ručne – MSBuild obsahuje úlohu, ktorá automaticky pošle balíček na IIS server.

Visual Studio a MSBuild sú spolu integrované a preto čo zmeníte vo Visual Studiu, to sa prejaví v projektovom súbore a MSBuild ho rovnako spracuje aj pri spustení z príkazového riadku. Vývojári teda po zmene nastavení projektu môžu zmenený projektový súbor uložiť do repozitáru a keď sa na serveri spustí automatický build, tak si môžu byť istý, že bude spustený s novými nastaveniami a nemusia pracne prekonfigurovávať a prepisovať buildovacie skripty. MSBuild je súčasťou základnej inštalácie .NET Frameworku a nie je potrebné mať nainštalované Visual Studio pre jeho použitie. Toto sa však týka použitia základných úloh dostupných v MSBuild. Po nainštalovaní si Visual Studia a Windows SDK sa do MSBuild pridajú nový typy úloh, ktoré vedia pracovať s novými funkciami potrebnými pre správne zbuildovanie projektov (napr. sa nainštalujú nástroje pre kompiláciu Entity Framework súborov). Na build serveri teda je potrebné mať nainštalované Visual Studio a Windows SDK a udržiavať ich aktuálne – podľa toho, ako to vyžadujú použité funkcie v projektoch – ale integrácia s build systémami je veľmi jednoduchá, pretože na skomplikovanie projektu stačí spustiť msbuild.exe z príkazového riadku.

Priamu podporu pre MSBuild má CruiseControl.NET a aj TeamCity a samozrejme Team Foundation Server (a určite aj ďalšie systémy, ja však poznám iba tieto).

Fólia na iPhone 4

10. December 2010

Kúpil som si pre svoju novú hračku (iPhone 4) ochrannú fóliu na displej, aby som na ňom nemal zbytočné škrabance. Na iPod touch sa mi osvedčila fólia LE cristal od be.ez. Po niekoľkých rokoch je displej v poriadku, na fólii sú len dve mierne ryhy ktoré je trochu vidieť pod uhlom. Väčšinou sú v balení dodávané 3ks fólií, nie je problém s ich výmenou po pár rokoch.

Pre iPhon4 som si objednal Belkin fóliu pre iPhone 4 z Alzy. Aby som nemal problémy na slnku, tak som zobral matnú „matte“ verziu. Za 8 EUR dostanete tri fólie, handričku a kartu na vyhladenie fólie a odstránenie vzduchových bublín. Nasadenie fólie je jednoduché, treba si len dať pozor na správne zarovanie. Belkin fólia je presne kopíruje rozmery obrazovky, takže aj malá odchýlka spôsobí že fólia bude pretŕčať cez okraj a nebude sedieť. Pri správnej orientácii však sedí perfektne. Samozrejmosťou sú miesta pre Home tlačidlo, kameru a slúchadlo.

V čom má však fólia sklamala je práve jej matné prevedenie, ktoré spôsobuje že svetlo z displeja je rozkladané a obraz je prekrytý vrstvou mikroskopických RGB bodiek, ktoré veľmi kazia dojem z Retina displeja.

Fóliu teda budem meniť za lacnejšiu normálnu verziu (cca 6 EUR) aby som mal obraz na iPhone taký, aký má byť.

iPhone 4 obraz

iPhone 4 obraz s matnou fóliou

NoSQL Is Hard (Stack Overflow Architecture)

8. August 2010

Vyberám zaujímavú časť o NoSQL databázach z článku Stack Overflow Architecture.

The biggest problem of all is that transactions can not span arbitrary boundaries. There are no ACID guarantees beyond a single record or small entity group. Once you wrap your head around what this means for the programmer it's not a pleasant prospect at all. References must be manually maintained. Relationships must be manually maintained. There are no cascading deletes that act correctly during a failure. Every copy of denormalized data must be manually tracked and updated taking into account the possibility of partial failures and externally visible inconsistency.

All this functionality must be written manually by you in your code. While flexibility to write your own code is great in an OLAP/map-reduce situation, declarative approaches still cover a lot of ground and make for much less brittle code.

What you gain is the ability to write huge quantities of data. What you lose is complacency. The programmer must be very aware at all times that they are dealing with a system where it costs a lot to perform distribute operations and failure can occur at anytime.

Rework – zabudnite na formálne vzdelanie

8. June 2010

Kniha Rework má zaujímavú kapitolu o Zabudnutí na formálne vzdelanie a väčšom spoľahnutí sa na ozajstnú prax. Na príklade ukazujú, aké zlé návyky môže človek dostať v škole:

  • The longer a document is, the more it matters.
  • Stiff, formal tone is better then being conversational.
  • Using big word is impressive.
  • You need to write a certain number of words or pages to make a points.
  • The format matters as much (or more) than the content of what you write.

To mi pripomenulo projekt na predmet Informačný systém podniku, ktorý nás učí Ing. Michal Grell, PhD., a kde je podstatná forma, nie obsah. Bohužial, je to zase jeden z tých „expertov“ z Ekonomickej univerzity… :-(

Prípad nefungujúceho Hamachi

6. June 2010

Kamoš mal problém s Hamachi na Windows 7 – po nainštalovaní nefungovala Hamachi sieť a Hamachi zobrazovalo chybu „network adapter error“. Najprv som sa pokúšal zistiť, či je správne nastavený firewall a či Hamachi nevyžaduje administrátor­ské práva.

Za normálnych okolností Hamachi nainštaluje do systému sieťový adaptér, jednu Windows službu spúšťanú s Local System právami a GUI klienta, ktorý beží s práva bežného používateľa a využíva nainštalovanú službu. Sieťový adaptér je nastavený tak, aby poskytoval routovanie na sieť 5.0.0.1/8. Zistili sme, že sieťový adaptér nebol nainštalovaný a teda Hamachi malo problémy so správnym nainštalovaním siete. Hamachi inštaluje sieťový adaptér iba počas inštalácie – nie pri reinštalovaní – a bolo potrebné ho teda najprv odinštalovať a znovu nainštalovať. Tento postup však u kamoša nepomohol.

Inštalačný log

Najprv som sa teda pokúsil získať log z inštalácie Hamachi, či tam nie je nič podozrivé.

msiexec /log hamachi.log /i hamachi.msi

...
Action 18:30:17: InstallDriver. Installing network driver
Action 18:30:18: InstallServices. Installing new services
...

Žiadna chyba, tak som sa rozhodol vyskúšať nainštalovať ovládač pre Hamachi manuálne.

Manuálna inštalácia ovládača

Cez Device Manager kamoš dal manuálne nainštalovať sieťový adaptér s Hamachi ovládačom (%PROGRAMFILE%\LogMeIn Hamachi\hamachi.inf). Táto inštalácia však skončila veľmi divnou chybou: 0×5AA ERROR_NO_SYSTEM_RE­SOURCES – Insufficient system resources exist to complete the requested service. Na prvý pohľad sa zdá, že počítač nemá dostatok zdrojov a v tomto prípade človek najprv zisťuje, či má dosť voľného miesta na disku, alebo voľnej operačnej pamäte. Problém však bol inde a skúsili sme zapnúť v msconfig.exe diagnostické spustenie systému s iba základnými službami, aby sme vylúčili problém s nejakou inou aplikáciou. Tak isto bezúspešne a s rovnakým výsledkom.

Vďaka Process Monitoru som zistil, že inštalácia ovládačov vo Windowse je podrobne zaznamenávaná do súboru %WINDIR%\inf\setupapi.dev.log. Vyžiadal som si ho teda a nasledovala podrobná analýza a porovnanie jeho obsahu voči systému, kde sa Hamachi ovládač bezproblémov nainštaloval.

.    dvi:           {DIF_INSTALLDEVICE} 23:43:46.036
     dvi:                CoInstaller 1: Enter 23:43:46.036
     cci:                     [NdisCoinst: Enter NcipHandleInstallPreProcessing]
     cci:                     NdisCoinst: NetCfgInstanceId does not exist
     cci:                     NdisCoinst: Guid of the adapter is {DEFD4A42-3C78-4F11-AAC6-D798EF311363}
     inf:                     Opened PNF: 'C:\Windows\INF\oem2.inf' ([strings])
     cci:                     NdisCoinst: IfType from registry is 1
     cci:                     NdisCoinst: IfType 1, Characteristics 0x1, IsIrdaDevice 0, PhysicalMediaType -1, MediaType -1, IsBridge 0, FoundGuidInDownlevel 0, EnableDhcp 2
     cci:                     NdisCoinst: Connection name is Local Area Connection 35
     cci:                     NdisCoinst: NetLuidIndex does not exist
!!!  cci:                     NdisCoinst: NcipAllocateNetLuidIndex failed with error 0x5aa
     cci:                     [NdisCoinst: Exit NcipHandleInstallPreProcessing]
!!!  dvi:                CoInstaller 1: failed(0x000005aa)!
!!!  dvi:                Error 1450: Insufficient system resources exist to complete the requested service.
     dvi:           {DIF_INSTALLDEVICE - exit(0x000005aa)} 23:43:46.504

Z logu bolo vidieť, že inštalátor pri vytváraní nového sieťového adaptéru volá funkciu NcipAllocateNetLuidIndex ktorá skončí chybou. Získať informácie o tejto funkcii bolo jednoduché a zložité zároveň. Našťastie o nej existuje záznam na Internete, ale použiteľné informácie sú skryté vo veľkej kope textu zmeišaného so záznamami log súboru na fóre OSR Online.

Jeffrey Tippet z Microsoftu tam opisuje ako funkcia NcipAllocateNetLuidIndex funguje.

I don't have a good guess as to what's gone wrong, but here's some background info that might help you figure it out. (This info is an implementation detail, subject to change, but may come in handy for troubleshooting):

NDIS must allocate a (locally) unique number for each network interface, the NET_LUID. The NET_LUID consists of the ifType, paired with a unique ID number. To generate that unique ID, we keep track of the IDs that have already been assigned in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NDIS\IfTypes\[ifType] ! IfUsedNetLuidIndices (REG_BINARY) for each ifType. For example, look in \6 if your NIC is Ethernet (ifType=3D=6).

In there, there is IfUsedNetLuidIn­dices, which is (IIRC) a bitmap of the unique IDs that have been assigned to other network interfaces. Make sure this value is present and not damaged (e.g., a huge number of 0×FF's). Typically, its value will be something like 0×FF 0×01, if you have 9 NICs. Note that you can't just whack this value and replace it with something else, since then NDIS will incorrectly assign the same NET_LUID to two interfaces, and all sorts of things will break when that happens.

NcipAllocateNetLuidIndex teda pre daný typ sieťového adaptéru (v prípade Hamachi to je ifType=1) potrebuje získať LUID – Local Unique Identifier, ktorého aktuálna hodnota sa nachádza v uvedenom kľúči v Registroch. Problém môže nastať, keď je hodnota IfUsedNetLuidIndices nastavená na veľmi vysoké číslo – systém potom nemôže vytvoriť ďalšie LUID a skončí chybou 0x5AA ERROR_NO_SYSTEM_RESOURCES.

Nasledovala teda analýza tohto kľúča a dopracovanie sa (našťastie a konečne) k zdroju problému:

reg query HKLM\SYSTEM\CurrentControlSet\Services\NDIS\IfTypes\1 /v IfUsedNetLuidIndices


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NDIS\IfTypes\1
    IfUsedNetLuidIndices    REG_BINARY    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Hodnota IfUsedNetLuidIndices sa z neznámich príčin poškodila a keďže kamoš nemal v počítači nejaké špeciálne sieťové adaptéry (ifType = 1 = IF_TYPE_OTHER) tak bolo bezpečné nastaviť IfUsedNetLuidIndices na 0×00. Potom však treba reštartovať počítač. Windows si totiž načítajú pomocné LUID čísla pri štarte systému a nenačítavajú ich počas inštalácie zariadenia (overené pomocou Process Monitoru :) ). Nasledovalo už len nainštalovanie Hamachi – tento raz úspešne a bez problémov.

Po približne 24 hodinách som úspešne našiel príčinu problému, opravil chybu a získal cenné skúsenosti. A aj v tomto prípade nebolo potrebné na odstránenie problému načisto inštalovať Windows – k čomu by sa asi mnohí iní uchýlili. Samotné riešenie problému však trvalo iba pár hodín, natiahlo sa však kvôli poctivej dochádzke do školy :)

Dr. Ing. Jaroslav Kultan, PhD – zážitky z cvičení z databáz

22. May 2010

Učitelia majú na svojich stránkach väčšinou len informácie o sebe, nejaké tie publikácie čo napísali a prax. Kvality učiteľa sa však z tejto stránky študenti nedozvedia.

Tento semester sme mali tú česť mať na cvikách učiteľa Ing. Jaroslava Kultána. V skratke by sa dalo poradiť ostatným študentom: dajte si na neho bacha. Robí dosť zákernosti čo sa týka termínov odovzdávania zadaní – hlavne rád nastavuje v Moodli časy na 0:00 a potom sa teší, že študenti nemohli odovzdať zadania a následne dáva prednášky o tom, čo to znamená odovzdať niečo do 0:00. Počas semestra som sa dozvedel, že na dekanáte deklaroval, že máme na vypracovávanie projektov oveľa viacej času (2 týždne) ako sme reálne mali (4 dni). Celkovo sa nakoniec situácia na cvikách dosť vyostrovala, keďže nikto z triedy nadokázal akceptovať jeho prístup k študentom, hlavne keď sme od súkromnej školy čakali profesionálnejšieho učiteľa.

Cvičenia sme mali zakončiť prezentáciou projektu, ktorý sme spravili. Posledný termín prezentovania sme dostali na stredu 12.5.2010, kam sa niektorí študenti dostavili a zistili, že žiadne prezentovanie sa nebude konať, keďže sa cvičiaci nikde neukázal. Ešte v ten týždeň v piatok to malo dohru – Kultán vynadal študentom, že v utorok 12.5. nedošli na konzultácie – a nenechal si vysvetliť, že utorok bolo 11.5. a on sám uviedol dátum ako 12.5. Proste podľa neho pochybili študenti.

Finálne prezentovanie projektov sa konalo dnes, znovu v dusnej atmosfére. Externisti čo došli, boli vyhodení, pretože nemali projekt vytlačený. I keď v Moodli nebola žiadna zmienka o tom, že ho majú doniesť vytlačený. Pekne sa tu však prejavil charakter a povaha p. Kultána – byť arogantný, hľadať chybu v iných a stále točiť dokolečka niečo o dodržiavaní termínov (i keď je to od veci, túto problematiku spomína rád). A aby som nezabudol: platí iba to, čo vyhovuje jemu. (Čo bol hlavný dôvod, prečo som presadzoval písomnú komunikáciu pred ústnou.)

Samotné odovzdávanie mi prišlo divné, keďže často sa tváril, ako by sa to jeho netýkalo a ani ho nezaujímalo, čo hovorí dotyčný. Nejakými poznámkami a skákaním do výkladu sa snažil upozorňovať na chyby. Ak mu však niekto opontoval, debata skôr či neskôr končila frázou „To nie je podstatné“ – ostatne ako mnohé iné debaty s ním. Za dosť neprofesionálne určite považujem tvrdenie, že INT(10) v MySQL bude strááášne veľké číslo, až také, že to bude 64bitové a 32bitový procesor to nebude vedieť spracovať. Čo už len však dodať k tvrdeniu pána cvičiaceho, že 210 je väčšie ako 232 a pomaly rovnajúce sa 264? Asi len: to nie je podstatné.

Takéto správanie sa učiteľa voči študentom na štátnej škole by asi prešlo bez povšimnutia. Avšak bohužial aj na súkromnej škole sme si museli prejsť cez neadekvátny prístup k študentom, kvôli ktorému mnohí z nás investovali radšej do súkromnej školy, aby sme ho nemuseli zažívať. Niektorí by oponovali, že nás aj niečo z tých DB naučil. Nuž ak by sme však aspoň polovicu času namiesto riešenia podivných termínov sa učili, tak by vedeli o DB ešte viacej. Napísal som teda takúto kritiku ako reakciu na dosť nepodarené cvičenia tento semester, a nech táto spätná väzba nezostane len vnútri fakulty.