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


Mar 05 2008

Metoda inginereasca de rezolvare a problemelor

Category: TechnicalIuliana @ 10:44

De inginereasca? Pentru ca asta scrie pe diploma mea: inginer masterand (sau ceva de genu :P) De ce am scris un post de genul? Pentru ca unii oameni in loc sa-si puna mintea la contributie si sa incerce sa rezolve o problema asteapta sa faca altii chestia asta sau asteapta sa le vina o idee(iar ideile nu vin din senin asa ca…). Deci, hai sa va dau o mostra de gandire inginereasca si de femeie pe deasupra.(ce mai…crem de la creme :D)

Am sa incep cu definitia inginerului: un inginer este o persoana care ofera intotdeauna solutia optima teoretica, o implementeaza optimal si o si testeaza. Asta este o definitie personala desigur, care nu face nici o referire la pregatire sau diploma, pentru ca o diploma si o pregatire teoretica nu te fac inginer, capacitatea de a gandi si implementa o idee in mod practic DA. Si acum din putul gandirii mele am sa expun aici pasii pe care ii parcurg eu cand dau peste o problema.

  • analizez informatia furnizata
  • ordonez informatia furnizata in:
    • date de intrare
    • date de iesire
    • specificatii de procesare (de obicei mi se cere sa folosesc o anumita componenta sau un anumit algoritm)
  • fac un design simplist al aplicatiei format de obicei din:
    • componenta care imi preia intrarile si eventual le pregateste pentru procesare
    • componenta care imi returneaza iesirile
    • schema abstracta de procesare
  • incep implementarea componentei care lucreaza direct cu intrarile
  • dupa ce e gata o testez
  • daca merge, ma apuc de componenta de procesare
  • daca partea de procesare contine mai multe module le testez treptat si numai cand functioneaza asa cum vreau eu trec la urmatorul
  • mai arunc un ochi peste componenta de procesare facand ultimile optimizari
  • implementez partea care imi returneaza iesirile(rezultatele)

Pentru problemele mai usor de rezolvat, adica reduse ca dimensiuni si complexitate nu respect pasii astia pentru ca de obicei au solutii standard usor de adaptat unui anumit caz. Cel mai important, in timpul rezolvarii unei probleme ma documentez foarte mult in legatura cu componentele cu care lucrez pentru a putea face diferenta intre problemele cauzate de o posibila proasta gandire/implementare a solutiei si problemele posibile cauzate de componente sau folosirea lor intr-un mod nepotrivit.


Mar 04 2008

LAMP

Category: TechnicalIuliana @ 11:19

Din punctul meu de vedere un inginer software desavarsit trebuie sa indeplineasca 5 conditii:

  • sa stie foarte bine sa lucreze sub un sistem de operare
  • sa stie sa lucreze cu un server de aplicatii
  • sa stie sa lucreze foarte bine cu o baza de date
  • sa cunoasca foarte bine un limbaj de programare
  • sa stie bine un limbaj de scripting

M-am hotarat si eu la un moment dat sa incerc sa indeplinesc cele 5 cerinte. Am ales Linux, JBoss, MySql, Java si Javascript. Deci acronimul care m-ar reprezenta este LJMJJ. Am citit recent pe situl celor de la Java ca majoritatea developerilor open-source sunt caracterizati de acronimul LAMP(Linux operating system, Apache web server, MySQL database server, PHP/Perl/Python languages) si am avut o revelatie: Sun a cumparat MySql pentru ca nu suporta faptul ca nici unul din produsele lor nu facea parte din lista de mai sus. :)

Oricum se pare ca Sun incearca din rasputeri sa devina un concurent serios pentru Microsoft. Si-au tras si ei propriul server de baze de date(Microsoft are Sql Server, Sun are MySql mai nou) si au scos si un editor destul de complex incat sa se apropie de Visual Studio. Ma refer desigur la Netbeans 6, care face ca dezvoltarea unei aplicatii J2ee sa fie accesibila aproape oricarui programator wannabe. Eu insist sa raman utilizatoare fidela a Eclipse, este usor de personalizat, pot sa imi aleg eu pluginurile necesare si necesita si resurse mai putine.(Web tools-ul mi-a cam scos peri albi recent, dar slava domnului ca exista docs.torrents.ro si am gasit…. o carte :D care sper sa imi mai micsoreze chinul:) )


Feb 26 2008

Solutie pentru Mazgalici :D

Category: TechnicalIuliana @ 17:00

In urma unei discutii pe messenger avute cu Mazgalici, am decis sa-i fac o fericire(si sa ma dau mare), rezolvand o problema peste care daduse el: transformarea unui tablou intr-un string cu elementele sale, separate de un separator definit de utilizator. (Adica implementarea echivalenta in java a metodei implode din php: $a.= implode (“|”,$vector);)

public static String implode(String separator, String[] arg) {
String test = Arrays.toString(arg);
test = test.replace(“[“, “”).replace(“]”, “”).replace(“, “, separator);
return test;
}
Si ca performante : Transforming an array of 2424 elements took : 0.130 seconds.

Ce zici, este acceptabil?


Feb 25 2008

Cine spunea ca…

Category: TechnicalIuliana @ 16:40

… in programare nu iti trebuie matematica? Uite un link care demonstreaza exact contrariul: aici.

Formula aia “super-interesanta” de acolo este folosita de Lucene pentru a determina exact daca un document anterior indexat corespunde unui criteriu de cautare dat de utilizator. Lucene este folosit de majoritatea programatorilor(nu de mine desigur, ca eu prefer sa folosesc instrumentele de search oferite de linux :D) pentru indexarea surselor si a informatiilor legate de un proiect. Indexarea se face destul de repede, iar daca criteriile de indexare sunt destul de bine puse la punct si rezultatele unui search vor fi returnate destul de rapid.

Daca Lucene ar fi scris conform ultimelor standarde java poate l-as folosi. Dar cat timp in codul sau nu se folosesc generice(pierzandu-se timp cu teste si conversii inutile), se folosesc vectori(sunt sincronizati si merg greu, iar contextele in care sunt folositi nu sunt multi-threading, deci nu inteleg rostul folosirii vectorilor in locul unei ArrayList, de exemplu), iar unii algoritmi de cautare sunt implementati cu picioarele (mai mult ca sigur n-au fost implementati cu creierul :D), se folosesc constante imprastiate, in loc sa fie adunate in enum-uri s.a. nu intentionez sa-l folosesc. Dar asta e doar parerea mea de programator pretentios.:D (O sa postez si exemple in curand.)


Feb 19 2008

Frustrari de programator

Category: TechnicalIuliana @ 10:31

Nu ma simt frustrata si nu ma enervez cand nu imi iese ceva. In cazuri de genul ma ambitionez, ma mai documentez si pana la urma gasesc eu o solutie. Dar cand lucrez cu codul unui coleg si cu un framework open source, iar ceva crapa fara a-mi spune de unde ma enervez. Pentru ca la un moment dat nu mai am alte optiuni decat sa banuiesc cam ce nu merge si sa incep sa elimin si sa adaug chestii la nimereala in speranta ca va merge. Asa am patit acum cateva zile. De o saptamana un modul arunca din cand in cand o exceptie, dar isi facea treaba bine. Am tras concluzia ca e ceva intern framework-ului open source. Era enervanta exceptia aia, dar daca nu imi afecta rezultatele nu era mare problema. Intr-o dimineata ma apuc de modificat niste chestii (faza era ca respectiva chestie trebuia sa genereze ceva si mergea greu asa ca “the master of threads“, adica moi :D, a trebuit sa faca modulul respectiv sa mearga multithreaded) pentru ca in momentul in care rula multithreaded apareau exceptii noi. Incercand sa le rezolv pe astea(problema se invartea in jurul unor variabile care nu fusesera setate bine) le-am rezolvat pe celelalte. Cand am rulat si am vazut ca nu mai apar  imi venea sa musc din birou de ciuda, pentru ca nu stiam ce am facut pentru a le rezolva si daca mai aveam aceeasi problema ulterior chiar nu as fi stiut cum s-o rezov. Am rezolvat si celelalte exceptii si m-am linistit. Gandind la rece, banuiesc din ce motiv apareau exceptiile alea,dar pana o sa-mi confirm banuielile o sa mai dureze putin. Nu de alta dar am alt task mai important acum. Eu sper sa am timp sa ma intorc la partea respectiva.