Michal Čihař - Blog Archives for Czech

Relace aneb ušetřete si práci

Relace jsou mocným nástrojem ve světě databází, které nám umožní udržovat konzistentní tabulky, které na sebe navzájem odkazují. MySQL podporu pro relace má jen pro některá úložiště a pokud používáme výchozí MyISAM, tak jsme o tuto možnost ochuzeni. Nicméně phpMyAdmin přesto umožní relace mezi tabulkami používat díky vlastnímu zpracování relací.

Pokud nepoužíváte úložiště podporující relace, je potřeba pro používání internách relací mít v phpMyAdminovi nastaveno používání rozšířených možností . Pokud relace vaše úložiště přímo podporuje (například InnoDB), můžete bez obav tuto část pro tuto chvíli přeskočit, ale přijdete o jiné zajímavé funkce, které jsou na relace navázány a o kterých budu psát v některém dalším článku.

Relace určuje vztah mezi dvěma sloupci v tabulkách. phpMyAdmin stejně tak jako většina relačních databází podporuje přímo jen relace 1:N, relace N:N musí být prováděny přes pomocnou mapovací tabulku.

Vytváření relací je velmi jednoduché – stačí na vlastnostech tabulky kliknout na odkaz Zobrazit relace a dostaneme se na jednoduchou stránku, která nám umožní relace upravit . V horní části můžeme definovat vztahy mezi sloupci, v dolní potom sloupec, který phpMyAdmin zobrazí, pokud budete procházet tabulku, která odkazuje na nějaký řádek z aktuální tabulky. Pro klasické tabulky obsahující identifikátor (na který bude druhá tabulka odkazovat) a například jméno tedy logicky vybereme jméno.

V čem nám zadání relací usnadní práci? Při vkládání nové položky máme na výběr z hodnot v odkazované tabulce, při procházení si můžeme rovnou otevřít odkazovaný řádek a v neposlední řadě nám na stránce s operacemi přibyde odkaz na kontrolu integrity. To je bohužel také nevýhoda interních relací, phpMyAdmin nemůže vynucovat korektní editaci databáze a proto může dojít k vytvoření odkazů na neexistující položky.

Tento problém je možné vyřešit jen podporou na úrovni MySQL serveru, tedy použitím úložiště, které toto přímo podporuje, například InnoDB. Ta nám nabídne kromě možnosti výběru sloupce i operace, které se mají provést při vymazání a aktualizaci sloupce, ostatně podívejte se sami . Tím MySQL bude vynucovat integritu všech tabulek a budeme mít o starost méně.

Nativní relace v MySQL jsou podporovány na stejné úrovni jako ty interní phpMyAdmina, takže veškeré funkce můžete používat při obou možnostech. Kromě pomocí při editaci a procházení nám správně nadefinované relace můžou usnadnit i generování dokumentace, ale o tom až někdy příště.

Export do formátu NHibernate

phpMyAdmin 3.0 přinese podporu pro další formáty exportu. V SVN je v současné době implementována podpora pro NHibernate . Jedná se techonologii pro ukládání .NET objektů (nejen) do databáze, ale protože .NET opravdu není moje silná stránka, tak podrobnosti hledejte na stánkách o NHibernate. V budoucnu by pomocí stejného pluginu mělo být možné exportovat i ve formátu JSON, ale jeho vznik je teprve v rané fázi vývoje.

Zobrazování dat a MIME transformace

Při procházení tabulek phpMyAdmin přímo zobrazí jen textová data a pokud do tabulek ukládáme třeba obrázky, dozvíme se, že jen jeho velikost. Pokud chceme přímo zobrazit obrázek, musíme mít nastavené používání MIME transformací. Jak pro tento účel nastavit phpMyAdmina již bylo popsáno v článku o  rozšířených možnostech .

Předdefinované transformace

phpMyAdmin přichází s mnoha předdefinovanými transformacemi, které pokrývají nejčastěji používané operace. Jejich aktuální popis je v phpMyAdminovi obsažen, tak se můžete podívat na demo server .

Použití transformací je jednoduché, stačí vybrat požadovanou transformaci ve vlastnostech sloupce a při prohlížení se automaticky aplikuje. Některé transformace se dají dále nastavit pomocí parametrů, jejich popis je ve výše odkázaném seznamu transformací.

Vlastní transformace

Kromě předdefinovaných transformací můžeme vytvořit i svoje vlastní. Například se rozhodneme, že do popis programu může obsahovat formátovací značky BBCode (obsahuje základní formátování, používá se například v phpBB.

Transformaci pojmenujeme bbcode, a protože bude zpracovávat text, tak MIME typ bude text/plain. V adresáři libraries/tran­sformations tedy vytvoříme soubor text_plain__bbco­de.inc.php, který musí obsahovat funkci PMA_transforma­tion_text_pla­in__bbcode, která bude zavolána pro každou položku s prvním parametrem obsahujícím hodnotu pole v databázi, další dva parametry nebudeme pro naší transformaci potřebovat, ale obsahují případné parametry transformace a meta informace o sloupci tabulky.

Po chvíli hledání na internetu nalezneme funkci pro zpracování BBCode:

 
  $GLOBALS['bb_patterns'] = array(
    '`\[b\](.+?)\[/b\]`is',
    '`\[i\](.+?)\[/i\]`is',
    '`\[u\](.+?)\[/u\]`is',
    '`\[strike\](.+?)\[/strike\]`is',
    '`\[color=#([0-9a-fA-F]{6})\](.+?)\[/color\]`is',
    '`\[email\](.+?)\[/email\]`is',
    '`\[img\](.+?)\[/img\]`is',
    '`\[url=([a-z0-9]+://)([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?' .
       '(/[^ \"\n\r\t<]*?)?)\](.*?)\[/url\]`si',
    '`\[url\]([a-z0-9]+?://){1}([\w\-]+\.([\w\-]+\.)*[\w]+' .
       '(:[0-9]+)?(/[^ \"\n\r\t<]*)?)\[/url\]`si',
    '`\[url\]((www|ftp)\.([\w\-]+\.)*[\w]+(:[0-9]+)?' .
       '(/[^ \"\n\r\t<]*?)?)\[/url\]`si',
    '`\[flash=([0-9]+),([0-9]+)\](.+?)\[/flash\]`is',
    '`\[quote\](.+?)\[/quote\]`is',
    '`\[indent](.+?)\[/indent\]`is',
    '`\[size=([1-6]+)\](.+?)\[/size\]`is'
);

$GLOBALS['bb_replaces'] =  array(
    '<span style="font-weight: bold">\1</span>',
    '<span style="font-style: italic">\1</span>',
    '<span style="border-bottom: 1px dotted">\1</span>',
    '<strike>\1</strike>',
    '<span style="color:#\1;">\2</span>',
    '<a href="mailto:\1">\1</a>',
    '<img src="\1" alt="" style="border:0px;" />',
    '<a href="\1\2">\6</a>',
    '<a href="\1\2">\1\2</a>',
    '<a href="http://\1">\1</a>',
    '<object width="\1" height="\2"><param name="movie" value="\3" />' .
       '<embed src="\3" width="\1" height="\2"></embed></object>',
    '<strong>Quote:</strong><div style="margin:0px 10px;padding:5px;' .
       'background-color:#F7F7F7;border:1px dotted #CCCCCC;' .
       'width:80%;"><em>\1</em></div>',
    '<pre>\\1</pre>',
    '<h\1>\2</h\1>'
);

function bbcode( $string){

    global $bb_patterns, $bb_replaces;
    return preg_replace($bb_patterns, $bb_replaces ,
        nl2br(htmlspecialchars($string)));
}
 

A nyní již zbývá jen napsat transformační funkci, ta bude v tomto jednoduchém případě spočívat jen v zavolání jiné funkce:

 
  function PMA_transformation_text_plain__bbcode(
    $buffer, $options = array(), $meta = '') {

    return bbcode($buffer);
}
 

Hotovou transformaci si můžete stáhnout zde . Teď již jen zbývá nastavit používání této transformace na sloupec s popisem a můžeme využít formátovací možnosti BBCode. Podobným způsobem můžeme vytvořit libovolnou transformaci zpracovávající data při zobrazování. V některé s následujících verzí phpMyAdmina se možná dočkáte i podobné transformace pro editaci dat, ale to je ještě hudba vzdálené budoucnosti :-).

Přílohy:

Podpora pro Mozilla Prism

Mozilla Prism je technologie pro přímé spouštění webových aplikací u uživatele. Z prohlížeče v tomto případě zmizí ovládací prvky a možnost zadání URL, takže aplikace se více podobá opravdové aplikaci.

Podrobnější popis Prism najdete například ve Wikipedii případně v  blogu Mozilla Labs .

phpMyAdmin 3.0 přinese podporu pro tuto technologii, takže s phpMyAdminem bude možné zacházet jako s desktopovou aplikací. V současné době ještě není podpora kompletní, ale jak to bude vypadat se můžete podívat (pokud máte prohlížeč podporující Prism) na ukázkovém serveru .

Úpravy vzhledu

phpMyAdmin nabízí široké možnosti pro změnu vzhledu. Jednodušší úpravy můžeme udělat pomocí nastavení, kompletní změnu nám pak umožní témata.

Nastavení vzhledu

Levý panel

Levý panel ve výchozím nastavení je optimalizován pro velké množství databází a tabulek. Pokud tabulek máme méně, můžeme použít Javascriptový rozbalovací strom. To usnadní přechod mezi tabulkami v různých databázích.

 
  $cfg['LeftFrameLight'] = FALSE;
 

Pokud již máme stromovou strukturu, je možné jí ještě rozšířit na úrovni tabulek. To se obzvlášť hodí, pokud máme jedinou databázi a v ní mnoho tabulek, které patří k různým projektům. Aby toto bylo možné, musí být tabulky patřící k sobě pojmenovány s předponou, například pma_cosi. Nastavením $cfg[‚LeftFra­meTableSepara­tor‘] na znak (nebo řetězec) oddělující onu příponu budeme mít tabulky strukturované podle projektů:

 
  $cfg['LeftFrameTableSeparator'] = '__';
 

V levém panelu pak můžeme vidět například následující strom:

Úpravy a procházení tabulek

Při vytváření tabulky se ze zapnutými transformacemi zobrazuje mnoho položek a obvykle se nevejdou na obrazovku. Toto zobrazení je možné otočit o devadesát stupňů, takže parametry jednoho sloupce budou zobrazeny pod sebou a zaberou méně místa. Po nastavení

 
  $cfg['DefaultPropDisplay'] = 'vertical';
 

tedy získáme:

Příliš dlouhý text se při procházení tabulek zkracuje na 50 znaků, což může být v mnoha situacích na škodu, vždy při prohlížení tento limit můžeme obejít pomocí tlačítka nebo ho lze nastavít konfigurační volbou

 
  $cfg['LimitChars'] = 100;
 

Stejně tak při úpravách polí CHAR a VARCHAR může být pole typu input příliš malé, tak ho můžeme nahradit polem textarea, které nám umožní i zadávat text obsahující více řádek:

 
  $cfg['CharEditing'] = 'textarea';
 

V konfiguraci můžeme ovlivnit i velikost editačních polí ($cfg[‚CharTex­tareaCols‘] a $cfg[‚CharTex­tareaRows‘]) a také jejich automatické označování ($cfg[‚Textare­aAutoSelect‘]), které, obzvláště s automatickým kopírováním do schánky, obvykle působí uživatelům používajícím XWindows víc škody než užitku.

Témata

Zásadnější změnu vzhledu můžeme docílit pomocí témat. Téma můžeme buďto stáhnout se stránek s tématy , nebo si vytvořit vlastní. Tvorba vlastního tématu bude popsána později, tentokrát se zaměříme jen na instalaci tématu. Témat je k dispozici poměrně hodně, ale žádné se zatím neodhodlalo k zásadnější změně rozhraní a všechna se drží zažitého stylu phpMyAdmina, takže můžete vybírat podle barevných preferencí. Při výběru je potřeba také pamatovat na kompatibilitu tématu. Témata se s každou verzí trochu mění a použít nekompatibilní téma by znamenalo problémy se zobrazováním, proto vám je phpMyAdmin ani neumožní vybrat.

Instalace tématu je jednoduchá, stačí rozbalit archív s tématem do adresáře themes a pak již jen vybrat v phpMyAdminovi . Pokud na seznamu svoje právě nainstalované téma nevidíte, pravděpodobně jste vybrali nekompatibilní ver­zi.

Podpora oddílů

Kromě pravidelných pondělních článků o používání phpMyAdmina zde také budou ve čtvrtek vycházet články o novinkách ve vývojové verzi. Protože rychlost vývoje nelze ovlivnit, bude také četnost těchto článků náhodná.

Dnes se podíváme na podporu nové vlastnosti MySQL 5.1 – oddíly tabulek.

MySQL 5.1 přichází z možností rozdělit tabulku na fyzické oddíly, které jsou samostatně uložené v souborech. To umožní lépe rozložit zátěž (třeba umístěním každého souboru na jiný disk) nebo například stará archivovaná a málo používaná data ukládat samostatně (na pomalejší disky). Prostě při vhodném nastavení může být vliv na rychlost výběru z velké databáze značný. Podrobnější popis této funkce najdete v  dokumentaci MySQL .

Do vývojové verze phpMyAdmina byla přidána základní podpora pro tuto funkci. Protože možnosti definice jsou poměrně rozsáhlé, phpMyAdmin se zatím nesnaží nabídnout žádné komfortní rozhraní pro editaci, ale jen textové pole, ve kterém může uživatel zadat definici oddílů. Ostatně můžete si to vyzkoušet na demo serveru .

Výlet do Koreje

Protože se už platnost našich víz chýlila ke konci, vyslala nás firma na výlet do Koreje, aby nám při vstupu do Japonska udělili další devadesátidenní vízum. Nejdříve jsme se Šinkanzenem přepravili do Tokya, tam jsme se po delším čekání sešli se zmateným kolegou Okou a vyrazili vlakem a monorailem na letiště. Tam Oka zavelel k útoku na letadlo a odletěli jsme do Soulu.

V Soulu na letišti jsme si nejdříve naplnili peněženku drobnými (místní měna má kurz asi 50:1 ke koruně) a přistaveným autobusem jsme se vydali do města. K našemu velkému zklamání jsme se nejeli rovnou ubytovat ani najíst, ale byli jsme poctěni návštěvou duty free nákupního centra. Nekoupili jsme si ani hodinky Rolex ani kabelku Louis Vuitton, ale aspoň jsme trochu viděli noční Soul, a po dvaceti minutách jsme pokračovali na cestě do hotelu.

Po ubytování už jsme hladoví vyrazili do víru velkoměsta (Soul má 10 miliónů obyvatel, metropolitní oblast 23 milónů). Celkem rychle jsme našli korejskou restauraci a nacpali se pečeným masem, jehož některé kousky byly obzvláště pálivé. Při procházce jsme viděli ryby čekající na uvaření v akváriích na ulici, Honzík poprvé ochutnal jídlo na ulici a po procházce živými částmi města jsme skončili v místním klubu.

V sobotu ráno nás po luxusní a drahé (30000 Wonů) snídani čekala prohlídka města. Začali jsme ve vězení Soedaemun, kde během Japonské kolonizace Japonci mučili Korejce. Exposice byla velmi působivá, bohužel se ale uvnitř nesmělo fotit, tak toho ve fotkách moc neuvidíte. Krátkou procházkou městem (a Reného skuhrání) jsme se dostali až k místní turistické atrakci číslo jedna - paláci Changdeokgung. Prohlídka byla možná jen s průvodcem, tak jsme v davu prošli celým areálem a prohlíželi si budovy paláce, které vypadaly jedna jako druhá. Za palácem prohlídka vedla do tajné zahrady, kde bylo vidět, že jsme ve chladnější části světa než Japonsko - stromy už byly pěkně obarvené.

Při další cestě městem jsme se upsali proti porušování lidských práv v Číně, někteří nakoupili hůlky, viděli sochu místního slavného generála a několik altánů mezi mrakodrapy. Celkem náhodou jsme narazili na potok Cheonggyecheon - uměle upravené koryto potoka a místní promenáda.

Hlad začínal být čím dál tím větší a tak jsme zalezli do první restaurace, která se nám líbila. Bohužel schopnost personálu domluvit se jakýmkoliv jiným jazykem než korejštinou byla nulová, tak jsme zase v zápětí vylezli a navštívili vedlejší podnik, kde přecijen angličtinu někdy slyšeli a podařilo se nám objednat další maso na pečení. Tentokrát to bylo levnější a lepší než v pátek, ale za to byl mnohem větší boj s obsluhou.

Nočním Soulem jsme pak došli až k lanovce, která nás vyvezla k Soulské věži, kde nás nahoře na rozhledně okamžitě upoutal nápis směřující nás k Bratislavě. Bohužel Praha tam nikde nebyla. Pokochali jsme se nočním Soulem a vydali se opět poznávat místní noční život. Tentokrát nás Honzík zatáhl do salza klubu, kde si pěkně zatancoval. Potom co zavřeli jsme se chtěli přesunout do dalšího taxíkem, ale cestou taxikář zjistil že mají zavřeno, tak jsme mu dali polovinu domluvené částky (20000 Wonů) a nechali se odvézt zpět. To jsme ještě nevěděli jak je zde taxi levné a jak moc jsme prodělali. Protože pak jsme šli pěšky domů a nakonec si vzali další taxík, který nás přišel už jen na 2500.

V neděli nás v Soulu čekala už jen cesta na letiště, tentokrát za světla tak jsme mohli obdivovat místní mrakodrapy a olympijský stadión. Po přeletu do Tokya jsme se s Honzíkem rozhodli nejet ještě do Nagojy, ale trochu si prohlédnout Tokyo, když už tu jsme. Hned před hlavním nádražím se před námi tyčily mrakodrapy a za chvíli jsme už byli u císařského paláce. Dovnitř se nemůže, protože tam stále pobývá císař, tak jsme si aspoň prošli park s trávníkem, který vypadal jak umělý a vyfotili se na místě kde tak činili všichni. Pak už se pomalu začalo smrákat a my, po krátké cestě metrem (které vypadá nekonečně dlouhé), jen tak bezcílně bloumali po Tokyu a o půl deváté nasedli na Šinkanzen, který nás za hodinu a čtyřicet minut dovezl do Nagoji.

Základy používání - práce s databázemi a vytváření tabulek

Základní používání phpMyAdmina je velmi jednoduché, ale protože je používán v internetovém prohlížeči, je také trochu odlišné od nativních aplikací. V tomto díle se podíváme podrobněji na práci s databázemi a vytváření tabulek.

Rohraní je opticky rozděleno na dvě části – levý sloupec, ve kterém je seznam databází a tabulek a některé ovládací prvky a zbývající pravá část, kde se odehrává veškerá manipulace s daty. Na první stránce můžeme provést některá nastavení, provádět administraci MySQL a také zde jsou odkazy na dokumentaci (která je jen v angličtině).

Můžeme zde vytvořit databázi (pokud pro to máme oprávnění), zobrazit informace o serveru a provést různá nastavení rozhraní. Ve starších verzích MySQL není možná volba znakových sad, protože to tyto verze nepodporovaly. Dále si zde můžeme zvolit jazyk (z 50 podporo­vaných) nebo nastavit jiný vzhled rozhraní (kromě dvou dodávaných se další dají stáhnout z  phpmyadmin.net ).

Pro základní prohlídku si v levém sloupci vybereme databázi, do které máme přístup (například databáze test) a zobrazí se přehled databáze . V ní si můžeme vytvořit tabulku zadáním jejího jména a počtu sloupců. Pokud máme povolené interní relace nebo pokud používáme úložiště, které relace podporuje nativně, můžeme po vytvoření tabulek nadefinovat vztahy mezi nimi. A to buď pomocí grafického návrháře nebo klasicky vybráním vztahů u jednotlivých tabulek.

Další operace, které můžeme s databází provádět jsou na samostatné stránce Úpravy . Přejmenování a kopírování databáze asi nepotřebuje podrobnější popis, stejně tak výchozí porovnávání pro nové tabulky. Při zapnutých rozšířených možnostech zde můžeme nastavit komentář k databázi a dole na stránce se objeví odkaz na editaci stránek PDF výstupu. Ale o tom se více dozvíte až někdy jindy.

Baseball - sport číslo jedna

Na to, že na každém rohu vidíme reklamu na místní Dragons, jsme si už zvykli. Dnes ovšem místní miláčci hráli zápas a tak kdo nemohl na stadión, vzal za vděk i podlahou v obchodním domě. Těm méně šťastným muselo stačit i místo za výlohou. Ale to nijak nemírnilo potřebu fandit a nadšení, které propuklo v okamžiku, kdy se některému z Dragons podařilo skórovat.

Více fotek z noční procházky je v mém albu.

Rozšířené možnosti phpMyAdmina

phpMyAdmin zpřístupňuje nejen funkce MySQL, ale nabízí i mnoho funkcí vlastní. Pro některé z nich je potřebná konfigurace a tu si dnes ukážeme.

Pokud žádné rozšířené funkce nemáme nastavené, phpMyAdmin nás varuje, jak můžete vidět na této stránce dole .

Po kliknutí na dotaz se dozvíme, že není v pořádku databáze pro ukládání těchto dat. phpMyAdmin používá pro ukládání nastavení pro některé funkce (například návrhář tabulek, relace mezi tabulkami, komentáře ke sloupcům, vytváření PDF souborů se strukturou databází a MIME transformace sloupců) vlastní databázi s několika tabulkami.

V případě že připravujeme instalaci pro více uživatelů není vhodné aby k těmto údajům měli přístup všichni uživatelé používající daný MySQL server. Proto vytvoříme nejdříve uživatele, který bude mít k příslušným údajům přístup. Pokud jsme jediným uživatelem, je možné tento krok vynechat. Přihlásíme se do phpMyAdmina jako root a vytvoříme uživatele pma, který bude mít přístup do příslušných tabulek, doporučuji použít SQL příkazy z dokumentace (pro starší verze MySQL je potřeba použít jiné příkazy, ty jsou také uvedeny v dokumentaci):

 
  GRANT USAGE ON mysql.* TO 'pma'@'localhost' IDENTIFIED BY 'heslo';
GRANT SELECT (
    Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv,
    Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv,
    File_priv, Grant_priv, References_priv, Index_priv, Alter_priv,
    Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv,
    Execute_priv, Repl_slave_priv, Repl_client_priv
    ) ON mysql.user TO 'pma'@'localhost';
GRANT SELECT ON mysql.db TO 'pma'@'localhost';
GRANT SELECT ON mysql.host TO 'pma'@'localhost';
GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv)
    ON mysql.tables_priv TO 'pma'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost';
 

Jméno a heslo vytvořeného uživatele uvedeme v konfiguračním souboru:

 
  $cfg['Servers'][$i]['controluser']   = 'pma';
$cfg['Servers'][$i]['controlpass']   = 'heslo';
 

Pro další funkce je potřeba někde ukládat data. Tyto jsou ukládány do tabulek jejichž jména musíme uvést v konfiguraci, pokud nám vyhovují názvy vybrané vývojáři (tabulky jsou vytvořeny v databázi phpmyadmin, uživatel se jmenuje pma), můžeme použít pro jejich vytvoření připravený skript scripts/create_ta­bles.sql (nebo scripts/create_ta­bles_mysql 4 _1_2+­.sql pro MySQL 4.1.2 a vyšší, v phpMyAdminovi 3.0 je jen create_tables.sql, který je pro všechny podporované verze MySQL). Přihlásíme se jako uživatel root, otevřeme stránku pro import , na ní zadáme jméno souboru a provedeme import. O těchto nově vytvořených tabulkách dáme phpMyAdminovi vědět v konfiguračním souboru:

 
  $cfg['Servers'][$i]['pmadb']         = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
$cfg['Servers'][$i]['relation']      = 'pma_relation';
$cfg['Servers'][$i]['table_info']    = 'pma_table_info';
$cfg['Servers'][$i]['table_coords']  = 'pma_table_coords';
$cfg['Servers'][$i]['pdf_pages']     = 'pma_pdf_pages';
$cfg['Servers'][$i]['column_info']   = 'pma_column_info';
$cfg['Servers'][$i]['history']       = 'pma_history';
 

Nyní by již mělo varování zmizet a můžeme používat mnoho dalších funkcí. Podrobnosti o nich budou rozebrány někdy příště.