Sok szenvedés, kevés haladás Azure + WCF

Hello,

A mai napon még visszatértem az Sql Azure és a WCF kapcsolat felállításához.

Megpróbáltam meg csinálni, hogy telefonról lehessen regisztrálni majd bejelentkezni az adott adatokkal. Tehát a programom loginját szerettem volna megcsinálni. Több gondba is ütköztem és nem is sikerült a haladnom ezzel kapcsolatban.
Első problémám az volt, hogy a saját hibámból kifolyólag elfelejtettem az Sql szerver jelszavamat + felhasználó nevemet. El tartott egy darabig, mire megtaláltam, hol lehet megnézni egyáltalán a felhasználó nevet.
Ha esetleg más is beleszaladna ebbe a buta hiába, akkor egy tipp:
Kiválasztva egy adatbázist, jobb oldalt található egy Show Connection String gomb, amely az alábbi információval szolgál:

Server=tcp:jo9ac2ptj6.database.windows.net,1433;Database=parkoloor;User ID=szucsd@jo9ac2ptj6;Password={your_password_here};Trusted_Connection=False;Encrypt=True;Connection Timeout=30;

Innen legalább a felhasználó nevet meg lehet tudni, szerencsére a jelszót műr innen tudtam.
Szerencsére a tábla kreálás, gyorsan és zökkenőmentesen ment query alapján. Egy észrevétel viszont, hogy amíg a varázslóból készített tábla, egyből megjelenik a baloldali felsorolásban, addig ha query-vel készítjük el, nem fog a varázsló által készítettek között megjelenni, csak később. Ez egy kicsit megzavart, de szerencsére ha újrafuttatjuk a queryt, akkor közli velünk, hogy már létezik az a tábla amit létre akartunk hozni.

Majd nekiálltam az Azure Projectnek VS-ben. Refactoringot használva átnevezgettem a project neveket.
A következő nehézségbe, akkor futottam bele, amikor az ADO .NET Entity Data Model -t szerettem volna elkészíteni a projectemhez. A már meglévő táblám alapján szerettem volna elkészíteni ezt a Data Modelt. Azonban, kitöltve a szerver kapcsolódási adatokat egy hibába futottam bele. Érdekes módon a Test Connection hibátlanul működött, tudtam válogatni az adatbázisaim között, viszont ha tovább szerettem volna lépni, akkor az alábbi error fogadott:

failed to retrieve data for this request. unknown property primaryfilepath 

Gyorsan próbáltam keresni valami megoldást de nem találtam egyenlőre. Legközelebb még a héten, ezt meg szeretném oldani, hiszen ez egy elég fontos része a dolgozatomnak. Remélhetőleg gyorsan találok rá valami megoldást.

Legközelebbi cél, hogy a reg/logint működésre bírjam és a WP7 funkciókat szépen implementáljam. Köztük a fénykép készítést, gps logolást, interface kialakítása, adatküldés és tárolás azureban.

Üdv.

Dávid

 

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.