Windows Mobile Support

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

Thursday, 31 May 2012

Post event - ITCamp 2012

Posted on 23:59 by Unknown
Saptamana aceasta am participat la o noua editie ITCamp, care a avut in Cluj-Napoca. Editia din anul acesta a fost una extrem de reusita. Prezentarile pe care le-am savurat cel mai mult au fost a lui Lino Tadros, Tim Huckaby si a lui Raffaele Rialdi. Acest eveniment a fost organizat de CodeCamp si de ITSpark si a adunat peste 250 de persoane. In cele doua zile, cat a durat ITCamp am avut 3 track-uri simultan si o sala pentru hands-on-labs.
In comparatie cu editia de anul trecut, aceasta editie mi s-a parut mult mai reusita, iar continul la fiecare la toate sesiunile mi s-a parut extraordinar.
In cadrul celor doua zile am tinut o sesiune de 60 de minute despre background task in Windows 8. Mai jos puteti sa gasiti ppt de la prezentarea mea.
Vunvulea radu it camp-ro 2012 - building metro style applications on windows 8 using background tasks
View more presentations from Radu Vunvulea.
Speram ca anul urmator o sa avem parte de o noua editie ITCamp. Oare de ce surprize o sa avem parte anul urmator? Abia astept editia de anul urmator.
Mai jos puteti sa gasiti cateva poze de la acest eveniment:


Read More
Posted in codecamp, eveniment, event, ITCamp, itspark, prezentare | No comments

Friday, 25 May 2012

Trail Ride to Float Mobile Learning Symposium

Posted on 13:53 by Unknown


We are about thirty days out from the Float Mobile LearningSymposium and I am getting excited! I’m ready to pack my saddle bags, mount the proverbial horse and head up the cattle trail to Chicago for this year’s event to be held at startup incubator 1871 and in conjunction with TechWeek 2012 Conference in Chicago. This year’s Float Symposium builds on momentum gained from last year’s inaugural event held down the trail in Peoria, IL (Float’s outpost/HQ) and is sure to please.

Why am I excited?  That’s easy, Tex! It is all about the people – from those putting it together to those hosting the venue and everyone speaking but, more importantly, those attending. This event may be boutique in size compared with mega learning events but everyone in the crowd are likely “twin sons (and daughters) from different mothers” who each think about mobile with every action, reaction and breath they take. Sure, there will be sessions and speeches along the way, but the real opportunity is in the connections you make with peers who are excited to share their experiences – both good and bad – with others.

If you know about the event, you’re likely part of the “minority crowd” of real mobile practitioners rather than the “majority crowd” still sitting on the fence and not out there riding the mobile rodeo bull.  My advice -- strap in, listen for the bell, and hold on for eight seconds as best you can! When you fall (and you will at some point), know the distance down isn’t too far and just make sure you get out of the way!  Mobile is something to experience, not just talk about, and the best way to learn from others is to share your own practical lessons with them so we can build on what’s proven possible, practical and productive.

For my part, I’m pleased to be delivering a session on Enterprise Security for Mobile Learning, an often overlooked and misunderstood topic for individuals and teams tasked with the creation, delivery and management of mobile learning that live within the confines of an information security department’s strict policies and expectations. The introduction of mobile devices across nearly every aspect of our business lives has introduced a wide array of technical, operational and managerial challenges every organization must understand and find ways to address. Every organization approaches security in their own way and the variables differ across industries and use cases.  A combination of IT policies like BYOD, varied use of mobile devices/operating systems, the selection of native apps/mobile web, the need for online versus offline content delivery, to issue of track or not to track, and even exempt/non-exempt employee work rules can all coalesce to make security something many teams think of last and, before they realize it, their projects can be in real jeopardy.

My primary goal is to share experiences on security with everyone at the Symposium seeking to plan, implement or manage an upcoming mobile learning initiative, and arm them with tips and tricks to get their IT, infosec and management teams comfortable with the fact mobile is here, it’s real and it really can be secure. My other goal is to connect with other rodeo riders (and clowns) like me and learn as much from their time in the saddle as I have mine.

Yippee, ki-yah!
Read More
Posted in | No comments

Windows 8: Error on video playing

Posted on 00:27 by Unknown
Pentru aplicatiile Metro in Windows 8, adaugarea de video la un view se face destul de simplu, utilizand componente precum MediaPlayer .
<MediaPlayer x:Name="VideoMediaPlayer" AutoPlay="False" Loaded="VideoMediaPlayer_Loaded"/>
...
private void VideoMediaPlayer_Loaded(object sender, RoutedEventArgs e)
{
MediaPlayer player = (MediaPlayer)sender;
IRandomAccessStream videoStream = GetVideoStream();
player.SetSource(videoStream, "video/mp4");
}
Binding-ul la source se poate face in diferite moduri. Nu are importanta cum il faceti. In schimb pe versiunea curenta de Windows 8 ( Consumer Preview) aplicatia voastra o sa crape uneori cand userul face play/stop sau schimba pagina curenta.
Eroarea care se arunca are forme asemanatoare cu aceasta:
Windows.UI.Xaml.UnhandledExceptionEventArgs
Exception from HRESULT: 0xC00D3E85
Call to UIASendMessageTimeout failed
Nu incercati sa faceti FIX la aceasta problema in codul vostru. Problema este un bug pe care Windows 8 CP il are si care o sa fie fix-uit in urmatoarea versiune.
Tot din aceasta cauza uneori poate as apara e eroare de genul:
Error loading from server.
in bare unde se face play/pauze la un video.
Speram ca in urmatorul release aceste probleme se rezolva.
Read More
Posted in C#, windows 8 | No comments

Thursday, 24 May 2012

Windows 8 for tables and viruses

Posted on 07:51 by Unknown
Ieri seara am participant la un eveniment unde s-a prezentat si Windows 8. De data asta eram pe partea cealalta a baricadei (ca si participant), dar am vazut ca lumea spune destul de des:
Abia astept sa apara virusi pentru Windows 8.
Din acest punct de vedere, pentru versiunea normala de Windows 8 mai mult ca sigur o sa existe (din pacate), nu avem ce face. Dar pentru Windows 8 RT, versiunea care este destinata tabletelor, s-ar putea sa nu avem surprize nefericite.
In primul rand fiecare aplicatie ruleaza intr-un sandbox si nu poate sa faca foarte multe schimbari. Fiecare aplicatie inainte sa ajunga in store este supusa la niste teste, unde se testeaza cat de sigura este pentru utilizator.
Daca aceste verificari o sa se faca cum trebuie s-ar putea sa nu avem probleme cu aplicatiile. De exemplu pentru Windows Phone 7 nu am auzit de nici o problema de acest gen.
Deja, foarte multe compani care creaza antivirusi pentru Windows, isi pregatesc si ultimele versiuni de soft pentru Windows 8, iar pentru Windows 8 RT sper sa nu avem probleme sau cel putin asa ma astept eu.
Read More
Posted in windows 8 | No comments

Metro UI and Windows Metro Style Application is not the same thing

Posted on 07:38 by Unknown
Am inceput sa vad o greseala care se face destul de des. Lumea a inceput sa incurce Metro UI cu Windows Metro Application. Acestea sunt doua lucruri total diferite.
Metro UI este un set de reguli care definesc modul in care interfata grafica a unei aplicatii arata. Acesta are la baza stilul "Swiss" care a fost dezvoltat in Elvetia la inceputul anilor 1950. Stilul Swiss a fost dezvoltat pentru ziare si reviste. Pe baza acestuia a fost definit Metro UI care a aparut odata cu Windows Phone, iar acuma urmeaza sa fie folosit si pe Windows 8. Este bine de stiut ca acest style poate sa fie facut pentru orice fel de aplicatie si in orice limbaj (Windows Forms, WPF, SL, HTML and so on). Exista un set de reguli pentru stilul Metro, iar Microsoft a definit reguli clare si precise pentru a exista o fluiditate intre aplicatii.
Windows Metro Application sau Windows Metro Style Application este tip de aplicatie care o sa ruleze pe Windows 8. Aceste tip de aplicatii trebuie sa fie scrise intr-un anumit fel astfel incat sa nu consume foarte multe resurse. Din aceasta cauza API care este accesibil intr-o aplicatie Metro este foarte diferit fata de cel pe care il avem cand folosim .NET 4.5. Din punct de vedere a UI-ului aceste aplicatii trebuie sa aibe Metro UI. Acest tip de UI este suportat in totalitate de catre API.
Pe PC-uri normale sau pe laptop o sa putem avem versiunea normala de Windows 8. Pe aceasta vs. o sa poata sa fie rulate aplicatii clasice care mergeau si pe Windows 7. Windows Services o sa existe in continuare. In schimb, din cate am vazut pana acuma pe tablete cu Windows 8 nu sa putem rula aplicatii clasice, ci doar aplicatii Metro Style Application. Aceasta versiune se numeste Windows RT si o sa ruleze pe procesoare ARM si WOA.
In concluzie, putem sa avem pe orice device si in orice limbaj Metro UI, dar in acest moment doar pe Windows 8 putem sa avem aplicatii Windows Metro Style.
Read More
Posted in windows 8 | No comments

Wednesday, 23 May 2012

Use lock in a block that contains a call to an async method (await keyword)

Posted on 23:47 by Unknown
Citeam urmatorul post http://qedcode.com/content/awaitable-critical-section, in care se explica o modalitate de a face lock in cazul in care in block-ul de lock contine un apel la o metoda async.
Pe scurt, pentru a evita ca doua sau mai multe thread-uri sa scrie simultan in acelasi fisier, se incerca sa se faca lock. Dar .NET 4.5 nu ne lasa sa avem urmatorul cod (si foarte bine face):
lock( this )
{
var f = await storageFile.OpenAsync();
...
await file.WriteAsync("some content");
}
Eroarea pe care o primim arata in felul urmator:
The 'await' operator cannot be used in the body of a lock statement.
In link-ul pe care l-am dat mai sus, s-a incercat implementarea unei solutii custom care face lock la o anumita portiune de cod. O alta varianta ar putea sa fie sa incerca sa folosim Task.Run. Cea ce am obtine ar fi ceva asemanator cu urmatorul cod
lock( this )
{
var f = await storageFile.OpenAsync();
...
Task.Run(async () => {await f.WriteAsync("some content") }).Wait();
}
Codul s-ar compila fara nici o problema dar la rulare am vedea ca aplicatia nu mai raspunde cand ajunge pe linia de cod care contine Task.Run. Din aceasta cauza se poate ajunge sa implementam ceva asemanator cu link-ul dat la inceputul postului.
Cea ce nu imi place la nici o solutie este ca combinatia dintre lock si async nu suna foarte bine. De ce ai vrea sa faci un lock si sa te asiguri ca doar un singur apel asyncron se executa. De foarte multe ori problema poate sa fie de design. Nu degeaba .NET nu iti permite aceasta funcționalitate.
Un await in interiorul unui lock poate sa genereze foarte usor un deadlock. Problema este destul de asemanatoare cu deadlock-ul care se obtinea cand apelam Monitor.Exit in interiorul unui ExisDisposable.Dispose.
Cand se face resume la cod in general ajungem pe acelasi thread, dar acest lucru nu e obligatoriu, din aceasta cauza putem sa ajungem pe un alt thread, care ar face unlock la un lock facut pe un alt thread.
Be aware, cand folositi await, nimeni nu va garanteaza ca la resume o sa ajungeti pe acelasi thread. Trebuie sa mai tinem cont de inca un lucru, o metoda la care facem await nu stim cat o dureze, iar un lock ar trebui sa fie facut pentru o perioada cat mai mica de timp. Pentru acest lucru putem sa facem lock pe codul pe care il executam inainte si dupa apelul la metoda await.
Codul pe care l-am obtine ar avea urmatoare forma:
var f = await storageFile.OpenAsync();
lock(this)
{
...
}
await f.WriteAsync("some content");
lock(this)
{
...
}
Da stiu, se doreste ca metoda WriteAsync sa fie executa intr-un lock. Dar acest lucru nu e sanatos. Daca vrem doar noi sa avem drept de scriere, atunci trebuie sa deschide fisierul in asa fel incat doar dintr-un singur loc sa se poata scrie. Pentru a putea face acest lucru este nevoie sa specificam ca parametru la metoda OpenAsync FileAccessMode.
var f = await storageFile.OpenAsync(File.AccessMode.ReadWriteNoCopyOnWrite);
sau (in functie de caz)
var f = await storageFile.OpenAsync(File.AccessMode.ReadWrite);
In concluzie, cand ajungeti la un caz cand aveti nevoie de a face lock pe un block de cod care contine apeluri de metode asincrone, ar fi bine sa faceti un review la cod si sa vedeti daca chiar aveti nevoie de asa ceva si daca nu este o greseala in design-ul aplicatiei.
Read More
Posted in async, C#, lock, sincronizare | No comments

DataContractSerializer and list of abstract class

Posted on 06:21 by Unknown
Plecam de la urmatoarea structura:
public abstract class BaseCar
{
public string Name { get; set; }
}
public class SportCar : BaseCar { }
public class UtilityCar : BaseCar { }
public Foo
{
public Foo()
{
Cars = new List<BaseCar>();
}
public List<BaseCar> Cars { get; set; }
}
...
Foo myFoo = new Foo();
myFoo.Cars.Add( new SportCar());
DataContractSerializer serializer = new DataContractSerializer(typeof(Foo));
serializer.WriteObject(myXmlWriter, myFoo);
Cand nu avem specificat nici un atribut de tip DataContract, toate campurile care sunt publice se serializeaza. In cazul nostru codul se compileaza fara probleme si obtinem un obiect serializat. Problema apare cand vrem sa deserializam obiectul nostru si ne trezim ca proprietatea Cars este null. Chiar daca in constructor inializam aceasta proprietate obtinem in continuare NULL.
Cand ne uitam peste cod realizam ca lucram cu o clasa abstracta, iar in acest caz avem nevoie de atributul KnownTypes pe care il si adaugam sub forma:
[KnownTypes(typeof(SportCar))]
[KnownTypes(typeof(UtilityCar))]
clasei Foo. Cand testam din nou aplicatia nici o schimbare. Daca problema ar fi fost de la KnownTypes, am fi obtinut o eroare specifica care ne spune ca nu se poate serializa/deserializa.
Totusi problema persista si ne horaram sa specificam explicit ce proprietati vrem sa serializam. Clasele noastre ajung sa aibe urmatoarea forma:
[DataContract]
public abstract class BaseCar
{
[DataMember]
public string Name { get; set; }
}
[DataContract]
public class SportCar : BaseCar { }
[DataContract]
public class UtilityCar : BaseCar { }
[KnownTypes(typeof(SportCar))]
[KnownTypes(typeof(UtilityCar))]
[DataContract]
public Foo
{
public Foo()
{
Cars = new List<BaseCar>();
}
[DataMember]
public List<BaseCar> Cars { get; set; }
}
Rulam din nu codul si observam ca acuma totul functioneaza fara nici o problema. Lista noastra de masini este serializata si deserializata fara nici o problema. Am incercat sa caut pe MSDN o locatie unde sa ni se precizeze ca trebuie explicit sa folosim aceste doua atribute cand avem lista de clase abstracte, dar din pacate nu am gasit. Am fost directionat de catre un coleg in urmatoarea locatie unde sunt enumerate regulile deja cunoscute, dar despre acest comportament nu era specificat nimica. http://msdn.microsoft.com/en-us/library/cc656732%28v=vs.100%29.aspx
Read More
Posted in C#, serialization | No comments

Sunday, 20 May 2012

The secret behind "params" keyword

Posted on 03:13 by Unknown
Jucandu-ma putin cu codul din C# am redescoperit "params". Acesta in general poate sa fie gasit intr-o aplicatie consola in Main, dar putem sa il folosim si in alte cazuri.
Prin intermediul acestui keyword putem sa specificam o lista de parametri despartiti prin virgula.
public void MyMethod(params string[] words)
{
foreach(string word in words)
{
Console.WriteLine(word);
}
}
Nu este nimic special cu acest keyword. Cand am inceput sa invatam limbajul C#, am vazut ca exista, dar nu l-am vazut niciodata folosit intr-un cod de productie si mi-am pus intrebarea DE CE?
In primul rand vrea sa vedem ce putem face cu acesta. De exemplu avem o metoda care accepta zero, unu sau mai multe elemente de acelasi tip (o lista de elemente). In mod normal am avea urmatorul cod:
public void MyMethod(string[] items)
{
// Some action.
}
Pentru a putea folosi aceasta metoda am avea urmatoarele apeluri:
MyMethod();    // Eroare la compilare.
MyMethod(new string[0]); // Nici un element in lista.
MyMethod(new string[]{ "item1" }); // Un singur element in vector.
MyMethod(new string[]{ "item1", item2" }); // Doua elemente in vector.
Ca sa putem avea si un apel de forma "MyMethod();" este nevoie sa schimba definitia metodei, ca sa aibe urmatoarea forma:
public void MyMethod(string[] items = null)
{
// Some action.
}
Daca ne-am folosii de keyword-ul params am avea urmatoare metoda si apeluri acceptate:
public void MyMethod(params string[] items)
{
// Some action.
}
MyMethod();
MyMethod("item1");
MyMethod("item1", "item2");
MyMethod(new string[0]);
MyMethod(new string[]{ "item1", item2" });
Dupa cum putem observa, putem sa avem diferite apeluri, putem sa specificam un sigur element, fara sa fim obligati sa ne definim un vector cu un singur element. La fel putem sa ne specificam nici un parametru, caz in care vectorul o sa fie un vector cu nici un element. In acez caz ne-am astepta ca vectorul sa fie null, dar acesta nu o sa fie null, nu o sa contina nici un element (aveti grija la acest comportament).
O alta utilizare interesanta a acestui keyword mi s-a parut in contructor. Da, in contructor, il putem folosi fara nici o problema si in constructori.
public class Foo
{
public Foo(paramas string[] items)
{
// Ceva cod
}
}
params este foarte util cand avem cazui cand elementele din vector pot sa contina 0 sau doar un element, iar aceste valori sunt obtinute din divese surse (nu le obtinem mereu sub forma unui vector).
Am vazut ce putem facem cu acest keyword, unele cazuri cand acesta se poate folosi sunt chiar interesante (nici un element specificat, un singur element fara sa ne declaram un vector sau in contructor). Problema apare ca din cauza ca nu este destul de des folosit in general cel care citeste codul o sa fie nevoit sa caude pe net sa vada ce reprezinta acest keyword sau de ce este folosit intr-un anumit fel. Tot din aceasta cauza s-ar putea sa nu fie folosit la potentialul sau maxim. Din cauza ca o metoda care foloseste params, poate sa fie apelata primind un vector, avem o oarecare compatibilitate cu varianta cand nu folosim keyword-ul params.
Prin folosirea acestui keyword, s-ar putea ca API pe care il expunem sa nu fie usor de inteles sau sa provoace o usoara dezorientare pentru dezvoltator, dar cred ca pot sa existe cazuri cand acesta sa ne simplice putin codul.
Pana acuma nu l-am folosit niciodata in productie, dar in viitor s-ar putea daca o sa gasesc cazuri cand chiar isi are rostul. In acelasi timp o sa am grija sa documentez codul destul de bine incat sa argumentez de ce l-am folosit si sa dau exemple de apeluri. Din cauza ca acest keyword nu este folosit si cunoscut in totalitate, poate sa provoace confuzie, iar acest lucru trebuie evitat.
Totusi parca exista un smell cand vrem sa introducem "params", aveti grija.

Voi l-ati folosit pana acuma? Credeti ca merita folosit?
Read More
Posted in C# | No comments

Code Retreat Cluj-Napoca - 19/05/2012

Posted on 00:41 by Unknown
Sambata, 19.05.2012, a avut loc in Cluj-Napoca o nou sesiune de Code Retreat.Au fost aproape 9 ore de programare si fun, unde am avut parte din plin de TDD si pair programming.
Problema care am incercato sa o rezolvam de fiecare data a fost cea clasica, Game of Life (a lui Conway's). O problema simpla, care in varianta clasica nu pune nici un fel de probleme. Desii acesta a fost al doilea Code Retreat organizat, unde s-a rezolvat aceiasi problema, nu am simtit ca este ceva monoton. La fiecare runda am descoperit ceva nou, ceva care partenerul il facea diferit, de la TDD, la scurtaturi sau ceva legat de mediul de programare.
Cand incepi sa scrii teste, cel mai greu sa primul test, nu stii cum sa incepi sau mai bine zis cu ce. Care e primul test care trebui scris, a.i. sa fie consistent si nici sa nu te aberezi.
Asa cum se obisnuieste, ultima sesiune e destul mai speaciala, apar reguli mai ciudate. De data asta am ales ca sa fim intr-un mediu in care fiecare celula sa fie hexagonala (in loc de opt vecini sa aibe doar 6). Se obtine un fel de fagure, iar impreuna cu coechipierul meu din runda respectiva am reusit aproape sa terminam problema in aceasta runda. Din pacate nu a mai fost TDD, eram curiosi sa vedem daca am gasit algoritmul bun.
A fost o sambata destul de productiva. Mai jos gasiti doua poze de la acest eveniment.
Read More
Posted in cluj-napoca, code retrat | No comments

Friday, 18 May 2012

InitializeComponent CLR error in Windows 8 Metro application

Posted on 12:50 by Unknown
Daca incercati sa scrieti o aplicatie Metro pentru Windows 8 mai mult ca sigur o sa folositi convertoare la binding. Acestea, in general se definesc in App.xaml in zona de resurse sub forma urmatoare:
<Converters:MyConverter x:Key="myConverter"/>
In pagina voastra o sa puteti sa folosti convertorul pe care l-ati definit in felul urmator:
<Button x:Uid="myButon" Visibility="{Binding IsOpen, Converter={StaticResource BoolToVisibilityConverter}}" Click="OnClick"/>
La compilare nu o sa apara nici o eroare, dar la rulare o sa aveti o surpriza extrem de neplacuta. Pe metoda "InitializeComponent();" aplicatia o sa crape cu o eroare extrem de urata. Continutul erori nu o sa va zica prea mult despre cauza acesteia.
Aceasta problema apare pe Windows 8 RC impreuna cu VS2011 BETA. Solutia pe care am gasito la aceasta problema este sa adaugam definitia convertorului in fiecare pagina unde avem nevoie de acesta.
<Page.Resources>
<Converters:MyConverter x:Key="myConverter"/>
</Page.Resources>
Sa speram ca aceasta problema se va rezolva in versiunea finala.
Read More
Posted in windows 8 | No comments

Custom button image of AppBar in a Windows 8 Metro application

Posted on 12:16 by Unknown
Intr-o aplicatie Metro pentru Windows 8, in partea de jos avem un app bar in care putem sa punem diferite comenzi. Este extrem de asemanator cu app bar-ul de pe pe Windows Phone 7. By default, framework-ul contine o lista de icoane pe care le putem folosi pentru aceste comenzi.
Pe langa aceste imagini, sunt cazuri cand dorim sa avem iconite custom, pe care noi le-am definit. Aceste imagini trebuie adaugate sub forma unor resurse png. (48px pe 48px). In general avem cel putin doua resurse, una cand butonul este selectat, iar cealalta pentru starea normala.
Urmatorul pas este sa ne definim un stil pentru a avea un efect pe buton cand acesta este apasat. Acesta se poate face ca in felul urmator:
   <Style x:Key="CustomMyCommandAppBarButtonStyle" TargetType="Button" >
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<StackPanel Height="70" Orientation="Vertical" Margin="{TemplateBinding Margin}">
<Image Source="/Assets/normalStateButton.png" x:Name="nonpressedImage"/>
<Image Source="/Assets/pressedStateButton.png"
Visibility="Collapsed" x:Name="pressedImage"/>
<TextBlock Text="{TemplateBinding AutomationProperties.Name}"
HorizontalAlignment="Center"
Margin="0,0,2,0"
FontSize="12"
TextAlignment="Center"
Width="88"
MaxHeight="32"
TextTrimming="WordEllipsis"
Style="{StaticResource BasicTextStyle}"/>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver" />
<VisualState x:Name="Pressed">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="pressedImage" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0" >
<DiscreteObjectKeyFrame.Value>Visible</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="nonpressedImage" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0" >
<DiscreteObjectKeyFrame.Value>Collapsed</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Totul pare destul de simplu, dar va atrag atentia la un lucru, daca nu setati si visual state-ul pentru actiune de mouse over, chiar daca nu definim nici o actiune pentru acesta, dupa ce se apasa butonul, imaginea care o sa ramana afisata o sa fie tot cea care se afiseaza cand butonul este apasat.
<VisualState x:Name="MouseOver" />
Pentru acesta problema este nevoie sa adaugam si visual state-ul pentru mouse over. Lasandul fara nici o actiune custom, o sa fie folosita cea default. Prin acest mod, ii putem spune la buton sa revina la normal dupa ce se face click pe el.
Din cauza ca nu sunt un expert in XAML, mi-a trebuit ceva vreme pana sa imi dau seama care era problema. Sper sa nu patit si voi la fel.
Era sa uit, dupa ce va definiti acest style, tot ce mai este nevoie sa il aplicati stilul pe butonul vostru din AppBar.
Read More
Posted in C#, windows 8 | No comments

Thursday, 17 May 2012

Get current position in Metro app on Windows 8 freeze

Posted on 06:22 by Unknown
Ati incercat pana acuma sa obtineti locatia GPS curenta intr-o aplicatie Metro pentru Windows 8?
Daca nu, trebuie sa stiti ca nu e deloc complicat, este chiar la mintea cocosului API-ul.
Geoposition currentPosition = await new Geolocator().GetGeopositionAsync();
Toate informatiile necesare o sa le puteti gasi intr-un obiect de tip Geoposition. Intr-o aplicatie simpla totul o sa mearga fara nici o problema. Apoi o sa ajungeti sa creati un provider de genul GPSProvider. Fiind o metoda asincrona, aceasta metoda o sa fie apelata cu await, iar codul vostru o sa arate in felul urmator:
public class GPSProvider
{
public async Task<Geoposition> GetCurrentPositionAsync()
{
// some code.
return async _geoLocator.GetPositionAsync();
}
}
In unele cazuri, cand o sa rulati codul pe un alt thread decat cel principal o sa va treziti ca locatia GPS nu poate sa fie rezolvata, codul ingheata la metoda GetPositionAsync(). Cauza pentru care se intampla acest lucru este ca codul nu ruleaza intr-un mediu MTA (Multi Threaded Apartment) si nu intr-un mediu STA (Single Threaded Apartment).
Aceasta problema apare doar la primul apel, dupa acest apel, metoda poate sa fie apelata din orice locatie fara nici o problema. In specificatiile la acesta metoda se precizeaza ca aceasta trebuie sa fie apelata prima data dintr-un mediu STA, iar apoi o sa functioneze si dintr-un mediu MTA. In spate aceasta metoda apeleaza la randul ei un COM, din aceasta cauza apare aceasta restrictie.
From MSDN:
In apps that use C# or C++ in Windows 8 Consumer Preview, the first use of the Geolocator object to call GetGeopositionAsync should be on the STA thread. Calls from an MTA thread may result in undefined behavior.

Comportamentul este destul de ciudat si neasteptat. Solutia la aceasta problema este sa mutati codul care face apel la metoda GetPositionAsync in xaml.cs sau in orice loc care sa va asigure ca sunteti intr-un mediu STA. O alta solutie este sa va definiti o metoda de warm up, care este apelata din App.xaml.cs de exemplu.
Read More
Posted in windows 8 | No comments

Azure - How to add custom settings to a Windows Azure project

Posted on 02:04 by Unknown
In acest post o sa vedem cum se pot adauga configurari custom in cadrul proiectului Windows Azure, iar apoi sa le putem accesa din cod.
O parte din configurariile unei aplicatii se tin de obicei in fisierul de configurare (app.config sau web.config - de la caz la caz). Insa, cand lucram la un proiect care o sa ajunga in Windows Azure putem sa facem aceste configuratii si in alta locatie.
De exemplu putem ca aceste configuratii sa le tinem in proiectul de deploy pentru cloud. In felul acesta, putem sa avem mai multe configuratii pentru mai multe environment si/sau chiar sa avem configuratii diferite pentru local si cloud fara sa ne definim un mecanism special pentru acest caz.
Primul pas care trebuie facut este sa deschim fisierul ServiceDefinition.csdef din proiectul de deploy pentru Windows Azure. In cadrul acestuia sub nodul WebRole sau WorkerRole (depinde unde aveti nevoie) este nevoie sa adaugam un nod denumit ConfigurationSettings. In acesta este nevoie sa ne definim lista de configurari custom de care noi avem nevoie.
<WebRole name="Foo.Web" vmsize="Small">
<ConfigurationSettings>
<Setting name="MyCustomFlag">
</onfigurationSettings>
</WebRole>
Odata ce am definit aceasta lista, o sa putem observa ca daca deschidem rolul pentru care am definit aceasta configuratie, putem sa gasim in tab-ul de Settings si configuratia noastra. Valoarea acestuia se poate seta si manual direct in fisierul ServiceConfiguration.Local.cscfg pentru local si ServiceConfiguration.Cloud.cscfg pentru versiunea care ajunge in cloud.
In interiorul acestui fisier in urmatoarea locatie "ServiceConfiguration/Role/ConfigurationSettings" este nevoie sa adaugam un nod care sa aibe urmatoarea forma:
<Settings name="MyCustomFlag" value="256" />
Deoarece aceasta valoare poate sa fie setata diferit pentru local sau pentru cloud, mi se pare foarte utila.
Singurul lucru care ne-a ramas este sa accesam setarea noastra din cod. Acesta este cel mai usor pas, tot ce este nevoie este sa apelam metoda GetConfigurationSettingValue din cadru RoleEnvironment.
string  myCustomFlagValue = RoleEnvironment.GetConfigurationSettingValue("MyCustomFlag");
Ce parere aveti? Ati folosi aceasta varianta?
Read More
Posted in Azure, configurare | No comments

Wednesday, 16 May 2012

What are the base async patterns in .NET world

Posted on 06:51 by Unknown
In momentul de fata exista diferite paternuri care sunt folosite pentru apeluri asyncrone. Am observat ca destul de multa lume incurca aceste paternuri si se face un mix intre acestea.
Din cate am observat pana acuma exista 3 paternuri principale care sunt folosite in general in .NET (mai putin 4.5, despre care o sa vorbim separat).
EAP (Event based Asynchronous Pattern) - in acest patern orice schimbare de stare (actiune se termina de executat, apare o eroare, progresul) sunt notificate prin intermediul unor evenimente.
public class FooEAP
{
public void CalculateAsync(int value1, int value2)
{
int sum = value1 + value2;
OnCalculateComplete(sum);
}
public event CalculateCompleteEventHandler CalculateComplete;
private void OnCalculateComplete(int result)
{
if( CalculateComplete != null )
{
CalculateComplete(this, new FooCalculateEventArgs(result));
}
}
}
APM (Asynchronous Programming Model) - paternul este destul de usor de recunoscut prin formatul BeginXXX si EndXXX. In momentul in care un utilizator apeleaza BeginXXX, task-ul incepe sa se execute. Aceasta metoda o sa returneze o implementare a interfetei IAsyncResult care are urmatoarea forma:
public interface IAsyncResult
{
WaitHandle AsyncWaitHandle { get; }
Boolean IsCompleted { get; }
Object AsyncState { get; }
Boolean CompletedSynchronously { get; }
}
Aceasta interfata se poate folosii pentru a verifica in ce stare se afla actiunea noastra sau sa vedem progresul. Acest patern este destul de intalnit in WCF.
public class FooAPM
{
IAsyncResult calculateAsyncResult;
public IAsyncResult BeginCalculate(int value1, int value2)
{
...
}
public void EndInvoke()
{
// Wait the task to finish
}
}
TPL (Task Parallel Library) - se bazeaza pe task-uri care au fost introduse cu .NET 4.0. Nu reprezinta un patern in sine, dar din .NET 4.5 mai ales o sa fim nevoiti sa le folosim din ce in ce mai des. In general acestea se foloseste cand lucram cu API care se bazeaza pe task-uri. TPL simplifica foarte mult paternul asyncron. Folosind TPL ne este mult mai usor sa scriem si sa folosim cod asyncron.
public class FooTPL
{
public Task<int> Calculate(int value1, int value2)
{
return new Task<int>(() => { return value1 + value2; });
}
}
Task-urile sunt destul de complexe din puct de vedere a API-ului. Sunt extrem de usor de folosit, dar trebuie folosite cu cap deoarece pot sa faca mai mult rau decat bine.
Odata cu .NET 4.5 au aparut async si await, iar orice apel poate sa fie executat asyncron fara sa mai scrim nici o linie de cod. In spate ele se bazeaza pe task-uri si fac parte din TPL si vin in ajutor programatorului. Folosinf aceste doua chei ne este multi mai usor sa scriem si sa facem apeluri asyncrone. In general aceste metode sunt denumite sub forma XXXAsync.
public class FooTPL
{
public async Task<int> CalculateAsync(int value1, int value2)
{
int sum = await CalculateHelper.SumAsync(value1, value2);
return sum;
}
}
Despre cum functioneaza await, o sa revin intr-un post viitor.
Sper ca dupa citirea acestui post va este putin mai clar fiecare din aceste "paternuri". Toate fac acelasi lucru, doar ca in diferite moduri.
Read More
Posted in async, Asynchronous programming, asyncron, C# | No comments

Monday, 14 May 2012

What does Task.Result really do

Posted on 07:42 by Unknown
Cu .NET 4.5 din ce in ce mai multa lume a inceput sa foloseasca apeluri asyncrone si implictit clasa Task. In exemplul de mai jos se apeleaza un task, iar apoi se face retrive la rezulvat:
Task<string> myTask = new Task<string>( () => { ... } );
myTask.Start();
myTask.Wait();
var result = myTask.Result();
In primul rand daca avem Start, iar pe linia urmatoare avem un apel la metoda Wait, metoda Start nu mai are rost sa fie apelata. By default, cand metoda Wait este apelata, un task care inca nu este inca pornit o sa fie pornit automat de catre sistem.
In cazul in care vrem sa obtinem rezultatul, iar intre apelul de Start/Wait si Result nu avem un alt cod de executa, atunci putem sa apelam automat Result. Aceasta metoda o sa faca start automat la task si va astepta pana cand acesta se va termina si va returna rezultatul.
Codul de mai sus poate sa fie rescris in forma urmatoare:
Task<string> myTask = new Task<string>( () => { ... } );
var result = myTask.Result();
In cazul in care avem nevoie metoad Result ne permite sa setam un timeout (fiind din acest punct de vedere asemanatoare cu metoda Wait).
Read More
Posted in async, multitasking | No comments

Performance Counter Setup on Windows Azure

Posted on 07:03 by Unknown
Cand avem o aplicatie in cloud avem nevoie de a monitoriza diferiti parametrii. Acest lucru il facem asa cum il facem si pe un server normal folosindune de performance counter.
Intrebarea ar putea sa fie usor diferita: Ce facem cu aceste valori odata ce le avem?
Daca intram remote pe masina, puten sa ne folosim perfmon.exe pentru a monitoriza toti acest parametrii. Dar daca vrem mai mult de atata, daca vrem ca aceste valori sa le putem accesa remote sau sa le persistam in Azure Storage.
In ajutor ne-a venit in ajutor Microsoft si ne-a oferit DiagnosticMonitor pentru Azure. Acesta poate sa fie configurat destul de usor in momentul in care aplicatia porneste si ne va permite sa scriem orice valoare in Azure Tables. In exemplul de mai jos o sa prezint cum se configureaza pentru a putea vedea load-ul la procesor:
var config = DiagnosticMonitor.GetDefaultInitialConfiguration();
config.PerformanceCounters.ScheduledTransferPeriod = TimeSpan.FromMinutes(30);
config.PerformanceCounters.DataSources.Add
new PerformanceCounterConfiguration() {
CounterSpecifier = @"\Processor(_Total)\% Processor Time",
SampleRate = TimeSpan.FromSeconds(30)
};
Deoarece fiecare tranzactie se contorizeaza la sfarsit de luna, am setat ca flush-ul la date sa se faca odata la 30 de minute. Odata ce am facut aceasta configurare ajunge sa pornim diagnosticarea pentru noua configuratie:
DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", config);
Am vazut ca la unele persoane nu este foarte clar ce valoare reprezinta "\Processor(_Total)\% Processor Time". Aceasta reprezinta CPU usage in momentul in care s-a facut requestul. Valoare este media la CPU usage pentru toate procesoarele masinii noastre.
Aceasta setare este nevoie sa o adaugati in entry point-ul aplicatiei voastre din cloud. Clasa care reprezinta entry-point-ul pentru o aplicatie in cloud are ca si clasa de baza RoleEntryPoint.
Mai jos gasiti o implementare cap coada a unui performance counter.
public class WebRole : RoleEntryPoint
{
public override bool OnStart()
{
var config = DiagnosticMonitor.GetDefaultInitialConfiguration();
config.OverallQuotaInMB = 4080;
config.ConfigurationChangePollInterval = TimeSpan.FromHours(1);
config.PerformanceCounters.BufferQuotaInMB = 128;
config.PerformanceCounters.ScheduledTransferPeriod = TimeSpan.FromSeconds(60);

config.PerformanceCounters.DataSources.
Add(new PerformanceCounterConfiguration
{
CounterSpecifier = @"\Processor(_Total)\% Processor Time",
SampleRate = TimeSpan.FromSeconds(30)
});

DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", config);

return true;
}
}
Odata ce am facut aceste configurari si am facut un deploy (sau am rulat aplicatia local) o sa puteti observa ca apare o noua table in Windows Azure Tables. Aceasta poata numele de "WADPerformanceCountersTable" si o sa contina toate valorile de la toti performance counters pe care ii monitorizati. In acest tabel o sa gasiti toate datele despre performance counters pe care voi ii monitorizati.
Pentru a putea vizualiza aceste valori mai usor, va recomand sa folositi Cloud Monitoring Studio. Este un tool gratis de pe codeplex care iti permite sa vizualizezi toate datele sub forma unui grafic.
Read More
Posted in Azure | No comments

Thursday, 10 May 2012

How to change version of our solution assemblies

Posted on 07:30 by Unknown
Am vazut cateva persoane care au ajuns pe blog cautand cum se face versionarea unui assembly. O sa prezint cea mai simpla metoda pentru a putea face versionarea unui proiect.
By default, versiunea unui proiect din solutia noastra poate sa fie gasita in fisierul AssemblyInfo.cs, care se gaseste in Properties. Daca vrem sa schimbam versiunea unui assembly, trebuie sa facem update la atributele AssemblyVersion si AssemblyFileVersion.
[assembly: AssemblyVersion("1.2.3.4")]
[assembly: AssemblyFileVersion("1.2.3.4")]
Sunt insa momente cand vrem sa controlam versiunea la toate assembly-urile generate de catre solutia noastra. Pentru a putea face schimbarea versiunii dintr-un singur loc, fara sa facem update la fiecare proiect in parte, putem sa extragem aceste doua atribute intr-un fisier separat. Acesta ar avea urmatoarea forma:
using System.Reflection;
[assembly: AssemblyVersion("1.2.3.4")]
[assembly: AssemblyFileVersion("1.2.3.4")]
Numele la acest fisier de obicei este VersionInfo.cs. In fiecare proiect acesta poate sa fie adaugat ca si fisier link-at la solutie (Add file as link). In acest fel, este nevoie sa modificati intr-un singur loc numele la fisier. Cand se va face build, fiecare assembly o sa fie marcat cu versiunea care este specificata in fisierul nostru.
Read More
Posted in visual studio | No comments

Wednesday, 9 May 2012

Use LINQ to get items of specific type

Posted on 03:57 by Unknown
Ma uitam peste un cod scris de mine in urma cu cateva zile si am gasit urmatoarea linie de cod:
var fooCollection = items.Where( x => x is Foo).Select(x => x as Foo);
In cazul in care vrem sa extragem elementele dintr-o colectie care sunt de un anumit tip putem sa folosim metoda OfType. Aceasta metoda returneaza toate elementele din colectie de un anumit tip. Colectia pe care o returneaza o sa contina doar elemente de tipul specificat de catre noi.
Daca rescriu linia de mai sus o sa obtinem:
var fooCollection = items.OfType<Foo>();
Colectia returnata o as fie de tipul dupa care filtram datele. In exemplul dat de mine, rezultatul returnat o sa fie de tip IEnumerable. Astfel incat nu mai este nevoie sa facem nici un fel de conversie.
Mai jos gasiti un link pagina MSDN care descrie aceasta functie:
http://msdn.microsoft.com/en-us/library/bb360913%28v=vs.110%29.aspx
Read More
Posted in C#, linq, visual studio | No comments

Tuesday, 8 May 2012

IT Camp 2012 - Cluj Napoca, 28,29 mai

Posted on 10:37 by Unknown
CodeCamp și ITSpark organizează Conferinta IT Camp în perioada 28-29 mai la Grand Hotel Napoca din Cluj -Napoca, adresată profesioniștilor implicați în implementări de tehnologie Microsoft și managerilor cu rol decizional, ce doresc să fie la curent cu ultimele tehnologii din domeniul IT, să-și îmbogățească cunoștințele tehnice și care urmăresc participarea la training-uri cu adevărat eficiente, bazate pe tehnologiile disponibile astăzi.
 Suntem foarte bucuroÈ™i să anunțăm ediÈ›ia a doua a conferinÈ›ei IT Camp, mai bogată È™i diversificată în conÈ›inut, È™i cu o prezență din ce în ce mai numeroasă. Suntem convinÈ™i că ediÈ›ia din 2012 este un pas hotărât înainte pentru ca IT Camp să devină o conferinÈ›a de referință în regiunea Europa Centrală È™i de Est pentru specialiÈ™tii care lucrează cu tehnologii Microsoft.
Organizatorii au pregătit două zile în care dezvoltatorii, profesioniÈ™tii IT È™i arhiecÈ›ii pot beneficia de  peste 30 de sesiuni tehnice si open panel, prezentate de peste 30 de speakeri locali È™i internaÈ›ionali. ÃŽntre aceÈ™tia, doi experÈ›i cu titul de Microsoft Regional Director (Tim Huckaby, RD È™i MVP, numit de către presa de specialitate un "pionier al revoluÅ£iei Smart Client"; Ciprian Jichici, RD È™i MVP) È™i peste 20 de experÈ›i cu titlul Microsoft Most Valuable Professional (MVP), o parte din ei fiind speakeri internaÈ›ionali (Paula Januszkiewicz, Enterprise Security MVP; Lino Tadros, C# MVP; Martin Kulov, Visual Studio ALM; Giorgio Garcia-Agreda, Dynamics CRM MVP; Alessandro Pilotti, IIS MVP; Mihai Tătăran, ASP.NET MVP).
Conferința acoperă teme de interes general precum Hyper-V, Office 365 și Private & Public Cloud pentru profesioniștii IT, Windows Azure și platforme de cloud, aplicații pentru Windows 8 Metro și dezvoltarea de jocuri XBox Live pentru Windows Phone pentru dezvoltatori, iar pentru arhitecți Domain Driven Design, paneluri publice și multe altele.
Conținutul va fi organizat pe trei track-uri paralele (pentru arhitecti, dezvoltatori și profesioniști IT), adresând probleme și nevoi specifice fiecărei audiențe. În paralel cu aceste track-uri, se pune la dispoziția participanților o sală dedicată laboratoarelor Hands-On-Labs (HOL), cu toate resursele necesare parcurgerii laboratoarelor pe cont propriu (stații de lucru cu mașini virtuale pre-instalate și documentația necesară pentru finalizarea cu succes a fiecărui laborator, descrisă pas cu pas).
Taxa de participare la conferință este de 375 lei şi include accesul la toate sesiunile din cadrul conferinţei, precum și toate costurile legate de participare. Pe parcursul întregului eveniment se vor organiza concursuri cu premii surpriză, iar după eveniment participanţii vor avea acces exclusiv la înregistrările video ale tuturor prezentărilor, în cazul în care nu au reușit să ajungă la toate sesiunile care prezentau interes.
Prima ediție a conferinței IT Camp a avut 21 de sesiuni tehnice, ce s-au desfășurat pe două track-uri paralele (Dev și ITPro), și a înregistrat peste 240 de participanți. Conținutul a fost prezentat de speakeri locali și internationali, dintre care un expert cu titlul Microsoft Regional Director și 10 experți cu titlul de Microsoft Most Valuable Professional.
Pentru mai multe informații legate de agendă, locație și înregistrare, vă rugăm să accesați www. itcamp .ro .
Despre Asociatia Dezvoltatorilor.NET
CodeCamp.ro este comunitatea dezvoltatorilor pasionați de software din Romania. Fiind unul din locurile de întâlniri virtuale ale specialiștilor în .NET din România, CodeCamp.ro ajută dezvoltatorii pe aceste tehnologii să învețe și să rămână la curent cu noutățile platformei.
ITSpark.ro este o comunitate tehnică, utilă celor implicaÈ›i în zona IT-Pro entry È™i mid-level – studenÈ›i sau începatori în domeniul IT, personal tehnic È™i non-tehnic din segmentul IMM/ONG È™i end-users – care fie sunt la început, fie vor să înveÈ›e mai multe despre acest domeniu.

Asa cum am mai spus, este una din conferintele din tara care nu trebuie ratate sub nici o forma. In cazul in care participati si sunteti interesati de Windows 8, va invit in prima parte a celei de a doua zi la prezentarea pe care o sustin despre background task in Windows 8.
Asa ca ne vedem la IT Camp!
Read More
Posted in Cluj, codecamp, ITCamp, itspark, prezentare | No comments

Monday, 7 May 2012

How to deploy and debug remote on a Windows 8 tablet using Visual Studio

Posted on 11:31 by Unknown
Si iata ca am ajuns in momentul in care putem sa testam aplicatii Metro pentru Windows 8 direct de pe tablete. Daca ati dezvoltat aplicatii pentru Windows Phone 7 pana acuma si ati facut deploy si debug pe device, trebuie sa stiti ca acest proces este destul de asemanator.
Cea ce s-a schimbat este modul in care conectati device-ul la calculator. Daca telefonul se conecta prin intermediul unui cablu, iar pe masina era "have to" sa aveti instalat Zune, pentru a face deploy si debug la o aplicatie pe o tableta cu Windows 8, tot ce aveti nevoie pe langa device este ca acesta sa fie conectat la retea. Tableta poate sa fie conectata la retea atat prin WiFi, cat si prin cablu de retea (depinde de ce model aveti).
Pentru a putea face deploy la aplicatie este nevoie ca sa instalati pe tableta Visual Studio 2011. Odata ce ati facut acest lucru in START o sa puteti gasi Remote Debugging Monitor (executabilul se numeste msvsmon.exe). Acesta trebuie pornit pe tableta si lasat sa ruleze. Prin intermediul acestuia o sa puteti face remote deploy si debug. Trebuie sa va spun ca fata de versiunea pentru VS 2008, cu care am lucrat acu 2 ani pe un alt proiect acesta a fost foarte mult imbunatatit, nu am avut nici o problema cu el.
Ca procesul de deploy sa fie cat mai simplu si deoarece in general cand facem deploy si debug suntem intr-o retea sigura va recomand ca dupa ce ati pornit Remote Debugging Monitor sa deschideti Tools->Options si sa selectati optiunea de "No Authentication" si sa aveti grija sa lasati bifata optiunea de "Allow any user to debug". Intr-o retea sigura daca lasati aceste optiuni active o sa va complicati putin viata, mai ales intr-un mediu corporate unde avem un Active Directory si toata povestioara.
De pe masina de development, pentru a putea deploy pe tableta trebuie sa specificati adresa IP a tabletei sau numele care ati dat la tableta in Visual Studio. Pentru a obtine IP-ul la tableta nu incercati sa cautati cmd.exe si sa executati ipconfig.exe, deoarece in acest moment nu aveti parte de cmd.exe. Ce puteti face este sa deschideti conexiunea curenta la retea si sa dati click pe details. Acolo o sa puteti gasi adresa IP.
Odata ce ati deschis Visual Studio 2011 impreuna cu solutia voastra, selectati proiectul de UI si dati click dreapta, iar apoi "Properties". In tabul "Debug", este nevoie sa selectati la "Target Device" valoarea "Remote Machine" - puteti sa folositi atat IP-ul sau numele la tableta. Va recomand sa folosti numele la tableta, deoarece IP-ul in general nu este fix. Debiti optiunea de "Use authentification" deoarece nu aveti nevoie de ea in acest moment.
In cazul in care vreti sa setati ca doar anumiti useri sa poate face deploy, va recomand ca in prima faza sa urmati pasii de mai sus, iar doar apoi sa incepeti sa restrictionati cine poate sa faca deploy si debug.
Va mai recomand sa selectati si optiunea "Always re-install my package", ca sa fiti siguri ca ultimele modificari ajung pe tableta.
Spor la deploy!
Read More
Posted in visual studio, windows 8 | No comments

Windows Azure Instance - Remote Access Problems

Posted on 03:57 by Unknown
La orice instanta din Windows Azure, un user se poate conecta remote ca si pe orice alta masina. Acesta are acces la orice fel de resurse din sistemul de operate incepand de la task manager la event logs sau la Windows Services.
Pentru a ne putea conecta remote la instanta unui rol este nevoie ca de portalul Windows Azure sa selectam instanta la care vrem sa ne conectam, iar apoi din meniul de sus sa apasam butonul "Connect". Browser-ul o sa faca download la un fisier cu extensia .rdp, care se foloseste pentru conextiune remote. Odata rulat acest fisier, totul o sa decurga normal, o sa fie nevoie sa introduceti credentialele si gata, sunteti conectat remote in Cloud.
Pana aici nu o sa aveti nici o problema, totul o sa mearga ca uns. Insa in unele cazuri o sa va treziti ca instanta pe care o aveti nu poate sa fie gasita, orice ati face. Cand incercati sa dati conect, aplicatia sta cateva secunde iar apoi primiti o eroare de genul:
The specified user name does not exist. Verify the username and try logging in again. If the problem continues, contact your system administrator or technical support.
Desi rolul functioneaza, la fel si instantele pe care le aveti, totul este in regula. Acest lucru apare uneori dupa 2-3 zice ce ati folosit fara problema remote conenction-ul pe cloud. O solutie simpla pe care am gasito la aceasta problema este sa deschideti cu un editor text fisierul .rdp si sa inlocuiti friendly name-ul (DNS name) pe care il aveti pe prima linie cu IP-ul instantei.
Before:
full address:s: myApp.cloudApp.net
After:
full address:s: 123.123.123.123
Am observat ca acest lucru se intampla dupa ce se schimba administratorul la o subscriptie (acest lucru se poate face doar la cerere si este facut direct de cei de la Windows Azure support) sau se fac modificari complexe.
Sper ca acuma functioneaza si la voi :-).
Read More
Posted in Azure, remote, Windows Azure | No comments

Friday, 4 May 2012

Visual Studio 2011 BETA - XAML error report problems

Posted on 07:35 by Unknown
In cazul in care lucrati cu Visual Studio 2011 BETA si sa trezici ca build-ul va crapa, desi nici o eroare nu se afiseaza, una din cauze poate sa fie XAML gresit. In unele cazuri, VS nu ne raporteaza ca XAML este gresit si doar in momentul in care MSBUILD ruleaza apare eroarea. Problema este ca aceasta nu este afisata, singurul lucru care se intampla este ca procesul de MSBUILD ramane agata si chiar daca incercam sa il inchidem din task manager, o sa ne trezim ca apare aceiasi problema la urmatorul build.
Mesajul de eroare care se afiseaza nu are nici o legatura cu eroarea reala si ne v-a avertiza ca MSBUILD-ul nu poate sa stearga un assembly deoarece este folosit de un alt proces.
Greseala in XAML pe care eu avuto cand bug-ul s-a reprodus este urmatoarea:
x:Name={Binding Name}
Spor!
Read More
Posted in visual studio, windows 8 | No comments

How to get a valid daylight saving time - Part 2

Posted on 07:17 by Unknown
Intr-un post anterior am povestim putin despre TimeZone si daily light saving. Prin metoda "IsDaylightSavingTime" a unui TimeZoneInfo spuneam ca se poate verifica daca pentru o anumita data avem ora de vara sau de iarna.
Lucrurile se complica putin cand nu cunoastem TimeZoneInfo pe care il are clientul. In acest caz, pe baza orei trebuie sa identificam pe ce time zone se afla clientul. Acest lucru nu se poate determina in totalitate, dar putem identifica un time zone care partial asemanator.
Un obiect de tip TipZoneInfo contine metoda "GetAdjustmentRules" care ne returneaza o lista de reguli care se folosesc pentru a ajusta ora (de exemplu ora de vara sau de iarna). Fiecare regula defineste perioda de inceput si de sfarsit dar din pacate perioada nu este definita la nivel de zi ci doar de luna. De exemplu ni se specifica ca in luna martie se termina perioada in care se aplica regula, dar nu se specifica data exacta cand aceasta se termina.
A doua problema apare in cazul in care aplicatia ruleaza pe un server care are setat time zone-ul pe "Coordinated Universal Time". Pentru acest time zone nu exista ora de vara sau de iarna, din aceasta cauza incercati sa verificati daca ora data este de vara sau de iarna folosind metoda "IsDaylightSavingTime" o sa va trezici cu rezultate ciudate.
In unele cazuri nu avem altceva de facut decat sa ne vazam de ora pe care clientul o trimite si pe baza careia sa obtinem un time zone. Acesta solutie trebuie aplicata doar daca este ultima solutie, deoarece niciodata nu trebuie sa ne bazam pe ora clientului si sa o comparam cu cea a serverului, dar in unele cazuri aceasta este singura optiune.
Pentru a obtine ultima duminica dintr-o luna va recomand sa folositi urmatoarea metoda:
public static DateTime LastDay(this DateTime current, DayOfWeek dayOfWeek)
{
DateTime lastDay = current.Last();
return lastDay.AddDays(Math.Abs(dayOfWeek - last.DayOfWeek)*-1);
}
Dupa ce comparam ora clientului cu cea a serverului trebuie sa verificam daca data curenta este cu ora de vara sau de iarna. Pentru acest lucru putem sa ne folosim de metoda data mai sus si sa verificam data data este cuprinsa intre ultima duminica din luna Octombrie si ultima duminica din luna Martie.
Acesta nu este cel mai sigur mecanism, dar in unele cazuri poate sa fie singura solutie pentru a putea determina in ce time zone se afla clientul.
Read More
Posted in date time, datetime | No comments

Thursday, 3 May 2012

How to get a valid daylight saving time

Posted on 03:43 by Unknown
Foarte multi dezvoltatori s-au lovit de problema legate de datetime si offsetul timpului in functie de locatie.
Daca avem o data si vrem sa verificam daca pentru aceasta data daylight saving este activ sau nu putem sa verificam folosind metoda IsDaylighSavingTime.
TimeZoneInfo.Local.IsDaylightSavingTime(DateTime.Parse("01/04/2012"))
Aceasta metoda o sa ne returneze TRUE daca daylight saving este activ pentru data respectiva. Trebuei avut grija ca in functie de locatia de pe glob dayling saving poate sa inceapa sau sa se termine intr-o zi diferita.
Odata ce ne-am setat current culture pe cultura dorita am avea si daylight saving time setat pentru zona respectiva.
Thread.CurrentThread.CurrentCulture = myCulture;
Thread.CurrentThread.CurrentUICulture = myCulture;
TimeZoneInfo.Local.IsDaylightSavingTime(DateTime.Parse("01/04/2012"))
Dar o sa avem o surpriza neplacuta. TimeZoneInfo.Local o sa ne returneze timezone-ul local a masinii si nu cel pe care noi l-am setat prin intermediul culture-ului.
De ce se intampla acest lucru? Este destul de simplu, o cultura nu are o singur time-zone. Poate sa aibe 2,3 chiar si mai multe time-zone-uri.
Pentru a putea face verificarea este nevoie sa stim exact cu ce time-zone lucram si sa il setam explicit. O lista cu toate time-zone-urile se poate obtine prin metoda TimeZoneInfo.GetSystemTimeZones().
Read More
Posted in C#, date time, datetime | No comments
Newer Posts Older Posts Home
Subscribe to: Comments (Atom)

Popular Posts

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

Categories

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

Blog Archive

  • ►  2013 (139)
    • ►  November (17)
    • ►  October (12)
    • ►  September (10)
    • ►  August (7)
    • ►  July (8)
    • ►  June (15)
    • ►  May (12)
    • ►  April (17)
    • ►  March (16)
    • ►  February (9)
    • ►  January (16)
  • ▼  2012 (251)
    • ►  December (9)
    • ►  November (19)
    • ►  October (26)
    • ►  September (13)
    • ►  August (35)
    • ►  July (28)
    • ►  June (27)
    • ▼  May (24)
      • Post event - ITCamp 2012
      • Trail Ride to Float Mobile Learning Symposium
      • Windows 8: Error on video playing
      • Windows 8 for tables and viruses
      • Metro UI and Windows Metro Style Application is no...
      • Use lock in a block that contains a call to an asy...
      • DataContractSerializer and list of abstract class
      • The secret behind "params" keyword
      • Code Retreat Cluj-Napoca - 19/05/2012
      • InitializeComponent CLR error in Windows 8 Metro a...
      • Custom button image of AppBar in a Windows 8 Metro...
      • Get current position in Metro app on Windows 8 freeze
      • Azure - How to add custom settings to a Windows Az...
      • What are the base async patterns in .NET world
      • What does Task.Result really do
      • Performance Counter Setup on Windows Azure
      • How to change version of our solution assemblies
      • Use LINQ to get items of specific type
      • IT Camp 2012 - Cluj Napoca, 28,29 mai
      • How to deploy and debug remote on a Windows 8 tabl...
      • Windows Azure Instance - Remote Access Problems
      • Visual Studio 2011 BETA - XAML error report problems
      • How to get a valid daylight saving time - Part 2
      • How to get a valid daylight saving time
    • ►  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