Azt hiszem, hogy megpróbálom újrakezdeni ezt a blog dolgot.
A korábbi bejegyzések is megmaradnak.
Majd meglátjuk.
De az is megtörténhet, hogy keresek és találok blogger.com alternatívát.
2018. július 26., csütörtök
restart (ismét)
2015. április 30., csütörtök
Phalcon v2.0.0 UPGRADE
Kb. 1 hete jött ki a Phalcon v2.0.0, amelynek a legfőbb célja, hogy a v1.3.x-es verzióvonal forráskódjait átültessék a PHP szintakszisához elég közel álló Zephir nyelvre, ami szintén a Phalcon készítők gyermeke.
\Phalcon\Mvc\Model\ValidatorInterface->validate() metódus fejléc megváltozott
Phalcon v2.0 alatt
public function validate($record);
-->
public function validate(\Phalcon\Mvc\ModelInterface $record);
Zephir röviden:
Mindenki vessen egy pillantást a Zephir köztes nyelvre, amely hidat képez a C és a PHP között, és leegyszerűsítheti a saját PHP modulok írását. Mi sem bizonyítja ezt jobban, mint a most kiadott Phalcon v2.0.0 *.zep kiterjesztésű forrás állományai.
Ennyit a Zephir-ről!
A Phalcon v1.3.x --> v2.0.0 upgrade folyamatról írt néhány sort a Phalcon csapata is a blogjukban.
Ebből a cikkből is látszik, hogy elsődleges céljuk egy Zephir alapú v2.0.0 verzió megalkotása volt felhasználva a v1.3.4-es verzió kódjait és funkcionalitását, ami azt eredményezi, hogy a lehető legnagyobb mértékben kompatibilis a v2.0.0 a v1.3.4-el, kivéve néhány pontot természetesen. :)
Egy Phalcon-ra épített projektben az upgrade során szerzett tapasztalataim a következők voltak:
(a lista még bővülhet)
------------------------------------------------------------
\Phalcon\DI\InjectionAwareInterface->setDi() metódus fejléce megváltozott:
public function setDI($dependencyInjector)
-->
public function setDI(\Phalcon\DiInterface $dependencyInjector)
------------------------------------------------------------
\Phalcon\Mvc\Application->registerModules metódus fejléce megváltozott:
public function registerModules($modules, $merge=null){ }
-->
public function registerModules(array $modules, $merge = null) {}
------------------------------------------------------------
A \Phalcon\Config értékek nem lehetnek callback és/vagy Closure típusúak, mert
akkor a ->merge() metódus ki fog akadni!!!
Egyetlen egyszer be tudja a ->merge() állítani a Closure típusú értéket, de ha egy már Closure típusú érték helyére egy újabbat kellene összefésülni, akkor fog kiakadni "Call to undefined method Closure::count()" kivétel üzenettel.
A jelenséget ez az if elágazás okozza a Phalcon forrásában:
https://github.com/phalcon/cphalcon/blob/phalcon-v2.0.0/phalcon/config.zep#L227
Egyetlen egyszer be tudja a ->merge() állítani a Closure típusú értéket, de ha egy már Closure típusú érték helyére egy újabbat kellene összefésülni, akkor fog kiakadni "Call to undefined method Closure::count()" kivétel üzenettel.
A jelenséget ez az if elágazás okozza a Phalcon forrásában:
https://github.com/phalcon/cphalcon/blob/phalcon-v2.0.0/phalcon/config.zep#L227
------------------------------------------------------------
\Phalcon\Mvc\Router->getDefaultModule() metódus nem létezik Phalcon v2.0 alatt
------------------------------------------------------------
\Phalcon\Events\EventsAwareInterface::setEventsManager() metódus fejléce eltér
Phalcon v2.0 alatt:
\Phalcon\Events\EventsAwareInterface::setEventsManager($eventsManager)
-->
\Phalcon\Events\EventsAwareInterface::setEventsManager(Phalcon\Events\ManagerInterface $eventsManager)
------------------------------------------------------------
Az alábbi utasítás formát át kell írni:
\Phalcon\Mvc\Model::find(array(
'conditions' => '...',
'bind' => array( 1 => 'VALUE'),
'bindTypes' => array(\Phalcon\Db\Column::BIND_PARAM_***),
));
A következőre:
\Phalcon\Mvc\Model::find(array(
'conditions' => '...',
'bind' => array( 1 => 'VALUE'),
'bindTypes' => array( 1 => \Phalcon\Db\Column::BIND_PARAM_***),
));
Röviden:
A 'bindTypes' tömbnek az indexelése most már minden esetben követnie kell a 'bind' tomb indexelését.
------------------------------------------------------------
Az alábbi utasítás formát át kell írni:
\Phalcon\Mvc\Model::find(array(
'conditions' => '...',
'bind' => array( 1 => 'VALUE'),
'bindTypes' => array(\Phalcon\Db\Column::BIND_PARAM_***),
));
A következőre:
\Phalcon\Mvc\Model::find(array(
'conditions' => '...',
'bind' => array( 1 => 'VALUE'),
'bindTypes' => array( 1 => \Phalcon\Db\Column::BIND_PARAM_***),
));
Röviden:
A 'bindTypes' tömbnek az indexelése most már minden esetben követnie kell a 'bind' tomb indexelését.
------------------------------------------------------------
\Phalcon\Mvc\Model\ValidatorInterface->validate() metódus fejléc megváltozott
Phalcon v2.0 alatt
public function validate($record);
-->
public function validate(\Phalcon\Mvc\ModelInterface $record);
------------------------------------------------------------
2014. április 13., vasárnap
Phalcon XSLT sablon motor
Már egy ideje pofozgatom az alábbi XSLT alapú sablon motort, amely kifejezetten a Phalcon PHP-s keretrendszerhez lett kialakítva:
Packagist link:
https://packagist.org/packages/racztiborzoltan/phalcon-xslt-view-engine
Github:
https://github.com/racztiborzoltan/phalcon-xslt-view-engine
Még nem igazán tartom tökéletesnek, de a céljaimnak egyenlőre meg fog felelni. Amúgy is sokat fejlődött az első kiadáshoz képest!
De egyre jobban érik egy v2.x ág elindításának a gondolata.
Próbáljuk meg egészséggel fogyasztani! :)
Packagist link:
https://packagist.org/packages/racztiborzoltan/phalcon-xslt-view-engine
Github:
https://github.com/racztiborzoltan/phalcon-xslt-view-engine
Még nem igazán tartom tökéletesnek, de a céljaimnak egyenlőre meg fog felelni. Amúgy is sokat fejlődött az első kiadáshoz képest!
De egyre jobban érik egy v2.x ág elindításának a gondolata.
Próbáljuk meg egészséggel fogyasztani! :)
Címkék:
phalcon,
php,
view engine,
xslt
2014. április 1., kedd
(nem csak) Drupal bölcsességek
GIT workflow-k ismét felütötték a kíváncsiság hangjait bennem, így néhány percre leléptem, és többek között erre a linkre bukkantam. (Vigyázat!!! A linken van a link! :))
DE!!!!
Az előbbi linken az alábbi okosságokat is találtam, amelyek többsége nem csak a drupalos fejlesztőkre érvényes:
http://szantogabor.com/bolcsessegek
DE!!!!
Az előbbi linken az alábbi okosságokat is találtam, amelyek többsége nem csak a drupalos fejlesztőkre érvényes:
http://szantogabor.com/bolcsessegek
2014. március 28., péntek
PHP Snippet: View szintek gyorsítótárazása Phalcon-ban
Nem nagyon találtam meg a Phalcon dokumentációjában, csak némi google zaklatás után.
A helyzet: Phalcon View objektumban beállítható, hogy legyen gyorsítótárazva a nézet, de ekkor a legfelső szinttől a teljes tartalmat gyorsítótárazza. Ha a renderelési szint lejjebb van állítva, akkor nem készít gyorsítótár bejegyzést.
DE!!! Van egy a dokumentációban nem említett beállítás, amellyel megadható, hogy a View objektum melyik szintjének kimenete legyen eltéve a gyorsítótárba.
Ezt pedig a következőképpen lehetséges:
$view->cache(array(
'level' => \Phalcon\Mvc\View::LEVEL_ACTION_VIEW
));
----
Örültem a szerencsének!
-----------------------------------------------------------
Kiegészítés a fenti bejegyzéshez (2014-04-02)
Nem minden esetben történik meg a fentebb említetthez hasonló beállítások mellett a megfelelő View szintek gyorsítótárazása.
Az alábbi érdekes jelenségeket tapasztaltam ezzel kapcsolatban:
A helyzet: Phalcon View objektumban beállítható, hogy legyen gyorsítótárazva a nézet, de ekkor a legfelső szinttől a teljes tartalmat gyorsítótárazza. Ha a renderelési szint lejjebb van állítva, akkor nem készít gyorsítótár bejegyzést.
DE!!! Van egy a dokumentációban nem említett beállítás, amellyel megadható, hogy a View objektum melyik szintjének kimenete legyen eltéve a gyorsítótárba.
Ezt pedig a következőképpen lehetséges:
$view->cache(array(
'level' => \Phalcon\Mvc\View::LEVEL_ACTION_VIEW
));
----
Örültem a szerencsének!
-----------------------------------------------------------
Kiegészítés a fenti bejegyzéshez (2014-04-02)
Nem minden esetben történik meg a fentebb említetthez hasonló beállítások mellett a megfelelő View szintek gyorsítótárazása.
Az alábbi érdekes jelenségeket tapasztaltam ezzel kapcsolatban:
- Ha nincs megadva a ->cache() metódusban a gyorsítótárazandó szint, akkor csak a LEVEL_MAIN_LAYOUT renderelési View szint esetén fog automatikusan gyorsítótárazni.
(Ez a pont inspirálta a fenti bejegyzést! :)) - A View esetén beállított renderelési szintnek nagyobbnak kell lennie a gyorsítótárazandó View szintnél, hogy beinduljon az automatikus gyorsítótárazás
- LEVEL_LAYOUT renderelési szint esetén bármilyen gyorsítótárazandó szint beállítása esetén két eredményt sikerült kicsiholnom:
- Nem volt gyorsítótár bejegyzés létrehozva,
- Vagy állandóan csak a LEVEL_LAYOUT szint lett csak a gyorsítótárba letárolva, annak ellenére, hogy pl. LEVEL_ACTION_VIEW lett megjelölve a gyorsítótárazandó View szintnek
- Egy hasznos, gyakorlati kísérletezgetések utáni tanács:Ha a ->cache() metódusban a 'level' értéknek TRUE-t adunk meg, akkor éppen a View-nak beállított renderelési szint teljes tartalma fog a gyorsítótárba bekerülni.
Valamint, ha ugyanez a 'level' érték FALSE-t kap, akkor nem lesz gyorsítótár generálva!
2013. május 7., kedd
PHP függvény hívás gyors teszt
in medias res:
<?php
$foo = function($a, $b, $c)
{
$j = 5-10-34-1+3/5;
// echo 'foo function';
};
function foo($a, $b, $c)
{
$j = 5-10-34-1+3/5;
}
class Bar
{
public static function static_foo($a, $b, $c)
{
$j = 5-10-34-1+3/5;
}
public function foo($a, $b, $c)
{
$j = 5-10-34-1+3/5;
}
}
$max = 10000;
echo '1 - '.$max;
echo '<br />';echo '<br />';
echo 'foo(1, 2, 3)';echo '<br />';
$i = 0;
$time = microtime(true);
while ($i<$max)
{
foo(1, 2, 3);
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
echo '$foo = function($a, $b, $c){ /* ... */ }';echo '<br />';
echo '$foo(1,2,3)';echo '<br />';
$i = 0;
$time = microtime(true);
while ($i<$max)
{
$foo(1, 2, 3);
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
echo '$function = "foo";';echo '<br />';
echo '$function(1, 2, 3)';echo '<br />';
$i = 0;
$function = 'foo';
$time = microtime(true);
while ($i<$max)
{
$function(1, 2, 3);
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
echo "call_user_func('foo', 1, 2, 3)";echo '<br />';
$i = 0;
$time = microtime(true);
while ($i<$max)
{
call_user_func('foo', 1, 2, 3);
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
echo "call_user_func_array('foo', array(1, 2, 3))";echo '<br />';
$i = 0;
$time = microtime(true);
while ($i<$max)
{
call_user_func_array('foo', array(1, 2, 3));
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
echo "call_user_func(array('Bar', 'foo'), 1,2,3)";echo '<br />';
$i = 0;
$time = microtime(true);
while ($i<$max)
{
call_user_func_array(array('Bar', 'foo'), array(1,2,3));
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
echo 'call_user_func_array(array("Bar", "foo"), array(1,2,3))';echo '<br />';
$i = 0;
$time = microtime(true);
while ($i<$max)
{
call_user_func_array(array('Bar', 'foo'), array(1,2,3));
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
echo 'call_user_func_array("Bar::foo"), array(1,2,3))';echo '<br />';
$i = 0;
$time = microtime(true);
while ($i<$max)
{
call_user_func_array('Bar::foo', array(1,2,3));
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
echo '$bar->{$function}(1, 2, 3)';echo '<br />';
$i = 0;
$bar = new Bar(1, 2, 3);
$time = microtime(true);
while ($i<$max)
{
$function = 'foo';
$bar->{$function}(1, 2, 3);
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
echo '$class::$function(1, 2, 3)';echo '<br />';
$i = 0;
$class = 'Bar';
$function = 'static_foo';
$time = microtime(true);
while ($i<$max)
{
$class::$function(1, 2, 3);
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
?>
---------------------------------------------
Majd egy nálam produkált egyik kimenet:
1 - 10000
foo(1, 2, 3)
0.1220018863678
$foo = function($a, $b, $c){ /* ... */ }
$foo(1,2,3)
0.23000001907349
$function = "foo";
$function(1, 2, 3)
0.13000011444092
call_user_func('foo', 1, 2, 3)
0.21000099182129
call_user_func_array('foo', array(1, 2, 3))
0.22499990463257
call_user_func(array('Bar', 'foo'), 1,2,3)
0.27999997138977
call_user_func_array(array("Bar", "foo"), array(1,2,3))
0.29000091552734
call_user_func_array("Bar::foo"), array(1,2,3))
0.29000020027161
$bar->{$function}(1, 2, 3)
0.13499999046326
$class::$function(1, 2, 3)
0.13499999046326
---------------------------------------------
Kb. a dobogó:
<?php
$foo = function($a, $b, $c)
{
$j = 5-10-34-1+3/5;
// echo 'foo function';
};
function foo($a, $b, $c)
{
$j = 5-10-34-1+3/5;
}
class Bar
{
public static function static_foo($a, $b, $c)
{
$j = 5-10-34-1+3/5;
}
public function foo($a, $b, $c)
{
$j = 5-10-34-1+3/5;
}
}
$max = 10000;
echo '1 - '.$max;
echo '<br />';echo '<br />';
echo 'foo(1, 2, 3)';echo '<br />';
$i = 0;
$time = microtime(true);
while ($i<$max)
{
foo(1, 2, 3);
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
echo '$foo = function($a, $b, $c){ /* ... */ }';echo '<br />';
echo '$foo(1,2,3)';echo '<br />';
$i = 0;
$time = microtime(true);
while ($i<$max)
{
$foo(1, 2, 3);
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
echo '$function = "foo";';echo '<br />';
echo '$function(1, 2, 3)';echo '<br />';
$i = 0;
$function = 'foo';
$time = microtime(true);
while ($i<$max)
{
$function(1, 2, 3);
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
echo "call_user_func('foo', 1, 2, 3)";echo '<br />';
$i = 0;
$time = microtime(true);
while ($i<$max)
{
call_user_func('foo', 1, 2, 3);
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
echo "call_user_func_array('foo', array(1, 2, 3))";echo '<br />';
$i = 0;
$time = microtime(true);
while ($i<$max)
{
call_user_func_array('foo', array(1, 2, 3));
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
echo "call_user_func(array('Bar', 'foo'), 1,2,3)";echo '<br />';
$i = 0;
$time = microtime(true);
while ($i<$max)
{
call_user_func_array(array('Bar', 'foo'), array(1,2,3));
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
echo 'call_user_func_array(array("Bar", "foo"), array(1,2,3))';echo '<br />';
$i = 0;
$time = microtime(true);
while ($i<$max)
{
call_user_func_array(array('Bar', 'foo'), array(1,2,3));
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
echo 'call_user_func_array("Bar::foo"), array(1,2,3))';echo '<br />';
$i = 0;
$time = microtime(true);
while ($i<$max)
{
call_user_func_array('Bar::foo', array(1,2,3));
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
echo '$bar->{$function}(1, 2, 3)';echo '<br />';
$i = 0;
$bar = new Bar(1, 2, 3);
$time = microtime(true);
while ($i<$max)
{
$function = 'foo';
$bar->{$function}(1, 2, 3);
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
echo '$class::$function(1, 2, 3)';echo '<br />';
$i = 0;
$class = 'Bar';
$function = 'static_foo';
$time = microtime(true);
while ($i<$max)
{
$class::$function(1, 2, 3);
$i++;
}
echo microtime(true) - $time;
echo '<br />';echo '<br />';
?>
---------------------------------------------
Majd egy nálam produkált egyik kimenet:
1 - 10000
foo(1, 2, 3)
0.1220018863678
$foo = function($a, $b, $c){ /* ... */ }
$foo(1,2,3)
0.23000001907349
$function = "foo";
$function(1, 2, 3)
0.13000011444092
call_user_func('foo', 1, 2, 3)
0.21000099182129
call_user_func_array('foo', array(1, 2, 3))
0.22499990463257
call_user_func(array('Bar', 'foo'), 1,2,3)
0.27999997138977
call_user_func_array(array("Bar", "foo"), array(1,2,3))
0.29000091552734
call_user_func_array("Bar::foo"), array(1,2,3))
0.29000020027161
$bar->{$function}(1, 2, 3)
0.13499999046326
$class::$function(1, 2, 3)
0.13499999046326
---------------------------------------------
Kb. a dobogó:
- 1. hely
- foo(1, 2, 3)
- 2. hely
- $function = "foo"; $function(1, 2, 3)
- $bar->{$function}(1, 2, 3)
- $class::$function(1, 2, 3)
- 3. hely:
- call_user_*()
2012. október 27., szombat
Virtualbox linux natív képernyő felbontáshoz szükséges lehet
Kijött a Xubuntu 12.10 is az Ubuntu 12.10 megjelenésével egyidőben!
Mivel úgy látszik még mindig ismerkedek a linux-okkal, és most már nem annyira biztos, hogy a Debian mellett fogom letenni a voksom, ezért feltoltam egy Virtualbox-os virtuális gépre a Xubuntu legújabb változtatát.
De telepítés után és a Virtualbox Integrációs Szolgáltatások feltelepítése után nem ismerte fel a monitorom teljes felbontását, és teljes képernyős módban is max. 1024x768-as felbontás tudott maximum!
Megoldás:
Némi keresgélés után találtam ezt a blog bejegyzést (biztos sok egyéb helyen is van megoldás):
http://ubuntuforums.org/showthread.php?t=1880909
Három csomagot kell telepíteni, ha még nem lennének a rendszerben:
Nekem ez nálam megoldotta a problémát, valószínű mindenki másnál is meg fogja! Valamint ha jól sejtem, akkor az Ubuntu család összes tagjánál is ugyanezeket kell telepíteni, ha gond lenne (Kubuntu, Lubuntu, Ubuntu, Edubuntu, stb...)
Mivel úgy látszik még mindig ismerkedek a linux-okkal, és most már nem annyira biztos, hogy a Debian mellett fogom letenni a voksom, ezért feltoltam egy Virtualbox-os virtuális gépre a Xubuntu legújabb változtatát.
De telepítés után és a Virtualbox Integrációs Szolgáltatások feltelepítése után nem ismerte fel a monitorom teljes felbontását, és teljes képernyős módban is max. 1024x768-as felbontás tudott maximum!
Megoldás:
Némi keresgélés után találtam ezt a blog bejegyzést (biztos sok egyéb helyen is van megoldás):
http://ubuntuforums.org/showthread.php?t=1880909
Három csomagot kell telepíteni, ha még nem lennének a rendszerben:
- virtualbox-guest-dkms - ez a virtualbox "quest-additions"-el már felmászott korábban
- virtualbox-guest-utils - személy szerint ez nem volt telepítve nálam
- virtualbox-guest-x11 - ezzel is rendelkeztem már, úgy mint az első csomaggal
Nekem ez nálam megoldotta a problémát, valószínű mindenki másnál is meg fogja! Valamint ha jól sejtem, akkor az Ubuntu család összes tagjánál is ugyanezeket kell telepíteni, ha gond lenne (Kubuntu, Lubuntu, Ubuntu, Edubuntu, stb...)
Feliratkozás:
Bejegyzések (Atom)