MyEgo.cz - Radek Hulán webzine

MyEgo.cz

home foto blogy mywindows.cz kontakt

PHP problém s mail()

PHP 13.11.2004

Tedy, on to možná není ani tak problém s PHP, jako takový zajímavý problém (či bug?) skriptu. Podívejte se na tento kód:

$to = 'info@hulan.info';
$subject = 'New password requested';
$message = 'Hello Radek Hulan,'."\n".
	'You have requested to have a new password '."\n".
	'assigned to your account in the '."\n".
	'discussion forum at http://forum.blogcms.com/. '."\n".
	'Your new password is: abcdefgh';
$headers = 'From: BLOG:CMS '."\n".
	'Date: Sat, 13 Nov 2004 12:26:14 +0100'."\n".
	'MIME-Version: 1.0'."\n".
	'Content-transfer-encoding: 8bit'."\n".
	'X-Mailer: PunBB Mailer'."\n".
	'Content-Type: text/plain; charset=utf-8';

A nyní tento email pošleme:

mail($to, $subject, $message, $headers);

Vtip je v tom, že u mě na SUSE 9.1 s PHP 5.0.2 to email posílá, na xhost.cz s PHP 4.3.9 to email, rovněž posílá, ale na www.tojeono.cz s PHP 5.0.2 to email nepošle. Řešil jsem to s Ondřejem Svobodou asi hodinu, než nám to došlo, a přitom je to tak triviální…

A víte proč?

Fedora Core 3 - první zkušenosti

Linux 13.11.2004
Zůstávám u SUSE 9.1

Používám linuxovou distribuci SUSE 9.1, nicméně, před pár dny jsem neodolal, a stáhnul si 2.4 GB DVD ISO obraz nové Fedora Core 3. Fedora Core 3 má jednu zásadní výhodu - obsahuje ty nejnovější komponenty. A jednu zásadní nevýhodu - obsahuje ty nejnovější, a často málo otestované, někdy doslova vývojové, komponenty.

Fedora Core 3 je prostě taková testovací základna pro RedHat samotný, který je samozřejmě v releasech konzervativnější.

Instalace Fedora Core 3 probíhala zcela tradičně, podobá se instalaci Mandrake 10, a byla podstatně rychlejší než u SUSE 9.1. Aby taky ne, ono rozbalit pár stovek rpm balíčků na harddisk, to moc času nezabere.

Fedora Core 3 obsahuje:

  • kernel 2.6.9.1,
  • KDE 3.3.0 (zde by mohla mít verzi 3.3.1),
  • Gnome 2.8,
  • a například také Firefox 1.0 Preview Release a OpenOffice.org 1.1.2.

Tedy skutečně "horké věci".

Eurotel CDMA má novou formu F.U.P.

Technologie 11.11.2004

Včera večer jsem stahoval 2.4 GB instalační DVD ISO obraz Linuxové distribuce Fedora Core 3, přes Eurotel CDMA.

Download běžel ze třech FTP naráz, sice mírně pomaleji (cca 50 KB/s), ale šlo to. Předpokládal jsem, že ráno bude vše hotové. Nicméně, není, CDMA spojení sice drží, modem funguje, ale staženo je jen cca 1.5 GB dat, a zbytek se ke mě dostává úžasnou rychlostí 10 KB/s.

Eurotel na svém CDMA zjevně nezavedl jen omezení P2P sítí, ale zavádí normální F.U.P., kdy Vám po stažení určitého množství dat sníží rychlost i http a ftp přenosů na desetinu rychlosti původní, takže Vám CDMA jede na rychlosti GPRS nebo dial-upu.

Pokud si chcete kupovat CDMA, hodně dobře si to rozmyslete. Možná bude lepší, než nejistých 50-80 KB/s u CDMA (vzhledem k F.U.P.), vcelku jistých 20-30 KB/s u EDGE, pokud tedy i T-Mobile nezavede F.U.P.


PS: nejsem s touto negativní zkušeností sám, a není to poprvé… P2P nepoužívám, a omezení http a ftp přenosů je od Eurotelu mimořádně sprostá věc…

Bůh žehnej Americe…

Jihad

Byl jsem osobně v Turecku, “evropské” islámské zemi, projel jsem je celé, od západu, na východ, projel jsem autem celou Sýrii a Libanon, byl jsem v Saúdské Arábii a Kuvajtu.

A 95% lidí, které jsem tam potkal, jsou zcela normální lidé, žádní extremisté (tedy, pokud souhlasíte s tím, že totální diktatura islámu, v každém aspektu Vašeho života, je “normální”).

Přesto je mi jasné, že válka, kterou Bush / USA vedou proti terorismu, ať už je to v Afghánistánu, či Iráku, je nezbytně nutná.

V těchto zemích není problém těch 95% lidí, co chce klid a normální život, ale 5% příslušníků jihádu, kteří jsou od mladého věku trénováni k nenávisti ke komukoliv (včetně jiných, méně extrémních, zastánců islámu), s požadavkem na zničení, likvidaci, těchto lidí, co se s jihádem neztotožňují.

Podívejme se na pár arabských režimů blíže:

  • Saúdská Arábie – matka současných teroristů a nenávisti, přes překryv bohaté společnosti, živené ropou, se dostávají ven mladí fanatičtí lidé, kteří rádi nasadí svůj život pro jihád, něco jako mladí nacisté v Německu. Mimochodem, 15 z 19 teroristů z 9/11 bylo ze Saúdské Arábie. Relativní stabilita je zde jen kvůli ropě, a bohatství z ní plynoucího. Co ale bude za 15-20 let, až ropa dojde?
  • Egypt – silné kořeny Islámu, chudoba, a z ní plynoucí populistický islám jako řešení bezprostředních problémů (a z toho plynoucí terorismus - známé vraždy turistů, které potom dále ekonomicky likvidují zemi, a podporují stále větší extremismus).
  • Irák – Saddam Hussein, netřeba představovat, popravy stovek tisíc lidí, USA zde zajistili svobodu pro celý stát, ale i přesto je zde silný odpor teroristů, viz aktuální teroristické akce proti USA ve Fallúdže.
  • Afghánistán – domovská základna milionáře Osama Bin Ládena / Talibanu / Al Kaida, existuje zde řada extremistických náboženských skupin, specializujících se na organizace vražd a teroristických akcí po celém světě. USA zde zajistili mnohem bezpečnější situaci, ale zatím zdaleka ještě ne stabilitu.
  • Alžírsko – panuje zde brutální občanská válka, řada lidí zde oslavuje 11. září 2001, další silná základna terorismu.

Bohužel, tato situace se týká i České republiky. Náboženské vraždy v nedalekém Holandsku jsou toto jen příkladem. Cílem teroristů je destabilizace. S terorismem se, bohužel, nedá bojovat jinak, než zbraní.

Zítra ráno se probudím a budu instalovat…

Linux 10.11.2004
Fedora Core 3

Fedora Core 3, jedna z nejlepších a nejmodernějších Linuxových distribucí, DVD ISO má 2.4GB ;-)

PHP: convert named entities to decimal Unicode

PHP 10.11.2004

This script was written to overcome validation problems with RSS 0.9/1.0/2.0 and Atom 0.3 feeds which may not contain (X)HTML entities, otherwise widely used. Usage is very simple, function entity_to_decimal_value() will return a Unicode encoded string, with entities it does not recognise replaced for spaces.

There are also other two useful functions, for converting (X)HTML entities back to their original representation (makes &lt; again <), and for Unicode decoding of an URL string.

/* convert HTML entities back */
function unhtmlentities ($string)  {
  $trans_tbl = get_html_translation_table (HTML_ENTITIES);
  $trans_tbl = array_flip ($trans_tbl);
  return strtr ($string, $trans_tbl);
}

/* decodes URL into Unicode string */
function unicode_decode($txt) {
  $txt = ereg_replace('%u0([[:alnum:]]{3})', '&#x\1;',$txt);
  $txt = ereg_replace('%([[:alnum:]]{2})', '&#x\1;',$txt);
  return urldecode($txt);
}

Firefox 1.0 je ve finální verzi

Technologie 10.11.2004

Byla vydána finální verze Firefoxu 1.0, a to včetně její české verze. Zareagoval na to i google, můžete totiž nově hledat na google.com/firefox :-)

Firefox je nejlepší open-source browser, určený pro masovou veřejnost. O tom, jak si dokonale nakonfigurovat Firefox, jsem psal již dříve.

O tom, jak si dokonale nakonfigurovat Operu 7.60, nejlepší (komerční) browser pro profesionály, si můžete přečíst zde.

GeSHi - obarvěte si svoje zdrojáky

PHP 09.11.2004

Včera v noci, poté, co jedna milá kamarádka odešla domů k rodičům (musí zítra do školy), jsem se náhodou dostal ve dvě hodiny ráno na web GeSHi. GeSHi je prima věc, barevná. GeSHi umí obarvit automaticky Vaše zdrojáky v actionscript, ada, apache, asm, asp, bash, c, caddcl, cadlisp, cpp, css, delphi, geshi, html4strict, java, javascript, lisp, lua, nsis, oobas, pascal, perl, php-brief, php, python, qbasic, sql, vb, visualfoxpro, xml.

A ona GeSHi nejenom barví, ale rovněž, pokud ji k tomu mírně přinutíte, udělá třeba pro PHP funkce automaticky odkazy na manuál PHP. Dokonalé. Stejně se dá přinutit i k odkazům na HTML či CSS.

Použití je potom triviálně jednoduché, místo <pre> zadáte <pre language>.

Napsal jsem si k tomu samozřejmě plugin pro BLOG:CMS, pod názvem NP_GeSHi, funguje dvěma způsoby, buď při ukládání článku (parse-and-save), nebo online (realtime), používám přitom tu nej-geniálnější funkci PHP, tedy preg_replace_callback.

include('geshi.php');

class NP_Geshi extends NucleusPlugin {

function parseString(&$content) {
  $keys=array('body','more');
  foreach ($keys as $key)
  $content[$key] = 
   preg_replace_callback (
	'/<pre\s(.*?)>(.*?)<\/pre>/si',
	array(&$this,'replaceString'),
	$content[$key] );
}

function replaceString($r){
  global $DIR_PLUGINS;
  $geshi = new GeSHi($r[2],$r[1],$DIR_PLUGINS."geshi/");
  $geshi->enable_classes();
  $geshi->set_header_type(GESHI_HEADER_PRE);
  $geshi->set_overall_class('code');
  $geshi->set_link_target($this->_linktarget);
  return $geshi->parse_code();
}

} // NP_Geshi

Sub-kategorie v XHTML a JS

Webdesign, CMS 07.11.2004

Doplňoval jsem včera sub-kategorie do BLOG:CMS, kvůli zpřehlednění větších webů, a narazil jsem na problém, jak řešit reprezentaci a formátování sub-kategorií v XHTML, a zároveň skrývání/odkrývání skupin v JavaScriptu.

Skoro automatické řešení je použít zde tagy ul, li, nicméně, nakonec se mi jako sémanticky správnější zdálo použití dl, dt, dd, navíc obaleno jedním div, kvůli formátování a XHTML validitě (a MSIE).

Tag dl se zde používá jako formátovací "obal" pro CSS pro skupinu, tag dt je název skupiny, a tagy dd jsou sub-kategorie zařazené v dané skupině. Vypadá to celé nějak takto:

Skupina 2
Kategorie 4
Kategorie 5

Je to řešení sémantické, XHTML validní, jednoduše nastylovatelné, a poskytující prostor i pro JavaScriptové skrývání/odkrývání skupin kategorií, třeba tímto jednoduchým skriptem:

// strom je zobrazen
var categoryhidden = false;
// schovat strom
function categoryfold(){
categoryhidden = true;
 var i=1;
 var ele;
 while (ele=document.getElementById('group'+i++)) 
  ele.style.display='none';
}
// rozbalit strom
function categoryexpand(){
 categoryhidden=false;
 var i=1;
 var ele;
 while (ele=document.getElementById('group'+i++)) 
  ele.style.display='block';
}
// prepnout strom
function categorytoogle(){
 if (categoryhidden)
  categoryexpand();
 else
  categoryfold();
}
// zobrazit jednu kategorii
function categoryswitch(j){
 if (categoryhidden) {
  categoryexpand();
  return;
 }
 var i=1;
 var ele;
 while (ele=document.getElementById('subcat'+i))
  if (i++==j) 
   ele.style.display='block'; 
  else 
   ele.style.display='none';
 categoryhidden=true;
}

Celé to řešení je vtipné v tom, že funguje na libovolné množství kategorií, ve chvíli kdy ele=document.getElementById('group'+i++) vrátí false, je jasné, že se jedná o poslední skupinu kategorií.

Řešení je implementováno v nejnovější verzi BLOG:CMS, jako plugin NP_SubCategories.php.

Je škoda, že zaostalý MSIE nepodporuje v CSS konstrukce následujícího typu, podobné věci by šlo stylovat v CSS mnohem lépe, bez divů, a rovněž zpracovávat bez hromady id identifikátorů pro JavaScript, jen pomocí DOMu…

div#subcat dl dt>a{color: black; display: block;} 

Bajka o zasviněném okně

Představte si, že si v bazaru koupíte slušné a zachovalé auto. Máte kupní smlouvu, všechno je skoro růžové. Auto není sice žádný zázrak, ale do práce s ním prostě jezdit musíte. Je podzim, venku prší, je bláto, a vy máte za chvíli tak špinavé okno, že přes něj nevidíte na cestu. Vystoupíte a jdete si ho umýt.

A v tu chvíli se objeví původní majitel a řekne vám, že ho umýt nesmíte. Když mu řeknete, že kupní smlouva žádnou podobnou restrikci neobsahovala, tak vám ten chytrák odpoví, že ji dopsal právě teď na lísteček na nákup pro svou manželku - a že prostě musíte poslechnout, protože je silnější, má rudého kamaráda, a společně vám jinak namlátí.

Že vám to připomíná aktuální zákaz transformace nemocnic, dopsaný do zákona o regulaci hluku?

Máte pravdu, je to stejně absurdní. Tak mějte rozum, a vyberte si příště auto od jiného majitele.