Skip to main content

Posts

Showing posts from April, 2012

Directory.GetFiles - odd result

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…

WIndows 8 versions

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 8Windows 8 ProWindows 8 EnterpriseWindows 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 CommanderWindows RT este o versiune de Windows pentru procesoare WOA si ARM. Aceasta editie o sa vina preinstalata pe…

How to integrate Facebook in a Windows 8 Metro Style Application

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 use…

DataContract and XMLIgnore attribute

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 …

Cannot serialize member ... because it implements IDictionary

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 DataContrac…

Bug on Windows Phone 7 Exchange Client Automatic Reply

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.

Windows Azure Media Service - Overview

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 fa…

DB error not handled by the web application

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…

ITCamp 2012

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 CloudDevelopment & MobileArchitecture & 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).

Background task in Windows 8 Metro Style App

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 updat…

URI in Windows 8 Metro Style App

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 internetms-resource - locatia care contine fisiere de…

How to read/write data from Windows Metro Style App

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 libraryHome groupMedia server devicesMusic libraryPictures libraryRemovable libraryVideo 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 fa…

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

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 avea…

Dependency Injection framework for WinRT - Widows 8 application

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…

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

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.

Luni 09.04.2012 - Emisiune live despre Windows Azure

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 - overviewComponentele Windows AzureAzure 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