[ View menu ]

1 July 2008

Un gandac in Windows Home Server

Filed in DDK , Debugging , Internals

Lucram in perioada aceasta la un proiect ce implica un driver care creeaza discuri virtuale. Continutul discului virtual este stocat intr-un fisier, iar sarcina driver-ului este de a prezenta continutul acestui fisier ca un disc.

Testand driver-ul pe Windows Home Server cu Driver Verifier activat, sistemul s-a blocat dupa formatarea discului, afisand un binecunoscut ecran albastru.

Bug Windows Home Server

Pentru a identifica sursa erorii, am recreat conditiile aparitiei bug-ului cu debugger-ul (WinDbg) atasat la sistemul de operare.

Analizand crash-ul cu ajutorul lui WinDbg, am observat urmatorul mesaj:

kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************
DRIVER_VERIFIER_IOMANAGER_VIOLATION (c9)
The IO manager has caught a misbehaving driver.
Arguments:
Arg1: 0000000c, Invalid IOSB in IRP at APC IopCompleteRequest (appears to be on
 stack that was unwound)
Arg2: b9b02810, IOSB address
Arg3: 00000000, IRP address
Arg4: 00000000, 0

Mai mult, analiza spunea ca driver-ul care a cauzat eroarea este chiar driver-ul nostru (MYDRIVER).

BUGCHECK_STR:  0xc9_c
DRIVER_VERIFIER_IO_VIOLATION_TYPE:  c
IOSB_ADDRESS: ffffffffb9b02810
IRP_ADDRESS:  82f5af20
DEFAULT_BUCKET_ID:  DRIVER_FAULT
PROCESS_NAME:  explorer.exe
CURRENT_IRQL:  1
DEVICE_OBJECT: 8186f030
DRIVER_OBJECT: 8179a158
IMAGE_NAME:  MYDRIVER.sys
DEBUG_FLR_IMAGE_TIMESTAMP:  48693683
MODULE_NAME: MYDRIVER
FAULTING_MODULE: b9878000 MYDRIVER

Aveam toate motivele sa credem ca avem un bug in driver, deci am pornit la vanatoare.

Continue reading Un gandac in Windows Home Server

27 June 2008

Dezvoltare software in Facultatea de Matematica si Informatica

Filed in Facultate

Inspirat si dezamagit in acelasi timp de ceea ce spune Vlad aici si aici, mi-am adus aminte ce mi-a fost predat in facultate legat de dezvoltare software, intr-un curs dedicat acestui subiect. In acelasi timp mi-am pus intrebarea cum se poate ca in aceeasi facultate, la aceeasi materie, doi profesori sa aiba cursuri total diferite.

Iata si dilema mea:

Varianta 1 de curs de Dezvoltare Software predat la Facultatea de Matematica si Informatica, Universitatea Bucuresti:

http://funinf.cs.unibuc.ro/~vec/flp.htm

Varianta 2 de curs de Dezvoltare Software predat la aceeasi facultate, de catre alt domn profesor:

http://www.cs.unibuc.ro/~radu/rg_MDS_I_II_prog.html

Observati vreo diferenta intre ele? Daca va intrebati, eu am avut (ne)placerea de a studia prima varianta. Desi titlul de pe pagina primului curs (Fundamentele limbajelor de programare) nu duce cu gandul la dezvoltare software, aceea este materia care a fost predata intr-un curs cu numele “Dezvoltare software”. Pentru cei curiosi, in prima varianta este vorba despre un singur curs predat de catre acelasi profesor sub mai multe denumiri, pe parcursul anilor de facultate. Morala: mai multe denumiri, mai multe sanse de castig.

Din pacate, cel care are cel mai putin de castigat de aici este studentul. Trecand prin cursul mentionat in prima varianta un student se poate demotiva foarte usor, pierzandu-si astfel interesul pentru subiectele predate in facultate.

Mai trist este faptul ca am exemple de colegi foarte buni si pasionati de software, cu realizari importante, a caror foaie matricola contine nota 5 la subiectul Dezvoltare Software (studiat in varianta 1). Am inca un motiv in plus pentru a realiza ca nota si-a pierdut semnificatia in scoala romaneasca.

22 June 2008

Ce cred ca ar mai trebui predat in liceu/facultate

Filed in Facultate , Software , Tips

In liceu si in facultate am intalnit profesori care predau informatica intr-un mod specific matematicii. Aproape la fiecare problema in liceu aparea un tipar: numarul de elemente dintr-un vector era notat cu m sau n, variabila cu care parcurgeam ciclul era i sau j sau k s.a.m.d. Asa te apucai si scriai algoritmul.

Scurt si cuprinzator?

Apoi il citeai si incercai sa intelegi ce ai scris acolo, sa-ti explici cum functioneaza algoritmul si, eventual, de ce ai scris asa si nu altfel. In momentul respectiv, creierul facea un pas in plus: descifrarea a ce inseamna n, ce inseamna i sau k. Poate nu pare mare lucru sa tii minte trei nume de variabile si sensul atasat fiecaruia, dar cand te apuci sa scrii o expresie care le foloseste pe toate trei in acelasi timp, lucrurile parca se complica putin.

M-am uitat de curiozitate pe arhiva educationala de pe infoarena, o initiativa de apreciat de altfel, ce pune la dispozitia vizitatorilor site-ului o serie de probleme pe care aproape orice elev/student le intalneste in scoala. Un lucru care mi-a placut mai putin si pe care il faceam si eu in liceu este economia de litere cand vine vorba de numele variabilelor. Este parca o obsesie generala aceea de a folosi o singura litera pentru numele unei variabile, eventual sa-i mai punem si o cifra in coada in cazurile in care alfabetul nu ne poate oferi mai multe litere.

As vrea ca atunci cand citesc un algoritm sa il citesc natural, sa nu stau la fiecare linie sa-mi spun: “a…este q, si q este notatia pentru… deci…”. Am cautat sa vad de unde vine “zgarcenia” cu care suntem invatati in scoala. Da, scoala ne ofera acest model si ne da impresia ca este “modul corect” de a face lucrurile. Cel putin asa a fost in cazul meu.

Originea zgarceniei

Banuiesc ca originea zgarceniei se gaseste in relatia cu matematica. In problemele de matematica notam cu x,y,z etc. toate variabilele de care avem nevoie si lucrurile chiar merg bine acolo. De ce acolo merg si aici nu? Cred ca in “implementarea” solutiilor problemelor de matematica avem in medie mai putine “instructiuni” si “variabile” pe foaie/caiet decat in cazul problemelor de informatica. Cate rezolvari de probleme de matematica de sute sau mii de “linii de cod” ati vazut? Eu niciuna. Tin minte ca in gimnaziu, cand aveam la matematica o problema a carei rezolvare depasea doua table, apareau dificultati in a intelege de fapt care era valoarea unei “variabile”, ce reprezenta ea si unde a fost “modificata” ultima data.

De aici trag concluzia ca informatica nu se mananca in acelasi fel ca si matematica. Profesorii de informatica ar trebui sa tina cont si de lucruri ce tin de modul de scriere al codului. Aceste lucruri le-ar fi folositoare elevilor/studentilor in timpul concursurilor, cand isi recitesc algoritmul, si mai tarziu in cariera de dezvoltatori software. Si asta nu numai la clasa, ci si in toate rezolvarile pe care le propun pentru o culegere de probleme sau pentru un site gen infoarena.

In toti anii de scoala (atat in liceu cat si in facultate) nu am intalnit niciun profesor care sa scrie cod zilnic sau frecvent. Poate de aici rezulta si ignoranta pentru felul in care codul este scris.

Cum ne vindecam de zgarcenie

De ce e important sa scriem cod usor de citit? Jeff Atwood da un raspuns:

If you ask a software developer what they spend their time doing, they’ll tell you that they spend most of their time writing code.

However, if you actually observe what software developers spend their time doing, you’ll find that they spend most of their time trying to understand code.

Joel Spolsky spune concis:

It’s harder to read code than to write it.

Cred ca este datoria fiecarui dezvoltator software sa-si imbunatateasca permanent modul in care scrie cod. Usureaza in primul rand munca sa si, in al doilea rand, pe cea a celor care vor fi nevoiti sa-I citeasca liniile de cod.

O resursa foarte buna pentru vindecarea “zgarceniei” o reprezinta cartea Code Complete, 2nd Edition a lui Steve McConnell, in principal capitolele 31 (Layout and Style), 32 (Self-Documenting Code) si 34 (Themes in Software Craftmanship).

“Write Programs for People First, Computers Second”

In cazul unui proiect cum este arhiva educationala a infoarena este cu atat mai important ca solutiile problemelor sa fie prezentate intr-o maniera cat mai usor de inteles. Principalul scop al unui cititor este sa inteleaga solutia/algoritmul, nu sa piarda timp descifrand codul “destept” sau “concis” al unei solutii.

Scriind cod mai concis, economisesc timp pretios pentru implementarea solutiei

Acest mit ia nastere mai ales in cazul concursurilor de programare, unde viteza de rezolvare a unei probleme este esentiala pentru reusita. Aceasta “economisire” de timp induce de fapt mai multe penalizari de timp in momentul citirii codului.

Steve McConnell:

Making code readable is not an optional part of the development process, and favoring write-time convenience over read-time convenience is a false economy. You should go to the effort of writing good code, which you can do once, rather than the effort of reading bad code, which you’d have to do again and again.

Dar daca scriu cod numai pentru mine? Nu conteaza cum il scriu, oricum nu-l citesc decat eu.

Steve McConnell avertizeaza si in privinta acestei capcane:

The idea of writing unreadable code because you’re the only person working on a project sets a dangerous precedent. Your mother used to say, “What if your face froze in that expression?” And your dad used to say, “You play how you practice.” Habits affect all your work; you can’t turn them on and off at will, so be sure that what you’re doing is something you want to become a habit. A professional programmer writes readable code, period.

Liceul si facultatea reprezinta perioada in care se formeaza primele obieciuri de programare. Recent am fost neplacut surprins sa vad o lucrare (dealtfel foarte buna) la un concurs de software pentru elevi si studenti, scrisa de un student in anul I, cu experienta declarata de 7 ani de progamare, care pentru citirea propriului format din fisier folosea numai variabile denumite in genul i1…in. Codul respectiv arata foarte “egoist”, scris parca doar pentru autorul lucrarii,  fara sa ia in calcul posibilitatea ca cineva sa foloseasca acel cod vreodata.

Chiar daca momentan mi se pare fantezista ideea de a vedea pe vreunul din fostii mei profesori (din liceu sau facultate) urmand sfaturile de mai sus, as fi fost mai mult decat incantat daca as fi invatat cum sa scriu cod de la ei. Probabil ca pentru a te lovi de aceste lucruri trebuie sa fi scris software mai intai.

27 May 2008

Despre concursurile de software

Filed in Uncategorized

La sfarsitul saptamanii trecute am participat impreuna cu Razvan la concursul Infomatrix 2008 in calitate de membri al juriului la categoria Programming. Infomatrix este un concurs de aplicatii software si harware pentru elevi de liceu, aflat la a 6-a editie. Incepand de anul trecut, concursul este adresat si studentilor. Personal sunt un fan al acestui tip de concursuri si consider ca fara ele am avea mai putini elevi interesati de programare.

Prima data am aflat de un concurs de acest gen cand eram in liceu, in clasa a 9-a, cu 3 zile inainte de organizarea unei “sesiuni de comunicari pentru elevi” asa cum se numea pe atunci. Am aflat mai apoi ca era vorba despre faza judeteana a unui concurs national de software - NoiInfo - ce urma sa se desfasoare la Timisoara. M-am apucat impreuna cu Razvan sa lucram la o aplicatie si n-am dormit noptile pana la concurs, de frica lipsei de timp. Ne-am dus cu programul pe o discheta, ne-am calificat mai departe. Am plecat la Timisoara cu mare entuziasm si ne-am intors cu o mare dezamagire. Am avut prezentarea programata pe la 8 seara, cand juriul ne-a incurajat inainte de a incepe: “daca ati putea sa terminati mai repede, v-am fi recunoscatori”. Totul nu a durat mai mult de 5 minute, deoarece juriul probabil era cu gandul mai mult la cina decat la aplicatia noastra.

Ne-am intrebat daca nu cumva am avut asteptari prea mari de la juriu. Prezentasem o aplicatie client-server prin care un calculator se putea controla de la distanta de la un alt calculator. In juriu erau 2 studenti si 2-3 profesori. Daca de la profesori multi participanti nu se asteapta de obicei sa primeasca intrebari prea tehnice (desi cunoastem exceptii notabile), de la cei doi studenti ne asteptam la mai multe cunostinte si mai multe intrebari. Ne asteptam sa ne intrebe cum facem transferul capturilor de ecran, cum compresam fisierele transferate, cate resurse de calcul necesita.. Nu am primit nicio intrebare tehnica. Am primit numai doua intrebari din partea juriului, grabiti spre masa de seara, dupa care prezentarea s-a terminat. Mai mult, desi in formularul de inscriere indicasem nevoia a doua calculatoare legate in retea pentru o prezentare optima, am fost nevoiti sa prezentam aplicatia pe un singur calculator.

In clasamentul final am iesit pe ultimele locuri. Dezamagiti, dar dornici de a obtine sugestii de imbunatatire, i-am abordat pe cei doi studenti. Dupa ce i-am intrebat cum am putea sa ne imbunatatim proiectul a urmat o pauza de cateva secunde, dupa care ne-au raspuns: “mai cititi pe acolo prin MSDN cum se poate face mai bine”.

Urmatorul concurs la care am participat a fost faza nationala a InfoEducatie, un concurs care va ajunge anul acesta la a 14-a editie. InfoEducatie este primul si cel mai longeviv concurs de acest gen din Romania. La prima participare am aflat de un nou concept: intrebarile din public. Daca la NoiInfo intrebarile veneau numai din partea juriului, la InfoEducatie intrebarile pot veni din partea tuturor celor prezenti la prezentare. In opinia noastra, acesta este unul din punctele forte ale concursului. Un alt concept de care am aflat la InfoEducatie, a fost acela de copiere a lucrarilor. Am asistat la prezentarea unui baiat de clasa a 7-a care genera executabile pentru self-extract de imagini. Curios fiind de modul de generare a executabilului, l-am rugat sa ne arate codul sursa, pentru a vedea ca nu era scris de el, desi sustinea contrariul.

Povestioara de mai sus ne-a lasat la momentul respectiv un gust amar, calitatea juriului si onestitatea participantilor fiind in opinia noastra cele mai sensibile aspecte ale concursurilor de software de pe la noi. Deoarece ca particpanti ne-am lovit de multe ori de aceste aspecte, am considerat mai tarziu necesara implicarea in astfel de concursuri pentru a incerca sa schimbam ceva.

Desi am participat in juriu la mai multe concursuri de acest gen, observam ca vechile practici ale concurentilor raman neschimbate. Exista printre anumiti participanti mentalitatea ca juriul nu are competenta tehnica pentru a evalua lucrarile si astfel se incearca exploatarea acestei ipoteze. La toate concursurile unde am fost membri ai juriului s-a intamplat sa gasim, din pacate, cel putin o lucrare copiata. Cel mai rau este atunci cand astfel de lucrari iau premii si medalii, asa cum am vazut ca a fost cazul la cateva concursuri.

Ca sa nu fim intelesi gresit, este absolut OK sa se foloseasca cod existent, pentru ca nu vrem mereu sa reinventam roata, atata timp cat acest lucru este specificat si se delimiteaza contributia personala a participantului.

Personal am privit concursurile de software ca pe un mod de dezvoltare personala si profesionala, incepand de la cunostintele de programare si terminand cu abilitatile de prezentare in fata unei audiente largi si intr-un timp limitat. Am dobandit multe cunostinte tehnice lucrand la proiecte pe care le-am prezentat la InfoEducatie, privind an de an concursul si competitia ca pe o sansa de a inova sau cel putin de a acumula noi cunostinte.

Este trist faptul ca singurul castig pe care il vad unii participanti este cel material. Din pacate, acesta este unul pe termen scurt.  Multe din proiectele realizate sunt “pentru a lua premiu” si nu pentru a rezolva o nevoie existenta sau pentru acumularea de cunostinte. De asemenea, multi dintre participanti doresc un castig rapid cu un efort minim, timpul alocat dezvoltarii proiectelor fiind tot mai mic. Fenomenul este similar cu cel din mediul online, unde multi viseaza sa faca peste noapte urmatorul YouTube sau Facebook fara prea mult efort.

Exista totusi si exceptii, asa cum este infoarena, un proiect prezentat pentru prima oara in 2003 la InfoEducatie si dezvoltat ulterior in cea mai puternica comunitate online romaneasca pentru cei interesati de algoritmica.

In momentul de fata, firmele se plang ca nu gasesc absolventi bine pregatiti, iar un raport recent spune ca elevii romani sunt tot mai slab pregatiti. Oare daca am incuraja si sprijini mai mult concursurile de creatie software precum InfoEducatie, CIA si InfoMatrix (la liceu) si ImagineCup (pentru facultate), situatia ar fi diferita?

24 February 2008

Un Microsoft mai binevoitor

Filed in Stiri , Tips , Vista

De cate ori nu v-ati frustrat cautand sa intelegeti cum functioneaza ceva nedocumentat din Windows? Probabil era o informatie de care aveati nevoie pentru a dezvolta un proiect sau o facilitate, sau pentru a da de urma unui bug urat.

Stim cu totii ca Windows este un sistem de operare closed-source si nu avem libertatea de a-i examina codul sursa pentru a ne rezolva problemele. Totusi, Microsoft a avut initiative menite sa rezolve intr-o anumita masura aceasta problema. Pentru studenti, o foarte buna resursa o reprezinta Windows Academic Program, mai ales prin WRK.

Cu toate acestea, accesul la codul sursa nu poate rezolva eficient problema interoperabilitatii. Pentru ca un client Linux sa partajeze fisiere intre el si un client Windows, a fost nevoie de reverse engineering pentru a “ghici” protocolul de comunicare folosit intre clientii Windows (SMB), rezultand astfel Samba.

In Vista a fost introdusa versiunea 2.0 a protocolului SMB. Detaliile noii versiuni a protocolului nu au fost facute publice. Singura solutie pentru membrii proiectului Samba era sa apeleze din nou la reverse engineering. Cu o structura a pachetelor total diferita de vechiul SMB, SMB2 anunta o munca asidua pentru asigurarea interoperabilitatii cu clientii Vista. Analizand implementarea SMB2 din versiuni beta ale Windows Vista, echipa din spatele Samba a reusit sa ofere suport experimental pentru SMB2 in versiunea 4.0.0TP3, lansata pe 13 Octombrie 2006.

O stire din 22 decembrie 2007 spunea ca Samba a semnat un acord cu Microsoft prin care dezvoltatorii Samba primeau acces la specificatiile protocolului SMB2. Pentru a putea accesa documentele Samba a platit 10,000€. Totusi, cu o floare (una costisitoare) nu se face primavara in problema interoperabilitatii. Cum ramane cu restul protocoalelor de comunicatie care sunt necesare pentru a asigura interoperabilitatea?

Un comunicat de presa din 21 februarie prezinta o impresionanta schimbare de strategie pentru Microsoft, prin Open Protocol Specifications care ofera access la specificatiile protocoalelor folosite in versiunile client si server ale sistemului de operare Windows. Specificatiile pot fi folosite pentru a dezvolta si distribui implementari non-comerciale ale protocoalelor documentate.

Dezvoltatorii proiectului Samba sunt cu siguranta bucurosi sa citeasca specificatia protocolui SMB2 in forma aceasta, decat sa piarda timpul analizand pachete.

23 January 2008

Unde e informatia?

Filed in Software , Tips

Ca multi altii, folosesc mult Internet-ul pentru documentare si de multe ori imi salvez fisiere Word, PowerPoint sau PDF-uri pentru a ma uita mai tarziu peste ele. De multe ori, raman acolo unde le-am lasat deoarece nu am acces rapid la informatia din ele. Problema asta cred ca apare din cauza ca nu pot cauta usor in ele. Probabil primul sfat pe care mi l-ar da cineva ar fi acela de a-mi instala o solutie de Desktop Search, caci am de unde alege (Copernic, Google, Microsoft etc.). Dar ce ma fac daca vreau sa caut informatia de pe mai multe calculatoare si sa vad rezultatul cautarii unificat?

Am tot cautat pe Internet o solutie si am ajuns la conceptul de enterprise search. Am vazut ca de fapt problema mea e una pe care multe organizatii au avut-o cu mult timp inainte sa o am si eu. Normal, au aparut si solutii la problema asta. Din pacate, nu s-au dovedit foarte accesibile pentru mine deoarece aveau costuri ce puteau fi acoperite doar de catre organizatii si nu de catre un individ (cateva zeci de mii de dolari). Din fericire pentru mine, am gasit o solutie, surprinzator, de la Microsoft: Search Server 2008 Express. Am observat ca e un produs relativ nou: daca as fi avut problema asta acum 6 luni, nu dadeam peste el.

Search Server 2008

Am zis sa-l testez si sa vad ce stie. Aveam nevoie de un server cu Windows pentru a-l instala, dar nu aveam timpul necesar pentru a-l instala. Noroc ca am gasit la ei pe site o masina virtuala cu Windows Server 2003, tocmai buna pentru descarcare. Am descarcat-o si am instalat Search Server 2008 Express pe ea. Instalarea a durat cateva minute (click-uri) si apoi am configurat Search Server-ul sa ia datele de pe anumite share-uri din retea unde aveam multe documente.

Search Server are o interfata gen SharePoint, deci pentru cei care lucreaza cu asa ceva va fi o experienta familiara. La mine nu a fost deoarece nu sunt un fan SharePoint, dar am avut un document Word pe masina virtuala care mi-a explicat ce sa fac pas cu pas si totul a mers foarte usor.

Dupa putin timp am accesat din browser, de pe alt calculator din retea, masina virtuala pe care aveam Search Server-ul instalat. Am dat apoi o cautare dupa un termen si mi-au aparut imediat toate documentele in care se regasea. Fiecare rezultat imi arata numele documentului, locatia si contextul in care se gasea termenul, exact ca atunci cand caut pe Google.

Credeti ca e limitat doar la documente in formate Microsoft? De asta m-am temut si eu. Ceea ce e interesant e ca poti instala iFilters, componente care-ti permit sa adaugi suport pentru orice format de fisier dorit (eu am adaugat pentru PDF).

Partea buna este ca pe server se face doar indexarea, nu trebuie sa-ti copiezi datele pe server. Datele pot ramane in locatia lor originala atata timp cat server-ul le poate accesa. Poti sa-l setezi ca periodic sa faca actualizarea indexului (ex: la 20 de minute) .

Varianta Express pe care am testat-o eu este in stadiu beta, dar se spune ca o varianta finala va fi disponibila in prima parte a lui 2008 impreuna cu varianta pe bani.

Pe langa toate avantajele legate de productivitate, ce mi s-a parut cel mai tare la solutia asta este faptul ca e… FREE! Nu trebuie sa dau vreun ban pe ea. Bineinteles, exista costul pentru sistemul de operare pe server, dar cat timp sunt student asta e rezolvat prin programul MSDNAA. Mai incolo… vom vedea.

M-am gandit la un moment dat sa-mi pun si codul sursa la indexare pentru a cauta mai usor prin el, dar inca ma mai gandesc daca/cum sa o fac. Pentru asta am gasit o solutie de la Koders: Koders Pro Edition. E o solutie pe bani si inca nu am avut timp sa o testez, dar voi reveni cu un post cand o voi testa. Ce mi s-a parut interesant e posibilitatea de a cauta prin tot codul tau ca pe Google. Mai mult, poti da click pe un token dintr-un fisier sursa pentru a cauta ce mai poti afla despre el de prin fisierele tale sursa.

Stiti voi alta solutie pentru indexat cod sursa si cautare din browser?

22 January 2008

Facultate: fac sau nu fac? Unde? La ce sa ma astept?

Filed in Facultate

Malex intreba aici ce sfaturi avem pentru un proaspat absolvent de liceu care se gandeste sa dea la facultate. Am fi putut raspunde cu un singur comentariu, dar am considerat posibilitatea ca aceasta perspectiva sa-i ajute si pe altii asa ca am dedicat un post. Inainte de a incepe, mentionez ca aceasta este doar o parere personala.

Sfatul meu e sa te duci la o facultate mai lejera si sa inveti singur. Altfel risti sa-ti mananci timpul cu stresuri inutile, timp pe care altfel l-ai folosi pentru a invata. Personal, in Bucuresti, am gasit cea mai buna combinatie intre subiectele abordate si timpul liber la Facultatea de Matematica si Informatica de la Universitate. Bineinteles, acest lucru il poti gasi si in alta parte in functie de cat timp decizi tu sa aloci pentru facultate si cat de mult te intereseaza notele.

Facultatea e buna in sensul ca-ti ofera un context din care sa afli ca anumite lucruri/concepte exista. Ca sa-ti dau un exemplu concret, nu cred ca m-as fi apucat prea repede sa citesc despre limbaje formale si sa aflu cat de utile sunt daca nu as fi trecut prin facultate. Dar, de cele mai multe ori facultatea nu te ajuta cu mai mult deoarece am intalnit multe cursuri de tip dictare in care esti fortat sa-ti testezi viteza cu care te tii cu scrisul dupa profesor.

Oricum asta nu trebuie sa te opreasca pentru ca experienta din facultatile romanesti ne arata ca tot pe cont propriu se invata cel mai bine. Dictarea nu numai ca-ti omoara interesul si te face sa te intrebi de ce te mai duci la curs cand poti face altceva in timpul respectiv, dar nici nu-ti da vreo motivare legata de “de ce ar trebui sa fiu eu interesat de aceste lucruri? unde le pot aplica?”. Personal nu-mi place sa invat doar de dragul teoriei. Vreau sa stiu ca pot aplica acele lucruri, ca pot construi ceva pe baza lor. Gasirea raspunsurilor la aceste intrebari depinde din nou de tine si e important ca ea sa existe la fiecare curs pe care il vei face in facultate.

O abordare intalnita in afara si care cred ca ar da roade si la noi este urmatoarea: profesorul sa ofere o bibliografie si la sfarsitul fiecarui curs sa mentioneze paginile care trebuiesc citite dintr-o anumita referinta pentru a pune studentul in tema cu subiectul predat la cursul urmator. In majoritatea cazurilor acest lucru nu se intampla la noi, asa ca la cursul urmator profesorul are tendinta de a trece rapid peste anumite lucruri pentru ca le-a tot predat de-a lungul anilor si i se par banale. Studentul pe de alta parte intalneste acele lucruri poate prima data si de cele mai multe ori se chinuie mai mult sa scrie repede de pe tabla dupa profesor, ajungand numai la intrebari de genul: “auzi, ce e ala pe tabla? e i sau j?”

Legat de ce trebuie sa inveti, te sfatuiesc sa incerci sa abordezi cat mai multe subiecte si tehnologii, pentru ca doar asa vei descoperi cu adevarat la ce fel de lucruri vrei sa lucrezi si pe ce ai vrea sa te axezi pe viitor. Dintre cursurile foarte importante, le-as mentiona pe cele de sisteme de operare, limbaje formale/compilatoare, programarea paralela si concurenta, programarea orientata pe obiect si arhitectura calculatoarelor. Acestea sunt primele care imi vin in minte, dar se poate sa fi scapat altele.

Nu spun ca vei scrie obligatoriu propriul tau compilator sau sistem de operare, ca iti vei construi propriul procesor, dar trecand prin aceste cursuri iti vei modela gandirea si modul de abordare a problemelor pe care le vei intalni pe viitor. Daca tehnologiile se tot schimba, conceptele care stau la baza lor raman aceleasi. Iar legat de limbaje, cum am spus-o si mai demult, consider ca limbajul este doar o unealta.

Nu-ti spun sa renunti la facultate. Dimpotriva, chiar te incurajez sa o urmezi. Chiar daca nu e evident la fiecare curs ce anume iti va folosi pentru viitor, nu renunta rapid cu un raspuns de genul: “asta e materie invechita”, ci cauta mai intai sa te interesezi tu daca chiar asa e sau nu. Nu te baza pe profesor sa-ti spuna asta.

Nu vreau sa privesti aceste sfaturi ca pe un atac la adresa profesorilor. Am intalnit in facultate si profesori care au reusit sa-mi starneasca interesul pentru o anumita materie, dar numarul lor a fost mult prea mic daca stau sa privesc situatia per ansamblu. Asadar, nu pot sa-i privesc decat ca pe exceptii.

In concluzie, ia din facultate ce e bun (informarea despre existenta anumitor lucruri/concepte) si incearca sa ignori lucrurile mai putin bune (atitudinea multor profesori). Scopul final nu e sa-i faci profesorului pe plac, ci sa te dezvolti pe plan profesional.

Succes in alegerea viitorului!

Documentatia pentru dezvoltatorii de drivere vine lunar

Filed in DDK

Windows Driver Kit Documentation

Am observat de ceva timp o initiativa laudabila a celor de la Microsoft : actualizari lunare pentru documentatia din Windows Driver Kit. Pana acum ceva timp, trebuia sa astepti un nou release de DDK (sau WDK cum se numeste mai nou) pentru a putea obtine documentatia actualizata. Bineinteles ca actualizarile apareau prima oara pe MSDN online, dar prefer sa am acces rapid la documentatie chiar si cand Internet-ul nu merge cum trebuie.

Ultima actualizare e de acum cateva zile si aduce noutati legate de Windows Server 2008. Deja exista un nou WDK pentru Windows Server 2008, dar acesta este momentan doar in varianta beta si nu este recomandat pentru dezvoltarea driverelor folosite in productie.

Ca un exemplu de informatii noi, in ultima documentatie puteti gasi primele informatii legate de sistemul de fisiere tranzactional (TxF) din Vista si managerul de tranzactii din kernel (KTM - Kernel Transaction Manager).

Asadar, daca dezvoltati drivere sau alte aplicatii care au legatura cu programarea kernel-mode, puteti cauta lunar noi actualizari pentru documentatia din Windows Driver Kit aici.

17 October 2007

Doua concursuri

Filed in Uncategorized

Cei pasionati de programare ar trebui sa fie ocupati in perioada aceasta. Gadget Competition si Studentul Anului sunt doua concursuri care mie mi se par cel putin interesante.

gadget_competition.jpg

Gadget Competition presupune realizarea unui gadget pentru sidebar-ul din Vista. Beneficii: multumirea voastra personala ca ati realizat ceva util pentru altii si posibilitatea de a castiga multe premii interesante (televizor LCD, XBox etc.). Pentru a vedea mai multe informatii, inclusiv cum sa incepeti dezvoltarea unui gadget, intrati pe www.gadgetcompetition.ro.

studan.jpg

Studentul Anului este un proiect care premiaza in fiecare an cei mai buni studenti din mai multe domenii. Incepand cu anul trecut una dintre categoriile concursului este IT-ul. Concursul presupune realizarea unei aplicatii de criptare si compresie pentru Windows. Aplicatia se va integra in sistem ca o extensie pentru Windows Explorer.

Mie unul mi se pare o tema foarte atractiva si din realizarea careia se pot invata foarte multe si se poate acumula foarte multa experienta. In plus, cred ca este singurul concurs de pe la noi care abordeaza acest gen de teme. Mi-as fi dorit ca acest concurs sa apara mai demult :-). Pe langa experienta acumulata, un premiu de 1000 EUR nu strica nimanui asa ca daca va place ideea, go for it! Nu va spun mai multe, intrati pe site-ul concursului si vedeti acolo mai multe, inclusiv cerinta completa.

In concluzie, va incurajez sa participati si abia astept sa vad ce gadget-uri si ce aplicatii de compresie/criptare vor rezulta in urma celor doua concursuri :)

28 September 2007

O vara la Microsoft

Filed in Personal

O vara la Microsoft

Vara asta am fost intr-un internship de trei luni la Microsoft in Redmond, Washington. Ca intern la Microsoft, ai doua optiuni: SDE sau SDET.

SDE este prescurtarea pentru Software Design Engineer si este titlul job-ului ce implica lucrul intr-o echipa de produs. Practic, SDE-ul este cel care lucreaza la un produs si dezvolta facilitati noi sau le imbunatateste pe cele existente.

SDET inseamna Software Design Engineer in Test iar unii ii mai zic si tester. Multi au impresia ca asta implica dat click cu mouse-ul sa vezi ce merge si ce nu merge. De fapt, un SDET face ceea ce face si un SDE, si anume scrie software, insa destinatia acestuia este una interna. Aplicatiile dezvoltate de catre un SDET sunt folosite numai intern si in principal pentru procesele de testare a codului scris de SDE.

Pentru ca am vrut sa avem o imagine completa despre cum merg lucrurile si ce se face la Microsoft, am decis ca unul dintre noi va merge ca SDE, iar celalalt ca SDET. Astfel, Razvan a fost SDE in Storage Solutions Division iar eu am fost SDET in echipa File and Block Storage din cadrul Core Operating System Division.

Internii nu sunt lasati singuri, ci au indrumarea a doua persoane: un manager si un coach. Manager-ul este cel care tine evidenta progresului tau si se ocupa de evaluarile tale (una la mijlocul internship-ului si una la sfarsit), iar coach-ul este cel care iti face introducerea in echipa, te indruma si te ajuta atunci cand ai probleme cu proiectul sau cu acomodarea.

Internship-ul este de fapt un interviu de 12 saptamani, timp in care intern-ul face cunostinta cu Microsoft si invers. Intern-ul trebuie sa-si prezinte potentialul de success in eventualitatea angajarii la Microsoft, iar Microsoft trebuie sa se prezinte ca o companie atractiva pentru intern.

Daca cineva m-ar intreba: “Cum e la Microsoft?” nu as putea sa-i dau un raspuns general, pentru ca experienta fiecaruia depinde foarte mult de echipa in care lucreaza. Poti sa lucrezi intr-o echipa care sa-ti placa foarte mult, dar poti si sa lucrezi intr-o echipa in care sa-ti doresti sa ajungi cat mai repede acasa.

De cum am ajuns acolo si ne-am instalat, nu am avut timp sa ne simtim singuri sau departe de tara pentru ca Andrei si Alex au sarit repede sa ne arate mersul lucrurilor pe acolo. Primul lucru care mi-a placut cum am plecat de la aeroport si am intrat pe autostrada a fost traficul. Nimeni nu se grabea, nimeni nu te claxona.

Legat de experienta unui intern, nu stai degeaba. Sunt foarte multe evenimente. Unul dintre cele mai interesante a fost Intern Product Fair. Acolo am avut posibilitatea sa intram in contact cu multe tehnologii Microsoft si am putut testa pe viu Microsoft Surface. A urmat un dialog al lui Steve Ballmer cu internii in care unul dintre subiectele principale a fost: cand primim mancare gratis? :)

Pe langa altele, Microsoft este un loc foarte bun pentru invatare. In fiecare saptamana sunt multe prezentari sau “talk-uri” (cum le zice lumea pe acolo) de unde poti sa inveti o gramada de lucruri noi. Pe langa asta, sunt disponibile foarte multe training-uri interne (atat online cat si in persoana) . Partea proasta e ca, la majoritatea traniningurilor in persoana, locurile se ocupa cu 2-3 luni inainte, iar ca intern nu prea mai ai acces la niciun training pentru ca nu mai sunt locuri libere. Pe langa aceasta, ai nevoie de aprobarea manager-ului pentru a te inscrie la un training, iar asta nu se va intampla prea usor in cazul unui intern.

O alta experienta interesanta a reprezentat-o participarea la un eveniment din seria Behind the Code. Practic, am mers la studiourile Microsoft si am facut parte din audienta la inregistrarea unui episod. Nu va puteti imagina cata munca si cate duble se iau pentru a realiza un astfel de episod :)

Un alt lucru bun este MS Library, biblioteca interna (foarte bogata) a Microsoft de unde poti sa imprumuti carti, reviste sau diverse alte documente. Exista si posibilitatea de a comanda alte carti in cazul in care ceea ce cauti nu exista in biblioteca. In cazul acesta trebuie sa ai rabdare pentru ca poti astepta de la o saptamana pana la doua luni pana vei primi cartea dorita.

Au mai fost iesiri la Mount Rainier (e interesant sa te dai pe zapada vara) sau sailing pe Lake Washington plus un meci de baseball. La meciul respectiv am aflat pentru ce se duce lumea la baseball: socializare. Un fel de mici si bere americanesc. Lumea isi ia mancarea, se aseaza si incepe sa manance si sa bea. Din cand in cand mai arunca un ochi si pe teren, la cate o faza mai importanta.

In doua weekend-uri ne-am hotarat sa mergem in Los Angeles si in New York. Inainte de zborul spre Los Angeles, controlul a fost mai riguros decat la intrarea in SUA. Deoarece eram 5 prieteni care mergeam, ceva a parut suspect asa ca oamenii au vrut sa afle ceva mai mult despre bagajele noastre. In schimb, zborul spre New York a fost fara probleme, iar odata ajunsi acolo Vivi s-a dovedit a fi o gazda foarte primitoare (merci Vivi).

Revenind la Microsoft, era imposibil sa nu dai de cel putin un roman pe aproape fiecare etaj din fiecare cladire. Nu, nu este a doua limba vorbita la Microsoft asa cum se spunea intr-un spot care circula mai demult pe Internet, insa romanii sunt de ordinul sutelor. O vorba des intalnita este ca nu o sa reusesti sa-i strangi pe toti intr-o poza pentru ca nu incap :) Am avut posibilitatea sa cunoastem destui romani de acolo si sa-i intrebam despre experienta lor la Microsoft.

Per total, ce mai poti gasi la Microsoft? Oameni foarte valorosi si de la care poti invata foarte multe (daca reusesti sa prinzi cate un moment cand sunt liberi :-) ) Vara aceasta am avut prilejul de a cunoaste oameni ca Mark Russinovich (unul dintre autorii site-ului Sysinternals si ai binecunoscutei carti Windows Internals) sau Rajeev Nagar (autorul singurei carti despre implementarea sistemelor de fisiere pe Windows: Windows NT File System Internals). Ca o paranteza, cartea respectiva a avut un succes fenomenal si a fost retiparita in 2006 deoarece se gasea foarte greu iar copiile existente ajunsesera la preturi de sute de dolari pe site-uri ca amazon sau e-bay.

Spre deosebire de alte veri, anul acesta am fost 11 (cat o echipa de fotbal) interni romani in Redmond (ordinea este alfabetica): Ioana Bratie, Omar Chouydary, Tibi Florea, Bogdan Grigore, Silviu Niculita, Victor Paraschiv, Mircea Pasoi, Cristi Pop, Vlad Riscutia si noi doi.

In final, pot spune ca experienta internship-ului depinde de fiecare intern. Pentru a beneficia cat mai mult de aceasta experienta este esential sa comunici si sa faci cunostinta cu oamenii care te pot ajuta sa-ti duci proiectul la bun sfarsit. Ai o foarte mare libertate in exprimarea ideilor, dar nu sunt incurajati “lupii singuratici” care iau totul pe cont propriu si nu discuta deciziile cu echipa.