Michal Čihař - Blog Archives

Vlastní témata

Nelíbí se vám žádné z nabízených témat phpMyAdmina a máte zkušenosti s vytvářením grafiky pro web? Tak si vytvořte vlastní téma!

Vytvořit vlastní téma je celkem jednoduché, téma se skládá z definované sady obrázků, tří souborů definující CSS, screenshotu a dvěmi PHP soubory s informacemi o tématu. Pokud ovšem jsme příliš líní, můžeme si stáhnout již hotová témata ze stránkek projektu a vycházet při úpravách z nich.

Základní informace o tématu – jeho název, který se zobrazí uživateli a verze phpMyAdmina se kterou je kompatibilní, se nacházejí v souboru info.inc.php :

 
  <?php
$theme_name = 'Moje téma';
$theme_full_version = '2.9';
?>
 

Pokud je verze starší než aktuálně používaná, pokusí se phpMyAdmin aplikovat na CSS změny, ke kterým mezitím došlo. Nicméně toto pravděpodobně nebude přestě to, co by udělal autor a proto je vhodné téma při každé nové verzi revidovat.

Ve starších tématech můžete místo $theme_full_version nalézt proměnné $theme_version a $theme_generation , které se dříve používaly pro určení verze. Témata v rámci jedné generace by měly být zpětně kompatibilní (dochází například k přidání obrázků nebo css tříd), rozdílné generace témat mohly být naprosto odlišné. Protože ale toto značení bylo pro uživatele nepřehledné, nyní se preferuje zapsání kompatibilní verze.

Dalším PHP skriptem je soubor layout.inc.php . Ten obsahuje konfigurovatelné nastavení tématu, které může uživatel změnit bez přímého zásahu do tématu (například šířka navigačního rámu nebo použité písmo). Co umožní téma konfigurovat záleží na autorovi, ale doporučujeme držet se originálních témat.

CSS styly nastavíme v souborech v adresáři css. Tyto soubory jsou tři, po jednom pro levý a pravý rámec a jeden pro tisk: theme_left.css.php , theme_right.css.php a theme_print.css.php . Mohou to být jen čistě css soubory nebo využít i možností php a v něm použít konfigurace ze souboru layout.inc.php a předdefinovaných proměnných pro detekci různých prohlížečů. Pro popis jednotlivých tříd je nejlepší se podívat do existujících témat, komplexní dokumentace zde bohužel chybí.

Nejnáročnější část tématu na vytvoření je asi sada obrázků. Protože většina akcí je znázorněna ikonkou, je obrázků je poměrně hodně (v současné verzi 115). Nicméně i zde je možné si práci ušetřit použitím ikon z existujícího tématu (takto ostatně vznikla i většina témat, které jsou k phpMyAdminovi k dispozici).

Po vytvoření a vyladění všech těchto souborů vytvoříme ještě malý screenshot screen.png , aby uživatel viděl, jak naše téma vypadá a můžeme ho rozšířit do světa pomocí trackeru na webu projektu.

Aktualizace phpMyAdmina

Aktualizace aplikace na novou verzi v produkčním prostředí občas může způsobit značné problémy. Jaká úskalí vás mohou potkat při aktualizaci phpMyAdmina?

Přechod na novou verzi

phpMyAdmin již mnoho verzí počítá se snadnou možností aktualizace a tak jediná věc, která je obvykle potřeba je překopírování konfiguračního souboru config.inc.php do nové verze. Pokud jste však z nějakých důvodů používali prehistorickou verzi phpMyAdmin 2.3.0, budete muset konfigurační soubor převést do nového formátu (skript scripts/convertcfg.pl vám v tom bude nápomocen). Nyní můžete novou verzi vyzkoušet a vše by mělo fungovat.

Změny nastavení mezi verzemi

Jak již bylo řečeno, není potřeba při aktualizaci phpMyAdmina měnit jeho nastavení. Nicméně přesto může být zásah do konfiguračního souboru config.inc.php užitečný, protože nové verze přidávají nové vlastnosti, které třeba budete chtít využít. Tyto paramtery jsou popsané v  dokumentaci a jejich výchozí hodnoty naleznete v souboru libraries/config.default.php . Tento soubor nepoužívejte jako config.inc.php , jeho použití může mít za následek nefunkčnost při přechodu na další verzi. Pokud vám výchozí hodnoty vyhovují, není potřeba nic měnit, automaticky se použijí, jinak vložte tuto konfigurační volbu do svého konfiguračního souboru.

Témata

Vaše stará témata nemusí být kompatibilní s novou verzí. I když se phpMyAdmin v současné době snaží být kompatibilní i se staršími verzemi témat, někdy jsou změny v rozhraní příliš velké a stará témata prostě nebudou vypadat dobře. V tomto případě vám nezbyde než čekat na vydání nové verze tématu nebo provést potřebné změny pro docílení dobrého vzhledu vlastními silami.

Nastavení přístupu k MySQL serverům

phpMyAdmin není omezen jen na použití s jediným MySQL serverem. Základní nastavení pro jeden server již bylo popsáno dříve, teď je na čase postoupit k nastavení pro složitější konfigurace a podrobněji popsat možnosti, které phpMyAdmin nabízí.

Typ přihlášení

Základní možnosti přihlašování byly stručně popsány dříve , ale jejich výhody a nevýhody si teď ještě probereme podrobněji. Volba typu přihlášení se do konfiguračního souboru píše následovně:

 
  $cfg['Servers'][$i]['auth_type'] = 'typ';
 

config

Připojení je nadefinované v konfiguračním souboru, omezení přístupu by mělo být zajištěno jiným způsobem. Pokud používáme phpMyAdmina jen na lokálním počítači, může se jednat o nejpohodlnější variantu.

cookie

Přihlašování pomocí koláčků, kdy se uživatel přihlašuje stejným uživatelským jménem a heslem jako do MySQL. Autentizace tedy necháváme na MySQL serveru se všemi výhodami a nevýhodami, které z toho plynou. Pozor například na zpřístupnění všech účtů vzdáleně, tedy i těch, které jsou v MySQL povoleny jen z lokálního počítače.

Heslo se do koláčků ukládá šifrované klíčem uloženém na serveru ( $cfg['blowfish_secret'] ), čímž se poněkud snižuje riziko útoku v případě ukradení koláčku (ale není mu zabráněno úplně, takže dodržovat nějaké bezpečnostní zvyklosti je pořád potřeba).

Jedná se asi o nejpoužívanější volbu a kromě pevně definovaného MySQL serveru umožňuje také uživateli zadat libovolný MySQL server po nastavení:

 
  $cfg['AllowArbitraryServer'] = TRUE;
 

Pozor však pokud phpMyAdmin běží na web serveru za firewallem, v tomto případě může uživatel získat při povolení zadání libovolného serveru i přístup k interním MySQL serverům, ke kterým by jinak přístup neměl.

http

HTTP přihlašování je dost podobné přihlašování pomoci koláčků, platí pro ni téměř to samé. Jen není možné provést plnohodnotné odhlášení (HTTP autentizace toto neumožňuje) a heslo na straně klienta není ukládáno šifrovaně.

signon

Tato metoda je určena pro integraci phpMyAdmina do jiných systémů, kdy se uživatel přihlašuje heslem do jiného systému a ten phpMyAdminovi při vstupu do něj předá přístupové údaje do MySQL. Podrobněji se implementaci tohoto typu budu věnovat v některém s dalších článků, takže vás zatím jen odkážu na anglický popis na wiki .

Parametry připojení

Většina parametrů připojení asi není potřeba moc popisovat a jejich názvy celkem vypovídají co asi daná volba dělá:

 
  $cfg['Servers'][$i]['host'] = 'mysql.example.net';
$cfg['Servers'][$i]['port'] = '4242';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['ssl'] = false;
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['extension'] = 'mysql';
 

V případě, že MySQL provozujete na standardním portu (nebo soketu v případě lokálního počítače), jediné co opravdu potřebujete nastavit je $cfg['Servers'][$i]['host'] . V případě novějšího PHP je také vhodné nastavit používané rozšíření PHP na mysqli :

 
  $cfg['Servers'][$i]['extension'] = 'mysqli';
 

Více serverů

Více serverů není pro phpMyAdmina žádným problémem. Jistě jste si všimli $i zadávaného ve všech konfiguračních parametrech. Touto proměnou je možné nadefinovat libovolné množství serverů, ze kterých si uživatel bude moci vybra. Proměnná se používá místo přímého udání čísla pro snadnější případný přesun serverů nebo kopírování parametrů. Konfigurace pro více serverů pak v podstatě jen spočívá v kopírování a upravování parametrů pro jednotlivé servery. Například tedy může vypadat takto:

 
  /* Servers configuration */
$i = 0;

/* Server localhost (config:root) [1] */
$i++;
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = 'mysql';

/* Server localhost (config:franta) [2] */
$i++;
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'franta';
$cfg['Servers'][$i]['password'] = 'heslo';
 

Ve výchozím nastavení se phpMyAdmin automaticky pokusí připojit k prvnímu serveru. Pokud chceme, aby se připojoval k jinému, zadáme jeho pořadové číslo do proměnné $cfg['ServerDefault'] , pokud chceme aby si uživatel nejdříve vybral server, zadáme nulu:

 
  $cfg['ServerDefault'] = 0;
 

Time for Christmas

Today is last day when I'll be more or less online, so if you wanted something to me this year, it's probably already too late :-). I will somehow follow emails, but do not expect much.

Tomorrow I'll spend by traveling back to Czechia (NGO - FRA - PRG), then I will just enjoy time being home and not being pushed to deliver tons of papers to somebody.

This is also most likely last blog post this year, so I can not skip the merry Christmas and happy new year phrases ;-).

Gammu stable version 1.17.0

I wanted to make 1.16.0 last release this year, but unfortunately one bug preventing reading of all SMS messages from some AT phones sneaked in, so I decided to make another quick release. Changelog is really short:

  • Fixed reading of messages from AT phones using CMGL.

Other change is that I started to produce additional binary build for Windows - it does not use any external libraries (so no MySQL, PostgreSQL or Gettext support) and links statically. So you can just copy single binary and it should work anywhere.

You can download from usual place: http://cihar.com/gammu/

Vytváření binárek pro Windows bez použití Windows

Jakmile jsem jednou vydal Wammu pro Windows, upletl jsem si na sebe bič. Chyby se opravují v nových verzích a shánět nějaké Windows na to, abych mohl vydat novou verzi mě už opravdu nebaví, takže binárka pro Windows je za aktuálním stavem docela daleko. Ale od čeho máme Wine? S tím by to přece mohlo jít nějak udělat…

Na celou myšlenku kompletní automatizace mě vlastně přivedl patch pro aktualizaci intrukcí pro vytvoření verze pro Windows . Sice tento návod měl spoustu nevyřešených problémů, ale nasměroval mě směrem, který se dal použít - vše udělat pomocí Pythonu pro Windows nainstalovaného ve Wine. Doposud jsem používal o něco obskurnější cestu s ručním linkováním proti rozbalenému Pythonu a občas věci prostě nefungovaly tak jak by měly.

Po úspěšném zkompilování python-gammu přišlo na řadu vytvoření instalačního balíčku z Wammu, protože většina uživatelů na Windows prostě není schopná (nebo ochotná) instalovat Python a jednotlivé moduly ručně. Bohužel Py2Exe , který pro tyto účely používám, trpí nějakou drobnou chybou, která po znásobení nenaimplementovanou funkcí ve Wine, způsobí, že to prostě nefunguje . Naštěstí je ve zmiňovaném bugu návod, jak to pomocí PE Tools opravit (je jen chybný nějaký údaj v PE hlavičce).

Po vytvoření binárky už jen stačí vytvořit instalátor. Naštěstí má Inno Setup i kompilátor pro příkazovou řádku, takže to už bylo bez jakýchkoliv komplikací.

Bohužel testování ve Wine však nezaručí, že program půjde spustit i na Windows (třeba výše zmiňovaná chyba v PE hlavičce Wine vůbec nevadí), ale snad se časem podaří verzi pro Windows odladit do rozumného stavu. Pokud se snad někdo chce zapojit do testování a má Windows, stahovat může dočasně tady .

Jak vypadají výsledné skripty pro kompilaci se můžete podívat v SVN pro Gammu , python-gammu a Wammu .

Looking for Windows testers of Wammu

After half day of playing with Wine, MinGW and friends, I managed to be able to automatically build Windows versions of both python-gammu and Wammu. However I do not have environment to actually test these versions (except for Wine), so I would really welcome if some Windows users could do some testing. I expect some strange crashes at beginning, but hopefully we will be able fix it to produce working Wammu version for Windows in future.

You can get the installer here: http://tmp.cihar.com/wammu-0.26-setup.exe

It's NOT final or stable version, but as the only changes which happened since last release were either minor or related to cross compilation, it should be equal to combination of Gammu 1.16.0, python-gammu 0.24 and Wammu 0.25, so don't be confused by versions.

PS: Okay, when application works in Wine, it does not mean it will work in Windows, see bug report for details.

Důležité je množství a ne kvalita

Když jsem před čtyřmi měsíci odjížděl do Japonska, myslel jsem, že tu budeme dělat na nějakém smysluplném projektu. Když už si někdo zaplatí 10 lidí z Evropy, tak snad jen tak nevyhodí peníze. Bohužel opak se ukázal pravdou.

Dnes jsme odevzdávali větší část našeho projektu. Včera bylo připraveno něco přes 2000 stránek textu a večer přišel tento mail:

WE NEED YOUR HELP!!!
We are facing critical situation. We must deliver to ******* tomorrow morning our time.
However ******* is asking us to provide more documentation.
They mentioned volume was important. Their management will see only volume.
Therefore we are asked additional 1,000 pages documentation.
VOLUME IS MATTER!!

Vytvořit 1000 stránek během noci není jen tak, takže jsme jim dali POSIX standard Part 1 (535 stránek) a Eclipse basic tutorial (592 stránek). Japonci byli šťastní, že mají dalších 1100 stránek a my rádi, že s tím nemáme práci. Co na tom, že to s projektem nijak nesouvisí :-). Nakonec to pěkně zabalili do bedny a odvezli k zákazníkovi. Aneb jak dnes prohlásil kolega: „I want ten kilos of PikeOS evaluation“.

A na závěr několik statistik z tiskárny: za 3 měsíce se tu vytisklo 75000 stránek (z toho 20000 od včerejška), což při méně než 20 lidech v kanceláři dává pěkný průměr 45 stránek na člověkoden :-).

Wammu 0.25

I just released version 0.25 of Wammu. This release brings new icon set thatnks to David Corrales and fixes various crashes. Full list of changes:

  • Fall back to Add methods if Set is not supported.
  • Fixed phone number validation.
  • Fixed crash when org.freedesktop.Notifications service is not provided.
  • Correctly report why guided wizard can not connect to phone.
  • New navigation icons, thanks to David Corrales.

There is still no binary for Windows. I don't have time and environment for maintaining them. Volunteers are welcome!

We need quantity and not quality

Working on the project here at Japan is sometimes really fun. Tomorrow we have important delivery and this afternoon out Japanese colleagues decided that 2000 pages describing our software solution is not enough. They need at least 500 extra pages. Fortunately it could be any existing documentation, so we randomly choose POSIX standard Part 1 (535 pages) and the Eclipse basic tutorial (592 pages). Japanese guys were really happy that they have 1100 more pages and we're happy that we don't have to produce more documents. Now I only wonder why the hell customer is interested in quantity of paper and not in quality of work.