Egy nap Windows Phone fejlesztőként: Autópálya információk SMS-ben

Ez a blogbejegyzés 2 hete fekszik publikálatlanul, ha végigolvasod, kiderül, miért. Időközben Scott Hanselman publikált egy nagyon hasonló cikket, azt is érdemes elolvasni.

 

Az egész úgy kezdődött, hogy a tanszékünk január 25-én szervezett egy Windows Phone fejlesztői konferenciát (melynek az előadásai már megtekinthetők a devPortalon), én pedig elhatároztam, hogy azt a napot rászánom a Windows Phone fejlesztésre. A cél annak kiderítése volt, hogy a meglévő .NET, Silverlight, XAML tudásomat mennyire hatékonyan tudom alkalmazni WP környezetben. Mindezt azonban nem a konferencián akartam felmérni, hanem inkább egy Outlook-Skype-telefon-mentes napon, a saját bőrömön érezve, Visual Studioban kódolva. A végeredmény a cikk végén letölthető, addig pedig azt írom le, milyen úton sikerült odáig eljutni, hiszen a másodlagos cél ezeknek az első tapasztalatoknak a megosztása volt.

Adott volt tehát az 1 napnyi határidő, már csak egy konkrét cél kellett, ami értelmesebb alkalmazás, mint egy Hello World, de nem túl bonyolult. Egyszer régen, még a Windows Mobile idejében, készítettem egy .NET Compact Frameworkös programot, amely segítségével a magyarországi autópályákkal kapcsolatos forgalmi információkat lehet lekérni SMS-ben. Elképesztő GUI-t kapott:

Autópálya információk SMS-ben Windows Mobile-on

Mivel az alkalmazás bevált a régi Windows Mobile-os telefonomon és nagyon hamar elkezdtem hiányolni Windows Phone-on, kézenfekvő volt, hogy ez legyen az állatorvosi ló.

Ezzel indultam neki:

  • .NET tapasztalat, elsősorban webfejlesztési területen.
  • Tapasztalat .NET Compact Frameworkös mobil alkalmazás, Silverlight és XAML területen.
  • A Windows Phone-nal kapcsolatos hírek követése a termék életének kezdete óta.
  • Pár egyszerűbb fejlesztési demó és a devPortalon lévő Windows Phone-os előadássorozat végigmozizása.
  • Kéznél volt a devPortalos fiúk által írt WP7 könyv, amiben nagyon jól lehet CTRL+F-fel keresni.
  • Letöltöttem és kb. 15 perc alatt telepítettem a Windows Phone SDK-t.
  • Egy HTC HD7 készülék Mangoval a teszteléshez.

 

Első lépések

Ennyi elég is volt ahhoz, hogy Visual Studioban File – New – Project – Windows Phone Application varázslóval létrehozzam az első WP7-es alkalmazásomat. A sablon kiváló, azonnal futtatható, elindul az emulátor és máris kipróbálható. Pont ennyit tud:

Első WP7 appom

Nem tudom, ki hogy van vele, én új környezetben mindig először egy interaktív Hello Worldöt szoktam készíteni: egy szövegdobozba beírt szöveg gombnyomásra megjelenik egy címkén. Ez pont olyan egyszerűen ment, mint ahogyan előre elképzeltem, Toolboxról behúzhatók a vezérlők, vagy a WPF/Silverlightos XAML kód pont ugyanúgy írandó, sőt az eseménykezelőkkel kapcsolatban sincs igazán újdonság.

Szia Világ WP7-re

A tesztelés már egy kicsit furmányosabb, tudni kell, hogyan lehet a hoszt billentyűzetét használni az emulátorban: a kulcs a PageUp.

A WP7-es alkalmazások felhasználói felületének gyakori eleme az alsó Application Bar. A Studio által generált kódban erre is van minta, csak ki van kommentezve, és szinte kiált az uncomment után. A gombra persze ikont kell rakni, szerencsére van pár a C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.1\Icons mappában. Elég a Dark ikont használni, ha a felhasználó átvált a telefonon világos témára, akkor ez az ikon automatikusan invertálódni fog. Az ikont bárhova be lehet rakni a forráskódba, de a megszokottal ellentétben a Build Actionjét nem Resource-ra, hanem Content-re kell állítani. Bevallom, ez meglepett. Az appbar eseménykezelői klasszikus gomb eseménykezelők, akár debuggerrel, akár MessageBox-szal könnyű kipróbálni őket.

Application Bar

Szerencsére nem ez az egyetlen WP7-es projekt sablon van a Studioban, érdemes végignézni mindet. A Windows Phone Databound Application már adatkötésre és navigációra is mutat példát. Van benne egy talán feleslegesen elbonyolított MVVM és példa az oldalak közötti navigálásra, ami ugyanúgy a NavigationService segítségével történik, mint WPF-ben. Ez a példa használ beépített Windows Phone-os stílusokat, amikről itt található bővebb információ: http://msdn.microsoft.com/en-us/library/ff769552(v=vs.92).aspx. Aki csinált már adatkötést, például WPF-ben vagy akár ASP.NET-ben, annak itt nem lesz újdonság.

wp7-masodik-start

Ezek után még létrehoztam egy Windows Phone Panorama Application és egy Pivot Application projektet. Kód szinten a Panorama és a Pivot is pont olyan, mint egy Tab control, futási időben viszont máshogy viselkednek. Érdemes megnézni a devPortalos videókat, ott kiderül, mikor melyiket célszerű használni.

wp7-harmadik-panorama wp7-negyedik-pivot

A projekt sablonok megismerése kb. 40 percbe telt, ideje volt nekiállni a saját alkalmazásomnak.

 

Tervezés

A Windows Mobile és a Windows Phone megjelenése közötti időben nagyon sokat változtak az alkalmazások és a felhasználói igények is, ezért kódolás előtt futottam egy kört azzal kapcsolatban, hogy mit kellene másként csinálni. Ami jó volt a régiben:

  • hálózati adatkapcsolat nélkül is tökéletesen működött, mert csak SMS-ben kommunikált
  • az egyszerű felhasználói felületnek köszönhetően akár vezetés közben is nagyon kényelmes volt a használata

Mivel a hálózati adatkapcsolat nélküli működés nagyon praktikus, maradtam az SMS-es megvalósításnál. Biztos voltam benne, hogy az SMS-t nagyon egyszerű lesz elküldeni, de voltak kételyeim afelől, hogy a válasz SMS-t meg tudom-e jeleníteni az alkalmazásban. Hosszas guglizás után arra jutottam, hogy WP7-en nemcsak hogy nem lehet elkapni a bejövő SMS-t, de még a kimenő SMS-ek elküldését sem lehet teljesen automatizálni. A kódból összerakott SMS-t csak a felhasználó tudja elküldeni az SMS szerkesztőből. Ez akár baj is lehetne, de mivel a válasz amúgy is ott fog megjelenni, ezért nem nagy gond. Sőt, mivel a szolgáltatás gyakran több SMS-ben válaszol és azok ott egyszerre lesznek láthatóak, úgy döntöttem, ezzel a kompromisszummal együtt lehet élni. Plusz egy tappintás, még belefér.

A második pont a felhasználói felület. A régi, egy képernyős, fix elrendezés tökéletesen működött az akkori kevés autópályára, de ma már sokkal több főútról lehet információkat kérni. Hogy pontosan melyekről, azt nem tudtam kideríteni. Az autopalya.hu oldalon találtam ugyan térképet, de az nem egészen fedte a Wikipedián található listát, és próbálgatás közben semmi logikát nem találtam abban, hogy melyikről jött válasz és melyikről nem. Így GUI tervezési szempontból arra jutottam, hogy akárhány elemű listát kell tudnom megjeleníteni.

A következő lépés a mockup rajzolás szokott lenni, amihez mi általában Balsamiqot használunk, amihez szerencsére lehet letölteni Windows Phone-os sablonokat. Nem volt türelmem az egész alkalmazást megrajzolni, de azt sikerült megsaccolni vele, hogy egy listában három egymás melletti ikon még elég nagy ahhoz, hogy ujjal pontosan megnyomható legyen. A mockupból kiderült az is, hogy a görgetés és a sok elem közötti keresgélés valószínűleg nem kényelmes például vezetés közben, ezért nem árt a programba egy Kedvencek lista egy másik Panorama képernyőn.

Ez a tervezgetés kicsit több, mint 45 percet vett el, de mindenképp megérte.

 

File – New – Project

A Studio projekt sablonjainak megismerése után gyerekjáték volt a projekt létrehozása és a felhasználói felület átszabása. Az egyetlen érdekesség az volt, hogy WP7-en alapból nincs WrapPanel, ahhoz már a Silverlight for Windows Phone Toolkit kell. Ez persze letölthető a CodePlexről is (mint ahogy sokan javasolják), de szerintem a NuGet csomag sokkal egyszerűbb.

Az adatmodellel már egy kicsit meggyűlt a bajom. Először is a template által generált view-modelben a PropertyChanged implementáció nem tetszett. Valami sokkal egyszerűbbet akartam, így átírtam az egészet singletonra. Annál viszont nem sikerült megoldanom, hogy dummy adatok megjelenjenek a dizájnerben, ha valaki tudja, hogyan kell, kérem írja meg. Egy óra kínlódás után vissza az egész.

Az SMS küldés gyerekjáték volt, meg is osztom veletek a hihetetlenül komplex üzleti titkot:

  SmsComposeTask sms = new SmsComposeTask
  {
    To = App.Settings.PhoneNumber,
    Body = speedwayDisplayName
  };
  sms.Show();

Délelőtt 10 órára készen is volt az alkalmazás első verziója, ami annyit tudott, mint a régi.

 

Első futtatás a telefonon

De jó, hogy megnéztem a devPortalos videókat arról, hogyan kell áttölteni egy alkalmazást a telefonra! Kösz, fiúk, sok időt spóroltatok meg! Hibaüzenetek ugyanis vannak, de nem éppen bőbeszédűek:

Failed to connect to device as it is pin locked.

Frászt! Csak épp bekapcsolt a képernyővédő. Bekapcs, felhúz és már megy is.

Failed to connect to device as it is developer locked. For details on developer unlock, visit http://go.microsoft.com/fwlink/?LinkId=195284.

Ez akár értelmes hibaüzenet is lehetne, ha nem az AppHub kezdőlapját hozná be, ahonnan fogalmam sincs, hogyan tovább, túl sok link van rajta. A megoldás a Start menüből a Windows Phone Developer Registration alkalmazás elindítása, ami az SDK-val kerül fel. Beírtam neki a Live ID-mat és a jelszavamat, és azonnal megvolt az unlock, pedig előtte nem is regisztráltam az AppHubra.

 

Hetességek

Feltűnt, hogy a telefon forgatására a program nem reagál. Azt hittem, hogy ez megy magától, hiszen a layout vezérlők ezt kezelhetnék. Szerencsére tényleg megy magától, amint azt engedélyeztük XAML-ben:

  <phone:PhoneApplicationPage
    ...
    SupportedOrientations="PortraitOrLandscape"
    Orientation="Portrait"
    OrientationChanged="OnOrientationChanged"

Az eseménykezelő azért kellett, hogy fekvő helyzetben a Panorama címét el tudjam rejteni, mert nagyon sok helyet foglal. Erre csak ezt a megoldást találtam, vajon van egyszerűbb?

  Grid grid = (Grid) VisualTreeHelper.GetChild( this.panorama, 0 );
  FrameworkElement title = (FrameworkElement) grid.FindName( "TitleLayer" );
  title.Visibility = e.Orientation == PageOrientation.LandscapeLeft ||
                     e.Orientation == PageOrientation.LandscapeRight ?
                     System.Windows.Visibility.Collapsed :
                     System.Windows.Visibility.Visible;

Mindenképp ki akartam használni, hogy a Start képernyőre egyedi lapkák tűzhetők, mert így még egyszerűbben lehet a gyakran használt autópályához tartozó információkat lekérdezni. Mínusz egy tappintás. A lapkák elég furcsa lények, mielőtt az ember belecsap, mindenképp érdemes elolvasni, hogyan működnek és mire képesek. A könyvben nagyon jól össze van foglalva, tudom ajánlani. A lehetőségek megértése után a kód nagyon egyszerű:

  StandardTileData tile = new StandardTileData
  {
    Title = String.Format( CultureInfo.InvariantCulture, "{0} infó", speedway ),
    BackgroundImage = new Uri( "/ApplicationTileIcon.png", UriKind.Relative )
  };
  ShellTile.Create(
    new Uri( "/MainPage.xaml?info=" + speedway, UriKind.Relative ), tile );

Ez az a pont, ahol az ember szembesül azzal, hogy ikont kell rajzolni az alkalmazáshoz, ami nem kimondottan programozónak való feladat. Azért "a maga módján" az is élmény. Mindezt rápakolni a Toolkitben található ContextMenu-re már semmiség volt.

Természetesen a program elmaradhatatlan része az About ablak, amin belül WP7-en szinte kötelező, hogy legyen link a Piactéren lévő oldalra, ahol értékelni lehet az alkalmazást. Ehhez mindössze ennyi kód kell. Jó, nem?

  MarketplaceReviewTask task = new MarketplaceReviewTask();
  task.Show();

Ugyanoda került egy e-mail küldési lehetőség is, amit szintén nem bonyolult elkészíteni:

  EmailComposeTask task = new EmailComposeTask
  {
    To = "balassy@aut.bme.hu",
    Subject =
      "Visszajelzés az Autópályán Windows Phone alkalmazással kapcsolatban"
  };
  task.Show();

A főoldal és a névjegy oldal közötti váltás nagyon fapadosnak tűnt, ezért elhatároztam, hogy feldobom a Toolkitben lévő animációval. Ezzel kapcsolatban a legtöbb leírás arról szól, hogyan lehet egy A és egy B oldal között megcsinálni az animációt jó sok kód bemásolásával, de kis keresgélés után találtam egy WindowsPhoneGeek cikket arról, hogyan lehet ezt központosítani.

Kora délutánra el is készült a program. Nem maradt más hátra, mint publikálni.

 

Piactér élmények

Elindítottam a jól eldugott helyéről (Solution Explorerben a projekten jobb klikk) a Marketplace Test Kitet, majd eltöltöttem jó sok időt a sokféle felbontású és rendeltetésű kép megrajzolásával. Szerencsére az emulátorból nagyon egyszerű képernyőképeket készíteni, egy kattintás és már menthető is. Lefuttattam az automatizált  teszteket, és nagyjából átfutottam a 49 manuális tesztet (kinek van ehhez türelme?). Miután megfogalmaztam a programhoz tartozó leírást Wordben, minden készen volt ahhoz, hogy feltöltsem az alkalmazást a Piactérre.

Azt még tavaly sikerült elintéznem, hogy a Dreamspark program elfogadja a bme.hu végű e-mail címeket, így most simán regisztráltam magam Dreamspark tagként a create.msdn.com oldalon a Piactérre – természetesen ingyen. A “simán” persze egy kis túlzás, ha az embert “Balássy György”-nek hívják. Azt merte mondani a fránya regisztrációs űrlap, hogy ez a név már foglalt. Eeeeez? Nem hittem neki, de mit lehet tenni. Jól van, akkor legyen “György Balássy”. Abban meg nem megengedett karakterek vannak. Kérdem én, akkor a fordítottja hogy lehet foglalt, abban megengedettek ugyanazok a karakterek? Végül maradtam “Balassy Gyorgy”, de az e-mail cím megerősítő levélben valamilyen oknál fogva már így szerepeltem: Arc nagy mosollyal

wp7-registration-welcome

Bár az e-mailben lévő linkre azonnal rákattintottam, még sokáig “We are verifying your account” üzenet szerepelt a profil oldalamon, máshol meg az, hogy “Account Status: Active”. Hm. A Devices oldalon a korábban ugyanezzel a Live ID-val unlockolt készülék nem jelent meg azóta se, ami éppenséggel engem nem zavar, de érdekes anomália.

Szóval kicsit furcsa a Piactér a kofák oldaláról, de működik. Csont nélkül be tudtam küldeni az alkalmazásomat.

Két munkanap után jött meg az eredmény egy e-mail és egy PDF formájában (érdemes megnézni nagyban, milyen készülékeken tesztelték):

wp7-cert-failed

Marketplace certification test results Marketplace certification test results

Az egyetlen hiba pedig:

Fail 5.5.1 The product description and UI text of your application must be localized to each language the application supports.

Hát igen, a program magyarul beszél, de a publikálásnál ezt senki nem kérdezte! A megoldás: a Studioban a projekt tulajdonságai között az Assembly Information ablakban kell helyesen beállítani a Neutral Language értékét. A helyesen nagyon fontos, ugyanis csak “ország” formátumút szabad választani, “ország (nyelv)” formátumút a fórumok alapján ugyanúgy nem fogad el a Piactér. Így aztán kiválasztottam a Hungariant, majd ismét beküldtem az alkalmazást a Piactérre. Annyit változtattam még, hogy a leírásban a sortöréseket üres sorokra cseréltem, mert úgy tűnt, azokra nincs tekintettel a megjelenítő oldal. Utólag úgy tűnik, hogy a nyilvános oldal majd tekintettel lesz rá, mert az egész leírást egy HTML <pre> tag-ben jeleníti meg.

Azt tudni kell, hogy az összes beküldés olyan, mintha első lenne, tehát bármilyen apró módosítás esetén újra végigmegy a program a teljes tesztelési és jóváhagyási folyamaton. Ez ismét két munkanapba telt, és az eredmény ismét Certification Failed:

Marketplace certification test results Marketplace certification test results

Ez aztán a követelmény, próbáld csak meg magyarra lefordítani:

The title of the applications pin-to-start icon appears to be a generic title, "sdkLocalDatabase" and is not representative of the application named "1, 2, 3 Learn!"

Egyébként igaz, valóban nem teljesen egyéni ez az ikon:

ApplicationIcon (62x62)

De ez az előző tesztelőnek tényleg nem tűnt fel? Tényleg csak az első hibáig tesztelik a programot? Ez igazán bosszantó volt. Sok órányi rajzolgatás és az összes grafikusi képességem bevetése után ezt mind sikerült kihoznom belőle:

Application Icon (62x62)

Aki szívesen rajzolna nekem egy jobbat, jelentkezzen nálam a pályázatával Mosolygó arc

Ezzel a csoda ikonnal, amit persze négy méretben kellett megrajzolnom, ismét beküldtem az alkalmazást.

Két munkanap után ezúttal megtörtént a váratlan fordulat:

Sikeres publikálás

Mivel a beküldésnél a varázsló végén azt állítottam be, hogy jóváhagyás után azonnal jelenjen meg, a “publish” elvileg meg is volt. Még jó, hogy Bandi az egyik előadásában elmesélte a SurfCube kapcsán, hogy kell még pár óra, míg az alkalmazás megjelenik a kereshető katalógusban. Ez a pár óra nálam ismét másfél napba telt. Addig sokszor a közvetlen link sem működött, hol megtalálta a kereső autocomplete, hol nem, teljesen kaotikusan lehetett rátalálni a programra. Magyarul újabb másfél napig nem volt publikálva az alkalmazás, ezzel összesen 2+2+2+1,5 munkanapig tartott kitenni az appot a Piactérre, de persze legközelebb remélhetőleg csak a fele lesz.

Azóta az alkalmazást több készülékre is letöltöttem a Piactérről, mégis nulla maradt a Download Count a tulajdonosi oldalon. Így kicsit érdekes a Crash Count számláló is Mosolygó arc   Hasonló érdekességet találtam az értékelésekkel kapcsolatban is (arról majd egy későbbi cikkben írok), de ott szerencsére az AppTracker segítségével sikerült könnyen átlátni a visszajelzéseket.

 

A végeredmény

Small  Application Tile (99x99)A végeredmény az Autópályán nevű alkalmazás, amely immár letölthető a Piactérről (ugyanott találhatók képernyőképek is) az alábbi linkekre kattintva, vagy a QR kód szkennelésével:

Megnyitás a Piactéren böngészőben

Megnyitás Zune kliensben vagy telefonon

Az Autópályán alkalmazás megnyitása a Piactéren

Aki esetleg letölti és kipróbálja, kérem küldjön róla értékelést és visszajelzést.

Screenshot 1 - Informacio

 

Értékelés

Egy nap alatt persze nem lettem Windows Phone guru (ez nem is volt cél), de azt hiszem, sikerült alaposan belekóstolni az új mobil operációs rendszer programozásába. Aki látott már valaha XAML-t, annak egyáltalán nem fog gondot okozni ez a platform, a fejlesztőeszközök (emulátor, debugger stb.) is sokkal jobbak, mint a Windows Mobile idejében. Egy nap alatt sikerült eljutni az ötlettől a publikálásig, ami szerintem nem is rossz, és ez az egy napnyi tapasztalat elég ahhoz, hogy sokkal határozottabban tudjak nekifogni a következő alkalmazás fejlesztésének. A Piactérnek vannak sajátosságai, de ezek idővel biztosan meg fognak javulni (vagy megtanulunk együtt élni velük). Szerintem már csak két kihívás marad:

  • Kitalálni olyan alkalmazásokat, amik még nincsenek WP7-re, de valóban kellenek.
  • Olyan felhasználói felületet kialakítani, ami ergonomikus, és nem csak hogy passzol a WP7 Metro stílusához, de maximálisan ki is használja azt.

Ti mit gondoltok?

 

Az utolsó tipp: Így készül a Zune link

Az alkalmazás nyilvános Piactér oldalának URL-jéből ki kell másolni a GUID-ot és be kell tenni ennek a végére: http://social.zune.net/redirect?type=phoneApp&id=IDEJÖNAGUID

A wp7.hu-n olyan jól működő QR kódot pedig én itt generáltam: http://createqrcode.appspot.com/

 

 

 

Technorati-címkék: ,,
Kategóriák:Mobil Címkék:,

Real World .NET, C#, and Silverlight: Indispensible Experiences from 15 MVPs

image 1

Örömmel jelentem, hogy kézzelfogható bizonyítékát kaptam annak, hogy megjelent a Wroxnál a Real World .NET, C#, and Silverlight: Indispensible Experiences from 15 MVPs c. könyv. Számomra azért különleges ez a könyv, mert ez a második angol nyelven, külföldön megjelent könyv, aminek a szerzője, pontosabban társszerzője voltam.

Ez a könyv azért egyedi, mert nem egy témával foglalkozik, hanem többel, konkrétan tizenöttel:

“Written by a group of experienced MVPs, this unparalleled book delves into the intricate—and often daunting—world of .NET 4. Each author draws from a particular area of expertise to provide invaluable information on using the various .NET 4, C# 4, Silverlight 4, and Visual Studio tools in the real world.”

Nagyon jó csapat állt össze, mert minden fejezetet egy Most Valuable Professional címmel rendelkező szerző írt, mégpedig a kedvenc témaköréből:

  • David Giard: ASP.NET and jQuery
  • Bill Evjen: ASP.NET Performance
  • György Balássy: Ethical Hacking of ASP.NET
  • Gill Cleeren: How to Build a Real-World Silverlight 5 Application
  • Jeremy Likness: Silverlight — The Silver Lining for Line-of-Business Applications
  • Daron Yöndem: Tips and Tricks for Designers and Developers
  • Kevin Grossnicklaus: MVVM Patterns in Silverlight 4
  • Alex Golesh: Windows Phone "Mango" for Silverlight Developers
  • Christian Weyer: Pragmatic Services Communication with WCF
  • Dominick Baier: Securing WCF Services Using the Windows Identity Foundation (WIF)
  • Jeffrey Juday: Applied .NET Task Parallel Library
  • Vishwas Lele: The WF Programming Language
  • Christian Nagel: Practical WPF Data Binding
  • Scott Millett: Driving Development with User Stories and BDD
  • Caleb Jenkins: Automated Unit Testing

Az eredeti csapatban Velvárt András barátom is benne volt, de a 15 szerző koordinálása miatt sajnos lassan készült a könyv, így végül Bandi a SilverlightShow-n publikálta a fejezetét Windows Phone 7 for Silverlight Developers címmel e-book formájában.

A könyv az Amazonon november vége óta kapható, de a szerzői tiszteletpéldányok csak most érkeztek meg Magyarországra (az amerikai szerzők már decemberben megkapták), így én is csak most tudtam végignézni a többiek témáját, amik között nem egy nagyon hasznosat és érdekeset találtam. A vegyesfelvágottnak köszönhetően szerintem mindenki talál a könyvben a szívéhez közel álló fejezetet.

Jómagam Ethical Hacking ASP.NET címmel az ASP.NET platformban rejlő olyan biztonsági gyenge pontokról írtam, amelyek minden ASP.NET-es alkalmazást sebezhetővé tesznek bizonyos támadások ellen. Aki eljön a szerdai bemutatóra, kaphat belőle egy kis ízelítőt. Akihez pedig eljut a könyv, kérem küldjön visszajelzést, hogy hasznosnak találta-e a leírtakat.

 

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

Ethical Hacking bemutató a BME-n szerdán

Folytatva az előző évek hagyományait, a NetAcademia Oktatóközponttal együttműködve az IT-biztonság iránt érdeklődő diákok részére ismét tanrenden kívüli Ethical Hacking képzést indítunk a BME-n. A tanfolyam ezúttal online, így nem BME-s és vidéki diákok is kényelmesen vehetnek részt rajta.

 

ethical_hacking_kepzes

 

Bemutató február 8-án!

Hogy kedvet csináljunk a képzéshez, február 8-án tartunk egy nyilvános hekkelős bemutatót a képzésből. A változatos gyakorlati példákon keresztül résztvevők benyomást szerezhetnek a képzés jellegéről, illetve szabadon feltehetik a kérdéseiket is a képzéssel kapcsolatban.

Időpont: 2012. február 8., szerda, 16 óra
Helyszín: BME Q épület QB.F14 terem (1117 Budapest, Magyar Tudósok krt. 2.)

Minden érdeklődőt (nem BME-s diákokat is) szeretettel várunk!

A képzéssel kapcsolatos minden információ megtalálható itt:
http://www.aut.bme.hu/EthicalHacking

 

Technorati-címkék: ,
Kategóriák:Biztonság Címkék:, ,

Partíció formázása ext3-ra

Van egy kiváló ASUS WL-500 routerem, amiben azt szeretem legjobban, hogy külső USB-s diszket lehet rádugni és pikk-pakk kész a fájlszerver. Sajnos egy ideje azt tapasztaltam, hogy másolás közben a Windows Explorer gyakran elveszítette a kapcsolatot, miközben elég súlyosnak tűnő bejegyzések kerültek a router syslogjába az smbd-vel kapcsolatban, például:

write_socket_data: write failure. Error = Broken pipe
Error writing 64 bytes to client. -1. Exiting

Szerencsére a diszken VFAT fájlrendszer volt, így könnyen át lehetett tenni Windows alá, ahol a chkdsk talált pár hibát. Sok guglizás után arra jutottam, hogy a routerben lévő USB driver jobban szereti az ext2-ext3 fájlrendszereket, ami közül a journalig miatt én az ext3-at választottam. Na de hogy tudok egy diszket ext3-ra formázni? Mivel nem sok kedvem volt SSH alatt fdisk-kel, mounttal és a formázással bohóckodni, kényelmesebb megoldást találtam:

  1. Letöltöttem és kiírtam CD-re a GParted Live CD-t, ami mindössze 115 MB és nagyon gyorsan megvolt.
  2. Bootoltam a frissen sült CD-ről.
  3. A boot menüben: GParted Live (Default Settings)
  4. Policy for handling keymaps: Don’t touch keymap
  5. Which language do you prefer: 33 (US English)
  6. Which mode do you prefer: ö (ami a nullának felel meg, azaz Continue to start X to use GParted automatically)

Ezek után hamarosan betöltődött a GParted grafikus felülete, ami simán látta az USB-s diszket és gyerekjáték volt vele kattintgatva létrehozni az ext3-ra formázott partíciót.

Guglizás közben belefutottam néhány fájlrendszer meghajtóba, melyek segítségével Windows alól közvetlenül is elérhetjük a Linuxos partíciót. Nem próbáltam ki őket (nem szívesen telepítek drivereket), de még hasznos lehet:

A fájlrendszer váltás a jelek szerint segített, azóta a Windows Explorer és a Samba is vígan muzsikál.

 

Technorati-címkék: ,
Kategóriák:Uncategorized Címkék:

A Connect igenis működik

Időnként én is szoktam szapulni a Microsoft Connect szolgáltatását, hiszen nem egyszer előfordul, hogy az ember beküld egy hibajelenséget, amire visszajön a By Design, Won’t fix, Postponed vagy valami hasonló válasz. De legyünk őszinték, ki nem állított még be hasonló választ a saját bug trackerében? És akkor egyszer csak jön egy Closed as Fixed válasz, ami elsöpör minden korábbi kellemetlen élményt.

November elején írtam arról, hogy milyen szomorú, hogy az IIS ApplicationPooldentity nem lehet SQL Server Agent job owner, mert elbukik a felhasználói fiók ellenőrzésén. Akkor be is küldtem ezt a hibát a Connectre, hogy legalább nyoma maradjon. Egy héten belül jött a standard “thank you – we are investigating” válasz, majd kértek további infókat, aztán a szokásos csönd, el is felejtettem a dolgot. Aztán most kapom a szívderítő választ:

Hey György
I just wanted to update you that the issue was fixed and you should see it in next major release, you actually can test it on SQL12 RC0 pre-release.
Thanks
Alex Grach [MSFT]

Mindezt úgy, hogy mindössze heten szavaztak erre a hibára (köszönöm mindenkinek). Like!

Szóval íme, itt az élő példa, hogy a Connect != /dev/null. Ha hibát találtok, küldjétek be!

 

Technorati-címkék: ,,
Kategóriák:Adatkezelés Címkék:, ,

JSON sorosítás

Már régóta nyilvánvaló, hogy az AJAX a múlté, hiszen AJAJ van helyette. Kezdetben azért volt ez így, mert kín és szenvedés volt az XMLHttpRequest objektumot alacsonyszinten matatni, de aztán jött a jQuery és azóta minden rózsaszín. Az XML-t azonban teljesen jogosan leváltotta a JSON és azóta az Ajax elnevezés már nem is egészen helytálló.

Persze mióta mindenki JSON-t használ a kliens-szerver közötti kommunikációra, egyre gyakrabban merül fel a kérdés, hogy hogyan állítsunk elő szerver oldalon JSON-t és hogyan dolgozzuk fel a JSON-ban bejövő adatokat? .NET-ben szerencsére (?) van erre több lehetőség is:

Már az is elég szomorú, hogy egy frameworkön belül két osztály is szolgál ugyanarra, a nagyobb gond viszont az, hogy egyik sem tökéletes. Egyrészt sajnos mindkettőben vannak hibák, amik valahogy nem akarnak kijavulni több framework verzió óta, másrészt egyszerűen nem elég rugalmasak. Szóval rájuk férne egy kis pofozgatás, webfejlesztői szemmel mindenképp. Tudja ezt az ASP.NET MVC csapat is, csakhogy egyik névtér sem hozzájuk tartozik, így jár, aki out-of-band.

De kár szomorkodni, hiszen vannak kiváló megoldások a piacon, sőt a szabadpiacon! Ott van például a Json.NET osztálykönyvtár, ami már sok helyen bizonyított, ahol a beépített osztályok kevésnek bizonyultak. Ingyenes, rugalmas és még gyors is:

json-406-json-performance

Le a kalappal James Newton-King előtt, hogy egy ilyen hobbiból megírt és még szabadon elérhetővé is tette. Köszönjük.

Akkor most egy pillanatra képzeljük magunkat az MVC csapat helyébe: van egy funkció, ami nagyon kell, ám a beépített verzió nem ideális és nincs lehetőségük megjavítani, ámde van egy külső komponens, ami jónak tűnik. A külső komponensek amúgy is beváltak már ennél a csapatnál, elég csak a jQuery-re, jQuery Validationre és Modernizr-re gondolni, amik megjelennek a projekt sablonokban.

Hogy mi lesz a preferált megoldás az MVC4-ben, arról kár most találgatni (és amúgy se mondhatom meg az NDA miatt). Én mindenesetre azt mondom, aki JSONozik, annak ideje megismerni a Json.NET-et…

 

Technorati-címkék: ,,,
Kategóriák:Webfejlesztés Címkék:, , ,

COMException: Illegal operation attempted on a registry key

COM is loveA COMException egy igazi klasszikus rémálom. Egyrészt ijesztő (“jajj, mit kezdjünk most ezzel?”), másrészt Champollion legyen a talpán, aki rájön, hogy igazából mi a baj. Persze a második gátlástalanul erősíti az elsőt.

Íme egy példa illusztrációként: adott egy webszerver, rajta egy ASP.NET-es alkalmazás, ami Active Directory-hoz kapcsolódik. A webhely tökéletesen működik, de a szerverre kerül egy másik web application is, ami után a DirectoryEntry konstruktor nem tud a címtárhoz kapcsolódni, helyette inkább elszáll ezzel a hibával:

System.Runtime.InteropServices.COMException (0x800703FA): Illegal operation attempted on a registry key that has been marked for deletion.

Pedig én aztán nem csináltam semmit, sem ezzel az alkalmazással, sem a címtárral, sem a registry-vel! Azért elég zavarba ejtő, az Event Logban persze semmi hasznos, a hibaüzenetben még kevésbé.

Hát akkor rajta, elő a Process Monitorral, az majd megmondja, hogy kinek melyik registry kulccsal van baja –  persze csak miután az ember leszűrte és átnyálazta a sok ezer sornyi logot. Azért előtte egy gyors apppool recycle, hátha… És bejött, azóta semmi baja a szervernek.

COM is not love.

 

Technorati-címkék: ,,
Kategóriák:Webfejlesztés Címkék:, ,

ASP.NET MVC 4 újdonságok 5 percben

logoHamarosan elérhető lesz az ASP.NET MVC 4 bétája, amit az ASPInsiders tagságnak köszönhetően már a múlt héten sikerült megszereznem. Nagyon sok kellemes újdonság van benne, közülük több is azonnal belopta magát a szívembe, ezért úgy döntöttem, hogy videó sorozatot készítek az újdonságokról. Pár részt már fel is vettem és amint feloldják az NDA-t, már teszem is ki őket a Youtube-ra.

Coming soon!

 

Technorati-címkék: ,,,
Kategóriák:Webfejlesztés Címkék:, , ,

Az ASP élt, él és élni fog

Update: Kicsit félreérthető volt a vége, ezért kiegészítettem.

Már több, mint tíz éve itt a .NET, de a mai napig előfordul, hogy valakit ki kell javítanom, hogy “az bizony nem ASP, hanem ASP.NET”. Mondhatnánk, hogy szinte mindegy is, hiszen ki a fene izzad még mindig klasszikus ASP-vel? Márpedig vannak ilyen elvetemültek, nem is kevesen! Nem is olyan rég ismét előkerült egy cég, ahol nem csak hogy eszük ágában sincs váltani, hanem folyamatosan fejlesztik tovább a régi ASP-s alkalmazást. Őszinte részvétem…

Aki hasonló cipőben jár, annak mindenképp érdemes megnézni az ASP.NET Web Pages technológiát, mert arra sokkal könnyebb váltani, és akkor már legalább ott a teljes .NET arzenál a háttérben, amiről később tovább lehet lépni.

Persze ilyenkor felmerül a kérdés, hogy meddig mehet ez így tovább? Hát ha a Microsoftot kérdezzük, akkor még legalább 10 évig, ugyanis a Windows 8 éppúgy támogatni fogja a klasszikus ASP-t, mint a korábbi verziók. Ott a Developer Preview, ki lehet próbálni. Sőt, azt is megsúgom, hogy egyelőre tervbe se vették, hogy mikor akarnak megszabadulni tőle. Bármennyire is értelmetlennek és szomorúnak tűnik, hogy még mindig vannak fejlődő klasszikus ASP-s alkalmazások, ez kiválóan mutatja, hogy ha a Microsoftnál egyszer valami bekerül a support körforgásba, akkor az jó sokáig ott is marad és lehet rá számítani.

Aggódik még valaki a Silverlightos alkalmazások jövőjéért?

Technorati-címkék: ,,
Kategóriák:Webfejlesztés Címkék:

MSG 8624: The query processor could not produce a query plan

Érdekes hibába futottunk bele már nem először: adott egy INSERT szkript, ami nagyon nem akar lefutni, az alábbi hibával örvendezteti meg a gazdáját:

Msg 8624, Level 16, State 1, Line 13
Internal Query Processor Error: The query processor could not produce a query plan. For more information, contact Customer Support Services.

Na ez az, amire az ember azt mondja, hogy könyörgöm, ez csak egy sima insert, mi ebben olyan nehéz? Úgy tűnik, hogy a probléma az idegen kulcsok és a persisted oszlopok környékén lehet, legalábbis erre utal az alábbi két Connect bug:

A hiba évek óta ismert, de azért még mindig sikerül reprodukálni, tessék csak szavazni rá, hátha egyszer megjavítják.

Szerencsére van workaround (én nem hívnám megoldásnak, de működik):

SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET CONCAT_NULL_YIELDS_NULL ON
SET NUMERIC_ROUNDABORT OFF
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON

Az utolsó csak akkor kell, ha az adatbázis 80-as kompatibilitási módban van.

Remélem sikerült ezzel megkímélni másokat is pár órányi debuggolástól.

Kategóriák:Adatkezelés Címkék:,
Follow

Get every new post delivered to your Inbox.

Join 25 other followers