2012. november havi bejegyzések

Windows Update 0x800b001 hiba Windows 8-on

wsusWindows 8 számítógépek kerültek a tartományunkba, de szomorúan tapasztaltuk, hogy a minden más klienssel jól működő Windows Server Update Services (WSUS) kiszolgálónkról nem sikerül frissíteniük magukat. Hiába volt engedélyezve a Windows 8-hoz érkező frissítések telepítése a kiszolgálón, a frissítés mindig megszakadt 0x800b001 hibakóddal.

A probléma megoldása viszonylag egyszerű, csak telepíteni kell a szerverre a nemrég megjelent frissítést, amit innen lehet letölteni:

A frissítésről bővebben a KB2734608 tudásbázis cikkben olvashatunk.

A szervert a frissítés után újra kellett indítani, sőt egy újraindítás kellett a klienseknek is, de azután már tökéletesen működött a frissítés.

 

Technorati-címkék: ,,
Reklámok

A nulladik nap és a Trójai faló

PrintMark Russinovich nem egy Dan Brown. Két regénye, A nulladik nap és a Trójai faló valószínűleg soha nem fogja hónapokon keresztül vezetni a világ kalandregény bestseller listáit, az ő regényei ugyanis nem a fikcióból táplálkoznak, hanem a valóság kíméletes és szórakoztató csomagolásai. Aki követi Mark eseteit (The Case of the… sorozat a blogján) az tudja, hogy ez a fickó nagyon is két lábbal áll a földön, aki pedig hallotta őt előadni valamelyik konferencián, az tanúsíthatja, hogy ő aztán tudja, hogyan kell a tudást szórakoztatóan átadni. Mark ugyanis igazi tanár, méghozzá a jobbik fajtából.

Hivatalosan Mark Russinovich a kb. két tucatnyi Technical Fellow, azaz magyarul “nagy koponyák” közé tartozik a Microsofton belül. Ő volt az, aki ‘96-ban kitalálta, hogyan lehet egy NT 4-ből NT Servert csinálni, ő találta meg a Sony rootkitet 2005-ben és ő alkotta azt a Sysinternals szerszámosládát, ami mára már minden Windows üzemeltető keze ügyében ott van. Kevés ember ismeri úgy a Windowst, mint ő, és pont ez adja ennek a két könyvnek a varázsát.

trojai-faloMark nem visz el Mátrixba, a főszereplői nem James Bondok és az Erőt sem használják. A regények főszereplői átlagemberek (bár az átlagosnál talán kicsit szerencsésebbek), az eszközök és a technológiák pedig teljesen valóságosak. A kalandok közben pedig Mark folyamatosan tanít. Amikor Jeff Aiken vírusra vadászik, pont azokat a lépéseket veszi sorra, amiket a Malware Hunting with Sysinternals Tools előadásban hallhatunk. Mark tanít akkor is, amikor a virtuális memória lényegét képes elmondani egy rövid bekezdésben úgy, hogy egy laikus is simán megérti, miközben egy szakinak sem unalmas.

És Mark tanít akkor is, amikor az olvasó fejében megfogalmazódik a kérdés, hogy hát ha itt minden műszaki részlet ennyire valóságos, akkor vajon mi a helyzet a kaland körítéssel? Tényleg meg lehet hekkelni az áramhálózatot? Tényleg elronthatók a kórházak számítógépes adatbázisai? Előfordulhat, hogy megfeneklik egy olajszállító hajó Japán partjainál, amikor a navigációs rendszere leáll? Lehetséges, hogy szoftver hiba miatt egy utasszállító gép műszerei váratlanul felmondják a szolgálatot? Biztos nem? Na de akkor vajon tényleg kiberháború van?

Ez a két regény az modern életre nevel. Van benne autós üldözés, gyilkosság, vallatás, emberrablás, miközben érthető nyelven hívja fel a figyelmet azokra az informatikai biztonsági problémákra, amikről korábban csak a szakemberek beszéltek. Érdemes elolvasnia a könyvet mindenkinek, aki nem fél feltenni a kérdést: Ha valójában a virtuális vadnyugaton élünk, mi történhet még?

 

Technorati-címkék:

WinJS trükkök: Access is denied hiba egymásba ágyazott üzenet ablakoknál

A WinJS trükkök sorozat korábbi epizódjaiban megismerkedtünk az üzenet ablakok és a hozzájuk tartozó egyedi gombok létrehozásával. A tanultak alapján meg is írhatjuk az alábbi kódunkat, ami két MessageDialog ablakot jelenít meg egymás után:

var dlg = new MessageDialog( 'Első üzenet' );

dlg.commands.append( new UICommand( 'Bezár', function() {
  new MessageDialog( 'Második üzenet' ).showAsync().then( function() {
    // Itt csinálunk valami hasznosat...
  } );
} ) );

dlg.showAsync();

Ezzel a kóddal csak az a gond, hogy irgalmatlanul elszáll, méghozzá a legapróbb hibaüzenet nélkül. Debug módban futtatva az alkalmazást már látszik, hogy egy Access is denied kezeletlen kivétellel van dolgunk:

MessageDialog-Access-denied

Megvan a hiba? Ha nincs, akkor érdemes lehet megnézni a WinJS Trükkök sorozat mai epizódját, amiből nem csak az ok, hanem az is kiderül, hogyan lehet megszabadulni tőle:

(720p, teljes képernyős nézet ajánlott)

 

Technorati-címkék: ,,,,

WOWZAPP felkészülési anyagok

wowzapp2012November 10-én, most szombaton kerül megrendezésre Budapesten (is) a WOWZAPP 2012 egy napos Windows 8 alkalmazásfejlesztő maraton. A rendezvény reggel 8 órakor kezdődik, és a helyszíne az ELTE IK déli tömbje (változás a korábban meghirdetetthez képest!) Akad még néhány szabad hely, lehet bátran jelentkezni.

Az elmúlt hónapokban írtam pár cikket Windows 8 fejlesztés témában, melyek hasznosak lehetnek szombaton:

Windows Áruház

Fejlesztés JavaScriptben

Eszközök

Windows 8 telepítés

 

Sok sikert minden résztvevőnek!

 

Technorati-címkék: ,,,

ListView csíkozása AlternatingItemTemplate nélkül

Gyakori feladat, hogy webszerver oldalon kell egy táblázatot előállítanunk, aminek ráadásul zebramintás csíkokat kell adnunk. Ez ASP.NET-ben elég egyszerű például a ListView vezérlővel, mert az ItemTemplate és az AlternatingItemTemplate segítségével külön sor sablont hozhatunk létre a páros és a páratlan sorokhoz. A módszer hátránya, hogy ha csak kis mértékben tér el a két sablon – például tényleg csak a háttérszín miatt kell minden második sorhoz egy másik CSS osztály – akkor feleslegesen elbonyolódik a kód, amit nehéz lesz karbantartani.

A probléma megoldható egyetlen ItemTemplate segítségével is, ha a sorhoz tartozó CSS osztályt az alapján számítjuk ki, hogy hányadik sornál tartunk éppen. Például így:

<ItemTemplate>
  <tr class="<%# Container.DisplayIndex % 2 == 0 ? "odd" : "" %>">

A módszer más vezérlők esetén is működik, csak a feltételt kell máshogy megfogalmazni. Repeater vezérlő esetén például a Container.ItemIndex tulajdonság tárolja az aktuális sor számát.

 

Technorati-címkék:

WinJS Toolkit – JavaScript Toolkit for Windows 8

Ha JavaScriptben készítesz Windows 8 alkalmazásokat, akkor érdekes lehet számodra a WinJS Toolkit projekt, amit nemrég raktam ki a CodePlexre:

https://winjstoolkit.codeplex.com/

A WinJS Toolkit JavaScript osztályokat és függvényeket tartalmaz, amelyek segítségével egyszerűbben készíthetők Windows Store alkalmazások HTML5-CSS3-JavaScript környezetben. A közvetlenül futtatható kód mellett a projektben Visual Studio sablonok is vannak, amelyekkel gyorsabban hozhatjuk létre az alkalmazásunk néhány tipikus elemét. A projekt célja természetesen a fejlesztés gyorsítása a gyakori kódrészletek félkészre sütött tálalásával.

A projekt jelenleg nagyon korai fázisban van, egyelőre mindössze néhány függvény és sablon található benne, de még a héten ki akartam publikálni, hogy a WOWZAPP résztvevőknek legyen idejük megismerkedni vele még szombat előtt. Bár a projekt éppen hogy csak megszületett, már így is sokat segíthet, akár a szombati eseményről van szó, akár éles projektről.

Jelenleg az alábbiak találhatók a projektben:

Bővítő metódusok

  • String.format prototype

WinJSTK osztály

  • WinJSTK.isConnected() függvény: Lekérdezhető, hogy van-e éppen internet kapcsolat.
  • WinJSTK.composeMailAsync() függvény: E-mail küldést kezdeményezhetünk vele a felhasználó nevében.

Eszközök

  • Sablon WinJS osztályhoz
  • Sablon névjegy (about) beúszó ablakhoz
  • Sablon adatvédelmi nyilatkozat (privacy policy) beúszó ablakhoz

Kérlek segíts, hogy a projekt híre még időben minél többekhez eljusson. Ha Twitterezel, akkor kérlek a #WinJSTK hashtaget használd.

Természetesen minden visszajelzésnek, ötletnek örülök, és mivel közösségi projektről van szó, bátran csatlakozz a projekthez és add hozzá a saját kódodat!

 

Technorati-címkék: ,,

Visszaküldött fájl törlése MVC-ben

Nem ritka dolog ASP.NET MVC-ben, hogy egy szerver oldalon létrehozott fájlt egy FilePathResult segítségével küldünk vissza a kliensre, valahogy így:

public FileResult GetFile()
{
    // TODO: itt a lényeg...
    return this.File( filePath, type );
}

Ha az adott fájl történetesen egy ideiglenes állomány, akkor felmerülhet a kérdés, hogyan tudjuk a teljes fájl visszaküldése után törölni az immár szükségtelen fájlt a szerverről?

Például egy ún. result filterrel:

public class DeleteFileAttribute : ActionFilterAttribute
{
  public override void OnResultExecuted( ResultExecutedContext filterContext )
  {
    filterContext.HttpContext.Response.Flush();
    string filePath = ( filterContext.Result as FilePathResult ).FileName;
    File.Delete( filePath );
  }
}

Ez persze egyszerűsített kód, érdemes kiegészíteni azzal, hogy az action eredménye valóban FilePathResult-e, hogy létezik-e a fájl, végül pedig gondoskodni arról, hogy ne szálljon el a kód akkor sem, ha a törlés nem sikerül.

Ha így elkészült a filterünk, ragasszuk oda a [DeleteFile] attribútumot az action elé és már menni is fog a törlés.

 

Technorati-címkék: ,