Windows Mobile Support

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

Friday, 29 June 2012

Day 4 of TechEd 2012 - Amsterdam

Posted on 09:08 by Unknown
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 alte asteptari de la aceasta sesiune, a fost destul de seaca, iar continutul nu a fost la cea ce ma asteptam din pacate.
TechEd-ul l-am terminat cu "Developing High Performing Parallel Application Services on Windows Azure". Se pot face lucruri foarte frumoase pe Windows Azure, mai ales cand vorbim de simulari si de analize date, sper sa am ocazie sa lucrez vreodata la un simulator care isi face partea computationala in cloud.
Primele doua prezentari din acesta zi au fost cireara de pe tort de la tot TechEd-ul pentru mine. Doar pentru aceste doua prezentari merita un drum in Amsterdam.
Hot tip of the day: In aceata zi este despre Service Bus si SharePoint. Se zvoneste prin Amsterdam ca urmatoarea versiune de SharePoint o sa foloseasca pe partea de workflow (in zona de session state) Service Bus. O sa revin cu un post pe aceasta tema cat de curand.
Si bonus, pentru cei care au Windows Phone 7+, daca tineti timp de 5 secunde butonul de lock cand acesta este blocat, camera video se porneste automat.
La revedere Amsterdam, la revedere TechEd Europe 2012. Ne vedem anul viitor.
Read More
Posted in techEd 2012 | No comments

Thursday, 28 June 2012

Day 3 of TechEd 2012 - Amsterdam

Posted on 11:49 by Unknown
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 sa ne facem probleme de securitate sau ca putem sa pierdem date.
"Building HTTP Services with ASP.NET Web API" a fost una din sesiunile la care am participat. A fost prezentat Web API de pe ASP.NET destul de detaliat. As fi vrut sa aflu mai multe, dar asta o sa fac cu prima ocazie cand am putin timp liber si o sa sap. Desi a fost o prezentare de nivel 300, din pacate continutul a fost doar de 100.
Ziua de azi s-a sfarsit cu "Creating and Consuming OData Services for Business Applications". In momentul de fata OData Services este extrem de matur si puternic, dar aveti grija Web API vine tare din spate, dar nu o sa fie inlocuit cat de curand de Web API.
Hot tip of the day: In Visua Studio 2012, chiar daca unele functionalitati nu mai sunt asa de usor de accesat, de exemplu sa deschidem Source Control, toate acestea au key shortcuts deja definite.
Cel mai mult am savurat prima sesiune si am fost impresionat de ce putem face cu Hadoop pe Windows Azure. Maine ne luam la revedere de la TechEd 2012 si de la Amsterdam :(
Read More
Posted in techEd 2012 | No comments

Wednesday, 27 June 2012

Memento Pattern - the key to unde/redo functionality

Posted on 16:29 by Unknown
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.
  • Originator - acest obiect reprezinta obiectul la care noi salvam statie si stie sa se salveze pe el insusi
  • Memento - este obiectul unde se salveaza Originator-ul in stare data. Toate valorile care apartin de Originator in stare in care s-a facut salvarea sunt stocare in acest obiect
  • Caretaker - este cel care stie de ce si cand Origininator trebuie sa salveze sau sa isi faca restore
Am vazut diferite implementari la acest patern, dar o raman pe cea mai simpla.
Mai jos gasiti un exemplu de implementare:
public class Memento
{
public string State { get; private set; }

public Memento(string state)
{
State = state;
}
}

public class Original
{
public string State { get; set; }

public Memento CreateMemento()
{
return new Memento(State);
}

public void RestoreMemento(Memento memento)
{
State = memento.State;
}
}

public class Caretaker
{
public Memento Memento { get; set; }
}

Iar utilizarea s-a este urmatoarea:
static void Main(string[] args)
{
Original original = new Original()
{
State = "1"
};
Console.WriteLine(original.State);

Caretaker caretaker = new Caretaker();
caretaker.Memento = original.CreateMemento();
original.State = "2";
Console.WriteLine(original.State);

original.RestoreMemento(caretaker.Memento);
Console.WriteLine(original.State);
}
Sa nu uitati cand salvati obiectele (la cele de tip referinte), sa o faceti printr-o cloanare (sub orice forma ar fi aceasta) si doar prin referinta. Deoarece in cazul in care se face restore la un obiect o sa aveti parte de surprize. O solutie la aceasta probleme este sa implementati interfata IClonable pentru Originator. Dar trebuie sa aveti grija ca acest lucru este cu doua taisuri. Recomand totusi o metoda separata pentru partea de salvare a unei stari curente.
Daca avem putina imaginatie, putem sa ne implementam un mecanism de undo/redo destul de usor. Am putea sa folosim doua cozi de mesaje, una care sa tina toate starile pentru undo si alta pentru redo. Trebuie sa aveti grija, cand luati un Memento de pe o anumita coada sa il puneti imediat pe cealalta si cand adaugi un nou memento sa resetati coada de redo.
Mai jos puteti sa gasiti o implementare. M-am aberat de dragul artei putin.
public enum MementoType
{
Undo,
Redo
}

public interface IMemento<T>
where T : IOriginator
{
}

public class Memento<T> : IMemento<T>
where T : IOriginator
{
public T State { get; private set; }

public Memento(T originator)
{
State = (T)originator.Clone();
}
}

public interface IOriginator : ICloneable
{
IMemento<IOriginator> CreateMemento();

void RestoreMemento(IMemento<IOriginator> memento);
}

public abstract class Originator : IOriginator
{
public abstract object Clone();

public abstract void RestoreMemento(IMemento<IOriginator> memento);

public IMemento<IOriginator> CreateMemento()
{
return new Memento<IOriginator>(this);
}
}

public interface ICaretaker
{
void AddMemento<TOriginator>(TOriginator originator)
where TOriginator : IOriginator;

TOriginator GetMemento<TOriginator>(MementoType type)
where TOriginator : IOriginator;
}

public class Caretaker : ICaretaker
{
public IDictionary<Type, Stack<IOriginator>> _redoItems = new Dictionary<Type, Stack<IOriginator>>();
public IDictionary<Type, Stack<IOriginator>> _undoItems = new Dictionary<Type, Stack<IOriginator>>();

public void AddMemento<TOriginator>(TOriginator originator)
where TOriginator : IOriginator
{
Stack<IOriginator> currentStack = GetStack<TOriginator>(MementoType.Undo);
GetStack<TOriginator>(MementoType.Redo).Clear();
currentStack.Push(originator);
}

public TOriginator GetMemento<TOriginator>(MementoType type)
where TOriginator : IOriginator
{
Stack<IOriginator> currentStack = GetStack<TOriginator>(type);

if (currentStack.Count==0)
{
throw new KeyNotFoundException(
string.Format("The memento was not found in the dictionary, {0}", typeof(TOriginator).FullName));
}

IOriginator current = currentStack.Pop();
GetOppositeStack<TOriginator>(type).Push(current);

return (TOriginator)current;
}

private Stack<IOriginator> GetStack<TOriginator>(MementoType type)
where TOriginator : IOriginator
{
IDictionary<Type, Stack<IOriginator>> currentMapping = GetMapping(type);

return GetStack(currentMapping, typeof(TOriginator));
}

private IDictionary<Type, Stack<IOriginator>> GetMapping(MementoType type)
{
IDictionary<Type, Stack<IOriginator>> currentMapping = null;
switch (type)
{
case MementoType.Undo:
currentMapping = _undoItems;
break;
case MementoType.Redo:
currentMapping = _redoItems;
break;
}

return currentMapping;
}

private Stack<IOriginator> GetOppositeStack<TOriginator>(MementoType type)
where TOriginator : IOriginator
{
return GetStack(GetMapping(GetOppositeType(type)), typeof(TOriginator));
}

private MementoType GetOppositeType(MementoType type)
{
MementoType oppositeType;
switch (type)
{
case MementoType.Undo:
oppositeType = MementoType.Redo;
break;
case MementoType.Redo:
oppositeType = MementoType.Undo;
break;
default:
throw new NotImplementedException();
}

return oppositeType;
}

private Stack<IOriginator> GetStack(IDictionary<Type, Stack<IOriginator>> mapping, Type mementoType)
{
Stack<IOriginator> currentStack = null;
if (mapping.ContainsKey(mementoType))
{
currentStack = mapping[mementoType];
}
else
{
currentStack = new Stack<IOriginator>();
mapping.Add(mementoType, currentStack);
}

return currentStack;
}
}
Acuma ca am vazut paternul de baza, ne putem da seama ca exista multe variante. In unele implementari obiectul Originator nu stie sa isi salveze starea, iar o alta entitate se ocupa cu acest lucru. In alte cazuri, Caretaker-ul lipseste in totalitate.
As vrea sa va atrag atentia la cel mai important lucru cred. Mement-ul reprezinta starea unui obiect dintr-un anumit moment si pe baza lui trebuie sa puteti reveni la starea data indiferent de context.
Read More
Posted in design patterns | No comments

Day 2 of TechEd 2012 - Amsterdam

Posted on 16:03 by Unknown
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.
Cum nu aveam inca o idee foarte bine formata despre Private Cloud, am decis sa participa la sesiunea "Private Cloud Principles, Concepts and Pattern", sustinuta de Tom Shinder. A fost o prezentare extrem de utila, cu foarte mult continut folositor. Cea mai importanta concluzie dupa aceasta prezentare a fost ca Private Cloud nu inseamna o fabrica de servere on-premise, poate sa fie si Windows Azure sau o combinatie intrece cele doua. Private Cloud reprezinta un mediu privat unde doar o anumita are acces si se poate folosi de resurse.
Vishal Joshi a vorbit despre "App Deployment Options for Windows Azure". Ne-a fost prezentate modalitatile prin care se poate face deploy la o aplicatie in Windows Azure. De la Visual Studio si TFS, pana la FTP si Git.
In urma keynote-ului de azi dimineata m-a decis sa particip la sesiune lui Brad McCabe - "Windows 8 - Overview for the enterprise, Enabling FlexibleWorkstyles". Eram curios sa vad ce aduce nou acest sistem de operare pentru cei din enterprise. Tot ce pot spune este ca IT-ul o sa fie mult mai fericit de acuma incolo.
Ziua am terminat-o in forta cu Steve Marx care a vorbit despre software as a service solutions in Windows Azure. Ca si continut mi s-a parut cea mai reusita prezentare la care am participat astazi.
Hot tip of the day: Daca am aloca cate 10MB la fiecare chinez, Windows Azure ar avea inca spatiu de stocare available. Ce inseamnata asta? Hai sa vedem:
1339724852 persons x 10 MB = 13397248520 MB = 13083250 GB = 12776 Tera = 12.5 PB (Petabyte)
Frumos spatiu de stocare, care cu fiecare secunda continua sa creasca.
Ne auzim maine seara? Va ofer posibilitatea ca sa imi propuneti pentru ziua de vineri la ce sesiuni sa particip. Astept propuneri de la voi.
Read More
Posted in techEd 2012 | No comments

Tuesday, 26 June 2012

Serie de turoriale despre debug in Visual Studio

Posted on 15:48 by Unknown
Mai jos puteti sa gasiti link-uri spre o lista de posturi personale despre cum putem sa facem debug in Visual Studio:
  1. Base Visual Studio debugging functionalities
  2. Debugging multithreaded applications in Visual Studio
  3. Some cool stuff debugging with Debugger Canvas
  4. New debugging functionalities in Visual Studio 2012
  5. Visual Studio debugging tips and tricks
Daca aveti si alte propuneri, va rog sa imi lasati un comment.
    Read More
    Posted in debug, visual studio | No comments

    Day 1 of TechEd 2012 - Amsterdam

    Posted on 15:32 by Unknown
    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 si foarte interesante. Am continuat cu "An Overview of Managing Applications, Services & Virtul Machines in Windows Azure", unde nu am apucat deloc sa ma plictisesc. Am continuat cu Windows Azure, a.i. ultima sesiune pe ziua de azi la care am participat a fost "Cloud-Ready Data Services".
    Hot tip of the day: Cei de la Nokia au anuntat ca cea mai mare parte din modele cu Windows  Phone 7 o sa suporte si Windows Phone 8 (seria Lumia si se pare si 610). Asa ca putem sa stam linistiti, strategia lor de marketing ne pune intr-un loc sigur.
    A fost o zi extrem de interesanta si imi doresc sa vad asa ceva si in Romania. Ne auzim maine seara.

    Update: http://mashable.com/2012/06/20/windows-phone-7-8/ Nokia Lumia 900 with Windows Phone 8. 
    Read More
    Posted in techEd 2012 | No comments

    Sunday, 24 June 2012

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

    Posted on 05:47 by Unknown
    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 sa fie declarata ca si abstracta, in cazul in care vrem sa obligam dezvoltatorul sa defineasca un comportament custom.
    Read More
    Posted in method, virtual | No comments

    How should we treat virtual methods exposed in APIs

    Posted on 03:24 by Unknown
    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 apelata.
    Intrebarea care a aparut aici in cazul meu a fost: Cine este de vina?
    Din unele puncte de vedere as spune ca dezvoltatorul care a implementat clasa MyCustomFoo. Acesta trebuie sa se asigure ca apeleaza si metoda din clasa de baza, pastrand vechia functionalitate.
    Totodata metoda era marcata ca virtual, cea ce inseamna ca cel care marcato ca virtual permite persoanei care face ovveride sa schimbe modul de implementare a respectivei functionalitati. Dar sa nu uitam, ca in momentul in care face ovveride nu trebuie sa alterezi vechiul comportament.
    Noua versiune de framework trebuia si i-a modificata in asa fel incat sa nu se altereze functionalitatea in nici un fel, dar unele modificari pot sa duca la unele schimbari si in clasele virtuale.
    In acest caz noua versiune trebuie sa fie insotita si de un document cu modificarile la API care au fost facute.
    Voi ce parere aveti? Intr-un caz de acest gen cine poarta vina este raspuzator pentru aceasta problema?

    Partea a doua din aceasta discutie: http://vunvulearadu.blogspot.ro/2012/06/how-should-we-treat-virtual-methods.html.
    Read More
    Posted in method, virtual | No comments

    Friday, 22 June 2012

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

    Posted on 04:39 by Unknown
    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:
    <Dependencies>
    <PackageDependency Name="Microsoft.VCLibs.110" MinVersion="11.0.0.0" />
    </Dependencies>
    Daca o sa rulati din nou din nou aplicatia de validare (Windows App Certification Kit) o sa observati ca aceasta eroare a disparut.
    Read More
    Posted in store, Validate, windows 8 | No comments

    How to validate a Windows 8 application

    Posted on 04:26 by Unknown
    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 App
    • Desktop App
    • Desktop 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.

    Read More
    Posted in windows 8 | No comments

    Thursday, 21 June 2012

    Why I cannot use Live account on some Microsoft Services

    Posted on 00:33 by Unknown
    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.
    Read More
    Posted in Microsoft | No comments

    Wednesday, 20 June 2012

    Applications bugs that can be caused by 'ref' keyword

    Posted on 16:10 by Unknown
    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 be explicitly initialized before they are passed. For more information

    Problema care apare in acest caz apare atat in cazul la ref cat si in out, dar in cazul la out. In momentul cand s-a facut atribuirea "foo2 = foo1", adresa de memorie spre care bate foo2 o sa fie aceiasi cu foo1. In interiorul metodei DoSomeAction ajungem sa cream un nou obiect de tip Foo, iar adresa de memorie spre care puncteaza foo1 se schimba cu o valoare noua. Dar foo2 o sa continue sa puncteze spre vechia adresa din memorie.
    Din aceasta cauza foo2 ajunge sa puncteze spre vechia valoare, iar foo1 spre noua valoare.
    Acest comportament este normal pentru ref si out, nu este nici o anomalie a limbajului. Intrebarea mea este urmatoare: Codul scris mai sus face ce ar trebui sa faca?
    Raspunsul meu este ca NU. Daca vrem sa inlocuim un obiect cu alt obiect trebuie sa avem grija sa facem update la toate referintele acestuia sau poate nu e nevoie sa facem new la obiect si ajunge sa schimba doar cateva valori interne din obiect.
    Read More
    Posted in C# | No comments

    Visual Studio debugging tips and tricks

    Posted on 06:24 by Unknown
    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 expresii sau sa executati anumite metode. Tot in aceasta fereastra puteti sa afisati/setati si valoarea unei variabile. Aceleasi lucruri se pot face si din Watch Window.

    Run to cursor
    Prin intermediul acestei functionalitait puteti sa sariti automat la linia de cod unde este cursorul fara sa tot apasati F10 si F11 si fara sa executati codul pana la linia respectiva. Odata ce v-ati pozitionat cursorul pe linia pe care doriti puteti sa dati click dreapta si sa selectati "Run to cursor" sau sa folosti scurtatura "Ctrl+F10".
    Breakspoints features
    Pe langa a avea un breakpoint in cod puteti sa ii setati diferite conditii sau diferite actiuni. De foarte multe ori se uita de aceasta functionalitate si se tot apasa F10 pana cand ajungeti pe cazul dorit. Acest lucru se poate foarte usor folosind condtiile care se pot atata unui breakpoint.
    Un alt lucru destul de dragut care se poate face aici e definirea unei actiuni custom cand un breakpoint este lovit. De exemplu afisarea unui mesaj in fereastra de debug sau executarea unui MACRO. Despre aceste lucruri am vorbit deja in posturile precedente.

    Debbuger.Break()
    Sunt cazuri cand pe o anumita linie de cod vreti sa omorati aplicatie (break it). Acest lucru se poate face apeland "System.Diagnostics.Debuger.Break()". Atentie, acest lucru merge si in release mode. Pentru a verifica daca sunteti in debug este nevoie sa apelati proprietatea "System.Diagnostics.Debugger.IsAttached".

    Debug.Assert()
    Foarte utila cand vreti ca in cazul in care aveti asserturi pe care vreti sa le verificati doar in debug. Daca vreti si in productie aceste asserturi sa existe puteti sa folosti Trace.Assert().

    View-uri diferite pentru text in format XML/HTML/Text
    Orice valoare de tip string pe care o vizualizati in fereastra de Watch Windows poate sa fie vizualizata in diferite moduri. Clieck dreapta pe value si o sa vedeti ca puteti schimba modul de vizualizare (Text, XML sau HTML).

    Schimbare valori la orice valoare on the fly
    Odata ce sunteti cu mouse-ul deasupra unei valori, iar fereastra care contine valoarea in sine s-a afisat, puteti fara probleme as ii schimbati valoarea din aceastra fereastra fara nici o problema.

    Atasare la un debugger la runtime
    In cazul in care doriti ca sa fortati userul sa se ataseze la un debugger un anumite conditi, puteti sa faceti acest folosind "System.Diagnostics.Debugger.Launch()". In urma acestui apel userului o sa i se ceara sa selecteze un tool pentru debugging la care procesul nostru sa se lege.
    In mod normal codul care face acesta actiune arata in felul urmator:
    #if DEBUGi
    f (!System.Diagnostics.Debugger.IsAttached)
    {
    System.Diagnostics.Debugger.Launch();
    }
    #endif

    Exista nenumarate tips and trick-uri pe partea de debug. Ce alte tips and tricks vi se pare foarte utile in aceasta zona?
    Read More
    Posted in debug, visual studio | No comments

    Tuesday, 19 June 2012

    New debugging functionalities in Visual Studio 2012

    Posted on 07:30 by Unknown
    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 putea sa fie gasitia si pe Visual Studio 2010.
    Pe partea de UI, apare o noua functionalitate care ne permite sa  facem debug pe partea de UI. Nu neaparat debug, ci mai degraba o diagnosticare a UI care ne permite sa vedem din ce cauza unele elemente se afiseaza gresit. Din pacate nu am reusit sa pornesc acest tool pe masina mea.
     Cam astea ar fi legat de noile funcÈ›ionalitati de debug din Visual Studio 2012 pe care le-am gasit si care mi s-au parut importante. Pe partea de profiling au aparut noi functionalitati care ne ajuta pe partea de debug, dar nu sunt legate de actiune de debug propriu-zisa.  Voi ati gasit si altele?

    Read More
    Posted in debug, visual studio | No comments

    Monday, 18 June 2012

    How to secure connection string of a SQL server in a Winwdows Azure application

    Posted on 04:41 by Unknown

    As in any application, when developing applications for Windows Azure that use SQL Azure, the security of connection string appear (especially database user password) when the application begin to be deployed on the testing or production environment. In this post I will try to offer a solution about how we can secure the connection string.
    Usually when we get to the end of a project and our application begin to be deployed on the production environment also, we need to separate each database (development, testing and production). For safety reason we need to use different connection string for each environment that we used. In this moment we don’t want to allow development team to access the production or testing environment. Because of this we need to secure the connection string.
    Why is this so important? For example what happen if we are in maintenance with our application and the developer have access to sensitive information? We don’t want this to happen, especially when we store on the database passwords, salaries and so on.
    Normally between our company and our client we have a SLA. Also another SLA exists between our company and each developer, but this is not enough. If we can we need to secure access because we need to reduce the risk of someone accessing our client data. If you think that you will increase the database security by encrypting the database password from connection string, you need to know that this is not truth. When someone will be able to access the machine where the application is hosted that we can decrypt the connection string, is only a matter of time.
    We want to encrypt the connection string of production environment only for our team (development or testing team). Maybe we have a source control where we store the configuration file and we don’t want to have this information stored in clear text. The solution that I will explain in the next lines can be used only with the condition that out team doesn’t have access to the production servers. In some conditions, the only think that we want to let them to have access is to make a “fast” deploy of the application but without any remote access rights on the Windows Azure machines.
    I propose a solution that is based on certificates. Because a certificate can have a public or a private key, we can share this information in such way that the team can only create and prepare our application package, but without any rights to decrypt or use the connection string of the production environment.
    Our team (development for example) will have only the public key. Based on this key they will be able to generate the application package that will be used for deployment. Our SQL engineer for example will have access to the public key of the certificate. Based on the public key, the connection string will be encrypted. Any person that will have the public key will not be able to decrypt the connection string.
    On our production environment we need to install the private key. Only the person/environment that has the private key of the certificate can decrypt the connection string.
    In the next part of the post I will try to explain each step that need to be done to encrypt the connection string and how to generate the certificate.
    The first step is to create a signed certificate. This certificate can be created in different methods. One method is to use the “makecert” command from Visual Studio. A password will be required to enter when you will run this command. This password will be used to secure the generated key that is created when the certificate is generated.
    akecert -r -pe -n "CN=mysecureconfig" -sky exchange "mysecureconfig.cer" -sv "mysecureconfig.pvk"
    pvk2pfx -pvk "mysecureconfig.pvk" -spc "mysecureconfig.cer" -pfx "mysecureconfig.pfx" -pi mysecretpassword
     "mysecureconfig.cer" represents our certificate that will be created (the public key). This file will be used by our SQL administrator to encrypt the connection string.
    "mysecureconfig.pvk" represent our private key that need to be installed only on the production environment. Try not to store this file in the same location where you have the source of our application, because in this case the developers will have access to this key and they will be able to decrypt the connection string.
    The next step is to generate a certificate of type .pfx. This will be used to import our certificate and the private key on Windows Azure. Now we have the .pfx file and we can import the certificate to cloud. To do this, we need to access the “Certificate” tab from Windows Azure. On this page we can upload our certificate. At this step, we will need to introduce the certificate password that we entered when we created the certificate.
    The output of this import will be a thumbprint. This thumbprint need to be added to our application configuration file. Based on this thumbprint, our application will have access to our private key and will be able to decrypt the connection string.
    At this step I want to remind you that the SQL administrator will need only the public key. The private key doesn’t need to be shared with anyone. Also, the database user from the connection string needs to have only the right that is needed by our application.
    The third step is the most interesting one. In our configuration file of our application we need to add our connection string with user and password. Besides this information we will need to add a new provider that will be used to protect our data (in our case the connection string).
    <configProtectedData>

        <providers>

          <add name="PKCS12ProtectedConfigurationProvider" 
               thumbprint="myThumbprintFromWindowsAzurePortal"
               type="Pkcs12PrLinkotectedConfigurationProvider.
                          Pkcs12ProtectedConfigurationProvider, 
               PKCS12ProtectedConfigurationProvider, 
               Version=1.0.0.0, Culture=neutral, 
               PublicKeyToken=34da007ac91f901d"/>

        </providers>

      </configProtectedData>
    If you don’t have this provider (PKCS12ProtectedConfigurationProvider) installed on your system, you can download it from the following address: http://archive.msdn.microsoft.com/pkcs12protectedconfg.
    Before the last step, I want to make a recap of what we need to have on the machine that wills encrypted the connection string:
    1. The certificate that we created installed (only the public key)
    2. The PKCS12ProtectedConfigurationProvider provider installed
    3. The provider that is used to encrypt the data added to the configuration file
    4. The connection string added to our configuration file (with user and password in clear – for now only)
    Now, we can do the last step – to run from Visual Studio command prompt the following command:
    aspnet_regiis -pef "connectionStrings" "." -prov 
    "PKCS12ProtectedConfigurationProvider"
    What does this command do? This command will encrypt the connection string based on our certificate. The only location from where this connection string can be decrypted is the machine that has the private key installed.
    After this command is run, in the configuration file we will have the connection string encrypted. Don’t forget to add the following assembly to your solution: “PKCS12ProtectedConfigurationProvider.dll”, because the web role or the worker role will not have provider preinstalled.
    Using this method, we can hide the database credentials from the production or testing environment from the development team. Even if they will see the connection string, they will see encrypted data and without the private key they cannot see the user and password.
    What do you think about this solution? What other solution did you used for this case?
    I decided to translate one of my blog posts in English: http://vunvulearadu.blogspot.ro/2012/06/how-to-secure-connection-string-of-sql.html
    Read More
    Posted in Azure, connection string, sql, Sql Azure, Windows Azure | No comments

    Friday, 15 June 2012

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

    Posted on 10:26 by Unknown
    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-ul de la Team Foundation, unde a fost nevoie sa sterg fisierul "VersionControl".
    c:\Users\[someUser]\AppData\Local\Microsoft\Team Foundation\3.0\Cache\ VersionControl.config
    Odata ce l-am sters lucrurile pareau sa revina la normal si am putut din nou sa accesez source controler-ul.
    Din nou am avut o surpriza neplacuta cand am incercat sa deschid solutia pe care lucram. Nici unul din proiectele din solutie nu le putema deschide. Nu avea importanta ca era un proiect standard de .NET 4.0, sau de SL 4.0. Nici unul nu se putea incarca, iar urmatoarea eroare se afisa pentru fiecare proiect din solutie care se incarca:
    A project with that name is already opened in the solution.
    Din nou WTF, acest lucru se intampla si cand doream pe o solutie goala sa adaug un proiect. A fost nevoie sa fac repair la VS 2010 SP1, iar apoi sa reinstalez SL 4.0 Tools, iar apoi din nou repair la VS 2010 SP1.
    I did it, solutia din nou se incarca fara probleme si totul a revenit la normal.
    Sper sa nu aveti si voi aceleasi probleme.
    Read More
    Posted in error, visual studio | No comments

    Some cool stuff debugging with Debugger Canvas

    Posted on 06:34 by Unknown
    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.

    Odata ce ati instalat aplicatia, aceasta o se seataza automat ca si default debug tool. Puteti oricand sa o dezactivati din "Debug->Debugger Canvas". Totodata aveti cateva optiune la acest tool pe care le puteti schimba din "Tools->Options - DEbugger->Debugger Canvas". Ajunge cu teorie, sa vedem in practic ce putem face.
    Intr-o fereastra separat, tot callstack-ul vi se afiseaza sub forma unor ferestre inlantuite. Este extrem de usor sa vedem de unde vine apelul, putand naviga in orice moment prin call stack si sa vedem ce valori au variabilele.
    O functionalitate extrem de utila este lista de variabile locale la care se poate face snapshot. Nu mai este nevoie sa notam noi vechile valori. Putem direct sa facem un snapshot si sa ne continuam procesul de debug. Pentru fiecare snapshot se afiseaza si locatia de unde s-a facut. In orice moment cu daca faceti click dreapta o sa vi se afiseze un meniu care va permite sa adaugati notite sau sa salvati sesiune de debug ca un XPS ori sa o trimiteti pe email. Partea de save/send va spun sincer nu am folosito niciodata, cel mai des cred ca folosesc snapshot-ul.

    Este bine de mentionat ca in momentul in care folositi Debugger Canvas, toate scurtaturile sau optiunile care le aveati intr-un debug clasic raman available, tot ce se schimba este modul in care vizualizati resultatele.
    Un alt feature extrem de util este cand aveti mai multe thread-uri pornite si vreti sa vedeti in paralel call stack-urile. In mod normal acestea se refolosesc, dar daca mergeti la options si dezactivati optiunea "Reuse Bubbles When Content is the Same" o sa vedeti pentru fiecare thread in parte un alt set de ferestre.
    Odata ce ati terminat procesul de debug, fereastra o sa ramana deschisa, cu toate datele care s-au afisat. Acest lucru putand sa fie extrem de util.
    Cam asta ar fi despre Debugger Canvas. Aduce cateva feature dragute, care ne pot ajuta si fac uneori diferenta. Ce parere aveti de acest tool? L-ati folosii?
    Read More
    Posted in C#, debug, visual studio | No comments

    Wednesday, 13 June 2012

    Debugging multithreaded applications in Visual Studio

    Posted on 07:26 by Unknown
    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 thread-urile din procesul nostru. Nu odata mi s-a intamplat ca pana sa investighez codul care rula dintr-un thread, unul sau mai multe thread-uri s-au terminat de executat, iar problema pe care o aveam nu o mai puteam reproduce. Cand un thread este selectat din lista, Visual Studio o sa incerce sa va dupa la codul care se ruleaza pentru thread-ul vostru.

    O fereastra asemanatoare exista si pentru procese. In mod normal o sa fiti legati la un sigur proces, caz in care o sa aveti un singur proces in lista. 2 sau mai multe procese pot sa fie active cand aveti mai multe procese selectate de a rula la RUN sau cand va atasati manual la alte procese. 
    Toate modulele (assembly-urile) care sunt incarcate intr-un anumit moment pot sa fie vizualizate din fereastra Modules. Aceasta fereastra este folositoare daca aveti probleme cu versiune de assembly sau nu stiti exact ce assembly se incarca si din ce locatie. Aceasta fereastra poate sa deschisa din "Debug->Windows->Modules".
    Cand executati codul step cu step si aveti mai multe thread-uri pornite sa nu uitati ca restul thread-urilor ruleza normal daca nu ati facut freeze. Iar in cazul in care un alt thread ajunge la un breakpoint, atunci o sa va intrati pe thread-ul respectiv. Puteti specifica pe un breakpoint pe ce thread sa se activeze (in postul precedent am discutat despre acest lucru).
    In cazul in care aveti mai multe thread-uri puteti sa folositi fereastra de "Parallel Stacks" fara nici o problema, chiar daca nu folositi librarie de paralle library. Aceasta va afiseaza un stack pentru modul in care thread-urile au fost create si ce thread pe care il asteapta.
    Cand faceti debug incercati ca numarul de thread-uri pe care le aveti pornite sa fie cat mai mic (3-4). Daca o sa aveti prea multe thread-uri pornite, procesul de debug o sa fie destul de complex.
    In urmatorul post o sa discutam despre Debugger Canvas.
    Read More
    Posted in debug, multitasking, visual studio | 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 ...
    • 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...
    • 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...
    • Content Types - Level 5: Courseware
      Level 5: Content and Courseware NOTE: This is part 6 of 7 in a continuing series; please see earlier posts for more background information. ...
    • 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 ...

    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)
        • Day 4 of TechEd 2012 - Amsterdam
        • Day 3 of TechEd 2012 - Amsterdam
        • Memento Pattern - the key to unde/redo functionality
        • Day 2 of TechEd 2012 - Amsterdam
        • Serie de turoriale despre debug in Visual Studio
        • Day 1 of TechEd 2012 - Amsterdam
        • How should we treat virtual methods exposed in API...
        • How should we treat virtual methods exposed in APIs
        • XXX takes a dependency on Microsoft.VCLibs.110 fra...
        • How to validate a Windows 8 application
        • Why I cannot use Live account on some Microsoft Se...
        • Applications bugs that can be caused by 'ref' keyword
        • Visual Studio debugging tips and tricks
        • New debugging functionalities in Visual Studio 2012
        • How to secure connection string of a SQL server in...
        • WTF - Package Load Failure - Microsoft.VisualStudi...
        • Some cool stuff debugging with Debugger Canvas
        • Debugging multithreaded applications in Visual Studio
        • Could this be a good case when to use 'params'
        • The provided URI scheme 'file' is invalid; expecte...
        • Base Visual Studio debugging functionalities
        • How to manual create and restore a database from S...
        • Fundamental books for a software engineer (developer)
        • Windows 2008 Server + Office 2007 = InteropService...
        • How to secure connection string of a SQL server in...
        • How to create a setup package for a Metro Applicat...
        • How to backup SQL Azure database using blobs or Da...
      • ►  May (24)
      • ►  April (18)
      • ►  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