Category Archives: diverse

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.

zburai

Ieri, tehnic vorbind, fusei sa ma dau cu avionu’ prin munti.

Plecarea a fost de pe aerodromul Banesti, adica o bucata de pamant semiplata cat sa poata decola si ateriza un avion mai micut asa. Treaba asta vroiam s-o fac de mai multa vreme, da ieri am prins ocazia si am zis sa n-o ratez.

Uitai ce model era avionu, da era unu din asta de 2 persoane, pentru vazut chestii.

Ajunsei acolo, cautai pilotul, facuram cunostinta, asteptai sa faca o pana la roata, sa puna niste benzina in avionas si aia fu. Centura de siguranta din aia in mai multe puncte sa te tina indiferent de cum te invarti si hai sa vedem chestii.

Decolarea fu fara evenimente, intrat pe “pista”, dat gaz, tras de mansa spre mine si decolaram.

Dupa ce ajunseram la vreo 500m asa cred, zise nenea ca hai sa vezi si tu cum e. Imi explica cum se face sa carmesti avionul si dupa aia facui si io cateva exercitii de stanga-dreapta, adica inceput un mic tonou, dar compensat cu coada ca sa nu se lase prea tare intr-o parte avionul, revenit, si spre stanga aceeasi chestie. Dupa aia coborare, urcare, chestii de baza.

Prima oara cand fusei singur la mansa fu asa un pic tricky, da dupa aia incepu sa imi placa si daca n-ar fi fost ilegal, n-as fi avut o problema sa-i dau un cot un gura la pilot sa se odihnceasca si el un pic cat mi-as fi facut de cap cu avionul lui :))

Traseul a fost ceva de genul: mergem in munti, adica: Comarnic, Sinaia, Busteni, Predeal, spre Rasnov si intors pe la Babele si pe la crucea aia de la Caraiman.

Vazui muntii de sus si de aproape, niste ciobani cu oile la pascut in pula cu satelitul, ca erau asa departe de civilizatie de nu credeam ca s-ar duce pana acolo pe pasune. Am facut cu mana la niste turisti pe la cota 2000 ca am trecut aproape de tot de ei.

O bucata de urcare am facut-o inclinat si urcand asa, de parca eram pe o scara din aia rotunda cum se gaseste prin casele vechi.

Dupa aia la intoarcere a oprit pilotul motorul sa auzim natura si sa planam incet spre aerodrom. Cum nu era prea bine izolata fonic carlinga, se auzea fasaitul aerului pe langa noi ca aveam un pic de viteza. Aterizarea a iesit a doua oara, a prima oara era un nenea pe “pista” si nu era o idee buna sa ne intalnim cu el.

Pentru ca avionul asta n-avea amortizoare, la aterizare fuseram ca in desene animate: boing, boing, boing de pamant. Daca n-as fi avut centurile de siguranta, ma faceam omleta dandu-ma cu capul de tavanul carlingii.

Data viitoare spre sa prind un avion din ala de acrobatii, sa imi dea sa zac la stomac, dar sa fie mega cool de facut tot felul de combinatii in aer.

 

Senzatia asta de liberatate cand esti in aer acolo si nimic pe langa tine este incredibil de tare, sa stii ca poti sa faci ce vrei, cum vrei si de cate ori vrei. Bine, sa te tina si avionul si gazul :)

Pacat ca si pentru treaba asta iti trebuie permis, ca altfel ar fi misto sa dai bani la unu, sa-ti dea avionul si sa te plimbi pe unde nu’s oameni sa nu faci paguba daca il dai de pamant.

phoenix

phoenix

Filmul asta este un fel de documentar cu subiect si predicat in care se arata ca femeile sunt duse si ca rationamentul nu exista pentru ele :)

Probabil un “critic” de film ar gasi o explicatie din aia grea ce tine de psihologie. Dar nu, “e” nebune.