Monthly Archives: November 2012

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: ,,

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: ,

AppBar ikonok használata klasszikus gombokon

Windows Store alkalmazásainkban könnyen készíthetünk látványos application bart, méghozzá részben annak köszönhetően, hogy a WinJS.UI.AppBarIcon objektumban kapunk készen 194 darab pofás Metrós ikont. Elég ennyit írnunk és a data-win-control attribútumnak köszönhetően a div és button elemek application bar-rá alakulnak:

<div id="appbar" data-win-control="WinJS.UI.AppBar">
  <button 
    data-win-control="WinJS.UI.AppBarCommand"
    data-win-options="{id:'cmdPrev', label:'Előző', icon:'previous'}"
    type="button">
  </button>
</div>

Az egyik izgalmas rész, hogy honnan jönnek az ikonok, mit jelent a previous a fenti példában? Nos az ikonok nevei a WinJS.UI.AppBarIcon objektumban találhatóak, aminek a tartalma a WinJS-hez tartozó ui.strings.js fájlból töltődik fel:

winjs-references

Ez a fájl egy klasszikus erőforrás fájl, ami kulcs-érték párokat tartalmaz. Az appbar ikonok így töltődnek fel (részlet):

"appBarIcons\\previous": "\uE100", // ? group:Media
"appBarIcons\\next":     "\uE101", // ? group:Media
"appBarIcons\\play":     "\uE102", // ? group:Media
"appBarIcons\\pause":    "\uE103", // ? group:Media
"appBarIcons\\edit":     "\uE104", // ? group:File
"appBarIcons\\save":     "\uE105", // ? group:File
"appBarIcons\\clear":    "\uE106", // ? group:File
"appBarIcons\\delete":   "\uE107", // ? group:File
"appBarIcons\\remove":   "\uE108", // ? group:File

Mit jelent a \uE100 érték? Az appbar azt használja ki, hogy a Segoe UI Symbol betűkészletben számos ikon található (írtam róla korábban), a megadott érték pedig a felhasználni kívánt karakter kódja:

appbar-icons-charmap

Valójában tehát az appbar ikonként nem képeket, hanem karaktereket jelenít meg, ami brilliáns megoldás, hiszen egyrészt gyorsabb, másrészt nem probléma az átméretezése.

Mindez gyönyörűen látszik DOM Explorerben, kivéve a lényeget, ugyanis a spéci karaktert a Visual Studio nem tudja megmutatni (ezért vannak a fenti kódban a kérdőjelek). Szerencsére Jamie Rodriguez készített egy pár soros programot, ami kilistázza az összes WinJS.UI.AppBarIcont.

Mivel az appbar ikon valójában a klasszikus <button> elem mutációja, ezért ezt a módszert mi is használhatjuk a saját kódunkban. Mindössze annyit kell tudnunk, hogy a karakterkódokra így hivatkozhatunk a markupban:

appbar-icons-single

Tehát &#x aztán a kód, végül pedig egy pontosvessző. Az eredmény pedig:

appbar-icons-custom

Persze az ikonok kicsit máshogy néznek ki egy szögletes gombon, mint egy karikában, ezért készítettem egy rövid kódot az összes ikon megjelenítéséhez:

for( var icon in WinJS.UI.AppBarIcon ) {
  var btn = document.createElement( 'button' );
  var hex = WinJS.Resources._getWinJSString( "ui/appBarIcons/" + icon )
                 .value.charCodeAt( 0 );
  btn.innerHTML = '{0} (&amp;#x{1};): &#x{1};'.format( icon, hex.toString( 16 ) );
  document.body.appendChild( btn );
}

Íme a teljes kép (katt a nagyobb változatért):

appbar-icons-all

Természetesen nem csak azokat a karaktereket használhatjuk, amik a WinJS.UI.AppBarIcon objektumban elérhetőek, hanem bármelyik betűtípus bármelyik karakterét, ami sokkal kényelmesebb, mint img elemek méretezésével és pozícionálásával küzdeni…

 

Technorati-címkék:

Hogyan kerülhet az alkalmazásom a Windows Áruház címoldalára?

Az MSDN-ben van egy Az alkalmazás értékesítése c. fejezet (a magyar verziónál jelenleg bővebb az angol!), ahol sok hasznos információt találhatunk arról, hogyan fog megjelenni az alkalmazásunk a Windows Áruházban. Arról viszont egy szót sem szólnak, hogy mi kell ahhoz, hogy az alkalmazásunk a kiemelt (Spotlight) kategóriába kerüljön.

Ez szándékos, mert ezzel is megpróbálják elejét venni a visszaéléseknek. Te is megvennéd még tízszer a fizetős alkalmazásodat, ha már csak annyi kellene, hogy a címlapra kerülj, nem? Ezért ne is nagyon számítsunk arra, hogy a jövőben az algoritmust nyilvánosságra fogják hozni…

Azért mégis íme néhány ötlet, ami segíthet:

Az alkalmazás közzétételekor a Description lépésben mindenképp adjuk meg a címlapra kerülő képeket a Promotional images rovatban, ezek nélkül ugyanis esélyünk sincs oda kerülni. Összesen négyféle méretben tudunk PNG képeket feltölteni:

promotional-images

Nem kell mindet megadnunk, de kevesebb képpel csak csökkentjük az esélyeinket. Ha csak egyetlen képet adunk meg, az legyen a 414×180 képpont méretű.

A második tipp, hogy az alkalmazás legyen kidolgozott. A legegyszerűbb alkalmazásnak is több esélye van a címlapra kerülni, ha a készítésekor odafigyelünk a részletekre, mint egy bonyolultabb (talán hasznosabb), de összecsapott alkalmazásnak. Az alap X ikonnal ne is reménykedjünk:

apps-with-no-icon

Végül pedig figyeljünk oda a visszajelzésekre. Nem csak az Értékelések oldalon kaphatunk a felhasználóktól visszajelzéseket, hanem az Áruház maga is gyűjt statisztikákat arról, hogy hogyan teljesít az alkalmazásunk, amiknek a részleteit megtekinthetjük bejelentkezés után az Irányítópulton.

 

Technorati-címkék: ,