Category Archives: diverse

twnagdfs

…sau cum sa zic pe scurt la “today was not a good day for science”.

Prima.

De dimineata era prima zi de condus dupa 30 de zile de pauza ca se mai intampla chestii. Ma trezesc io bucuros nevoie mare ca iar masina, deschid, pun rucsacul in portbagaj, pun contactul, imi faceam planul de ce traseu o sa am sa ajung sa-mi iau si permisul de la politie, apas pe cheie si… pula. Masina n-a mai pornit. Ca a ramas fara baterie. Noroc ca inchisul usilor nu consuma asa multa baterie. O iau spre tramvai sa ajung la Udriste. Il ratez la mustata si mai stau vreo ~10min sau mai mult sa vina urmatorul. La statia unde trebuia sa cobor aproape ca uitasem sa fac asta si am prind asa cam in ultima clipa. Ajung, iau permisul, ma uit la el: my preciousss, how much I’ve missed you. De acolo traseul logic era pana la Unirii. Mi-era foame asa ca intru la KFC sa vad cum e micul dejun, ca pe ala de la Mc il stiu. Era mai bine sa nu fiu curios. Dupa aia ma mai gandesc io si ajung la Starbucks sa-mi iau o cafea ca aia de la noul birou e oribila. Initial ma gandeam al una la filtru, da eram deja trezit de draci, asa ca mi-am luat un grande latte ca nu mai bausem de ceva vreme. Ajung la metrou, ascult cu atentie ce zic anunturile din tren. Eu trebuie sa ma dau jos la Semanatoarea, dar cum am inteles pe dos anuntul cu unde merge metroul am ajuns la Polithenica. Noroc ca acolo ajungea in statie ala spre Eroilor si la fix m-am dat jos tacticos dintr-un vagon si m-am suit in alalalt. Poker face. La Eroilor am uitat pe care parte se da lumea jos sa schimbe si era sa mai merg un pic. Intr-un final glorios am ajuns la birou.

A doua.

Asa un pic inca aiurit, zic sa ma uit la ce face un sistem care de vreo 2-3 saptamani rajnea la  scris niste fisiere de cache pentru o duda de GIS. Era crapat sistemul de cache cu “No space left on device”. Dau df, ~30% spatiu ocupat. Imi aduc instant aminte cam cat de mari sunt fisierele alea, ii zic de morti, raniti, cruci si ce ma-sa mi-am mai adus io atunci aminte. Nu mai erau inozi. Bine, mai era unul care scapase liber, da’ nu se pune. Si uite asa s-au dus, pe pula evident, ~67 milioane de fisiere si aproape 3 saptamani de munca. De ce? Ca in alt loc nu aveam unde sa le pun si cum EXT4 nu te lasa sa mai umbli la inozi, asta e, o sugi pe ascuns sa nu se prinda lumea ai fost prost ca nu te-ai gandit la inceput cand ai facut filesystemul ca o sa ai jde milioane de fisiere. Acu sper sa-i ajunga 260milioane de inozi.

A treia.

Pentru ca Murphy, dupa ce s-a muit ala, acu nu mai merge nici un alt proces care are legatura doar partiala cu cache-ul: daca are bine, daca nu cere upstream. Acu crapa si ala in dusmanie. Probabil trebuie sa ma prind si cum merg thread-urile in Python, ca pe acolo se beleste ceva si nu stiu ce. Cand l-am pornit pe ala prima oara, nu avea cache si nu crapa. Acu n-are cache, da crapa. Cine dracu’ o mai intelege si treaba asta cu calculatoarele, nu stiu.

Acu stau sa ma gandesc daca sa ies din casa sau nu, ca as mai avea niste chestii de facut, da “shit hit the fan” azi si nici macar n-a fost marti. Maine as baga-o pe aia cu “I have anal glaucoma” ca e marti si dupa ziua de azi, maine poate explodeaza ceva.

the man rules

1.   Men are NOT mind readers.

1. Learn to work the toilet seat. You’re a big girl. If it’s up, put it down. We need it up, you need it down. You don’t hear us complaining about you leaving it down.

1. Crying is blackmail.

1. Ask for what you want. Let us be clear on this one:
– Subtle hints do not work!
– Strong hints do not work!
– Obvious hints do not work!
Just say it!

1. Yes and No are perfectly acceptable answers to almost every question.

1. Come to us with a problem only if you want help solving it. That’s what we do. Sympathy is what your girlfriends are for.

1. Anything we said 6 months ago is inadmissible in an argument. In fact, all comments become null and void after 7 days.

1. If you think you’re fat, you probably are. Don’t ask us.

1. If something we said can be interpreted two ways and one of the ways makes you sad or angry, we meant the other one.

1. You can either ask us to do something or tell us how you want it done. Not both. If you already know best how to do it, just do it yourself.

1. Christopher Columbus did NOT need directions and neither do we.

1. ALL men see in only 16 colors, like Windows default settings. Peach, for example, is a fruit, not a color. Pumpkin is also a fruit. We have no idea what mauve is.

1. If it itches, it will be scratched. We do that.

1. If we ask what is wrong and you say “nothing,” We will act like nothing’s wrong. We know you are lying, but it is just not worth the hassle..

1. If you ask a question you don’t want an answer to, expect an answer you don’t want to hear.

1. When we have to go somewhere, absolutely anything you wear is fine… really.

1. You have enough clothes.

1. You have too many shoes.

1. I am in shape. Round IS a shape!

— e ciordeles de pe undeva de pe internet, nu mai stiu de unde. sue me.

double failures

In anii astia de acum (adica 2014/2015) eu nu pricep de ce vreun producator de echipamente ar face doar echipamente cu o interfata “IN” si una “OUT” si desi face clustering, nu poti face agregare in nici un fel astfel incat sa ai protectie in caz de pica switch-ul A si echipamentul B (incrucisat adica). Complicat nu este, mai ai un nivel de abstractizare cu impact minim ca toti linucsii astora de fac “appliance”-uri stiu de bonding si alte crapuri.

Srsly, nu pricep de ce toti zic, eh, lasa ca te descurci tu cum faci asta, noi nu vrem sa te ajutam in nici un fel, noi punem cat mai putine interfete pe chipamente si aia e.

Scapi de nenumarate griji cu un setup din asta, se pot strica chestii si poti sa-ti vezi de ale tale pana ai timp sa le repari tot asa… dar nu, s-au gandit unii ca de ce sa fie simplu cand poate sa fie complicat.

Asta e un rant de voiam sa-l zic de mai demult, de prin mai, da a trebuit sa fixez ce era muit si am uitat de el. Priorities, priorities.

ip number

Well, se pare ca m-am prostit si am descoperit niste roti patrate. Noroc ca #mumu e vigilent si imi zice cand sunt prost. Cred ca trebui sa raman la consultanta, nu la chestii din astea de implementare.

SELECT city,country FROM geoip_v4 WHERE
ip_from <= inet_aton('10.20.30.40')
AND
ip_to >= inet_aton('10.20.30.40');

Dar pentru istorie, ca sa mai rada si altii de ce chestii debitez cateodata, ramane si textul initial, cu mentiunea:

<rpetre> ce credeai ca e formula aia magica de ip to number? :)

Exista niste unii, care se cheama IP2Location de vand informatii de IP GeoLocation, adica pe scurt iti zic in ce oras/tara este inregistrat un subnet. Ei datele astea le dau CSV sa le incarci in ce vrei tu si dupa aia sa faci cautari in ele.

Pentru ca nu toate bazele de date au IP/subnet ca tip de data, daca te uiti dupa o singura adresa IP si tu tii subnet-uri in DB trebuie sa faci niste programare la mijloc sa afli de al cui sunbnet apartine o adresa IP. Asa ca oamenii astia au inventat ei o chestie de se cheama IP number: adica transformi 1.2.3.4 intr-un numar dupa o formula si dupa aia vezi tu cam intre ce valori se situeaza numarul ala in baza de date si afli cum ii cheama pe aia de-l utilizeaza si unde sunt inregistrati.

In baza de date informatiile sunt tinute sub forma de IP_FROM, IP_TO, CITY, COUNTRY plus alte chestii irelevante pentru post-ul asta. IP_FROM e numarul de la care “pleaca” un subnet si IP_TO numarul unde se “termina” subnetul. Formula dupa care se calculeaza IP number este:

X = A x (256*256*256) + B x (256*256) + C x 256 + D

In SQL (PostgreSQL* compatibil), un lookup dupa 10.20.30.40 se transforma in:

SELECT city, country FROM geoip_v4

WHERE ip_from <= 

((split_part('10.20.30.40','.',1)::INT * (256*256*256))
+
(split_part('10.20.30.40','.',2)::INT * (256*256))
+
(split_part('10.20.30.40','.',3)::INT * 256)
+
split_part('10.20.30.40','.',4)::INT)

AND ip_to >=

((split_part('10.20.30.40','.',1)::INT * (256*256*256))
+
(split_part('10.20.30.40','.',2)::INT * (256*256))
+
(split_part('10.20.30.40','.',3)::INT * 256)
+
split_part('10.20.30.40','.',4)::INT)

<= si >= ajuta sa faci match pe adresa de retea si pe broadcast daca stii exact unde ma-sa se termina subnet-ul pe care-l cauti si daca chiar vrei asta, altfel e bine doar cu < si >.

Cast-ul la INT l-am pus ca baza de date imi facea cast in FLOAT dupa care il compara cu INT si ca sa-l compare mai facea un cast din FLOAT in INT. Am sarit un pas, ca profilerul pentru acelasi query zicea ca dureaza ~500msec sa se uite in 11M de inregistrari (beware of my small data) pentru VARCHAR::INT si vreo 45sec sa se uite tot acolo dupa VARCHAR::FLOAT::INT. E un pic dubios rezultatul de la profiler pentru ca nu cred ca dureaza asa mult sa te faci ca n-ai nimic dupa virgula, dar si faptul ca daca rulezi un query cu cele doua variante diferenta ochiometrica intre ele e de maxim 2 secunde.

Pe de alta parte, nu-s mare fan ideii de “la mine pe laptop merge”, mai adaugati voi hardware sa mearga repede si la voi.