Archive for 2008

Ronua la Baia Mare

Tuesday, December 23rd, 2008

Ieri am organizat la Baia Mare prima întâlnire sub egida RONUA, sper nici pe departe ultima :-). Am vorbit despre ASP.NET MVC (cu demo cu tot), respectiv Visual Studio 2010 şi C# 4.0. Au fost vreo 15 persoane, cei mai mulţi fiind cadre didactice şi studenţi de la Universitatea de Nord din Baia Mare, dar şi de la câteva firme din zonă. Au venit şi doi sătmăreni - Călin care în ultima vreme trage tare pe subiectul comunitate :-), respectiv colegul meu Cosmin Tărţan.

Repet aici ideea enunţată de mine ier în încheiere: dorim să avem astfel de evenimente şi în viitor. Mi-ar prinde bine un feedback: pe ce teme?, cât de des?, etc. Probabil ar fi o idee să facem la Baia Mare un workshop de ASP.NET pentru începători şi intermediari, ca în genul celui de la Timişoara. Ce spuneţi? (lăsaţi comentariu sau trimiteţi email).

Finala la Software Design – excITe

Sunday, December 14th, 2008

Este a patra ediție la care particip, acum în calitate de dinozaur MSP :-) și ca membru al juriului. Ideea a rămas excelentă, iar implementarea ei de anul acesta a făcut ca rezultatele să fie mai bune decât în alți ani: mai mulți participanți (13 echipe prezente în finală), cu soluții bune sau foarte bune. Chiar dacă cele mai multe nu erau implementate complet, ceea ce era implementat era făcut cap-coadă, deci nu aveai senzația că s-au apucat de 10 chestii și le-au dus pe toate la 80% fără a termina vreuna – situație destul de frecventă pentru programatorii începători.

Ceea ce cred eu că a făcut diferența față de anii trecuți, fără a fi o listă exhaustivă:

  • O discuție pe tema managementului de proiecte software, avută în compania concurenților de mine și Cristi Boldișteanu (Managing Partner, Auximus), înainte ca ei să înceapă lucrul pe proiecte.
  • Mentorii. Fiecare echipă a avut asociat un mentor din echipa MSP, care a stat la dispoziția lor pentru discuții orientative pe perioada de implementare a soluțiilor.
  • Timpul de 1 oră avut la dispoziție pentru instalarea aplicațiilor pe stațiile folosite pentru demonstrații. Deci au avut timp să facă ultimele bife / configurări / etc, fără presiune, înainte de a intra în prezentare.

Mă bucur că am avut ocazia să particip din nou la acest concurs, deoarece cred că e o inițiativă care trebuie susținută inclusiv din industrie (firme care dezvoltă software, și care uneori prea stau cu brațele încrucișate și așteaptă forță de muncă gata educată pentru ele). Normal, țin să felicit organizatorii și participanții, pentru implicare dar şi pentru că toți au avut foarte mult de câștigat din această inițiativă.

Tutorial ASP.NET – partea a III-a

Saturday, December 13th, 2008

Resurse pentru acest articol

Enunţ aici resursele asociate acestui articol:

Introducere

În acest articol, care reprezintă numărul al treilea al tutorialului nostru de ASP.NET (partea I aici: http://hpc-consulting.ro/csb/blogs/mihai/archive/2008/09/17/tutorial-asp-net-episodul-1.aspx, partea a doua aici: http://hpc-consulting.ro/csb/blogs/mihai/archive/2008/10/02/tutorial-asp-net-partea-a-ii-a.aspx ), vom continua discuția despre interfața cu utilizatorul din aplicațiile web ASP.NET, concentrându-ne mai mult pe aspecte legate de controalele ASP.NET și pe păstrarea stării obiectelor în aplicațiile web.

Unelte / tehnologii: Visual Web Developer 2008 Express, ASP.NET 3.5.

Controale dezvoltate de programator

Trebuie să facem distincția între două tipuri de controale care pot fi dezvoltate de către programatori: ”user controls” respectiv ”custom controls”.

User controls

Acestea reprezintă maniera de a combina o serie de controale ASP.NET existente într-un singur control. De multe ori, paginile unei aplicații ASP.NET conțin controale similare, cum ar fi de exemplu un formular care cere informațiile legate de adresa unui utilizator – aici am avea câte o pereche de Label și TextBox pentru nume, prenume, adresă, oraș, cod poștal, etc. Putem crea un ”user control” care să conțină toate aceste controale grupate la un loc, și care poate fi apoi folosit unitar de oricâte ori este nevoie.

Crearea de User controls

Aceste tipuri de controale se realizează într-o manieră asemănătoare paginilor ASP.NET, doar că extensia rezervată fișierelor care le conțin este .ascx, iar în codul ASP.NET observăm directiva Control în loc de directiva Page specifică paginilor. Pentru crearea unui User control: Website – Add New Item – Web User Control. Toate controalele și textul care sunt create într-un astfel de control vor fi apoi renderizate pe paginile în care acesta este inclus.

Crearea unui User control dintr-o pagină ASP.NET

O pagină gata creată poate fi convertită la User control. Această practică poate avea avantajul că mai întâi testăm controlul având direct o pagină, iar după ce îl finisăm putem să realizăm conversia astfel:

· Scoatem tag-urile: html, body, form.

· Modificăm directiva Page în Control.

· Modificăm extensia fișierului din .aspx în .ascx.

· În directiva Control, modificăm valoarea atributului Inherits din ”System.Web.UI.Page” în ”System.Web.UI.UserControl”.

Adăugarea unui User control pe o pagină

Din Solution Explorer, realizăm operațiunea de drag-and-drop a unui User control existent pe o pagină ASP.NET. Codul ASP.NET va conține o directivă de tipul acesta:

<%@ Register Src="MyControl.ascx" TagName="MyControl" TagPrefix="uc1" %>

Respectiv acolo unde a fost așezat controlul în pagină, vom găsi un cod asemănător cu acesta:

<uc1:MyControl ID="MyControl1" runat="server" />

Directiva Register este necesară pentru a avea User controls în paginile ASP.NET. Atributul TagPrefix este cel care specifică namespace-ul din care face parte controlul dorit – prin urmare, controalele noastre pot fi așezate în spații de nume pentru a le putea grupa funcțional, respectiv pentru a asigura unicitatea numelor acestora. Atributul TagName reprezintă numele controlului nostru, iar atributul Src conține calea către fișierul .ascx unde a fost definit. Instanța propriuzisă a controlului se află undeva în form, acolo unde a fost așezat la drag-and-drop.

Custom controls

Acestea sunt controale dezvoltate de programator, prin specializarea unor controale existente în ASP.NET. Prin specializare înțelegem moștenirea dintr-o clasă ASP.NET care reprezintă un control sau direct din clasa WebControl, și specializarea comportamentului acestuia. Sigur, se poate moșteni direct din clasa Control dar aceasta se află mai sus în ierarhie, ceea ce înseamnă că nu oferă la fel de multe facilități implicite precum WebControl.

În ambele situații (moștenire din WebControl sau specializarea unui control existent), trebuie să avem în vedere reutilizarea controlului dezvoltat de noi, de aceea este recomandat să fie creat într-o bibliotecă dinamică (.dll), adică un Class Library din Visual Studio.

Moștenirea dintr-un control existent

O situație destul de întâlnită atunci când dorim specializarea unui control existent, este să suprascriem metoda Render a controlului pentru a modifica modul în care acesta este renderizat de către ASP.NET.

Moștenirea din clasa WebControl

Alegem aceată opțiune când niciun control ASP.NET existent nu ne oferă funcționalitate similară cu ceea ce dorim să obținem. În acest caz este obligatoriu să suprascriem metoda Render pentru a specifica modul în care va fi renderizat noul control.

Controale dimanice

Până acum am discutat despre controale ASP.NET respectiv dezvoltate de programator care sunt așezate în pagină în timpul dezvoltării site-ului, numite controale statice. Există posibilitatea de a crea controale dinamic, la rularea aplicației, situație care apare atunci când în funcție de o anumită decizie sau de alta site-ul nostru trebuie să se comporte diferit.

Crearea controalelor dinamice

Controalele ASP.NET

Pentru a crea dinamic un control ASP.NET, tot ce trebuie făcut este să scriem acest cod în metoda unde dorim să fie creat:

TextBox txt = new TextBox();

User controls

Presupunând că există un User control numit MyUserControl care se află în fişierul .ascx cu acelaşi nume, atunci crearea dinamică a sa se realizează astfel:

Control c = this.LoadControl("~/MyUserControl.ascx");

De ce nu putem să creem dinamic User controls în aceeași manieră în care o facem cu controalele server obișnuite? Ei bine, atunci când avem un User control într-o pagină, conținutul său trebuie renderizat. Asta înseamnă că dacă noi am crea pur și simplu un obiect în maniera aceasta MyUserControl ctrl = new MyUserControl(); pur și simplu el nu poate fi renderizat respectiv proprietățile sale – cum ar fi ID-ul - nu pot fi setate.

Metoda LoadControl are nevoie de calea către fișierul care conține User control-ul, iar acea cale trebuie să fie virtuală și relativă. Câteva exemple:

· Control c = this.LoadControl("~/MyUserControl.ascx");. Calea este relativă la alicație.

· Control c = this.LoadControl("MyUserControl.ascx");. Calea este relativă la pagina curentă.

· Control c = this.LoadControl("./UserControls/MyUserControl.ascx");. Calea este relativă la pagina curentă.

Păstrarea stării în aplicaţiile ASP.NET

Aplicaţiile web diferă fundamental faţă de cele desktop în ceea ce priveşte păstrarea stării obiectelor create. Dacă într-o aplicaţie desktop un obiect odată creat rămâne în memorie şi poate fi accesat respectiv putem să îi vedem starea până când el este distrus explicit (sau de către Garbage Collector după o perioadă lungă de nefolosire); într-o aplicaţie web implicit nu se reţine starea obiectelor create. Motivul e simplu: fiecare cerere (Request) către un server web presupune “distrugerea” paginii curente şi crearea uneia noi, iar obiectele care existau înainte de Request sunt distruse.

Există mai multe posibilităţi de a păstra starea unor obiecte, unele oferite implicit de ASP.NET altele implicând muncă din partea programatorului.

Starea controalelor ASP.NET

Controalele ASP.NET îşi păstrează starea între două postback-uri, lucru care poate fi uşor observat dacă creem un formular cu câteva Labels şi TextBoxes, apoi scriem ceva în ele și facem un postback. Responsabile pentru acest lucru sunt două etape din suita de evenimente care au loc la încărcarea unei pagini ASP.NET cerută de pe server, anume in imaginea alăturată ”LoadViewState” și ”LoadPostbackData”.

 

image

După cum spuneam și în partea a II-a a acestui tutorial, nu ViewState-ul este responsabil pentru încărcarea stării controalelor, decât parţial. Toate controalele care implementează interfaţa IPostBackDataHandler vor beneficia de încărcarea stării lor de dinainte de postback indiferent dacă ViewState-ul este activat sau nu. Prin urmare, este foarte important să analizăm dacă ViewState-ul trebuie lăsat activ (aşa este implicit) – ceea ce înseamnă o încărcare suplimentară a paginii cu date care poate nu trebuie reţinute. Un exemplu edificator în acest sens apare în screencast-ul ataşat (partea a doua).

Păstrarea stării controalelor dinamice

Am văzut cum se crează controalele dinamice, dar trebuie acum să vedem și cum se comportă ele la mai multe postback-uri ale aceleiași pagini.

Evident că în paginile ASP.NET avem de-a face cu postback-uri. Dacă avem controale dinamice, este important ca ele să fie create şi adăugate la form, sau într-un alt control container de fiecare dată când pagina se reîncarcă. Să spunem că dorim să avem un Label dinamic; următorul cod nu este corect:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Label lbl = new Label();
            lbl.Text = "text initial";
            lbl.ID = "lbl";
            form1.Controls.Add(lbl);
        }
    }

protected void btnChangeText_Click(object sender, EventArgs e)
    {
        Label lbl = (Label)form1.FindControl("lbl");
        lbl.Text = "text modificat";
    }

Asta deoarece controlul se crează doar la prima încărcare a paginii, iar la postback-uri nu va mai fi găsit. De exemplu, dacă avem un eveniment unde dorim modificarea unei proprietăți a acestui Label, aplicația va arunca o excepție System.NullReferenceException. Controlul trebuie adăugat la fiecare postback:

protected void Page_Load(object sender, EventArgs e)
    {
        Label lbl = new Label();
        lbl.Text = "text initial";
        lbl.ID = "lbl";
        form1.Controls.Add(lbl);
    }

O situație mult mai uzuală în care lucrăm dinamic cu controalele ASP.NET este cea în care folosim un control avansat, eventual care este legat la date (data bound). Un exemplu ar fi un GridView care să primească dinamic, la execuție, coloane noi în funcție de anumite condiții legate de starea aplicației. Varianta de mai jos presupune adăugarea dinamică a unui BoundField la un GridView existent declarat static in pagină, dar prezintă o problemă:

protected void Page_Load(object sender, EventArgs e)
    {
        BoundField field = new BoundField();
        field.HeaderText = "Coloana dinamica";
        field.DataField = "Data";
        grid.Columns.Add(field);
        List<GridData> list = new List<GridData>();
        list.Add(new GridData("item 1"));
        list.Add(new GridData("item 2"));
        list.Add(new GridData("item 3"));
        grid.DataSource = list;
        grid.DataBind();
    }

Problema este că la fiecare postback noi vom adăuga la GridView o coloană dinamică şi probabil că nu dorim acest lucru. Codul care adaugă respectiva coloană trebuie pus ori într-o secţiune de cod if (!IsPostBack), ori pus în OnInit.

protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        BoundField field = new BoundField();
        field.HeaderText = "Coloana dinamica";
        field.DataField = "Data";
        grid.Columns.Add(field);
    }

Starea obiectelor

ASP.NET se ocupă de păstrarea stării controalelor, dar de multe ori este necesar să reţinem starea unor altfel de obiecte. De exemplu, să  ne imaginăm că pe prima pagină a unei aplicaţii ASP.NET se efectuează autentificarea utilizatorului, iar în toate paginile ulterioare acesta trebuie reţinut. În acest sens, avem la dispoziţie câteva opţiuni.

Query String

Sau parametri de get, anume care apar în hyperlink-ul de navigare către o pagină. De exemplu, dacă dorim ca din Pagina1.aspx să transmitem un parametru în Pagina2.aspx, atunci putem avea o ancoră care în atributul href să aibă valoarea Pagina2.aspx?parametru=valoare_parametru. Prin Query String putem trimite parametri de tip șir de caractere, ceea ce poate nu este suficient întotdeauna, dar pentru a-i transmite dintr-o pagină în cealaltă nu avem nevoie de postback pe pagina curentă, ci pur și simplu de o navigare html.

Session

Acesta este un container specific ASP.NET în care se pot salva obiecte de orice tip relativ la sesiunea curentă. O sesiune este dată de o instanță de browser în care este deschisă aplicația ASP.NET – deci de pe același calculator dacă deschidem în 2 instanțe diferite de browser aceeași aplicație, atunci avem două sesiuni diferite.

Un obiect odată introdus în Session, rămâne acolo și poate fi accesat de oriunde din aplicație pe toată durata sesiunii. Sesiunea se poate termina astfel:

  • La un timp de la închiderea browser-ului. Tipic, sesiunea mai este reținută timp de 20 de minute, dar această valoare este configurabilă.
  • La resetarea procesului de IIS în care rulează aplicaţia pe server. Procesul de IIS se poate restarta dacă un anumit prag de memorie alocată a fost depăşit sau un anumit timp de rulare continuă a fost depăşit. Acestea sunt setări care ţin de administrarea serverului de IIS, dar ce trebuie să reţinem este că acest proces se poate restarta în timp ce aplicaţia rulează (este cel puţin o sesiune activă) şi atunci acea sesiune se pierde.
  • Pentru o mai mare robusteţe, sesiunea poate fi stocată într-un server Microsoft SQL Server. Atunci avem avantajul robusteţii faţă de stocarea ei în IIS, dar avem dezavantajul performanţei pentru că la fiecare operaţie de scriere / citire cu sesiunea are loc şi o serializare / deserializare.

Făcând abstracţie de setările de pe server şi modurile diferite de stocare a sesiunii, putem presupune că aceasta este disponibilă până când utilizatorul închide browser-ul.

Obiectele care se introduc în Session sunt specifice sesiunii (utilizatorului) curente, adică ele nu sunt “vizibile” de către alţi utilizatori.

Application

Dacă dorim să păstrăm starea unor obiecte dar acestea să fie partajate între toţi utilizatorii aplicaţiei, avem la dispoziţie obiectul Application. Maniera de lucru cu acesta este identică cu cea a Session-ului, doar că zona de memorie este partajată între utilizatori.

Cookie

Cookie-urile sunt o altă modalitate de a păstra starea unor obiecte. Acestea nu sunt altceva decât fișiere care se stochează pe calculatorul utilizatorului aplicației, deci avem avantajul că nu utilizăm memorie de pe server. Totuși, există dezavantajul că depindem de setările browser-ului utilizatorului care poate sau nu să permită salvarea de cookie-uri, respectiv acesta oricând poate să și le șteargă.

Follow up - Workshop programare web cu ASP.NET

Monday, December 8th, 2008

În acest weekend (sâmbătă 6 decembrie) am organizat împreună cu prietenul și colegul meu din Ronua Călin Iepure un Workshop de ASP.NET. Am avut 51 de persoane înscrise dar din cauza spațiului a trebuit să reducem numărul participanților. Ne-a ajutat Cătălin (MrSmersh) cu prezentarea mai detaliată a RONUA și cu campania ”Hrănește un copil!”, respectiv MS Ro (via Petru) cu pizza și suc, dar și Incubatorul Software din Timișoara cu sala oferită gratuit.

Din punctul nostru de vedere, al meu și al lui Călin, a fost un succes. Pot să spun că ne-am coordonat foarte bine, fiecare dintre noi având experiența unor proiecte web în spate :-). Ne încurajează și feedback-ul de la participanți, care în mare este foarte pozitiv, și din această cauză în mod sigur vom mai face astfel de acțiuni. Am reținut și feedback-ul critic, din care enumăr: durata prea scurtă, videoproiectorul, sala prea mică. Vom încerca să ținem cont de ele pe viitor, prima la care vom lucra va fi durata - lucrăm la ideea unui cadru de training mai organizat.

Atașez aici materialul folosit.

Cursuri web organizate de Microsoft

Thursday, November 27th, 2008

Luni și marți (24, 25 noiembrie) am avut ocazia să fiu instructor la un curs organizat de Microsoft, pe teme de ASP.NET 3.5 și Silverlight 2.0, pentru firme de web din București, împreună cu prietenul și colegul meu din firmă Florin Toader, respectiv prietenul și colegul MS Community Influencer Gabi Enea.

Cu ocazia acestui training, care va fi repetat în 4-5 decembrie tot pe bază de invitație, am aflat că ar fi oportună o serie de laboratoare live (folosind o unealtă de tip Live Meeting să spunem) pe subiectele de mai sus. Sunt curios câte persoane ar fi interesate de așa ceva: laboratoare de 2-3 ore, în care discutăm pe rând capitole din ASP.NET respectiv Silverlight, desfășurate live pe web. Lăsați un comentariu aici sau trimiteți-mi un email cu subiectul [laboratoare live], și în funcție de cerere poate organizăm.

Tech Ed 2008 Review și excITe

Tuesday, November 25th, 2008

Sâmbătă 22 noiembrie am povestit despre Visual Studio 2010, C# 4.0, respectiv Aurelian despre Windows Azure și ”cloud” în general. Chiar dacă discuțiile mi s-au părut utile și interesante (deși personal nu m-am pregătit 100% cum aș fi dorit din lipsă de timp), din păcate nu a venit foarte multă lume. De obicei postam pe blog prezentarea și demo-urile, dar acum e mai greu fiindcă am rulat o mașină virtuală - care poate fi totuși găsită pe site-ul MSDN. Chiar vă recomand să vă jucați cu ea, pentru că Visual Studio 2010 e spectaculos, respectiv veți avea ocazia să testați noutățile platformei și limbajului din versiunea următoare dintre care aș menționa în mod special tipurile dinamice.

Acum dezbatem aici: http://ronua.ro/CS/forums/208656/ShowThread.aspx ideea de a avea o întâlnire în care să discutăm despre (1) managementul proiectelor software; (2) arhitecturi ale aplicațiilor enterprise cu exemple în .NET.

Apropos de subiectul (1), duminică 23 noiembrie am fost la MSP din UPT unde am discutat cu o parte din cei înscriși la concursul excITe despre managementul proiectelor software, sigur în contextul lor. Dacă nu știați, excITe este o inițiativă foarte bună de care sunt profund legat pentru că a început pe vremea când eram Team Lead în MSP UPT :-), iar la acest concurs sunt înscriși în fiecare an câteva zeci de studenți din UPT.

Microsoft “Velocity”

Friday, November 14th, 2008

Acesta este numele de cod pentru o platformă de caching la nivel de memorie (middle-tier) distribuită pe mai multe mașini. ”Velocity” poate fi utilizat pentru a salva într-un cache distribuit orice obiect CLR sau dezvoltat de programator (doar să fie serializabil). În acest moment se afla la versiunea CTP2 (descarcă de aici), iar RTM-ul va veni undeva după mijlocul lui 2009.

”Velocity” vine într-un moment foarte bun: necesitatea de performanță în aplicațiile web crește. Dacă dorim să îmbunătățim performanța unei aplicații, de cele mai multe ori descoperim că bottleneck-ul este la nivel de data layer – pur și simplu accesul la un server de baze de date este relativ lent (oricât de mult am optimiza interogările și serverul), față de accesul la date care se află într-un middle-tier, adică în memoria RAM a unor servere web. Ca să creștem performanța la nivel de servere de baze de date, am putea să scalăm la acel nivel, dar mult mai ieftin este să scalezi la nivel de middle-tier deoarece azi RAM-ul costă foarte puțin.

Chiar dacă e CTP, ”Velocity” știe multe:

  • adăugarea dinamică de mașini ca provideri de cache.
  • diferite moduri de tratare a conflictelor (de ex mai multe Update-uri paralele sau în timpul unei citiri).
  • performanță foarte bună.
  • o aplicare excelentă a lui: provider de Session State. Față de ce avem acum (InProcess – care depinde de robustețea, setările, etc ale procesului sub care rulează aplicația web; SqlServer – care înseamnă robustețe mai mare dar performanță mai mică din cauza serializării/deserealizării), un provider realizat cu ”Velocity” sună mult mai bine.

În timpul sesiunii despre ”Velocity” am apucat să fac următoarele pe laptopul meu: descarc și instalez biții, configurez mașina, fac un mic demo de pus / scos din / în cache. Deci am putea spune că modelul de programare şi în general utilizarea lui sunt foarte simple :-).

Tech Ed EMEA 2008

Friday, November 14th, 2008

Încă nu s-a terminat Tech Ed-ul de anul acesta dar scriu un post în care enumăr ceea ce am vazut mai interesant:

  • Visual Studio 2010. Uneltele din această suită vin mult îmbunătățite din punctul de vedere al ușurinței de utilizare. Interfața este WPF. Despre asta mai mult în 22 noiembrie.
  • ”Oslo” – platforma Microsoft de Domain Specific Languages. Adică primii pași spre a avea limbaje specifice unor domenii (verticale industriale) care să descrie aplicațiile ce trebuie implementate la un nivel mai înalt și mai ușor de înțeles decât limbajele de programare existente.
  • Multe prezentări despre dezvoltarea de aplicații web. ASP.NET MVC, Silverlight 2.0, AJAX, jQuery; performanță, interfețe cât mai ergonomice. Mi se pare că Microsoft pune mare accent pe aceste subiecte, ceea ce de fapt se leagă cu strategia generală de a migra parțial spre web (S+S). Mai multe aici într-o serie de training-uri organizate de Microsoft România și în care voi fi instructor, respectiv la workshop-ul de ASP.NET.
  • Multe altele, sper să am timp să le descriu mai pe larg.

Una dintre prezentările cele mai interesante din punctul meu de vedere a fost cea a lui Brian Harry (acum Technical Fellow la Microsoft, dar a început cariera într-un startup care a creat SourceSafe ca să fie apoi cumpărat de MS, a ajuns programator acolo, iar în câțiva ani a ajuns Product Manager pe câteva release-uri de Visual Studio, respectiv de TFS) despre managementul echipelor software. Prezentarea a fost una foarte plină cu observații proprii din experiența lui. Cum coordonezi o echipă de 2800 de oameni? Cum faci să ții un deadline? Ce faci atunci când depășești deadline-ul (în software, chiar și la MS, se întâmplă aproape în 100% din cazuri)?

Mi-ar face plăcere să avem odata o discuție la Ronua și despre acest aspect, mai degrabă orientat pe oameni și comunicare decât pe tehnologie, dar cel puțin la fel de important. Ei, ce spuneți? Când ne adunăm să povestim din experiența noastră pe acest subiect?

Am fost la Internetics

Friday, October 31st, 2008

Împreună cu Florin Toader şi Raul Andrişan, colegii mei care se ocupa de dezvoltarea unei soluții de reprezentare a informațiilor geomedia într-o hartă interactivă, am participat la Internetics - seminarul organizat de Microsoft, în secțiunea de studii de caz. Aplicația noastră folosește Silverlight 2 și Windows Communication Foundation - am început dezvoltarea la ea încă din versiunea Beta 1 a lui Silverlight 2. Pentru că e mai greu să o arătăm public, vom dezvolta un studiu de caz în care să avem și un filmuleț de prezentare a aplicației.

Workshop ASP.NET - Inscriere

Monday, October 27th, 2008

Intrebam pe blog-ul meu (http://hpc-consulting.ro/csb/blogs/mihai/archive/2008/10/22/workshop-asp-net-de-1-zi.aspx ) respectiv pe al lui Calin (http://calin-iepure.blogspot.com/2008/10/ce-zici-de-un-workshop-de-aspnet.html ) daca ar fi lumea interesata de un workshop de ASP.NET la Timisoara, organizat sub egida Ronua.

Avand in vedere ca au fost cateva raspunsuri pozitive, iata ca il si organizam :-). Detaliile aici:

  • Instructori. Eu si Calin Iepure. Amandoi avem experienta a cateva proiecte dezvoltate cu ASP.NET, respectiv amandoi ne implicam in comunitatea dezvoltatorilor de .NET prin RONUA.
  • Locatia. Timisoara, Bd. Republicii nr 9, etajul 3. Este "corpul R" pentru (fosti) studenti de la Poli; pe bulevardul care merge dinspre Opera catre Gara, chiar la intersectia cu pasajul de cale ferata.
  • Data si ora. 6 decembrie, orele 9-17. Stiu ca e de Mos Nicolae, dar atunci sigur pot sa il organizez :-).
  • Logistica. Aveti nevoie de laptop cu uneltele instalate. Ca unelte, vorbim de: Visual Web Developer Express 2008 (http://www.microsoft.com/express/vwd/ ; sau orice varianta superioara, dar sa fie 2008), SQL Server (Express e suficient, 2005 sau 2008: http://www.microsoft.com/express/sql/default.aspx), ASP.NET MVC Beta (http://www.asp.net/mvc/). Daca apar si alte cerinte, le voi posta aici, deci va rog urmariti blog-ul.
  • Inscriere. Incap 24 de persoane care sa aiba loc pe scaun si la masa :-). Din acest motiv, va fi nevoie sa va inscrieti - va rog cititi ultimul paragraf al acestui post pentru detalii.
  • Vom comanda si pizza + apa / suc (sponsorizare de la Microsoft Romania via Petru), asa ca nu va faceti probleme ca veti sta 8 ore fara combustibil :-).

Banuiesc ca va intereseaza si subiectele :-). Iata-le pe scurt:

  • Introducere in ASP.NET. Vom discuta despre unelte, tehnologii - pe larg.
  • Interfata in aplicatiile ASP.NET. Teme, master-pages, form-uri, controale, pastrarea starii.
  • ASP.NET MVC.
  • Lucrul cu baze de date din aplicatii ASP.NET.
  • Performanta, deployment.
  • Evident, dorim sa avem interactivitate cat mai mare. Deci putem devia de la plan daca aveti intrebari concrete, iar noi putem sa raspundem.

Audienta-tinta pentru noi este reprezentata de programatorii incepatori spre medii, macar din punctul de vedere al ASP.NET-ului. Daca ai 2 ani de experienta in PHP si deloc in ASP.NET - acest workshop este pentru tine; daca nu ai experienta web deloc, dar ai programat ceva la viata ta - de asemenea este pentru tine; chiar daca ai experienta a cateva luni de ASP.NET, tot vei avea de castigat in urma acestui workshop.

Inscriere. Va rog sa trimiteti un email la adresa mihai punct tataran at hpc-consulting punct ro cu subiectul [inscriere Workshop ASP.NET], care sa contina prenumele si numele vostru respectiv experienta voastra in programare web si ASP.NET. Descrieti-o liber, asa cum considerati voi, ideea e sa putem evalua in prealabil audienta pentru a calibra continutul. Pentru a folosi optim capacitatea salii, urmeaza sa facem o lista de 24 de persoane respectiv una de asteptare, apoi cu cateva zile inainte de Workshop voi trimite un email in care sa cer reconfirmarea. In cazul in care cineva din prima lista nu va reconfirma, locul ii va fi luat de primii din lista de asteptare.

Daca aveti intrebari, va rog pe email ca e mai direct.