16Jul/090

Goldenblog twitter verseny – devel view

Must read: Using the Twitter API with PHP and PEAR.

Idén először rendezték meg a Goldenblog twitter versenyt ehhez készült a netninja.hu -n egy miniapp a twitter apira építve, ami a szavazatokat számolta. Egy kicsit magamnak egy kicsit azoknak akik twitter apira akarnak épiteni, összeszedtem a sarok pontokat, felmerült problémákat.

Desc: alkalmazás, ami leszedi a #gbtv taggel ellátott tweeteket, kiszűrni a szavazatokat @goldenblog Közönségszavazás #gbtv @elsonev @masodiknev @harmadiknev, kiértékelni a szavazatot, első helyre irt nick 3 pont, második helyre irt nick 2 pont, harmadik helyre irt nick 1 pont. Feltétel volt még, hogy csak az első szavazat számít, a szavazó első tweetjének dátuma július elseje előtti legyen.

Cél: lehetőseget biztosítani arra, hogy versenyzők egyenlő feltételek mellett tudjanak mozgosítani a szavazat állásának ismeretében.

Környezet: php, postgres, twitter api, wordpress (csak megjelenítés).

A Project:  A nagybetűs project három modulból állt,

  1. twitter api műveletek,
  2. szavazat érvényesítés és számolás,
  3. megjelenítés

Twitter api modul: Két dologra kellett használnom a twitter apit:

  1. search (#gbtv),
  2. user adatok lekérése

Szerencsére a twitter api egyszerű mint egy bot, csak arra kell figyelni, hogy az api rate limiteket betartsuk.

twitter api search: Nagyon fontos észben tartani, hogy a twitter search pár napra visszamenőleg   keres. Ha ennél nagyobb időintervallumot akarsz használni mentened kell a találati listát. Szintén fontos, hogy a userek törölhetik a tweetjeiket (status update), nagyon könnyen előfordulhat, hogy hip-hop, eltűnik egy tweet. Kihívás lehet még, hogy a search oldalakra bontja a találati listát és egy találati oldalra maximum 100 találatot rak ki. A találati lista lapozható a page paraméterrel. Első adat építésnél érdemes végiglapozni a találati listát, hogy ne hagyjunk le egyetlen fontos tweetet se (api rate limit!). Az induló adatbázis után már használd since_id: paramétert. Ebből következik, hogy a keresést mindig egy sql queryvel kezdtem, ami megmondta, mi az utolsó lementett tweet id.

twitter api user: Nem egy rakétatudomány, de fontos észben tartani, hogy twitter alapvetően a screen namere épit sok mindent, de ezt a user megváltoztathatja, tárold a user ID-it is minden esetben és lehetőség szerint ehhez az adathoz köss minden egyéb adatot, funkciót.

És persze a user törölheti is magát, ami okozhat pár kellemes percet, ha épp "hétfőd" van.

A név változtatás elméletileg csalásra is adhat lehetőséget, de nem találkoztam ilyennel vagy nem bukott le az illető.

(Ha most arra gondolsz, hogy minden twitter api művelet eredményét tárold le lokálisan, akkor ugyanarra gondolsz, amire én jutottam a project alatt. Egy baromi nagy adatbázis, ami limitált ideig létezik. Akár fejlesztői rémálomnak is beillene, ha nem tudnánk azt, hogy figyelni kell az adatok elvesztésére.)

A twitter api 150 user adat lekérést engedélyez egy óra alatt, ezért különösen fontos, hogy ne hibázd el a lekéréseket, különben várhatod a következő óra fordulót (én úgy vettem észre, hogy ez az óraforduló xx:04 perc körül van). Az első tweet dátumának lekérésre nagyon költség igényes, legalábbis nem találtam egyszerűbb modszert, mint a user updatejeinek végiglapozását és az utolsó tweet kikeresése. Figyelembe véve, hogy pl. @hh is szavazni fog (10k+ update), itt is megmaradt a kézi vizsgálat, annyival megkönnyítve a dolgot, hogy a user regisztráció idejét figyeltem, és ha július 1 előtti volt, akkor automatikusan érvénytelenként tároltam le a szavazatot. Szintén segítségképpen megjelenítésre került az updatek száma, illetve az egy updatetel rendelkező userek szavazatai is érvénytelenek lettek automatice.

A project legnagyobb kihívása a userek által termelt typok, jófejségekből beírt adatrongálások kivédése volt. Ezekre feleslegesnek tartottam bármilyen ellenőrzést is írni, egyszeűbb volt átnézni a bejövő adatokat és kézzel korrigálni.

A szavazat számolás egy egyszerű string->array formázást követő pozíció keresés volt. Az alkalmazott adatbázis struktúrára még nem táláltak ki megfelelő jelzőt, gyors volt, de nem a legszebb, maradjunk ennyiben.

A megjelenítésnél fontos volt, hogy WordPressben szeretném megjeleniteni az adatokat. A wordpressbe integrálni meglepően könnyű volt, ezért probléma mentes volt.

Röviden tömören twitter api rocks.

3Jul/09Off

XHProf: Facebook's PHP profiler – ERROR: 'phpize' failed

pecl install xhprof
downloading xhprof-0.9.2.tgz ...
Starting to download xhprof-0.9.2.tgz (931,660 bytes)
......................................done: 931,660 bytes
11 source files, building
running: phpize
Cannot find config.m4.
Make sure that you run '/usr/local/bin/phpize' in the top level source directory of the module

ERROR: `phpize' failed

Solution: use tarball source install -> http://pecl.php.net/package/xhprof

/tmp/pecl/xhprof-0.9.2/extension/#

phpize

./configure --with-php-config=./configure --with-php-config=/usr/local/bin/php-config

make

make install

3Jul/09Off

Fatal error: Call to undefined function preg_match() in /usr/local/share/pear/PEAR/Frontend/CLI.php on line 57

/usr/local/bin/pecl remove the  '-n'

exec $PHP -C -n -q $INCARG -> exec $PHP -C -q $INCARG

25Jun/09Off

Tíz technológia amit mindenképp ismerned kell

Tíz technológia amit mindenképp ismerned kell, ha unix környezetben fejlesztés phpban:

1, OOP PHP

Nincs mit túl ragozni rajta. Ha most vágsz bele a PHP-ba, csak és kizárólag OOP alapú tutorialt olvass. A procedural PHPnak legalább annyi lét jogosultsága van mint az OOPnak, de az OOP tudásod mindig fontosabb lesz.

2, FreeBSD

Sokat lehet vitázni, hogy ez valóban fontos és mennyire technológia, de jó ha képben vagy vele, egészen biztosan összefogsz vele futni nagy forgalmú rendszerek kapcsán. Ha nagyon cutting edge akarsz lenni, figyelj oda az OpenSolarisra. (Figyeld a post dátumát!) A 64bites rendszerben van még pár idegesítő elmaradás ami különösen APC és postgre esetén jön elő.

3, SQL (MySQL, Postgresql)

Önmagáért beszél. Nagyon kevés rendszer létezik jelenleg, amiben ilyen vagy olyan módon ne lenne sql backend. Ez előreláthatólag jó pár évig így lesz, minden perc amit sql nyelvel és adatbáziskezelők lelkivilágával töltesz, jól kifizetődő.

4, Memcached

Per pillanat az egyik legfontosabb technológia a memória alapú cache. Az SSD drivektól javulást várok performance terén de sokat kell még aludnunk ahhoz, hogy serverinkben 1-2 terrányi SSD kapjon helyett. PHP esetén meglehetősen primitív technológiáról van szó, nem nehéz, de rengeteg performance jellegű problémát megold. Érdemes a sessiont is itt tárolni.

5, ZFS

Performance. File System. Tudd, hogy mi hozható ki belőle, szükséged lesz a tudásra, mikor az üzemeltetést kell meggyőzni a használatáról.

6, HTTP (apache, lightthpd)

Sokan csak tudják, hogy a web http-n keresztül zajlik. Muszáj megértened a http-t működését ahhoz, hogy maximális performancet tudja kihozni minden rétegből ami egy egyszerű weblap generálás és kiszolgálás alatt a dolgozik.

7, Smarty

Masszív, kiforrt, ennek következtében baromi erőforrás igényes template rendszer. Ha egyszer már valamit lecachelt magának akkor kellően gyors, igy mindenképp ismerendő és használandó, már csak azért is, hogy lásd és megértsd a fájl alapú cache rendszereket.

9, PEAR

Kicsit öreg, kicsit lassú, de megbizható. És főleg baromi gyors kódolást tesz lehetővé. Sok munkahelyen alap, hogy ismerd. A használata már nem annyira, de oldschool kóderek szívesen szivatjak a interjún a kezdőt, vajon ismeri-e? Jah, a lényeg. Előre megirt, szabadon használható PHP kódgyűjtemény. De ha átnézed, képben leszel.
http://pear.php.net/

10, SVN, (git, cvs)

Verzió követő, kódkonfliktus kezelő. Teamwork alapja, rengeteg plusz pontot kaphatsz, ha nem azzal töltőd idődet, hogy az svn alapjait tanulod.
19May/09Off

php setcookie not working

check php error log:

PHP [warning] Cannot modify header information - headers already sent

19May/090

pear HTML_TagCloud error sorting tags wrong order

error: pear HTML_TagCloud error sorting tags wrong order

solution: set your locale before use html_tagcloud like

setlocale(LC_ALL, 'en_US.UTF-8');

remember, set back locale to right value, after use html_tagcloud if is necessary

19May/09Off

how to logging google search keywords

$thereferer = strtolower($_SERVER['HTTP_REFERER']);
$a = substr($thereferer, strpos($thereferer, "q="));
$a = substr($a, 2);
if (strpos($a, "&")) {
$a = substr($a, 0, strpos($a, "&"));
}
$googlekeywords = urldecode($a);
return $googlekeywords;
19May/09Off

how to logging file php

$messagetolog = 'string to message';

$timeStamp = date("M d H:i:s", time());

$systemLogFile =  "/path/to/system_log";

$fileOpen = fopen($systemLogFile, 'a');

$stringData = $timeStamp." ".$messagetolog;

fwrite($fileOpen, $stringData);

fclose($fileOpen);

19May/09Off

php profiler xdebug, wincachegrind, webgrind

/usr/ports/devel/php-xdebug

php.ini (or xdebug.ini)

[xdebug]

zend_extension="/usr/local/lib/php/20060613/xdebug.so"

xdebug.profiler_enable = On
xdebug.show_local_vars=On
xdebug.dump.SERVER=HTTP_HOST, SERVER_NAME
xdebug.dump_globals=On
xdebug.collect_params=4
xdebug.dump.GET=*
xdebug.dump.POST=*
xdebug.profiler_output_dir = "/pathtoyourlogsdir/logs/"
xdebug.profiler_append= 0
xdebug.auto_trace = Off
xdebug.show_mem_delta = On
xdebug.collect_return = Off
xdebug.trace_options = 1
xdebug.var_display_max_children = 2000
xdebug.var_display_max_depth = 2000
xdebug.var_display_max_data = 2000
download wincachegrind or use orignal project home
Check this: http://code.google.com/p/webgrind/ and XDebug Slides – OSCON 2009 - Brandon Savage
19May/09Off

apc admin console php file

/usr/local/share/doc/APC/apc.php

apc_admin_php