home *** CD-ROM | disk | FTP | other *** search
/ PC World 2004 December / PCWorld_2004-12_cd.bin / novinky / Interval / clanek04.htm < prev    next >
Encoding:
Extensible Markup Language  |  2004-10-31  |  19.9 KB  |  202 lines

  1. <?xml version='1.0' encoding='windows-1250'?>
  2. <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
  3. <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='cs' lang='cs'>
  4. <head>
  5. <meta http-equiv='Content-Type' content='text/html; charset=windows-1250' />
  6. <meta http-equiv='Content-language' content='cs' />
  7. <meta http-equiv='Cache-control' content='no-cache' />
  8. <meta http-equiv='Pragma' content='no-cache' />
  9. <meta http-equiv='Expires' content='-1' />
  10. <meta name='robots' content='index,follow' />
  11. <meta name='googlebot' content='index,follow,snippet,noarchive' />
  12. <meta name='description' content='Interval.cz - Internetov² magazφn o webdesignu, v²voji webov²ch aplikacφ a e-komerci. VÜe podstatnΘ o technologiφch XHTML, HTML, CSS, DHTML, JavaScript, XML, .NET, ASP, PHP, Java, J2ME, SQL, WAP...' />
  13. <meta name='keywords' content='Interval' />
  14. <meta name='ICBM' content='49.1915, 16.626' />
  15. <meta name='DC.Title' content='Interval.cz' />
  16. <meta name='DC.Identifier' content='http://interval.cz' />
  17. <meta name='DC.Language' content='cs' />
  18. <meta http-equiv='pics-label' content='(pics-1.1 "http://www.icra.org/ratingsv02.html" comment "ICRAonline EN v2.0" l gen true for "http://interval.cz" r (nz 1 vz 1 lz 1 oz 1 cz 1) "http://www.rsac.org/ratingsv01.html" l gen true for "http://interval.cz" r (n 0 s 0 v 0 l 0))' />
  19. <meta http-equiv='imagetoolbar' content='no' />
  20. <meta http-equiv='MSThemeCompatible' content='no' />
  21. <meta name='MSSmartTagsPreventParsing' content='true' />
  22. <link rel='shortcut icon' type='image/x-icon' href='favicon.ico' />
  23. <link rel='alternate' type='application/rss+xml' title='RSS Interval.cz' href='http://interval.cz/__rss/rss.asp' />
  24. <link rel='home' href='http://interval.cz' />
  25. <link rel='search' href='http://interval.cz/search_ex.asp' />
  26. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/html4.css' />
  27. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/basic_all.css' />
  28. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/homepage_all.css' />
  29. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/articles_all.css' />
  30. <link rel='stylesheet' type='text/css' media='print' href='__services/styles/articles_print.css' />
  31. <title>Interval.cz - webdesign a e-komerce denn∞</title>
  32. </head>
  33. <body class='interval interval-articles'>
  34. <div id='page-header'><div id='interval-logo'><h1 title='Interval.cz - denn∞ o tvorb∞ webu a e-komerci (logo & index link)'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz'>Interval.cz<span></span></a></h1></div><div id='advertising-page-header'></div><div class='page-maker'> </div></div>
  35. <div id='page-topmenu'><h2 class='textversion'>Navigace</h2><div id='page-mainmenu'><h3 class='textversion'>Hlavnφ menu</h3><ul><li class='first selected'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz'>Titulnφ strana</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=14'>Webdesign</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=15'>V²voj aplikacφ</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=18'>E-komerce</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=17'>Nßstroje</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=16'>Magazφn</a></li><li class='right selected'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.inshop.cz'>Knihkupectvφ</a></li><li class='right'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interforum.interval.cz'>Interforum</a></li></ul></div><div id='page-mainmenu-maker'> </div></div>
  36. <div id='page-body'><div id='page-left'><div id='article'>
  37.  
  38.  
  39. <h2>J2ME pro pokroΦilΘ - optimalizace zdrojovΘho k≤du s profilΘrem</h2>
  40. <p id='prepend'>V jednom z p°edchozφch Φlßnk∙ jsme si teoreticky rozebrali zßkladnφ techniky, kterΘ se v J2ME b∞₧n∞ pou₧φvajφ pro optimalizaci k≤du. Pokud chceme jφt jeÜt∞ dßle, je t°eba pou₧φt n∞kter² ze specializovan²ch nßstroj∙, kter² zjistφ, jak jsou zkoumanΘ Φßsti k≤du nßroΦnΘ na provedenφ. Jeden takov² nßstroj je souΦßstφ Wireless Tooliktu a my si zde ukß₧eme, jak se s nφm pracuje.</p>
  41.  
  42. <h3>Kdy optimalizovat?</h3>
  43. <p>JeÜt∞ ne₧ se vrhneme na optimalizaci, je t°eba si polo₧it otßzku, zda mß dalÜφ optimalizace smysl. V zßkladu m∙₧eme rozd∞lit nßroΦn∞jÜφ aplikace, p°edevÜφm hry, do dvou skupin, na <em>Input-Drive</em> a <em>Real-Time</em>. Do prvnφ zmφn∞nΘ skupiny pat°φ hry, kterΘ jsou zalo₧eny na vstupu u₧ivatele, typick²m p°φkladem jsou karetnφ hry nebo Üachy. Zde p°φliÜ nezßle₧φ na rychlosti, proto dalÜφ optimalizace nemß smysl. Zajφmav∞jÜφ skupinou jsou ovÜem realtime hry, kterΘ jsou typickΘ akcφ na displeji telefonu. Od t∞chto her oΦekßvßme, ₧e budou rychle reagovat na vstup od u₧ivatele, a budou mφt dostateΦn∞ vysok² framerate (FPS) pro plynulou animaci. Typick²m p°φkladem jsou arkßdy, akΦnφ hry a realtime strategie.</p>
  44. <p>P°i optimalizaci je t°eba si ale uv∞domit, ₧e existujφ d∙vody proΦ neoptimalizovat:</p>
  45.  
  46. <div class='list'>
  47. <ul>
  48. <li>optimalizacφ m∙₧eme do k≤du zanΘst chyby</li>
  49. <li>vynalo₧enΘ ·silφ nemusφ odpovφdat v²sledku</li>
  50. <li>n∞kterΘ techniky mohou snφ₧it mo₧nost portace na jinou platformu</li>
  51. <li>je to zdlouhavß a mravenΦφ prßce</li>
  52. </ul>
  53. </div>
  54.  
  55. <h3>ProfilΘr</h3>
  56. <p>Jak ji₧ bylo °eΦeno v ·vodu Φlßnku, souΦßstφ KToolbaru je i nßstroj naz²van² ProfilΘr. Spus¥te KToolbar, zvolte "edit/preference" a vyberte kartu "monitoring". Najd∞te pole "Enable profiling" a zaÜkrtn∞te jej. Tφm mßte zajiÜt∞no, ₧e p°i ka₧dΘm spuÜt∞nφ naÜφ aplikace bude spuÜt∞n i profilΘr.</p>
  57. <p>Ne₧ se pustφte dßle, stßhn∞te si nejprve <a href='podklady/prochazka/991/src.zip'>originßlnφ zdrojovΘ k≤dy</a> testovacφ aplikace a d∙kladn∞ si je prostudujte. Ze zdrojov²ch k≤du je vid∞t, ₧e funkΦnφ p°φnos je nulov², ale pro naÜe experimenty to nenφ podstatnΘ. Vytvo°te si nov² projekt pomocφ KToolbaru, jako default za°φzenφ vyberte "DefaultGrayPhone" a spus¥te aplikaci. Prove∩te test a zav°ete aplikaci. Pokud jste sprßvn∞ nastavili pou₧itφ profilΘru, objevφ se vßm podobnΘ okno s v²sledky.</p>
  58.  
  59. <div class='image'>
  60. <img src='podklady/prochazka/991/profiler-small.png' alt='Okno profilΘru s nam∞°en²mi daty' title='Okno profilΘru s nam∞°en²mi daty' />
  61. <br /><span class='comment'>Okno profilΘru s nam∞°en²mi daty (<a href='podklady/prochazka/991/profiler.png'>plnß velikost, cca 11 kB</a>)</span>
  62. </div>
  63.  
  64. <p>V levΘ Φßsti okna se nachßzφ stromovß struktura metod, tak, jak jsou navzßjem volßny. V pravΘ Φßsti jsou nam∞°enΘ v²sledky. Aby se nßm s nimi lΘpe pracovalo, v²sledky si se°adφme. Vyberte z menu "View/Sort By/%Cycles". Jak vidφte, na prvnφch t°ech mφstech se umφstila metoda pro vykreslenφ textu na displej, kterß je souΦßsti metody <code>paint</code> (54 %), metoda <code>doModel</code> (12 %) a <code>work</code> (9 %). Procenta v zßvorce vyjad°ujφ nßroΦnost. Berte tato Φφsla s rezervou, proto₧e se m∞nφ v zßvislosti na rychlosti PC. My je zde pou₧ijeme jako referenΦnφ hodnoty, se kter²mi budeme porovnßvat dalÜφ v²sledky. Chceme-li tedy zrychlit naÜi aplikaci, musφme se zam∞°it na tyto t°i metody.</p>
  65.  
  66. <h3>Optimalizace</h3>
  67. <p>Optimalizaci rozd∞lφme na dv∞ Φßsti - optimalizace modelu a optimalizace vykreslovßnφ.</p>
  68.  
  69. <h4>Optimalizace vykreslovßnφ</h4>
  70. <p>Vykreslovßnφ mß na sv∞domφ metoda paint, kterß je definovßna takto:</p>
  71.  
  72. <div class='sample'>
  73. public void paint(Graphics g) {
  74. <br />  g.setColor(BACKGROUND);
  75. <br />  g.fillRect(0, 0, getWidth(), getHeight());
  76. <br />  g.setColor(FOREGROUND);
  77. <br />  g.setFont(Font.getFont(Font.FACE_PROPORTIONAL,
  78. <br />        Font.STYLE_BOLD | Font.STYLE_ITALIC, Font.SIZE_SMALL));
  79. <br />
  80. <br />  for (int i = 0; i < DRAWS; i++) {
  81. <br />    g.drawString(frameTime + " ms per frame",
  82. <br />        getRandom(getWidth()), getRandom(getHeight()),
  83. <br />        Graphics.TOP | Graphics.HCENTER);
  84. <br />  }
  85. <br />}
  86. </div>
  87.  
  88. <p>Podφvßme-li se na k≤d tΘto metody, zjistφme, ₧e smyΦka obsahuje Φßsti, kterΘ m∙₧eme napsat jako <code>static final</code>. Jsou to tyto Φßsti k≤du:</p>
  89.  
  90. <div class='list'>
  91. <ul>
  92. <li>ve smyΦce se stßle volajφ metody pro zjiÜt∞nφ velikosti displeje, kter² mß konstantnφ rozm∞ry</li>
  93. <li>neustßle se zφskßvß tent²₧ objekt fontu</li>
  94. <li>kotva (?; anchor) umφst∞nφ textu se nem∞nφ</li>
  95. </ul>
  96. </div>
  97.  
  98. <p>DalÜφm kandidßtem na optimalizaci je zφskßnφ nßhodnΘho Φφsla polohy textu na displeji. LepÜφ je, pokud nßm to pam∞¥ dovolφ, p°edpoΦφtat hodnoty do tabulek a pak z nich hodnoty jen vybφrat. P°φstup do pole je p°eci jen rychlejÜφ, ne₧ neustßlΘ zφskßvßnφ hodnot.</p>
  99. <p>Nejv∞tÜφ vrßsky nßm ale d∞lß vykreslovßnφ vlastnφho textu. Z p°edchozφho Φlßnku je jasnΘ, ₧e je t°eba pou₧φt <code>StringBuffer</code>. Jeho napln∞nφ provedeme zavedenφm °et∞zcovΘ konstanty <samp>MESSAGE</samp> s textem, kter² budeme vykreslovat. Abychom si to trochu ulehΦili, budeme text (FPS) p°idßvat na konec tΘto konstanty. Tφm se vyhneme neustßlΘmu vytvß°enφ nebo ne zrovna jednoduchΘmu zφskßnφ v²slednΘho textu. Proto₧e se prvnφ Φßst textu nem∞nφ, postaΦφ, kdy₧ odstranφme starou Φßst a nahradφme ji novou.</p>
  100. <p>P°edchozφmi optimalizacemi jsme se sice zbavili neustßlΘho vytvß°enφ objekt∙, ale jeÜt∞ to nenφ ono. Proto obsah StringBufferu vykreslφme do externφho obrßzku a ten pak p°eneseme na displej. Abychom nem∞nili obsah obrßzku neustßle, vlo₧φme jeÜt∞ podmφnku, kterß nßm zajistφ, ₧e se obrßzek zm∞nφ, jen kdy₧ se zm∞nφ hodnota FPS.</p>
  101. <p>Metoda <code>paint</code> po optimalizaci:</p>
  102.  
  103. <div class='sample'>
  104. public void paint(Graphics g) {
  105. <br />  // prepare string
  106. <br />  if (oldTime != frameTime) {
  107. <br />    buffer.delete(messageLength, buffer.length());
  108. <br />    buffer.append(frameTime).toString();
  109. <br />    messageGraphics.setColor(BACKGROUND);
  110. <br />    messageGraphics.fillRect(0, 0, MAX_STRING_WIDTH, MAX_STRING_HEIGHT);
  111. <br />    messageGraphics.setColor(FOREGROUND);
  112. <br />    messageGraphics.drawString(buffer.toString(), 0, 0, MESSAGE_ANCHOR);
  113. <br />  }
  114. <br />
  115. <br />  g.setColor(BACKGROUND);
  116. <br />  g.fillRect(0, 0, WIDTH, HEIGHT);
  117. <br />
  118. <br />  for (int i = DRAWS; --i >= 0; i++) {
  119. <br />    rnd = (rnd + 1) % MAX_RANDOM;
  120. <br />    g.drawImage(messageImage, randomX[rnd], randomY[rnd], TEXT_ANCHOR);
  121. <br />  }
  122. <br />
  123. <br />  oldTime = frameTime;
  124. <br />}
  125. </div>
  126.  
  127. <p>Provedeme-li nynφ m∞°enφ, zjistφme, ₧e nßroΦnost vykreslovßnφ klesla p°ibli₧n∞ na polovinu, tedy 22 %. O to vφce se ale projevilo volßnφ metod <code>work()</code> (15 %) a <code>doModel()</code> (11 %).</p>
  128.  
  129. <h4>Optimalizace modelu</h4>
  130. <p>Model je zalo₧en na t°ech metodßch <code>work()</code>, <code>doModel(int n)</code> a <code>mathOperation(int a, int b, int c)</code>. Metoda <code>work()</code> volß ostatnφ dv∞. Nejprve bychom se m∞li zbavit globßlnφch prom∞nn²ch tφm, ₧e z nich vytvo°φme lokßlnφ prom∞nnΘ. Dßle vidφme, ₧e volßnφ metody <code>doModel</code> lze p°enΘst do t∞la prvnφ smyΦky.</p>
  131. <p>P°i psanφ k≤du se obvykle sna₧φme, aby se Φßsti neopakovaly. Vytvo°φme tedy metodu a tu pak volßme z jin²ch Φßstφ k≤du. V kritick²ch Φßstech je ale volßnφ metody pomalΘ a je lepÜφ (pokud je to mo₧nΘ) p°enΘst jejφ t∞lo p°φmo do kritickΘho k≤du. V naÜem p°φpad∞ to je metoda <code>mathOperation</code>. NßÜ p°φpad nßm dßle umo₧≥uje p°epsat smyΦky tak, aby se provßd∞lo testovßnφ na nulu.</p>
  132. <p>DalÜφm nezanedbateln²m faktorem je i modifikßtor metody. P°esto₧e jsou metody <code>work</code> a <code>doModel</code> takzvan∞ <em>synchronized</em>, m∙₧eme tento modifikßtor odstranit, proto₧e neexistuje nikdo jin² ne₧ my, kdo bude tuto metodu volat. Zde je seznam modifikßtor∙, se°azen²ch od nejpomalejÜφho k nejrychlejÜφmu:</p>
  133.  
  134. <div class='list'>
  135. <ul>
  136. <li>synchronized</li>
  137. <li>interface</li>
  138. <li>normßlnφ volßnφ</li>
  139. <li>final</li>
  140. <li>static</li>
  141. </ul>
  142. </div>
  143.  
  144. <p>Metodu <code>work</code> m∙₧eme jeÜt∞ optimalizovat tφm, ₧e rozepφÜeme vn∞jÜφ smyΦku, kterß je tvo°ena osmi cykly. I kdy₧ se m∙₧e zdßt, ₧e je to mrhßnφ mφstem, je t°eba si uv∞domit, ₧e v²sledn² k≤d se komprimuje a opakovanΘ Φßsti se komprimujφ zvlßÜ¥ dob°e.</p>
  145.  
  146. <h3>V²sledky</h3>
  147. <p>Stßhn∞te si <a href='podklady/prochazka/991/src_optimized.zip'>modifikovanΘ zdrojovΘ k≤dy</a> a porovnejte si je s p∙vodnφmi. Otestujeme-li p∙vodnφ k≤d na reßlnΘm za°φzenφ (pou₧il jsem SE T610, firmware R3C002), zφskßme v²sledek p°ibli₧n∞ 12 405, po optimalizaci je v²sledek 5 920. Co₧ je o vφce ne₧ polovinu lepÜφ. N∞kolik obecn²ch rad pro optimalizaci:</p>
  148.  
  149. <div class='list'>
  150. <ul>
  151. <li>Pou₧φvejte profilΘr, kter² vßm ukß₧e, kde optimalizovat.</li>
  152. <li>Zva₧te pou₧itφ modifikßtoru metod.</li>
  153. <li>Pou₧φvejte tabulky s p°edpoΦφtan²mi hodnotami.</li>
  154. <li>Omezte volßnφ metod.</li>
  155. <li>Sni₧te poΦet parametr∙ p°edßvan²ch metodßm.</li>
  156. <li>Pou₧φvejte porovnßvßnφ na nulu.</li>
  157. <li>Pou₧φvejte <code>setClip()</code> metodu pro omezenφ p°ekreslovanΘ oblasti.</li>
  158. <li>Sna₧te se vylepÜit sv∙j algoritmus.</li>
  159. <li>Pou₧φvejte malΘ hodnoty konstant u p°φkazu <code>switch</code>.</li>
  160. </ul>
  161. </div>
  162.  
  163. <p>Jak vidφte, i kdy₧ je optimalizace n∞kdy nßroΦnß, je to i zßbava. Ale p°esto neoptimalizujte k≤d hned od zaΦßtku. Nejprve se zam∞°te na funkΦnost a pak provßd∞jte optimalizace. Je mo₧nΘ, ₧e n∞kterΘ metody p°epφÜete i n∞kolikrßt, ale v²sledek bude urΦit∞ stßt za to. Hodn∞ zdaru p°i optimalizaci.</p><div class='refer'><h3><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/serial.asp?serial=36' title='p°ehled Φlßnk∙ vΦetn∞ anotacφ'>J2ME pro pokroΦilΘ</a></h3><p>Pokud to myslφte s Java 2 MicroEdition opravdu vß₧n∞, jist∞ ocenφte tento p°ehled ne zcela obligßtnφch programovacφch technik a postup∙. ╚lßnky na sebe sice p°φmo nenavazujφ, zato zvolenΘ tΘma zkoumajφ opravdu do hloubky. Tato sΘrie Φlßnk∙ dosud nebyla ukonΦena!</p><ul><li><strong>J2ME pro pokroΦilΘ - optimalizace zdrojovΘho k≤du s profilΘrem</strong> (prßv∞ Φtete)</li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3162'>J2ME pro pokroΦilΘ - znovu J2ME a Ant</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2853'>J2ME pro pokroΦilΘ - XML</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2409'>J2ME pro pokroΦilΘ - J2ME a Ant</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2377'>J2ME pro pokroΦilΘ - logovßnφ</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=2281'>J2ME pro pokroΦilΘ - optimalizace zdrojovΘho k≤du</a></li></ul></div>
  164.  
  165. <div id='article-author'>
  166. <a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/autor.asp?author=189'>Prochßzka, Ji°φ</a> (5. 10. 2004)
  167.  
  168. </div>
  169.  
  170.  
  171. </div></div>
  172. <div id='page-right'><h2 class='textversion'>Prav² sloupek</h2>
  173. <div id='search'><h3 class='textversion'>Vyhledßvßnφ</h3><form method='get' action='http://interval.cz/search.asp'><div><input type='text' name='hledej' class='text' /><input type='submit' class='submit' value='Najdi!' /></div></form><div><a href='http://interval.cz/search_ex.asp'>RozÜφ°enΘ vyhledßvßnφ</a></div></div>
  174.  
  175.  
  176.  
  177. <div class='page-right-box book'>
  178.     <h3>Kni₧nφ novinka</h3>
  179.     <div class='page-right-box-in'>
  180.         <div class='book-top'>
  181.             <h4><a href='http://interval.cz/__redirect/redirect.asp?what=interval_booknews&url=http://interval.inshop.cz/inshop/scripts/detail.asp?ItemID=274'>phpMyAdmin - efektivnφ sprßva MySQL</a></h4>
  182.         </div>
  183.         <div class='image'>
  184.             <img src='podklady/knihy/image.jpg' alt='obßlka' title='obßlka' /></a>
  185.         </div>
  186.         <div class='book-bottom'>Cena: <span class='book-price-old'>230 KΦ</span> <span class='book-price-new'>207 KΦ</span></div>
  187.     </div>
  188. </div>
  189.  
  190.  
  191.  
  192. <div class='page-right-box reading'><h3 title='NejΦten∞jÜφ Φlßnky za poslednφch 14 dn∙'>NejΦten∞jÜφ</h3><div class='page-right-box-in'><ul><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3619'>PφÜeme pro web - kv∞tinov² p°iklad</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3622'>Odstra≥te bariΘry svΘho webu - co novΘho po dvou letech</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3633'>PSPad - soubory a projekty</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3634'>Kritika webu - principy a doporuΦenφ</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3618'>phpMyAdmin - efektivnφ sprßva MySQL</a></li></ul></div></div><div class='page-right-box cauldron'><h3 title='Nejdiskutovan∞jÜφ Φlßnky za poslednφch 21 dn∙'>Diskuznφ kotel</h3><div class='page-right-box-in'><ul><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3600' title='(314 komentß°∙)'>ProΦ nepou₧φvßm XHTML</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3609' title='(131 komentß°∙)'>ProΦ pou₧φvßm XHTML</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3636' title='(83 komentß°∙)'>H°φchy pro ÜφlenΘho korektora - v²jimky, standardy a data</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3622' title='(67 komentß°∙)'>Odstra≥te bariΘry svΘho webu - co novΘho po dvou letech</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3619' title='(42 komentß°∙)'>PφÜeme pro web - kv∞tinov² p°iklad</a></li></ul></div></div>
  193.  
  194.  
  195.  
  196. <div class='page-right-box emailserv'><h3>Email servis</h3><div class='page-right-box-in'><form action='prihlaseni.asp' method='post'><div class='shell'><input class='text' type='text' name='adresa' /></div><div class='shell'><input class='radio' type='radio' value='1' name='co' checked='checked' />T²dennφ p°ehled Φlßnk∙</div><div class='shell'><input class='radio' type='radio' value='2' name='co' />HELP konference</div><div class='shell'><input class='submit' type='submit' value='P°ihlßsit' /></div></form></div></div>
  197. </div>
  198. <div class='page-maker'> </div><div class='page-maker-white'> </div></div>
  199. <div id='page-foot'><div id='page-foot-menu'><a href='http://interval.cz/reklama.asp'>Inzerce na Interval.cz</a> | <a href='http://interval.cz/redakce.asp'>Redakce Interval.cz</a> | <a href='http://interval.cz/autori.asp'>Hledßme novΘ autory</a></div><div id='issn'>ISSN 1212-8651</div><div id='page-foot-zoner'>© Zoner software, s.r.o., vÜechna prßva vyhrazena, tento server dodr₧uje <a href='http://interval.cz/privacy.asp'>prßvnφ p°edpisy</a>o ochran∞ osobnφch ·daj∙.</div></div>
  200. </body>
  201. </html>
  202.