Hacuind la Wordpress : Asa da, asa nu

Friday, 18 November, Year 3 d.Tr. | Author: Mircea Popescu

Acest articol se preocupa cu matarai tehnice pentru experti. Daca nu sunteti experti si nici nu va intereseaza matarai tehnice, banuiesc ca n-aveti de ce va plinge daca va plictiseste.

Chestia-i cam asa : recentele incercari ale unui pustan anonim de-a face pe desteptul au pus in evidenta o serioasa slabiciune de constructie a wordpress. Ca in general asa merge treaba, cine vrea sa-i faca rau omului destept sfirseste prin a-i face bine, ca vrea, ca nu vrea. Pentru ca nu-i dupa el. (Si idem cine vrea sa-i faca bine prostului sfirseste facindu-i rau tot indiferent ca vrea sau nu, si tot pentru ca nu-i dupa el).

Si-acum : unii dintre noi, ca de exemplu eu, prefera sa afiseze un articol ales intimplator pe prima pagina a blogului. Nu discutam acum ca de ce, pur si simplu asa prefera ei. Chestia asta se poate face, bineinteles, cum am zis acolo in articolul citat. Doar ca Wordpress-ul fiind prost scris, are deosebit de idioata inspiratie (doara codu-i poezie, nu ?) de-a transforma

query_posts (‘orderby’ => rand );

in

SELECT ORDER BY RAND() DESC LIMIT 0, 1

Asa ceva nu se face, pur si simplu, e interzis select order by rand. A, ca pentru blogurile de cinci articole si zece accesari pe zi "merge si asa". Sigur ca da, merge si asa. Trilema are spre cinci mii de articole si serveste binisor peste zece mii de accesari pe zi. Spre o suta, asa. Inseamna asta cinci miliarde de Handler_read_rnd_next pe zi ? Inseamna. Problem.

Asa ca procedam la o micuta modificare :

SELECT COUNT(posts.ID) FROM posts WHERE blabla
SELECT MAX(posts.ID) FROM posts WHERE blabla
$pick = mt_rand(0,$result);
SELECT posts.ID FROM posts WHERE blabla LIMIT $pick,1
SELECT posts.ID FROM posts WHERE blabla AND posts.ID >= $pick LIMIT 0, 1
si pe urma

query_posts('p='.$result);

Sper c-ati priceput din cvasicod : intii aflam cite articole sunt in baza de date care blabla (de exemplu, care-s cu statutul "published", sau alte asemenea), apoi alegem un numar aleator cu Mersene Twister (in caz ca n-ati stiut de unde vine mt_ ala), apoi alegem al atitelea articol si apoi il bagam pe git wordpress-ului.

Da, sunt doua cereri in plus facute de mina, pe genunchi. Cu toate acestea, hacuiala asta e cam doua spre trei ordine de marime mai eficienta decit order by rand. De fapt, si cautatul printr-un rolodex, cu mina, e mai eficient decit order by rand.

Sigur, daca wordpress era scris bine de programatori competenti in loc sa fie scris aiurea de struti nu era nevoie sa fac eu hacuieli, pentru ca implementau ei corect ‘orderby’ => rand. Da' daca n-am avut noroc ?

PS. Nu-i prima data cind is deosebit de idioti, de altfel. Sa reamintim numa' faza precedenta de-o imbecilitate sideranta, descoperita tot asa, la un moment de stress.

Cacodu-i poezie e perfect adevarat. Ca nu orice putoi e poet e exact la fel de adevarat.

Category: 3 ani experienta
Comments feed : RSS 2.0. Leave your own comment below, or send a trackback.

25 Responses

  1. Acum esti hater pe opensource, parca nu te agitai tu closed, cu licenta, cu d'le nu, softu' de lucru trebe sa fie open.

    Self-owned-muiat.

  2. Mircea Popescu`s avatar
    2
    Mircea Popescu 
    Friday, 18 November 2011

    N-am inteles rationamentu'.

  3. Pai pe tine te deranjeaza ca wp functioneaza prost.

    WP e open-source, unde bug-urile le testeaza vreun fanatic dala gnu prin subsol, nu niste programatori platiti, poate cine stie 1-2 maxim, care nu pot acoperi toate erorile.

    Garantia licentei e ca ba plm, acolo ar trebui sa fie un birou care fac testari si asa.

    Daca WP costa 0, nu inteleg de ce te plangi.

    Asta si ai putea frumuseli sa raportezi si tu bug-uri la ei pe forum ceva.

  4. Mircea Popescu`s avatar
    4
    Mircea Popescu 
    Friday, 18 November 2011

    Ma pling pentru ca-i prost scrisa. Nu inteleg ce nu intelegi.

  5. N-ai dreptul ca-i gratis, as it is.

    N-ai platit licenta, nu poti sa zici ca d'le ce investie de rahat, in ce plm am bagat banii, pentru ca e free. Deci suferi consecintele.

  6. N-ai dreptul ca-i gratis, as it is.

    N-ai platit licenta, nu poti sa zici ca d'le ce investie de rahat, in ce plm am bagat banii, pentru ca e free. Deci suferi consecintele.

    ¿Lo quires escrito en otro idioma/que escriba en otro idioma? :D

  7. pfoai deci ce muista e conexiunea d´le.

  8. Mircea Popescu`s avatar
    8
    Mircea Popescu 
    Friday, 18 November 2011

    Dar eu nu zic ca "e investitie de rahat". Eu zic ca e cod de rahat.

    Caz ilustrativ-educativ : eu trec pe strada. Pe linga mine trece o grasa. Io ma intorc spre o gagica la care aparent viseaza unu' Liviu, nu-l cunosti, da' cu toate astea deocamdata o fut io si-i zic : uite la grasa aia.

    Care-i problema ? Ca n-am fost insurat cu grasa sa pot zice ce investitie de cacat e ea ? Pai io nici nu zic ca-i o investitie de cacat. Io zic ca-i o grasa.

  9. Mda.

  10. Sal'tare, Mirceo!

    Afara de blog nu am citit ce mai ai pe-aici. Citind in dunga, am inteles ca ai hosting propriu (sau nu?) asa ca te-as ruga sa-mi spui cum e treaba cu hostingul la tine (daca ai) si ce fel de hosting s-ar potrivi pentru un site identic cu okazii. ro?

    O prietena vrea sa-si faca un astfel de site si a apelat la mine in acest sens iar eu i-am zis ca stiu doar din auzite de asa ceva. A zis ca nu e nicio graba, cica sa invatz cum se face site-ul (discutia pornise de la faptul ca vreau sa-mi cumpar hosting pt blog) ca are incredere in mine.
    Acum eu intreb cum e treaba cu site-ul? Vine "ceva" odata cu hostingul sau trebuie sa imi iau unu gratuit(wordpress) pe care, mai apoi, sa-l transfer?

  11. Mircea Popescu`s avatar
    11
    Mircea Popescu 
    Saturday, 19 November 2011

    Mei, tu pui o intrebare cam de tipul "salut, am vorbit cu o prietena care vrea sa-si faca fabrica de masini cam ca Dacia si sa ii fac eu managementul de productie".

    Un site "identic cu okazii.ro" nu veti face voi doi dat fiind ca oricit or fi de retardati aia de la Netbridge, totusi stau pe ceva milioane. Da' luati ceva gen AJ Auction Pro / PHP Pro Bid (nu mai retin cit era licenta, fo' 200 de dolari ?) si un server dedicat mai ieftinut (la vreo suta de dolari pe luna ar trebui sa gasiti ceva ok), instalati-va site-ul si distrati-va pe-acolo.

    E drept ca-s bani aruncati pe geam din punctul economic de vedere, da' cum ziceam dincoace merita stricati banii aia pentru a invata cite una-alta. Ce mai is trei-patru-cinci sute de dolari in zilele noastre ? Altii strica zeci de milioane cam in exact acelasi scop si cam cu aceeasi utilitate.

  12. sa-mi trag una, n-am realizat ca rand e de cacat... sa moara oracle nu alta

  13. SELECT MAX(posts.ID) FROM posts WHERE blabla
    $pick = mt_rand(0,$result);
    SELECT posts.ID FROM posts WHERE blabla AND posts.ID >= $result LIMIT 0, 1

    query_posts(’p=’.$result);

  14. Mircea Popescu`s avatar
    14
    Mircea Popescu 
    Saturday, 19 November 2011

    @F De ce esti hater bwey asta ?

    Ps. Mi se sopteste din off : ORDER BY DBMS_CRYPTO.randominteger

    @Anonimosu Ca bine zici.

  15. SELECT FROM WHERE RAND()>0.99 ORDER BY RAND() e o metoda sa tai o buna parte din overhead. Nu chiar 99% pentru ca valorile random tot trebuie generate dar macar nu mai ti in memorie toata tabla.

  16. Mircea Popescu`s avatar
    16
    Mircea Popescu 
    Saturday, 19 November 2011

    Parca tot mai bine cu mt_rand.

  17. ohay

  18. Asa nu

  19. nevermind

  20. da' fuck nigga?!

  21. Mircea Popescu`s avatar
    21
    Mircea Popescu 
    Saturday, 19 November 2011

    Confirm ce zice freud.

  22. confirm ce zice Trompi

  23. ba ce hater esti, mi-ai schimbat avatarul pe jewfain.

  24. Mircea Popescu`s avatar
    24
    Mircea Popescu 
    Sunday, 20 November 2011

    Dovada ca Freud e de fapt eu : http://polimedia.us/fain/societate/tribunalul-bucuresti-a-respins-cererea-de-infiintare-a-partidului-poporului-pe-un-articol-inexistent-din-constitutie/#c86939

  25. mUE

Add your cents! »
    If this is your first comment, it will wait to be approved. This usually takes a few hours. Subsequent comments are not delayed.