Mar 31 2008

Principiile Poo

Category: TechnicalIuliana @ 7:48

Acum ceva vreme am decis din anumite motive sa imi schimb jobul. Zis si facut. Am trimis cv-uri peste tot si am asteptat invitatii le teste. Primii pe lista au fost Continental, nu de alta, dar colegul meu de apartament lucreaza acolo si mi-a facut un forward la cv cu recomandare. M-am dus la test. 19 intrebari , 30 de minute. Floare la ureche, la prima vedere interviul mi s-a parut banal, pentru cineva care stie chestiile fundamentale C++. Eu nu le stiam chiar pe toate. O intrebare in schimb mi-a pus piedici. Aceasta intrebare se referea la principiile POO. Imi cerea sa selectez varianta care continea principiile POO. Erau trei variante: prima si a treia enuntau numai doua, iar a doua era constintuita din: abstraction, extension and polymorphism.

Acum ca sa va spun de ce m-a bagat in ceata. In facultate am invatat ca principiile POO fundamentale sunt: polimorfismul, incapsularea si mostenirea. Acum ceva vreme cautand pe net am gasit ca de fapt principiile POO sunt de fapt 4, la cele de mai sus adaugandu-se abstractizarea. Dupa interviul ala am cautat pe google sa vad de fapt cate variante sunt si wikipedia m-a bagat si mai tare in ceata, sustinand ca sunt alea trei de mai sus plus modularitatea.

Cum vad eu lucrurile: abstractizarea si modularitatea nu sunt doua principii fundamentale ale POO pentru ca pot fi considerate implementari/consecinte ale incapsularii si mostenirii. Asa ca daca pe la vreun interviu nimeriti alte prostii, nu va ganditi la ultimele carti scrise si la modul in care a tradus secretara. Enumerati-le pe alea pe care le stiti si care vi se par logice si daca asta o sa fie motivul pentru care nu veti fi angajat inseamna ca oricum firma respectiva nu merita efortul.

Bafta!

[later edit]: Apropos’, polimorfism il mai puteti intalni si ca “reusability” sau reutilizabilitatea, in traducere autohtona.


Mar 27 2008

Minuni in paragina

Category: English posts,MiscellaneousIuliana @ 10:58

Tot pe englishrussia.com am gasit niste poze cu case parasite. Dar ce case si ce arhitectura! Unele din camere mai au si mobilier. Tipul spune ca motivul pentru care s-au pastrat aproape intacte, asupra lor actionand doar timpul, este faptul ca sunt bine ascunse in padurile Rusiei. Poate mai aveam si noi de astea daca nu defrisau astia tot. Asa au defrisat, le-au scos la aer si daca n-au fost revendicate s-au mutat tigani in ele. O sa preiau si eu o poza dar restul le puteti gasi aici.

[English: Abandoned miracles]

On englishrussia.com I also found pictures with some abandoned houses. But omg what houses and what architecture! Some of the rooms even have furniture mobilier. The guy sais that the reason they look so fine, the only thing affecting them being time, is that they are well hidden in the Russian forests. Maybe we would have had these kind of houses too if the authorities wouldn’t have cut down so many forests. Cutting the trees they exposed them. If they weren’t reventicated, gypsies moved in. I’ll take one of the pictures and post it here but the rest can be found here.


Mar 19 2008

Reangajat

Category: Miscellaneous,TechnicalRpx @ 18:48

Spuneam aici ca am fost la BitDefender pentru un test in vederea angajarii.

Ieri am avut si interviul face-to-face, si se pare ca incepand de pe 31 martie voi fi din nou angajat cu norma intreaga :D

Interviul a fost relaxat iar intrebarile au fost relativ simple si de bun simt. Sincer, ma asteptam sa fie ceva mai dramatic, dar din fericire asteptarile m-au inselat. Am mai aflat ca la departamentul unde voi lucra, departament nou infiintat in Iasi, voi lucra cu un coleg ce are 39 de ani. Va fi interesant sa lucrez cu o persoana trecuta prin viata si cu ceva experienta in spate. Chiar eram ingrijorat de faptul ca voi primi drept coleg un gigel proaspat iesit de pe portile facultatii care sa-mi fluture cu aroganta bucata de hartie in fata de fiecare data cand ar trebui luata o decizie sau cand ar exista o discutie pe plan profesional. Sper sa nu ma insel in privinta lui si sa ne intelegem bine.

In rest… ma bucur de ultimele 2 saptamani de “concediu” :)

Tags:


Mar 18 2008

Am fost mintita

Category: TechnicalIuliana @ 17:29

Cand eram studenta obisnuiam sa cred ca atunci cand un profesor spune ceva, trebuie sa fie adevarat. Din pacate naivitatea mea m-a facut sa cred ca exista o varianta semi-recursiva a lui Quick Search si ca cel mai rapid algoritm de cautare intr-o colectie sortata este Binary Search. De chestia cu semi-recursiva m-am lamurit imediat ce m-am angajat(nu exista termenul de semi-recursiv :D), cu BinarySearch-ul m-am lamurit anul asta. Exista un algoritm care in anumite cazuri este mai rapid decat BinarySeach si se numeste Interpolation Search. Wikipedia spune mai multe.

De ceva vreme incerc sa tot prind timp sa fac un test. Si astazi mi-am indeplinit dorinta. In ce a constat testul asta? Am facut o comparatie intre eficacitatea Interpolation si Binary search. Am generat un tablou cu 1000 de elemente generate aleator cu valori inte 0 si 1 milion. Am facut 100.000 de cautari, obiectul cautat fiind de asemenea selectat in mod aleator. Rezultatele au fost intr-adevar multumitoare. Interpolation poate fi si de zece ori mai rapid decat Binary Search, asta excluzand cazurile in care raspunsul cautarii este returnat instant pentru ca primul element ales coincide cu cel cautat :). Complexitatea acestui algoritm este estimata la log(log(n)). Modelul implementat de acest algoritm este cel al cautarii unui nume in cartea de telefon. Ei bine in cazul lucrului cu numere acest algoritm returneaza rezultatele acelea de care ma minunam eu mai sus, dar in cazul lucrului cu siruri de caractere, calculele implicate in determinarea elementului mid, cel pe baza caruia se face reducerea intervalului de valori in care se face cautarea, fac ca performantele acestuia sa coboare pana la cele ale fratelului lui mai depasit, Binary Search.

N-o sa postez pseudocodul sau codul java pentru ca eu zic ca wikipedia spune cam tot ce e nevoie pentru implementarea lui. Sunt curioasa cu cat ar creste performantele daca pentru comparatia stringurilor as folosi Levenshtein?

[revin]


Mar 17 2008

Surpriza

Category: TechnicalIuliana @ 21:54

Prin octombrie 2007 am inceput sa predau niste laboratoare in C#. A fost o noutate pentru mine, am acceptat poate si pentru ca voiam sa invat ceea ce trecuse pe langa mine in facultate. Am urat obiectul asta, numit Sisteme Distribuite. Cum pana mea sa ceri unui studet care abia stia ce-i aia clasa sa faca din laboratorul doi delegati asincroni? Deja prin laboratorul 4 faceam remoting, iar eu nu stiam nici sintaxa limbajului si nici nu stiam sa lucrez cu Visual Studio 2003. In ala se faceau laboratoarele pe atunci. Poate as fi invatat, dar k6-2-ul meu cu 500 Mhz proc si 256 SRam chiar nu avea cum sa compileze si sa execute cel mai simplu proiect in mai putin de 3 minute. Asa ca imposibilitatea de a lucra acasa + un asistent care nu spunea mare lucru nu m-au ajutat deloc. Am avut noroc cu un coleg care s-a angajat si mi-a lasat calculatorul lui si am reusit sa recuperez la timp incat sa fac un amarat de proiect in Asp.Net si sa iau si eu o nota frumusica. Am urat obiectul asta si m-am ofticat ca nu am priceput mai nimic din el. Dar s-a nimerit sa pot sa scot parleala. Colegul meu care tinea laboratoarele a plecat pe neve si cineva trebuia sa le tina, iar alti oameni disponibili nu pareau sa apara. M-am riscat si am zis da. Putea fi inceputul meu ca profesor sau inceputul sfarsitului meu.

Am avut noroc ca prima generatie sa fie una de studenti buni, de fapt nu buni, foarte buni. Silitori si isteti nevoie mare, mai mare dragul sa tii ore cu ei. Nu stiu cate au invatat ei de la mine,(sper ca destul cat sa-i ajute pe viitor) dar eu pot spune ca am invatat multe de la ei. Am facut greseli, dar m-am corectat si acum nu o sa mai fac aceleasi greseli cu astia mai mici.

Cu toate acestea astia mai mici sunt mai inventivi si mai cu chef sa scape fara munca prea multa. Ce au facut baietii? Au cautat pe odc probabil rezolvarile problemelor de anii trecuti. Asta nu ar fi o problema, dar laboratoarele pe care le predau eu sunt in sistem doar de vreun an, poate s-a mai pastrat ceva din celelalte vechi, dar nu mult. Asa ca azi cand mi-au venit doi oameni cu doua probleme cu interfata grafica identica mi-am dat seama ca trebuie sa iau masuri. Unul dintre ei reusise sa o faca sa functioneze pe noua platforma .net, deci am trecut cu vederea, dar celalalt se chinuia in draci sa o faca sa mearga si nu intelegea de ce nu merge. Pai cum sa mearga puiut daca tu ai chiulit la laboratorul anterior unde am explicat ce inseamna Cross-threading-ul? Asa ca maine, ii voi intampina pe restul dintre ei cu o noua versiune de laborator:D. Surpriza!!!


Mar 17 2008

Scoateti o foita de hartie…

Category: Miscellaneous,TechnicalRpx @ 15:51

Asa incepea proful meu de mate din liceu orele cand trebuia sa ne dea lucrare. Era deja o expresie consacrata pe la o bucata de vreme.

In afara de facultate, recent n-am mai avut parte de teste. Pana azi. Azi am avut testul la BitDefender pe postul de Administrator Retele (ciudat totusi, pentru ca eu ma dusei pentru post de tester :) ). Detalii prea mari nu pot da din motive evident profesionale, insa ce pot spune cu siguranta e ca a fost un test extrem de voluminos. Adica 2 parti a cate 2 ore fiecare. Prima parte e un test general de gandire logica (din alea cu figuri si cerculete ca pentru aia dezaxati), serii matematice (adica multe multe numere imprastiate care si cum) si probleme de clasa a patra (care pe vremea aia le rezolvam cu metoda falsei ipoteze si alte balarii). Desi relativ simplu (pentru o persoana cu atentie sporita si gandire logica) este foarte voluminos… adica la vreo 120 intrebari si probleme.

La a doua parte a venit testul propriu-zis pentru AR… Un test care cica trebuia sa fie mai scurt decat cel de logica, insa la care am scris de mi-au sarit capacele. N-am scris asa cred ca nici la Domnul Manta la curs in anul I cand scriam 10 pagini pe ora. In jur de 70-80 de intrebari din toate colturile linuxului… kernel, module, procese, inter-comunicare, protocoale, retele, logging, sintaxe de fisiere (care dracu’ stie sintaxa lui /etc/shadow pe de rost?!?) si nu in ultimul rand programare de socketuri si semnale. Si bineinteles, toate intrebarile cu “Justificati raspunsul!” sau incepand cu “Explicati in detaliu…”.

Totusi overall a fost OK… am raspuns la fiecare intrebare exceptand vreo doua care erau notiuni pur teoretice (vezi exemplul /etc/shadow de mai sus) destul de detaliat. Insa asta m-a costat scump. Am o febra musculara la bratul drept ca nici mouse-ul nu-mi mai vine a-l muta din loc de chin.

Cred ca ma voi baga la un somn cat astept raspunsul de la ei. *fingers crossed*

Tags:


Mar 05 2008

Martisoare

Category: TechnicalRpx @ 22:52

Dupa cum spunea seaqxx aici, cu ocazia martisorului i-am facut (si mi-am facut) cadou cate o placa video si un joc Guild Wars.

Placile video  sunt niste Asus N7600 Silent  cu 256MB DDR2, iar jocul este editia Platinum.  In cazul ei, totul a mers uns. Slackware 12 nu s-a plans deloc, driverele de la nVIDIA s-au instalat fara nici o problema, toate bune si frumoase. Dupa compilarea wine, am instalat World of Warcraft si apoi Guild Wars. Ambele merg foarte bine, cu 30-40 fps la 1280×1024 si detalii medium-high.

La mine insa nu a fost asa usor. Eu fiind pana acum utilizator ATi, m-am cam jucat cu librariile OpenGL si cu driverele. Evident, cand am mutat toata taraba pe nVIDIA, problemele nu s-au lasat asteptate.

In primul rand, am realizat ca librariile Mesa  nu sunt compatibile cu driverul NV deoarece le-am compilat la mana cu specificatii ATi. Eh… mare lucru… recompilare, asta e. Mai departe, am instalat driverul, am pornit interfata grafica, am testat totul, treaba-i buna.  Dau sa pornesc World of Warcraft, si nici dupa 20 secunde imi ingheata.  wtf?

Intru remote de la seaqxx, ma uit in loguri, cica s-a prabusit driverul AGP din kernel. Pauza tehnica… Schimb pe driverul AGP de la NV, acelasi lucru…

Stau… ma gandesc… rememorez problemele pe care le-am mai avut demult si caut solutii… si ajung pana la urma la MTRR.

MTRR asta are rolul de a specifica procesorului cum sa lucreze cu memoria (fie ea RAM sau video). De obicei memoria e in mod Write-Back, insa se poate configura modul Write-Combining pentru memoria video, lucru care sporeste viteza de lucru de 3-4 ori. Memoria RAM era pusa bine acolo, insa memoria video era configurata dinamic (adica sistemul configura MTRR pt memoria video cand era nevoie, adica atunci cand rulam WoW). Incerc eu sa fac o configuratie manuala si dau restart. Surpriza? Categoric. Nu mai pornea deloc interfata grafica.

Ma uit eu prin documentatia la kernel, nimic dubios. Ma uit si prin specificatiile de la nVIDIA si aflu 2 lucruri interesante.

1. Kernel preemptiv + SMPMTRR + nVIDIA = 4B (Big Bad Boo Boo)

2. nVIDIA nu mai foloseste MTRR din motive tehnice (MTRR nu suporta placile video pe PCI-Express) ci foloseste PAT (Page Attribute Table), care e o tehnologie inclusa in procesoarele din generatia i686 si mai noi (Pentium III si mai recente).

Astea fiind concluziile, hai sa facem treaba… Scot suportul  MTRR din kernel, dau reboot, si minune! Works like a charm.

Imbunatatirile sunt notabile. De la 4-5 fps la 15-20 fps in Shattrath, si de la 10-15 fps la 25-35 fps in rest. De notat ca vechile performante erau cu detalii la minim, iar cele noi cu detalii la nivel medium-high. Neverwinter Nights a sarit de la 10-15 fps pe normal la 50-70 fps pe Best. Age of Mythology a sarit si el de la 20fps la 80fps. Per ansamblu sunt foarte fericit. :)

Acum daca mai reusesc sa gasesc si o metoda prin care sa fac World of Warcraft si Guild Wars sa-mi foloseasca ambele procesoare as fi un om implinit. Insa acest lucru nu se va intampla prea curand… mai ales stiind ca Blizzard e o companie de slackeri iar Guild Wars e inca pe engine de Lineage II (acelasi engine folosit de toate jocurile NCSoft) care iar nu e multithreaded.

Ah da… si mai am o problema… Guild Wars nu are suport OpenGL… Se pare ca tot nu voi scapa complet de cele 12-15 fps cu care eram obisnuit pana acum. :( Dar macar sunt obisuit :D