Honlapszerkesztés, ezúttal PHP+MySQL-ben

 ( hajbazer | 2009. január 27., kedd - 21:58 )

Honlapot szerettem volna. Hatékonyan szerettem volna. Az elsőre még van esély, hogy teljesül, bár egyre kevesebb.

Nemrég újra elkezdtem honlapot írni, ezúttal PHP-ben MySQL-el ötvözve. A tegnapi nap sikerült megírnom több, mint egy óra alatt egy szavazást, ami nem csinál mást, mint kiolvas egy táblából bizonyos értékeket, megjeleníti ezeket, illetve egy tetszőleges feliratú Submit gombot, amivel szavazni lehet. Szavazáskor a PHP script a szavazás tényét észlelve frissíti a MySQL adatbázist. Azzal is 20 percet szenvedtem, hogy a lekérdezést (QUERY) a MySQL szintaktikájának megfelelő formába öntsem. Jó mi? Egy sor 20 perc. Emellett Cookie-val ellenőriztetni kellett, hogy nehogy kétszer szavazzon valaki. Bár most csinálok ilyet először, de nem az első alkalom miatt tartott ennyi ideig, hanem a rengeteg szintaktikai és szemantikai hiba miatt. Kb. ez is 20 percig tartott. A maradék 50 perc pedig a helyes PHP és HTML kód megírásával, az adatbázissal való ügyeskedéssel (értsd: balfaszkodással) ment el, na és persze a debug-gal. Nincs olyan sor, amibe ne írnék hibát. Már nem is számítok arra, ha valamit megírok, akkor az egyből működik. Nem, 1 perc megírni, 10 perc hibát keresni. És így leszek én majd programozó, közben szétvet az ideg, hogy másoknak egy ilyen 5-10 percig tart, én meg szenvedhetek. Mi lesz ha majd egyetem után a munkahelyemen kell helytállnom. Túlóra lesz majd belőle, nehogy véletlenül legyen egy pici szabadidőm. Egész életemben ez fog kísérteni.

Ezek után már nem csoda, ha egy nap alatt összesen két (és fél) oldalt sikerült összedobnom (értsd: összeszenvednem). Minél többet csinálom, annál kevésbé megy. Főleg, most hogy TFT monitorom van, úgy érzem, nem pörög annyira az agyam és lassabban tudok gondolkodni, mint CRT előtt. Ma arra vetemedtem, hogy megkönnyítem a dolgom egy kicsit. Mivel távoli szerveren van a honlap, amit csinálok, ezért állandóan FTP-n kell feltölteni a fájlokat, amiket szerkesztek. Egy idő után (főleg a fentiekkel fűszerezve) kissé unalmassá válik állandóan Total Commander-ből F5+Enter, sőt néha idle timeout is van (újra kell kapcsolódni), ha jó szokásomhoz híven túl sokáig gondolkodom egy néhány soros megoldáson. Szerkesztésre Notepad++ -t használok, szeretem, mert rengeteg nyelvet ismer, összevonja a blokkokat, kiemeli a szintaxist és tud bűvészkedni is a szöveggel/kóddal. Ami még említésre méltó, hogy el tudja indítani adott külső programmal az éppen szerkesztett fájlt, ráadásul mindezt egy gombnyomásra (lehet billentyűparancsot rendelni az ilyen feladatokhoz). Gondoltam írok hozzá egy külső programot, ami szépen feltölti nekem arra a bizonyos FTP szerverre. Neki is láttam perl-ben, és természetesen mi más lett a vége, mint szenvedés, szarakodás.

Íme a script

	use Net::FTP;
	print "bejelentkezes... ";
	my $ftp = Net::FTP->new("*********.******.**");
	print "ok.n" if($ftp->login("*****","*****"));
	$ftp->pasv();
	$ftp->binary();
	$ftp->cwd("/*********/****/*****");
	print "feltoltes: $ARGV[0]...";
	if($ftp->put($ARGV[0])) {
		print "ok.n";
	} else {
		print "nemok.n";
	}
	$ftp->quit;

Ez a része nem működött. Eddig ismeretlen okokból, azokat a CSS fájlokat (mást nem próbáltam feltölteni), melyeket ennek segítségével akartam feltölteni, egyszerűen szétcseszte. A kapcsoszárójeleket ('{' és '}') véletlen vagy direkt kihagyta a fájlból. Próbáltam $ftp->binary() és $ftp->ascii() -val is, de természetesen nem működött. Teljesen úgy érzem magam ilyenkor egyrészt, mintha valaki szándékosan csinálná ezt velem odafentről, vagy akárhonnan, ahonnan irányítani lehet. Másrészről pedig mindig ott van az előreszabott szarakodási idő, amely időt el kell szarnom, nehogy véletlenül hatékony lehessek és elmondhassam, hogy értek a témához. Azaz egy 1-10-es skálán 1-es bonyolultságú programot is annyi idő alatt kell megírnom, mint egy 7-est mondjuk. Az időelbaszásról pedig gondoskodnak a másoknál soha ki nem jött, megoldhatatlan szar problémák, amik csak és kizárólag azért vannak, hogy nekem keresztbe tegyenek. Érdekes, összetettebb dolgoknál kevesebb problémával találkozom, bár a debug-olás ott is majdnem soronként megy. Lényeg, hogy az időt kitöltsem. 16:29 - 16:54 percig, azaz 25 percig kellett írnom egy néhány soros perl scriptet.

Végül a Perl WinInet library-je kihúzott annyira a szarból úgy, hogy a fejem már kilátszik.

Íme az ugyanazt megvalósító script WinInet32-vel

	use Win32::Internet;
	$INET = new Win32::Internet();
	$INET->Pasv(1);
	$INET->FTP($FTP, "***************", "**********", "***********");
	$FTP->Ascii();
	$FTP->Cd("/public_html/********/*******");
	$FTP->Put($ARGV[0],$ARGV[1]);
	$FTP->Close();

	print "$ARGV[0] $ARGV[1]";

Így a végére, leírva ezt, természetesen már el is ment a kedvem a mai honlapszerkesztéstől, mert tudom, mi vár rám. Így most már nagyra becsülök bármilyen honlapot, amit meglátok. Kíváncsi vagyok, egy HUP portálrendszert mennyi idő alatt írnék meg.
A kérdés inkább az: befejezném-e ebben az életemben?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Ha komolyan akarsz dolgozni, ráadásul úgy, hogy nem fecsérled az időd, akkor érdemes beállítani a szerkesztőt úgy, hogy automatikusan ftp-re mentse fel a dolgot. Notepad++-t nem ismerem, pl PSpad-ba (ami free, és scriptelhető, magyarul is tud) van ilyen opció, és igen remek társ a hétköznapokban.

Szerintem érdemes ránézned, sokat segít egy jó szerkesztő program a fejlesztésben, tanulásban.

____________________
http://asva.info | Vicces képek | LinkTömörítő

En meg epp most probalom rabeszelni a webfejlesztoket svn-re. :)

--
Fontos feladatot soha ne bizz olyan gepre, amit egyedul is fel tudsz emelni!

Az jó dolog :)


"Ubuntu" is an African word meaning "I can't figure out how to configure Slackware"

nalunk megy a filo mi legyen... sima svn szerver egyik gepbol, vagy hasznaljuk az adobe cuccat (asszem van neki valami hasonlo dolog)

igazabol mindenki dreamweaverbe dolgozik, így kezenfekvo lenne az adobe-s, de valahogy nem bizom benne :D

____________________
http://asva.info | Vicces képek | LinkTömörítő

ha komolyan akar dolgozni, akkor meg szerintem beállít localhostra egy webszervert, és csak akkor tölt fel bármit, amikor localba már megy;)
az adatbázishoz egy fájlba letárolja a helyfüggő konstansokat, oszt csókolom (illetve nálam az sql szerver van pl. ahonlaphoz hangolva:))

—-—-—
int getRandomNumber() {
	return 4;//szabályos kockadobással választva.
}		//garantáltan véletlenszerű. xkcd

Jobb egy külön gépet erre a célra beállítani. Timeoutolni nem fog, totalcommanderhez van sftp plugin, vagy lehet venni sftpdrive-ot amivel lokális mappaként látod az sftp könyvtárakat, vagy lehet használni winscp-t is ingyen.

miben jobb a külön gép a localhostnál? nekem eddig még nem volt semmi gáz vele, de ha meggyőzöl jó gyorsan átpakolok egy másikra;)

—-—-—
int getRandomNumber() {
	return 4;//szabályos kockadobással választva.
}		//garantáltan véletlenszerű. xkcd

Előnyök - hátrányok:
Ha olyan oprendszer van rajta ami a végleges környezethez hasonló, jó eséllyel szimulálhatod a valós működést.
A szerveren viszont nem tudsz olyan könnyen fejleszteni, teljeskörűen tesztelni, hiszen még X sincs rajta.
Többen is fejleszthettek egy tesztszerverre, lehet svn szerver is ugyanaz a gép. (Bár én azt a verziókezelést használom amit Linus.)
Több oprendszer alól, több gépről lehet ellenőrizni a kódot - persze ez úgy is működik ha localhoston futtatod, és megadod az IP címed.
Nem lassítja be az AMP a többi dolgot - kellően gyors gépnél ez nem probléma, virtuális géppel szimulálható a végleges környezet.
Biztos helyen van a kód - ha gyakorta végzel biztonsági mentést, akkor localhoston is, viszont viheted magaddal.
Szóval igazából nem tudom megmondani hogy jobb-e.

Nálunk úgy van megoldva, hogy localhoston van egy webszerver, illetve van egy központi, ahol svn van. Így a legkényelmesebb :) Lehet localban tesztelni, és ha jó, akkor megy svn-be, ahol nézik a többiek. Ha még mindig nincs benne hiba, akkor a production szerverre meg az ssh és az svn up.

Gyengébb gépeket egy lighttpd nem hinném hogy fogna nagyon. MySQL-t is lehet nagyon minimálisra konfigolni.


"Ubuntu" is an African word meaning "I can't figure out how to configure Slackware"

Neked az a gondod, hogy nincs turelmed hozza, legalabbis en ugy latom. Semmit nem lehet egyrol a kettore megtanulni, meg az ilyesmit sem. Nekem is beletelt vagy ket napba, mire egyaltalan megertettem a rails mikentjet - pedig akkor elotte mar dolgoztam html+php+mysql trioval, tehat nem voltam zoldfulu. A PHP-val talan heteket is szenvedtem meg a legelejen, sajnos ezt az idot bele kell olni, barmennyire is holt ido.
ftp feltoltesre en a ncftp progit ajanlom neked, van windowsra is belole, es tud mindent ami neked kell, sot.
PHP fejlesztokornyezetnek probald ki a NetBeans-t. Nagyon sokat tud dobni a dolgokon a completion es a szintaktikai ellenorzes. Mindentol persze nem ved meg, de korulbelul 50%-al hatekonyabb vagy, mint barmilyen mas, a szintaxist nem ellenorzo editorral.

Es turelem, sok turelem, es meg tobb turelem. Csak igy megy.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

+1

Új dolgokat tanulni nagyon érdekes, viszont sok türelem kell hozzá (meg guglizás).


"Ubuntu" is an African word meaning "I can't figure out how to configure Slackware"

Általában van türelmem hozzá, csak néha elfogy. Nem az a bajom, hogy szenvedni kell vele elsőre, hanem az, hogy mindig amikor hozzáfogok. Semmiféle rutint nem tudok kialakítani, ha pedig igen, akkor azt is rosszul, tehát megtanulom elrontani és kijavítani ahelyett, hogy alapból jól csinálnám.

mi lesz a perzisztencia reteggel? :) meg MVC?

nem vagyok phps, de csak van erre ott is megoldas...

van, bar en szemely szerint nem szeretek sql eseteben eltavolodni a query irastol, macerasabb optimalizalni az orm jellegu tooloknal a queryket, sql-t ugyis tudok irni, es ritka az, hogy egy teljes project alatt rdbms-t cserelunk.

Tyrael

Hala az egnek, ActiveRecord-ban es DataMapper-ben sem vagy arra kenyszeritve, hogy elfeledd a raw SQL szintaxist. (hint: find_by_sql)

persze, de mvc-ben nem muszaj orm-ot hasznalni :)

--
When in doubt, use brute force.

perzisztencia retegrol hibernate-re asszocialtam.

Tyrael

es orm == hibernate, vagymi? :)

hibernate egy fos. eclipselink ftw

nem, de a hibernate == orm
legalabbis en eddig ugy tudtam.
"Hibernate is an object-relational mapping (ORM) library for the Java language, providing a framework for mapping an object-oriented domain model to a traditional relational database"

a hibernate konkretan pedig onnan jott, hogy tudom mekkora JAVA/J2EE "buzi" vagy es meg az absztrakcios layer absztrakciojahoz is absztraktalni szeretsz.
erre irtam hogy nem szeretek nagyon eltavolodni a query irastol, mert konyebb optimalizalni igy a query-ket. nalam ugy nez ki, hogy megirom 1-1 modelfuggvenyben az adott feladathoz szukseges query-t es azokat hivogatom.

pl az ilyenek miatt utalom a tulzott absztrakciot:
http://hup.hu/node/61910#comment-649146

Tyrael

Tobbiekkel egyetertve en is azt gondolom, hogy onbecsules hianyod van, azt gondolod, hogy ma egy szavazas megirasa 4 ora, akkor ez a jovoben sem fog valtozni. Ha erdekel a tema, es foglalkozol vele, lesznek visszacsatolasaid, akkor ez gyorsan le fog csokkenni az atlagos x perces szintre.

Hogy mennyi ido alatt irnal meg egy Drupalt? Szerintem 1) ne tuzz ki irrealis celokat, 2) egy Drupalhoz mar komolyabb programtervezes szukseges. Es ez utobbit (meglatasom szerint) lenyegsen fontosabb jol elsajatitani, mert ez ad szemleletmodot. Azutan, hogy a nyers kodolast miben csinalod, mar kis tulzassal „szinte” mindegy.

Es ami nagyon fontos: legyenek szamodra kituzott apro celok, amiket ha elersz, az toltson el joerzessel, „igen, sikerult megcsinalnom!” adjon sikerelmenyt. Ez visz elorebb.

Az a baj, hogy nekem nincs reál infós agyam, ez a blogomon publikált szösszeneteimből talán ki is derül. Rengeteget szenvedek, de már nincs választásom, mert ezt a pályát választottam. Bár mikor kívülről látom az egészet, a végeredményt, akkor rájövök, hogy mégse olyan rossz ez. Jó lenne már végre hatékony lenni.

Öt évvel ezelőtt is volt egy PHP-s fellángolásom, akkor még a MySQL-hez nem értettem és nem is akartam megtanulni, szóval írtam saját adatbáziskezelést (fájlokban tároltam adott szintaxis szerint, reguláris kifejezésekkel szűrtem (ereg() fv.) beolvasáskor). Az előbbi részével ha nem is olyan sokat (mert csak néhány függvény volt, ami meghívható egy mindenhová befoglalt (include) fejlécfájlból, de a többi PHP logika már "túlhevítette a CPU-mat" (ha lehet ilyet mondani). Volt egyszer, hogy félórákat gondolkodtam azon, hogyan állítsam be a maradékos osztást (modulo, PHP-ben % operátor) úgy, hogy egy adott képlistázó oldal a kisképeket (thumbnail) 3 soros táblázatban jelenítse meg, és mindig csak 3 sor legyen. Mit össze szenvedtem vele, úristen. Haverom meg percek alatt megírt egy ilyet. A másik a HTML, pl. tageknél még mindig van, hogy nem látom át mi hogy van. Egyszerűen nem tudom a szöveget vizuális formába képzelni. Pedig vizuális típus vagyok, valahogy mégse megy, főleg ha meg hasonlók is vannak. Nem látom át, hogyan kéne megvalósítani egy táblázatot.

HTML-t inkább magolni kell, mint reálba "renderelni", bár az előbbi példa alapján most önmagamnak mondtam ellent egy kicsit :)

Na latod, a php programozok 99%-anak eszembe nem jutna sajat adattarolo strukturat irni, hiszen ott az SQL, arra valo. Te meg nekialltal inkabb egy sajat strukturat kesziteni, es ezzel szereztel egy csomo tapasztalatot (mar onmagaban a regex sem egyszeru, nem is ertem, ha az megy, mi a gond a phpvel :). Nyilvan eljon az ido, amikor erzed a sajat rendszered korlatait; ekkor jon a refactoring, azaz ujratervezes. Nem erdemes hosszu tavon toldozni-foltozni egy olyan elkepzelest, ami akkor szuletett, mikor nem is gondoltal egy jovobeni alkalmazasara.

A html-lel kapcsolatban pedig szerintem bontsd ket reszre a kerdest, ahogy minden szemantikus ajanlas mondja. A htmlben ne foglalkozz azzal, hogy „hogy fog kinezni” az oldal, arra valo a CSS. Ezen kivul hasznalj fejlesztest segito eszkozoket, mint pl. Firebug, amivel (sok egyeb mellett) on-demand at tudod irni egy html elem tulajdonsagait. Termeszetesen ez sem ment meg attol, hogy megtanuld: table -> tbody -> tr -> td...