Windows Mobile Support

  • Subscribe to our RSS feed.
  • Twitter
  • StumbleUpon
  • Reddit
  • Facebook
  • Digg

Friday, 27 April 2012

Directory.GetFiles - odd result

Posted on 01:23 by Unknown
Cei mai multi dintre noi am folosit Directory.GetFiles. Aceasta metoda statica ne permite sa obtinem lista de fisere dintr-un director dat. De exemplu pentru a obtine toate fisierele din directorul 'C:\Temp' care incep cu 'Test' este nevoie sa apelam metoda GetFiles in felul urmator:
var files = Directory.GetFiles("C:\Temp","Test*");
Exemplul acesta este la mintea cocosului. Dar sa vedem ce se intampa daca vrem toate fiserele cu extensia rar.
var files = Directory.GetFiles("C:\Temp","*.rar");
In cazul in care directorul contine urmatoarele fisiere:
1.rar
2.rar
3.exe
4.rar.tmp
5.rar1
Rezultatul returnat o sa contina urmatoarele fisiere:
1.rar
2.rar
4.rar.tmp
5.rar1
Se pare ca avem o problema, ce cauta ultimele 2 fisiere in rezultat. Ne-am astepta sa fi avut ca rezultat doar 1.rar si 2.rar. Din capate in modul in care am facut noi cautarea, o sa ni se returneze orice fisere care incepe cu regula de cautare pe care noi am folosito. Rezultatul este clar nu cel asteptat.
Cauza la acest comportament este urmatoarea: metoda GetFiles() apeleaza la randul ei API de Win32 (metoda FindNextFile). Iar din cauza ca Windows-ul are atat extensii scurte de 3 caractere cat si extensi lungi (8 caractere), rezultatul returnat este cel de mai sus.
O solutie la aceasta problema este sa verificam ca rezultatul returnat se termina cu extensia pe care noi am cautato.
var files = Directory.GetFiles("C:\Temp","*.rar")
.Where( x => x.EndsWIth("*.rar");
Read More
Posted in C#, Windows | No comments

Thursday, 26 April 2012

WIndows 8 versions

Posted on 00:45 by Unknown
Mai este putin pana la inceputul lui iunie cand se va lansa Windows 8 Release Preview. Mai mult ca sigur ati auzit deja de noul sistem de operare pe care Microsoft il pregateste.
O sa existe mai multe versiuni de Windows 8, atat pentru procesoare x86 cat si pentru WOA sau ARM-uri. Multe functionalitati care erau disponibile doar pe versiunea Ultimate sau Enterprise o sa fie disponibile in versiunea de baza de Windows 8.
Pe piata o sa fie disponibile urmatoarele versiune de Windows 8:
  • Windows 8
  • Windows 8 Pro
  • Windows 8 Enterprise
  • Windows RT
Versiunea de baza a Windows 8 o sa cuprinda toate functionalitatile de baza cu care ne-am obisnuit deja, alaturi de cateva noi. Din functionalitatile noi cele mai interesante mi s-au parut:
  • suportul de multi-limba (care pana acuma era disponibil doar de la versiunile Enterprise in sus) 
  • un nou Windows Explorer, care se apropie usor de Total Commander
Windows RT este o versiune de Windows pentru procesoare WOA si ARM. Aceasta editie o sa vina preinstalata pe device-uri cu procesoarele amintite mai sus. Device-urile cu acest sistem de operare o sa fie extrem de subtiri, iar durata de viata a bateriei o sa fie foarte lunga. Acesta versiune de Windows o sa vina preinstalata cu suita Office si un mecanism de criptare a datelor de pe device.
Versiunea de Windows 8 Pro se adreseaza segmentului bussines. Din punct de vedere a functionalitatilor aceasta versiune de Windows este asemanatoare cu Windows 7 Professional. Aceasta versiune include funtionalitati precum: remote desktop, criptate fisiere, client VPN, BitLocket etc.
Window 8 Enterprise este ultima versiune de Windows 8 anuntata de catre Microsoft. Aceasta versiune se adreseaza in special segmentului bussines premium care are nevoie de caracteristici premium pe langa cele de baza care sunt oferite de catre Windows 8 Pro. Cele mai importante functionalitati care ne sunt oferite de Windows 8 Enterprise sunt:
  • Windows To Go - permite utilizatorilor corporate sa ruleze sistemul de operate direct de pe un stick. Acesta le va permite sa aibe un sistem de operare complet pe un stick si sa il ruleze pe orice PC. Acest feature poate sa fie controlat la nivel de corporate de catre IT
  • AppLocker - permite departamentului IT sa controleze ce fisiere si aplicatii pot sa fie accesate si folosite de catre fiecare utilizator
  • DirectAccess - permite accesul la resurse corporate fara a folosii un VPN
  • Applicatii Metro Style corporate - applicatile Metro o sa poata sa fie instalate la nivel corporate fara a mai trece de Windows Store
  • BrachCache - este un mecanism de caching care permte utilizatorilor sa stocheze orice fel de continut pentru a evita descarcarea multipla a aceluiasi continut la fiecare accesare.
Pe langa aceste functionalitati, mecanismul de VDI (Virtual Desktop Infrastructure) a fost imbunatit. Experienta pe care o sa aibe utilizatori care acceseze remote Windows 8 Enterprise o sa fie cu mult imbunatatita. Acesta o sa poate sa fie accesibil chiar si de pe tablete cu Windows 8 RT.
In comparatie cu Windows 7, exista mai multe versiune de Windows 8, dar acestea sunt mult mai bine definite pentru fiecare tip de utilizator. La nivel corporate Windows 8 Enterprise este o optiune extrem de atractiva mai ales datorita functionalitilor precum Windows To Go si AppLocker.
Read More
Posted in windows 8 | No comments

Wednesday, 25 April 2012

How to integrate Facebook in a Windows 8 Metro Style Application

Posted on 03:21 by Unknown

In ziua de azi aproape toate aplicatile pentru un consumator normal au nevoie de integrare cu Facebook. Chiar daca noua, dezvoltatorilor, ne place sau nu trebuie sa facem acest lucru.

Cand scriem o aplicatie Windows Metro Style trebuie sa luam cateva decizii legate de modul in care o sa ne integram cu Facebook.

O varianta pe care o avem la indemana este sa ne folosim de Windows 8 "Contracts". Desi in prima faza este destul de simplu, in cazul in care avem un flow mai complex, o sa ne dam seama ca nu ne este atat de usor sa facem acest lucru. Si asa ajungem la a doua varianta, care implica apeluri directe spre Facebook. Nu faceti greseala sa incepeti sa reinventati roata.

In primul rand avem niste librari ajutatoare in .NET, care ne ajuta sa facem toata partea de autentificare. Acest brower ne cere sa setam doar adresa de logare si url de redirectare. Toata magina care se intampla in spate pentru OAuth este rezolvata. .NET se ocupa se afisearea unui pop-up unde userul sa isi introduca credentialele and so on. Mai jos gasiti un exemplu de autentificare pentru o aplicatie Windows Metro Style:

 WebAuthenticationResult result =
await WebAuthenticationBroker.AuthenticateAsync(
WebAuthenticationOptions.None,
new Uri("loginUri"),
new Uri("redirectUri"));
Rezultatul returnat o sa contine o proprietate ResponseStatus, pe baza careia putem sa stim daca autentificare a fost cu success, userul a dat cancel sau a aparut o eroare in acest proces. Datele pe care serverul le returneaza precum auth. token pot sa fie gasite in result.ResponseData.

Exista deja o librarie pentru acest lucru oferita de catre Prabir. Aceasta este deja la versiunea a sasea. Din punctul meu de vedere este una din cele mai mature librarii pentru Facebook care exista in momentul de fata.

Ce mi-a placut cel mai mult la aceasta librarie este modul in care se executa o comanda. In loc sa aibe un API complex si greu de tinut la zi, iti permite sa setezi comanda (metoda) pe care vrei sa o apelezi si toti parametrii aferenti, iar apoi sa executi un GET sau POST prin intermediul clasei FacebookClient.

Primul pas este sa ne logam pe Facebook. Avem nevoie de url-ul pentru logare si de o modalitate de a extrage access token din rezultat. Acest lucru se poate face usor face ne folosim de FacebookClient. Aceasta clasa contine metoda GetLoginUrl, prin intermediul careia putem sa obtinem url pentru login, iar metoda ParseOAuthCallbackUrl parseaza ResponseData returnat de catre WebAuthenticationBroker a.i. sa putem accesa fara nici o problema toate datele:

FacebookClient fbClient = new FacebookClient();
fbClient.AppId = "1234";
WebAuthenticationResult result = await WebAuthenticationBroker.AuthenticateAsync(
WebAuthenticationOptions.None,
fbClient.GetLoginUrl(CreateLoginParameters()),
new Uri("https://www.facebook.com/connect/login_success.html));
Este bine de stiut ca AppId (application id) trebuie setat in cazul in care avem nevoie ca aplicatia noastra de Facebok sa poata accesa datele clientului.

Urmatorul pas este sa verificam care este statusu la result, daca acesta este in regula atunci putem sa extragem AccessToken. O sa avem nevoie de acesta cand o sa dorim sa executasm anumite actiuni.

if (result.ResponseStatus == WebAuthenticationStatus.Success)
{
FacebookOAuthResult fbResult = fbClient.ParseOAuthCallbackUrl(new Uri(result.ResponseData));
accessToken = fbResult.AccessToken;
}
Prin intermediul comenzii GetTaskAsync putem sa executam orice metoda din API de Facebook. Rezultatul returnat este de tip dynamic. In exemplul de mai jos extragem toate datele unui user.
dynamic userInfo = await fbClient.GetTaskAsync("me");
Trace.WriteLine(userInfo.name);
Trace.WriteLine(userInfo.id);
In cazul unor comenzi mai complexe, este nevoie sa ne cream un obiect de tip ExpandoObject si sa setam toti parametrii pe care commanda ii cere. Avem si cateva objecte ajutatoare care ne ajuta sa comunicam cu Facebook. Unu din ele este FacebookMediaObject, prin intermediul caruia putem sa facem upload sau download la continut media. In exemplul de mai jos putem vedea cum putem sa facem upload la o poza pe Facebook.
byte[] imageBytes = null;
FacebookClient fbClient = new FacebookClient(accessToken);
dynamic fbParams = new ExpandoObject();
fbParams.access_token = accessToken;
fbParams.caption = "Romania";
fbParams.method = "facebook.photos.upload";
fbParams.uid = "12344314232342323";
FacebookMediaObject fbMediaObject = new FacebookMediaObject()
{
FileName = "MyRomaniaPicture",
ContentType = "image/jpg"
};
fbMediaObject.SetValue(await _mediaFileManipulator.GetBytes(imageBytes));
fbParams.source = fbMediaObject;
dynamic result = await fbClient.PostTaskAsync(fbParams);
Mi s-a parut destul de usor de folosit acest SDK pentru Facebook si va invit sa il incercati si voi.
Read More
Posted in windows 8 | No comments

Monday, 23 April 2012

DataContract and XMLIgnore attribute

Posted on 05:52 by Unknown
Intr-un post anterior am discutat despre cum putem sa serializam un IDictionary in format XML. In mod normal o clasa care nu este decorata cu atributul DataContract o sa poata fi serializata folosind DataContractSerializer fara nici o problema. In acest caz, toate proprietatiile si field-urile publice o sa fie serializate.
In specificatiile la DataContractSerializer, ne este specificat ca orice atribut folosit pentru serializare in format XML (XmlIgnore, XmlArray, Serializable etc.) sunt ignorate. Totusi cand obiectul de mai jos era serializat, atributul XmlIgnore este luat in considerare.
public Foo
{
public string Name
{
get;
set;
}
[XmlIgnore]
public string Value
{
get;
private set;
}
}
In prima faza cea ce se intampla este destul de ciudat. In mod normal acesta nu ar trebui sa fie ignorat, dar practic proprietatea este ignorata in totalitate.
In realitate DataContractSerializer functioneaza asa cum ne-am astepta. Dar daca ne uitam mai atenti la modul in care este definita proprietatea Value, putem sa observam ca set-ul este private. DataContractSerializer serializeaza toate proprietatiile publice, iar Value nu este public. Aceasta are doar get-erul public, iar set-erul este private. Cu sau fara atributul XmlIgnore, aceasta proprietate nu este serializata.
Enjoy!
Read More
Posted in C#, serializare, serialization, xml | No comments

Cannot serialize member ... because it implements IDictionary

Posted on 01:42 by Unknown
Cat de cunoscuta vi se pare urmatoarea eroare:
Cannot serialize member [FooMember]
... because it implements IDictionary.
Primul lucru pe care oamenii il spun cand intalnesc aceasta eroare este: "Pai logic ca crapa, un dictionar nu e serializabil". Da, intr-o oarecare masura enuntul de mai sus este adevarat, dar nu in totalitate.
Nu toate serializatoarele sunt capabile sa serializeze un IDictionary. Cele mai dese probleme de acest gen apare cand se lucreaza cu XmlSerializer. Trebuie tinut cont ca aceasta problema nu apare la serializare ci la deserializare. Deserializatorul nu stie cu ce obiecte lucreaza, nu gaseste nici o informatie despre tipul lor.
O solutie destul de simpla, care este la indemana oricui este sa folosim DataContractSerializer pentru a serializa/deserializa un dictionar. Schimbariile care trebuie facute pentru a trece de la XmlSerializer la DataContractSerializer sunt destul de putin.
Primul pas este sa marcam clasa pe care o dorim sa o serializam cu DataContract, iar toate elementele pe care dorim sa le serializam cu atributul DataMember. Acest pas nu este obligatoriu pentru .NET 3.5 SP1 +. Daca folositi .NET 3.5 SP1, .NET 4.0 sau .NET 4.5 acest pas este optional. By default tot ce e public se serializare. In cazul in care aveti propietati pe care nu vreti sa le serializati, este nevoie sa adaugati aceste atribute.
Urmatorul pas este sa folosim pentru serializare si deserializare DataContractSerializer, iar metodele Serializer si Deserialize o sa fie inlocuite cu WriteObject si ReadObject.
Mai jos puteti sa gasiti un exemplu de cod in C# 4.5 care poate sa fie folosit pe Windows 8 Metro Style App fara nici o problema:
// Serialize
using (MemoryStream stream = new MemoryStream())
{
DataContractSerializer serializer = new DataContractSerializer(obj.GetType());
using (StreamWriter streamWriter = new StreamWriter(stream, _encoder.Current))
{
using (XmlWriter xmlWriter = XmlWriter.Create(streamWriter))
{
serializer.WriteObject(xmlWriter, obj);
xmlWriter.Flush();
}
stream.Seek(0, SeekOrigin.Begin);
// TODO: save or manipulate streamWriter
}
}
// Deserialize
using (StringReader reader = new StringReader(_encoder.ToString(content)))
{
XmlReader xmlReader = XmlReader.Create(reader);
XmlSerializer serializer = GetSerializer(typeof (TEntity));

return (TEntity) serializer.Deserialize(xmlReader);
}
Daca am fi fost intr-o aplicatie non-metro style am fi putut lucra cu XmlTextWriter unde sa avem propietatea Formatting setata cu valoare Formating.Indented. In acest caz XML generat ar fi fost mult mai usor de citit de catre oameni. Dar putem sa traim fara nici o problema fara aceasta optiune.
Enjoy!
Read More
Posted in C#, error, serializare, serialization, windows 8 | No comments

Wednesday, 18 April 2012

Bug on Windows Phone 7 Exchange Client Automatic Reply

Posted on 11:31 by Unknown
Dupa cum stiti Windows Phone 7 are integrat un client de email care este integrat by default cu mai multi provideri, precum Exchange, Gmail, Yahoo and so on.
In functie de client iti permite sa iti schimbi anumite setari are contului de email precum automated response/reply pentru Exchange. Din pacate aceasta optiune are un bug.
In cazul in care incercati sa va activati optiunea de "Automated Response/Reply" direct de pe telefon mobile trebuie sa stiti ca nu puteti sa editati si mesajul care o sa fie trimis ca si reply. Chiar daca aveti optiunea de edit la acest mesaj, serverul de Exchange nu o sa primeasca acest update si o sa foloseasca in continuare vechiul mesaj predefinit.
Aceasta modificare trebuie sa fie facuta direct de pe calculator, singurul lucru pe care il puteti face de pe telefon este sa activati/dezactivati aceasta optiune.
Read More
Posted in error, exchange, Windows Phone | No comments

Windows Azure Media Service - Overview

Posted on 08:38 by Unknown
A fost lansat un nou serviciu pentru Windows Azure. Acesta se numeste Windows Azure Media Services si este un serviciu care ne permite sa oferim solutii media folosind Windows Azure. Acest lucru se putea face si pana acuma, dar era nevoie ca noi sa ne implementam tot procesul, de la upload de stream, encoding and so on.
Din acest moment acest lucru ne este oferit gratuit de catre Microsoft. Gratuit, oarecum spus. Tot servicul pentru media nu este oferit contra cost. Cea ce noi platim este spatiul ocupat pe cloud, procesarea stream-ului si traficul. De fapt acest serviciu ne ofera un API care ne ajuta sa manipulam elemente media (atat audio cat si video).
In acest moment, Windows Azure Media Services este doar la versiunea Developer Preview, dar nu o sa treaca foarte multa vreme pana cand acest serviciu o sa fie in versiune finala.
Acest serviciu este suportat de nenumarate platforme de la sisteme cu Windows (inclusiv W8), la Mac, Xbox, Windows Phone, Androit, WCE.
Hai sa vedem ce putem face cu acest serviciu. In primult rand putem sa facem encoding la un stream media in cateva formate suportate. In momentul de fata sunt suportate formate precum
AAC-LC, H.264, VC-1, MP4, Apple Live Stream, PIFF. Partea buna este ca acest servciu este bine gandit, fiind destul de usor de extins. De exemplu in orice moment ne putem implementa propiul mecanism de encoding. Tot pe partea de encoding, ne este promis suport pentru thirt-party encoders, precum Ateme sau Digital Rapids. Aceste servicii de la 3th-party o sa fie disponibile prin intermediul la Windows Azure Marketplace.
Pe langa partea de encoding, acest serviciu ne permite sa oferim media streaming atat LIVE cat si offline. Ce mi s-a parut destul de interesant este integrarea cu DVR-ul si modul in care se poate scala cand esti LIVE si trebuie sa faci stream-ing la foarte multi consumatori. Prin intermediul CDN-urilor de la Windows Azure, cotentul unui stream poate sa fie foarte usor trimis la toti consumatorii. O noutate este integrarea si cu alte CDN-uri, nu doar cele de la Microsoft.
Pe partea de protectie, Windows Azure suporta encriptatea stream-ului utilizand Microsfot PlayReady si MPEG Common Encryption. Dar ca si la encodare, putem sa folosim solutii 3th-party .
Existe mai multe tipuri de entitati cu care Media Services lucreaza in format REST. Mai jos puteti sa gasiti lista cu cele mai importante entitati:
  • File - este un fisier media (audio, video) care este stocat sub forma unui obiect de tip blob
  • Assert - meta-datele a unui sau mai multe fisiere media. Acesta poate sa contina orice fel de date, incepand de la numele piesei la date despre casa de discuri
  • Task - este o operatie care se poate executa pe un File sau pe un Assert (enconding, streaming...)
  • Job - Operatii de creeare, stergere a nui File sau Assert. Acesta poatecontine unul sau mai multe task-uri.
  • Locator - Este un URI generat automat pe baza caruia se poate oferii acces la o anumita resursa pe o perioada limitata de timp.
  • Access Policy - Cine/Ce/Unde/Cand poate sa acceseze o resursa media
Toate aceste operatii se pot face folosind un API rest. Workflow-ul pentru acest serviciu defineste 4 tipuri de operatii:
  • Ingest - este primul pas cand vrem sa adaugam un continut media. Acest pas cuprinde partea de upload si encriptate a continutului
  • Process - acest pas cuprinde task-uri precum encoding, conversie, transformare a continutului media
  • Manage - operatii pe assert-urile care deja exista (edit, delete, setup)
  • Deliver - operatii de streaming a continutului pe care il avem deja (atat live cat si offline) - atat direct la utilizator cat si la CDN-uri
API fiind in format REST este destul de usor de folosit. Mai jos gasiti un exemplu pentru o aplicatie pentru Windows 8 Metro Style. M-am jucat putin cu acest serviciu, dar in acest momet evit sa dau exemple de cod, pana cand nu avem o versiune finala.
Ca si incheiere, acest serviciu suna destul de bine si o sa ne usureze mult viata, mai ales ca este gratis. Asteptam versiunea finala a sa.
Enjoy!.
Read More
Posted in Azure, REST, windows 8 | No comments

DB error not handled by the web application

Posted on 07:21 by Unknown
Incercam astazi sa caut care este cea mai buna ruta pentru a merge din Cluj-Napoca in Arad, iar domnul Google m-a dus la urmatoarea adresa url:
http://mersul-trenurilor.infoturism.ro/mersul_trenurilor_arad_cluj-napoca.php
Pagina returnata avea urmatorul continut:
SELECT DISTINCT traseu.id, traseu.ora, traseu.id_tren,
traseu.id_statie, gari.nume FROM traseu, gari
WHERE traseu.id_statie = gari.id
AND id_tren
IN (536,534,1834,1843,1766)
ORDER BY traseu.ordine, traseu.id1054
- Unknown column 'traseu.ora' in 'field list'
Rezultatul returnat mi s-a parut destul de dragut, mai ales ultima parte a sa. In mod normal ar fi trebuit sa vedem o pagina de eroare frumoasa, dar in schimb apare un SELECT, care ne expune o mica parte din baza de date.
O persoana cu putina imaginatie poate ar putea sa execute o comanda SQL precum un DELETE.
In cazul in care lucrati la o aplicatie de orice fel (in special web) nu uitati sa tratiti mesajele de eroare intr-un mod corespunzator, iar la un end-user sa nu afisati niciodate query din baza de date.
Un mesaj generic este mai mult decat suficient pentru un muritor.
Read More
Posted in error, error handling, sql | No comments

ITCamp 2012

Posted on 07:15 by Unknown
In 28,29 mai 2012 are loc o noua conferinta ITCamp 2012 in Cluj-Napoca. Editia de anul trecut a fost foarte reusita, iar cea de anul acesta se anunta sa fie si mai interesanta.
Agenda celor doua zile este extrem de incitanta, o sa fie 3 track-uri simultan cu urmatoarele teme:
  • Private & Public Cloud
  • Development & Mobile
  • Architecture & Best Practices
Pe lista de speakeri, anul acesta apar nume grele precum Tim Huckaby, Lino Tadros, Alessandro Pilotti, Alessandro Teglio, Giorgio Garcia-Agreda. Din punctul acesta de vedere este o coferinta care nu trebuie ratata si este singura de acest gen din Romania.
Va invit sa intrati pe adresa http://itcamp.ro/ si sa va inregistrati. Aceasta este organizata de doua  comunitati IT din Romania (ITSpark si CodeCamp).
Read More
Posted in cluj-napoca, codecamp, eveniment, ITCamp, itspark, prezentare | No comments

Sunday, 15 April 2012

"This Week in mLearning" Podcast: Week #2

Posted on 11:30 by Unknown


We've put the finishing touches on our second weekly podcast detailing all the happenings in the mobile learning field for the week of April 9, 2012 and you can listen to RJ Jacquez and I talk about the week that was by clicking the link here.


The central theme for this week's episode was a discussion of the use of  "Mobile App vs. Mobile Web" for creating and delivery mobile learning but we also covered a variety of other topics including announcements like Google's new Project Glass initiative, ADL's Project Tin Can preview and recent rumblings from Adobe as to what we can expect in the upcoming Creative Suite 6/CS6 in foundational products like Photoshop, Dreamweaver and Flash and how these new features will help push the boundaries of possibility for mobile learning content creation and deployment.


While we're still trying to gain our footing in terms of pace and approach, the first couple of podcasts have been well received and we're appreciative of the comments and suggestions being offered by early listeners. RJ continues to perform double duty by recording a second weekly podcast in Spanish with Mayra Aixa Villar that is bringing benefit and knowledge to a whole other market...I only wish I had paid attention enough in high school Spanish class so I could at least listen to each episode much less participate in any substantive way. I know their episode "dos" will be posted by Monday, April 16th so watch (and listen) for that!


Finally, RJ is working to gain approval from Apple to release the weekly recordings to a broader audience via the iTunes App Store and we'll let everyone know when that's a reality.



#TWmLearning App of the Week


This week's choice for App of the Week is Snapguide, which bills itself as "the easiest way to make and share good looking guides".  This free App for iOS devices is quite cleaver and an excellent example of how compelling user generated content can be built on-the-fly using only an iPhone or iPad and easily shared with a broader audience.  Everything is KISS elegent here including and sign-up and friending process.



Thanks in advance for listening and please share any comments or ideas with me below so I can pass them on to my fellow podcast collaborators too.


Robert  ;?)
Read More
Posted in mlearning, Mobile Apps, Mobile Web, Snapguide, TWmLearning | No comments

Friday, 13 April 2012

Background task in Windows 8 Metro Style App

Posted on 10:28 by Unknown
O aplicatie nativa Metro style este diferita din unele puncte de vedere fata de o aplicatie desktop pentru Windows 7 de exemplu. Daca ati scris aplicatii pentru Windows Phone 7 va pot spune ca din unele puncte de vedere o aplicatie Metro style este mai asemanatoare cu o aplicatie Silverlight pentru Windows Phone 7.
O aplicatie in Metro style poate sa aibe doua stari. Prima stare este starea foreground, cand aplicatia este cea curenta (cea care se afiseaza pe ecran) si ruleaza ca o aplicatie normala. A doua stare este cand aceasta se afla in spate. Nu este aplicatie curenta. In momentul acesta toate firele de executie (thread-urile) sunt inghetate. Aceasta stare poarta numele de suspended. Momentul cand se face switch intre cele doua stari poate sa fie prins de catre programator. Despre cum se face acest lucru o sa vorbim cu alta ocazie.
Astazi o sa vorbim despre cum putem sa executa cod in fundal, cand aplicatia noastra este oprita. Uneori avem nevoie la aplicatie sa putem afisa updateuri pe lock screen sau sa verificam daca pe un anumit socket se intampla ceva (VOIP). Pentru acest lucru au fost creat background task.
Un lucru foarte important care trebuie stiut de la inceput despre background task este ca acesta ruleaza cand sistemul de operare doreste nu cand doreste programatorul. Exista mai multe triggere pe care le putem folosii cand vrem ca un background task sa fie apelat. Prin intermediul acestora codul nostru o sa poata sa fie executat.
Mai jos gasiti lista triggerele care sunt disponibile in acest moment:
  1. ControlChannelTrigger
  2. InternetAvailable
  3. InternetNotAvailable
  4. LockScreenApplicationAdded
  5. LockScreenApplicationRemoved
  6. MaintenanceTrigger
  7. NetworkNotificationChannelReset
  8. NetworkStateChange
  9. OnlineIdConnectedStateChange
  10. PushNotificationTrigger
  11. ServicingComplete
  12. SessionConnected
  13. SessionDisconnected
  14. SessionStart
  15. SmsReceived
  16. TimeTrigger
  17. TimeZoneChange
  18. UserAway
  19. UserPresent
Ne putem imagina ca un background task este ca o combinatie intre un Windows Service si un Windows Task. Are putin din fiecare. Un background task poate sa ruleze in doua "locatii". In functie de cum este seteaza userul aplicatia noastra:
  • Lock Screen App
  • Non-Lock Screen App
Este foarte important sa stim ca in functie de acest lucru, Windows 8 ne aluca un numar limitat de resurse pe care le putem folosii (CPU). In cazul unei aplicatii Lock Screen App, ne sunt alocate 2 secunde de CPU la un interval de 15 minute. In celalat caz ne este alocata o singura secunda la interval de 120 de minute. Atentie, 1 secunda CPU nu este tot una cu 1 secunda normala. De exemplu daca facem un request spre un URL, nu se contorizeaza timpul pana rezultatul vine de la server. La fel exista anumite limitari din punct de vedere a traficului pe care il putem face prin WiFi.
As vrea sa subliniez ca aceste valori s-ar putea sa se schimbe in viitor, din aceasta cauza este bine sa verificati de fiecare data cand un nou release sau update se face la Windows 8 (noi cel putin speram sa se schimbe putin). De exemplu un trigger de tip TimeTrigger poate sa ruleze la un interval de cel putin 15 minute. Asta inseamna ca daca avem un backgroud task care dorim sa fie rulat odata la 2 minute, nu o sa putem face acest lucru sub nici o forma.
Din punct de vedere tehnic, un background task se definieste intr-un assembly separat si trebuie inregistrat. Trebuie avut grija ca tipul de clas library selectat sa fie WinMD si nu DLL. In functe de stare pe care o are aplicatia noastra un background task poate sa fie apelat de catre:
  • aplicatia noastra - cand aplicatia ruleaza si este in foreground
  • Windows 8 - cand aplicatia este suspended sau aplicatia nu ruleaza (terminated)
Un background task poate sa aibe una sau mai multe condititi care sa fie verificare inainte sa fie rulat. De exemplu daca avem un backgroud task care are nevoie de conexiuen de internet nu dorim sa il rulam daca nu avem conexiune. In acest caz putem sa specificam o conditie care sa fie verificata inainte ca task-ul sa fie apelat.
Pentru a inregistra un task este nevoie sa ne instantiam un BackgroundTaskBuilder si sa setam triggerul si conditiile (optional) cand un background task sa ruleze. Dupa acest pas, putem sa apelam metoda Register() care o sa ne inregistreze background task-ul.
BackgroundTaskBuilder builder = new BackgroundTaskBuilder();
builder.Name = "FooBackgroundTask";
builder.TaskEntryPoint = "Foo.FooBackgroundTask";
IBackgroundTrigger trigger = new TimeTrigger(30, true);
builder.SetTrigger(trigger);
IBackgroundTaskRegistration task = builder.Register();
TaskEntryPoint specifica namespaceul si clasa unde clasa noastra este definita.
Exista doua evenimente, pe baza carora din aplicatia putem sa stim care este progresul la task si cand s-a terminat de executat. Merita de mentionat ca este nevoie sa ne inrefitram la aceste evenimente de fiecare data cand aplicatia se porneste. Cand aceasta trece din starea suspended in running nu mai este nevoie sa ne inregistram la aceste evenimente. Prin intermediul metodei BackgroundTaskRegistration.AllTasks putem sa obtinem toate task-urile inregistrate. Dupa ce obtinem task-ul pe care noi il dorim putem sa ne inregistram la evenimente.

var fooBT = BackgroundTaskRegistration.AllTasks.First(x=>x.Name == "FooBackgroundTask");
fooBT.Value.Progress += new BackgroundTaskProgressEventHandler(OnProgress);
fooBT.Value.Completed += new BackgroundTaskCompletedEventHandler(OnCompleted);
Acuma ca am vazut putem sa manipulam un background task, este momentul sa vedem cum il putem definii.
Clasa noastra FooBackgroundTask, trebuie sa implementeze interfata IBackgroundTask. Aceasta are o singura metoda Run, care este apelata de catre Windows 8 cand task-ul este pornit.
public sealed class FooBackgroundTask:IBackgroundTask
{
private int globalcount;

void IBackgroundTask.Run(IBackgroundTaskInstance taskInstance)
{
// do something
}
}
In interiorul metodei Run se intampla toata magia, putem sa facem orice, atata timp cat ne incadram in CPU time alocat. Prin intermediul taskInstance, care este de tip IBackgroundTaskInstance, putem sa comunicam cu aplicatia noastra care este in foreground. De exemplu putem sa trimitem notificari de tipul progress updateds.
Mai devreme am spus ca un background task poate sa faca apeluri asincrone spre orice alte resurse. Pentru a putea face acest lucru este nevoie sa folosim BackgroundTaskDeferral. Pentru fiecare operatie asincrona ar trebui sa folosim unul nou.
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
IAsyncAction action = //Call async
action.Completed = new AsyncActionCompletedHandler(
(IAsyncAction act, AsyncStatus stat) =>
{
deferral .Complete();
});
Pentru a putea folosii un background task o aplicatie Metro style trebuie sa il declare in manifest. Fiecare background task o sa fie un alt entry point. O aplicatie poate sa aibe mai mult de un background task. Prin manifest se specifica un background task ca si o extensie la care se defineste un entry point si tipul de eveniment pentru trigger. Daca din cod se incearca inregistrarea la un alt tip de trigger, aplicatia o sa crape.
Iar mai jos puteti sa vedeti o schema care prezinta cum este lansat un background task si de catre cine.

Cam asta a fost despre background task. Inainte sa va apucati sa scrieti un background task pentru aplicatia voastra ar trebui sa va ganditi de doua ori daca aveti nevoie de unul si ar trebui sa tineti seama de urmatoarele recomandari (pe care le puteti gasii si pe MSDN):
  • Design background tasks to be short lived.
  • Design the lock screen user experience as described in the “Guidelines and checklists for lock screen tiles.”
  • Use BackgroundTaskHost.exe as the executable for background tasks.
  • Describe the background task class name or JavaScript file name accurately in the manifest.
  • Use persistent storage to share data between the background task and the app.
  • Register for progress and completion handlers in the app.
  • Register for a background task cancellation handler in the background task class.
  • Register for the ServicingComplete trigger if you expect to update the app.
  • Ensure that the background task class library is referenced in the main project and its output type is winmd.
  • Describe the triggers in the background manifest accurately.
  • Verify if the app needs to be on the lock screen.
  • Do not display UI other than toast, tiles or badges from a background task.
  • Do not rely on user interaction in background tasks.
Read More
Posted in windows 8 | No comments

Wednesday, 11 April 2012

URI in Windows 8 Metro Style App

Posted on 02:00 by Unknown
Intr-o aplicatie Windows 8 Metro App putem sa specificam printr-un URI locatia de unde sa incarcam continutul unui fisier. Folosirea path-urilor absolute nu este recomandata, deoarece in mod normal nu avem acces la orite path. De exemplu daca folosim un path de forma: "C:\Foo\content.txt" o sa ne trezim cu o eroare de genul "Access is denied".
Este foarte important de stiut ca o aplicatie de tip Metro App are access doar la un numar limitat de locatii. Nu o sa avem access la orice locatie de pe masina. Singura varianta pentru a accesa locatii la care nu avem acces este ca userul sa specifice locatie prin intermediul unui file picker.
URI are urmatoare forma: [scheme]://[numeDomeniu]/[path]
[scheme] poate sa aibe 3 valori predefinite:
  • ms-appx - care va indica locatia unde este pachetul aplicatiei (locatia de unde ruleaza aplicatia)
  • ms-appdata - care indica locatia unde se salveaza datele pe care le-am downloadat de pe internet
  • ms-resource - locatia care contine fisiere de resurse localizabile
Numele de domeniu poate sa fie ignorat, caz in care se va folosii domeniul curent.
In exemplul de mai jos incarcam logo-ul aplicatiei din directorul 'images'.
IAsyncOperation<StorageFile> storageFileAsyncOp = StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///images/AppLogo.png""));

Enjoy!
Read More
Posted in C#, windows 8 | No comments

Monday, 9 April 2012

How to read/write data from Windows Metro Style App

Posted on 07:54 by Unknown
Intr-o aplicatie pentru Windows 8 de tip Windows Metro style app cand avem nevoie sa lucram cu fisiere suntem constransi sa folosim StorageFolder si StorageFile. API este destul de diferit fata de cum ne-am obisnuit pana acuma.
Exista mai multe locatii pe care le putem accesa by default, precum: local folder, roaming folder (direct legat de AD) si temporary folder. Aceste foldere se pot accesa prin urmatoarea modalitate:
StorageFolder localFolderStorage = Windows.Storage.ApplicationData.Current.LocalFolder;
Exista cateva foldere predefinite, pe langa acestea trei pe care le putem accesa folosing clasa statica KnownFolders. Prin intermediul acestei clase avem acces la urmatoarele foldere:
  • Document library
  • Home group
  • Media server devices
  • Music library
  • Pictures library
  • Removable library
  • Video library
Intr-un StorageFolder putem sa accesam fisiere, sa creeam noi foldere si cam toate actiunile pe care le putem face intr-un folder. In exemplul de mai jos creeam un fisier, iar daca acesta atunci facem override.
StorageFolder storageFolder = KnownFolders.HomeGroup;
StorageFile storageFile = storageFolder.CreateFileAsync("Foo.txt", CreationCollisionOption.ReplaceExisting);
In momentul de fata API care il avem disponibil nu ne permite sa verificam daca un fisier sau un folder exista. In cazul in care accesam un fisier care nu exista primim o eroare de tipul FileNotFoundException. O solutie la aceasta problema este sa ne definim un extension method care sa verifice ErrorCode returnat de apelul metodei noastre ( NOTA: tot API-ul care manipuleaza fisiere este async).
var errorCode =storageFolder.GetFileAsync("Foo.txt").ErrorCode
bool fileExist = errorCode != null
&& errorCode.GetType() != typeof(FileNotFoundException);
Operatiile de read si write sunt putin diferite fata de cum ne-am obisnuit noi. Cand deschidem un fisier, obtinem un IRandomAccessStream prin intermediul caruia putem sa scriem sau sa citim date.
using( IRandomAccessStream rs = await storageFile.OpenAsync(FileAccessRead.ReadWrite))
{
using( DataWriter dw = new DataWriter(rs))
{
dw.WriteString("FooContent");
await dw.StoreAsync();
await dw.FlushAsync();
}
rs.Seek(0);
using( DataReader dr = new DataReader(rs))
{
string result = dr.ReadString(8);
}
}
Trebuie avut grija la metodele await si cum le manipulam. In rest, odata ce ne-am dat seama cum functioneaza totul este usor de folosit. Din pacate nu tot API-ul cu care ne-am obisnuit noi pentru acces la fisiere este suportat.
Read More
Posted in File.Exist, stream, windows 8 | No comments

VS2011 BETA: Error : DEP3000 : Attempts to stop the application failed. This may cause the deployment to fail

Posted on 02:23 by Unknown
Scriam cateva teste pentru o aplicatie metro pe Windows8 cand m-am trezit cu urmatoarea eroare:
    Error : DEP3000 : Attempts to stop the application failed. This may cause the deployment to fail.
AppX packages may only be shutdown as part of a Visual Studio build operation.
Error : DEP1100 : Cannot delete file "Assets\Logo.png" from the layout.
Access to the path 'C:\..\bin\x86\Debug\AppX\Assets\Logo.png' is denied.
An internal error occurred while launching test executor for Windows Metro style app.
Tot ce trebuie sa faceti este sa stergeti directorul 'bin' din proiectul de teste si problema ar trebuie sa dispara.

Putin mai tarziu cand scriam testele m-am trezit cu urmatoarea eroare:

An internal error occured while launching test executor for Windows Metro style ap.
Din pacate aceasta eroare nu iti spune foarte multe si nu stii care poate sa fie cauza. Dupa ce m-am jucat putin cu proiectul am descoperit si problema. In proiectul de deste aveam referit un proiect de UI (Windows Metro style project).
Solutia a fost simpla, am eliminat proiectul referit. Dar as fi vrut sa adaug si teste pentru View Module. Acest lucru nu este posibil in acest moment, deoarece nu se pot face teste pentru proiectele de tipul Windows Metro style. In schimb puteti sa adaguti View Module-urile intr-un proiect separat de tip library.
Sistem de operare: Windows 8 Consumer Preview
VS: Visual Studio 2011 BETA

Spor.
Read More
Posted in C#, windows 8 | No comments

Friday, 6 April 2012

Dependency Injection framework for WinRT - Widows 8 application

Posted on 05:45 by Unknown
Am inceput sa lucrez la o aplicatie metro style pentru Windows 8. Toate bune si frumoase pana am ajuns in momentul in care am dorit sa folosesc un framework de DI. Cum inca vorbim de VS2011 BETA si un API redus pentru aplicatile metro style, m-am trezit ca nici un framework consacrat precum Unity, Ninject, Windsor nu a fost portat inca pentru acest tip de aplicatii.
Cauza pentru care inca nu a fost inca portat este destul de clara. Pentru aplicatiile metro style pentru Windows 8, nu folosim .NET Core si un .NET Framework, care are un API mult mai sarac. Multe functionalitati, mai ales din zona reflection lipsesc.
Am gasit pe codeplex un framework pentru WinRT, care se numea MetroIoc. http://metroioc.codeplex.com/
Parea destul de usor de folosit, asa ca am zis sa ii dau o sansa, sa vad daca functioneaza si daca este ce caut. API este foarte asemanator cu cel de la Unity, asa ca din punct de vedere a setup-ului la container l-am putut face foarte repede.
Am pregatit si o metoda de teste si surpriza. Testul nici macar nu a putut sa ruleze. A crapat procesul care rula testele. M-am mai jucat putin cu acesta, sperand ca poate sunt eu de vina, dar nu am reusit sa il fac sa functioneze.
Aplicatia la care lucrez fiind o aplicatie destul de simpla am zis ca cel mai bine este sa nu ma complic si sa risc sa am probleme in viitor. Revin la clasica proprietate "Instance" din fiecare clasa care vreau sa fie unica per proces.
O alta solutie ar fi sa imi definesc un ObjectFactory care sa imi tina in spate o lista statica de instante. M-am gandit ceva simplu, asemanator cu codul de mai jos:
public class ObjectFactory
{
public static ObjectFactory Instance { get; private set; }

static ObjectFactory()
{
Instance = new ObjectFactory();
}

private readonly Dictionary<Type, object> _objMapping;


public ObjectFactory()
{
_objMapping=new Dictionary<Type, object>();
}

public void AddObject<TType>(TType instance)
{
Type itemType = typeof (TType);
RemoveObject(itemType);

_objMapping.Add(itemType,instance);
}

private void RemoveObject(Type itemType)
{
if (_objMapping.ContainsKey(itemType))
{
_objMapping.Remove(itemType);
}
}

public TType GetInstance<TType>()
{
return (TType)_objMapping[typeof(TType)];
}
}

Mai mult de atata nu vreau sa fac in momentul de fata, deoarece ma astept ca in viitor o sa apara un mecanism de DI si pentru WinRT, si nu are rost sa incerc sa reinvetenz roata.
Read More
Posted in dependency injection, windows 8, WinRT | No comments

Wednesday, 4 April 2012

Manifest refereces file 'Bing.Maps.dll' which is not part of the payload.

Posted on 04:12 by Unknown
In cazul in care ati inceput sa lucrati cu Visual Studio 2011 Beta si Windows 8 ati putut observa ca exista deja SDK pentru Bing Maps pentru Metro Style. Acesta se poate instala la urmatoarea adresa:
http://visualstudiogallery.msdn.microsoft.com/0c341dfb-4584-4738-949c-daf55b82df58
Dar s-ar putea sa va treziti cu o eroare destul de ciudata cand vreti sa adaugati o harta in proiect:
Manifest refereces file 'Bing.Maps.dll' which is not part of the payload.
Fiind beta, exista mici scapari. Ca sa rezolvati aceasta probleme schimbati 'Platform Target' pentru proiectul vostru din 'Any CPU' in 'x86' sau 'x64'. Dupa acest pas totul ar trebui sa functioneze fara nici o problema.
Spor.
Read More
Posted in bing maps v7, error, visual studio, windows 8 | No comments

Luni 09.04.2012 - Emisiune live despre Windows Azure

Posted on 02:49 by Unknown
Luni, 09.04.2012, am fost invitat sa particip la un TeckTalk de catre comunitatea ITSpark. In cadrul acestei emisiune o sa discutam despre Windows Azure. Mai jos gasiti subiectele pe care o sa le abordam in cadrul emisiunii:
  • Windows Azure - overview
  • Componentele Windows Azure
  • Azure Development do-s and don't-s
O sa incercam sa discutam si despre bunele practici in dezvoltarea aplicatiilor pe aceasta platforma.
Emisiunea se va trasmite LIVE de la ora 18:00 la urmatoarea adresa http://live.itspark.ro/. In cadrul emisiunii puteti sa ne puneti orice intrebare legata de acest subiect. In cazul in care nu puteti sa ne urmariti live, puteti oricand sa urmariti emisiunea la urmatorea adresa http://itspark.ro/w/wiki/2012-04-09-itspark-techtalk-episodul-10.aspx.
Sa nu uitati ca vizionarea acestei emisiuni este GRATIS atat in versiune live cat si offline. Ne vedem luni de la ora 18:00.

UPDATE: La urmatoarea adresa puteti sa urmariti emisiune offline http://vimeo.com/channels/itspark#40531023
Read More
Posted in codecamp, itspark, prezentare, Windows Azure | No comments

Tuesday, 3 April 2012

New Podcast - "This Week in mLearning"

Posted on 15:16 by Unknown
I'm pleased to share details about a new social venture I'm supporting with my friend and colleague, RJ Jacquez; namely, a weekly podcast titled This Week in mLearning.  We've already recorded and published our first episode and I welcome the readers of this blog to subscribe to this series where we hope to share leading news stories and happenings across the world of mobile devices and apps in general and Training and Development initiatives in particular.  


For those who don't know him (and you should), RJ is an "Über" bright and insightful T-n-D professional, an avid blogger, a budding author, an app designer and one of the recognized talents in our growing industry. He worked as Senior Product Evangelist at Adobe for several years before striking out on his own last December (see bio below).  He now focuses much of his energy and passion in the area of mobility/mLearning recognizing how important the tools, technologies and processes our industry is now developing will be to everyone's ability to learn and prosper now and in all the years to come. 


For my part, I serve as RJ's sidekick, technical jack-of-all-trades and resident humorist as best I can -- an Andy Richter to his Conan O'Brien if you will -- and will also help mold the conversation based on the practical implementations and experiences I've gained from working with my team here at OnPoint. Most of my experiences in mLearning have been gained through the school of "hard knocks" delivering commercial mobile learning solutions well beyond simply planning or consulting on same for a series of very progressive customers who have thrown caution to the wind and jumped into the deep end of the pool sometime long before these technologies or practices were ready; armed with those experiences, I hope to bring a unique spin to the conversation each week.  We are planning to present relevant news and tips about all things mobile, and also plan to have a variety of guests joining us from time to time to share their real world experiences and talk about new tools and methods too. It should prove to be fun, engaging and hopefully beneficial to all who invest their time to listen.  


RJ is also doing "double duty" by recording a podcast each week in Spanish too with Mayra Aixa Villar, another avid mLearning aficionado, blogger and tweeter who hails from Argentina! My Espanol is too rusty to get much from their conversations but I'll reason they will be just as interesting and compelling as anything I can contribute to.


You can connect to and subscribe to the podcast series via the following link:


This Week in mLearning


Finally, here's RJ's bio to learn more about him. 
My name is RJ Jacquez and I am a Former Adobe Senior Evangelist. I spent 6 years at Adobe Evangelizing existing products and launching new ones. I'm currently writing an eBook on what I learned and why companies need Passionate Evangelist in today' Social Media world. I'm honored to be among great company in the following lists and articles: 1) Top 25 Most Influential Bloggers in Technical Communications (http://bit.ly/a8ooZC) 2) Top 20 most influential tweeters in eLearning, training and HR (http://bit.ly/vScfc0). 3) I was also mentioned in this article on Why Every Company Needs a Robert Scoble (infographic) for my work as an Adobe Evangelist (http://bit.ly/v0IMHs). Please follow me on Twitter @rjacquez 

Read More
Posted in | No comments
Newer Posts Older Posts Home
Subscribe to: Comments (Atom)

Popular Posts

  • Service Bus Topic - Automatic forward messages from a subscription to a topic
    Windows Azure Service Bus Topic is a service that enables us to distribute the same messages to different consumers without having to know e...
  • CDN is not the only solution to improve the page speed - Reverse Caching Proxy
    I heard more and more often think like this: “If your website is to slow, you should use a CDN.” Great, CDN is THE solution for any kind of ...
  • Content Types - Level 6: Rich Media
    Level 6: Rich Media NOTE: This is part 7 of 7 and the conclusion of this continuing series; please see earlier posts for more background inf...
  • Publishing our CellCast Widget for iPad
    The rush has been on this week as our development team worked to design a new version of our CellCast Widget specifically for Apple's up...
  • Patterns in Windows Azure Service Bus - Message Splitter Pattern
    In one of my post about Service Bus Topics from Windows Azure I told you that I will write about a post that describe how we can design an a...
  • E-Learning Vendors Attempt to Morph Mobile
    The sign should read: " Don't touch! Wet Paint !" I had a good chuckle today after receiving my latest emailed copy of the eLe...
  • SQL - UNION and UNION ALL
    I think that all of us used until now UNION in a SQLstatement. Using this operator we can combine the result of 2 queries. For example we wa...
  • Cum sa salvezi un stream direct intr-un fisier
    Cred ca este a 2-a oara când întâlnesc aceasta cerința in decurs de câteva săptămâni. Se da un stream și o locație unde trebuie salvat, se c...
  • Task.Yield(...), Task.Delay(...)
    I think that a lot of person already heard about these new methods. In this post I want to clarify some things about these new methods that ...
  • Content Types - Level 4: Reference
    Level 4: Reference Materials & Static Content NOTE: This is part 5 of 7 in a continuing series; please see earlier posts for more backgr...

Categories

  • .NET
  • .NET nice to have
  • #if DEBUG
  • 15 iunie 2011
  • 15 octombrie 2011
  • 2011
  • abstracta
  • action
  • adaugare
  • ajax
  • Amsterdam
  • Android
  • aplicatii
  • App Fabric
  • Apple iSlate
  • array
  • as
  • ASP.NET
  • AsReadOnly
  • Assembly comun
  • async
  • Asynchronous programming
  • asyncron
  • Autofac
  • AutoMapper
  • az
  • Azure
  • Azure AppFabric Cache
  • Azure backup solution
  • Azure Storage Explorer
  • azure. cloud
  • backup
  • BCP utility
  • bing maps v7
  • BitArray
  • BlackBerry
  • blob
  • BlobContainerPublicAccessType
  • breakpoint
  • bucuresti
  • C#
  • cache
  • CallerMemberName
  • CellCast
  • Certificate
  • CES
  • change
  • ChannelFactory
  • clasa
  • classinitialize
  • clean code
  • click event
  • close
  • Cloud
  • Cluj
  • cluj-napoca
  • Code contracts
  • code retrat
  • codecamp
  • CollectionAssert
  • Compact Edition
  • compara
  • Comparer T .Default
  • CompareTo
  • comparison
  • comunitate
  • concurs
  • Conditional attribute
  • configurare
  • connection string
  • container
  • content type
  • control
  • Convert
  • convertAll
  • convertor
  • cross platform
  • CRUD
  • css
  • custom properties
  • custom request
  • DACPAC
  • Daniel Andres
  • data sync service
  • database
  • date time
  • datetime
  • debug
  • default
  • delegate
  • dependency injection
  • deploy
  • DeploymentItem
  • design patterns
  • Dev de Amsterdam
  • development stoage
  • dictionary
  • diferente
  • digging
  • director
  • Directory.Exist
  • disable
  • dispatcher
  • dispose
  • dropdown
  • dynamic
  • EF
  • email
  • encoding
  • entity framework
  • enum
  • enumerable
  • Environment.NewLine
  • error
  • error 404
  • error handling
  • eveniment
  • event
  • ews
  • excel
  • exception
  • exchange
  • exita
  • explicit
  • export
  • extension
  • field
  • File.Exist
  • finalize
  • fire and forget
  • Fluent interface pattern
  • format
  • func
  • GC.SuppressFinalize
  • generic
  • getdirectoryname
  • globalization
  • gmail
  • hackathon
  • Hadoop
  • handle
  • HTML
  • html 5
  • Html.ActionLink
  • http://www.blogger.com/img/blank.gif
  • HttpModule
  • IComparable
  • IE
  • ienumerable
  • IIS
  • image
  • implicit
  • import
  • int
  • internationalization
  • Internet Explorer
  • interop
  • Ioc
  • IP Filter
  • iPhone
  • iQuest
  • IStructuralEquatable
  • ITCamp
  • itspark
  • java script
  • javascript
  • July 2012
  • KeyedByTypeCollection
  • KeyNotFoundException
  • Kinect SDK
  • lambda expression
  • LightSwitch Microsoft Silverlight
  • linq
  • list
  • lista
  • lista servicii
  • liste
  • Live Connect
  • Live ID
  • load
  • localization
  • lock
  • m-learning
  • MAC
  • Mango
  • map
  • mapare
  • mapare propietati
  • messagequeue
  • meta properties
  • method
  • MethodImpl
  • Metro App
  • Microsoft
  • Microsoft Sync Framework
  • mlearning
  • mlearning devices
  • Mobile Apps
  • mobile in the cloud
  • mobile learning
  • mobile services
  • Mobile Web
  • mongoDb
  • monitorizare
  • msmq
  • multitasking
  • MVC
  • MVC 3
  • MVVM
  • namespace
  • nextpartitionkey
  • nextrowkey
  • Ninject
  • nivel acces
  • no result
  • normalize
  • nosql
  • null expcetion
  • null object pattern
  • NullReferenceException
  • OAuth API
  • office
  • offline
  • Open ID
  • openhackeu2011
  • operations
  • operator
  • optimization
  • option
  • outputcache
  • OutputCacheProvider
  • override
  • paginare
  • pagination
  • path
  • persistare
  • Portable Library tool
  • Post event – CodeCamp Cluj-Napoca
  • predicate
  • predictions
  • prezentare
  • process
  • proiect
  • property
  • propietati
  • query
  • ReadOnlyCollection
  • ReadOnlyDictionary
  • referinta
  • reflection
  • remote
  • reply command
  • request
  • request response
  • resouce
  • REST
  • REST Client
  • RESTSharp
  • ronua
  • rss
  • rulare
  • salvare in fisier
  • sc
  • schimbare timp
  • select
  • select nodes
  • send
  • serializare
  • serialization
  • Server.Transfer. Resposen.Redirect
  • service bus
  • ServiceBase
  • servicecontroller
  • sesiune
  • session
  • Session_End
  • Session_Start
  • setup
  • Sibiu
  • signalR
  • Silverlight
  • sincronizare
  • Single Responsibility Principle
  • SkyDrive
  • skype
  • smartphones
  • smtp
  • Snapguide
  • sniffer
  • socket
  • solid
  • spec#
  • sql
  • Sql Azure
  • SQL CE
  • sql server 2008 RC
  • SRP
  • startuptype
  • stateful
  • stateless
  • static
  • stergere
  • store
  • store procedure
  • stream
  • string
  • string.join
  • struct
  • StructuralEqualityComparer
  • submit
  • switch
  • Symbian
  • Synchronized
  • system
  • tabele
  • table
  • techEd 2012
  • tempdata
  • test
  • testcleanup
  • testinitialize
  • testmethod
  • thread
  • timer
  • ToLower
  • tool
  • tostring
  • Total Cost Calculator
  • trace ASP.NET
  • transcoding
  • tuplu
  • tutorial
  • TWmLearning
  • type
  • unit test
  • unittest
  • UrlParameter.Optional
  • Validate
  • validation
  • verificare
  • video
  • view
  • ViewBag
  • virtual
  • visual studio
  • VM role
  • Vunvulea Radu
  • wallpaper
  • WCF
  • WebBrower
  • WebRequest
  • where clause
  • Windows
  • windows 8
  • Windows Azure
  • Windows Azure Service Management CmdLets
  • windows live messenger
  • Windows Mobile
  • Windows Phone
  • windows service
  • windows store application
  • Windows Task
  • WinRT
  • word
  • workaround
  • XBox
  • xml
  • xmlns
  • XNA
  • xpath
  • YMesseger
  • Yonder
  • Zip

Blog Archive

  • ►  2013 (139)
    • ►  November (17)
    • ►  October (12)
    • ►  September (10)
    • ►  August (7)
    • ►  July (8)
    • ►  June (15)
    • ►  May (12)
    • ►  April (17)
    • ►  March (16)
    • ►  February (9)
    • ►  January (16)
  • ▼  2012 (251)
    • ►  December (9)
    • ►  November (19)
    • ►  October (26)
    • ►  September (13)
    • ►  August (35)
    • ►  July (28)
    • ►  June (27)
    • ►  May (24)
    • ▼  April (18)
      • Directory.GetFiles - odd result
      • WIndows 8 versions
      • How to integrate Facebook in a Windows 8 Metro Sty...
      • DataContract and XMLIgnore attribute
      • Cannot serialize member ... because it implements ...
      • Bug on Windows Phone 7 Exchange Client Automatic R...
      • Windows Azure Media Service - Overview
      • DB error not handled by the web application
      • ITCamp 2012
      • "This Week in mLearning" Podcast: Week #2
      • Background task in Windows 8 Metro Style App
      • URI in Windows 8 Metro Style App
      • How to read/write data from Windows Metro Style App
      • VS2011 BETA: Error : DEP3000 : Attempts to stop th...
      • Dependency Injection framework for WinRT - Widows ...
      • Manifest refereces file 'Bing.Maps.dll' which is n...
      • Luni 09.04.2012 - Emisiune live despre Windows Azure
      • New Podcast - "This Week in mLearning"
    • ►  March (17)
    • ►  February (20)
    • ►  January (15)
  • ►  2011 (127)
    • ►  December (11)
    • ►  November (20)
    • ►  October (8)
    • ►  September (8)
    • ►  August (8)
    • ►  July (10)
    • ►  June (5)
    • ►  May (8)
    • ►  April (9)
    • ►  March (14)
    • ►  February (20)
    • ►  January (6)
  • ►  2010 (26)
    • ►  December (1)
    • ►  November (1)
    • ►  October (1)
    • ►  June (2)
    • ►  May (1)
    • ►  April (4)
    • ►  March (1)
    • ►  February (1)
    • ►  January (14)
Powered by Blogger.

About Me

Unknown
View my complete profile