06th Jun 2008

The switch: Part I

Poate unii din voi stiti deja ca de 2 saptamani mi-am luat un MacBook si am renuntat la vechiul laptop pe care i l-am fratelui meu cu ocazia zilei lui de nastere.
Nu stiu daca stiti despre razboaiele mac vs. windows, care-i mai tare, dar exista multe “voci” pe internet care spun ca windows e naspa si mac e cel mai tare. Voi incerca sa demonstrez ca nu e chiar atat de alb si negru dupa cum am descoperit si am fost dezamagit.

Voi incepe cu niste benchmark-uri de start-up si shutdown ale cele 2 laptopuri pe care le am la indemana.
Sa incep intai sa scriu despre specificatiile celor 2:

Apple MacBook Fujitsu Siemens Amilo Pro V3505
Procesor Core 2 Duo 2.4 GHz 3MB L2 cache Core Duo 1.6 GHz 2MB L2 cache
Memorie 2×1 GB DDR2 667mhz 2×1 GB DDR2 533mhz
Video Intel GMA X3100, max 224MB shared RAM Intel GMA 950, max 128MB shared RAM
HDD 160GB Fujitsu Siemens 120GB Western Digital
Sistem Operare Mac OS X 10.5.3 Windows Vista SP1

Am folosit Windows Vista pe vechiul Fujitsu timp de 6 luni si avea niste timpi de pornire si inchidere oribili! Dar ce-i drept nu rulam SP1.

Timpii urmatori de pornire sunt cronometrati de la apasarea pe butonul de pornire a laptopului (laptopurile fiind inchise) pana la incarcarea sistemului de operare si pana la disparitia iconitei de incarcare (clepsidra din windows, si mingea din mac os).
Timpii de inchidere sunt masurati de la apasarea butonului de shut down (in mac os am cronometrat de la apasarea butonului de “Shut Down Now” de la fereastra de confirmare) pana la oprirea completa a laptopului. Inainte inchidere rulau deja cateva programe pe laptopuri:

  • pe Windows: Yahoo! Messenger si Vista Sidebar
  • pe Mac: Yahoo! Messenger
Laptop/Sistem Operare Timp Pornire* Timp Inchidere*
MacBook/Mac OS 1 min 10.3 s
Amilo/Windows Vista 1 min 3 s 11 s

* Timp mai mic inseamna performanta mai buna

Din ce vad Windows Vista nu e chiar asa incet. Tinand cont ca Fujitsu-ul e mai slab decat MacBook-ul as pune pariu ca Vista ar rula mai bine decat OS 10.5.3 pe MacBook.

Posted by Posted by Auras under Filed under Uncategorized Comments 7 Comments »

18th Apr 2008

Design & Plan

Credeti sau nu dar cel mai important pas in realizarea unui proiect web sau software nu o reprezinta programarea ci designul.

Trebuie sa ai la inceput o viziune de ansamblu dar si clara in acelasi timp a proiectului inainte sa te apuci sa lucrezi la taskuri.
Spre exemplu: sa zicem ca sunt un producator de automobile si vreau sa fac o aplicatie prin care pun la dispozitie un inventar cu masinile pe care le am disponibile iar dealerii le pot comanda sau rezerva.

Urmatorul pas ar fi detalierea planului si descrierea fiecarui task.
Cum ar fi:

  • Conturile dealerilor vor fi create de catre o persoana care se ocupa cu delegarea conturilor;
  • Dealerii trebuie sa completeze niste formulare pentru a avea acces la aplicatie;
  • Dealerii pot vedea in ce culori si motorizari sunt disponibile masinile;
  • In aplicatie voi avea un newsletter despre productia de automobile din fabrica mea in care voi tine la curent pe dealerii mei; etc

Urmeaza o detaliere si mai in amanunt a fiecarui task in parte.

  • Culorile sunt globale pentru toata firma
  • Modelele de masini au culorile alese din lista predefinita.
  • Culorile sunt stabilite de catre un reprezentant al firmei si nu de catre administrator

In final se leaga toate modulele pentru a descrie un task complet. Pentru vizualizarea acestora se pot folosi diagrame de activitate sau de secventa.

Toti acesti pasi de mai sus se pot face pe hartie, se fac drafturi si se discuta cu viitorul client pe toata aceasta durata.

Acum urmeaza partea interesanta. Aici intervine inginerul software si anume detaliile despre structura programului. Dar tot nu se va ajunge la programare inca.

Aici se stabilesc structura datelor (adica clasele programului) si algoritmii.
Pentru acestea se folosesc diagramele UML pentru o reprezentare vizuala a claselor si flowcharturi pentru vizualizarea algoritmilor. Din pacate nu voi putea intra in detalii aici dar o sa va dau un mic ajutor.

Un tip de diagrama UML este reprezentarea vizuala a algoritmilor pe care toti profesorii v-au aratat-o in liceu si la facultate si probabil v-a si pus sa o desenati pentru un nou algoritm.
In general o diagrama UML este un graf in care nodurile sunt blocuri cu o descriere amanuntita a unui task, obiect sau actiune.

Printre acestea se numara:

Diagramele de clasa

Fiecare bloc este compus din 3 parti despartite de linii orizontale: numele, membrii si metodele; Sagetile indica faptul ca Student si Profesor se deriva din clasa Person; + inseamna ca membrul acela este public; un - ar fi insemnat ca membrul sau metoda respectiva este privata

Diagramele de secventa

Acestea detaliaza o activitate a utilizatorului privind din toate cele 3 planuri: presentation (interfata cu utilizatorul), business logic (programul ce ofera informatii catre planul de prezentare) si backbone (totalitatea bazelor de date).

Diagramele de relationare

Se folosesc pentru designul bazelor de date relationare.

Mai sunt multe altele dar acestea ar fi de ajuns pentru inceput.

Avand acestea gata facute se poate trece la delegarea taskurilor catre programatori si inceperea programarii bazelor de date, a interfetei si a logicii.

Posted by Posted by Auras under Filed under Uncategorized Comments 1 Comment »

30th Jan 2008

Informatica in facultati

Facultatea este facuta ca sa te pregateasca de lumea reala, de conditiile de munca din industrie, dar de cele mai multe ori isi rateaza obiectivele.

Dar ceea ce nu prea te pregateste facultatea sunt:

1. Munca in echipa

Majoritatea facultatilor desemneaza proiecte in echipe in anul 2 deobicei dar nu in timpul facultatii ci acasa. Adica ti se da o tema si iti alegi colegii cu care vrei sa lucrezi si faceti asta in privat. Nu te verifica nimeni, nu stie nimeni sigur cat a facut fiecare si de ce. De aceea sunt cativa care prefera sa faca grosul pentru toata echipa si astfel nu se castiga experienta din munca in echipa.

Nu se invata sa se citeasca si sa se utilizeze codul altora si nu se invata coordonarea. In ciuda acestui fapt multi trec pe cv ca sunt buni coechipieri.

Solutie propusa: Sa se formeze echipe de cate 2 studenti ca sa fie cat mai multe echipe. Se va face schema de lucru pentru un soft si apoi se vor delega sarcinile. Aceeasi sarcina sa fie facuta de cate 2 sau 3 echipe, separat; fiecare echipa va crea sarcina independent ce celelalte echipe. Dupa ce acestea au fost facute sa se trimita ce a lucrat fiecare echipa la alta echipa care va implementa ce a lucrat cu ce a primit de la cealalta echipa. Lucrul acesta sa se faca aleator, si daca se poate, echipele sa nu comunice intre ele, avand la dispozitie doar documentatia pentru subprogramul/clasa/libraria primita.

2. UI

Interfata grafica este ceea ce atrage utilizatorul si ceea ce face programul mai usor sau mai greu de utilizat. Ar trebui sa se predea in facultati despre importanta interfetelor grafice si niste concepte importante despre intefete. Desigur, un programator nu ar trebui sa se omoare sa gaseasca el interfata grafica propriu-zisa ci inginerul software, iar cu asta se lauda facultatile ca “produc”: ingineri software.

Solutie propusa: O materie noua introdusa despre interfete grafice si utilizabilitate. Ca test se va da o cerinta in care sa se gandeasca o interfata grafica cat mai intuitiva/usor de utilizat pentru un anumit soft.

3. Source control

Tot ca parte importanta cand lucrezi in echipa o are si source control-ul. Este aplicatia care tine evidenta codului scris, modificat cand, la ce ora si de catre cine. Este foarte important acest lucru fiindca ajuta la depistarea bugurilor si poti aduce un fisier la versiune anterioara chiar daca ai uitat ce modificari ai facut.

Solutie propusa: Ar trebui sa se creeze un curs despre inginerie software in care sa se predea despre aceste concepte si sa invete sa utilizeze programe de source control precum svn.

Nota: Nici eu nu am folosit vreodata source control si presupun ca nu voi invata acest lucru la facultate.

4. Deployment

Invatam sa programam si sa compilam dar cum publicam ce am lucrat? Da, poti sa arhivezi si sa urci pe un site si sa pui la downloadat dar cat de atractiva este optiunea asta?

Ar trebui sa se predea despre crearea unui installer pentru aplicatie, despre salvarea si reutilizarea setarilor, despre user space si program space, despre versiuni si updatare automata. Daca folositi Visual Studio atunci lucrurile acestea sunt foarte usor de utilizat si creat. In Delphi nu stiu cum sta treaba. Dar pentru java? Multi colegi ma intrebau cum se creeaza un executabil (sau de ce nu are executabil) sau daca merge aplicatia creata in java pe orice calculator.

Solutia propusa: In cadrul aceluiasi curs propus mai sus sa se predea si despre cum se creeaza un installer, cum se foloseste registry-ul, unde ar trebui salvate datele folosite de program (setari de ex.) si unde ar trebui salvate datele prelucrate de utilizator, cum se face un updater automatic, etc.

Acestea sunt unele din problemele despre care nu inveti in facultati dar care te vei lovi mai mult ca sigur cand vei lucra pentru o firma adevarata de software.

Inspirat din articolul How Should We Teach Computer Science? al lui Jeff Atwood, Coding Horror.

Posted by Posted by Auras under Filed under Uncategorized Comments 3 Comments »

20th Jan 2008

Stumbling upon linux… again

Zilele trecut am avut ocazia sa incerc o noua distributie de linux de care m-am indragostit cum am intrat pe site si am vazut primul screenshot.

Pe langa faptul ca desktopul default e verde gOS te face sa te simti ca nu folosesti linux ci MacOS. Nu e ceva normal ca intr-o distributie de linux sa nu dai peste Gnome sau KDE dar interfata din gOS este ca un pioner in lumea linux.  Imi place mult mai mult decat Gnome sau KDE fiind mai simplu de utilizat.

Inoveaza chiar: un click pe desktop si iti apare un meniu cu shortcut-uri catre aplicatii.

Dock-ul de jos, identic cu cel din Mac OS X, contine linkuri catre aplicatii web foarte populare precum gmail, google calendar, box.net, meebo, youtube, etc; browserul firefox, skype, un movie player si un mp3 player. Sistemul de operare este axat pe aplicatii web (in special de la google) asta explicand numarul mare de shorcuturi din dock si casuta de google search de pe desktop.

Dar… exista un dar. Daca sapi mai “adanc” se vor observa defecte. Poate chiar mari. File managerul spre exemplu pare a fi facut in bataie de joc. Nu exista ordonare, cautare, butoane UP, BACK, FORWARD, posibilitatea de a mari/micsora iconitele, nu “taie” din numele fisierelor daca sunt prea mari ci le afiseaza complet. Setarile uneori sunt mai greu de gasit si uneori nu poti seta ce doresti.

Cand l-am bootat mi-a recunoscut cele 2 partitii windows si mi-a creat shortcut-uri pe desktop dar nu puteam sa le accesez. Tot manual a trebuit sa la accesez. Include drivere pentru o buna parte de hardware, inclusiv ipod sau wifi dar tot nu puteam sa ma conectez la reteaua mea protejata. A trebuit sa dezactivez securitatea ca sa ma pot conecta. Din fericire include codecuri relativ necesare: mp3, xvid, x.264; dar nu si pentru .mkv-uri.

Mi-a placut foarte mult si am ramas foarte surprins sa vad o distributie atat de buna linux de dupa Ubuntu.

Posted by Posted by Auras under Filed under Uncategorized Comments No Comments »