Category Archives: daily CPM

Despre MySQL si soundex

Deci MySQL … Sincer sa fiu, in disputele religioase MySQL vs PostgreSQL, sunt de obicei de partea Postgres, dar fortat de imprejurari in general trebuie sa utilizez MySQL (impotriva bunului meu simt, of course). Anyway, pana acum nu am avut motive chiar asa serioasa sa ma irite MySQL. Pana acum.

De curand intr-un proiect care-l “repar”, aveam o pagina care lista niste aeroporturi in functie de inputul utilizatorului. De exemplu daca introduceai “paris”, respectiva pagina iti lista cele cateva aeroporturi din paris si inca vreo 7 – 8 din lume care erau “asemanatoare” ca nume.

Problema e ca rezultatele erau foarte aiurea in unele cazuri, si nu intelegeam de ce. O scurta privire in codul primitiv si prostesc care domneste in acest proiect mi-a dezvaluit modul destul de simplu in care se facea operatiunea:

in baza de date o tabela stoca o lista de aeroporturi care avea in nume si orasul (utilizatorul urma sa caute dupa oras), si folosind functia SOUNDEX, lista toate inregistrarile alea carui SOUNDEX era identic cu cel al stringului cautat. Destul de normal .. aparent.

SELECT ID,Code,City, Airport, Country FROM airports WHERE Soundex(City) = SOUNDEX(\”$deptArpt\”)

Problema e ca “baietii de la mysql” au hotarat ca nu are sens sa urmeze algoritmul de soundex din manual, ei sunt mai destepti si algoritmul lor nu se opreste dupa 3 numere identificate, ci merge pana la sfarsit. Ideea pare ok, pana iti dai seama ca in felul asta “new york airport” si “new york” au scoruri diferite, which really sux. De aici veneau problemele – soundex este destul de inutil in forma lui initiala.
O posibila rezolvare ar fi sa pastrez doar primele 3 numere si sa le ignor pe restul, ceea ce am si facut. Insa inainte am calculat toate soundex-urile intr-un camp suplimentar  (soundscore) pentru a usura load-ul in timpul functionarii.
O alta problema a fost “similitudinea”. Un SGBD inteligent ca Postgres are o functie care se cheama similarity si care iti returneaza un scor care il poti folosi pentru a regla cate rezultate primesti. MySQL … normal ca nu are asa ceva. Eu aveam nevoie si de acest comportament, asa ca am scos prima litera din rezultatul soundex (care arata ceva de genul P345, unde P e prima litera a stringului), si am facut o comparatie a diferentei intre scorul initial si scorul stringului cautat.
Adica ceva cam asa:

select ID,Code,City, Airport, Country from airports where ABS(CAST(substring(soundex(\”$deptArpt\”), 2) as SIGNED) – soundscore) < 5 AND substring(soundex(\”$deptArpt\”), 1, 1) = soundletter

Ultima comparatie este necesara pentru ca prima litera este esentiala in acest tip de cautare.
Bun asta cam imi rezolva problema, pot stoca rezultatele in soundscore pentru ca lista de aeroporturi este statica. Oricum … MySQL … pula mea …varza.

GET si POST

Postul asta ar trebui citit in primul rand de “baietii de la wordpress”. Se pare ca ei nu au auzit de faptul ca & este folosit in stringul GET ca separator, cel putin de php in care aparent e scris wordpress-ul.

So, daca va uitati parola cumva si dati click pe “lost password”, sunt anumite sanse ca, algoritmul inteligent din spate ca genereaza o cheie random, sa genereze printre caractere si &.
Solutia? Editez in baza de date cheia utilizatorului, ii scot & si intru pe linkul de resetare cu & scos.
Daca va intrebati de ce nu am rescris pur si simplu parola din phpmyadmin, motivul e ca, la prima vedere stringul de acolo nu parea md5 (nu avea lookul de md5), deci mi s-a parut ca probabil folosesc un algoritm custom (sper ca macar e o transformare ireversibila ca md5, nu m-ar mira nimic).

Baietii de la Hotmail?Sa ma suga de pula!

Cam asa ti-as raspunde daca m-ai intreba acum ce parere am de cei care au scris/configurat/decis politica de functionare a serverului de mail hotmail.com. Sa va povestesc de ce …

Ma intorc in timp acum 3 saptamani: pe ansamblu aveam o parerea buna despre Hotmail, chiar daca mi se cam rupea … 5 gb spatiu, interfata web 2.0 ala gmail (chiar mai eleganta as zice eu), etc etc.
Totusi aveam o problema minora cu acesta. O aplicatie mai veche scrisa de mine, care trimite e-mailuri de inregistrare, de confirmare a comenzilor. Aplicatia a fost intarziata destul de mult, dar in sfarsit era aproape de gold, ca  sa zic asa. Mai ramasese de rezolvat o problema minora – unele e-mailuri nu ajungeau la conturile de test de pe hotmail/live. De ce hotmail? Pentru ca potentialii si viitorii clienti se pare ca erau fani, nu era treaba mea de ce, ideea e ca trebuia sa reduc frecventa acestor fenomene.

Initial nu mi-am pus prea mari probleme, eram 99% convins ca e-mailurile ajungeau in junk folder si deci trebuia doar sa mai scot anumite keywords ceva si urma sa se rezolve. Dar .. surpriza … e-mailurile nu ajungeau deloc. Mai grav era ca era random, cateodata ajungeau (in junk) cateodata bine, cateodata deloc.
Inca sigur pe mine, am vorbit cu sysadminul sa-mi confirme ce raspunsuri are de la serverul hotmail pentru cateva e-mailuri care am constatat ca  nu au ajuns: surpriza surpriza, serverul raspundea cu “Sent”.


Jun  2 04:22:57 ZIP1 sendmail[3267]: m52BM8Ki003227: mailto:to=do******@**ve.com, mailto:ctladdr=<censored> (528/100), delay=00:00:14, xdelay=00:00:01, mailer=esmtp, pri=120028, relay=mx1.hotmail.com. [65.54.244.136], dsn=2.0.0, stat=Sent ( <mailto:20*************************@***********ed.com” data-original-string=”ueYxxQ9pNSVLJAxk9M3Xow==a8b0LoQfrxusc7b6rfg/VKwh/D2mpTc/XgRmVyp7/fHVnHcRCqLm9PWx8+nIqD3HY40QisdU8kzfcSOpzyQ+xamAxj6Rx2zKVOKUhr5XYYTAFYryxzpnxHTRwDXUcPo51eFFyuO8cxXhuEWoMXmPvAvP+PEMydczhkHrQWuG96uHqbYiz8z7mmUEsKh8mil1VAbhlHSAwqgnysy1U54PmhjnbDxPNf4PdGGAvp2O2B00reSWuGEToeSaEF9YNVTSuxeiqK5Pk5P/k9rqVFmLblqUFXbJrBhCqlBDmAT/gsDkjjWYiyV5K7Yd9jj8sCF8H18PBM86bToFtkmDqju6qQxv2mnAkB4rB+wtyoA1lamivQ=” title=”This contact has been encoded by Anti-Spam by CleanTalk. Click to decode. To finish the decoding make sure that JavaScript is enabled in your browser.> Queued mail for delivery)

Moment in care am inceput sa caut pe google, si incet, incet o problema de dimensiuni galactice a inceput sa se dezvaluie: hotmail e cu muia. Ca intr-un film prost cu hackeri, pagini dupa pagini de solutii care nu merg, de idei stupide si mai ales disperare se derulau prin fata mea. Se pare ca:

1) serverul de mail utilizat NU suporta RFC. De aia nu zice nimic cand te fute …

2) Microsoft foloseste Symantec BrightMail, un software antispam. Care are prostul obicei de a sterge potentialul spam fara nici un avertisment. De aia nici nu ajunge in spam.

3) Filtrele lor sunt superaiurea, multi se plang de comportament imprevizibil. Probabil ca se mai joaca cu ele, le ajusteaza, dar ideea e ca au mult false-pozitive ceea ce e .. naspa.

Totusi mi-am zis, nu se poate ca Microsoft sa nu fi conceput macar niste solutii pentru asa ceva. Si intradevar, dupa cateva zile am rasuflat usurat: descoperisem  Smart Network Data Services. Acesta ar fi un serviciu prin care poti sa urmaresti ce face Hotmail cu mailurile venind de la un anumit IP(care poti sa-l controlezi), de ce le considera spam, etc . Dar vai … problema e ca dupa ce mi-am facut cont cu ipul serverul de mail, am constatat ca nu merge. Adica nu am nici o valoare .. nicaieri. Si totusi, serverul lor de mail raporta fericit de fiecare data ca a primit mesajul … futui.

Am verificat si incercat de 15k de ori: serverul meu trimite headere calumea, are reverse dns, e trimis prin smtp, userul exista. Nimic. Oricare alt serviciu gratuit nu are nici o pb, chiar si google care le mai baga intr-un timp in Spam.

Singura solutie care se intrevede este mult prea josnica ca sa ma gandesc la ea: microsoft are un “parteneriat” (probabil ca e o firma fantoma) cu o companie care ofera un serviciu de whitelisting. Platesti o suma (1000 $ pe an), si poti sa trimiti un numar de e-mailuri in hotmail si se garanteaza primirea. Dar sa nu fie spam … yeah right. Nu imi vine sa cred ca, avand problemele care le au, au curajul sa-ti ceara bani ca sa poti sa le trimiti e-mailui, e o forma de santaj pe fata.

Asa ca, acum, daca ma intrebati ce parere am despre baietii de la Hotmail o sa va raspund ca-n titlu: sa ma suga de pula!

Anal-ize anal-ytice

Din curiozitate profesionala, ca sa zic asa, pentru acest blog si pentru fratele lui, snowunderstarlight.com, mentin conturi pe google analytics. In felul asta pot si eu sa vad de unde sunt/ce cauta cei cateva sute de vizitatori lunari :). Dar nu despre numarul lor e vorba.

Asadar, ieri nu am avut ce face si m-am uitat la lista de keyworduri pentru snowunderstarlight.com . In afara de obisnuitele keywords ca “bubulu avalansa”, “casca de ski” si altele pe domeniu, a aparut si un dubios “am fost fututa”. Daca ar fi fost vorba de acesta, unde regulat intalnesc keyword-uri ca “femei bune de futut”, “muie” si tot tacamul, nu m-as fi mirat, dar pe celalalt mi se parea cam fortat.

Iau keyword-ul, il bag in google si ma uit … pagina 8. Intre “fofoloanca.com” si “escort-romania.ro” era un post al meu, in care ma plangeam ca zapada era fututa, ca urmare am fost pe alta vale. Din atata lucru, google a considerat ca, daca ai fost fututa si ai probleme sigur le rezolvi pe blogul meu. Semantic web, where the fuck are you?

La fel de bolnav este si faptul ca cineva a fost fututa, si a mers pana in pagina 8 de rezultate ca sa afle solutia, care pm o fi aia. Nu mai zic ca ca tot pe acolo era si un link din arhiva de cautari a site-ului www.crestinortodox.com intitulata “futute in cur”. Faptul ca vrei sa faci SEO stocand rezultatele de cautare nu cred ca scuza ….

url cu futute in cur

Reclame localizate

Un trend destul de comun in ultimul timp este de a oferi reclame web localizate in functie de ip-ul vizitatorilor. De exemplu in orice site porn 2.0 respectabil vezi tot felul de pizde din “Otopeni”, “Mogosoaia” sau alte orasele/sate pe care softul le gaseste pe o raza X in jurul Bucurestiului. O alta forma este cea oferita de classmates.com, care inscrie in mod elegant capitala noastra in lista statelor americane, pentru a gasi “Highschools” in Bucure’ti.

bucureti