2018. július 26., csütörtök

restart (ismét)

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.

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.

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

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

\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.


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

\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! :)

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

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:
  1. 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! :))
  2. 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
  3. 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
  4. 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!
Egyenlőre ennyi!

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ó:
  • 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:
  • 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...)