Sztringműveletek és XML létrehozás C#-ban

Sziasztok!

Windows Phone-ra fogok elkészíteni egy szegedi menetrend alkalmazást. A menetrend adatait XML állományokban fogom eltárolni. Egy weboldal forráskódjában sikerült megtalálnom a megállók neveit és koordinátáit. A feladatom az volt, hogy ebből a forráskódból kiszedjem a nekem megfelelő szövegrészeket, a megállók neveit és koordinátáit. Ehhez írtam C#-ban egy kis programot, ami ezt végrehajtja.

Az oldal forráskódját egy egyszerű szöveges fájlba mentettem el. Ahhoz, hogy a szövegből kiszedjem a megfelelő adatokat, meg kellett határoznom egy reguláris kifejezést, ami illeszkedik a szegedi megállók nevére (később a koordinátájára). Ehhez van egy osztály C#-ban, mégpedig a Regex (Regular Expression). Continue reading

SQL Azure

Az alábbiakban egy kis ismertetőt szeretnék adni az Azure-ral kapcsolatban.

A Microsoft a Windows 7-el párhuzamosan kezdte el fejleszteni, még Windows Cloud néven. A platformot 3 fő részre lehet osztani. Windows Azure, SQL Azure és az Azure AppFabric. 
Számomra az SQL Azure lesz a leglényegesebb és az általam használt, hiszen mind a WP7 és a Silverlight programom ezt az adatbázist fogja használni.
Az SQL Azure a helyi SQL Server felhőbe vitt verziója. A két termék olyannyira kompatibilis egymással, hogy az adatbázis sikeres felhőbe migrálása után elég a connection string-et módosítani, és alkalmazásunk észre sem veszi, hogy változás történt.

Tapasztalat:

Gyors regisztráció után (90 nap ingyenes próbaverzió) használatba is vehetjük az Azure szolgáltatásait. Bejelentkezés után, egy egyszerű és látványos felület fogad.
Meglepetésemre nagyon felhasználó barát és könnyen kezelhető, egyszerűen tudunk létrehozni adatbázisokat és táblákat. Az egész webes kezelőfelület Silverlight alapú.

Ami számomra lényeges, az a kapcsolat felállítása WP7 és az SQL Azure között. Ahogy olvasgattam ez csak WCF segítségével lehetséges. WCF-ről részletesebben legközelebb írok, amikor is azzal ismerkedek meg jobban. Most csak követve egy tutorialt, létrehoztam egy test adatbázist és létrehoztam a kapcsolatot egy WP7 app és az adatbázis között.

Hasznos linkek:

http://breathingtech.com/2011/how-to-use-wcf-services-to-access-sql-azure-database-from-windows-phone-7-app-part-1/   -> Egy kicsit outdated, de mégis hasznos tutorial, a WP7 + SQL Azure kapcsolathoz, WCF-et használva.
http://www.slideshare.net/DeanWillson/windows-phone-7-wcf-and-sql-azure  -> Rövid és látványos bemutató a fennálló kapcsolatokról és az életciklusokról.
https://www.windowsazure.com/en-us/pricing/free-trial/  -> Végül pedig az ingyenes regisztráció. (bár 1 euróval beterhelik a bankkártyát, gondolom a validitás miatt.)

Legközelebb WCF szolgáltatásokkal foglalkozok részletesebben.

Üdv.
Dávid

Elvégzendő feladat

Hello!

A feladatom az elkövetkezendő 1 évben létrehozni egy Parkolóőr alkalmazást .Net alapokon.

Az első lépések a program által használt technológiák megismerése, amelyek a következőek:

Azure:
–       sql azure
–       web role

Silverlight (wp7):
–        layout
–        control
–        animations
–        térkép
–        push notification

WCF:
–          konfigrálás
–          egy, több irányú kapcsolat
–          ASP.NET-ben WCF használat
–          egyedi tipus küldése
–          hiba kezelés

Elsőként az Azure-ral ismerkedem meg, amellyel a következő postban találkozhattok.

Első feladatok – Silverlight

Az elmúlt 3-4 hét történései.

 

A Silverlight könyvet kellett röviden áttekintenem, illetve az alábbi témakörökre nagyobb figyelmet kellett szentelnem:

  • Alkalmazás életciklusa
  • Fejlesztői környezet beállítása
  • Mvvm tervezési minta
  • Animációk
  • Képek kezelése (controllok)
  • Layout vezérlők

Ezen témakörök nagy része megtalálható volt a Silverlight könyvben.

 

Az egyes témakörökről pár lényeges mondat:

  •  Alkalmazás életciklusa

A Windows 8-nál a Metro alkalmazások életciklusa nagymértékben különbözik a megszokott, hagyományos alkalmazásokétól. A lehető legjobb felhasználói élmény biztosításának érdekében az alkalmazások életciklusa feletti hatalmat a Microsoft kivette a felhasználók kezéből, és inkább a rendszer szerves részévé tette.

  • Fejlesztői környezet beállítása

A fejlesztői környezet olyan programozási eszközök, könyvtárak és beállítások csoportja, melyekkel a szoftverfejlesztés során a felhasznált programozási nyelven, vagy nyelveken létrehozott forráskódokat futás kész állapotba lehet hozni és azt tesztelni. Ez jelentheti a fordítást, vagy nem önálló programok futtatási környezetbe helyezését. Mindkét esetben a környezet általában tartalmazza a futtatókörnyezetet is a tesztelés miatt.

  • Mvvm tervezési minta
    • A Mode-View-ViewModel architektúrális mintát a prezentációs rétegben célszerű bevezetni. Ennek segítségével alkalmazásunk felhasználói felülete tesztelhető, karbantartható lesz, és jelentősen egyszerűsíti a fejlesztő és dizájner közötti együttműködését.  Ebben a megközelítési módban több elem is segíti a hatékony projektmunkát:
      • A ViewModel-ek koncepciója
      • A View-val való laza integráció
      • A ViewModel-ben exponált tulajdonságok, és parancsok, melyeket Command pattern, illetve Behavior-ök segítségével elérhetővé tettük
      • Illetve az Expression Blend és a ViewModel-jeinkbe beépített tervezésidejű támogatás.
  • Animációk
    • Animációk alkalmazásával, sokkal szórakoztatóbbá és látványosabbá tehetjük a felületet, életre kelthetjük azt. A Silverlight segítségével számos lehetőségünk van színek animálására, különböző időzített mozgások elkészítésére, vagy akár oldalak közötti átfedések kialakítására. Minden animáció azonos elv alapján működik. Ahhoz, hogy animációt tudjunk létrehozni, először is szükségünk lesz egy Storyboard objektumra, amely definiálja, hogy a létrehozandó animációkat mely objektumra szeretnénk érvényesíteni, illetve azon belül is melyik tulajdonságra. Megszabja az animáció viselkedését is — milyen hosszan játsszuk le, ismételjük-e meg, ha véget ért, stb. —, és még sok más dologban segít nekünk. Az Expression Blend egyik legnagyobb erőssége az animációk készítésében rejlik.
  • Képek kezelése (controlok)
    • A főbb controlok Silvterlightban:
      • UserControl
        • A UserControlok leggyakoribb használati területe a nézetek világa. A komplex felhasználói felület kisebb, önálló funkcionális egységekre való darabolásában játszanak fontos szerepet. Természetesen klasszikus értelemben vett, egyszerűbb vezérlők létrehozására is használhatók, de a testreszabhatóságnak komoly korlátokat szabnak.
      • Custom Control
        • Custom Controlok segítségével a legegyszerűbb vezérlőktől a legkomplexebbekig bármit készíthetünk, biztosítva az utólagos teljes testreszabhatóságot. A vezérlő megjelenése és a hozzá tartozó logika egymástól szinte teljesen elkülönül.
  • Layout vezérlők
    • Grid: a legsokoldalúbb és ezáltal leggyakrabban használt konténer. Ez a vezérlő lehetővé teszi tetszőleges számú és méretű oszlop illetve sor definiálását. Alapértelmezés szerint egy sor és egy oszlop létezik, amennyiben többet szeretnénk, megfelelő számú RowDefinition és ColumnDefinition objektumot kell készítenünk. A ShowGridLines tulajdonság állításával láthatóvá tehetjük a Grid oszlopait és sorait határoló vonalakat. Ha egy-egy vezérlőnek egynél több cellára van szüksége a Grid-en belül, ekkor a ColumnSpan és RowSpan tulajdonságokkal beállíthatjuk, hogy az hány sort/oszlopot foglalhat.
    • Canvas: lehetővé teszi, hogy explicit módon koordináták segítségével pozícionáljuk a vezérlőinket. Az x/y koordinátákat a Canvas.Left illetve a Canvas.Top attached propertykkel állítjuk be, amelyekkel a Canvas bal oldalának és felső részének a bounding boxtól való távolságát szabályozzuk. Amennyiben ezeket az értékeket nem adjuk meg, akkor automatikusan a bal felső sarokba (0;0) pozíciónál.
    • StackPanel: segítségével vízszintes vagy függőleges sorba rendezhetjük a vezérlőinket. Az Orientation tulajdonsággal vízszintes irányba állíthatjuk az elemeket.
    • WrapPanel: nem része az alapcsomagnak, a Silverlight Toolkit keretében juthatunk hozzá. Hasonló szerepet tölt be, mint a StackPanel, viszont van egy apró különbség, mégpedig az, hogy a lehető legoptimálisabban kitölti a rendelkezésre álló helyet, vagyis a vezérlők több sorban is megjelenhetnek. Lehetőségünk van arra is, hogy minden elem számára uniform méretet adjunk meg, amely akkor is érvényes marad, ha a vezérlőnek így kevés hely jut. Erre a célra az ItemHeight és ItemWidth tulajdonságokat használhatjuk. A FlowDirection tulajdonsággal a vezérlőelemek megjelenítésének sorrendjét szabályozhatjuk. Ez csak soronként érvényes, nem globálisan, vagyis ha egy elem eredetileg az utolsó sor utolsó tagja lenne, az nem kerülhet fel az első sorba.
    • DockPanel: segítségével a vezérlőelemeket egy-egy oldalhoz „ragaszthatjuk”.

 

 

A legtöbb információt a Silverlight könyvből nyertem. A könyv elejét (az első 7 fejezetet) részletesen néztem át, az utolsó fejezeteket inkább átlapoztam. De a könyvet sikerült megszereznem elektronikus formában, így a későbbiekben is utána lehet nézni dolgokat, akár a maradék részeket is el lehet olvasni.

Hasznos dolgokat találtam a devportal.hu-n. Szerintem ezt az oldalt a későbbiekben is sűrűn meglátogatom.

Megvalósítandó célok

Sziasztok!

A feladatom az, hogy egy játékvezérlőt készítsek, ami képes feldolgozni a Kinectről érkező adatokat, és átalakítani input jellé egy játék számára.

A fő feladat előtt készítenem kell kisebb alkalmazásokat, amelyek bemutatják a Kinect lehetőségeit. A főbb témák:

  • Az RGB kamera használata: Egy egyszerű alkalmazás, amely bemutatja, hogy hogyan kell használni a kamerát. Megjeleníti a képet és készít egy fotót.
  • Az IR mélységi szenzor használata: Az alkalmazás megjeleníti a mélységi adatokból készült képet, és kiírja a bal kéz távolságát az eszköztől.
  • Skeletal Tracking bemutatása

A későbbiek folyamán az alkalmazások listája és funkcióik bővülni fognak.

Üdvözlettel: Álb Csaba

Többnyelvű alkalmazás

Valószínűleg minden alkalmazás számára előny, ha a kezelőfelület a felhasználó számára automatikusan a saját nyelvén jelenik meg. Ezt például megállapíthatjuk onnan, hogy megnézzük a felhasználó gépének nyelvi beállításait, amit a CultureInfo.CurrentCulture.Name árul el nekünk, majd betöltjük az ennek a kódnak megfelelő nevű mappában lévő Resources.resw állományt amely NameValue – Comment” értékhármasokból áll. Ezekben tároljuk a különböző nyelvekhez tartozó stringek nevét és értékét.

Az automatikus betöltést a ResourceLoader végzi, melynek a GetSrting(“Name“); metódusával visszaadhatjuk a string értékét, amit mondjuk betöltünk egy TextBlock.Text attribútumába.

Ha viszont a jelenlegi nyelvi beállítások nem megfelelőek és a felhasználó más nyelven szeretné használni az alkalmazást, arra is lehetőséget kell adni, például egy egyszerű combobox segítségével, ahol az comboboxitemek “value” attribútumába írva a nyelvi kódot, átadhatjuk az kiválasztani kívánt nyelvet, és ezzel frissítjük a felhasználó felületet például a SelectionChanged eseménykezelésében. (Ha ez nem passzol az alkalmazás felületére, lehetőség van megvalósítani az alkalmazás Beállításainál a CharmBaron is.)

Ekkor a nyelvet egy kontextusba betöltve, a megfelelő elérési útvonalat megadva, annak GetValue(“Name“, context).ValueAsString; metódusával kaphatjuk meg a kívánt string értékét.

Fontos szem előtt tartani, hogy ha valaki egyéb mértékegységeket is szeretne használni, akkor nem elég csak a nyelvet meghatározni, hanem az országot/régiót is. Például “en” kódú, vagyis angolul beszélő ország több van, de nem mindegyik használ amerikai (“en-US”) mértékeket.

Rajzolás

Sziasztok!

Most megnézzük hogyan is lehet rajzolni a canvasra html5-ben javascript segítségével.

Először is hozzunk létre egy új projektet a szokásos módon majd nyissuk meg a default.html  fájlt és adjuk hozzá a következő sort a body-hoz:

<canvas id=”canvas”></canvas>

Ha ezzel megvagyunk a default.js fájlra lesz szükségünk amihez adjuk hozzá az initialize() függvényt az „app.oncheckpoint = function (args) {“ sor elé:

function initialize(){

}

A függvényben akkor inicializáljuk is a canvasunkat:

canvas = document.getElementById(“canvas”);
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
context = canvas.getContext(“2d”);

Ezzel letre is hoztunk egy képernyő mértű rajzterületet amire rajzolhatunk különböző dolgokat pl: vonalat téglalalpot…

Néhány példa:

Vonal rajzlása:

context.strokeStyle = ‘#0f0’; // a vonal színe
context.moveTo(20, 20); //innen indul a vonal rajzolása
context.lineTo(100, 30); //ide húzzuk a vonalat
context.lineWidth = 3; //vonalvastagság
context.stroke(); //végül a rajzolás

kitöltött téglalap rajzolása:

context.fillStyle = ‘#00f’;
context.fillRect(600, 50, 100, 200);
context.lineWidth = 5;
context.stroke();

görbe rajzolása:

//gorbe rajzolasa

context.moveTo(20, 50);
context.quadraticCurveTo(190, 700, 400, 50);
context.lineWidth = 1;
context.stroke();

Végül ahhoz, hogy múködjön is a még egy dologra less szükségünk mégpedig meg kell hívnunk az inicialize() függvényt ezt pedig a következőképp tehetjük meg:

document.addEventListener(“DOMContentLoaded”, initialize, false);

ezt a sort kell betennünk mondjuk az “app.start();” sor elé.

Ha meindennel megvagyunk futtasuk a programunkat és ha minden jól megy akkor a következőnek kell megjelennie elöttünk:

a forrásfájl letölthető innen: CanvasDemo1

Üdv.: Balázs

Alapvető vezérlők

Osztályhierarchia: A legtöbb fejlesztői környezetben egyértelműen azonosíthatók a vezérlőelemek. A silverlight-ban nem elég egyértelmű, ugyanis sok elemet is kezelhetünk vezérlőként. A hierarchia legalján a DependencyObject osztály áll. Fő feladata az adatkötés. Második szinten a UIElement áll. Ez felel a vizuális megjelenítésért. UIElement-ből származik a FrameWorkElement, ami lényegében kiterjeszti a fölötte lévők képességeit. Ilyen például a TextBlock osztály. Erre nem vonatkozik a VerticalAligment és a HorizontalAligment tulajdonságok. Csak a Control osztályból közvetlenül származhatnak. A FrameWorkElement-ből származik a Panel osztály is. A hierarchia legalján található a Control osztály. A vezérlők őse.

Layout Management – Silverlight

Amikor Layout Management-ről beszélünk, akkor az alkalmazásunk felhasználói felületén megjelenített vezérlőelemek elrendezéséről beszélünk.

Pozicionálás: Az abszolút és a dinamikus pozicionálást támogatja. Leíró kód áttekinthető. Minden silverlight program egy konténer elemre építkezik. A konténerek a vezérlőelemeket tárolja. Több féle vezérlőelem létezik pl.: Canvas,Grid. Amennyiben nem adunk meg neki paramétereket, akkor kitöltik a rendelkezésükre álló teret, ez alól egy kivétel van, mégpedig ha a konténer elem a canvas. Pozíciók finomhangolására is lehetőség van. Minden vezérlőben másképpen történik. Létezik egyszerűbb módszer is. A VerticalAligment és a HorizontalAligment tulajdonságpáros.

Grid: A legsokoldalúbb és a leggyakrabban használt konténer. Tetszőleges számú sor és oszlop definiálását. Alapértelmezés szerint egy oszlop és sor van definiálva. Többet szeretnénk, akkor a RowDefinition és ColumnDefinition objektumot kell elkészíteni.A ShowGridLines segítségével láthatóvá tehetjük az oszlopok és sorok elválasztó vonalait.

Canvas: lehetővé teszi, hogy explicit módon koordináták segítségével pozicionáljuk vezérlőinket. Nem veszi figyelembe a böngésző méretét. Az x/y koordinátákat a Canvas.Left illetve a Canvas.Top attached propertykkel állítjuk be. Itt különféle beállításokat végezhetünk el. ZIndex segítségével beállíthatjuk például,hogy a vezérlő eltakarhat-e egy másikat.