Michal Čihař - Archive for Jan. 1, 2007

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.

Gammu stable version 1.15.0

Here comes new Gammu version - 1.15.0. This time it is really short after 1.14.0, but SMS reading error in that did not give me other choice. Compared to 1.14.90 there is single change:

  • Better parse vCard version 3 (bug #434).

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

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:

Lets automate the work

Fixing bugs in code and committing it to VCS usually also means that you need to interact somehow with BTS you use to let it know that the bug has been fixed. This is manual work which could be done by some clever commit scripts, right? All what is needed is just spend some time to set it up.

Most of my development currently goes to Gammu/Wammu which uses own Mantis bug tracker. It is already a bit prepared for integration with VCS, but I never found their documentation sufficient. Fortunately somebody wrote tutorial on integrating Mantis and Subversion, which made it quite easy to set up. All what was needed was to put little commit hook into SVN.

Now the logical step was to make it also for Debian packages. A bit of Googling revealed discussion on debian-devel. Unfortunately no example for SVN, but ripping out needed things from Manoj's script for Arch was quite easy and I made my own commit hook. While looking at this, I also found wonderful tool called debcommit, which commits changes to Debian package using changelog entries as commit message. I still wonder how many useful tools are hidden to me.

The only thing I don't know is why Google didn't show me yesterday svnlog, which seems to have support for Debian BTS out of the box. Maybe I just entered slightly different keywords than today when trying to find the mentioned thread on debian-devel.

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 .

Gammu test version 1.14.90

Okay, I messed it up. Recently released 1.14.0 still had some artefacts from SMS handling cleanup and it should be fixed now. Besides this, experimental (not tested) support for OBEX on Siemens phones has been added and Motorola users should be finally able to get their messages. Full list of changes:

  • Configurable MySQL socket path.
  • More extensive SMS PDU parser tests.
  • Experimental support for OBEX in Siemens.
  • Support for listing messages using CMGL (bug #408).
  • Parse T630 reply on CPBR (bug #420).
  • Fix buffer overflows in PDU decoder.
  • Properly catch invalid PDU data received from phone.
  • Handle more OBEX error codes.
  • Handle vCards from Yahoo and Evolution (bug #424).

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

I will try to stabilise to 1.15.0 as soon as possible, what effectively means feature freeze from now, so this testing series should be shorter than usual.

Real address in bug tracker makes sense!

Today, when walking through some Wammu/Gammu bugs, I came to conclusion that the spam changed some people to behave insane. The email field in bug tracker is there to allow developer to contact you, for example when he makes a fix for issue you reported and wants you to test it. Entering addresses as ones at TrashMail which will vanish soon (the bug I'm talking about is two days old, what I feel is good enough reaction time from my side), will not help anybody.

Thank you firebird76 (whatever your real name is) for realizing how people are stupid.

PS: I use Mantis bug tracker, which I believe does not expose email addresses to anyone besides privileged users.

Wammu 0.24

I just released version 0.24 of Wammu. This release brings improvements in device searching, support for notification on incoming call (you need python-dbus for this) and various minor GUI improvements. Full list of changes:

  • Notifies user about incoming calls using D-Bus.
  • Remember default type of created entry (eg. phone/SIM memory).
  • Newly created entries contain some reasonable fields by default.
  • Fixed validation of editor fields.
  • Improvements in guided wizard to make it easier to use.
  • Clever searching over Bluetooth based on manufacturer.
  • Searching can be really limited to some connection types.

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

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