Archive for 2009

Model aplicatie Silverlight, WCF, EF - screencast

Sunday, December 6th, 2009

Un client mi-a cerut să îi dezvolt un mic framework - nici măcar nu e un framework în sine – ci mai degrabă un model de soluție Visual Studio 2008 pentru o aplicație Silverlight, care să includă tehnologiile WCF pentru serviciu / Business Layer și Entity Fraamework pentru Data Layer, după cum urmează:

  • Un tabel User in baza de date:
        - Id 
        - Username (50, not null)
  • Model generat cu Entity Framework
  • WCF Service
  • Silverlight UI: un form cu validarea câmpului Username

Modelul conține deci un serviciu Windows Communication Foundation, cu un model Entity Framework mapat pe o bază de date cu o tabelă, respectiv un client Silverlight. Pentru partea de validare din interfață am folosit un proiect open source de pe Codeplex: http://silverlightvalidate.codeplex.com/.

M-am gândit că e bine să înregistrez toți pașii pe care îi fac, realizând până la urmă un screencast cu desktop-ul meu și sunet de la microfon. Screencast-ul poate fi luat de pe Skydrive.

Soluția Visual Studio cu un backup al bazei de date (MS SQL Server 2008) este aici, pe Skydrive.

Planificarea implementarii de Team Foundation Server (1)

Thursday, November 12th, 2009

E foarte posibil să începem din Ianuarie 2010 un proiect destul de mare ca să se justifice trecerea la unelte profesionale pentru tot ceea ce înseamnă managementul procesului de dezvoltare software. Stăteam zilele trecute și dezbăteam cam ce am folosi. Idei, sunt de tot felul, și încerc să le înșir mai jos.

Analiza cerințelor

În faza asta, de obicei există două tipuri de probleme:

1). Nu reușești să captezi corect cerințele. Ori sunt ambiguități, ori sunt conflicte – ele trebuie detectate cât mai rapid, pentru că mai târziu costă mult. Aici nu ajută prea mult uneltele, ci mai degrabă proceduri și un mod de lucru structurat, plus discuții multe cu clientul. Unii spuneau ca analiza cerințelor durează cam 20-30% din întreaga durată a dezvoltării produsului (sigur, împarțită pe toată perioada). Ceea ce sigur ne-a ajutat pe noi, a fost un curs de la Trilex, respectiv câteva cărți de la Microsoft Press, printre care ”Software Requirements, Second Edition”. Ca o paranteză, începem și noi ca firmă să înțelegem cu adevărat că e bine să cumperi un training sau o carte dacă vrei să înveți repede.

2). Întotdeauna când ecranele aplicației erau specificate de la început, am avut senzația că ne este clar la ce lucrăm. Chiar dacă nu poți la inceput să detaliezi 100% interfața, măcar prototipuri cu toate ecranele și navigările între acestea este obligatoriu să ai. Nu neapărat pentru tot proiectul, dar cel puțin pentru primul release.

Revenind la unelte, cochetăm cu BluePrint (http://www.blueprintsys.com/) sau CaseComplete (http://www.casecomplete.com/) pentru un management mai bun al cerințelor, respectiv cu Balsamiq (http://www.balsamiq.com/) pentru prototipuri. De asemenea, pentru estimarea și planificarea respectiv urmărirea task-urilor, Excel s-a dovedit o unealtă foarte utilă.

Colaborare

Prin colaborare înțeleg cel puțin 2 lucruri:

1). Management de proiect. Aici unelte sunt foarte multe, de la unele făcute custom (intern, foarte multe firme de soft am observat că au propriile unelte de tot felul – ceea ce mie mi se pare uneori o risipă de resurse), respectiv Excel, până la Team Foundation Server.

2). Integrare continuă. Adică să te asiguri că ce a lucrat azi fiecare dezvoltator nu strică nimic din ce e deja făcut. Și nu mă refer doar la a te asigura că nu face un ”check in” în sistemul de versionare care implică să nu compileze aplicațiile – dacă ai înca problema asta, nu are sens să povestim despre integrare continuă. Ci mă refer la a face zilnic un build la toată soluția, după care rulate toate testele (evident, totul să fie automat), și constatat că nu s-a stricat ceva făcut ieri sau de altcineva. Deci, aici cuvintele cheie sunt: daily build, automated build, unit testing, automated testing, source control.

În zona asta, unelte iar sunt multe: Ant, NAnt, MSBuild, Make – pentru build automat; SourceSafe :-), SVN, etc pentru source control; MSTest, nUnit pentru unit testing; respectiv putem ajunge la CruiseControl sau Team Foundation Server dacă trecem la nivelul superior.

Dezvoltarea propriu-zisă

În funcție de metodologia de lucru (dacă e agilă în special), trebuie acordată atenție la aspecte ca: code review / refactoring, pair programming, test – driven development, mocking, dependency injection, etc. În firma noastră deja folosim code review (cam puțin, e drept), dar vom începe să acordăm mai multă atenție la acest aspect cu tot cu refactoring, respectiv la pair programming (această metodă de lucru este foarte utilă inclusiv pentru creșterea rapidă a nivelului programatorilor mai tineri, iar noi avem intern un document care scrie ce trebuie să știe un programator la H.P.C. Consulting). De asemenea, folosim uneori și de acum vom folosi mai des (în special în proiectele în care merită dpdv al dimensiunii) Unit Testing, dar nu TDD.

Ca unelte, Unity http://www.codeplex.com/unity, RhinoMocks http://www.ayende.com/projects/rhino-mocks.aspx, MSTest, nUnit, Resharper (sau Visual Studio pentru refactoring).

Scriu aceste rânduri după ce am văzut la TechEd câteva prezentări / workshop-uri despre Team Foundation Server 2010. Acum 10 zile aveam o discuție cu un client, care ne spunea că ar fi bine să trecem la TFS iar eu eram foarte sceptic din două motive: unealta mi se părea complicată – aspect ameliorat mult acum după ce am vazut la Berlin, respectiv faptul că o unealtă de acest gen nu are sens decât dacă vine peste o serie de proceduri / mod de lucru bine structurate în echipa de dezvoltare. Cu acest al doilea aspect încă mai avem de lucru, dar voi insista foarte tare în următoarea perioadă pentru a ajunge la nivelul de maturitate în care TFS să aibă sens, și să ajute, să îmbunătățească ceea ce noi facem deja.

Legat de proceduri / mod de lucru structurat, am reușit până acum să avem câte ceva, chiar dacă - dupa cum spuneam – mai avem de lucru:

  • procedură de release. Scrisă, cu un checklist care se listează la imprimantă și se semnează de cel care face release-ul.
  • document care descrie procesul de dezvoltare. Va fi modificat, odată cu trecerea la TFS – dar ideea e că avem ceva în acest moment.
  • document de Change Request – util atunci când clientul modifică cerințe care au fost deja estimate și asupra cărora s-a căzut de acord.
  • document care specifică în detaliu ce trebuie să știe un programator de la H.P.C. Consulting, și în cât timp, și cine îl ajută să învețe.

Voi reveni în perioada următoare, pe măsură ce reușim să avansăm cu implementarea de TFS.

TechEd Europe 2009

Tuesday, November 10th, 2009

Sunt și eu la Berlin. TechEd-ul de anul acesta a anunțat câteva lucruri interesante:

  • Achiziția Teamprise. Adică, niște add-in-uri de Eclipse (și toate sculele bazate pe Eclipse) pentru Team Foundation Server. Mișcare deșteaptă, dacă ținem cont exact ce unelte de dezvoltare (și de la ce firme :-) ) sunt bazate pe Eclipse.
  • Lansarea Exchange Server 2010.
  • CTP-ul de SQL Server 2008 R2.
  • Evident, discuții despre cloud computing, mai exact Azure. Dacă anul trecut la TechEd se vorbea foarte abstract despre acest subiect, acum s-au prezentat chestiuni mult mai practice: exemple de aplicații, scenarii posibile, etc.
    Eu personal sunt interesat anul acesta de subiecte ca: Team Foundation Server, Agile, Scrum (vreau să implementăm la noi TFS și încă nu mi-e clară metodologia pe care o să mergem). Din fericire, sunt destule sesiuni și destui oameni deștepți pe aceste subiecte, așa că probabil voi pleca de aici lămurit.
    Am apucat azi să pun mâna și pe ceva tehnologie, și am rămas plăcut impresionat de o evoluție pe partea de ASP.NET / Ajax: Ajax Navigators respectiv Ajax Connectivity. Sunt 2 idei interesante, dar din păcate dacă am înțeles bine nu funcționează decât în IE8.

Închid, că mi-e foame și sete de o bere.

Live Meeting-uri XamlCentral

Wednesday, October 21st, 2009

Colegii de la XamlCentral au înregistrat câteva LiveMeeting-uri săptămâna trecută:

  1. Introducere în RIA Services
  2. Databinding, Dependency Properties, Routed Events

Pentru compatibilitate 100%, deschideți link-urile cu IE (la fel și pentru prezentarea mea anunțată aici).

Inregistrare Live Meeting – Performanta cu Entity Framework

Tuesday, October 20th, 2009

Înregistrarea prezentării din data de 12 octombrie poate fi vizualizată de pe site-ul curent, aici.

Live Meeting – Performanta in Entity Framework

Monday, October 5th, 2009

Întâlnirea de azi (http://www.hpc-consulting.ro/index.php/2009/09/30/performanta-in-entity-framework-live-meeting/) s-a reprogamat pentru săptămâna viitoare (12 octombrie, de la ora 17.00). Link-ul unde poate fi accesată întâlnirea este acesta: https://www.livemeeting.com/cc/mvp_no_voip/join?id=4C4M9M&role=attend&pw=z%23zZ%7E74%2Bj .

Timisoara Agile Software Meetup

Monday, October 5th, 2009

Sâmbătă, 17 octombrie 2009, începând cu ora 15.00 va avea loc o întâlnire pe tema dezvoltării Agile, organizată de Maria Diaconu, Certified SCRUM Master. Mai multe detalii aici: http://www.agileworks.ro/timisoara-agile-scrum-more/ .

Curs ASP.NET – resurse

Friday, October 2nd, 2009

Aici pot fi găsite resursele folosite în timpul cursului de 3 zile organizat de Codecamp prin Mihai Tătăran: http://cid-058f9d4d139fdb21.skydrive.live.com/self.aspx/.Public/CodeCamp%20ASP.NET%20Curs%20sept%202009.zip .

Integrarea tehnologiilor noi in arhitecturi de aplicatii web (Entity Framework, Ajax 4.0)

Thursday, October 1st, 2009

Un nou Live Meeting, în data de 12 Octombrie cu începere de la ora 16.00 și până pe la 17.00.

Pentru participare, accesați acest link: https://www.livemeeting.com/cc/mvp_no_voip/join?id=S5C7ZB&role=attend&pw=Gk%22xJ5RnD .

Performanta in Entity Framework – Live Meeting

Wednesday, September 30th, 2009

Luni, 5 octombrie, de la ora 16.00 voi discuta timp de vreo 60 de minute despre optimizări legate de performanță în aplicații cu ADO.NET Entity Framework.

Voi reveni aici cu link-ul la care va putea fi accesată întâlnirea online, doar am anunțat acum rapid ca să știe lumea din timp :-).

Link-ul pentru acces la prezentare este acesta: https://www.livemeeting.com/cc/mvp_no_voip/join?id=7SB3Q6&role=attend&pw=WG%23Dq262c .