bilet de dat

Am primit zilele trecute (de ziua mea) un bilet la BestFest (sau cum se scrie) pentru azi, sambata 4 iulie. Desi in conditii normale mi-ar fi placut sa merg sa-l vad si aud pe Carlos Santana live, a intervenit ceva si nu mai pot merge. Daca astazi citeste cineva interesat chestia asta, e rugat sa-mi dea un mail (rpetre la gmail.com) pana in ora 18.

zeama de sed

Sed e un instrument fenomenal, dar n-am apucat niciodata sa invat suficient de bine lucrul avansat cu el. De exemplu, cum sa procesez mai multe linii deodata. Am avut ocazia sa ma joc cu asta ieri, cand pe #mumu a aparut urmatoarea problema:

Q: se da un fisier care din loc in loc are linii care contin doar "1". Se doreste ca acel 1 sa fie concatenat la linia anterioara, adica 'mumu\n1\n' sa devina 'mumu 1\n'. Preferabil cu sed ;)

A: Se constata relativ repede ca nu prea merge cu s/\n1\n/ 1\n/, pentru ca sed citeste fisierul linie cu linie si \n-urile dispar pana in faza de match. Solutia ar fi sa citesti cate 2 linii, si daca a doua indeplineste conditia, sa operezi pe amandoua. Dat fiind ca aseara pe tren am avut priza dar n-am avut internet, m-am inspirat de prin exemplele din info sed si am produs urmatoarea chestie (am inclus si ceva comentarii, probabil insuficiente pentru cineva care nu stie sed de loc, dar daca e nevoie de lamuriri suplimentare astept mail):

#!/bin/sed -f
# copiez linia in pattern space
h
#label pentru goto-urile ulterioare
:b
#daca e ultima linie, exit (si implicit print, din lipsa de -n la argumente)
$b
#citesc linia urmatoare si o adaug la pattern space
N
#daca pattern space contine ce trebuie, execut blocul urmator
/\n1$/ {
    # schimb newline in spatiu
    s/\n/ /
    #sar la :b (poate si linia urmatoare trebuie concatenata)
    bb
#am terminat blocul
}
#daca am citit ultima linie, ies, nu mai e nimic de facut
#dat fiind ca sed nu e apelat cu -n, tipareste ce e in pattern space
$b
#daca nu, tiparesc prima linie din pattern space (concatenat sau nu)
P
#sterg prima linie din pattern space si merg mai departe
#(daca a mai ramas ceva in p.s. nu mai citeste din fisier)
D

Nu am pretentia ca mi-e _foarte_ clar sau ca pot sa-l rescriu fara sa trag cu ochiul, am manarit un script din info page, dar face ce trebuie si ia in considerare toate cazurile care mi-au trecut prin cap (linii cu '1' consecutive si ambele cazuri de terminare a fisierului). Anyway, fun!

Link collection

  • city tours de la google labs este foarte tare, stie de Lisabona ;-) o sa-mi fac programul de plimbari pentru august cu el;
  • John Allspaw de la Flickr ruleaza puternic in continuare, ultima lui prezentare m-a uns pe suflet;
  • tot de la google, au dat publica o extensie de ffox care testeaza cat de optimizate pentru viteza sunt site-urile, o gramada de recomandari interesante pana acum.
  • am facut release! please visit peteava.ro si dati-mi de stire daca nu merge (n-am legatura cu designul si codul, doar cu platforma din spate). Daca nu crapa sub trafic zilele astea, pot spune ca e un cadou frumos de ziua mea;
  • dintre cadourile pe care mi le-am facut singur, imi place foarte mult "Scalable Internet Architectures";
  • cum trece vremea dom'le, acu 15 ani daca auzeam ca a murit Michael Jackson as fi fost terminat, acum se pare ca a dat coltul de ziua mea si doar am ridicat din umeri;
  • nu se bea azi, se bea luni.
  • Inca nu m-am hotarat daca mi se pare simpatic XenServer sau suge. XenCenter care e windoze-only si care mai si depinde de .NET Framework spanac trage cu siguranta in a doua directie, dar se pare ca e relativ manageabil si din consola. Probabil ca performanta o sa decida.
  • mai arunc din cand in cand un ochi pe Planet Linux360 (mostly din cauza ca s-au gandit la un moment dat sa ma agrege si pe mine) si vad ca sufera de o boala comuna multor agregatoare: un post care e prea lat strica layoutul. Cunostintele mele de css sunt ruginite (si la ora asta n-am de gand sa fac experimente), dar cred ca se poate umbla la overflow-ul div-urilor de clasa 'entry' sa forteze scrollbars in caz ca depasesc o anumita dimensiune. S-a discutat chestia asta pe Planet Debian mai de mult, dar nu mai am la indemana postul si nu ma prind rapid din view source cum e facut. Update: din cauza ca nimeni in afara de mine nu stia despre ce vorbesc, mi-am dat seama ca smecheria cu scrollbars o facusem in profilul meu de firefox acum multa-multa vreme si am testat si cu planeta linux360. Pe scurt, am facut urmatoarea chestie:
    • am creat in ~/.mozilla/firefox/<my_profile>/chrome/ fisierul userContent.css;
    • am pus in el snippetul asta (damn you wordpress for eating my whitespace):
      @-moz-document url-prefix(http://planet.linux360.ro/) {
      div.entry {
      max-height: 30em;
      max-width: 60em;
      overflow: auto;
      }
      }
    • a, si trebuie restart de firefox ca nu-si citeste fisierul ala decat la pornire

    Dexter, daca vrei, joaca-te nitel cu valorile alea si include-l in css-ul global ;-)

  • despre cum software-ul proprietar te forteaza sa scalezi vertical in loc de orizontal (asta explica atat de multe)...
  • codul sursa trebuie optimizat pentru citire;

Probabil o sa mai editez postul asta cu varii updates de-a lungul zilei.

happy birthday to me

Prin miracolul tehnologiei, acest post va vedea lumina internetului la 12 noaptea, ora la care fie sunt intr-o carciuma, fie lucrez (desi din pacate barometrul pare sa traga puternic spre a doua varianta).

In orice caz, daca ma vedeti in cursul zilei urati-mi la multi ani, dar in soapta, ca am avut o noapte grea :)

Matrimoniala

Echipa de sysadmini cu experienta in proiectarea si intretinerea de infrastructuri scalabile cauta programator(i) cu experienta in web frontends pentru simbioza (si ofertarea unor clienti interesa(n)ti). Brain required.

Ce este load average

Am avut ocazia zilele astea sa am o discutie cu cativa colegi despre ce este load average si cum asta m-a facut sa trec prin niste informatii relativ interesante, simt nevoia sa scriu lucrurile astea undeva in caz ca mai foloseste cuiva.

Practic oricine a folosit un sistem Unix stie despre tripletul de numere numit "load average". Probabil ca traducerea cea mai adecvata ar fi "incarcarea medie", dar practic toti cunoscutii folosesc termenul original (sau hiperneologismul "loadul"), asa ca imi permit sa amestec termenii. Cele trei valori sunt cunoscute si ca "loadul pe un minut, pe 5 minute si pe 15 minute". Foarte multi administratori si utilizatori nu au o idee prea clara ce reprezinta, ci doar ca sunt niste valori zecimale pozitive, afectate de "gradul de incarcare" a sistemului din ultimele 1,5,15 minute. Pe scurt, daca loadul e mare, e de rau. Daca e in scadere, tocmai a trecut raul. Daca nu, ceva trebuie facut.

Cat e loadul corect? La care din cele 3 valori trebuie sa te uiti? Ca multe intrebari similare, raspunsul e frustrantul "depinde". Ca sa lamuresc putin, voi incerca sa explic doua lucruri: ce fel de medie este si a carei valori.

Ca sa incep cu ce e mai simplu, algoritmul de calculare a mediei este asa-numitul EWMA (Exponential Weighted Moving Average, sau pe romaneste, ceva de genul "medie mobila de pondere exponentiala"). Mai exact, se face o medie ponderata a tuturor valorilor trecute ale unui parametru, ponderile scazand exponential in timp (tind exponential la zero pe masura ce te departezi in trecut). Pe langa aspectul practic al functiei (valorile din trecutul apropiat au pondere mai mare decat cele mai indepartate), exista si un avantaj de calcul: functia de ponderi fiind auto-similara, are un 'timp de injumatatire' care permite ca intreg istoricul sa fie pastrat prin aplicarea succesiva a unei constante subunitare convenabil alese. Aici ar trebui sa scriu 1-2 formule, dar sunt deja in articolul de wikipeda despre medii mobile. Care e legatura cu 1,5 si 15 minute, daca functia de pondere se aplica pe tot istoricul? Ei bine, constanta curbei de pondere se alege in asa fel incat mai departe de intervalul respectiv sa scada sub precizia masuratorii (11 cifre binare dupa virgula in cazul kernelului Linux).

Bine, bine, deci cele 3 medii aproximeaza parametrul real si 'netezesc' cumva masuratoarea. Ce reprezinta acea valoare, de fapt? Controversele se nasc din faptul ca acest parametru e masurat nitel diferit in diverse sisteme Unix (si compatibile). Raspunsul ar fi ceva gen 'dimensiunea cozii de procese a schedulerului'. Principala diferenta dintre Linux si alte kernele (cel putin asa stiu, n-am la indemana un BSD sau Sun sau altceva pentru teste sau cod sursa) este ce pe Linux se iau in considerare, pe langa procesele running (R) si cele in uninterruptible sleep (D).

(Inca o) mica paranteza: in Unix, starile in care poate fi un proces sunt, in principiu, running (R), sleeping (S), stopped (T), uninterruptible (D), zombie (Z) si paging (W). In general procesele interactive petrec multa parte din viata in starea S, asteptand sa fie trezite de un anumit eveniment (tastatura, mouse, retea, etc). Pentru rularea efectiva li se aloca acces la procesor, fiind astfel in unele momente in starea R. Interesanta e starea D ceea ce inseamna ca procesul asteapta dupa un device sa termine o operatie de I/O (foarte adesea un filesystem care merge greu), iar pana cand nu termina operatia n-or sa poata raspunde la nici un fel de semnale.

Specific la Linux este ca numara si procesele D pe langa cele R cand calculeaza loadul, asa ca un load mare inseamna fie traditionalul 'procesor incarcat', fie probleme de I/O. Valoarea normala a loadului (in conditii in care nu exista procese care asteapta nici dupa disc, nici dupa procesor) ar trebui sa fie undeva sub numarul de procesoare (da, pe o masina quad, load 4 inseamna ca toate cpu-urile fac ceva).

Pentru cine vrea sa aprofundeze, functia efectiva de calcul a mediilor loadului e in include/linux/sched.h (CALC_LOAD), e apelata in kernel/timer.c (calc_load), care la randul ei numara procesele cu nr_active, definita in kernel/sched.c ca suma a nr_running si nr_uninterruptible pe toate procesoarele, valori care sunt modificate tot prin kernel/sched.c (diverse functii). Interesant e faptul ca nu se recalculeaza mai des de 5 secunde (asta daca am inteles eu corect cum functioneaza timerul).

Daca stie cineva cum stau lucrurile pe kernele non-Linux, let me know.

update

din chestiile pending de ieri si ceva noutati:

  • se pare ca intr-adevar amazon au unificat profilele din site-urile internationale, dar aveam doua profile cu aceeasi adresa de mail, singura diferentiere fiind data de parola. Foarte intuitiv, ce sa zic. In orice caz, mi-am sters profilul ala gresit si mi-am cumparat 3 carti asa de control (sunt curios cand si daca dispar din wishlist), sper sa ajunga pana la ziua mea
  • vorbind de cumparaturi online, sper sa tin minte data viitoare cand mai iau tricouri de la cafepress.com sa aleg delivery-ul ala mai scump sa pot face comparatii. Ala default mi-a ajuns la posta din Pantelimon, chestie care m-a costat 20 RON pe taxi, 1 ora pierduta, deranj cu delegatie de la firma (ultima data cand m-am dus la posta sa iau un pachet livrat in Bucuresti cu buletinul meu de Brasov mi-am luat scatoalce), ca sa nu mai spun vreo 10 zile in plus ca timp de livrare. But I haz new t-shirts ;)
  • a aparut tagul 2.8 in git://github.com/veilleperso/wordpress.git si a inceput si wordpress sa ma anunte ca are update, dar prefer sa ma mai tin poate ma abitionez si migrez tot. Sau macar refac backendul (si mi-l documentez undeva), ca nu-mi place cum mi s-au imbarligat branchurile
  • UPC-ul de acasa si-a pus aseara mtu-ul de 1500. Weird.
  • am inceput sa perfectionez pilaful ;)

random things

Un batch mai mare de chestii pe care nu le dau pe twitter, pentru ca sunt retrograd si lame:

  • sa-i dea Dumnezeu sanatate doamnei profesoare Emilia Mailat care m-a invatat RPN (reverse polish notation) acum 15 ani suficient de bine incat sa-mi foloseasca ieri cand ma jucam cu CDEF-uri in rrdtool (tot ea e "de vina" ca am priceput cum sta treaba cu pointerii suficient de bine incat sa ma descurc cu references in perl, dar asta e alta discutie). Extra: am gasit un site al liceului, putin cam ponosit si nu stiu cat de intretinut, dar plin de amintiri. Sper sa ajung in octombrie la aniversarea a 140 de ani.
  • am bifat azi si biletul de avion si hotelul pentru YAPC::EU. N-am gasit roommate pana la urma, dar chiar si asa, merita sa-mi dau economiile pe conferinta+excursia asta. Abia astept.
  • Cica a aparut wordpress 2.8, dar nu e uploadat inca noul tag in clona de github pe care o urmaresc (si nici wp 2.7.1 n-a inceput sa caraie ca are update). Oricum mi s-a cam acrit de setupul actual de git, s-ar putea sa refac totul from scratch, acum ca am invatat ceva mai bine git. Chiar, daca stie cineva cum faci fetch la taguri noi dintr-o clona de git-svn, sunt interesat, dat fiind ca manualul e cam modest. Si daca chiar ma enervez ma apuc de site-ul ala sa scap de WP ca-i prea web2.0 pentru mine.
  • am descoperit zilele trecute ca UPC-ul de acasa imi seteaza MTU-ul la 576 (!!!), ceea ce explica de ce nu-mi mai merge openvpn-ul de acasa. Probabil zilele astea mi-oi face timp si ma interesez cum e cu mtu si pmtu discovery la openvpn, desi mi-a fost mereu greata de aspectele astea.
  • In other news, aia de la amazon.co.uk mi-au ametit de tot profilul (cred ca au facut ceva consolidare cu site-ul de US), tocmai cand voiam sa-mi iau carti de ziua mea. Oh well, astept sa vad ce zice indianul de la NOC-ul lor, intre timp ma multumesc cu cititul pe Safari Bookshelf.

TTFN (ta-ta for now).

Nu reusesc sa pricep twitter

Mi-am facut cont de twitter acum ceva vreme in joaca si din cand in cand mai postez pe el, dar inca nu pricep niste lucruri:

  • astia din ce fac bani? nu par sa fie reclame pe pagini; e drept, am adblock, dar ei oricum par sa incurajeze foarte tare API-urile si aplicatiile 3rd party, asa ca majoritatea se da de pe telefon sau diverse chestii RSS-istice, ca atare nu par sa fie metode evidente de a lua bani de la useri. Alte site-uri de servicii free au coltisorul de click here to give us money si incearca mereu sa-ti bage pe gat pachetul premium. La twitter n-am vazut asa ceva. Stiu foarte bine ca serviciile astea au costuri grasute, asa ca ma ingrijoreaza grecii care vin cu daruri. Singurele resurse pe care vad sa le stranga sunt reteaua sociala in sine si diverse patternuri extrase din datamining, asa ca ma astept sa vanda in viitorul apropiat afacerea catre highest bidder. In consecinta, ii consider  echivalenti cu spammerii care fac trafic de adrese de mail (poate chiar nitel mai periculosi, pentru ca o fac mult mai targetat). Cu Google am mai putin problema asta, pentru ca ei sunt companie de advertising, fac datamining sa-si vanda produsele lor, ma indoiesc ca o sa-si vanda vreodata db-ul la spammeri.
  • care-i pointul cu followerii? aparent sunt omuleti care cauta anumite cuvinte si fac follow la toti care posteaza. De exemplu putin mai devreme am zis ceva despre apple si m-am trezit in 2 minute cu un follower care chipurile urmarea pe alti 2000. Din ce ma prind, efectul actiunii de follow e ca iti apar update-urile aluia in feedul default si cam atat. Plateste cineva la numarul de followeri or what? E doar yet another e-penis metric?
  • inca nu ma prind cam care ar fi un use case decent. Si eu si colegii mei mai postam cate o chestie de 2 vorbe care nu merita blog post si cam atat. Intre emo kids care posteaza la 5 minute tot ce vad si de PR-iste si new media people care injecteaza ce le zice sefu, e vreun mod decent de a utiliza asta?

Probabil imbatranesc eu si nu mai inteleg tehnologia moderna, da' "pe vremea mea"(tm) sa fii geek insemna altceva decat sa ai iphone si twitter.

new and shiny

Dupa cum ziceam, m-am mutat in casa noua (ma rog, chirie si combinatii cu niste prieteni). Cum proprietareasa mi-a lasat pe mana o bucatarie dotata cu de toate, am zis ca e pacat de Dumnezeu sa mananc tot pizza si saorma, asa ca m-am apucat sa gatesc. Dupa cateva momente penibile gen "nu gasesc cutitele" sau "ce pisici inseamna concret sa calesti ceapa", am apucat sa gatesc cateva cratiti de mancare in ultimile cateva zile si sa ating azi milestone-ul in care sa-mi aduc mancare la pachet la serviciu (si a fost chiar buna!). Ma rog, nimic spectaculos: ciorba, pilaf, mazare. Ma indoiesc ca o sa fac o pasiune din asta, ca mananca o gramada de timp, dar pare sa fie relativ practic. Urmeaza sa vad in vreo luna-doua daca se simte si pe plan financiar, asa cum ma astept (inca n-am facut calcule, ca sunt in faza de experimente).

Urmatoarea chestie pe lista e sa fac "right" reteaua de acasa :)