Dacă nu-i stricat, nu-l repara

N-am mai postat de-aproape două luni pentru că m-am ales cu ceva foarte interesant de făcut pe lângă celălalt. Dar asta mi-a dat timp să mă gândesc la câteva lucruri legate de obiceiurile mele legate de calculatoare.

Faptul că îmi storc creierii în fața altui calculator decât cel de acasă m-a făcut să apreciez câteva lucruri interesante. Acum, ce-i drept, sunt mai puțin radical decât acum câțiva ani (read: acum vreo 10-11 ani când un update la o distribuție Linux dura vreo două zile dacă te mișcai repede — și totuși preferam asta ecranelor albastre din Windows 98), dar am început să apreciez altfel ideea de “just works”.

A little background: dihania de mai sus rulează Linux. Partial pentru că asta îi plăcea fostului admin, parțial pentru că avem nevoie de Matlab deci orice altceva în afară de Linux și Windows iese din scenă (da, licența Matlab ar fi suficient ca să plătească doi-trei bugetari timp de un an de zile). Calculatoarele pe care lucrăm, de asemenea, rulează Linux, și așa cum e și normal acces la contul de root are doar administratorul. De asemenea, pentru că (spre nemulțumirea mea) trebuie să mai trec și pe la cursuri/laboratoare, am doar patru-cinci ore pe zi ca să mă ocup de cele mai interesante lucruri cu care am avut de-a face de când mă știu. Prin urmare:

  • Am ajuns să folosesc Gnome. E nașpa, în continuare (măcar au reparat panel-ul totuși). Aș putea instala FVWM din surse, dar cum în momentul când mă așez în fața tastaturii oricum intru în modul teleghidat și abia apuc să fac tot ce mi-am propus în ziua aia, pe cuvânt că aș folosi și TWM. În momentul când chiar ai de lucru începe să te doară-n cot și că albastrul de pe barele de titlu e cam nașpa.
  • Am început să îmi redescopăr relația simbiotică cu Emacs. Culmea e că de fapt îmi trebuie foarte puține de al el; class browser? Scriem numai cod C. Project management? Fiecare folosește ce vrea ca să își scrie codul, deci singurul format cu adevărat universal e Makefile-ul plain-text. Deja tot ce trebuie pe bune e syntax highlighting-ul și auto completion-ul.
  • Am o opinie deja și mai radicală față de orice fel de încercare de configurare automată a sistemului. Ultimul lucru de care ai nevoie atunci când o distribuție mega-friendly nu îți detectează cum trebuie display-ul e să te pomenești că în loc de un xorg.conf de care se atinge o dată și gata folosește vreo schemă încâlcită peste care trebuie să treci.
  • Am înțeles în sfârșit care-i faza cu pet project-urile. Să mă explic: când îți place foarte mult orice are a face cu programarea, ai fi în stare să faci asta 12 ore pe zi. Problema e că după ce ai petrecut opt ore din zi lucrând la fix același lucru, îți trebuie altceva cu care să umpli restul de patru ore, altfel te ia naiba. Priceless.

De ce vreau bursă şi semestrul viitor

De-asta: Eee Keyboard

Prin urmare va trebui să pun umărul contra exigenței tovarăşului Stanciu, profesorul meu de DCE. Merită patru nopți de muncit pe brânci la amplificatoare contra un Eee Keyboard? Merită!

Brb, mă duc să lucrez :-D .

Jucărie nouă

Am o jucărie nouă: un Amiga 500, cu o bună parte a întregului tacâm (mouse, da, mouse d-ăla pătrățos, joystick şi vreo 60 de dischete, plus upgrade-ul de la 512K la 1M de memorie). Ce-mi lipseşte e un monitor de la mama lui de-acasă (monitoarele VGA actuale nu mai sunt bune pentru asta), dar treaba s-a rezolvat printr-un A520 (adaptorul RGB->Video) şi un adaptor RCA->SCART. Scade ceva din calitatea imaginii, dar e rezonabil dacă stai destul de departe de televizor.

Poze dedesubt. Nu le mai fac, dom’le, ca pe vremuri.

All your search engines are belong to us

Haskell — Primele impresii

De două zile mă joc asiduu cu Haskell. Am mai făcut asta acum vreo patru ani, dacă nu mai bine, când din păcate documentația era foarte puțină, extrem de proastă (până şi standardul Haskell 98 era mai utilizabil, şi asta spune multe…) iar bibliotecile existente nu foarte bune şi nici foarte bine puse la punct.

Acum, învăț după Real World Haskell, care e o carte rezonabilă. Nu e grozav de bine organizată imho, iar exemplele ar fi putut fi mai real-world (comparativ cu Practical Common LISP, de exemplu, baza de date naivă cu CD-uri e mult mai rezonabilă decât pretty printer-ul JSON dezvoltat ca prim exemplu), dar oricum, comparativ cu ce mi-au văzut ochii acum patru ani, e foarte bună. Cât despre limbaj:

  • Îmi place foarte mult sintaxa; foarte curată d.p.d.v. matematic, şi în măsura în care nu e abuzată, foarte uşor de citit. Din păcate, există în carte câteva exemple de cazuri în care “curățenia” asta e dusă prea departe şi nu se mai înțelege nimic; totuşi, în măsura în care cel din fața tastaturii ştie cum să se exprime, rezultatul e ok.
  • Există vreo câteva aspecte de la care îmi iese fum pe urechi. Paradoxal, nu e currying-ul, care de fapt pare extrem de intuitiv (then again, funcțiile parțiale nu sunt un lucru nou pentru mine). Foldr-ul este în schimb :-) . De asemenea, lipsa unor structuri de date familiare mi-e destul de incomodă. Aşa că oricine a criticat ANSI CL pentru că e prea bloated este invitat să folosească Haskell, limbajul unde, pentru a implementa rezolvarea sistemelor de ecuații prin metoda Gauss, trebuie întâi să implementezi vectori şi matrici. Implicit, va trebui să mă joc un pic cu el ca să văd cum se comportă la operațiuni de number crunching (la care am de gând să-l folosesc, între altele).
  • Comparativ cu Common LISP sau cu Scheme, Haskell este în ansamblu extrem de neintuitiv. Există destule lucruri “de bază” în programarea imperativă, reținute pe bună-dreptate în majoritatea dialectelor LISP, care nu se regăsesc în Haskell. Nu e niciun corespondent 1 la 1 pentru structuri, vectori, diverse tipuri de bucle ş.a.m.d. — până şi tipurile de date efectiv reprezentate ca funcții. De-aici e o chestie de gust. Personal, îmi place ideea, mi se pare mult mai curată şi mai uniformă.
  • Ce nu îmi place şi prevăd că o să am multe ciocniri cu el este sistemul de tipuri. De când mă ştiu, am abuzat de el — am incrementat şi decrementat pointeri şi caractere, am afişat adrese şi multe alte drăcii. Sistemul de tipuri din Haskell mi se pare prea restrictiv, însă cel puțin din ce am lucrat şi văzut până acum, impactul e mai scăzut decât mă aşteptam.

Per total, cel puțin după primele două zile, am o impresie foarte bună despre Haskell. E curat, rezonabil de rapid, foarte bine documentat şi mult mai bine centralizat decât Lisp.

Ce se întâmplă, de fapt, în LHC?

Cu puțină întârziere, am terminat de scris drăcia asta. Din păcate, apocalipsa a venit mai înainte de asta (la mine s-a manifestat prin terminarea subită a borcanului de ness…), şi e puțin tardiv, dar sper să fie de ajutor.

Textul e într-o stare destul de brută. În particular, greşelile de ortografie sunt acolo nu pentru că sunt analfabet, ci pentru că n-am mai apucat să le corectez. Ştiu, desenele sunt magnifice. Orice sugestii şi corecturi sunt binevenite, şi le voi recompensa prin prezența într-o rubrică de mulțumiri.

Deci, aşteptând sfârşitul lumii, adus de The Large Hard-on… adică Hadron… Collider, să lecturăm.

În altă ordine de idei, profit de ocazie pentru ca, cu 12 minute înainte de miezul nopții, să-i urez amicului Sergiu, Împăratul Utopic al Balcaniei, un călduros la mulți ani. Împăratul schimbă prefixul. Să ne trăieşti, maestre!

Download aici: newfile11

Fişierul este PDF şi are vreo 200 KB.

(Edit: lipsa bibliografiei este neintenționată și se datorează faptului că am rătăcit cardul de memorie cu notițe. O voi posta imediat ce îl găsesc)

<b>Erată</b>

Până luni, când voi uploada o versiune actualizată cu adăugiri şi corecturi:

  • La pagina 6, referitor la energia întunecată, în loc de ,,materia nu este numai omogen distribuită ” se va citi: ,,energia întunecată nu este numai omogen distribuită”. Ştiu, ştiu, diferența e subtilă.

Probleme de bazele electrotehnicii?

Conform dashboard-ului, s-ar părea că în fiecare zi primesc cel puțin cinci sau șase vizite în urma căutării după ‘probleme bazele electrotehnicii’ (sau asemănătoare). Asta e de așteptat acum, în timpul sesiunii, dar treaba pare a fi relativ constantă (e.g inclusiv în mijlocul lui iulie, când în mod sigur nu-i stă nimănui mintea la examene).

Probleme în sine nu am să vă dau. Mie mi s-a recomandat la seminar o culegere al cărui nume și autor nu l-am reținut; n-am lucrat din culegeri, în schimb am lucrat temele de la seminar. La examen am luat 9 dintr-o prostie (de fapt ceva între lapsus, prostie și lipsă totală de chef — era ultimul examen și îmi era absolut lehamite), asta fără a lucra în mod special niște probleme. Dar, pentru cine are nevoie de sfaturi în domeniu, ca să nu vă mai chinuiți vizitându-mi zilnic blogul numai ca să citiți poezii, iată-le pe ale mele, cu precizările însemnate la coadă.

  • Problemele pe care le-am avut eu s-au înscris, în mare, în câteva categorii:
  1. Probleme de câmp electric coulombian. În principiu, aici cam toate se puteau rezolva bine-mersi cu teorema lui Gauss, singurul lucru cerut fiind un pic de creativitate matematică la alegerea suprafețelor de integrare pentru obținerea fluxului. În particular, “abuzul” de suprafețe infinite nu e lipsit de sens — atâta vreme cât reziști tentației de a simplifica imediat tot ce se poate simplifica. Vezi și un pic mai jos.
  2. Probleme de câmp magnetic. Deși teorema Biot-Savaut-Laplace e foarte neprietenoasă, sunt probleme care nu se pot rezolva în mod rezonabil cu teorema lui Ampere. Prin urmare, metoda pe care am ales-o în final a fost ca, dacă nu este imediat evident cum se ia curba de integrare pentru a afla tensiunea magnetomotoare, să abandonez ideea și să lucrez problema “bătrânește”.
  3. Probleme “mixte” (e.g. curenți induși de câmpuri magnetice). Problemele de genul ăsta sunt clasice, în genul cutare conductor e parcurs de cutare curent. Lângă el se află un cadru de cutare formă… etc.. Mie unuia mi s-au părut simple, singura măgărie considerabilă fiind să judeci cu atenție cine ce câmp produce.
  4. Probleme de circuite magnetice simple. La nivelul la care am lucrat noi în anul I, nici astea nu mi s-au părut spectaculos de grele. Singurul sfat util pe care-l pot da e rezolvarea “în litere” a problemei atunci când se cer inductanțele (formulele inductanțelor mutuale au nevoie de expresiile analitice). În rest, numai de bine.
  • Problema pe care am avut-o și eu la început a fost să înțeleg care-i ideea cu aplicarea formulelor “în vectori” (e.g. formula lui Coulomb pentru intensitatea câmpului electric) pentru a obține valori “în numere”. S-a dovedit a fi mai simplu decât mă așteptam. De pildă, în cazul câmpului electric produs într-un punct anume de un conductor filiform de lungime dată, se ia pur și simplu câmpul produs de fiecare parte mică a conductorului (i.e. o diferențiere) și se adună (i.e. o integrare).
  • Partea matematică pare fioroasă, dar nu este; în schimb, trebuie să înțelegi ce este și ce reprezintă fiecare noțiune utilizată (și-s puține — vectori, proiecții de vectori, produse vectoriale și scalare, integrale curbilinii și de suprafață), dincolo de banalul “cum se rezolvă integrala”.
  • Problemele în sine pe care le-am lucrat înainte de examen au fost puține și practic le-am reluat pe cele de la seminar; în schimb, mi-am făcut temele de fiecare dată, profitând de faptul că nu au fost prea multe și nici foarte grele.

Precizări: cursul meu s-ar putea să fi fost întrucâtva atipic. Pentru referință, sunt student la Inginerie Electrică (fosta Electrotehnică) din cadrul universității Politehnica București. Profesorul meu de curs a fost d-l prof. Cezar Fluerașu, care e un profesor absolute excepțional, în asemenea măsură în care nu am chiulit de la niciun curs de-ale dumnealui (ceea ce, pentru mine… e ceva :-D ). Parțial din lipsă de timp, parțial pentru a nu se repeta, am studiat mai mult bazele teoriei câmpului electromagnetic. Mult mai puțin am vorbit despre teoria circuitelor, pentru că oricum ceea ce trebuia să ne învețe știam, în parte, din liceu, iar în anul II noi avem un curs dedicat, foarte bine pus la punct, de teoria circuitelor. Numele profesorului asistent îmi scapă acum (nu cred că s-a prezentat, de fapt). Eu m-am înțeles bine cu dumnealui și mi-a plăcut stilul de predare. Aparent, am fost cam singurul :-D .

Un măgar încearcă Windows

Întrucât încerc să-mi aduc programul de somn în limite normale (a se citi: culcat înainte de opt dimineața, trezit înainte de două după-amiaza), am la dispoziție foarte mult timp pentru a medita la nemurirea sufletului, analiză functională şi alte asemenea probleme existențiale; aseară, tema de meditație a fost căutarea mediului de lucru perfect.

Să mă explic: de mai bine de zece ani de când am de-a face cu calculatoarele, caut sistemul de operare cu care mă înțeleg cel mai bine. Ironic e că BeOS, cu care chiar m-am înțeles cel mai bine, nu mai e prin preajmă, iar Haiku mai are ceva vreme până să-l pot folosi zi de zi. M-am mai înțeles bine cu Solaris şi FreeBSD; rezonabil cu Debian şi Gentoo. Extrem de prost cu Ubuntu, şi din ce-mi aduc aminte, de-a dreptul groaznic cu Windows. Şi totuşi (pentru că, după cum ziceam, am timp…), vreau să-ncerc din nou.

Prin urmare, marcați cu creta în calendar, zgâriați un perete etc., mâine dimineață îmi scot de la naftalină vechiul meu prieten, un Pentium 4 care încă se ține bine, şi îmi încerc norocul.

Mai pe larg: am constatat că relația mea cu sistemele de operare e de fapt destul de superfluă. În ce mă priveşte, poa’ să fie dedesubt şi Windows, şi Mach, şi Linux, şi FreeBSD şi orice alt kernel, că nu mă mişcă nicicum. Aplicații fără care nu pot trăi (şi care să nu fie extrem de portabile) n-am.

Sub Windows am mai lucrat sporadic în ultimii cinci ani — diverse proiecte de programare, am dat de el pe la facultate, m-am jucat Medieval: Total War 2 (pe laptopul stăpânit de taică-miu), dar cam atât. Nu l-am avut instalat pe niciunul din calculatoarele mele de ani de zile, şi nici nu i-am dus lipsa.

De ce vreau să-l încerc din nou? Păi:

  • E mai stabil decât ce ştiam eu. Referința mea în domeniu e Windows 2000, ultimul pe care l-am folosit pe calculatorul meu, şi asta vreme de vreun an cel mult. Cele mai pregnante amintiri le am de la Windows 98. Se înțelege ce insinuez.
  • Aplicații; doar câteva. Pe scurt, Mono e o glumă proastă, vreau să învăț Silverlight şi să joc Total War 2 :-) . Culmea, plângerile cele mai comune (…nu merge Office, de pildă), nu mă interesează: nu prea le am cu jocurile, nu folosesc Word (sau OpenOffice.org Writer, sau orice altceva de genul ăsta dealtfel), nu folosesc Fox Pro etc.
  • …de ce nu. Dacă pot pierde jumătate de zi instalând AROS, pot pierde jumătate de zi instalând Windows.

Îi dau o săptămână timp să mă “convertească” — cine ştie, poate ajung la concluzia că nu mai am nevoie de Mac Mini şi-l vând :-) . Nu-i dau mari şanse însă, pentru că de fapt belelele cele mai pregnante pentru mine nu s-au rezolvat:

  • Dezordinea. Eu sunt maniac. Mă enervează când aplicațiile îşi aruncă fişiere alandala. Sub *nix pot să şi le arunce oriunde — am un package manager. Sub OS X ştiu unde şi le aruncă şi pot face curățenie uşor (şi oricum, de vreme ce le instalez şi le folosesc ca regular user, restul discului rămâne neatins — cu câteva excepții, dar nu e deranjant). De asemenea, mă enervează inventivitatea directorului personal, care nu este /home/măgarul, nu este /Users/Măgarul, ci, for fsck’s sake, C:\Documents and Settings\Măgarul. Până scriu cârnatul ăla într-un terminal…
  • …care terminal, de fapt. Mă enervează lipsa unui shell de Doamne-ajută, cu instrumente care să-l facă şi util. Sunt o grămadă de lucruri pe care le pot face foarte uşor dintr-un terminal, dacă am cu ce, şi asta mult mai repede decât trecând prin toate ferestrele alea. A se adăuga celelalte probleme cronice ale cmd.exe. Nu, n-am încercat PowerShell.
  • Mentenanța. Eu am lucruri mai bune de făcut decât să pierd n ore pe săptămână căutând viruşi şi troieni, optimizând şi curățând sistemul şi regiştrii, updatând drivere şi alte asemenea. Nu mă interesează *de ce* se întâmplă asta (i.e. puteți să vă păcăliți în continuare că Windows e mai folosit şi e normal să aibă mai multe asemenea probleme); indiferent de meritele tehnice ale sistemului, prezente sau absente, singurii antiviruşi pe care-i ştiu sunt TBAV, Norton Antivirus şi NOD32. A se observa că TBAV e-n cap de listă.
  • Interfața. Ok, să zicem că se poate sări peste asta. Sunt blindat, am folosit Gnome.

Urați-mi succes :-) .

Sometimes I hate being a geek #2: Nu pot să-l vând

Acum vreo trei sau patru zile, mi s-a pus pata. O să-mi vând Mac Mini-ul, ziceam, şi-mi iau în locul lui un Powerbook G4 sau un Macbook; n-aş vrea Macbook din cauza plăcii integrate comparativ cu ATI-ul Powerbook-ului; în schimb, Powerbook-ul care mă tenta (cu ecran de 12″, că vreau să-l car în geantă, nu în geamantan) avea un singur slot SO-DIMM, deci maxim 1.25 GB RAM (bun aşa! You go, Apple!).

Ei bine, dracu să-l ia de Mac Mini dacă pot să-l vând. Am primit vreo două oferte nu foarte ferme, şi-ntrun sfârşit am zis că poate merge dacă postez, ştiu eu, pe macuser.ro şi pe okazii.ro. Am făcut poze, m-am apucat să scriu anunțul…

Nu merge, domnule, nu merge şi pace. Drăcia aia mică de pe biroul meu zici că-i fi-miu şi nu l-aş da nici pe un Macbook Pro. Nici pe două. Hell, nici pe două Macbook Air, pe care le-aş putea vinde ca să-mi iau un Macbook Pro şi mi-ar rămâne şi un profit. [Edit: nu ştiu dacă am mai spus asta, dar MB Air mi se pare un notebook atât de idiot, încât singurul lucru care-i lipseşte ca să fie cu adevărat inutil este Vista preinstalat)

Aşa cum nu pot să vând niciunul din calculatoarele de care, într-un fel sau altul, m-am ataşat. Asta include vechiul meu Pentium 233, un mai vechi Pentium III pe care mi-am desfăşurat diverse experimente şi care, culmea, încă merge, ceva mai noul Pentium IV pe care l-am folosit până mi-am luat mini-ul, HP 620 LX-ul (pe care l-am scos la vânzare şi, din fericire, n-am primit nicio ofertă), şi soarta asta o să o aibă şi Palm Z22-ul pe care l-am luat azi (mersi, huk!). Naiba s-o ia de treaba, în ritmul ăsta ajung depozit.

Trei lucruri pe care le-am învățat din mitologie

…dar mi-au folosit mai adesea în programare.

  1. Toate limbajele au aceleaşi idiomuri, doar că le zice altfel. Yahweh, Allah, Ahura Mazda — tot aia e. În afară de momentele când am de-a face cu LISP, orice aş scrie seamănă a cod maşină până la urmă.
  2. Pentru orice limbaj, există cel puțin 100 de alte limbaje care sunt la fel în proporție de 75%, dar se pretind Adevărul şi Calea numai datorită restului de 25%.
  3. Programarea e una, limbajul X sau Y e alta.

« Articole mai vechi