ugrás a tartalomhoz

CakePHP a hype mögött

Hodicska Gergely · 2007. Szep. 16. (V), 23.36
Mostanában elég sokszor szóbakerült a CakePHP itt a fórumban, ezért gondoltam, hogy a mai napot arra szánom, hogy egy kicsit ismerkedem vele, addig csak felületes ismereteim voltak vele kapcsolatban. Szépen nekiálltam végigolvasni a projekt kézikönyvét, de már a konfig fájlok kapcsán találtam pár furcsaságot a kódokban, ezért gondoltam, hogy elkezdem gyűjtögetni ezeket. A következő blogbejegyzés ezen lista alapján készült.

A bejegyzés alapvetően egy felsorolás lesz, az érdekesebb témák esetén kicsit kibővítve, és mint a címből is feltűnhet alapvetően a keretrendszer kódjának negatívumairól lesz szó. Elöljáróban elmondhatom, hogy eléggé csalódás volt ebből a szempontból a Cake, korántsem lehet elmondani róla, hogy progamozás-technikai szempontból maradandót alkottak volna a készítői, egyáltalán nincs a kódnak profi kisugárzása.

Előre kiemelném, hogy nem volt semmilyen elenérzésem a Cake-kel kapcsolatban ezelőtt (leszámítva, a PHP4 témakörét, de erről majd később), pont azért akartam megnézni, hogy eldöntsem, a Symfony-t vagy őt lenne érdemes szadabidőben kicsit próbálgatni. Az egész úgy kezdődött, hogy a core.php-n belül egy-két állandó elég rosszul volt elnevezve, ezért rákerestem, hogy hol és hogyan használja őket.

CakePHP furcsaságok

Gépház: időszűke miatt nem törekedtem arra, hogy a Cake-et nem ismerő olvasó is képe kerüljön az adott probémával, de szerintem a legtöbb rész ettől függetlenül érthető.
<?php
function low($str) {
	return strtolower($str);
}
Függvények rövidítése: túl sok értelme nincs, szemantikailag nem ad hozzá semmit (sőt inkább rontja, nem túl kifejező egy low() nevű függvény), a rövidítésre meg megfelelő IDE-t kell használni. Ráadásul nem használja következetesen a saját rövidítéseit.



A uses() függvény: ennek sincs túl sok értelme.



Lazy loading a tök alapvető osztályokra: ennek elvileg a hatékonyság a legfőbb oka, viszont olyan környezetben, ahol ez számít, ott használnak valamilyen opcode cache-t, ahol viszont már ez a stratégia a rossz.


<?php
function &getInstance() {
	static $instance = array();
 	if (!$instance) {
 		$instance[0] =& new Security;
 	}
 	return $instance[0];
}
Ez is itt elég bénácska, semmi értelme sincs tömböt használni.


<?php
function validateAuthKey($authKey) {
	$_this =& Security::getInstance();
	return true;
}
Ez miért jó?



Egységes kódolási stílus hiánya, pl. hol van szóköz a függvény neve mögött, hol nincs. DocBlock megjegyzések is sok helyen nincsenek kitöltve, vagy nincsenek szinkronban a függvény működésvel. Az osztály és az őt definiáló állományok elnevezése is össze-vissza történik.


<?php
if (function_exists('session_write_close')) {
	session_write_close();
}
Munkamenet indítása előtt ennek mi értelme van (egy keretrendszerben, ahol adott, hogy ez a mechanizmus hogyan van kezelve)?



__ kezdetű metódusok, kifejezetten rossz szokás, ugyanis ez a PHP által fenntartott "névtér".


<?php
if (function_exists('ini_set')) {
	...
}
Ez az ellenőrzés vagy négyszer megtalálható egy függvényen belül, eléggé bad smell refactoring szempontból.


<?php
if (!class_exists('AppController')) {
	loadController(null);
}
Elég furcsa első ránézésre ez a kód, kiderült (nem a leírásából!), hogy null-lal meghívva betölti az AppController osztályt. Szintén rossz szokás, amikor egy függvény paraméterei "trükkösen" ki vannak használva, sokkal egyszerűbb kisebb, konkrétabb felelőséggel rendelkező függvényeket használni, tisztább, érthetőbb és könnyebben tesztelhető lesz a kód. Ráadásul statisztikailag bizonyított, hogy egy olyan rendszerben, ahol erre figyelnek, ott lényegesen kevesebb bug keletkezik.


<?php
define('CAKE_SESSION_STRING', 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi');
Több helyen az elnevezés nem egyezik a tényleges funkcionalitással.



Set::extract() metódus: elvileg statikusan használja a legtöbb helyen, de használja benne a $this kulcsszót, ami szerintem rossz tervezésre utal. Ráadásul ha a hívás nem egy objektum példányon hívott tagfüggvényben van, akkor NOTICE-ol, ami szerintem elég gáz egy keretrendszertől.


<?php
function __returnSessionVars() {
	if (!empty($_SESSION)) {
		return $_SESSION;
	}
	$this->__setError(2, "No Session vars set");
	return false;
}
Miért ne lehetne a $_SESSION tömb üres?


<?php
define('WEBSERVICES', 'on');
Apróság, de például az ilyen jellegű konstansokat illene valamilyel prefixxel egy külön névtérbe zárni (mint ahogy sok esetben használja is a CAKE_ előtagot).



Szintén apróság, de ugye alap esetben a saját nézeteimet az app/views/{modellneve} könyvtárba kell tenni, ami azt jelenti, hogy ez esetben a saját modelljeim "névterébe" már bele szemeteltek, hiszen ebben a könyvtárban van már pár könyvtár. Erre a célra illett volna egy külön könyvtárat fenntartani, tisztább, szárazabb érzés.


<?php
 * @param mixed $name Name of variable
 * @param string $value Value to write
 * @return boolean True if the write was successful, false if the write failed
 * @access public
 */
	function write($name, $value) {
		$var = $this->__validateKeys($name);
A $name mixednek van definiálva, de utána közvetlenül ellenőrzésre kerül hogy karakterlánc-e, illetve a _validateKeys (a függvény neve sem az igazi) ellenőrzi, hogy megfelel-e egy bizonyos feltételnek. Ez a feltétel kizárja, hogy amúgy a PHP-ban megengedett kulcsokkal tegyünk le a munkamenetbe adatokat. Plusz itt is előjön némi "névtér" para, a munkamenet kezeléssel kapcsolatos metaadatok belekeverednek a "sima" munkamenet adatok közé, így a $_SESSION tömbre húzott felülettel simán hazavághatom a munkamenetet mondjuk ezzel a paranccsal: $this->Session->write("Config", 1).



Maga a CakeSession osztály sem a legszebb tervezés, egy nagy osztályba van minden belezsúfolva, ezt meg lehetet volna csinálni rendesen is. A database kezelős részben is van egy kis zavar, a __gc metódusban illene figyelembe venni a php.ini-ben beállított értéket.



Ezenkívül van benne egy szerintem komoly logikai hiba, ami szintén a rossz tervezésből fakad: a renew() tagfüggvény nem lehetne független attól a mechanizmustól, ami a munkamenetet tárolja, ugyanis a regenerate_session_id() az nem veszi ezt figyelembe, így nyugodtan kiosztásra kerülhetne egy már használatban lévő munkamenet azonosító. Kb. emiatt igazából nem is lehet korrekt módon saját munkamenet kezelővel kiegészíteni.



Szintén itt lehet megemlíteni, hogy rengeteg munkamenet kezeléssel kapcsolatos dolgot beállít, olyat is ami talán túlzás (csak sütiben történő tárolás), talán felesleges (high mód esetén referer_check), de például nem állítja be a http_only paramétert, ami biztonság szempontjából lényegesen fontosabb.


<?php
if (!preg_match('/(.*)Controller/i', get_class($this), $r)) {
	die (__("Controller::__construct() : Can not get or parse my own class name, exiting."));
}
Nem egységes a hibakezelési mechanizmus, általában trigger_error()-t használnak, de van mikor a die()-t, ami szerintem elég ciki, főleg, hogy rendelkeznek saját hibakezelővel. Szépen mutathat egy ilyen hiba egy éles oldalon. :)


<?php
/**
 * Returns number of errors in a submitted FORM.
 *
 * @return int Number of errors
 */
	function validate() {
		$args = func_get_args();
		$errors = call_user_func_array(array(&$this, 'validateErrors'), $args);

		if ($errors === false) {
			return 0;
		}
		return count($errors);
	}
Elég gyakran alkalmazott technika, hogy nincs a függvénynek paramétere, és a func_get_args()-ot használják helyette. Ez szintén elég rossz módszer, nem lehet tudni, hogy mire szolgálnak a paraméterek (a függvény leírása nem tartalmazza). Általábban jellemző a kódbázisra, hogy nem a legjobb elnevezéseket használja, nem lehet tudni a névből és a leírásból, hogy pontosan mit is csinál egy adott függvény, bele kell nézni a kódba.


<?php
function __construct($text = null) {
	$this->text = $text;
	parent::__construct();
}
A szülő konstruktorát szokás először meghívni, ez elég alap dolog.


<?php
/**
 * Validates a FORM according to the rules set up in the Model.
 *
 * @return int Number of errors
 */
	function validateErrors() {
A hibákat validáljuk?


<?php 
function referer($default = null, $local = false) {
	$ref = env('HTTP_REFERER');
	$base = FULL_BASE_URL . $this->webroot;

	if ($ref != null && defined('FULL_BASE_URL')) {
Először használja az állandót, majd később ellenőrzi, hogy létezik-e. Érdekes megoldás.



Jellemző a kódbázisra, hogy túlzsúfolt osztályokat használ, nem igazán használja az objektum kompozíciót. Ez alapjaiban elég rossz tervezés.



Meglehetősen esetleges a setter/getter metódusok használata.


<?php 
function __strip($value, $message = false) {
	$search = array('/%0a/i', '/%0d/i', '/Content-Type\:/i',
						'/charset\=/i', '/mime-version\:/i', '/multipart\/mixed/i',
						'/bcc\:/i','/to\:/i','/cc\:/i', '/\\r/i', '/\\n/i');

	if($message === false) {
		array_pop($search);
		array_pop($search);
	}
	return preg_replace($search, '', $value);
}
Tipikusan rossz megoldás ez a cserélgetés, lásd "bcbcc:c:", meg amúgy is az egész osztály elég rosszul van kialakítva (bővíthetőség, felelősségek). Mellesleg nem is értem, hogy miért nem használ valamilyen jól kiforrott megoldást, ha már nincs otthon ezen a területen.



Example: Simple User Authentication
Az alap példa is tipikusan rossz megoldás abból a szempontból, hogy nem generál új munkamenet azonosítót a bejelentkezéskor.



Adatbázis kezelő réteg: manapság elég komoly hiányosság, ha egy rendszer nem támogatja a prepared statement használatát.

PHP4 támogatás

Őszintén szólva nem olyan régen tudtatosult bennem, hogy a CakePHP PHP4-en is fut, ez volt az egyetlen dolog, ami előzetesen némi rossz szájízt adott a dolognak. Eleve nem értem, hogy miért nem tisztán PHP5-ből indultak ki az alkotók, rengeteg dologtól elzárták magukat, amit így most eléggé nyakatekert módon próbálnak meg biztosítani (például elvont osztályok, láthatóság, mágikus függvények stb.).

Ráadásul most csapdába is kerültek, hiszen egy olyan verzióban írják az egyik legnépszerűbb PHP keretrendszert, amit egy év múlva abszolút nem fognak támogatni.

Személyes konklúzió

Egyre több kódot átnézve az a benyomásom alakult ki, hogy a fejlesztői nem azok az igazán tapasztalt programozók, ráadásul tervezési minták terültén se nagyon vannak otthon. Hiányzik némi munkatapasztalat, nem találkoztak még bizonyos problémákkal, nem ismerik még a nyelv minden apróságát. Sok olyan kódrészletet lehet találni (felesleges ellenőrzések, függvényhívások stb.), amit egyszerűbben is meg lehetett volna oldani, most már nem csodálkozom, hogy a CakePHP lényegesen lassabb volt egy Hello World teszt esetében, mint néhány vetélytársa (Symfony, Solar, ZF).

UPDATE: itt rosszul emlékeztem, mert nem a Cake volt a leglassabb, hanem a Symfony, de az is kiderült, hogy ezen két rendszer estén automatikusan indul munkamenet, ami erőteljesen befolyásolhatta a teszt eredményét.

Szerintem most jött el annak az ideje, hogy egy mérleget készítsenek a fejlesztők arról, hogy mi tekintenek a Cake erősségének, és ezen szempontok figyelembevételével újratervezzék a keretrendszert PHP5 alapokon úgy, hogy bevonnak egy-két új embert, akinek több tapasztalata van karcsúbb, csinosabb, kiterjeszthetőbb core létrehozásában, OOP tervezésben (interfész orientált programozás).

Sok jó ötlet van a Cake-ben (mondjuk jó része RoR másolat), valószínűleg jól megkönnyíti a fejlesztést (munka tapasztalatom nincs vele kapcsolatban), de a jelenlegi kialakítás sok helyen elég gyengécske, messze van egy-két másik rendszer eleganciájától, és a legtöbb helyen az volt a benyomásom, hogy nem lenne könnyű megváltoztatni/kiterjeszteni az alap működést.
 
1

érdekes

virág · 2007. Szep. 17. (H), 08.11
Szia,

érdekes amit írsz, vagy inkább figyelemreméltó. Talán többet kellene hasonló szinvonalon kivesézni kódokat. Érdekes lenne olyan cégek CMS és egyéb rendszereinek a kódját átnézni hasonló szempontok szerint, akik sok-sok pénzért árulnak ilyen rendszereket.

Én pl. voltam olyan merész, hogy a Sharepoint-nak átnéztem azokat a generált kódjait (nem a forráskódját, mert az nem publikus) amit a böngésző meg fog kapni. Hát...nem tudtam sírjak-e vagy röhögjek... Az egyik rész csupa kisbetű volt a másik csupa nagy a harmadik keverve, össze vissza ID nevek stb. - látszott, hogy több csapat fejleszti és magasról letojja az egyik a másik szabályait.

De szerintem bármit átnéznél hasonló dolgokat lehetne találni, tekintsünk el az elfogultságtól - kinek mi a kedvence és azt védi. Ennek az egyik oka az, hogy senki nem akarja megfizetni a szép fejlesztést, legalábbis én még nem láttam olyat, hogy azt mondta volna a Pénz, hogy "jó van gyerekek, mostan kód szépsége és a tökéletessége a mérvadó". Idő, idő, kész van már?, mennyi plusz költésg? blabla... Persze ettől még a fejlesztő felelőssége, hogy ugyebár mégiscsak "programozó", akinek illő betartania a szabályokat. Csakhát ez szép elmélet.

De hátha ebből a bejegyzésből tanulunk és áldozunk magunkból plusz időt és plusz gondolkodást!

Hasznos!
3

más kódok, időszűke

Hodicska Gergely · 2007. Szep. 17. (H), 10.33
De szerintem bármit átnéznél hasonló dolgokat lehetne találni, tekintsünk el az elfogultságtól - kinek mi a kedvence és azt védi.
Ezzel kicsit vitatkoznék, mert szoktam belenézegetni más kódokba is. Ilyen részletesen még nem néztem meg mondjuk a Solart vagy a Symfonyt, de eddig ott akármilyen részbe néztem bele, korrket, szépen tervezett kódokat láttam (jól bevált tervezési mintákat használnak), érezni lehet rajtuk, hogy lefedik az adott problémát, van tapasztalata a fejlesztőnek, visszaköszönnek az apró kis nüanszok, amiről tud az ember.

Én pl. nagyon sok dolgot más kódokból lestem el, ha láttam valami érdekeset, akkor utánéztem, hogy jé erre is van lehetőség, na ez az, amit nem érzek a CakePHP-n. Bizonyos dolgokat biztos, hogy nem így csináltak volna meg, ha már láttak volna hasonló PHP keretrendszereket, vagy már szembesültek volna sokféle feladattal a munkájuk során. Sok mindent megcsináltak darabra, de a kódok minősége, az egész kohéziója/felépítése nem az igazi.

Ennek az egyik oka az, hogy senki nem akarja megfizetni a szép fejlesztést, legalábbis én még nem láttam olyat, hogy azt mondta volna a Pénz, hogy "jó van gyerekek, mostan kód szépsége és a tökéletessége a mérvadó". Idő, idő, kész van már?, mennyi plusz költésg? blabla... Persze ettől még a fejlesztő felelőssége, hogy ugyebár mégiscsak "programozó", akinek illő betartania a szabályokat. Csakhát ez szép elmélet.
Csak itt egy saját fejlesztésről van szó, nincs a belső nyomás, hogy határidőre készen kell lenni, pont itt mutathatod meg, hogy "amúgy" milyen kódokat csinálnál.

Más részről pedig sok esetben a korrekt megoldás nem kerül több időbe, mint az egyszerűbb. Vagy pedig először kicsit el kell bíbelődni, de utána van egy olyan megoldás a kezedben, amit bármikor be tudsz vetni. Az olyan dolgok, mint a korrekt elnevezések, legalább inline dokumentálás, szükség esetén refactoring stb. (amik "lokálisan" több időt vesznek el), tapasztalatom szerint mindig megtérülnek, mert egy kódhoz az esetek többségében hozzá kell nyúlni a későbbiek során, és ott már ezek meghálálják magukat.


Üdv,
Felhő
5

cakephp

Fraki · 2007. Szep. 17. (H), 15.02
Ennek a posztnak így nem sok értelme van, inkább a prekoncepció sugárzik belőle, hiába a konkrétumok. A pontok egy része az 1.2 aktuálisában már másképp néz ki (pl. konstansok namespace-e). A die-os dolgot sem találtam meg, az aktuálisban egyetlen indokolatlan die-t sem találtam. A view-k namespace-ével kapcsolatban viszont egyetértek, de együtt lehet vele élni.

Én is, sőt nyilván ilyen dokumentációhiány mellett mindenki rákényszerül a forráskód böngészésére, és nekem csak pozitív benyomásaim vannak (így van, nem, nem töltöttem még le a Symfonyt csak azért, hogy a kódját olvassam).

A poszt kiszemel néhány hibát, bár ezek egy részének inkább csak vélt szaga van, de szereti odatűzdelni a bombasztikus következtetéseket, hogy "rossz tervezésre", kiforratlan programozói bázisra, amatőrizmusra utal. A posztcím is némileg bombasztikus.

(Érdekes, Gergely, egyszer nekem is a fejemhez vágtad ezt a "rossz tervezésre utal"-dolgot, amikor olyan lapozó osztályt írtam, melynek van egy default-os callback függvénye, s hasonlóan elméletieskedő voltál, holott tudjuk, hogy a template-elésben a callback-ezés bevett gyakorlat. (És akkor meg lehet nézni, hogy a Drupal hogy callbackezik!) Ehhez képest nem kis bóknak vehetem azt az egyszer elejtett megjegyzésedet a template-vitánkban, miszerint a tankönyv beszél belőlem. -- Mindegy, az biztos, hogy azóta a "rossz tervezésre utal" megjegyzéseidet igencsak fenntartásokkal kezelem.)

Nem érzem a pontok relevanciáját sem. Nem a használat felől közelít. Így is lehet, de főleg ilyen egyoldalú módon a keretrendszer-recenziók műfajában elég szokatlan, és használat és összehasonlítás nélkül kissé hiteltelen, szubjektív is (pl. a formális paraméterek nélküli fv.-ekkel és az elnevezésekkel kapcs. megjegyzés; és akkor itt jönne a validateErrors további alátámasztás gyanánt, de használat nélkül ez is csak szőrszálhasogatás.)

Egy-két példa. A "Miért ne lehetne a $_SESSION tömb üres?" kérdés ilyen felületes ránézésre nem indokolt, és kritikának pláne nem meggyőző. Meg kell nézni, milyen mechanizmusban pontosan mit szolgál az a logika ott.

"Ez is itt elég bénácska, semmi értelme sincs tömböt használni." Ahhoz, hogy ebből jogos kritika legyen, fel kell nekik tenni IRC-en a kérdést. Nagyjából az egész kritikáról ez a légváras kapirgálás a benyomásom.

Lévén igen népszerű keretrendszerről szó, a tracjéből, a google groups listából, az irc-logból látható, hogy adott kódmennyiségre nézve igen nagy a kontroll. Éppen ezért, mielőtt elhamarkodott ítéletekbe bocsátkoznál, szerintem ismételd el magadban, hogy "nem véletlen". Abból több érvényes megállapítás fog származni. A kódmennyiségről pedig egy cikk jut eszembe, amit egyszer próbáltam feltenni a webes blogmark-felületen, de az nekem vhogy nem működik (vagy előzetes elbírálás van, nem tudom). A cikket (sőt, asszem az egy blogos párbeszéd) egy Zendhez modult író illető írta, összehasonlítja a Cake-et a Zenddel (mind2-ben járatosként), majd végül közli, hogy ezért és ezért tér át Cake-re. Elég érdekes.

Ezzel kicsit vitatkoznék, mert szoktam belenézegetni más kódokba is. Ilyen részletesen még nem néztem meg mondjuk a Solart vagy a Symfonyt

Látod, mondtam én, hogy szokatlan műfajba kezdtél. Én csak azután kezdenék azzal az állítással vitatkozni, miután megtettem, amit még nem.
6

Meglepetés

janoszen · 2007. Szep. 17. (H), 15.19
Őszintén szólva én is meglepődtem, hogy a CakePHP-t ilyen erős kritika érje azután, amennyi jót hallottam róla. Ami ebből az írásból leginkább megfogott, az a dokumentáció hiánya. Sajnos még a Zend Frameworkrő is csak egy API dokumentációt találtam, pedig igazán jól jönne egy-két szekvencia diagramm és hasonlók.

Szubjektív véleménnyel arra merek következtetni, hogy a kód íródott, csak azután készült a dokumentáció... ami a szememben a dolgok fordított menete.
15

Tessék

Joó Ádám · 2007. Szep. 18. (K), 22.52
Kérésed parancs: http://framework.zend.com/manual/en/

(Készül a magyar fordítás is.)
54

dokumentáció

Fraki · 2007. Szep. 23. (V), 03.32
Szubjektív véleménnyel arra merek következtetni, hogy a kód íródott, csak azután készült a dokumentáció... ami a szememben a dolgok fordított menete.

Attól függ, mit értünk dokumentáció alatt. A célközönségnek szánt dokumentáció (manuál, help) max. egyidőben készül, de mindig lépéshátrányban van. Számos keretrendszer (sőt, ezt nagyon tudnánk általánosítani, lényegében számítástechnikai produktum) úgy lát napvilágot, hogy a manuálja késik. Jó példa a prototype, amelyik ráadásul előbb futott be, minthogy bármilyen hivatalos doksija lett volna. (Mellesleg így befutnia egy keretrendszernek szerintem már önmagában bizonyít valamit.)
57

Pont ez az

janoszen · 2007. Szep. 23. (V), 08.32
Pont ez a problémám. Cégnél kezdtünk áttérni az UML alapú tervezésre. Eleinte nem nagyon akaródzott menni, de miután összealkottunk egy a triviálisnál valamivel bonyolultabb rendszert, még az a kollega is mondta hogy előre kéne tervezni utána megvalósítani, aki azelőtt nem nagyon volt híve az ilyesminek. Szóval a következő projekt már úgy fog menni. Értelemszerűen az UML-ből, ha jól meg van csinálva, akkor már könnyű legalább egy dokumentáció draftot készíteni.
7

re: cakephp

Hodicska Gergely · 2007. Szep. 17. (H), 16.30
Ennek a posztnak így nem sok értelme van, inkább a prekoncepció sugárzik belőle, hiába a konkrétumok.
Direkt írtam az elején, hogy nem volt vele kapcsolatban semmi prekoncepcióm. Most ha ezt nem hiszed el, akkor az Téged minősít.

A pontok egy része az 1.2 aktuálisában már másképp néz ki (pl. konstansok namespace-e).
Az 1.2.x.x ágat szedtem ki reggel az SVN-ből. :)

így van, nem, nem töltöttem még le a Symfonyt csak azért, hogy a kódját olvassam
Remélem ezt nem pozitívumnak szántad.

A die-os dolgot sem találtam meg, az aktuálisban egyetlen indokolatlan die-t sem találtam.
Ezért célszerű rendes IDE-t használni. ;) Controller PHP 300. sorában is van amúgy, én relevánsnak gondolom, de ez valszeg a prekoncepcióm miatt lehet. ;)

A poszt kiszemel néhány hibát, bár ezek egy részének inkább csak vélt szaga van, de szereti odatűzdelni a bombasztikus következtetéseket, hogy "rossz tervezésre"
Úgy érzem, hogy láttam már annyi rendszert, hogy van alapom egy ilyen kijelentésre, plusz pár témában elég sok mindent elolvastam. Nem a CakePHP funkcionalitását bíráltam, hanem a kódját. OOP szempontból kifejezetten nem szép, de amúgy is sok olyan kódrészletet találtam benne, ami nem az igazi. Ez utóbbit veheted szubjektívnek (bár nem az), ha Neked az úgy jobb érzés, esetleg rákereshetsz pl. a Cyclomatic complexity szavakra is. Az OOP részt illetően az elég egyértelmű, hogy nagy és túlzsúfolt osztályok vannak a cake-ben. Szintén csak azt tudom javasolni, hogy olvass utána, hogy ez miért nem szerencsés.

Nem érzem a pontok relevanciáját sem. Nem a használat felől közelít.
Pontosan, de ezt le is írtam a bevezetőben. Semmi bajom a Cake funkcionalitásával, csak a kódjait találom kicsit gyengének. Olyan post meg szerintem van elég, ahol leírják, hogy hogyan lehet blogot írni benne 10 perc alatt.

és használat és összehasonlítás nélkül kissé hiteltelen
Hát ez itt elég logikus. :) Most ha leírom, hogy a Solar/Symfony rendszerekben szerintem sokkal jobban átgondolt elnevezések vannak, akkor hitelesebb lesz az a kijelentésem, miszerint a Cake beliek nem azok. Ne viccelj már!

validateErrors további alátámasztás gyanánt, de használat nélkül ez is csak szőrszálhasogatás.
Miről beszélsz, olvasd el a függvény nevét, és a leírását, köze nincs a kettőnek egymáshoz. És nyilván ezt azért hoztam szóban, mert jellemző a Cake kódjára (elég rövid ismerkedés után is), lásd Sanitize->paranoid().

Ahhoz, hogy ebből jogos kritika legyen, fel kell nekik tenni IRC-en a kérdést. Nagyjából az egész kritikáról ez a légváras kapirgálás a benyomásom.
Lehet, hogy Neked ez a benyomásod (ha gondolod kérdezd meg őket IRC), nekem nincs rá szükségem, tudom, hogy miért van így, és azt is hogy minek a workaroundja (ennek is utánaolvashatsz amúgy a statikus változókról szóló résznél). (Itt bocs a hangnemért, csak uncsi, hogy engem próbálgatsz érdemi reakciók helyett.)

"Miért ne lehetne a $_SESSION tömb üres?"
Erre speciel rájöttem, nála alap, hogy a Config kulcs az létezik a sessionben. Legalábbis erre tudok gondolni. Csak látod itt jön be, hogy ha ott nem egy empty hívás van, hanem az be van burkolva egy isValidSession vagy ilyesmi nevű metódusba, akkor nincs félreérthetőség.

mielőtt elhamarkodott ítéletekbe bocsátkoznál, szerintem ismételd el magadban, hogy "nem véletlen". Abból több érvényes megállapítás fog származni.
Egyenlőre sajnos nem produkáltál semmit a konkrétumokkal kapcsolatban, pedig elhangzott több konkrét logikai hiba (session kezelés, fölöslegesen meghívott függvény, logikátlan kiértékelési sorrend, hibás escapelés, namespace parák több helyen is), érdekes módon ezek benne maradtak a nagy konroll mellett is.

A cikket (sőt, asszem az egy blogos párbeszéd) egy Zendhez modult író illető írta, összehasonlítja a Cake-et a Zenddel (mind2-ben járatosként), majd végül közli, hogy ezért és ezért tér át Cake-re. Elég érdekes.
Ez így elég konkrét. :)

Látod, mondtam én, hogy szokatlan műfajba kezdtél. Én csak azután kezdenék azzal az állítással vitatkozni, miután megtettem, amit még nem.
Szerencsére Te hoztad a formád, és csak a személyeskedésre futotta. A nem néztem meg ilyen alaposan azt jelenti, hogy elég sok dolgot láttam már benne, és kifejezetten szép kódokat, ajánlanám mindenkinek, hogy nézegesse őket, sokat lehet tanulni belőlük.


Üdv,
Felhő
11

re: cakephp

Fraki · 2007. Szep. 18. (K), 05.04
Direkt írtam az elején, hogy nem volt vele kapcsolatban semmi prekoncepcióm. Most ha ezt nem hiszed el, akkor az Téged minősít.

Nem bánom, de bennem már a cím is ezt a bonyomást keltette. Ha valami, akkor épp a Cake körül nem érzek hype-ot (ellentétben a Railszel -- a legrosszabb fajtából --, mint azt a belinkelt videó is mutatja).
Az 1.2.x.x ágat szedtem ki reggel az SVN-ből. :)

Ok, sry.
Remélem ezt nem pozitívumnak szántad.

Semmilyennek.
Ezért célszerű rendes IDE-t használni. ;) Controller PHP 300. sorában is van amúgy, én relevánsnak gondolom, de ez valszeg a prekoncepcióm miatt lehet. ;)

Ezt köszi, szintén sry. (De miért célszerű rendes IDE-t használni? Kereséshez?) 'die('-ra kerestem, ezért nem találtam meg, az az egy maradt ki, ebből még mindig nem tudok arra következtetni, amire ezzel kapcsolatban te. A többi die szerintem indokolt, ez van a leggyanúsabb helyen, de még így sem merném leírni. BTW, a Cake hibakezelése egyszerűen brilliáns, ahogy a kódot meg kontextust kirakják.
Úgy érzem, hogy láttam már annyi rendszert, hogy van alapom egy ilyen kijelentésre, plusz pár témában elég sok mindent elolvastam. Nem a CakePHP funkcionalitását bíráltam, hanem a kódját. OOP szempontból kifejezetten nem szép, de amúgy is sok olyan kódrészletet találtam benne, ami nem az igazi. Ez utóbbit veheted szubjektívnek (bár nem az), ha Neked az úgy jobb érzés, esetleg rákereshetsz pl. a Cyclomatic complexity szavakra is. Az OOP részt illetően az elég egyértelmű, hogy nagy és túlzsúfolt osztályok vannak a cake-ben. Szintén csak azt tudom javasolni, hogy olvass utána, hogy ez miért nem szerencsés.

Köszönöm a tanácsot. Igazából nem értem, mi itt a bírálat. Lemérted a CakePHP CCN-jét? Túl sok vagy túl kevés lett? Én nem érzem úgy, hogy "nagy és túlzsúfolt osztályok" lennének benne. Lehet, hogy szomorú, de nekem az a véleményem, talán nem kéne ennyit olvasnod :) Olvastam már egyetemi tanár blogján rails-kritikát, és igazából elkeserítő... Végig arról szólnak a kommentek (túlzok biztos), hogy semmi értelme az ilyen elmélet felől közelítősdi kritikának, hogyaszongya a nagykönyvben nem úgy van leírva. A szemezgetéseidből semmilyen következtetést nem lehet levonni a Cake-re vonatkozóan. És ha a Symfonyról írtál volna, arra sem lehetne. A Cake kódját baromira szereti a használói bázisa (köztük engem). Ez biztos.

Sajnálom, ha személyeskedésnek vetted, amit az elhamarkodott ítéleteiddel kapcsolatos tapasztalataimról írtam, de be kell vallanom, nem minden pontot tudtam 100%-ig követni, és feltételezem, ezzel más is így van, így nem tartottam teljesen indokolatlannak megemlíteni. Amit tudtam, azok egy jó részéről pedig nem vagyok meggyőződve, hogy (akár a nagykönyv szerint) nagyobb vétkek lennének, mint mondjuk docblokkból validálni.

Pontosan, de ezt le is írtam a bevezetőben. Semmi bajom a Cake funkcionalitásával, csak a kódjait találom kicsit gyengének. Olyan post meg szerintem van elég, ahol leírják, hogy hogyan lehet blogot írni benne 10 perc alatt.

Itt lehet, hogy közelítünk, dehát az nem ment egy cikket, ha elismered, hogy irreleváns. Nem tutorialt kértem számon, hanem hogy legyen érvényes következtetése (vagy ne legyenek túlzók).

Hát ez itt elég logikus. :) Most ha leírom, hogy a Solar/Symfony rendszerekben szerintem sokkal jobban átgondolt elnevezések vannak, akkor hitelesebb lesz az a kijelentésem, miszerint a Cake beliek nem azok. Ne viccelj már!

Nem lesz hitelesebb. Akkor lesz hitelesebb, ha prezentálsz egy összehasonlítást.
Miről beszélsz, olvasd el a függvény nevét, és a leírását, köze nincs a kettőnek egymáshoz. És nyilván ezt azért hoztam szóban, mert jellemző a Cake kódjára (elég rövid ismerkedés után is), lásd Sanitize->paranoid().

A validateErrors-szal sem elsősorban a megjegyzéssel magával van bajom, hanem az abból levont következtetéssel. Lehet ez a Cake legkevésbé beszédes elnevezése akár, de ebből semmilyen általánosítást nem lehet tenni. A Sanitize->paranoid()-dal mi a gond? Szerintem kifejező.

Lehet, hogy Neked ez a benyomásod (ha gondolod kérdezd meg őket IRC), nekem nincs rá szükségem, tudom, hogy miért van így, és azt is hogy minek a workaroundja (ennek is utánaolvashatsz amúgy a statikus változókról szóló résznél). (Itt bocs a hangnemért, csak uncsi, hogy engem próbálgatsz érdemi reakciók helyett.)

Már megbocsáss, de akkor ezt kell leírni, nem úgy titkolózni, hogy hát ez itt bénácska. Ha kompatibilitási workaround, akkor nem érvényes az a kijelentés, hogy "semmi értelme". És az egész megintcsak irreleváns, mert ahhoz a témához kapcsolódik, hogy szeretjük-e, vagy nem, hogy a cake php4-en is fut.

(Totál OFF, de újabb példa, mekkora katasztrófa ez a php... Valahogy az IE-hez tudnám hasonlítani a böngészők világában. /OFF)

Erre speciel rájöttem, nála alap, hogy a Config kulcs az létezik a sessionben. Legalábbis erre tudok gondolni. Csak látod itt jön be, hogy ha ott nem egy empty hívás van, hanem az be van burkolva egy isValidSession vagy ilyesmi nevű metódusba, akkor nincs félreérthetőség.

Valószínűleg inkább annyi, hogy a paraméter nélküli read() hívásokról feltételezi, hogy előzetesen check()-oltunk. Ebben semmi kivetnivalót nem látok. Sőt, teljesen logikusnak tartom, hogy ilyenkor kapok egy notice-t (a Config kulcsot nemrég implementálták, úgyhogy nem valószínű, hogy az játszik).

Egyenlőre sajnos nem produkáltál semmit a konkrétumokkal kapcsolatban

Talán most, bár tényleg nem az volt a célom, hogy pontról pontra vitába szálljak, hanem csupán azt közölni, hogy ez az egész értelmetlen úgy ahogy van. Egyszerűen az egésznek semmi tanulsága sincs.

érdekes módon ezek benne maradtak a nagy konroll mellett is.

Ezt nem véletlenül hangsúlyoztam, és bár az észrevételeid jónéhány részen vitathatók, tény, hogy te is a kontroll része vagy.

Ez így elég konkrét. :)

Sorry, kicsit már összekevertem. A blogos párbeszéd itt, a zendes fejlesztő írását fogalmam sincs már, hol olvastam. (XY, Zendre modult fejlesztő cég tagja leteszi a voksát cake mellett sztori, és az rémlik, hogy hasonlóan érvel, mint a párbeszédben olvasható.)

Szerencsére Te hoztad a formád, és csak a személyeskedésre futotta. A nem néztem meg ilyen alaposan azt jelenti, hogy elég sok dolgot láttam már benne, és kifejezetten szép kódokat, ajánlanám mindenkinek, hogy nézegesse őket, sokat lehet tanulni belőlük.


A kettő még mindig nem ugyanaz, de mindegy. Csak azt tudom mondani, hogy megpróbálok majd tapintatosabb lenni, ha ilyen vészes lennék... (És sajnálom, hogy nem értek egyet.)
12

Nincs itt probléma

dtaylor · 2007. Szep. 18. (K), 08.56
Én, a Felhő által bemutatott részekből megértettem mit akar mondani. Te meg nyilván véded a kódot (biztos fejleszted is, de az egy szem aliasodból nem derül ki, hogy ki vagy).

Vitatkozni felesleges, a tények elég makacs dolgok. A kódban nagyon sok hiba van. Annyit kellett volna mondani: kösz, átnézzük, javítjuk. :)
14

tényleg nincs probléma

Fraki · 2007. Szep. 18. (K), 15.15
Köszönjük, hogy letetted a voksodat. Osztom is a véleményedet, azt leszámítva, hogy én feleslegesen fejtem ki a sajátomat. (És megtisztelő a feltételezésed, de nem.)
13

re: cakephp

Hodicska Gergely · 2007. Szep. 18. (K), 11.06
A többi die szerintem indokolt, ez van a leggyanúsabb helyen, de még így sem merném leírni.
Az egyik legfontosabb osztályról van szó, az nem használja a rendszer saját hibakezelő mechanizmusát. És nem csak azért gáz, mert hogy saját magával nem konzisztens, hanem mert ez esetben a hiba nem lesz része a központi hibakezelésnek: megjelenik az éles oldalon, nem kapsz róla értesítést (ha lett volna mondjuk beállítva, de ez éles oldalon mondjuk illő).

BTW, a Cake hibakezelése egyszerűen brilliáns, ahogy a kódot meg kontextust kirakják.
Ez tényleg nagyon hasznos, de ettől még ez a része a parasztvakítás.

Igazából nem értem, mi itt a bírálat. Lemérted a CakePHP CCN-jét? Túl sok vagy túl kevés lett?
Ez nem bírálat, hanem tény. Statisztikailag bizonyított, hogy bizonyos szoftver metrikák erősen korrelálnak a rendszerben keletkező hibák számával, ez is ezek közé tartozik. Túl kevés nem is nagyon lehetne, a túl sok meg látszik ránézésre is.

Én nem érzem úgy, hogy "nagy és túlzsúfolt osztályok" lennének benne.
Ez nem érzésre megy, tényleg csak azt tudom javasolni, hogy olvass utána kicsit a témának. Ott van például az emlegetett CakeSession osztály: ránézésre látszik, hogy legalább két dolog van van benne összekeverve. Kéne egy külön Manager osztály, ami megvalósítja a Session kezelés logikáját, és egy (vagy több) másik (közös interfésszel), ami a tárolás specifikus részeket kezeli. Amúgy próbáld meg kiegészíteni, hogy tudjon Memcache-ben tárolni sessiont, csak úgy tudod, hogy ha módosítod az alap osztályt: ettől rossz tervezés.

Nem lesz hitelesebb. Akkor lesz hitelesebb, ha prezentálsz egy összehasonlítást.
A validateErrors-szal sem elsősorban a megjegyzéssel magával van bajom, hanem az abból levont következtetéssel. Lehet ez a Cake legkevésbé beszédes elnevezése akár, de ebből semmilyen általánosítást nem lehet tenni. A Sanitize->paranoid()-dal mi a gond? Szerintem kifejező.
Továbbra sem értem, hogy konkrét hibák milyen kapcsolatban állnak más keretrendszerekkel. Általánosítani meg azért merek (de vazz ezt is írtam), mert hogy rendre ilyen elnevezésekkel találkoztam már a konfigban is. Szintén egyszerű: meglátod a kódban ezt a függvényhívást, találd ki, hogy mit csinálhat, csak úgy tudod, hogy ha megnézed a forráskódját: ezt szintén tipikusan bad smallnek hívják.

Már megbocsáss, de akkor ezt kell leírni, nem úgy titkolózni, hogy hát ez itt bénácska. Ha kompatibilitási workaround, akkor nem érvényes az a kijelentés, hogy "semmi értelme". És az egész megintcsak irreleváns, mert ahhoz a témához kapcsolódik, hogy szeretjük-e, vagy nem, hogy a cake php4-en is fut.
Először is ezt egy OOP fejlesztőnek illene tudni, az alap Singelton minta kapcsán előjön. Másodszor meg nem kompatibilitási workaround, hanem a nyelv sajátja (amit az ajánlott manuál oldalon le is írnak), nem lehet statikus változónak referenciát értékül adni, egyszerűen csak nem kell az értékadásnál a &-t használni, és akkor nincs szükség tömbösdire.

Valószínűleg inkább annyi, hogy a paraméter nélküli read() hívásokról feltételezi, hogy előzetesen check()-oltunk. Ebben semmi kivetnivalót nem látok. Sőt, teljesen logikusnak tartom, hogy ilyenkor kapok egy notice-t
Nem is a notice-szal van a bajom, hanem hogy a kód nem fejezi ki, hogy mi is történik.

Talán most, bár tényleg nem az volt a célom, hogy pontról pontra vitába szálljak, hanem csupán azt közölni, hogy ez az egész értelmetlen úgy ahogy van. Egyszerűen az egésznek semmi tanulsága sincs.
Érdekes módon a konkrét hibákra nem is reagáltál. Számomra tanulságos volt, a Cake egyenlőre szerintem egy csinos játékszer, ami sok mindenre és sok mindenkinek valószínűleg kitűnően megoldja a problémáit. Nagyobb projektet viszont nem mernék egyenlőre rá bízni, hogy ha a core-ban is ilyen parák vannak.

A sok flame mellett viszont például arról nem esett szó, hogy mi a Cake terve a PHP4-gyel kapcsolatban. PHP6 alatt is majd PHP4 feature set mellett fogják programozni?


Üdv,
Felhő
16

re: cakephp

Fraki · 2007. Szep. 19. (Sze), 05.43
Hát akkor lássuk.
Az egyik legfontosabb osztályról van szó, az nem használja a rendszer saját hibakezelő mechanizmusát. És nem csak azért gáz, mert hogy saját magával nem konzisztens, hanem mert ez esetben a hiba nem lesz része a központi hibakezelésnek: megjelenik az éles oldalon, nem kapsz róla értesítést (ha lett volna mondjuk beállítva, de ez éles oldalon mondjuk illő).

Az a die() nagy valószínűséggel soha nem fut le az égvilágon, legfeljebb valami óriási core bug esetén. Én legalábbis akárhogy gányoltam a controllereim nevével fájlnevekben, classokban, táblákban stb., vagy a dispatcherben elakadt php fatal errorral (gányolni is tudni kell), vagy sima esetben lement hibakezelőn. Viszont ugye a controller nevét parse-olja preg_matchcsel, aminek meg azért _illik_ (szeretjük ezt a szót) egy ágat szentelni sikertelen parse esetére is. Mert ha nem szentelek neki ágat, akkor meg az lesz a baj, mert _illik_. Ha meg hibakezelőbe rakom, akkor az lesz _egy kicsit bénácska_, mert valójában fatális, nem kezelendő hibáról volna szó.

Szóval nem igaz, hogy ebből éles oldalon csakúgy die lesz, és az sem igaz, hogy "saját magával nem konzisztens", mert ugye egy darab die-ról van szó, már amelyikre korábban nem vetettem egy pillantást a szóközkihagyásos keresésemkor. De ha gondolod, vizsgáljuk meg a többit is.

Egy biztos, hogy a cake-nek konzisztens hibakezelése van, amit konzisztensen használ.

Ez tényleg nagyon hasznos, de ettől még ez a része a parasztvakítás.

Egy BTW-be talán belefér, már csakúgy ellensúlyozandó azt a másik féle parasztvakítást (l. később).

Ez nem bírálat, hanem tény. Statisztikailag bizonyított, hogy bizonyos szoftver metrikák erősen korrelálnak a rendszerben keletkező hibák számával, ez is ezek közé tartozik. Túl kevés nem is nagyon lehetne, a túl sok meg látszik ránézésre is.

Akkor most ki kellene mutatni, hogy a cakephp-ban túl sok hiba keletkezik. Sok sikert.
Amúgy próbáld meg kiegészíteni, hogy tudjon Memcache-ben tárolni sessiont, csak úgy tudod, hogy ha módosítod az alap osztályt: ettől rossz tervezés.

app/config/core.php, 79. sor

Továbbra sem értem, hogy konkrét hibák milyen kapcsolatban állnak más keretrendszerekkel.

Ugyebár eztet az elnevezésekkel kapcsolatos fenntartásaidra írtam. Nézzük azokat a konkrét hibákat.

low(): Függvények rövidítése: túl sok értelme nincs, szemantikailag nem ad hozzá semmit (sőt inkább rontja, nem túl kifejező egy low() nevű függvény), a rövidítésre meg megfelelő IDE-t kell használni. Ráadásul nem használja következetesen a saját rövidítéseit.

Tény, hogy a getElementsById sokkal beszédesebb, mint a szemantikailag semmit hozzá nem adó $. Nyilván a prototype készítői is kicsit amatőrök, kicsit bad smellre hajlamos fejlesztők, akiknek valószínűleg nincs megfelelő IDE-jük...

A rövidítések problémájának egy részét át tudják vállalni az IDE-k, de az a helyzet, hogy a programozói világot ez egy cseppet sem zavarja abban, hogy a kódot is rövidítse olykor, s hogy a frameworkök is néhány saját rövidítést bevezessenek maguknak. Ez mintha divat is lenne mostanában, egyfajta nyelvgyúrás, a nagykönyvben biztos nincs leírva, és a cake-nek is van egypár ilyenje (e, m, am stb.) Ezeket a manuálokban előkelő helyen szokták ismertetni, ezek az adott framework sajátjai, lehet szeretni, nem szeretni, és főleg nem muszáj őket használni. Nekem is vannak rövidítéseim, pl. cf a create_function helyett (off, ez a create_function is micsoda egy torzszülemény a lambdázásra; on). És nekem a low() is tetszik a szintén katasztrofális strToLower() helyett. (Nem tudok megállni egy újabb kis parasztvakító kitérőt, ajánlott olvasmány, 1. pont.)

Egyébként adható erre a jelenségre egy viszonylag természetes magyarázat, amit most nem taglalnék időhiány miatt, mindenesetre a rövidítésekbe ilyenformán belekötni legalábbis vérszubjektív eljárás, konkrét hibaként érvelni vele meg konkrét hiba.

Azt az állításodat, hogy nem használja következetesen a rövidítéseit, nem támasztottad alá.

mert hogy rendre ilyen elnevezésekkel találkoztam már a konfigban is.

Erre szolgálna alátámasztásul a CAKE_SESSION_STRING?...

--

És akkor most mehetünk végig az egészen? Ha még azt mondod, hogy hoppá, validateErrors, nem furcsa ez egy kicsit, akkor még hümmögök rá, de a sanitize->paranoid()-ra már azt mondom, ne erőlködjünk. Olyan a posztod, mintha egy irodalmi blogra küldtél volna kritikát egy könyvről, és elkezdenéd benne taglalni, hogy az első 10 oldalon ennyi és ilyen helyesírási meg nyelvhelyességi hibát találtam, ez az író bizony gyengén tervez. És pszicholingvisztikailag bizonyított tény, hogy az ember 4 sorosnál hosszabb mondatokat nehezen ért már meg, úgyhogy Beckettet jobb, ha nem is olvasunk... Pedig én prekoncepció nélkül álltam neki...

Ám legyen, de ezekből semmilyen következtetést nem lehet levonni. Én épp ezt nevezném parasztvakításnak (elég hatásos is, ahogy nézem). És ezer méterről látszik, hogy könnyelműen, félvállról közelítesz egy mellesleg elismerten jó minőségű anyaghoz. És néha igencsak bakot lősz, csak ébernek kell lenni. Egyszerűen gyorsan ítélsz. (Bocs, ha ez személyeskedésnek számít.)

---

Még egyvalami fontos. A használatot nem lehet teljesen, sőt megkockáztatom, csak alig lehet elkülöníteni a kódtól. Az a legkorrektebb eljárás a kód megítélésére, ha összeveted egy ugyanolyan funkcionalitású másik kóddal. Ha van egy keretrendszer, amit azért szeretnek, amiért olyan, amilyen (belsőségeit beleértve, és nem azért, mert szép az adminja, mint a joomlának), akkor igencsak meredek dolog összehasonlítási alap nélkül megbírálni. Nézz szét a framework-recenziók között a blogoszférában, 98%-uknak X vs Y a címe. (És ez ugye még hangsúlyosabb, ha elnevezésekről akarunk ítélkezni.) (Mellesleg maradva a könyves példánál, még az irodalomtudomány is rájött, hogy a recenzió alapvetően összehasonlító tevékenység (komparatisztika).)

Nincs szempontod. Ha azt mondanád, szemügyre veszem a cake architektúráját, vagy magját, komponenseit, szolgáltatását, konzolját, CoC-jét, külcsínét, kezelhetőségét, stabilitását, az mondana valamit (és mennyire kézenfekvő is volna a rutinszerű összevetés akkor), de így, hogy megnéztem "a kódot", és akkor olykor hajuknál fogva ideráncigált tankönyves, olykor teljesen megalapozatlan, olykor jogosnak tűnő, de teljesen jelentéktelen dolgokon fennakadó kifogásaidat egy ilyen nagyzoló című posztba bedobálod, hát, te tudod...

---

Először is ezt egy OOP fejlesztőnek illene tudni, az alap Singelton minta kapcsán előjön.

Az, hogy a statikus változó nem tartja meg a változóreferenciát?
Másodszor meg nem kompatibilitási workaround, hanem a nyelv sajátja

Már amennyiben nem a php4 hülyeségéről beszélünk, de tudomásom szerint arról. Legalábbis a dokban a php4 motorjáról van szó ennél a résznél. Erről a nyelv sajátjáról egyébként hirtelen az IE6 text selection bugja jut eszembe: hát igen, az is a böngésző sajátsága, hogy a head-en kívül is engedi a BASE taget, amiből sokminden érdekes dolog következik, közte az említett _sajátságot_ is. (Vagyis minden hülyeséget meg lehet magyarázni.)

Nem referenciaként átadni az objektumváltozót nem ugyanaz, mint referenciaként. Az utóbbi teljesítmény szempontjából optimálisabb. Lehet, hogy az egésznek nincs akkora jelentősége, de én azért nem bénácskáznám le amolyan felvételiztetői rutinnal azt, ha egy framework alkotói a teljesítményben jobb verziót választják, különösen akkor, ha egy bekezdéssel lejjebb meg már arról értekezek, hogy nagyobb projektre nem használnám.

Nem is a notice-szal van a bajom, hanem hogy a kód nem fejezi ki, hogy mi is történik.

A kód azt fejezi ki, hogy a read() a kiolvasásért felelős, a csekkolásért nem. És ez is történik. Bad smelling.

Érdekes módon a konkrét hibákra nem is reagáltál.

Érdekes módon ezt pont arra a mondatomra írod, melyben közlöm, hogy nem is érdemes. (Miközben lassan végigmegyünk az összesen.) A _posztra_ reagáltam, egészen konkrétan.

A sok flame mellett viszont

...kezdve a poszttal...

például arról nem esett szó, hogy mi a Cake terve a PHP4-gyel kapcsolatban

Ha talán ez lett volna a fő kérdés a posztban...

PHP6 alatt is majd PHP4 feature set mellett fogják programozni?

Ehhez szvsz előbb várjuk meg a PHP6-ot. De ha most valamit mondanom kéne (bár nem tudom, miért van ennek olyan nagy jelentősége), akkor talán azt, hogy jelenleg inkább hozzáad ez a kompatibilitás az értékéhez, mint levon belőle. Valószínűleg nem olyan kritikus a kompromisszum, vagyis megéri.
18

Amikor az emberek elbeszélnek egymás mellett

Török Gábor · 2007. Szep. 19. (Sze), 07.15
A vita Felhő és közted kezd igen kevés szakmai többletet adni. Felhő felsorakoztatta egy általa kipróbált keretrendszer első benyomásait, te pedig minden ponton próbálod bizonyítani, hogy a Cake nem is. Senki nem mondta, hogy rossz framework, Felhő egyszerűen csak kiragadott néhány kritikusabb pontot. Felesleges ezt túlcsámcsogni. Senki nem fog rád megharagudni, ha írsz egy CakePHP-t bemutató cikket, amelyben bemutatod a Cake napos oldalát. Még a végén lehet, hogy Felhő lesz a legnagyobb Cake contributor. (:

És nekem a low() is tetszik a szintén katasztrofális strToLower() helyett.

Ez rettenetesen demagóg szöveg, a felette felhozott prototype-os példád is. A low-val nem az a baj, hogy rövid ÓMG, hanem hogy nincs az a programozó, aki tudja róla, hogy mire való, milyen paramétereket vár, és mi lesz a visszatérési értéke. (Még szerencse, hogy a legtöbb nyelvben a do nyelvi elem.) A strToLower egyértelműen jelzi, hogy stringet vár paraméterként, lekicsinyíti, továbbá valószínűleg a visszatérési értéke lesz az új string. Továbblépve, bizonyára olvastad, hogy a másik baj a low-val, amire Felhő rámutatott, hogy egyszerűen csak egy wrapper a PHP-s natív strtolower felett.

Any fool can write code that a computer can understand. Good programmers write code that humans can understand. (Martin Fowler: Refactoring)

Az elbeszélést lezárandó, várjuk frakitől a CakePHP-t bemutató cikket! Ha bármilyen segítségre szükséged van, fordulj bátran a WL szerkesztőségéhez.
20

low

Fraki · 2007. Szep. 19. (Sze), 07.55
A low-val nem az a baj, hogy rövid ÓMG

Erről szerintem itt eddig senki nem is beszélt.

A low() rövidítés, épp olyan, mint az e() vagy az am(), és nem tudom, miért lenne demagóg a prototype-os példám. Alapvetően félreértés egy rövidítéstől elvárni, hogy többet mondjon, mint amit rövidít. Azt sem értem, miért érveltek azzal, hogy baj, ha csak egy wrapper, amikor a rövidítéseknek ez a tulajdonság sajátja. A rövidítés nem azért van, hogy többet adjon hozzá, hanem hogy a nevét lerövidítse. A $ is csak egy wrapper.
22

prototype

zila · 2007. Szep. 19. (Sze), 08.19
A prototype azért rossz példa, mert ott nem csak az a cél, hogy a programozónak kevesebbet kelljen gépelnie, hanem a js kód kisebb legyen, mivel a sávszélességgel spórolni kell (az olvasható kód megőrzése mellett, ha lehet). A $ egy wrapper igaz, de a low-val ellentétben nincs más jelentése, megtanulod, hogy ez document.getElementById-t jelent és pont. Ha úgy tetszik a $ nem csak rövidít hanem gyorsabbá teszi a kód letöltődését, csökkenti az oldalméretet, így van hozzáadott érték.
A low ránézésre nem mond semmit arról mit csinál. Hozzáadott érték nulla. És ez vele a legnagyobb baj.
21

még egy pontosítás

Fraki · 2007. Szep. 19. (Sze), 07.58
Felhő felsorakoztatta egy általa kipróbált keretrendszer első benyomásait

Sajnos pont ez nem történt meg. Nem próbálta ki. És én meg az egész alól épp csak ezt hiányolom.
23

kódvizsgálat

zila · 2007. Szep. 19. (Sze), 08.22
Kódvizsgálathoz nem kell kipróbálni. Annak nem az a célja, hogy tesztelje a működést...
24

ezt honnan veszed?

Hodicska Gergely · 2007. Szep. 19. (Sze), 10.12
Sajnos pont ez nem történt meg. Nem próbálta ki. És én meg az egész alól épp csak ezt hiányolom.
ÁÁÁÁÁÁÁÁÁÁÁÁÁÁ, ezzel kezdtem: az volt a cél, hogy kipróbáljam, és ki is próbáltam, csináltam benne egy apró próbaalkalmazást pár táblával. És nem győzöm Neked leírni, hogy nem a funkcionalitásával van bajom, csak épp nem esek hasra attól 2007-ben, hogy tud generálni egy csomó mindent (más is tud), viszont a kód felépítése annál inkább. Ennyi.


Üdv,
Felhő
53

innen veszem

Fraki · 2007. Szep. 23. (V), 01.53
ÁÁÁÁÁÁÁÁÁÁÁÁÁÁ, ezzel kezdtem: az volt a cél, hogy kipróbáljam, és ki is próbáltam

Idézek a posztból:
- "pont azért akartam megnézni, hogy eldöntsem, a Symfony-t vagy őt lenne érdemes szadabidőben kicsit próbálgatni"
- "munka tapasztalatom nincs vele kapcsolatban"

Szólj, ha ebből arra kell következtetni, hogy a poszt megjelenésének pillanatában volt vele munkatapasztalatod.
60

még egy ÁÁÁÁÁÁÁÁÁÁÁÁ

Hodicska Gergely · 2007. Szep. 23. (V), 10.24
Na ez megint Rád jellemző fordulat. Azt mondom kipróbáltam, erre azt mondod, hogy nem. Kérdem miért, mondod, mert nincs benne munkatapasztalatod. (Szerintem egyértelmű, hogy a kipróbálás egy pár táblás (különbőző relációkat kipróbáló) móriczka példán az nem munkatapasztalat). Ezek után Te beszélsz mellébeszélésről, meg flamelésről?


Üdv,
Felhő
61

Sztem, nem kell ennyire forrón enni...

janoszen · 2007. Szep. 23. (V), 11.34
Szerintem itt egyik félnek, másiknak is igaza van. Igazat kell adjak abban, hogy ezek a frameworkök többnyire amatőr kezdeményezések és annak megfelelően készültek el.

Lásd példa, Wordpress. Egy bugware szar, már elnézést, mégis mennyien használják. Egy céleszköz, azt csinálja, amire ki lett találva és ha valaki nem tud sok erőt és energiát fordítani vagy nincs meg a tudása az OOP (ne adj Isten, UML) alapú teljes rendszer fejlesztésre, akkor ezek az eszközök annak ellenére, hogy magasabb szinten használhatatlanok, megnövelik a hatékonyságot.

Viszont azt is látni kell, hogy ezek az eszközök nagy, céges környezetben, komoly rendszerfejlesztésnél az inkonzisztenciáikkal hátráltatják a munkát.

Ergo, kinek mi. Van egy csomó ember, akinek egyszerűen össze kell rakni egy oldalt és pont. Fölösleges lenne erre egy teljes OOP fejlesztőcsapatot kialakítani, mert robbantaná a költségkeretet. Vannak viszont az olyan projektek, amik nagyon, más rendszerekkel összefüggőek, stb. itt szinte lehetetlen egy amatőr kezdeményezésből született frameworköt használni.
63

forrón evés

Hodicska Gergely · 2007. Szep. 23. (V), 12.03
Persze csak rohadt bosszantó, hogy nekem kell kb. magyarázkodni, miközben neki van folyamatos értelmezési problémája.


Üdv,
Felhő
64

Gondolj bele...

janoszen · 2007. Szep. 23. (V), 13.08
Gondolj bele... nyilván Te sem úgy születtél, hogy UML-lel terveztél összefüggő nagy rendszereket. Megértenéd-e a saját érveidet, ha nem lenne meg ez a tapasztalatod? Mert én belegondolok abba, hogy egy-két éve biztosan nem értettem volna, mi azzal a baj, amit felsorolsz. Most már volt szerencsém szívni hasonló problémákkal, tudom.
65

ezt a részét megérteném

Hodicska Gergely · 2007. Szep. 23. (V), 14.00
Ezt a részét teljesen megérteném, de nézd meg a leglentebbi hozzászólásom pár párbaszéd példáját, vagy ezt a "kipróbálás" dologot. Nem szeretném minősíteni (mert egyszerűen nem tudom edönteni, hogy ezt valaki szándékosan, vagy egyéb okokból csinálja), de az biztos, hogy komolytalannak tartom (mindegy mi az oka).

nyilván Te sem úgy születtél, hogy UML-lel terveztél összefüggő nagy rendszereket
Még most se tudnék UML-lel :), pedig már olvastam róla, de az messze van attól, amikor ezt rutinból használod, meg hát PHP esetében az eszközökkel se vagyunk nagyon eleresztve (bár Enterprise Archtictre fogok majd újból vetni egy pillantást). Meg az se biztos, nulláról kiadódna egy Cake funkcionalitása, ha csak úgy nekikezdenék (mert mint mondtam van benne sok ötlet), de azért hasonlót írtam már (helyenként többet is tud), és elég sok rendszert megnéztem már, tudom, hogy nagyjából milyen részekből épülnek fel.

Pont az ilyen rendszerekből tanultam a legtöbbet, többek között itt lehet találkozni a nyelv olyan finomságaival, amik úgy általában nem kerülnek előtérbe. Plusz ha valaki olyat mondott, amit nem ismertem, akkor megpróbáltam utánajárni, hogy mi is ez. Például Sitepoint fórumában rengeteg nagyon érdekes post volt tervezéssel kapcsolatban, eleinte gyakran nem is értettem pontosan, de éreztem, hogy fontos, meg számomra számított aki mondja (pl. a SimpleTest fejlesztője, a WACT fejlesztője, Jason Sweat, Voostind - Eclipse nevű cucc szerzője, Harry Fuecks, csupa olyan ember akiknek a szemléletmódja még most cél számomra), utánajártam a témának, és nem bántam meg.


Üdv,
Felhő
66

Forró fej...

janoszen · 2007. Szep. 23. (V), 14.19
Azt hiszem, mint a ketten kicsit forró fejűek voltatok és ha már asztalcsapkodós a vita, ott nem szoktak hatni az észérvek. :)

Lényeg a lényeg: az Open Source szoftverek egy része sajnos ilyen, hogy vannak benne kevésbé átgondolt dolgok, egy fícsörnek gondolt dologból (ld PHP 4 kompatibilitás) könnyen lehet bug, hiszen nem csak képzett vérprofik mászkálnak a világban, viszont mindenki szeretne valamit tenni a közért (nagyon helyes) és ha jól látom, a Cake azért elég sok embernek megkönnyítette az életét.

Ami pedig azt illeti, ha kinőtted, nem kell használni. :) Egy adott framework egy adott célközönségre készül és aki többet, mélyebben akar keres mást... vagy csinál egy sajátot. Csak minél följebb mész az alaptudást feltételezésben, annál vékonyabb lesz a célközönség rétege...
67

észérvek

Hodicska Gergely · 2007. Szep. 23. (V), 15.29
Észérvekre bármikor nyitott lennék, de itt már ok-okozat felismerésében is gondok vannak. (És Frakival nem ez volt az első ilyen, nagyon jól tudja.) Megnézheted, hogy első körben is simán reagáltam a válaszára, de a rosszindulatú kekeckedést már nem igazán veszem jónéven. Plusz volt pár "érdekes" érv. És már csak azért is merem gondolni, hogy nem én értem őt félre, mert több embertől jött vissza magánban vélemény erről a threadről.

Ami pedig azt illeti, ha kinőtted, nem kell használni. :)
Persze, csak tényleg nagy csalódás volt kód szempontjából, (régóta szerettem volna használni, csak a benti dolgok eltereltek erről a vonalról), ezért írtam le.


Üdv,
Felhő
25

uccsó re

Hodicska Gergely · 2007. Szep. 19. (Sze), 11.29
Kezd túlságosan kontraproduktív lenni ez a thread, plusz elég sok a tárgyi tévedésed, így nem sok értelme van, főleg ha a feketére is rámondod, hogy fehér. Ezenkívül hiába próbálom többször is kihangsúlyozni, hogy semmi bajom a Cake funkcionalitásával, folyamatosan ilyen irányba próbálod tolni a témát. Továbbra is csak azt érzem, hogy a válaszaid a személyemnek szólnak, illetve annak, hogy kritika érte a drágaszágodat.

Egy biztos, hogy a cake-nek konzisztens hibakezelése van, amit konzisztensen használ.
A konzisztens az azt jelenti, hogy nem használsz die() hibakezelésre. A dbo_pear.php is használja...

app/config/core.php, 79. sor
Ettől még a reNew metódusod nem fog jól működni (nincs biztosítva, hogy kiossz egy már létező session id-t).

Tény, hogy a getElementsById sokkal beszédesebb, mint a szemantikailag semmit hozzá nem adó $
Ez LOL, ezek szerint nem ismered a prototype működését. A $ elég sok mindent csinál, a többi hasonló rövid függvény meg kifejezetten plusz funkcionalitást hoz be.

Egyébként adható erre a jelenségre egy viszonylag természetes magyarázat, amit most nem taglalnék időhiány miatt, mindenesetre a rövidítésekbe ilyenformán belekötni legalábbis vérszubjektív eljárás, konkrét hibaként érvelni vele meg konkrét hiba.
Halkan jegyzem meg, hogy ezt nem a konkrét hibaként említettem, azokra még ennyi szócséplés után sem írtál semmit.

Azt az állításodat, hogy nem használja következetesen a rövidítéseit, nem támasztottad alá.
LOL, keress rá a kódban az "strto" szövegre. Gondolom csak olyan helyeken használják, amelyek óráról-órára változnak.

Az, hogy a statikus változó nem tartja meg a változóreferenciát?
Aha, aki írt már saját maga egy Singleton osztályt, az bele kellett fusson ebbe a problémába, ez meg gondolom OOP során elő kell jöjjön.

Már amennyiben nem a php4 hülyeségéről beszélünk, de tudomásom szerint arról.
Itt is rossz a "tudomásod" (írtam is, hogy most is így működik), de ezt kb. 1 perc alatt ki is tudod próbálni. :(

Nem referenciaként átadni az objektumváltozót nem ugyanaz, mint referenciaként. Az utóbbi teljesítmény szempontjából optimálisabb.
Ez így szintén nem igaz, a PHP copy-on-modify módszert használja, tehát alap esetben értékadáskor nem másolódik le a változóhoz kapcsolódó zval struktúra. Ennek is utána tudsz olvasni (lehet, hogy itt a Weblaboron is, mert nagyon kéne egy ilyen cikk).

Ehhez szvsz előbb várjuk meg a PHP6-ot. De ha most valamit mondanom kéne (bár nem tudom, miért van ennek olyan nagy jelentősége), akkor talán azt, hogy jelenleg inkább hozzáad ez a kompatibilitás az értékéhez, mint levon belőle. Valószínűleg nem olyan kritikus a kompromisszum, vagyis megéri.
Szerintem a PHP5 funkcionalitását elutasítani elég drága kompromisszum.


Üdv,
Felhő
36

cakephp

Fraki · 2007. Szep. 20. (Cs), 02.39
Először is hadd szögezzem le, hogy én a magam részéről ezt a vitát nem tartom teljesen értelmetlennek, és nem akarok senkit se támadni, csak olykor visz a vehemencia, de legalább ugyanennyit én is igyekszem elviselni.

Továbbá akceptálom, ha más viszont értelmetlennek találja, vagy azt is, ha az jön ki, hogy kevés vagyok hozzá, s azt is, ha a vitafelem emiatt kilép.

Nos, ahogy látom, néhány hülyeségbe jól beleszaladtam. Ilyen az, hogy a php referenciákkal kapcsolatos viselkedését a 4-es verziónak tudtam be, merthogy a dok a tárgyi fejezetet a következő módon kezdi be: "A PHP 4-et működtető Zend Engine 1..." Jól látom, hogy fölöslegesen említik a php 4-et? Én magam még nem singletonoztam, én csak cakephp-ztam :)

Rövidítés
-----------
További hülyeségbeszaladási kategória ez részemről, mert a $-ról tényleg elfelejtettem, hogy nem csak wrapper, bár itt már talán árnyaltabb a kép. A $$ már inkább csak wrapper. De van egy ilyenünk is: Array.from = $A;

Hasonlóan a cake-nek is van olyan rövidítése, ami hozzáad, ilyen a pr(), ami alapvetően egy print_r. A cake-nek van még emellett néhány rövidítése, amiket használ maga is, de valóban nem kizárólagosan (r, e, a, aa, am, h, low, up). Ezeket a manuálban fel is kínálja.

Nos, mit is ír a poszt? "Függvények rövidítése: túl sok értelme nincs". Ez az állítás egyszerűen szubjektív. A "szemantikailag nem ad hozzá semmit (sőt inkább rontja, nem túl kifejező egy low() nevű függvény)" egészen érthetetlen érv, hiszen a rövidítés magától értetődően levesz a szemantikai beszédességből.

Az is egy életszerűtlen érvelés, hogy nincs az a programozó, aki kitalálja belőle, mit jelent. Aki a cake-kel ismerkedik, az kb. az 5. percben már tudja, hogy van neki nagyságrendileg olyan 10 rövidítőfüggvénye, s köztük a low()-t még inkább meg is jegyzi, mint az am()-et (de amint belemerül a Set::extract() világába, már az utóbbit is inkább ő fogja keresni (velem legalábbis ez történt)).

"a rövidítésre meg megfelelő IDE-t kell használni" -- Ez így megintcsak szubjektív. Lehet, hogy ugyanannyi fáradság, sőt leütés az am()-et bevinni, mint az array_merge()-öt, számomra mégis szebben néz ki egy soktömbös lekérdezést megdolgozó logikában az am(), mint az ott már inkább csak sorhosszt és verbozitást, semmint szemantikai értéket hozzáadó array_merge().
"Ráadásul nem használja következetesen a saját rövidítéseit." Itt a "Ráadásul" már sugallja, hogy jól benne a vagyunk a slamasztikában, de tény, hogy nem használja őket rigorózusan. Kéne? (Vállrándít.)

--------------

És akkor feltehetjük a kérdést, hogy miről is beszélünk? Azt vitatjuk meg, hogy a rövidítéseknek mikor mennyi értelmük van, vagy három mondattal elintézzük őket egy cake-ről leplet lerántani akaró posztban.

--------------

Továbbmenve a következő pontra már ennyivel se fárasztod magad, csakúgy odaveted: "A uses() függvény: ennek sincs túl sok értelme." Nem kéne ezt kifejteni? Ebben áll a szakmaiság? Szerinted helyesen teszi bárki (ismerje a cake-et vagy ne ismerje), aki ebből a megjegyzésből bármilyen tanulságot levon? De, persze, gyarapítja a pontok számát, hogy a végén rámondhassuk: mindezekből látszik, hogy a cake gyenge lábakon áll. Ezzel a gőzzel azt is írhattad volna rögtön, hogy a cake-nek magának sincs semmi értelme. Tudjuk, hogy nem ezt akartad írni, de az információtartalma kb. ugyanannyi lenne.

---------------

Annak ellenére, hogy beleszaladtam néhány hülyeségbe, számomra ebből a vitából nem az a tanulság, hogy kussban kellett volna maradnom, hanem hogy jogosan kérem számon azt, amit. Van még mindig néhány elvarratlan szál.

Pl. oké, a php engine copy-on-modify módon dolgozik, de ez még nem bizonyítja, azt, hogy a referenciaátadás gyakorlata a mi esetünkben rosszabb volna, mint a nem referencia alapú. Az, hogy az a tömbösdi nem szép, nem a cake hibája, hanem a nyelvé.

Ehhez még nem is nyúltunk: "__ kezdetű metódusok, kifejezetten rossz szokás, ugyanis ez a PHP által fenntartott "névtér"."

A PHP-nak nincs fenntartott névtere (ezért is teszed idézőjelbe). Az én szememben a php alapvetően egy konvenciókáosz, melynek része a __ is. Van valami hivatalos állásfoglalás, hogy kerülni kellene ezt?

----------------

Ettől még a reNew metódusod nem fog jól működni (nincs biztosítva, hogy kiossz egy már létező session id-t).


Itt megelőzendő a hülyeségbe szaladást, előre bocsánat a kérdésért, de mi akadályoz meg abban, hogy olyan renew metódust írj hozzá, ami ezt biztosítja?

---------------

Szerintem a PHP5 funkcionalitását elutasítani elég drága kompromisszum.
Attól függ, mi a célod. A hordozhatóság, vagy... vagy miben is tudhatna többet a cake, amit php4-gyel nem lehetne megvalósítani?

----------------

Másrészt meg továbbra sem értem ezt az érvet: egy kód minőségét miért kéne befolyásolja egy másik kód minősége?

Azért, mert az, hogy "egy kód minősége" mint olyan nem egzakt fogalom. Néha rámondjuk egy-két dologra, hogy úgy sz*r ahogy van (mint pl. a szomszéd topikban a joomlára), de azért a cake talán mégsem ez a kategória. És kifejtettem, hogy nem véletlen, hogy mennyire az összehasonlító kritikák az általános a blogoszférában.

Halkan jegyzem meg, hogy ezt nem a konkrét hibaként említettem, azokra még ennyi szócséplés után sem írtál semmit.

Beveszek minden kedvességet most, de azért volt ott egy félrevezető mondat: "Most ha leírom, hogy a Solar/Symfony rendszerekben szerintem sokkal jobban átgondolt elnevezések vannak, akkor hitelesebb lesz az a kijelentésem, miszerint a Cake beliek nem azok." -- úgyhogy feltételezhetően erre _is_ gondoltál.

Elég sok konkrét dolog szóba jött már. Egy részük elvarratlan még, egy részükre én meg visszavonulva hümmögök. El kell ismernem, hogy van néhány die, amire nem találok én sem magyarázatot. Csak ebből túl sok következtetést nem tudok levonni. Ha jól számoltam, kb. 100 trigger_error-hívásunk és 10 árva die-unk van, amiből egyet megvizsgálva úgy láttam, hogy elő se lehet csalni. A többi is valószínűleg durva fatális. Ebből szerintem nem lehet rögtön levonni azt a következtetést, hogy a weboldalam egyszer csak die-ol. Először is az ember éles oldalon nem szokott fejleszteni, már csak azért sem, mert dev módban kell lenni. Tehát igencsak életszerűtlen, hogy ilyen fatális elő tudjon fordulni éles oldalon. Ergó az észrevétel jogosságát elfogadom, de a súlyossága melletti érvelést demagógnak tartom.

De itt alapvetően tényleg elbeszélünk egymás mellett, ahogy Gábor is írta: az észrevéleid közt vannak olyanok, melyek teljesen egyértelműen rámutatnak valamilyen gyenge pontra (mondjuk egy regény helyesírási hibájához tudnám hasonlítani), ezek között már kettő is volt olyan, ami az én legfrissebbemben máshogy néz már ki (az email logját nem néztem, arra írtam az óráról órárát, de a controllerben azok a sorok már elég régóta javítva vannak); s vannak vitathatók. Én elsősorban a vitathatókra szálltam rá. Ilyen esetben te folyton számonkéred, hogy fókuszáljak inkább az egyértelműekre. Mindkettőnk stratégiája nyilván érthető. S úgy láttam, miután beleevickéltem egy-két konkrétba is, még mindig makacsul fenntartottad ezt a számonkérést, ami kicsit szúrta már a csőröm.

Azért szúrta, mert közben elmaradt annak beismerése, hogy azok a nem konkrétak igencsak vitathatók. És te nem ilyen státuszban dobtad fel őket. Azok is a verdikt kimondásának hangnemét hordozzák. Azt hiszem, nekem nem kell minden pontodat egytől egyig falszifikálnom ahhoz, hogy megokoljam azt az állításomat, hogy gyorsan ítélkező, túlzott következtetéseket levonó, bombasztikus című poszttal állunk szembe, ami irreleváns módszerrel közelít egy frameworkhöz.

Most ha marad a 10-akárhány észrevételed közt 3, ami tényleg egyértelmű és evidens, akkor már minden rendben van? Abból még mindig semmilyen tanulság nem vonható le a cake-re vonatkozóan.

Úgyhogy nem kell összehasonlítani semmit semmivel, csak épp így nulla információhoz jutottunk. Kb. mintha azt mondanám, hogy XY regényben van 3 helyesírási hiba, és hogy Beckett hosszú és túlzsúfolt mondatokat ír (cake-ben is van osztálykompozíció, de nyitott vagyok itt is a lehurrogásra, ha nem jól látnám - ezt nem iróniából mondtam.).
38

rotfl

amonrpg · 2007. Szep. 20. (Cs), 07.19
A PHP-nak nincs fenntartott névtere (ezért is teszed idézőjelbe). Az én szememben a php alapvetően egy konvenciókáosz, melynek része a __ is. Van valami hivatalos állásfoglalás, hogy kerülni kellene ezt?


Komolyan... RTFM....

http://hu.php.net/manual/en/language.oop5.magic.php
"Caution
PHP reserves all function names starting with __ as magical. It is recommended that you do not use function names with __ in PHP unless you want some documented magic functionality. "

Mond ez neked valamit?
47

re> rotfl

Fraki · 2007. Szep. 20. (Cs), 19.53
Mond, de az nem névtér, hanem szintén konvenció. De az állásfoglalás tényleg megvan.

Ettől függetlenül mielőtt valaki beleköt abba, hogy egy keretrendszer ilyeneket használ, talán figyelembe vehetné, hogy miért, és kiderül, hogy a dolognak sem a kód minőségéhez, sem a tervezéshez semmi köze.
49

hja...

amonrpg · 2007. Szep. 21. (P), 07.23
Igen, a PHP-nak, mint olyan, egyelőre nincs névtere. Ilyetén formában a Cakenek sem lehet. Maximum ilyen-olyan módon szimulálhatja. Neked.

De, hogy a PHP manuálban feltünően kiemelt, ép ésszel felfogható okokból kvázi-fenntartott prefixek közé szándékosan belegányol, az bizony tervezési hiba. Mer'hogy valszeg' náluk nincs olyan. Ahogy látom.

A kód minősége számomra meggyőző. Igaz enélkül sem rajongok a keretrendszerekért. Ezzel együtt meg végképp nem.

Mivel a "miért"-ed csak egy légből kapott marhaság (PHP4-ről beszélünk, tehát kábé halottnak a csók dolog). Nem rossz, hogy szeretnék a metódus nevében megjeleníteni, hogy hogyan definiálják azt. Csak ne egy kifejezetten fenntartott módon tegyék, mert ezzel szándékosan szembemennek az amúgy sem túl erős PHP konvencióval. Aminek a vége még nagyobb káosz. Ha már te ezt a szót használtad valahol a PHP-re...

Ráadásként pont fordítva csinálják, mint értelmes lenne... A private lesz a '__' és a protected a '_', közben meg ugye egy extend után éppen a private az, amit még felül lehet definiálni... Szóval a PHP4 káoszát a Cake csak erősíti.
55

érdekes vagy

Fraki · 2007. Szep. 23. (V), 04.22
Mivel a "miért"-ed csak egy légből kapott marhaság (PHP4-ről beszélünk, tehát kábé halottnak a csók dolog).

Az én miért-em? Légből kapott marhaság, hogy egy keretrendszer prefixekkel jelöli a láthatóságot a php4-kompatibilitáshoz? Ez nekem kicsit képzavaros (függetlenül attól a kérdéstől, hogy mennyire hasznos a php4-kompatibilitás).

Csak ne egy kifejezetten fenntartott módon tegyék, mert ezzel szándékosan szembemennek az amúgy sem túl erős PHP konvencióval.

Ha még erős lenne, volna is jelentősége, de így éppenhogy nincs.

Ráadásként pont fordítva csinálják, mint értelmes lenne... A private lesz a '__' és a protected a '_', közben meg ugye egy extend után éppen a private az, amit még felül lehet definiálni... Szóval a PHP4 káoszát a Cake csak erősíti.

Fordítva van.

(Valahogy látszik még a magyar fórumokon és sajnos itt a weblaboron is, hogy sokan a flame-kultúrából jöttek. Megszámolhatnám, hány gyerekes ROTFL-okat, LOL-okat meg ÁÁÁ-kat kaptam -- smiley-k is enyhén túl vannak használva, de ez legyen az én savanyúságom --, miközben úgy tűnik, senki sem tökéletes...)
58

rotfl, lol: flame-kultúra

Sulik Szabolcs · 2007. Szep. 23. (V), 09.26
Ha összeszámoljuk a posztokat szerzők szerint te eléggé az élmezőnyben vagy (18/57 nem rossz).

A Miérted valóban hiányzik. A belinkelt miért egy "agree" a cake részéről, miközben a php doksiban ugyanez egy "recommended". Ha már amerikaiak a fejlesztők illene érteni angolul egy kicsit, vagy legalább az alkalmazott nyelv dokumentációját ismerni.

A miért valami ilyesmi lehetne:
1. azért használja ezt a jelölést, mert szeretné private és a protected dolgokat jelölni (controlleren kívül semmi jelentősége nincs) - ezt már hallottuk itt.
2. a controller miatt használja: cake alatt a controller "bármely" actionje meghivható kívülről. Viszont szükségük volt olyan metódusokra, amelyek nem érhetők el. Ezt jelölni kellett. Hirtelen 2 lehetőséget látok:
a) vagy a publikus metódusokat jelölöd (pl: symfony)
b) vagy a többit (pl: cake)

Nem hiszem, hogy a két választás közül az egyik jobb lenne, mint a másik. Az viszont meglepő, hogy a cake ennyire belenyúlt a választásával.
59

igaz...

amonrpg · 2007. Szep. 23. (V), 09.34
Fordítva van.

Sorry, kora reggel volt még nekem.

Csak annyiban a te miérted, hogy te hoztad fel. Természetesen a Cakeseké valójában. Mint említettem a prefixelés persze nem az. Csak az marhaság, hogy éppen egy védett prefixet kellett erre találniuk.
S egészen addig nincs jelentősége, amíg te nem PHP5-ben futtatod a Cake-t, és nem definiálnak (vagy akár te magad az ő konvenciójukra építve) felül egy vagy dokumentált, vagy nem dokumentált, de a fenntartott prefixszel ellátott magic metódust.

Remélem te is érzed, hogy ez mekkora kockázat. Bár már a legelső felvetésnél rá kellett volna jönnöd.
43

PHP névtér

Balogh Tibor · 2007. Szep. 20. (Cs), 15.11
A PHP-nak nincs fenntartott névtere (ezért is teszed idézőjelbe). Az én szememben a php alapvetően egy konvenciókáosz, melynek része a __ is. Van valami hivatalos állásfoglalás, hogy kerülni kellene ezt?

Először is: úgy tűnik, hogy nem vagy tisztában a névtér fogalmával. Ez nem feltétlenűl baj. Egy változónak számos tulajdonsága van, többek között az is, hogy az adott változó a programkód melyik területén érvényes.

A php többféle névteret ismer:
  • globális
  • függvény
  • objektum
  • osztály (csak php5)

A névtereken belül a névütközések elkerülése végett szokták alkalmazni a prefix vagy suffix-szel való ellátást. Biztos van másféle megoldás is, pl. névtér definiálásának támogatása nyelvi szinten. De ez tulajdonképpen az előző módszer elfedése.
44

namespace != scope

Táskai Zsolt · 2007. Szep. 20. (Cs), 15.23
nem vagyok a php nyelv nagy szakértője, de C++ alapján (és csekély PHP ismereteim alapján) a két dolog eléggé mást takar. persze a namespace definíció egy scope-ot is nyit, igen.

ettől még értelmes a hozzászólásod, csak az a része vált bizonytalanná, hogy fraki ne lenne tisztában a névtér fogalmával.
45

Hú de régen volt

Balogh Tibor · 2007. Szep. 20. (Cs), 16.02
A fentiek fényében lehet, hogy tévedek.
  • A scope, láthatóság, az a terület ahol az adott változó, függvény stb. elérhető.
  • Nem került szóba az élettartam. De ehhez kapcsolódik. Az az időintervallum ami alatt az adott változó, függvény stb. él.
  • A névtér az ahol az adott változó, függvény definiálva lett.
  • Attól, hogy például egy objektum-jellemzőt definiálunk egy osztályban, még az adott jellemző látható/nem látható lehet egyéb névterekben.
  • A php-ban mint minden egyéb programozási nyelvben vannak névterek.


Szerk.: Ezen kívül a php-ben külön névtere van a változóknak, a konstansoknak, a függvényeknek, a metódusoknak, a tulajdonságoknak. Lehet ugyan olyan nevű konstans, változó és függvény is a php-ben, nem történik névütközés. De lehet, hogy más nyelvben máshogy van.
56

Névtér

janoszen · 2007. Szep. 23. (V), 08.27
Tudtommal a névteret a namespace-re használjuk, hiszen ennek a szónak a tükörfordítása. A láthatóságra viszont nem.
68

Igen

Balogh Tibor · 2007. Szep. 24. (H), 12.07
Tudtommal a névteret a namespace-re használjuk, hiszen ennek a szónak a tükörfordítása. A láthatóságra viszont nem.

Igen, és?
69

terminológia

Fraki · 2007. Szep. 24. (H), 17.24
Nem ismerem a magyar szakterminológiát, de én a következőkben konzekvens volnék:

namespace = névtér
visibility = láthatóság
scope = hatáskör
17

re: cakphp

Fraki · 2007. Szep. 19. (Sze), 06.42
Először használja az állandót, majd később ellenőrzi, hogy létezik-e. Érdekes megoldás.

Azt a kódot hol találtad? (controller.php 641. sorától valami egész más van)
19

re: cakephp

Fraki · 2007. Szep. 19. (Sze), 07.47
Tipikusan rossz megoldás ez a cserélgetés, lásd "bcbcc:c:", meg amúgy is az egész osztály elég rosszul van kialakítva (bővíthetőség, felelősségek). Mellesleg nem is értem, hogy miért nem használ valamilyen jól kiforrott megoldást, ha már nincs otthon ezen a területen.


A mail komponens szinte óráról órára változik még.

Jellemző a kódbázisra, hogy túlzsúfolt osztályokat használ, nem igazán használja az objektum kompozíciót. Ez alapjaiban elég rossz tervezés.


Lehet, hogy valamit félreértek, de eleve ott az M, C és V: kompozit osztályok. Aztán az egész component mechanizmusa az általad hiányolt mintát követi (Session, RequestHandler stb.). A sok singleton használata is erre hajaz (Router, Inflector, Config elérés). Mondanod kéne olyan példát, ahol az öröklődés nem jellemzően specializálja a szülőjét. Ahogy nézem, van egy absztrakt alaposztályunk, az Object. A fő osztályok zöme ebből van származtatva, és nincs agyonhierarchizálva.

Example: Simple User Authentication
Az alap példa is tipikusan rossz megoldás abból a szempontból, hogy nem generál új munkamenet azonosítót a bejelentkezéskor.


Annak azért az a neve, hogy simple... Mert nem használja az Auth komponenst. Az Auth komponens generál. (1.1-ben lehet h nincs Auth)
2

dokumentáció

Sulik Szabolcs · 2007. Szep. 17. (H), 08.30
És akkor az elérhető dokumentáció minőségéről és mennyiségéről még nem is esett szó.
4

Tök jó

bonobo · 2007. Szep. 17. (H), 12.48
Nagyon klassz kis iromány, grat.
Remélem egy hivatalos CakePHP fórumra is feldobod majd.

üdv:b
8

móka és kacagás

Fekete Ferenc GDA · 2007. Szep. 17. (H), 16.45
off
móka és kacagás:
CakePHP vs Rails
/off
9

Kellemes írás

sayusi · 2007. Szep. 17. (H), 21.17
Jó volt ezt illetve a felébredt (majd személyeskedésbe torkollot) vitát is olvasni.

Kíváncsi volnék, hogy hasonló írás fog-e születni a ZF -ről.

Pár hete az egyik fejlesztővel volt egy vitám a view dolgokról és kicsit idegesen(meg dühödten) néztem végig az általam ismert keretrendszereket, hogy hol miképpen dolgoznak ezekkel (milyen eszközök vannak arra, hoyg minél kevesebb html kódot kelljen írni). Emlékszem, hogy akkor meg is akadtam egy pillanatra, hogy a CakePHP fut PHP4 -n is. Felmerült bennem a kérdés azonnal, hogy minek... (illetve a kollegám ideges arca pár órányi referenciákkal való küzdés után)
10

zend framework áttekintés, view kezelés

Hodicska Gergely · 2007. Szep. 17. (H), 22.51
Kíváncsi volnék, hogy hasonló írás fog-e születni a ZF -ről.
Per pillanat nem hiszem, de még előfordulhat. Egyenlőre a Symfonyra vagyok jobban kíváncsi, aztán majd kiderül. Mondjuk a ZF-et nagy valószínűséggel úgyis elég rendesen gatyába fogják rázni, nem hiszem, hogy ilyesmi parák lesznek vele kapcsolatban, bár azért volt vele kapcsolatban pár baki. :) Emlékszem, hogy még az elején is volt egy olyan baki, hogy a saját Dispatcher osztályuk nem valósította meg azt az interfészt, ami ők írtak elő a dispatcherek számára, plusz nemrég volt az a kisebb égés, amikor a saját ActiveRecord megvalósítás bemutatásakor olyan példakódokat mutattak, amik per pillanat nem megvalósíthatóak PHP esetében. :)

Ezzel együtt rengeteg dolog szól a ZF mellett, egyrészt tekinthető defacto PHP frameworknek, nagyobb eséllyel fogsz (főleg az idő haladtával) ZF tudással munkát találni, mint egy másikkal, plusz valszeg nagy valószínűséggel elég jó IDE támogatást fog készíteni hozzá a Zend.

A View része a ZF-nek per pillanat nem egy nagy durranás (pont keresgettem én is ilyen téren nem olyan rég), de van egy elég ígéretes proposal. A legtöbb frameworkben a view nagyjából a layout támogatásban merül ki, de pont a Symfonyban ez szerintem nagyon jól ki van találva (sokban hajaz az említett ajánlásra), mi egy projekt során alapvetően ez alapján csináltunk egy saját megoldást.

milyen eszközök vannak arra, hoyg minél kevesebb html kódot kelljen írni
Ez alatt amúgy mit értesz pontosan, milyen szempontból szeretnél "spórolni"?


Üdv,
Felhő
27

Spórolás

sayusi · 2007. Szep. 19. (Sze), 17.36
Mániákusan utálom a html -t. Mindig azt a megoldást kerestem/keresem, hogy nekem (fejlesztőnek) ne kelljen html kódokat gyártanom, hanem a view fájlban (vagy ahol éppen az eszköz megkívánja) csak meg kelljen hívnom mondjuk $widgets->SimpleInput(); metódust felparaméterezve és ezáltal kapok egy barátságos input mezőt. Sajnos a ZF -ben is pont ez a rész ahol még dolgoznak (vagy még kigondolják levlisták alapján) hogy miképpen oldják meg.
Mivel a ZF -ben ez még kezdetleges elkezdtem magamnak egy ilyesmit csinálni és az ilyen saját dolgok meg jól illeszthetőek a ZF view megoldásába. Magával a megvalósítással kimondottan van munka, de ha egyszer (végre) eljutok oda, hogy a kívánt eszközkészlettel fogok rendelkezni ezen a téren, akkor jön a spórolás ideje, mert csak metódusokat kell meghívogatnom nem html kódot gyártanom.
További előnye, hogy ha változik a html referencia, akkor csak egy helyen kell majd átírni egy kicsit a dolgokat.

Kissé kesze-kusza volt ez a gondolatmenet, de valahogy így képezelem el a "spórolás" témakört, amit említettem.
28

PEAR HTML osztályok

zila · 2007. Szep. 19. (Sze), 17.49
pont ilyenekre vannak :)
33

Sok

sayusi · 2007. Szep. 19. (Sze), 22.35
Értem én, hogy a PEAR html osztályok erre valóak. Csak ezzel egyetlen egy problémám van. Idővel szaporodni fognak az ilyen toolok a megoldásban amit használok és idővel meg fogok bolondulni tőlük.
Példa:

Zend Framework - mert tetszik és látok benne valami jót
AdoDB -> adatbázis kapcsolat miatt
PEAR -> a html miatt

És még lehetne sorolni. A verziók rabja leszek idővel. Inkább én azt választom - bevállalva egy kevéske teljesítmény csökkenést is, hogy az egész alkalmazást ZF -re építem. Abban van adatbázis megoldás (lehet, hogy nem olyan jó, mint az AdoDB) és most agyalnak a View megoldásokon (illetve itt kopácsolom én is a magamét).

Persze az AJAX külön kérdés. Ebben nem vagyok hajlandó a melegvízet feltalálni :) Szerintem jQuery...

A PEAR kapcsán pedig van egy olyan érzésem, hogy nagyon mostoha gyerekként van kezelve. De ez csak érzés.
46

cakephp

Fraki · 2007. Szep. 20. (Cs), 17.26
Ha már úgyis egész véletlenül ebben a topikban folyik ez a szál, talán bedobom, hogy esetleg a cakephp-t is megnézhetnéd... :)
70

Kihagyom

sayusi · 2007. Szep. 25. (K), 16.52
Nem a cikk hatására de kihagyom a többi php framework megvizsgálását. Ezzel kezdtem el foglalkozni és úgy látom, hogy alapos fejlesztői és marketing erő van emögött. Azt látom, hogy ezzel megéri hosszú távon foglalkozni.
Második szempont, hogy most (2 szakdolgozat, egyetem, munkahely, magánélet) tényleg nincsen időm.
29

ezzel nem vagy egyedül

Fraki · 2007. Szep. 19. (Sze), 19.13
Valahol erről szólt az assembly-s blogmark-topik is.
52

zend

Fraki · 2007. Szep. 23. (V), 00.15
Ezzel együtt rengeteg dolog szól a ZF mellett, egyrészt tekinthető defacto PHP frameworknek, nagyobb eséllyel fogsz (főleg az idő haladtával) ZF tudással munkát találni, mint egy másikkal, plusz valszeg nagy valószínűséggel elég jó IDE támogatást fog készíteni hozzá a Zend.

A ZF max de jure php framework, a de facto-ra még várni kell.
26

Válasz

sajt · 2007. Szep. 19. (Sze), 12.58
Ez elég jó kis összefoglalás. Én egyrészt a dokumentációban találtam hiányosságokat, másrészt megnézve azokat a rendszereket, amiket cakePHP-ban írtak, nem vagyok elragadtatva. Most a sumfony-t nézegetem, és egyre inkább meggyőz, bár a kódjait nem nagyon nézegettem...
30

kíváncsi vagyok

Fraki · 2007. Szep. 19. (Sze), 19.29
Mely rendszerek ezek? Symfonys rendszereket is néztél?
31

Teljesítmény

Sulik Szabolcs · 2007. Szep. 19. (Sze), 21.38
Erről még nem volt szó a flameben :) hát akkor most.

A Paul M. Jones-féle benchmark alapján úgy látszik, hogy gyorsabb a cake, mint a symfony.

Ezek után elvégeztem egy kis házi mérést (ugyancsak hello world):
1. cake (1.2 legfrissebb SVN)
2. symfony (sandbox 1.0.7)

Vas: Core2 4300 (i965p), 1gb ram, 7200 vinyó
Szoftver: WinXP SP2, XAMPP 1.6.1
Parancs: ab -t 60 -c 10 ...

Mindkét rendszeren bekapcsolva maradt a layout és a session (bár ez utóbbiban csak a cake esetén vagyok biztos).
Mindkét rendszeren 3-szor futtattam a tesztet.

Eredmények (Complete requests):
1. cake: 1296, 1255, 1225 (átlag: 1259, logok, app könyvtár)
2. symfony: 1420, 1436, 1415 (átlag: 1424, logok, apps könyvtár)


UI.: Felhő: a cake a branch ágban tartja a legfrissebb svn verziót nem a trunk-ban (az írás alapján a trunk-ot checkout-oltad), bár ez nem sokat számít az összegzés szempontjából.
37

Benchmark nehéz ügy

Török Gábor · 2007. Szep. 20. (Cs), 06.50
Ezek a teljesítménypróbák - főleg amikor eredményben a versenyzők alig különböznek - sokat nem adnak, annyi a programkódon túli szoftveres és hardveres tényező befolyásolja a benchmark kimenetelét.
39

Jaja

Sulik Szabolcs · 2007. Szep. 20. (Cs), 08.28
Teljesen egyetértek. Még többször elvégezve időnként hullámzó teljesítmény tapasztalható.

Különben is kevés olyan oldal van, ahol csak egy Hello World jelenik meg :), általában aktívan használnak adatbázist, session-t,... , és ahogy írtad, az már nem csak a framework teljesítményét méri.
40

Benchmark?

janoszen · 2007. Szep. 20. (Cs), 08.59
Felvetnék egy kérdést. Egy szerver havi üzemeltetése amortizációval együtt olyan 40-50 ezer forint körül lehet. Egy fejlesztő fizetése ennek kb a 4+ szerese. Nem inkább a fejlesztő munkatárs idején kell takarékoskodni a szerver erőforrások helyett?

Ne értsetek félre, semmi baj az optimalizálással, de ha választanom kell a keretrendszert használó kényelme / gyors munkavégzése és a felhasznált processzoridő között, akkor az előbbit választanám. Annál is inkább, hogy a vas árak folyamatos zuhanásban vannak. (Fél évvel ezelőtt vettem 250 gigás SATA lemezt 24000-ért, most már 500 gigásat lehet ugyanannyiért kapni.)
41

mér kéne választani?

amonrpg · 2007. Szep. 20. (Cs), 09.27
éppen ez az, hogy optimális esetben nem kell választani.

Amúgy meg így születnek a kiskukutyinkft.hu jellegű site-ok, amik önmagukban lefognak egy szervert... közben meg még vagy harminc hasonló site-ot elbírna az adott vas, ha egy picit optimálisabb kódot használnának az elkényelmesedett fejlesztők. (Köztük én is, mert a blogom alatt wordpress fut, amíg nincs időm befejezni a saját cuccomat, ami kicsit gyorsabb lesz, cserébe persze az általános célúságról le kell mondjak...)
42

attól függ

Sulik Szabolcs · 2007. Szep. 20. (Cs), 09.58
Mielőtt újabb egymás melletti elbeszélésre kerül sor:
1. a vas már jó ideje olcsóbb, mint a fejlesztő
2. ez nem jelenti azt, hogy vassal bármilyen gány megoldást ki lehetne/kellene kerülni.

Az én választásom: optimális kód, optimális vason (a többit majd Szőke kapitány intézi ;) )
Hogy miből mi az optimális? Azt mindenki döntse el az adott szituációtól függően.
32

stílus és tartalom

Marcell · 2007. Szep. 19. (Sze), 22.24
Nem ismerem a CakePHP-t, de az is biztos, hogy nem ennek a cikknek az alapján fogom megítélni. Már az első bekezdést olvasva egyértelmű volt - amit már a címből is sejtettem - hogy itt valami nagy lehúzás lesz. Ez az írás persze akkor lenne releváns, ha a többi rendszer is a boncasztalon feküdne és egyértelműen kimutatnád, hogy akkor most miben jobb az egyik, és miben a másik. Van egy olyan sanda gyanúm, hogy azoknak is van takargatnivalójuk, úgyhogy ez a cikk így önmagában csak egy egyoldalú és negatív kampány a CakePHP ellen (akármennyire is állítja Gergő, hogy nem) - ami mellett a Weblabor is letette a voksát azzal, hogy a főoldalon publikálták ezt. Biztos mindenki ennyire utálja a Cake-et?

Nem tisztem megítélni az írást tartalmilag, mert nem ismerem se a rendszert, se a kódját, de annál jobban érzem azt, hogy stilisztikailag is a Weblaboron megszokott minőség alatt van. Persze erre rögtön már az elején kapunk is egy mentséget, hogy ez ugye csak egy blogbejegyzés és ott simán röpködhetnek olyan szavak, hogy "para" (most csak egyet találok belőle, de első olvasásra jóval többre emlékszem - szerkesztetted azóta?). Ez teljesen helyénvaló is egy saját blogon, belinkelve a blogmarkok között (lásd Bence Silverlight-os ismerkedését), amit szívesen végigolvas a tudásra szomjazó kis kocka (=én), de itt a Weblaboron már többet vár az ember. Hiába, megszoktuk a jót.
34

re: stilus és tartalom

Hodicska Gergely · 2007. Szep. 19. (Sze), 22.59
Ez az írás persze akkor lenne releváns, ha a többi rendszer is a boncasztalon feküdne és egyértelműen kimutatnád, hogy akkor most miben jobb az egyik, és miben a másik.
Egyrészt milyen többi rendszerrel, két másik, 5 másik, 10 másik? Másrészt meg továbbra sem értem ezt az érvet: egy kód minőségét miért kéne befolyásolja egy másik kód minősége?

Van egy olyan sanda gyanúm, hogy azoknak is van takargatnivalójuk, úgyhogy ez a cikk így önmagában csak egy egyoldalú és negatív kampány a CakePHP ellen (akármennyire is állítja Gergő, hogy nem) - ami mellett a Weblabor is letette a voksát azzal, hogy a főoldalon publikálták ezt. Biztos mindenki ennyire utálja a Cake-et?
Mi a franc célom lenne kampányolni a Cake ellen, ezen nem gondolkodtál? Amúgy meg minden blogbejegyzés a címlapon jelenik meg, a Tiéd is, ha írsz egy másik rendszerről.

Nem tisztem megítélni az írást tartalmilag, mert nem ismerem se a rendszert, se a kódját, de annál jobban érzem azt, hogy stilisztikailag is a Weblaboron megszokott minőség alatt van. Persze erre rögtön már az elején kapunk is egy mentséget, hogy ez ugye csak egy blogbejegyzés és ott simán röpködhetnek olyan szavak, hogy "para" (most csak egyet találok belőle, de első olvasásra jóval többre emlékszem - szerkesztetted azóta?). Ez teljesen helyénvaló is egy saját blogon, belinkelve a blogmarkok között (lásd Bence Silverlight-os ismerkedését), amit szívesen végigolvas a tudásra szomjazó kis kocka (=én), de itt a Weblaboron már többet vár az ember. Hiába, megszoktuk a jót.
Pontosan azért van a blog, mert ott lehet kicsit lazábbra venni a figurát. Mellesleg ha átgondolja valaki, hogy az említett dolgokat miért tartom hibának, akkor abból tanulhat is. Plusz a régebbi cikkek egy jó részét is én írtam. ;) Ádám (Ceriak) szerkesztette át. Mellesleg nem is olyan rossz dolog ez a blogosdi, kb. most 4 cikkem van majdnem kész stádiumban, és csak azért nem tud kimenni, mert egy cikk esetében szeretnék egy teljes egészet összehozni, viszont erre most nem igazán van időm, a weblabor meg pnag mostanság egy kicsit.


Üdv,
Felhő
35

no flame

Marcell · 2007. Szep. 19. (Sze), 23.19
Nem kívánok flame-be bocsátkozni, csak leírtam ami nekem eszembe jutott az írásod (többszöri) átolvasása után. Ennyi, se több, se kevesebb.
48

session

Fraki · 2007. Szep. 20. (Cs), 20.30
A $name mixednek van definiálva, de utána közvetlenül ellenőrzésre kerül hogy karakterlánc-e, illetve a _validateKeys (a függvény neve sem az igazi) ellenőrzi, hogy megfelel-e egy bizonyos feltételnek.


A mixed valószínűleg a dokumentáció deficitje. A __validateKeys függvény nevével mi baj? A cake rengeteg más helyen használ dot-notációt (formhelper, Set stb.), így a session-nevek esetében is, ezt validálja az a fv. Ez sem kódminőség-, hanem koncepcionális kérdés.

Ez a feltétel kizárja, hogy amúgy a PHP-ban megengedett kulcsokkal tegyünk le a munkamenetbe adatokat.

Erre mondanál példát? A PHP-ban a session nevekre a változókra érvényes limitációk vonatkoznak. UTF-8 kulcsokat szeretnél? Ok, kijelenthetjük, hogy a cake core session kezelője nem kezeli az UTF8-as session kulcsokat. Csúnya, rossz cake...

Plusz itt is előjön némi "névtér" para, a munkamenet kezeléssel kapcsolatos metaadatok belekeverednek a "sima" munkamenet adatok közé, így a $_SESSION tömbre húzott felülettel simán hazavághatom a munkamenetet mondjuk ezzel a paranccsal: $this->Session->write("Config", 1).


Ahhoz képest, hogy a php-ban semmilyen névtere nincs a munkamenet-kulcsoknak, eleve elfelejtjük megemlíteni, hogy itt egyáltalán _van_ névtere a kontrollereknek és komponenseknek, és hogy ez tök jó (most kicsit parasztvakítottam). Adnak a Config singleton mintájára neked Config kulcsot, amibe a konfig adataidat te is belerakhatod. És istenem, felül is írhatod.

Megint nem kódminőség, és még csak nem is tervezés kérdése, hanem koncepció. A cake-et nem arra tervezték, hogy megvédje magát a szándékosan gányolóktól. Alapvetően CoC-re épül. Szerintem olyat vársz el tőle, amit nem is vállal, és nem is akar felvállalni.
50

re: session

Hodicska Gergely · 2007. Szep. 22. (Szo), 18.34
A mixed valószínűleg a dokumentáció deficitje. A __validateKeys függvény nevével mi baj?
Az, hogy nem kulcsokat validál, hanem egy kulcsot.

Erre mondanál példát? A PHP-ban a session nevekre a változókra érvényes limitációk vonatkoznak. UTF-8 kulcsokat szeretnél? Ok, kijelenthetjük, hogy a cake core session kezelője nem kezeli az UTF8-as session kulcsokat. Csúnya, rossz cake...
Csúnya, rossz Fraki, megint nem néz utána, mielőtt leír valamit. A tömb kulcsa PHP-ba egy int vagy string lehet.

Ahhoz képest, hogy a php-ban semmilyen névtere nincs a munkamenet-kulcsoknak, eleve elfelejtjük megemlíteni, hogy itt egyáltalán _van_ névtere a kontrollereknek és komponenseknek, és hogy ez tök jó (most kicsit parasztvakítottam). Adnak a Config singleton mintájára neked Config kulcsot, amibe a konfig adataidat te is belerakhatod. És istenem, felül is írhatod.
Eddig is tehettél a sessionbe tömböt. Amúgy meg nem tartott volna semeddig külön tenni a framework működéséhez szükséges adatokat, a user kódok adataitól. Ennek szerintem egyértelmű az előnye.

Megint nem kódminőség, és még csak nem is tervezés kérdése, hanem koncepció.
A tervezés mióta független a koncepciótól?


Üdv,
Felhő
51

re: session

Fraki · 2007. Szep. 22. (Szo), 21.20
Az, hogy nem kulcsokat validál, hanem egy kulcsot.

Ha figyelembe vesszük, hogy a paraméter alkulcsokat tartalmazhat, akkor az kulcsok. Amellett, hogy ezek az alkulcsok dotnotációban egy stringben vannak tárolva. Nincs ezzel különösebb baj.

Csúnya, rossz Fraki, megint nem néz utána, mielőtt leír valamit. A tömb kulcsa PHP-ba egy int vagy string lehet.

Igyekeztem körültekintő lenni.
"The keys in the $_SESSION associative array are subject to the same limitations as regular variable names in PHP, i.e. they cannot start with a number and must start with a letter or underscore. For more details see the section on variables in this manual."

Eddig is tehettél a sessionbe tömböt. Amúgy meg nem tartott volna semeddig külön tenni a framework működéséhez szükséges adatokat, a user kódok adataitól. Ennek szerintem egyértelmű az előnye.

Nem egészen erről van szó. Csak úgy dot-notációval nem tehetsz kulcsot a session-be, a dot-notációval csak a kontrollerek és komponensek alá tehetsz információt, tehát kifejezetten ezeknek biztosít ily módon ponttal elválasztó névteret. Ez a viselkedés egyébként általános minta a cake-ben.

A tervezés mióta független a koncepciótól?

Nem független, ezt nem is mondtam, de nem is ugyanaz. Ha egy framework koncepciójában nem szerepel az, hogy megvédje magát az applikációt szándékosan szétgányoló használójától, akkor nem is úgy tervezik.

----------------

De végig azt érzem, hogy red herringeket dobálsz, vagyis eltérünk a mondókám lényegétől. Nem azt mondom, hogy ezek a felvetéseid ne lennének önmagukban jogosak, hanem azt, hogy a poszt címének és tételállításának szempontjából nem relevánsak, illetve kifejtetlenek, és mindenképp elégtelenek ahhoz, hogy rögtön ilyen ítéleteket alkoss belőlük. Ehhez képest úgy teszünk, mintha nekem minden pontodat meg kéne cáfolnom, pedig bőven elég néhány pontod kérdésességére vagy kifejtetlenségére rámutatnom. Ráadásul én vagyok a fárasztó butaságokkal előjövő emberke, holott most te is szépen beleszaladtál egybe (letehetsz int kulcsot a session-be, csak semmi értelme, mert nem jegyzi meg; már csak ezért is hasznos a cake validációja).

Ott is egyensúlytalanságot érzek, hogy ki mire reagál, és mit vár el a másiktól. Miközben folyamatosan mentem bele a további konkrétumokba, bár az állításomhoz ez nem szükséges, folyton csak arra hivatkozol, hogy kikerülöm őket, ugyanakkor te is szelektívan reagálsz (a renew()-szálat például folytathatnád).

Itt van ez az objektumkompozíciós dolog is. Attól, hogy van egy nagyon általános elv, hogy az objektumkompozíció előnyösebb az öröklődésnél, ettől még a cake-nek egyáltalán nem túlbonyolított az osztályhierarchiája. De még önmagában az sem minősít egy kódot, hogy nem követi 100%-ban az OOP mintákat.

Szóval maradnék annál, amit mondtam kezdettől fogva. Elvitatkozhatunk arról, hogy látszik a Titanic egyik snittjében a kamera a háttérben, és hogy ez milyen para, attól még ha írsz egy ilyen kritikát a filmről, hát nem sokmindent fogok róla megtudni.
62

rere

Hodicska Gergely · 2007. Szep. 23. (V), 11.44
Ha figyelembe vesszük, hogy a paraméter alkulcsokat tartalmazhat, akkor az kulcsok. Amellett, hogy ezek az alkulcsok dotnotációban egy stringben vannak tárolva. Nincs ezzel különösebb baj.
Szerintem meg baj. És általában ennyit írsz, hogy szeintem ez tök jó így, nekem ez tetszik...tehát nem releváns amit írsz. Ezért tartom értelmetlennek a vitát Veled szemben.

Igyekeztem körültekintő lenni.
"The keys in the $_SESSION associative array are subject to the same limitations as regular variable names in PHP, i.e. they cannot start with a number and must start with a letter or underscore. For more details see the section on variables in this manual."
Ez valóban benézés, nem néztem meg, viszont azt tudom, hogy nem igaz, mert lehetnek olyan kulcsaid a SESSION-ben, amelyek nem valid változó nevek.

Ehhez képest úgy teszünk, mintha nekem minden pontodat meg kéne cáfolnom, pedig bőven elég néhány pontod kérdésességére vagy kifejtetlenségére rámutatnom.
Maga ez a mondat is önmagában nem állja meg a helyét, de ezt hagyjuk, viszont a cáfolataid pláne nem. És ezért fárasztó ez a thread, mert ha én azt mondom, hogy nem konzekvens, akkor először azt mondod, hogy de, utána halál egyértelműen kiderül, hogy nem az, erre azt mondod, hogy jójó, de azért legtöbbször nem die-t használ, és ebből Neked az marad meg, hogy végülis nem volt igaz ami leírtam. És ez a fajta gondolkodás mód végig kíséri ezt a threadet.

Lásd a __ használata. Teljesen egyértelmű, hogy nem egy szerencsés választás, de Te azt mondod, hogy DE, és csodálkozol, ha azt mondja rá Neked valak, hogy LOL. És nem hiszem el, hogy nem látod be, hogy ez egyszerűen veszélyes, folyamatosan kerülnek be a PHP-ba magic függvények, bármikor borulhat az egész, és igazából bármilyen más jelölésmódot használhattak volna. Ez egyszerű nem tudásból fakad, ha ezt tudja valaki, akkor egyszerűen suicid hajlama lehet, ha mégis emellett dönt. De Benned ebből is az marad meg, hogy de a Cake jól csinálja.

Rövidítések. Ez lehet szubjektív, bár szerintem amiket írtam ezzel kapcsolatban az is eléggé egyértelmű. Plusz amiért nem tetszett eredetileg, az az, hogy nem érzem benne a koncepciót (ami mondjuk a prototype esetén nem mondható el). Például substr miért nincs (str_replace mellett szerintem a leggyakrabban használt szövegkezelő függvény)? És itt is leírom, hogy nem használja konzekvensen, akkor azt mondod, hogy DE, közben ott a kód.

Mail komponens cserélgetős hibája: az nem hiba, az a kód óráról-órára változik. Ez LOL, akármit is mondasz. Ráadásul azt sose értettem, hogy egy egyértelműen rossz megoldás esetén miért védekezés az, hogy ez most csak egy átmeneti megoldás. Aki ilyet ír le, annak nincs tapasztalata biztonsági kérdésekben, ez egyértelmű, mert ezt a megoldást szokták tipikus rossz megoldásként felhívni.

Ott is egyensúlytalanságot érzek, hogy ki mire reagál, és mit vár el a másiktól. Miközben folyamatosan mentem bele a további konkrétumokba, bár az állításomhoz ez nem szükséges, folyton csak arra hivatkozol, hogy kikerülöm őket, ugyanakkor te is szelektívan reagálsz (a renew()-szálat például folytathatnád).
Miért nem reagáltam? Mert értelmetlennek tartom: leírom, hogy rossz tervezésre utal, hogy egy új session tároló illesztésekor módosítani kell az alap osztályt, erre beidézed, hogy hol lehet beállítani egy újat (noha én nem azt mondtam, hogy nem lehet ilyet), erre reagálok, végül azt írod, hogy mi tart vissz új reNew írásától (tehát módosítanod kell az alap osztály működését). Ismétlődő minta ez is, ráadásul még mindig ott van az a para, hogy a saját DB-s megoldása esetében sem jó a reNew.

Itt van ez az objektumkompozíciós dolog is. Attól, hogy van egy nagyon általános elv, hogy az objektumkompozíció előnyösebb az öröklődésnél, ettől még a cake-nek egyáltalán nem túlbonyolított az osztályhierarchiája. De még önmagában az sem minősít egy kódot, hogy nem követi 100%-ban az OOP mintákat.
Ezt a szállat se vittem tovább, mert minek. Ha még egy Singelton osztályt sem írtál magadtól, akkor túl sokat nem fejleszthettél OOP módon (az nem ugyanaz, hogy használsz egy OOP frameworköt, ahol abszolút megszabott módon kell létrehozni objektumokat). Ezek után mondhatnék bármit az objektum kompozícióról, ugyse fogod elfogadni (pláne tőlem), ezért mondtam, hogy olvass utána, hátha annak más hatása lesz.

És itt is Te arra gondolsz, hogy én azért mondtam, mert hogy szerintem elbonyolított a Cake osztálystruktúrája, közben én semmi ilyet nem mondtam, nem is néztem utána. Az objktum kompozíciónak számtalan más előnye is van, ez csak egyik, hogy bizonyos esetekben meg tudja akadályozni az osztály hierarchija robbanásszerű növekedését.

Szóval maradnék annál, amit mondtam kezdettől fogva. Elvitatkozhatunk arról, hogy látszik a Titanic egyik snittjében a kamera a háttérben, és hogy ez milyen para, attól még ha írsz egy ilyen kritikát a filmről, hát nem sokmindent fogok róla megtudni.
Tőlem nyugodtan maradhatsz ebben, csak nem mindegy, hogy a kamera egyszer véletlenül látszik, vagy pedig folyamatosan, és akár a legfontosabb jelenetekben.


Üdv,
Felhő
71

Hozzászólások lezárva

Török Gábor · 2007. Szep. 25. (K), 18.10
Mivel a blogbejegyzéshez szakmai többlettel bíró hozzászólások már nem igazán érkeznek, a kommentelés lehetőségét berekesztem.