Izlaz scripta na ekranu i fajlu

Zbog prirode svog posla gotovo svakodnevno se bakćem sa raznoraznim php cli scriptovima. Često su u pitanju programi koji rade jako dugo (satima, neki čak i danima), ponekad praveći veliku količinu outputa, te zbog toga praktikujem da iste startujem unutar screen sesije, kako bih uvek mogao da se ponovo ulogujem u sesiju i bacim pogled kako stoje stvari.

Veoma je dobro logovati kompletan output skripta u fajl, za slučaj da je nešto pošlo naopako, ali nekako sam uvek voleo da onako “live” vidim na ekranu šta se dešava, umesto da mi ceo izlaz stoji u nekom tamo log fajlu. No, zahvaljući unix tee komandi i ovom postu, danas sam naučio da mogu imati obadva.

./script.php | tee out.log

Ovo će kreirati fajl out.log i usmeriti kompletan output scripta u njega, ali će isti biti prikazan i na ekranu (STDOUT). U slučaju da želite samo da dodate (append) output u postojeći log, nema problema:

./script.php | tee -a out.log

Konačno novi WordPress

Da, kao što i sam naslov kaže, konačno sam odradio upgrade sa vremešnog 2.0.4 na poslednji 2.3.2. Upgrade WP-a??? Big deal, reći će neko. No nije tako.

Ono što ovaj Blog izdvaja od ostalih je višejezičnost (isti Blog na dva jezika, tj. srpski i engleski), koja je postignuta zahvaljujući Gengo pluginu. Zgodan plugin koji vam omogućava da pišete postove na dva ili više jezika, dok korisnik sam bira preferirani jezik, ili mu se čak isti prikazuje na osnovu njegove geografske lokacije (GeoIP). Cool stvar.

No, ono što nije cool jeste da se Gengo prestao razvijati pre izvesnog vremena, tako da možete furati doveka stari Wordpress ili deinstalirati Gengo, uz rizik da izgubite mukotrpan rad oko prevoda sadržaja i sl.

Current development on Gengo seems to have stopped . We have not heard anything from the developer for some months now. I hope that everything is fine for him. Unfortunately the latest release of Gengo is not compatible with Wordpress 2.3 so f you want to continue to use Gengo “as is” you should not upgrade.

http://wp-multilingual.net/2008/01/26/gengo-and-wordpress-232/en/

Već vidim mrzitelje Open Source kako likuju. Eto vidiš, neki tamo programer je kreirao nešto, ti si se primio i uzeo to da koristiš na svom production sajtu i eto, taman kada ti je zatrebala podrška on je zapalio. Možda je prezauzet preživljavanjem, možda ga je udario kamion, šta god. Zarobljen si u zastarelom rešenju koje ne možeš upgrade-ovati, nema izlaza. No, sačekajte …

Open Source ima i dobru stranu, a to je da taj kod možete uzeti i nastaviti razvijati, a upravo to se i desilo u slučaju Gengo-a. Par naprednijih korisnika se organizovalo, zasuklo rukave, i eto novog Genga. Zapravo, ne još pošto je u pitanju još uvek alfa, ali koliko se pokazalo ima dovoljnu funkcionalnost da može ići na ovaj Blog. Zapravo bilo je potrebno malo je hakovati zbog problema koje sam i sam prijavio developerima, no bitno je da to sve (nadam se) fercera, dovoljno dobro, tj. bez vidljivijih bugova :)

Browser War Again

U jednom od ranijih postova pisao sam o ratu browsera . I dok se novi rat zahuktava, ovih dana došlo je vreme za odavanje počasti žrtvama prethodnog.

Da, u pitanju je Netscape Navigator, koji ovih dana odlazi na smetlište istorije nakon što je AOL objavio prestanak podrške i samim tim definitivan kraj za ovaj browser. Kao jedan od ljudi koji je svoje prve dane na Internetu provodio uz Netscape Navigator, moram da priznam da osećam izvesnu dozu sete kada se setih browsera koji je suvereno vladao sve do kraja devedesetih.

netscape.jpg
Netscape 2.x

Naravno, Microsoft ne planira da nakon decenije dominacije i njihov browser krene istim stopama, naprotiv razvoj novog IE8 je u punom jeku, a upravo ovih dana developeri IE-a objavili su da je IE8 sa uspehom prošao ACID2 test. I pored implementiranja najnovijih standarda, MS developeri su najavili da će kompatibilnost sa prethodnim verzijama biti u potpunosti očuvama. Kako to zamišljaju da urade, to bih baš voleo da vidim :)

Acid2

Ajax Animacija

Ajax je definitivno “in”, a za poboljšanje korisničkog doživljanja, efektna animacija prilikom akcija korisnika je od neprocenljivog značaja. Srećom zahvaljujući sjajnom AjaxLoad sajtu ne morate se patiti sa kreiranjem animiranih gifova ili flash animacija. Jednostavno odaberete tip animacije, podesite boje, kliknete na generate dugme i … voila! Vaša animacija je spremna za download.

ajaxloadinfo.gif

MySQL - Backup velikih MyISAM tabela

Ako ste ikada morali da backup-ujete ili prebacujete podatke iz jedne ili više MySQL tabela, znate da se za to koristi mysqldump utility, pomoću kojeg jednostavno podatke iz MySQL-a “dumpujete” u neki mojetabele.sql fajl, koji zatim možete sačuvati kao backup, prebaciti i importovati na neki drugi MySQL server, itd. Ovu proceduru koristio sam milion puta do sada, i ona se generalno svodi na izvršavanje sledećih komandi u linuxu:

export:

mysqldump -udinke -pmojpass -hhostname.prvog.servera ime_baze tabela1 tabela 2 tabelan > dump_fajl.sql

import:

mysql -udinke -pmojpass -hhostname.drugog.servera ime_baze < dump_fajl.sql

Tu i tamo pojavi se problem kada prebacujete dump sa novije verzije MySQL-a na stariju, i tada je poželjno specifirati i odgovarajući compability flag prilikom izvršavanja mysqldump komande (–compatible=name gde name može biti mysql323, mysql40, postgresql, oracle itd.).

Elem, pre nekoliko dana zbog prebacivanja MySQL servera sa jedne lokacije na drugu, morao sam da odradim dump solidno velikih MySQL tabela (10-tak tabela gde je svaka imala preko 2 miliona slogova). Nakon užasavajuće duge procedure dumpa, gzipovanja i scpovanja na drugi server, konačno sam startovao import. Međutim, nakon 3 sata (tri sata) umesto standardne “no news is a good news” poruke, kada sam bacio pogled na status dočekala me je sledeća poruka …:

[dinke@um-917 ~/public_html]$ mysql -udinke -p325ewfwt23rasf
keyword_discovery < es_miner_data.sql
ERROR 1582 (23000) at line 163833: Duplicate entry '1167548' for key
'PRIMARY'

WTF? Prebacivao sam podatke sa starije verzije na noviju, što znali da import mora proći glatko! Ovo bi trebalo da znači da je MySQL negde nešto pobrljavio sa indexima, i umesto da čekam još 2 sata da se odradi check & repair, odlučujem se da napravim ponovo dump fajl, ovaj put sa ignore opcijom, kako bi svi inserti u dump fajlu bili “insert ignore” tako da u slučaju ovakve greške ne bi došlo do pucanja. Ne preterano pametno, ali podaci nisu extremno osetljivi i mogu da dozvolim luksuz da izgubim desetak slogova, ali ne i desetak sati za import!

Naravno, novi dump, zip, scp … to je traajalooo … toliko dugo da sam posle par sati nakon startovanja importa krenuo da mozgam sa administratorom (kuki) oko alternativnih rešenja. A rešenje je bilo jednostavno ali efikasno. Prekopirali smo sve MySQL data fajlove sa jednog servera na drugi (*.MYI, *.MYD i *.frm fajlove), a zatim odradili myisamchk kako bi sredili pomenute tabele, jer nismo smeli da spuštamo server prilikom backup-a što generalno može da prouzrokuje dosta problema (tipa oštećene tabele) ako se na ovaj način backupuju fajlovi.

Sve u svemu, ova operacija prošla je jako brzo (najduže je trajalo kopiranje fajlova sa jednog hosta na drugi), i za manje od pola sata cela procedura bila je završena.

Zaključak do koga smo došli je da je kod velikih tabela zbog dužine trajanja operacije dumpovanje praktično neprihvatljivo kao backup rešenje, i da se samim tim kao jedino rešenje nameće kopiranje MySQL data fajlova. Kod MyISAM tabela to nije nikakav problem, jer su one “platform safe”, tj. binarni fajl kreiran na jednoj platformi (recimo *.MYI fajl na linuxu) radiće bez ikakvih problema na drugoj platformi (recimo isti *.MYI fajl na Windowsu).

Next Page »