János's profileJános JankaPhotosBlogListsMore ![]() | Help |
|
April 23 Microsoft Sync Provider modelMint azt már korábban említettem, a Sync Framework nem csak managelt kódból használható. A Microsoft a framework fejlesztése során szem előtt tartotta azt is, hogy ez egy olyan technológia, amit natív alkalmazásokat fejlesztő cégek számára is elérhetővé kell tenni. Sőt mi több, van rengeteg MS szoftver a listán, mint például a Windows Live programok, illetve Office programok, melyek szintén natív kódalapra épülnek és szükségük lehet hasonló technológiák alkalmazására. Éppen ezért a Sync Framework azon komponensei, melyek natív fejlesztők számára is értékesek, mint pl. provider framework, COM osztályokban vannak megvalósítva és managelt wrapper osztályok COM interopon keresztül kommunikálnak ezekkel. Persze léteznek a Sync Frameworknek olyan részei is, melyek csak managelt környezetben léteznek, mint pl. az ADO.NET adatforrások szinkronizálását megvalósító DbServerSyncProvider. Íme a fájl szinkronizációra egy natív Visual C++ példa. További rossz hír Delphi Win32, de még C++Builder fejlesztők számára is, hogy egyenlőre a .NET-es COM interop a legkézenfekvőbb megoldás a teljesen natív VC++-os COM könyvtárak helyett, mivel a típuskönyvtár importálás ezeknél a könyvtáraknál nem működik, a szükséges header fájlok átfordítása pedig még nem történt meg ezekre a nyelvekre. Tehát ott tartunk, hogy provider modell hierarchia. Na vajon, hogyan is nézhet ki ez a provider model? Rettenetesen nagy PowerPoint szakértelmemet megkamatoztatva megpróbáltam vizuálisan is formába önteni ezt, tekintettel a három fő providerre, amit a Microsoft a jelenlegi CTP-ben kulcsra készen kínál:
Providerek szerepei
Szerintem ebből a rövid kis áttekintésből le is szűrhetjük azt a tanulságot, hogy egy végletekig kidolgozott általános szinkronizálást megvalósító platform szintű megoldásról van szó. Átvéve az egészet a gyakorlatba sem túl ördöngős a dolog, maximum amikor egyedi providereket, illetve saját megvalósítású metaadattárolást akarunk készíteni képes némileg megbonyolódni a dolog. April 22 Microsoft Sync Framework vs Google GearsBehozok ide egy kis üzletpolitikát is, ha nem sértelek meg vele titeket: Láttam, hogy már itthon is azzal próbálnak pedálozni egyesek, hogy a Microsoft monopóliumi helyzetét kihasználva megcsinálta a Silverlightot, hogy a Flash-t kiszorítsa a piacról, most pedig ugyanez a helyzet a Sync Frameworkkel. A probléma ezzel a dologgal csupán csak annyi, hogy megint teljesen felesleges összehasonlítgatni a kettőt, mivel ég és föld a különbség közöttük, de még céljukat tekintve is. Először is, a Google Gears nem más, mint egy sima böngésző plugin, míg a Sync Framework egy platform, ami lehetőséget ad bármilyen adatforrás bármilyen adatának bármilyen hálózaton keresztül történő szinkronizálására. Már ha ennyit mondok is elég lenne, de folytatom tovább. A Sync Framework egy általános célú eszköz nemcsak a lokális és cloud-ba történő adatszikronizáció megvalósításához, hanem az offline képes alkalmazások megvalósításához is, és nemcsak alkalmazások közötti adatszinkronizációra való, hanem szolgáltatások és eszközök között is képes működni. Továbbá alapból szolgáltat providereket ADO.NET, fájl/mappa szinkronizáció és RSS/ATOM feed alapú szinkronizáció megvalósításához, mely providerek bővíthetőek egyénileg is. Innentől kezdve szerintem értelmetlen is bármilyen hasonló jellegű vitába belefolyni. April 21 Microsoft Sync Framework bevezetőMegmondom őszintén, első látásra (a tűz hevében), nem tudtam jobban kifejezni átütő erejét ennek a technológiának, mint két példa bemutatásával. De természetesen azt is illik szemügyre venni, hogy az egész mögött mi húzódik meg, így hát megróbálok most egy tömör és jól érthető osszefoglalót adni arról, hogyan is akar ez működni. Mellesleg megjegyzem, hogy a korábbi fájl szinkronizációs példám megoldására a Microsoft kiadott egy SyncToy 2.0 nevű alkalmazást, ami lehetőséget ad fájlok szinkronizálására mappák, illetve számítógépek között. Természetesen ez is a Sync Framework Team alkotása és szorosan kapcsolódik is ahhoz. Tehát, mint mondottam korábban, a Sync Framework egy átfogó vagy inkább átütő erejű platform az összes szinkronizációval kapcsolatos probléma kiküszöbölésére, legyen szó bármilyen adatforrásról, bármilyen adattípusról, bármilyen hálózatról. Használva ezt a technológiát, képesek vagyunk olyan web képes offline alkalmazások készítésére, melyek hálózat nélkül is tökéletesen képesek üzemelni. Ennyi volt a reklám, most nézzük a koncepcionális megvalósítást: Mint korábban is említettem, a kulcs aspektusa a Sync Frameworknek az, hogy képesek vagyunk saját szinkronizációs providerek írására => a Microsoft Sync Framework egy provider alapú modellre épül. Mit nevezünk jelen esetben szinkronizációs providernek? A Microsoft Sync Framework tartalmaz számos providert ami támogatja a közös adatforrásokat. Bár mi magunk is képesek vagyunk írni saját providereket ezekhez az adatforrásokhoz, a Microsoft mégis ajánlja, hogy ha lehetséges, használjuk az általuk készítetteket. Elvileg így rengeteg időt spórolatunk meg magunknak, más részről pedig újrahasználhatóvá válik a már létező kód. Mint korábban említettem, jelenleg három provider áll a fejlesztők rendelkezésére a CTP-ben:
Ez a lista természetesen mint korábban mondottam, ízlés szerint bővíthető. A provider alapú megközelítés egyik lényeges előnye, hogy lehetőségünk nyílik különböző típusú providerek között is szinkronizálni, persze megkötések azért vannak ebben az esetben. A technológia megértésének érdekében első körben tisztáznunk kell néhány alapvező Sync Framework fogalmat: Szinkronizációs résztvevők (Participants) A Sync Framework megkülönböztet típus szerint különböző résztvevőket. Egy résztvevő nem más, mint kombinációja egy providernek és a hozzá társított replikának. Résztvevők típusai (Participant types) Három típusát különböztetjük meg a résztvevőknek: full, partial, simple. Ez a megkülönböztetés lényeges, mivel ez árulja el nekünk azt is például, hogy ők képesek lesznek-e tárolni állapot információkat, amik a szinkronizáció megvalósításához szükségesek, illetve hogy mi képesek vagyunk-e futtatni a providert direktbe az eszközről. Természetesen a fentről lefele elv érvényes, így egy full participant lehet partial és simple is.
Sync Framework mag komponensek Adatforrás (Data Source) Ez az, ami tárolja az adatokat, mely lehet egy relációs adatbázis, egy fájlrendszer, egy webszolgáltatás, vagy akár egy saját egyéni adatforrás is. A metaadatok tartalmaznak információkat az adattárolóról és az objektumokról, illetve a velük kapcsolatos állapot információkról. Az egész provider alapú megközelítésnek ez az alap építőköve. Természetesen nincs korlátozva, hogy a metaadatokat hol szeretnénk tárolni, így az lehet akár egy fájl, egy adatbázis, vagy a létező replika adattároló is. A Microsoft itt is előre gondolkodott és alapból ajánl nekünk egy teljes metaadat tároló implementációt, amit használva nem kell gondolkoznunk a metaadatok tárolási módjának megvalósításán. A metaadat tároló három részre böntható szét:
Amit a fentebbi ábrán láthatunk egy szinkronizációt megvalósító folyamat leírása. Ugyanez a folyamat kétszer folyik végbe, ha a szinkronizáció kétirányú (bi-directional), egyszer a forráson, egyszer pedig a célon. Röviden arról, hogy mi micsoda: Sync Session Initiated with Destination Destination Prepares and Sends Knowledge Destination Knowledge used to Determine Changes to be sent Change Versions and Source Knowledge sent to Destination Local Version Retrieved for Change Items and Compared against Source Version and Knowledge Conflicts are Detected and Resolved or Deferred
Destination Requests Item Data from Source Items are applied at Destination Összegezve minden szépet, elmondhatjuk, hogy a Microsoft Sync Framework megteremti mindazt az eco szisztémát, ami ahhoz szükséges, hogy offline képes alkalmazáokat készítsünk most és a közeljövőben. Használhatjuk a beépített providereket, vagy írhatunk saját providereket, és a legfőbb, hogy az egész Sync Frameworkot extrém mértékű beágyazhatóság és skálázhatóság jellemez. Továbbá nem elhanyagolandó tény az sem, hogy ezt Win32 fejlesztők is használhatják natív COM könyvtárakon keresztül. April 19 Microsoft Sync Framework v2.0 CTP1 + Microsoft Live Mesh (FeedSync)Most egy érdekes témát hozok a színre, méghozzá nem is haszontalan dologról lesz szó. Mennyiszer volt már baj azzal, hogy nincs univerzális megoldás a különböző forrásból származó adatok szinkronizálásához? Elmondhatjuk, hogy állandóan. Én pl. másból se állok ki, mint saját szinkronizációs algoritmusok megalkotásából a heterogén adatforrásból és különböző helyekről származó adatokhoz. Nagy szó lesz amit most fogok mondani, de mindez a múlt! A Microsoft Sync Framework egy univerzális megoldást biztosít a korrekt szinkronizáció megvalósítására, legyen szó bármilyen típusú adatforrásról, bármilyen típusú adatról, és bármilyen típusú hálózatról. Elérkezett a web képes offline desktop alkalmazások ideje! De még mielőtt tovább mennénk, sokan felteszik azt a kérdést, hogy minek ide Sync Framework, amikor ott a Live Mesh, melybe szintén lehetőségünk van nemcsak fájlok, hanem bármilyen .NET-es objektum szinkronizálására (lsd. Live SDK MeshObject). Nézzük akkor meg, hogy miért mégsem ugyanaz a kettő: Először is a Microsoft Sync Framework egy átfogó szinkronizációs platform, mely független mind az adatforrástól, mind az adat típusától, mind a protokol és a felette lévő hálózattól. Egy provider alapú modellre épül, amely rugalmasan egyedi providerekkel bővíthető. Alapértelmezésben a Microsoft három fajta provider-t bíztosít a jelenlegi CTP-ben:
Tehát, míg a Live Mesh a FeedSync technológiát használja, hogy szinkronizálja adatainkat/fájlainkat a mesh és az eszközök között, addig a Sync Framework egy platform, ami lehetőséget ad arra, hogy bármilyen providert írva, bármilyen közegen keresztül szinkronizálhassunk úgy, hogy közben a szinkronizáció összes nyűgje/baja lekerül a vállunkról (mint pl. törölt objektumok figyelése, biztonság, stabilitás, offline képes működés, stb.). Ez utóbbi állítás természetesen él a Mesh esetében is. Ha pl. van egy adattárolónk, akkor lehetőségünk van akár egyéni providerek segítségével szinkronizálni az abban lévő adatokat/fájlokat más eszközök között, egyszerre akár többel is, sőt, akár a mesh-el is! Mégis, ami mindkettőben közös, az a FeedSync. Mivel a FeedSync RSS / ATOM alapú szinkronizáció, semmi akadálya nincs, hogy működjön ADO.NET Data Services (Astoria) felett is. Ehhez a VS kap külön designtime támogatást is. A további száraz, első mély vízbeugrás helyett inkább nézzünk meg két példát, amit így kutyafuttában összeütöttem, csak hogy megjöjjön a kedvünk a használatához. Először is szükségünk lesz a következőkre: Feladatok: 1. Csináljunk egy egyszerű fájl szinkronizációs alkalmazást, amely a Sync Frameworkot használva szinkronizál két mappa között. Ehhez első körben hozzunk létre egy új konzol alkalmazást, majd adjunk referenciát a következő assembykre: C:\Program Files (x86)\Microsoft SDKs\Microsoft Sync Framework\v1.0\Runtime\x86\Microsoft.Synchronization.dll C:\Temp\Sync\Source using System; Ha mindent jól csináltunk, akkor a source mappába helyezett fájl átszinkronizálódik a dest mappába automatikusan. Ezt követően nevezzük át ezt a fájlt a célmappában, majd szinkronizáljunk, és észrevehetjük, hogy a forrás mappában is át fog neveződni a fájl. Harmadik lépésként pedig töröljük le a célmappából ezt a fájlt, szinkronizáljunk, és észrevehetjük, hogy a forrás mappából is törlődni fog a fájl:
2. Nézzünk akkor most egy mesh példát is. Példának okáért, bizonyítsuk, hogy a mesh nem csak fájlok szinkronizálására való, de még előtte nézzük meg, hogyan kérhetjük le pl. a kontakt információkat a live framework segítségével. Először is, úgyszint hozzunk létre egy konzol alkalmazást, majd adjuk hozzá a következő referenciákat a projekthez: using System; using System.Net; using Microsoft.LiveFX.Client; class Program { static void Main(string[] args) { var loe = new LiveOperatingEnvironment(); loe.Connect(new NetworkCredential("email@msn.com", "*****"), null); foreach (var contact in loe.Contacts.Entries) Console.WriteLine(contact); } } Ez jelen esetben nálam pl. a következő eredményt produkálta: Tehát láthatjuk, hogy a Live SDK segítségével az összes kontakt információhoz, belértve a profil információkat is könnyedén hozzájuthatunk. Később mutathatok ettől extrémebb példákat is, de most nem volt se kedvem, se időm UI-al szórakozni. De térjünk vissza a mesh-re! Először is, szinkronizáljunk egy szimpla szöveget a mesh-be. Mivel említettem, hogy ez RSS/ATOM feed alapú (hivatalos nevén FeedSync), ezért egy kicsivel más megközelítést igényel: using System; using System.Net; using System.Linq; using Microsoft.LiveFX.Client; class Program { static void Main(string[] args) { // kapcsolódás a cloud-hoz var loe = new LiveOperatingEnvironment(); loe.Connect(new NetworkCredential("email@msn.com", "*****", "https://user-ctp.windows.net"), new LiveItemAccessOptions(true)); // ellenőrizzük, hogy sikerült-e a kapcsolódás if (!loe.IsRunning()) { Console.WriteLine("Nem sikerült kapcsolódni."); return; } // létrehozunk egy új mesh objektumot var meshObject = new MeshObject("MyMeshObject"); var dataFeed = new DataFeed("MyDataFeed"); var dataEntry = new DataEntry("MyDataEntry"); // beállítjuk a saját adatunkat dataEntry.Resource.SetUserData<string>("Egy sima karakterlánc."); // hozzáadjuk a mesh-hez loe.Mesh.MeshObjects.Add(ref meshObject); meshObject.DataFeeds.Add(ref dataFeed); dataFeed.DataEntries.Add(ref dataEntry); // szinkronizálunk meshObject.Update(); // megjelenítjük az eddigi összes saját mesh objektumot foreach (var mo in loe.Mesh.MeshObjects.Entries.Where( mobj => mobj.Resource.Title == "MyMeshObject")) { Console.WriteLine(mo); foreach (var df in mo.DataFeeds.Entries) { Console.WriteLine("\t{0}", df); foreach (var de in df.DataEntries.Entries) { Console.WriteLine("\t\t{0}", de); Console.WriteLine("\t\t\t{0}", de.Resource.GetUserData<string>()); } } } } } A mesh-be szinkronizált tartalom: Ugyanilyen könnyedséggel tudunk egyébként fájlokat szinkronizálni a mesh-be. A következőkben fogok mutatni erre is példát, de kedvcsinálónak szerintem mára ennyi is elég volt. Jó szórakozást hozzá! April 15 Hajrá Magyarország!Most sokan megfognak kövezni biztos, hogy behozom a politikát ide, de ezt nem tudtam kihagyni. A fidesz most beletrafált a közepébe: Új választás a megoldás (Navracsics Tibor). Őszintén, ha az én fejemhez ezeket a vádakat vágnák hozzá (most teljesen mindegy, hogy jobb, vagy bal, itt konkrét tényekről, méghozzá jól bizonyítható tényekről beszélünk), a bőr lesülne a képemről, nemhogy még ott üljek és egy egész ország sorsát én döntsem el. Remélem mindenki tisztában van vele, hogy június 7.-én európai parlamenti választás lesz és kire kell voksolni. Nem csodákat kell várni a fidesztől sem, csak egy jobb irányadást. A megszorító politika csak egyre mélyebbre fogja vinni az országot, a középréteg is elszegényedik, kialakul az a helyzet, amikor lesz egy nagony gazdag és egy nagyon szegény réteg. A fizetések értéküket vesztik, ez már most is tapasztalható közvetlenül cégen belül is, melynek természetesen vannak más jellegű következményei is, mint pl. az alkalmazottak egyre kevésbé látják el feladatukat (most élő példákról van szó konkrétan), az ügyfél egyre elégedtlenebb és persze mindenki több pénzt követel, hiszen mindez a többi ágazatra is kihat. Ahogy a fidesz mondja, válságot kezelni, megszorításokat bevezetni nem lehet gazdaság élénkítő csomag nélkül. Mi ez? Pl. adó csökkentés. Hiszen ha csökkentjük az adó-t, “kifehérítjük” a gazdaságot, és egyre több adozó lesz az országban, mert nem a csillagos eget veszik el az embertől adó címén, akkor sokkal több bevételre lehet szert tenni, mint a megszorításokkal, amik mint kiderültek, még csak töredékét sem képesek az egész költségvetési hiánynak fedezni => egyre több megszorítást kell majd bevezetni, a végén pedig már a csillagos ég sem lesz elég. De ezen kívül ezernyi érvet felsorolhatnék még a fidesz programja mellett, innentől már a döntés a kedves olvasón áll, de annyi biztos, az a bizonyos Bajnai csomag jobban fog fájni az átlag embereknek, mint azt most el tudnák képzelni (csak néhány dolog: 13. bér/nyugdíj kiiktatva, szociális támogatás /lakás hitel, stb./ kiiktatva, családi pótlék 2 évre befagyasztva, de még sorolhatnám tovább, mert ez csak a kezdet, ahogy tisztelt új miniszterelnökünk is fogalmazott). Jobban fog ez fájni, mint el tudnátok képzelni! Persze azzal is tisztában vagyok, hogy vannak emberek, akik tesznek az egészre, havonta zsebre vágnak pár százezret, sőt milliókat, de azért megkérném őket is, hogy képzeljék bele magukat egy szegény, sőt most már egy közép rétegű ember életébe is. Megmondom őszintén kerek-perec, hogy az a baj ezzel a világgal, hogy minden ember önző. A saját érdekét nézi, s mindaddig amíg maga át nem éli azt, amit a másik, nem képes mégcsak fel se fogni, mit jelent az. Itt most nemcsak az elszegényedésről beszélek, hanem bármiről ebben a világban, még akár az én fogyási problémám is. Mikor tudja/tudta valaha is elképzelni egy olyan ember, aki soha életében nem volt túlsúlyos, hogy milyen is az, milyen hátrányai vannak, stb… Soha! Értitek, soha! Ha a bőrödön tapasztalod, akkor igen. Így a végére azért még belinkelnék néhány dolgot, csak hogy kielégítsem azokat is, akik úgy vélik/vélték, hogy a fidesznek nincs programja. Dehogy nincs! Csak hülyék lennének megmondani az ellenzéknek. Ez olyan lenne, mintha a google adna szakmai tanácsokat az ms-nek, hogy srácok, így kell webes keresőmotort fejleszteni. LOL Kész vicc ez a MSZP-SZDSZ koalíció! De nem is fecsérlem erre a szót tovább, a tények magukért beszélnek: Mit kell tudni? C# to OxygeneMár ilyen is van? :) April 09 Model-First Development with the Entity Framework 4.0Na, ez az ami hiányzott már. Végre a designer is támogat mindent, beleértve a komplex típusokat is, illetve lehet a modellből adatbázist generálni. April 06 IE8 – Ez így még gyenge, de nagyonMost már nagyon felidegesített, úgyhogy muszály leszek leírni. Előre mondom, nálam semmi toolbar, meg hókuszpókusz nincs feltelepítve a silverlighton és flashen kívül, és így is az IE “néha” bizonyos oldalaktól, különösen a live space-s oldalaktól csontra fagy. Na most semmi közös pont nincs a dologba, mert nemcsak az én, hanem mások oldalaitól is, amin se flash, se silverlight nincs. De a poén, hogy ezt nem mindig csinálja ezekkel az oldalakkal sem, csak amikor éppen rájön. Qva idegesítő. Másik: Chikk örömére, megnéztem az Opera-t is. Az mindig is jobban tetszett a FireFox-ban és az Opera-ban is, hogy az oldal villogás mentesen képes frissülni. Az IE-ben ezen még mindig nem változtattak, pedig szerintem nem lenne olyan nagy dolog megcsinálni. Arról nem beszélve, hogy az Opera tényleg sokkal gyorsabbnak tűnik, mint a másik kettő. Egy szépséghibája van, nincs benne Silverlight Media Player. De esküszöm, ha ez így folytatódik én is átpártolok. Az IE8 rosszabb lett, mint a 7 volt user experience szempontjából (számomra). Az leglább nem fagyott, de lehet másnál az is csinált ilyet. Elsőre persze én is úgy voltam ezzel, hogy megesik, de az, hogy napi 20x lefagy egy tab benne, ja és ilyenkor csak a lelövés segít az egészen, totál kiábrándító. Ebben Mező Gabi barátomnak igaza van, sokkal jobb az Opera és gyorsabb is (most, hogy megnéztem). Maga a Silverlight 2.0 is megy már, csak a Silverlight Media Player nem. Mellesleg megértem most már a tab problémát is. Az Opera tényleg atomgyorsan nyit egy új tab-ot. Arról nem beszélve, hogy sokkal kényelmesebb, még a görgetés is kifinomultabb benne, mint a többi böngészőben. Na meg élő miniatűr képek ha a tab felé megyek, stb. Ahogy Bandi mondaná, a szoftver ergonómia is sokat számít, és ez az Opera-ban sokkal jobban teljesül, mint a többi “hokkendáréban”. Sajnos akár tetszik, akár nem, ez a véleményem az IE8-ról a tapasztaltak alapján. Ugyanezt az IE7-ről nem mondtam volna el (kivéve a villogást). Én kedveltem mindig is az IE-t, de ez így már nekem is sok. Ilyet azért a többi böngésző még sose csinált nekem, bármi is lett volna feltelepítve rá. B. megoldás lehet az lesz, hogy hozzáadok minden oldalt a kompatibilitási nézethez, hátha úgy nem fagynak ki a tabok amikor úgy tartja kedvük. Hála az égnek a Cooliris-t megtarthatom. |
|
|