@ujovlado píše …
… články o webe, programovaní, názoroch a inšpirácii

Ako nainštalovať Neon cez Composer

Ak potrebujete vo svojom projekte použiť Neon a nechce sa vám sťahovať .zip súbor, tu je malý návod ako ho nainštalovať cez Composer.

Neon je alternatívny jazyk/formát na zapisovanie dát do štruktúr, ktoré sú veľmi ľahko čitateľné pre človeka. Na jeho domovskej stránke nájdete príklad.

Neon je súčasťou Nette frameworku, takže jeden spôsob ako ho nainštalovať je spolu s Nette. Čo však v prípade, že ho chcete použiť v inom projekte ako standalone knižnicu?

Riešenie je viac než jednoduché. Stačí si vytvoriť composer.json súbor a v časti repositories ho zadefinovať ako package.

{
    "require": {
        "nette/neon": "1.0"
    },
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "nette/neon",
                "version": "1.0",
                "dist": {
                    "url": "http://ne-on.org/neon.zip",
                    "type": "zip",
                    "shasum": "6064827bbc0239ddabe5edcc0d3a5995a092e118"
                },
                "autoload": {
                    "classmap": ["Neon.php"]
                }
            }
        }
    ]
}

A už len spustiť composer install a je to.

user@pc:~project$ composer install

Dôležitou časťou je autoload časť, ktorá zabezpečí, že sa nám načítajú všetky triedy zo súboru Neon.php. Po inštalácií sa môžete o tom presvedčiť nahliadnutím do súboru /vendor/composer/autoload_classmap.php.

<?php
 
// autoload_classmap.php @generated by Composer
 
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
 
return array(
    'Neon' => $vendorDir . '/nette/neon/Neon.php',
    'NeonEntity' => $vendorDir . '/nette/neon/Neon.php',
    'NeonException' => $vendorDir . '/nette/neon/Neon.php',
);

PS: Samozrejme aby načítanie tried fungovalo, treba použiť Composer autoloader.

Zobraziť článok ...

Yii framework a Composer

Do Yii pridali vo verzii 1.1.14 (konečne!) podporu Composera. Nemyslím si však, že to urobili úplne najlepšie.

Composer

Composer je nástroj nástroj na správu závislostí v PHP. Umožní vám definovať závislosti vašich projektov tak, aby každý, kto bude váš projekt používať alebo ho vyvíjať, získal takú verziu závislostí, akú ste zadefinovali.

Keď začínate nový projekt v PHP, nemali by ste už sťahovať žiadny .zip, či .tar.gz archív ale rovno začať s Composerom. To znamená vytvoriť súbor composer.json s potrebnými závislosťami a jednoducho spustiť composer install.

Súbor composer.json s požiadavkou na Yii 1.1.14:

{
    "require": {
        "yiisoft/yii": "1.1.14"
    }
}

Z adresára, kde je tento súbor vytvorený následne spustíte:

user@pc:~project$ composer install

Výsledkom je nainštalovaný Yii framework v adresári vendor/yiisoft/yii (t.j. akoby ste stiahli archív a rozbalili ho tam) a vytvorený súbor composer.lock, ktorý presne popisuje a fixuje závislosti vašeho projektu.

Yii webapp

Yii poskytuje možnosť vygenerovať úvodnú webapp. Je akousi základnou kostrou projektu. Túto kostru vygenerujeme pomocou príkazu yiic. A keďže Yii má v composer.json časť bin, Composer nám pri inštalácii vytvoril symlink z vendor/yiisoft/yii/framework/yiic do vendor/bin/yiic.

user@pc:~project$ ./vendor/bin/yiic webapp web

Príkaz vytvorí v adresári web základnú kostru projektu. Tento adresár je potom nastavený ako DocumentRoot a obsahuje súbor index.php, ktorého kód je:

<?php
 
// change the following paths if necessary
$yii=dirname(__FILE__).'/../vendor/yiisoft/yii/framework/yii.php';
$config=dirname(__FILE__).'/protected/config/main.php';
 
// remove the following lines when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);
// specify how many levels of call stack should be shown in each log message
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
 
require_once($yii);
Yii::createWebApplication($config)->run();

Keďže používame Composer, chceme aby sa o závislosti staral on a nie my, preto by sme mali použiť jeho autoloader.

Yii a Composer autoloader

Zameníme teda require_once($yii); za require_once(dirname(__FILE__).'/../vendor/autoload.php'); a zmažeme definíciu premennej $yii.

Súbor index.php bude vyzerať takto:

<?php
 
// change the following paths if necessary
$config=dirname(__FILE__).'/protected/config/main.php';
 
// remove the following lines when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);
// specify how many levels of call stack should be shown in each log message
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
 
require_once(dirname(__FILE__).'/../vendor/autoload.php');
 
Yii::createWebApplication($config)->run();

A tu nastáva problém. Composer nevie, že má načítať Yii, t.j. súbor vendor/yiisoft/yii/framework/yii.php. Dá sa to vyriešiť jednoducho, no autorom Yii sa do toho moc nechce, a tak si musíme poradiť sami.

Riešením je úprava composer.json tak, aby Yii obsahoval autoload časť. Nie je ho však možné pridať do existujúcej require časti ale treba zadefinovať Yii ako "nový" balíček:

{
    "require": {
        "yiisoft/yii": "1.1.14"
    },
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "yiisoft/yii",
                "version": "1.1.14",
                "dist": {
                    "url": "https://github.com/yiisoft/yii/releases/download/1.1.14/yii-1.1.14.f0fee9.tar.gz",
                    "type": "tar",
                    "shasum": "b405beeb3487c9c41f4e3b8b6b5c8d63068a294d"
                },
                "bin": [
                    "framework/yiic"
                ],
                "autoload": {
                    "files": ["framework/yii.php"]
                }
            }
        }
    ]
}

K archívu som pridal i jeho shasum (SHA1 checksum). V prípade, že sa checksum archívu nebude zhodovať so zadaným, Composer "vyhodí" chybu.

Následne treba zmazať priečinok vendor/yiisoft/yii a spustiť composer update:

user@pc:~project$ rm -rf vendor/yiisoft/yii && composer update

Spustiť len composer update nestačí, pretože Composer nezistí, že sa niečo zmenilo, pokiaľ sa nezmení číslo verzie.

Composer nainštaluje Yii aj s časťou autolad. Dôkazom by mala byť existencia súboru vendor/composer/autoload_files.php s vygenerovaným obsahom:

<?php
 
// autoload_files.php @generated by Composer
 
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
 
return array(
    $vendorDir . '/yiisoft/yii/framework/yii.php',
);

Teraz môžete do svojho Yii projektu pridať ďalšie závislosti a o ich načítanie sa postará Composer a jeho autoloader.

Záver

Takýmto spôsobom nemusíte riešiť len Yii, no môžete spravovať aj závislosti projektov, ku ktorým sú dostupné len archívy, prípadne ak máte len VCS prístup. Viac sa dočítate na stránke Composera, v časti Repositories/Types/Package.

Zobraziť článok ...

Čo s WebElementom?

Je tu ďalší rok, a tak zhodnocujem predošlý, rozmýšľam do čoho sa pustiť a na čo sa, naopak, vykašlať. Babo, raď!

A opäť prišiel na rad WebElement.

Troška z "histórie"

V minulosti som chcel mať firmu, a tak som vymýšľal jej názov. Firma sa mala zaoberať webmi, čiže som si dal podmienku, aby tam bolo slovo "web". Ďalšou podmienkou bolo aby bol názov zvučný a ľahko zapamätateľný. Ani neviem ako a vymyslel som názov WebElement. Zvučný názov to je, takmer každé druhé písmenko je samohláska. Super je tiež podobnosť so slovami ako Klement, či cement.

Doménu webelement.sk som si zaregistroval 10.08.2011 so zámerom, že sa tak bude v budúcnosti volať moja firma.

V tom čase som pracoval vo webhostingovej firme WebSupport. S kolegom Igorom Hlinom sa nám veľmi páčil "pořad" Digit, ktorý robia Petr Mára a Jan Březina. Našou víziou "nádejného slovenského startupu" bolo spraviť niečo podobné so zameraním na weby. A tak sme si sadli za stôl, zobrali firemný iPad, malinovku, kvet a začali sme točiť WebElement.

WebElement beta

Natočili sme prvú časť. Na to, že nám 5 minút pred koncom natáčania došlo miesto na pamäťovej karte (alebo sa vypol foťák, neviem), mne zazvonil v polovici telefón a rehotali sme sa ako kone, to bola to veľká zábava, no video nebolo v žiadnom prípade hodné zverejnenia.

O pár mesiacov neskôr som dostal nápad urobiť z WebElementu stretnutie. V tých časoch sa v Bratislave konala tiež Rubyslava, tak som zvolil tú istú krčmu, nech sa ľudia nemusia terigať niekam inam a po kladných odpovediach z Twittru som usporiadal 10.11.2011 prvé stretnutie. Aby som nemusel prednášať na "mojom" evente hneď prvý raz ja, porosil som kolegu z našej šou (opäť Igora). Úlohy sa ujal skvele a získal tak "právo první noci". :)

V podobe stretnutí funguje WebElement doteraz.

WebElement

WebElement je stretnutie web developerov, ktorí majú chuť podeliť sa o svoje skúsenosti získané pri vývoji webov a aplikácií, či Open Source projektu alebo nadšencov, ktorí chcú odovzdávať vedomosti ďalej.

WebElement má za sebou viac ako 2 roky, presne 25 stretnutí a vyše 35 prezentácií.

2 roky

Počas fungovania WebElementu sa toho stihlo celkom dosť. Teším sa najmä:

Najväčším úspechom je ale aj tak budovanie komunity a to, že sa stretnutia konali a ľudia tak mali dôvod stretnúť sa. ;)

WebElement #18

Poďakovanie samozrejme patrí všetkým, čo sa nehanbili a boli prednášať a hlavne tým, ktorí sa nebáli a na prednášku sa prihlásili sami, a taktiež kamošom ktorí prišli prednášať, keď som ich poprosil "za 5 minút 12". A tiež tým, ktorí dotiahli na WebElement ďalších spíkrov a ľudí.

Ono sa to nezdá, aj keď veľakrát vyzerá, že všetko funguje, mal som už obdobia, že s tým seknem.

Kde je problém?

Jednak je v tom, že je veľmi ťažké nájsť ľudí rovnako alebo viac nadšených pre vec, a pravdupovediac, samého ma to už moc nebaví.

Druhým kameňom úrazu sú ľudia samotní. Jednoduchšie je im prísť na stretnutie s tým, že si niečo vypočujú, dájú pivo, zabavia sa, a šup s kľudom domov, ako s tým, že ostatným by mali niečo odprezentovať, vysvetliť resp. naučiť ich novú vec.

Je to ako s Open Source. Každý ho rád používa, no prispieť doň sa nikomu nechce. Neviem, či je to pohodlnosťou alebo tým, že sú ľudia nastavení v akomsi jednosmernom prijímacom móde.

A tak teda rozmýšľam ...

Zobraziť článok ...

staršie »