Friday, 11 September 2009

We're sorry, you deserved so much better

Moment de referinţă şi de reparaţie morală pentru ceea ce un stat modern şi normal astăzi nu ar face nici măcar unui puşcăriaş iar în anii `50 a făcut unui geniu al matematicii şi erou al celui de-al doilea război mondial.

Saturday, 20 June 2009

Matematica. O problemă universală

Am citit un document despre starea învăţământului matematic din Statele Unite. Analiza extrem de dură din ultimul capitol, „The Standard School Mathematics Curriculum”, ca şi dialogurile prezintă destul de clar ideile autorului.

Mie mi se pare că se potrivesc ca o mănuşă şi la noi. Şi mai trist e că la noi se potriveşte la cam toate materiile.

Monday, 25 May 2009

Limitatori de performanţă

În ce priveşte unele aparate electronice, inclusiv calculatoare, dar şi electrocasnice, de multe ori există o anumită caracteristică ce are proprietatea că determină de una singură performanţele respectivului produs. De multe ori, acest limitator este specific însă doar unei anumite perioade de timp, sau unui anumit domeniu de utilizare al respectivului produs. Cu toate acestea, utilizatorii, din obişnuinţă, tind să extindă limitatorii cu care s-au întâlnit la anumite momente şi în anumite perioade de timp în afara acestora, ceea ce conduce la decizii proaste de achiziţie prin judecata pripită a unor produse pe baza specificaţiilor, prin ignorarea unor aspecte importante la achiziţie, şi prin augmentarea exagerată a importanţei unor caracteristici secundare.

Astfel, era o vreme când rezoluţia senzorului unei camere foto digitale reprezenta singurul criteriu după care acestea se alegeau. Cu timpul, au apărut camere foto digitale profesionale la preţuri decente şi, în acelaşi timp, aproape toate telefoanele mobile au căpătat camere digitale incorporate. Un Canon PowerShot A85 cu 4 megapixeli rezoluţie scoate însă nişte imagini infinit mai bune decât multe camere foto digitale cu aceeaşi rezoluţie montate pe un telefon mobil. Pentru că la o cameră foto nu senzorul este totul, aşa cum la camerele pe film conta şi filmul folosit, dar nu era totul. Zoomul a fost şi el un criteriu important, dar cum obiectivele compactelor nu pot avea un câmp prea larg, mărirea zoomului a presupus ca obiectivul să devină „tele”, iar la valori mari ale zoomului orice poză iese mişcată, chiar şi la timpi de expunere mici. Asta până la introducerea stabilizării optice de imagine, care a atras în mod corect atenţia şi spre ansamblul optic şi spre electronica de post-procesare a imaginii, ale căror capabilităţi adaugă mult la calităţile unei camere.

În domeniul calculatoarelor personale, frecvenţa ceasului procesorului a definit multă vreme performanţele oricărui calculator. Deşi cunoscătorii se mai uitau şi la FSB, iar gamerii la caracteristicile interfeţei video când evaluau un sistem, microprocesorul era de regulă judecat doar după frecvenţa ceasului, alte caracteristici, cum ar fi modul de proiectare sau memoria cache erau adesea ignorate. Aşa se face că firma AMD, concurentă Intel, în momentul când, prin proiectarea procesoarelor, au reuşit să obţină performanţe sporite faţă de procesoarele Intel cu frecvenţă echivalentă a ceasului, le-a denumit pe acestea apelând la frecvenţa ceasului procesoarelor Intel cu performanţe echivalente. De aceea procesorul Athlon XP cu frecvenţa de 1466 MHz se numea 1700+. La un moment dat, însă, inginerii electronişti nu au mai putut mări frecvenţa ceasului procesorului şi performanţa acestuia a căzut aproape exclusiv în sarcina inginerilor calculatorişti. Aceştia au venit cu înghesuirea a două nuclee pe aceeaşi pastilă, şi procesorul Core2Duo de 2,14 GHz a devenit mult mai performant şi mai eficient decât un Intel Pentium4 de 2,8 GHz, ceea ce a spulberat definitiv mitul frecvenţei ceasului procesorului drept unic limitator de performanţă.

Tot în domeniul procesoarelor, am fost întrebat, referitor la telescopul spaţial Hubble, de ce misiunea de întreţinere 3A, efectuată în 1999, a instalat la bordul telescopului un procesor 486, când la acea vreme apăruseră procesoarele Pentium3, iar cele Pentium2 erau deja foarte larg răspândite. În plus, NASA nu e atât de săracă încât să trebuiască să economisească bani pe o componentă atât de esenţială pentru proiect. Răspunsul este că dacă pe Pământ oricând se poate trage de la priză mai mult „suc” pentru alimentarea unui procesor; în schimb, pe Hubble, cantitatea de energie livrată de panourile solare în decursul unei zile este limitată, iar procesoarele de la Pentium încolo au devenit mari consumatoare de energie, şi la vremea aceea panourile solare nu erau atât de performante ca acum. Astăzi, nişte panouri solare moderne ar putea, poate, cu puţin efort, să alimenteze un Core2Duo, procesor care a recâştigat mult din eficienţa energetică pierdută de Pentiumuri, dar concluzia ce se poate trage este aceea că în unele aplicaţii, frecvenţa şi puterea de calcul nu sunt totul, ci mai contează şi consumul energetic; şi în general, limitatorii de performanţă depind şi de aplicaţia şi condiţiile de instalare în care funcţionează un dispozitiv.

Aceasta este valabilă şi la electrocasnice. De exemplu, o maşină de spălat al cărei program de stoarcere prin centrifugare atinge 1200 rpm este puţin mai bună decât una care atinge 1000 rpm, dar pentru multe în niciun caz nu se justifică diferenţa de preţ, rufele ieşind aproape la fel de uscate din cele două. De fapt, viteza de centrifugare contează foarte puţin de la 800 rpm în sus. La fel, degeaba un aspirator are putere mare dacă prin proiectare nu are spaţiu de stocare al prafului suficient de mare; sau invers: degeaba are rezervor de praf de 5 l dacă atunci când acesta este umplut pe jumătate, motorul nu mai are putere să tragă.

Friday, 10 April 2009

Noutăţi de pe la AC

Laboratoarele de electronică din ED de la etajul 3 se numesc acum Theodor Dănilă şi Eduard Andrei. Foarte frumos.

Monday, 2 March 2009

Companiile aeriene şi programarea

Cu ce companie aeriană să zburăm:

Monday, 23 February 2009

Ai suprascris equals? Suprascrie şi hashCode!

E o lecţie care se învaţă la început, dar e uşor de uitat pentru un programator Java, deşi e util de ştiut. De exemplu, metoda contains() a interfeţei java.util.Collection declară în contractul ei din API că va căuta în colecţie un obiect care are proprietatea că: fie este null dacă obiectul primit ca parametru este null, fie apelarea metodei equals a obiectului din colecţie cu obiectul căutat ca parametru dă true.

Clasa java.util.HashSet, care implementează printre altele interfaţa java.util.Collection, teoretic aderă la acest contract, deşi documentaţia ei (în mod ciudat), e mai vagă decât cea a interfeţei. Practic, pentru eficientizare, metoda contains(), aşa cum este ea implementată în clasa java.util.HashSet, nu ajunge să apeleze metoda equals() pentru verificare, decât dacă la apelul metodei hashCode() (mai rapidă) pe ambele obiecte se returnează aceeaşi valoare.

Documentaţia Java este cea care este deficitară şi derutantă aici. Documentaţia clasei java.util.HashSet ar trebui să specifice exact comportamentul fiecărei metode şi nu doar să enunţe generic în antet o prezumţie („assuming the hash function disperses the elements properly among the buckets” - nu e clar ce înseamnă aici properly).

Deci, dacă cumva ai suprascris equals() pentru o clasă, pentru ca ea să aibă efectul dorit în toate cazurile în care te-ai aştepta, trebuie ca metoda hashCode() a acelui obiect să fie şi ea suprascrisă. Contractul lui hashCode() spune aşa: If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result. Cum suprascriem hashCode, depinde de noi, atâta vreme cât respectăm acest contract. Dacă nu sunt egale, nu se specifică nimic, pot să difere sau pot să fie identice, dar e de preferat să se încerce ca nici comparaţia hashCode să nu dea fals pozitiv prea uşor.

Vezi şi itemul 8 de aici.

Wednesday, 18 February 2009

Stacktrace

Ce este aia o stivă de urme? Termenul de stacktrace este încetăţenit. Toţi cei care îl folosesc ştiu bine ce înseamnă. Nu are rost să forţezi o traducere în română a unui termen folosit şi înţeles într-o formă direct importată. Scuze, dar traducerea literală de mai jos (din varianta în română a lui Firebug) sună a fandoseală:


Şi în plus, chiar dacă traduci literal, nu este urma stivei?