Skip to main content

Posts

Showing posts from June, 2012

Day 4 of TechEd 2012 - Amsterdam

Astazi a fost ultima zi a TechEd Europe 2012. Ca orice ultima zi a trecut extrem de repede dar a fost plina de continut de specialitate. Haideti sa vedem la ce sesiuni am fost astazi.
Am inceput ziua asa cum se cuvine, cu o sesiune de async calls pentru .NET 4.5 - "Async made simple in Windows 8, with C# and VB". Pot sa va spun ca am savurat aceasta prezentare, nu din cauza ca era vorba despre async, ci din cauza ca odata la 2-3 minute aflai ceva noi. Desi pana acuma am folosit async, am aflat destul de multe lucruri noi in cadrul acestei sesiuni pe care nu le stiam pana acuma.
Urmatoarea pe lista a fost "Achieving Enterprise Integration Patters with Windows Azure Service Bus". A fost o sesiune la fel de interesata ca si prima, iar la cum se anunta lucrurile Service Bus-ul din Azure devine din ce in ce mai serios. Nu mai este o jucarie.
A treia sesiune din ziua de azi a fost "Building High Performing Parallel Application Services on Windows Azure". Aveam …

Day 3 of TechEd 2012 - Amsterdam

Si s-a terminat si ziua a treia a TechEd 2012. Dupa circa 3 ore petrecute in fiecare zi in Amsterdam RAI, oboseala incepe sa isi faca simtita prezenta. Aceasta a fost ultima zi intreaga. Maine fiind ultima zi, conferinta o sa se termine mult mai devreme.
Astazi am inceput ziua cu sesiunea "Learn Big Data Application Development on Windows Azure". Daca nu ati stiut pana acuma, pe Windows Azure exista si Hadoop, care ne permite sa procesam si sa analizam un volum foarte mare de date.
Dupa aceasta sesiune, mi-a fost dor sa vad putin cod, asa ca m-am dus la "Real World Developer Testing with Visual Studio 2012". A fost o sesiune unde nu s-au prezentat diferite framework-uri pentru a scrie teste. Chiar daca nu tinea de parte de dev, am participat si la sesiunea "Windows 8: BitLocker". S-a discutat despre aceasta noua functionalitate pe Windows 8, care ne permite sa ne luam pe un stick "PC-ul", iar apoi sa il putem rula de pe orice calculator, fara s…

Memento Pattern - the key to unde/redo functionality

Cati dintre voi ati auzit de paternul Memento? Astazi vrea sa povestim despre acest patern.
Ca si multe alte paternuri, acesta il folosim de foarte multe ori fara sa ne dam seama. In viata de zi cu zi, de fiecare data cand dam Undo/Redo in Visual Studio sau in Word o forma a acestui patern este folosita.
Acest patern ne ofera posibilitatea sa readucem obiectul intr-o stare precedenta. Aceasta stare a fost de catre noi salvata intr-un anumit moment si putem sa revenim la ea in orice moment. In momentul in la un obiect se face rollback spre o stare din trecut, acesta o sa aibe aceiasi stare ca si in momentul respectiv.
Atentie, starea unui obiect intr-un anumit moment este o notiune abstracta, care in functie de caz si de ce este nevoie pentru un anumit caz. Din aceasta cauza o salvare de stare poate sa implice ca doar o parte din valorile unui obiect sa reprezinta o anumita stare.
In momentul cand vrem sa implementam acest patern, o sa avem trei entitati implicate in aceasta poveste.
Origin…

Day 2 of TechEd 2012 - Amsterdam

Si iata ca a trecut si a doua zi din TechEd Europe 2012. Daca ziua de ieri a fost dedicata cloud-ului, atat public cat si privat, ziua de azi a stat sub semnul Windows 8 impreuna cu cloud. In comparatie cu ziua de ieri, sesiunile din aceasta zi au fost mult mai interesante, s-a trecut usor de la generalitati la lucruri la complexe.
Ziua a inceput destul de devreme, dar in forta. Antoine Leblond a deschis ziua a doua cu un keynote despre Windows 8. Au fost prezentate atat functionalitatile de baza cat si cele pentru mediul enterprise. De exempl cum poti sa iti iei calculatorul de la servici pe stick si sa il folosesti de acasa, fara a trebui sa instalezi orice alt produs sau sa iti pui probleme de securitate.
Dupa aceasta sesiune am participat la sesiune lui NIck Harris despre cum sa contruiesti o aplicatie pentru Windows 8 care sa foloseasca pe partea de backend Windows Azure. A fost o prezentare pe gustul oricarui dezvoltatori. Aplicatia a fost scrisa de la 0 in cele 75 de minute.
Cu…

Serie de turoriale despre debug in Visual Studio

Mai jos puteti sa gasiti link-uri spre o lista de posturi personale despre cum putem sa facem debug in Visual Studio:
Base Visual Studio debugging functionalitiesDebugging multithreaded applications in Visual StudioSome cool stuff debugging with Debugger CanvasNew debugging functionalities in Visual Studio 2012Visual Studio debugging tips and tricks Daca aveti si alte propuneri, va rog sa imi lasati un comment.

Day 1 of TechEd 2012 - Amsterdam

In aceasta saptamana particip la TechEd Europe. 2012 este primul an cand TechEd se tine in Amsterdam. Locatia aleasa este Amsterdam RAI, un centru de conferinte destul de mare. In unele cazuri iti poate lua si 20 de minunte ca sa ajungi de la o sesiune la alta, iar chiar si cu harta in mana de poti pierde pe holuri.

Haideti sa vedem la ce sesiuni am fost azi. Am inceput cu keynote-ul unde ni s-au prezentat ultimele produse in care Microsoft pompeaza resurse la greu, in special Windows 8 si Azure. Dupa acesta introducere am fost la "Meet the Windows Azure". A fost un overview despre noua versiune de Windows Azure si ce aduce nou. Cel mai importat lucru pentru mine din cadrul acestei sesiuni a fost memory cache-ul, care lipsea pana acuma si modul in care se pot atasa partii virtuale la o masina.
A treia prezentare a fost despre Visual Studio 2012. Mi s-a parut cea ma buna sesiune din ziua de azi la care am participat. De ce? A fost singura sesiune la care am invatat lucuri noi…

How should we treat virtual methods exposed in APIs (Part 2)

In postul precedent am descutat despre o problema care poate sa apara cand expunem intr-un API metode virtuale, care sunt apoi suprascrise de catre un alt dezvoltator. Iar o versiune ulterioara a API schimba comportamentul aplicatiei in asa fel incat suntem obligati sa schimbam codul care foloseste API expus.
Mai jos gasiti o posibila solutie la aceasta problema.
public abstract class FooBase
{
private void DoAction()
{
// Custom code that can be executed by our method.
DoActionCore();
// More custom code that can be executed by our method.
}

public virtual void DoActionCore()
{
// Some action
}
}

public class MyCustomFoo : FooBase
{
public override void DoActionCore()
{
// My custom code of MyCustomFoo that will be
// executed by DoAction method from base class.
}
}O solutie de acest gen o sa functioneze, doar daca cel care expune API o sa o foloseasca de la prima versiune.
O alta varianta este ca metode DoActionCore…

How should we treat virtual methods exposed in APIs

Cu cateva zile in urma mi s-a cerut sa investighez de ce nu functioneaza o aplicatie asa cum trebuia in urma unui upgrade de framework, iar cand am gasit cauza problemei am zis ca trebuie sa va zic si voua.
Un mic framework care era folosit definea o clasa de baza abstracta, care la randul ei continea cateva metode virtuale.
public abstract class FooBase { public virtual void DoAction1() { ... } ... } Implementarea care era facuta in sismul nostru asta in felul urmator:
public class MyCustomFoo : FooBase { ... public override void DoAction1() { // Some custom action ... } } Problema la MyCustomFoo este ca metoda DoAction1() nu apeleaza metoda din clasa de baza. Asta nu ar fi nici o problema cat timp cel care a scris acest cod implementeaza aceasta functionalitate. Pe vechia versiune de framework, acest lucru era in regula, dar noua versiune schimba usor o functionalitate si are nevoie neaparat ca metoda din clasa de baza sa fie …

XXX takes a dependency on Microsoft.VCLibs.110 framework but is missing the framework dependency declaration in the manifes.

In cazul in care incercati sa validati aplicatie Metro style App pentru Windows 8 si va treziti cu urmatoarea eroare:
XXX takes a dependency on Microsoft.VCLibs.110 framework but is missing the framework dependency declaration in the manifes.
o sa fie destul de ciudat de rezolvat si gasit cauza daca proiectul vostru este un proiect XAML cu C# sau HTML 5 cu JavaScript.
By default voi nu aveti nici o referinta la nici un proiect C++ care sa va genereze aceasta dependinta. In cazul in care ati folosit librarii externe precum cele pentru Bing Maps, in mod indirect o sa aveti o dependinta spre aceasta librarie.
Daca am fi fost intr-un proiect de C++ si nu C# aceasta dependinta ar fi fost adaugata automat. Adaugarea acestei dependinte trebuie sa fie facuta din fisierul "Package.manifest". Din pacate nu se poate face dintr-o interfata grafica prietenoasa.
O sa fie nevoie sa deschideti acest fisier dintr-un editor XML sau test si sa adaugati sub nodul "Package" urmatorul cod:
&…

How to validate a Windows 8 application

Inainte sa publicam o aplicatie in store-ul de Windows 8, aplicatia noastra trece printr-un proces de validare.
O parte din validare o putem face si noi local, folosindu-ne de "Windows App Certification Kit". In mod normal daca aveti instalat Windows SDK o sa gasiti si aceasta aplicatie (vine la pachet cu Visual Studio 2012).
Dupa ce ati pornit aceasta aplicatie, primul pas este sa selectati tipul de aplicatie pe care vreti sa o validati:
Metro style AppDesktop AppDesktop Device App Dupa acest pas este nevoie sa selectati aplicatia voastra din lista (aceasta trebuie sa fie deja instalata pe sistem) iar apoi sa dati next.
In urma procesului de validare o vi se afiseze un mesaj mare de genul FAILED sau PASS. In cazul in care aveti mesajul FAILED, puteti fara nici o problema sa deschideti fisierul de output generat si sa vedeti in ce zona de teste aplicatia voastra a crapat si care a fost cauza.

Why I cannot use Live account on some Microsoft Services

De ceva vreme ma trezeam ca anumite servicii noi adaugate de catre Microsoft care se acceseaza cu ajutorul unui cont de Live nu functioneaza. Cand doream sa ma logam cu userul si parola nu reuseam.
Acest lucru se intampla atat pe telefon cat si de pe desktop. Unele persoane spuneau ca din cauza ca account-ul este unul vechi (de peste 10 ani) unele servicii nu functioneaza. Mi s-a parut ciudata cauza si nu eram convins de aceasta problema.
Astazi am avut nevoie sa reinstalez Windows 8 pe cateva masini si dupa ce m-am inregistrat cu account-ul meu m-am trezit ca nu mai ma pot loga. Aveam o masina virtuala blocata si o tableta cu Windows 8 blocata. Si asa am ajuns sa sap, sa vad care poate sa fie problema.
Cauza se pare ca este lungimea parolei. In cazul meu aveam o parola de peste 20 de caractere. Am fost nevoit sa schimb parola la una mai scurta de 16 caractere si totul a revenit la normal.
Un singur lucru pot sa spun din pacate .... rusinica.

Applications bugs that can be caused by 'ref' keyword

Zilele acestea ma uitam peste un cod si am intalnit urmatoarea linie de cod:
Foo foo1 = new Foo(); ... Foo foo2 = foo1; ... DoSomeAction(ref foo1) { ... foo1 = new Foo(); ... } ... Pentru unele cazuri se ajungea ca in interiorul metodei DoSomeAction sa se creeze o noua instanta a obiectului Foo. Iar in unele cazuri aplicatia crapa intr-o alta locatie destul de urat. Nu o sa incep sa explic ce face keyword-ul ref si out.
Totusi am adaugat un citiat din MSDN ca sa pornim de la un punct comun.
The ref keyword causes an argument to be passed by reference, not by value. The effect of passing by reference is that any change to the parameter in the method is reflected in the underlying argument variable in the calling method. The value of a reference parameter is always the same as the value of the underlying argument variable. An argument that is passed to a ref parameter must be initialized before it is passed. This differs from out parameters, whose arguments do not have to b…

Visual Studio debugging tips and tricks

Continui seria de posturi (1, 2, 3, 4) despre debug cu un post despre tips and tricks.
Daca in posturile precedente am vorbit despre cum se face debug in Visual Studio in functie de diferite cazuri, astazi vreau sa va prezint cateva tips and tricks din aceata zona.

Make Object Id
Prin acesta functionalitate putem sa facem tracking la un obiect chiar daca am iesit in afara blocului unde a fost declarat. Trebuie sa mentionez ca acest lucru se poate face doar cu reference type. Din fereastra de "Watch" trebuie sa dati click pe variabila pe care o aveti deja adaugata si sa selectati "Make Object ID". In urma acestei actiuni. In urma acestei actiuni o sa observati ca apare o noua variabile cu un nume de genul #1, iar valoarea o sa fie terminata cu "{1#}". Si dupa iesirea din blocul unde erau declarate si folosite, acestea o sa ramana in continuare active.

Immediate Windows
Aceasta fereastra poate sa fie extrem de utila cand este nevoie sa verificam anumite expre…

New debugging functionalities in Visual Studio 2012

Continui seria de posturi (1, 2, 3) cu noile functionalitati de debug din Visual Studio 2012. In acest post o sa vorbim despre ce a adus nou Visual Studio 2012 pe partea de debug.
In cazul in care lucrati cu aplicatii web in noul Visual Studio o sa vedeti ca langa butonul de Debug a aparut o lista cu browerele sub care doriti sa rulati aplicatia. Acest feature este destul de util, mai ales ca nu mai este nevoie sa ne instalam tot felul de plugin-uri care faceau acest lucru.
 Tot acest buton ne permite sa rulam sa pornim cu un sigur click aplicatia noastra in mai multe browsere. Pentru acest lucru este nevoie sa dati click pe "Browse With...". In aceasta locatie puteti selectati mai multe browesere pe care sa le setati ca default. In cazul in care doriti puteti seta si dimensiunea ferestrei.
O alta noua functionalitate este pe partea de profiling, care ne permite sa identificam zonele de cod lente. Aceasta suporta in momentul de fata si Metro Applications. Partea de profiling …

WTF - Package Load Failure - Microsoft.VisualStudio.TeamFoundation.VersionControl.HatPackage, Microsoft.VisualStudio.TeamFoundation.VersionControl

In cursul zilei de azi am avut parte de o experienta destul de neplacuta. De doua ori mi s-a restartat PC-ul fortat in timp ce Visual Studio se incarca. O sa spuneti si ce daca, asa am zis si eu, dar am avut o surpriza neplacuta sa ma trezesc cu niste erori destul de urate.
Dupa ce pornit din nou sistemul de operare si Visual Studio am vrut sa accesez din Team Explorer Source Control-ul dar m-am trezit ca acest lucru nu mai este posibil. Puteam sa vad lista de build-uri, documentele de pe SharePoint si orice altceva, mai putin sa accesez Source Controler-ul. Am primit o eroare destul de urata, asemanatorare cu urmatoarea:
... Package Load Failure - Microsoft.VisualStudio.TeamFoundation.VersionControl.HatPackage, Microsoft.VisualStudio.TeamFoundation.VersionControl ... WTF, de unde pana unde, nici nu stiam de unde sa o iau. Am incercat restore la OS la o versiune precedenta dar la fel. Am incercat sa reinstalez Team Explorer-ul dar fara nici un rezulvat. Pana la urma am ajuns in cache-…

Some cool stuff debugging with Debugger Canvas

Continui seria de posturi (1, 2) despre cum sa facem debug in Visual Studio cu un post dedicat Debugger Canvas.
Cati dintre voi ati apucat sa o folositi intr-un mediu real? Mai mult ca sigur v-ati jucat cu ea, dar ati reusit sa o folositi mereu? Eu va spun sincer ca nu. Sunt cazuri cand poate sa fie foarte utila, dar in unele situatii, cand vrem sa facem un debug simplu e mult prea complexa.
Acesta este un tool free, care poate sa instalat in Visual Studio. Il puteti download din urmatoarea locatie http://download.microsoft.com/download/5/A/7/5A7FB2E7-5720-4739-BDDE-28A684C5B291/Microsoft.DebuggerCanvas.vsix si daca ma intrebati pe mine, este unul din tool-urile care nu poate sa lipseasca din Visual Studio.
Cand mi se pare extrem de utila? In momentul in care este nevoie sa facem debug intr-un mediu cu multe thread-uri care ruleaza simultan sau cand avem parte de recursivitate. In aceste cazuri este extrem de usor sa urmarim valorile  la fiecare field sau variabila din call stack.

Oda…

Debugging multithreaded applications in Visual Studio

In postul precedent am povestit putin despre cateva lucruri de baza cand facem debug in Visual Studio. Astazi o sa continuam aceasta discutie si o sa vedem cum putem face debug intr-un mediu multi-thread si multi-processor.
Cand lucram cu mai multe thread-uri, fereastra "Threads" devine cea mai buna prietena a noastra. Prin intermediul acesteia, cand aplicatia ajunge la un breakpoint putem sa vedem toate thread-urile active in procesul nostru. Pentru fiecare thread, putem sa vedem numele acestuia, ID-ul prioritatea si nu in ultimul rand call stack-ul pentru fiecare thread in parte (numele la coloana este "Location"). De foarte multe ori callstack-ul ne ajuta foarte mult nemaifiind nevoie sa selectam cate un thread in parte pentru a vedea callstack-ul.
In momentul cand suntem intr-un breakpoint sa nu uitati ca restul thread-urile ruleaza in continuare. In dreapta acestei ferestre avem un buton "Freeze" prin intermediul caruia putem sa facem freeze la toate…