<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><channel><title>No One Live Forever</title><description>I like sharing information about daily issue, because everyone will end. So, perhaps this info be useful for others.</description><managingEditor>noreply@blogger.com (minx)</managingEditor><pubDate>Fri, 24 Jul 2026 14:06:11 +0800</pubDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">16</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">25</openSearch:itemsPerPage><link>http://budistira.blogspot.com/</link><language>en-us</language><itunes:explicit>no</itunes:explicit><itunes:subtitle>I like sharing information about daily issue, because everyone will end. So, perhaps this info be useful for others.</itunes:subtitle><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><item><title>Interior design is more than just aesthetics</title><link>http://budistira.blogspot.com/2016/03/interior-design-is-more-than-just.html</link><author>noreply@blogger.com (minx)</author><pubDate>Fri, 18 Mar 2016 15:58:00 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-19794463.post-3380039961033243646</guid><description>&lt;iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/2dahnraRPdI" width="480"&gt;&lt;/iframe&gt;&lt;b&gt;Interior design is more than just aesthetics&lt;/b&gt;. It's about finding &lt;br /&gt;
creative design solutions for interior environments while supporting the&lt;br /&gt;
 health, safety and well being and fun.&lt;div class="blogger-post-footer"&gt;&lt;a href="https://www.youtube.com/channel/UCQ9rpSj3m2lCD_Sb3gPpybQ"&gt;celebrity fashion channel&lt;/a&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/2dahnraRPdI/default.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>small decorating ideas and tips</title><link>http://budistira.blogspot.com/2016/03/small-decorating-ideas-and-tips.html</link><author>noreply@blogger.com (minx)</author><pubDate>Fri, 18 Mar 2016 15:50:00 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-19794463.post-732240042230208432</guid><description>&lt;iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/f8tdNJbzqG4" width="480"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;b&gt;decorating ideas and tips&lt;/b&gt; for how to decorate a small space. designer tips advice and decorating ideas of home interior. One of trick use bright colors can give even the smallest home a big and vivacious personality&lt;br /&gt;
https://youtu.be/f8tdNJbzqG4&lt;div class="blogger-post-footer"&gt;&lt;a href="https://www.youtube.com/channel/UCQ9rpSj3m2lCD_Sb3gPpybQ"&gt;celebrity fashion channel&lt;/a&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/f8tdNJbzqG4/default.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Simple Decor furniture design ideas</title><link>http://budistira.blogspot.com/2016/03/simple-decor-furniture-design-ideas.html</link><author>noreply@blogger.com (minx)</author><pubDate>Fri, 18 Mar 2016 10:57:00 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-19794463.post-8925815681875535821</guid><description>&lt;iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/cqrO2DEXbYY" width="480"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;b&gt;Simple decor furniture design ideas&lt;/b&gt; has inspiring style for every room in your home, from your bedroom to your living room to your kitchen to your dining room and beyond.&lt;br /&gt;
innovative furniture ideas for every room in the house. Decoration covered include bookshelf designs, tables, chairs, modern wall units and space saving.&lt;div class="blogger-post-footer"&gt;&lt;a href="https://www.youtube.com/channel/UCQ9rpSj3m2lCD_Sb3gPpybQ"&gt;celebrity fashion channel&lt;/a&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/cqrO2DEXbYY/default.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>fashion kids girls show</title><link>http://budistira.blogspot.com/2016/03/fashion-kids-girls-show.html</link><author>noreply@blogger.com (minx)</author><pubDate>Fri, 18 Mar 2016 10:17:00 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-19794463.post-1961138639699556170</guid><description>&lt;iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/IzGoP0g9O5Q" width="480"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;i&gt;fashion girl clothes for small children&lt;/i&gt; is very charming, they took pictures of her style, her dress was very charming, they look very trendy to wear that again this hits&lt;br /&gt;
https://youtu.be/IzGoP0g9O5Q&lt;div class="blogger-post-footer"&gt;&lt;a href="https://www.youtube.com/channel/UCQ9rpSj3m2lCD_Sb3gPpybQ"&gt;celebrity fashion channel&lt;/a&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/IzGoP0g9O5Q/default.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>fashion kids boy 2016</title><link>http://budistira.blogspot.com/2016/03/fashion-kids-boy-2016.html</link><author>noreply@blogger.com (minx)</author><pubDate>Fri, 18 Mar 2016 05:39:00 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-19794463.post-2593422138993068415</guid><description>&lt;iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/SO9HhYWr3KE" width="480"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;b&gt;fashion kids boy 2016&lt;/b&gt; with a design of &lt;b&gt;red clothes&lt;/b&gt; longer trend in today, making them appear more saucy and engaging fans to see the action and force them funny, curious clay continues this video just friends&lt;br /&gt;
https://youtu.be/SO9HhYWr3KE&lt;div class="blogger-post-footer"&gt;&lt;a href="https://www.youtube.com/channel/UCQ9rpSj3m2lCD_Sb3gPpybQ"&gt;celebrity fashion channel&lt;/a&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/SO9HhYWr3KE/default.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>model of maternity clothes</title><link>http://budistira.blogspot.com/2016/03/model-of-maternity-clothes.html</link><author>noreply@blogger.com (minx)</author><pubDate>Fri, 18 Mar 2016 04:22:00 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-19794463.post-6983787191135203561</guid><description>&lt;br /&gt;&lt;br /&gt;
people who make very detailed. just look at the &lt;u&gt;model of maternity &lt;br /&gt;
clothes&lt;/u&gt; is very suitable for blacks and whites. fashions of pregnant &lt;br /&gt;
women is made of fabric choices and comfortable to wear.&lt;br /&gt;https://youtu.be/3b8IRYJzFWY&lt;iframe allowfullscreen="" frameborder="0" height="344" src="https://www.youtube.com/embed/3b8IRYJzFWY" width="459"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="https://www.youtube.com/channel/UCQ9rpSj3m2lCD_Sb3gPpybQ"&gt;celebrity fashion channel&lt;/a&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/3b8IRYJzFWY/default.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>funky crazy man dance in room</title><link>http://budistira.blogspot.com/2015/12/funky-crazy-man-dance-in-room.html</link><author>noreply@blogger.com (minx)</author><pubDate>Fri, 25 Dec 2015 22:03:00 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-19794463.post-1606931848988979737</guid><description>&lt;iframe allowfullscreen="" frameborder="0" height="344" src="https://www.youtube.com/embed/AOlSkMT0mcc?rel=0&amp;amp;autoplay=1" width="459"&gt;&lt;/iframe&gt;&lt;br /&gt;
running man crazy dance in small room - Crazy man dancing slow motion isolated in small room. Guy creates a crazy dance in an arcade while rockin' on front of television.&lt;div class="blogger-post-footer"&gt;&lt;a href="https://www.youtube.com/channel/UCQ9rpSj3m2lCD_Sb3gPpybQ"&gt;celebrity fashion channel&lt;/a&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/AOlSkMT0mcc/default.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>2016 new years celebration with fireworks </title><link>http://budistira.blogspot.com/2015/12/2016-new-years-celebration-with.html</link><author>noreply@blogger.com (minx)</author><pubDate>Fri, 25 Dec 2015 17:29:00 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-19794463.post-6014939077161705597</guid><description>&lt;iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/Eyrp_qJrDpQ?rel=0&amp;amp;autoplay=1" width="480"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;b&gt;New Year with festivities both large and small around the world on this intercontinental journey. New Year's Eve celebration features star-studded musical performances, balloons, handouts, confetti, a colorful pyrotechnic display&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="https://www.youtube.com/channel/UCQ9rpSj3m2lCD_Sb3gPpybQ"&gt;celebrity fashion channel&lt;/a&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/Eyrp_qJrDpQ/default.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>2016 bali dance show music traditional</title><link>http://budistira.blogspot.com/2015/12/2016-bali-dance-show-music-traditional.html</link><author>noreply@blogger.com (minx)</author><pubDate>Fri, 25 Dec 2015 15:13:00 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-19794463.post-4549572683102230777</guid><description>&lt;iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/dvPf6C5uSns?rel=0&amp;amp;autoplay=1" width="480"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
Balinese dance is beautiful and unique, and is closely connected to religious rituals. Dances are often performed at ceremonies, typically as part of dramas, and most involve the Balinese version of the Hindu Ramayana epic.&lt;br /&gt;
bali dance modern, bali dance performance in this video&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="https://www.youtube.com/channel/UCQ9rpSj3m2lCD_Sb3gPpybQ"&gt;celebrity fashion channel&lt;/a&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/dvPf6C5uSns/default.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Small living room furniture arrangement idea</title><link>http://budistira.blogspot.com/2015/12/small-living-room-furniture-arrangement.html</link><author>noreply@blogger.com (minx)</author><pubDate>Fri, 25 Dec 2015 08:36:00 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-19794463.post-9198348341091529718</guid><description>&lt;iframe allowfullscreen="" frameborder="0" height="344" src="https://www.youtube.com/embed/MQTQC4DBCnM?rel=0&amp;amp;autoplay=1" width="459"&gt;&lt;/iframe&gt;&lt;br /&gt;
this room I form neatly as if seen by someone I'll be making flattered the visitors or guests.&lt;br /&gt;
&lt;b&gt;when I was alone in the room to listen to the instrumental song, my heart feels indecisive, steadfast, peaceful, peaceful. it feels wonderful.&lt;br /&gt;
living room furniture arrangement, small ideas room furniture, living room furniture&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="https://www.youtube.com/channel/UCQ9rpSj3m2lCD_Sb3gPpybQ"&gt;celebrity fashion channel&lt;/a&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/MQTQC4DBCnM/default.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>the cat looking for mouse with fun and enjoy</title><link>http://budistira.blogspot.com/2015/12/the-cat-looking-for-mouse-with-fun-and.html</link><author>noreply@blogger.com (minx)</author><pubDate>Fri, 25 Dec 2015 08:27:00 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-19794463.post-8486638566807943008</guid><description>&lt;iframe allowfullscreen="" frameborder="0" height="344" src="https://www.youtube.com/embed/oxn8rJrhJcg?rel=0&amp;amp;autoplay=1" width="459"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;b&gt;video starts with a mouse hiding in the ground. A white cat with fun looking around, waiting for its prey. Activity about having a cat is their very presence will help to keep the mice away.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="https://www.youtube.com/channel/UCQ9rpSj3m2lCD_Sb3gPpybQ"&gt;celebrity fashion channel&lt;/a&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/oxn8rJrhJcg/default.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>funny compilation videos 2015 </title><link>http://budistira.blogspot.com/2015/12/funny-compilation-videos-2015.html</link><author>noreply@blogger.com (minx)</author><pubDate>Fri, 25 Dec 2015 08:15:00 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-19794463.post-144091842117369280</guid><description>&lt;iframe allowfullscreen="" frameborder="0" height="344" src="https://www.youtube.com/embed/2dnv-8Labv4?rel=0&amp;amp;autoplay=1" width="459"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;b&gt;collection of a wide collection of funny video which was amazing. let's see how you laugh out loud laughing air. please Share if you like this video, and please give me request you need. just in the comment ya.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="https://www.youtube.com/channel/UCQ9rpSj3m2lCD_Sb3gPpybQ"&gt;celebrity fashion channel&lt;/a&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/2dnv-8Labv4/default.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>This copy of Microsoft Windows XP is not genuine</title><link>http://budistira.blogspot.com/2006/07/this-copy-of-microsoft-windows-xp-is.html</link><author>noreply@blogger.com (minx)</author><pubDate>Wed, 26 Jul 2006 15:44:00 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-19794463.post-115390385599756331</guid><description>&lt;span style="font-weight: bold; font-style: italic;"&gt;Want to bypass and remove  this warning by disabling WGATray.exe ?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Windows XP Pirates have again found &lt;b&gt;workaround methods to bypass the new Microsoft Anti-Piracy effort &lt;/b&gt;- &lt;a href="http://labnol.blogspot.com/2006/04/wga-notifications-this-copy-of-windows.html"&gt;Windows Genuine Advantage Notifications&lt;/a&gt; that notifies you through annonying pop-up messages if your copy of Windows is not genuine.&lt;br /&gt;&lt;br /&gt;The WGA Notifications patch is installed if the user has opted to automatically update Windows via the Windows Update Website or if a XP users manually downloads the latest Windows updates.&lt;br /&gt;&lt;br /&gt;A workaround posted on internet WGA install workaround (KB905474) suggests the following:&lt;br /&gt;&lt;br /&gt;End the process wgatray.exe in Windows TaskManager and restart Windows XP in safe mode. Now delete the following files:&lt;br /&gt;&lt;br /&gt;Delete WgaTray.exe from c:\windowss\ystem32&lt;br /&gt;Delete WgaTray.exe from c:\windows\system32\dllcache&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos1.blogger.com/blogger/3709/485/1600/wgatray%20files.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Start Windows Registry editor and delete the folder "WGALOGON" located in the following location:&lt;br /&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ Windows NT\CurrentVersion\WinlogonNotify. Delete all references in your registry to WgaTray.exe&lt;br /&gt;&lt;br /&gt;Another alternative suggest that three files are installed Windows XP System Folder:&lt;br /&gt;&lt;br /&gt;\WINDOWS\system32\WgaLogon.dll&lt;br /&gt;\WINDOWS\system32\WgaTray.exe&lt;br /&gt;\WINDOWS\system32\LegitCheckControl.dll&lt;br /&gt;&lt;br /&gt;The wgatray.exe process makes the check for genuine windows software. You can disable WGA by removing the execute bit on WgaLogon.dll. That way, winlogon can't call it as a notification package at boot, and since WgaLogon is responsible for running and maintaining WgaTray.exe, no more tray popups either.&lt;br /&gt;&lt;br /&gt;To change the execute bit of WgaLogon.dll, first turn off Simple File Sharing. Now right click the file in Windows Explorer and open the Security Tab. Hit the Advanced button, uncheck the Inherit box at the bottom, hit the Copy button, then hit OK. Go through each listed user/group and remove the "Read &amp; Execute" permission for that file, leaving the "Read" permission as-is.&lt;br /&gt;&lt;br /&gt;Hit OK to apply the permission changes and close the file properties dialog. Restart the machine. You can now turn "Use simple file sharing" back on, if you want.&lt;br /&gt;&lt;br /&gt;A third alternative posted on the internet suggest that users clear the content of file data.dat located in the following directory:&lt;br /&gt;C:\Documents and Settings\All Users\Application Data\Windows Genuine Advantage\data&lt;br /&gt;&lt;br /&gt;Save the data.dat empty file and change the attributes to "Read Only" - Restart you computer. Or start your PC in Safe Mode and delete the following files from Windows system32 folder - wgalogon.dll spmgs.dll wgatray.exe The WGA setup file is in C:\WINDOWS\SoftwareDistribution\ Download\6c4788c9549d437e76e1773a7639582a&lt;br /&gt;&lt;br /&gt;If you don't use "Fast User Switching", you can disable the Windows XP Welcome Screen if you are logged in as an Administrator. This will remove the initial WGA Warning Screen:&lt;br /&gt;&lt;br /&gt;1. Click on Start -&gt; Control Panel -&gt;User Accounts&lt;br /&gt;2.  Click on "Change the way users log on or off"&lt;br /&gt;3. Uncheck "Use the Welcome Screen" - Choose Apply&lt;br /&gt;4. Close the User Accounts window and the Control Panel&lt;br /&gt;5. The next time you reboot your computer, the classic login prompt will be used&lt;br /&gt;&lt;br /&gt;To enable Fast User Switching, you must also enable the Use the Welcome screen option. Also, Fast User Switching cannot be used when Offline Files are enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Disable wgatray.exe&lt;/b&gt; - Some users are claiming that removing the WGATray.exe (or killing the WGATray.exe process) are working for them. Here's how to search for WGATray.exe file - &lt;a href="http://photos1.blogger.com/blogger/3709/485/1600/wgatray.png" target="_blank"&gt;Screenshot&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;None of these methods are guaranteed to work and people are just experimenting. Meanwhile Microsoft is not willing to relent to crackers this time and are planning to release an update of WGADiag2.exe utility in the next few days.&lt;br /&gt;&lt;br /&gt;WGADiag2 will also fix the problem with registry key permissions may cause the installation of Windows Genuine Advantage Notifications KB905474 to fail from Windows Update:&lt;br /&gt;&lt;br /&gt;Here's a manual fix provided by Microsoft. These permissions can be repaired using Registry Editor as follows:&lt;br /&gt;&lt;br /&gt;1. Click Start, and then click Run&lt;br /&gt;2. In the Open box, type regedit, and then click OK&lt;br /&gt;3. Expand HKEY_CLASSES_ROOT&lt;br /&gt;4. Locate the subkey HKEY_CLASSES_ROOT\LegitCheckControl.LegitCheck&lt;br /&gt;5. Right-click the subkey and select Permissions….&lt;br /&gt;6. Ensure that Administrators allowed Full Control permission&lt;br /&gt;7. Repeat steps 3-6 for the subkey&lt;br /&gt;HKEY_CLASSES_ROOT\LegitCheckControl.LegitCheck.1&lt;br /&gt;&lt;br /&gt;Microsoft has also published a kB article if the Windows Genuine Advantage (WGA) validation check process does not validate successfully on a Microsoft Windows XP-based computer, and you receive one or both of the following error messages:&lt;br /&gt;&lt;br /&gt;Product Key Inaccessible 0x80080212&lt;br /&gt;&lt;br /&gt;This problem occurs when you do not have the appropriate permissions for the Windows Genuine Advantage\Data folder. In the Permissions for Users section, make sure that Read &amp;amp; Execute, List Folder Contents and Read permissions are given. If the previous steps fail, start the computer in Safe Mode and rename the %allusersprofile%\Application Data\Windows Genuine Advantage directory.&lt;br /&gt;&lt;br /&gt;Various &lt;a href="http://labnol.blogspot.com/2006/03/latest-windows-genuine-advantage.html"&gt;patches&lt;/a&gt; already exists to &lt;a href="http://labnol.blogspot.com/2005/02/get-your-legal-copy-of-windows-xp.html"&gt;byepass the WGA check&lt;/a&gt; that validates your copy of Windows XP with &lt;a href="http://labnol.blogspot.com/2005/07/microsoft-windows-genuine-advantage-10.html"&gt;Windows Update&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="https://www.youtube.com/channel/UCQ9rpSj3m2lCD_Sb3gPpybQ"&gt;celebrity fashion channel&lt;/a&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>"4G -- Akhir Dari Kejayaan Intelligent Network"</title><link>http://budistira.blogspot.com/2006/07/4g-akhir-dari-kejayaan-intelligent.html</link><author>noreply@blogger.com (minx)</author><pubDate>Fri, 21 Jul 2006 14:34:00 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-19794463.post-115346377530778724</guid><description>&lt;span style="font-weight: bold; font-style: italic;"&gt;       dari kang Onno W. Purbo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;     &lt;br /&gt;1G, 2G, 2.5G, 3G dan terakhir 4G merupakan generasi teknologi yang digunakan pada infrastruktur selular. Pada hari ini, Indonesia baru memasuki tahapan teknologi 2.5G. Secara sederhana dapat di identikan teknologi 1G adalah telepon analog / PSTN yang menggunakan selular. Teknologi 2G, 2.5G dan 3G merupakan ISDN di selular.&lt;br /&gt;     &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Intelligent Network (IN) secara sederhana merupakan inti dari infrastruktur telekomunikasi yang di operasikan oleh banyak operator telekomunikasi di Indonesia pada saat ini. Khususnya di dunia selular banyak bertumpu pada protokol SS7/IS-41/GSM MAP intelligent nodes.Teknik yang hampir sama juga berlaku untuk operator non-selular, seperti Telkom, Indosat &amp; Satelindo.&lt;br /&gt;    &lt;br /&gt; &lt;br /&gt;Servis suara di 3G pada dasarnya sama dengan servis suara di ISDN. Handset digital selular pada dasarnya sebuah handset ISDN. Sialnya, ISDN pada kenyataannya tidak berhasil dengan baik untuk mendeploy servis suara yang baru maupun integrasi data / suara. Kita cukup beruntung dengan adanya 3G ternyata membuka kesempatan untuk uji coba teknologi Internet seperti Session Initiation Protocol (SIP) maupun menggunaan IP v6 (saat ini semua ISP komersial di Indonesia menggunakan IP v4 yang lebih tua). Ujicoba untuk integrasi SIP &amp;amp; IP v6 ke dalam 3G di lakukan dalam inisiatif 3GPP.&lt;br /&gt;    &lt;br /&gt; &lt;br /&gt;      SIP adalah protokol inti dalam internet telephony (&lt;a href="http://www.iptel.org/" title="http://www.iptel.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.iptel.org&lt;/a&gt;) yang merupakan evolusi terkini dari Voice over Internet Protocol maupun Telephony over Internet Protocol yang banyak di perdebatkan oleh operator, pemerintah &amp; DPR pada hari ini. Ironisnya, internet telephony akan menjadi tulang punggung utama infrastruktur telekomunikasi tidak lama lagi. Gilanya, teknologi internet telephony memungkinkan pembangun infrastruktur telekomunikasi rakyat secara swadaya masyarakat (tanpa Bank Dunia, IMF maupun ADB) bahkan mungkin tanpa kontrol pemerintah sama sekali kalau saja kreatifitas anak bangsa tidak di pasung. &lt;script&gt;&lt;!-- D(["mb"," \n      \n   \n      Untuk  teknologi 4G, setiap handset 4G akan langsung mempunyai nomor IP v6  dilengkapi dengan kemampuan untuk berinteraksi internet telephony yang  berbasis Session Initiation Protocol (SIP). Semua jenis radio transmisi  seperti GSM, TDMA, EDGE, CDMA 2G, 2.5G akan dapat digunakan, dan dapat  berintegrasi dengan mudah dengan radio yang di operasikan tanpa lisensi  seperti IEEE 802.11 di frekuensi 2.4GHz &amp;amp; 5-5.8Ghz, bluetooth dan  selular. Integrasi voice dan data dalam channel yang sama. Integrasi  voice dan data aplikasi SIP-enabled. \n      \n   \n      Gila-nya  dengan teknologi SIP yang berada di belakang 4G, nomor telepon +62 21  123 5678 hanya lah subset, bagian kecil daripada pengenalan /  identifikasi telepon. Sebagian besar identifikasi / penomoran telepon  akan dilakukan menggunakan URL seperti sip:&lt;a&gt;onno@indo.net.id&lt;/a&gt; …. Dengan  bertumpu pada URL, dunia menjadi lebih menarik karena kita tidak perlu  lagi tergantung pada nomor telepon yang di kuasasi pemerintah cq.  POSTEL untuk berkomunikasi internet telepon. Kalau kita cukup gila,  sebetulnya dalam banyak hal kita dapat menyelenggarakan sendiri  infrastruktur internet telephony tanpa perlu tergantung pada ijin /  lisensi pemerintah tanpa melanggar hukum, dengan software yang dibuat  sendiri tanpa mengeluarkan banyak devisa. Tak perlu lah kita  mengeluarkan US$1000 / SST seperti yang di gembar gemborkan saat ini,  jika saja kreatifitas anak bangsa tidak di matikan.&lt;br /&gt;\n     &lt;br /&gt;\n  &lt;br /&gt;\n      Semua  teknologi yang di sebutkan di atas memang masih terus dalam  pengembangan dan penyempurnaan. Ada beberapa organisasi Open Standar  yang bertumpu pada Internet Engineering Task Force (IETF) &lt;a&gt;http://www.ietf.org&lt;/a&gt;  yang menjadi tulang punggung dibelakang semua kegiatan yang ada.  Khususnya untuk internet telephony banyak di dorong oleh IPTel ",1] );  //--&gt;&lt;/script&gt;&lt;br /&gt;    &lt;br /&gt; &lt;br /&gt;Untuk teknologi 4G, setiap handset 4G akan langsung mempunyai nomor IP v6 dilengkapi dengan kemampuan untuk berinteraksi internet telephony yang berbasis Session Initiation Protocol (SIP). Semua jenis radio transmisi seperti GSM, TDMA, EDGE, CDMA 2G, 2.5G akan dapat digunakan, dan dapat berintegrasi dengan mudah dengan radio yang di operasikan tanpa lisensi seperti IEEE 802.11 di frekuensi 2.4GHz &amp; 5-5.8Ghz, bluetooth dan selular. Integrasi voice dan data dalam channel yang sama. Integrasi voice dan data aplikasi SIP-enabled.&lt;br /&gt;    &lt;br /&gt; &lt;br /&gt;Gila-nya dengan teknologi SIP yang berada di belakang 4G, nomor telepon +62 21 123 5678 hanya lah subset, bagian kecil daripada pengenalan / identifikasi telepon. Sebagian besar identifikasi / penomoran telepon akan dilakukan menggunakan URL seperti sip:&lt;a href="mailto:onno%40indo.net.id" title="mailto:onno%40indo.net.id" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;onno@indo.net.id&lt;/a&gt; …. Dengan bertumpu pada URL, dunia menjadi lebih menarik karena kita tidak perlu lagi tergantung pada nomor telepon yang di kuasasi pemerintah cq. POSTEL untuk berkomunikasi internet telepon. Kalau kita cukup gila, sebetulnya dalam banyak hal kita dapat menyelenggarakan sendiri infrastruktur internet telephony tanpa perlu tergantung pada ijin / lisensi pemerintah tanpa melanggar hukum, dengan software yang dibuat sendiri tanpa mengeluarkan banyak devisa. Tak perlu lah kita mengeluarkan US$1000 / SST seperti yang di gembar gemborkan saat ini, jika saja kreatifitas anak bangsa tidak di matikan.&lt;br /&gt;    &lt;br /&gt; &lt;br /&gt;Semua teknologi yang di sebutkan di atas memang masih terus dalam pengembangan dan penyempurnaan. Ada beberapa organisasi Open Standar yang bertumpu pada Internet Engineering Task Force (IETF) &lt;a href="http://www.ietf.org/" title="http://www.ietf.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.ietf.org&lt;/a&gt; yang menjadi tulang punggung dibelakang semua kegiatan yang ada. Khususnya untuk internet telephony banyak di dorong oleh IPTel &lt;script&gt;&lt;!-- D(["mb","&lt;a&gt;http://www.iptel.org&lt;/a&gt; dan SIP Forum &lt;a&gt;http://www.sipforum.org.&lt;/a&gt;&lt;br /&gt;\n     &lt;br /&gt;\n  &lt;br /&gt;\n      Menarik  untuk di simak bahwa dengan teknologi 4G, praktis teknologi Intelligent  Network (IN) yang pernah menjadi primadona infrastruktur telekomunikasi  yang digunakan Telkom, Indosat, Satelindo dll menjadi kadaluarsa  (obsolete). Bukan mustahil, tidak lama lagi (5-10 tahun lagi) habis  sudah kejayaan infrastruktur telekomunikasi Telkom, Indosat dll yang  banyak bertumpu pada teknologi yang berbasis pada berbagai standar ITU  karena bersaing ketat dengan gerakan arus bawah yang menggunakan  teknologi bawah tanah seperti SIP, MGCP, Megaco, RTP dll yang semua  terbuka dan dapat di download secara gratis di Internet pada hari ini.&lt;br /&gt;\n     &lt;br /&gt;\n  &lt;br /&gt;\n      Merdeka!&lt;br /&gt;\n &lt;br /&gt;\n &lt;br /&gt;\n&lt;br /&gt;\n__________________________________________________&lt;br /&gt;\nDo You Yahoo!?&lt;br /&gt;\nTired of spam?  Yahoo! Mail has the best spam protection around&lt;br /&gt;\n&lt;a&gt;http://mail.yahoo.com&lt;/a&gt;&lt;br /&gt;\n&lt;br /&gt;\n[Non-text portions of this message have been removed]&lt;br /&gt;\n&lt;br /&gt;\n&lt;/p&gt;\n    &lt;/div&gt;  \n\n    \n    &lt;font&gt;__._,_.___&lt;/span&gt;\n    \n    &lt;div&gt;\n      &lt;font&gt;\n        &lt;a&gt;",1] );  //--&gt;&lt;/script&gt;&lt;a href="http://www.iptel.org/" title="http://www.iptel.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.iptel.org&lt;/a&gt; dan SIP Forum &lt;a href="http://www.sipforum.org./" title="http://www.sipforum.org." target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.sipforum.org.&lt;/a&gt;&lt;br /&gt;    &lt;br /&gt; &lt;br /&gt;Menarik untuk di simak bahwa dengan teknologi 4G, praktis teknologi Intelligent Network (IN) yang pernah menjadi primadona infrastruktur telekomunikasi yang digunakan Telkom, Indosat, Satelindo dll menjadi kadaluarsa (obsolete). Bukan mustahil, tidak lama lagi (5-10 tahun lagi) habis sudah kejayaan infrastruktur telekomunikasi Telkom, Indosat dll yang banyak bertumpu pada teknologi yang berbasis pada berbagai standar ITU karena bersaing ketat dengan gerakan arus bawah yang menggunakan teknologi bawah tanah seperti SIP, MGCP, Megaco, RTP dll yang semua terbuka dan dapat di download secara gratis di Internet pada hari ini.&lt;br /&gt;    &lt;br /&gt; &lt;br /&gt;      Merdeka!&lt;div class="blogger-post-footer"&gt;&lt;a href="https://www.youtube.com/channel/UCQ9rpSj3m2lCD_Sb3gPpybQ"&gt;celebrity fashion channel&lt;/a&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>My HQ</title><link>http://budistira.blogspot.com/2006/03/my-hq.html</link><author>noreply@blogger.com (minx)</author><pubDate>Sun, 5 Mar 2006 20:41:00 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-19794463.post-114156401136341121</guid><description>&lt;a href="http://photos1.blogger.com/blogger/6184/1966/1600/DSC05296.jpg"&gt;&lt;img style="margin: 0px 10px 10px 0px; float: left;" alt="" src="http://photos1.blogger.com/blogger/6184/1966/320/DSC05296.jpg" border="0" /&gt;&lt;/a&gt; sebenarnya sih ada banyah foto tali koneksi utama ke inet lagi bermasalah !&lt;br /&gt;disini kita pake dua koneksi ke internet satu dengan koneksi 256kbps&lt;br /&gt;satu lagi dengan isp kelas RT/RWnet&lt;br /&gt;tau kan koneksi ala kadarnya biar bisa chating aja he he he .... !!!&lt;br /&gt;asik kan markas nya kita !!&lt;br /&gt;mo gabung ?&lt;br /&gt;dan berbagi ilmu !&lt;br /&gt;welcome here ...&lt;br /&gt;saya juga perlu belajar banyak ....&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6184/1966/1600/DSC05298.jpg"&gt;&lt;img style="margin: 0px 10px 10px 0px; float: left;" alt="" src="http://photos1.blogger.com/blogger/6184/1966/320/DSC05298.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6184/1966/1600/DSC05297.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center;" alt="" src="http://photos1.blogger.com/blogger/6184/1966/320/DSC05297.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;My HQ ( Markas besar &amp;amp; tempat oprek nya sampigroups )&lt;br /&gt;&lt;br /&gt;ada beberapa komputer yang selaluterkonek ke inet .....&lt;br /&gt;ada juga yang lagi chat dan .....&lt;br /&gt;tapi kondisi ini sebenarnya lagi sepi ..........&lt;br /&gt;lagi pada sibuk tah dimana kali !!!&lt;br /&gt;&lt;p&gt;:))&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="https://www.youtube.com/channel/UCQ9rpSj3m2lCD_Sb3gPpybQ"&gt;celebrity fashion channel&lt;/a&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>PHP: Hackers Paradise</title><link>http://budistira.blogspot.com/2005/12/php-hackers-paradise.html</link><author>noreply@blogger.com (minx)</author><pubDate>Mon, 12 Dec 2005 19:05:00 +0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-19794463.post-113438565614340694</guid><description>by Nathan Wallace&lt;br /&gt;&lt;a href="http://www.e-gineer.com/articles/php-hackers-paradise.phtml"&gt;http://www.e-gineer.com/articles/php-hackers-paradise.phtml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;1          Introduction&lt;br /&gt;&lt;br /&gt;PHP (&lt;a href="http://www.blogger.com/clickthrough.phtml?sendtourl=http%3A%2F%2Fwww.php.net"&gt;http://www.php.net&lt;/a&gt;) is a powerful server side web scripting solution. It has quickly grown in popularity and according to the &lt;a href="http://www.blogger.com/clickthrough.phtml?sendtourl=http%3A%2F%2Fwww.netcraft.com%2FSurvey%2FReports%2F0001%2F"&gt;1999 January Netcraft Web Server Survey&lt;/a&gt; PHP is installed on 12.8% of all web sites.  Much of its syntax is borrowed from C, Java and Perl with a couple of unique PHP-specific features thrown in. The goal of the language is to allow web developers to write dynamically generated pages quickly.&lt;br /&gt;&lt;br /&gt;Being a good PHP hacker isn’t just about writing single line solutions to complex problems.  For example, web gurus know that speed of coding is much more important than speed of code.  In this article we’ll look at techniques that can help you become a better PHP hacker.  We’ll assume that you have a basic knowledge of PHP and databases.&lt;br /&gt;&lt;br /&gt;If nothing else, you should leave here with the 3 key ideals for PHP hackers:&lt;br /&gt;·        Laziness is a Virtue&lt;br /&gt;·        Chameleon Coding&lt;br /&gt;·        Speed of Coding, Not Speed of Code&lt;br /&gt;&lt;br /&gt;2          Laziness is a Virtue&lt;br /&gt;2.1.1       Introduction&lt;br /&gt;&lt;br /&gt;It seems strange to think of a web programmer as lazy.  Most of us work one hundred-hour week’s in our quest to join the gold rush.  In fact, we need to be lazy because we are so busy.&lt;br /&gt;&lt;br /&gt;There are two key ways to be lazy.  Firstly always use existing code when it is available, just integrate it into your standards and project.  The second technique is to develop a library of helpful functions that let you be lazy in the future.&lt;br /&gt;&lt;br /&gt;2.1.2       Use Other People’s Code&lt;br /&gt;&lt;br /&gt;We need to use laziness to our advantage and PHP is the perfect tool.  PHP was born and raised in an open source environment.  The community holds open source ideals close to its heart.  As a result there are thousands of people on the mailing list willing to share their knowledge and code.  There are also many open source PHP projects that you can tap into.&lt;br /&gt;I’m not suggesting that you spend all day asking people to write code for you.  But through clever use of the knowledge base, mailing list archives and PHP projects you can save yourself a lot of time.&lt;br /&gt;&lt;br /&gt;PHP Knowledge Base – &lt;a href="http://php.faqts.com/"&gt;http://php.faqts.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;PHP Mailing List Archive - &lt;a href="http://www.progressive-comp.com/Lists/?l=php3-general&amp;r=1&amp;amp;w=2#php3-general"&gt;http://www.progressive-comp.com/Lists/?l=php3-general&amp;r=1&amp;amp;w=2&lt;/a&gt;&lt;a name="_Hlt474816561"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2.1.3       Helpful Functions and Classes&lt;br /&gt;&lt;br /&gt;2.1.3.1       Introduction&lt;br /&gt;&lt;br /&gt;In this section we will work at developing a library of PHP code which will aid us in future development.  A small amount of work now let’s us be lazy in the future.&lt;br /&gt;&lt;br /&gt;Some of this code has been taken from open source PHP projects.  Other parts from the mailing list archives.  In fact, all the work I really needed to do was structure the code into a coherent library of functions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.1.3.2       Database Abstraction&lt;br /&gt;&lt;br /&gt;One of the features / problems with PHP is that it does not have a uniform method for accessing databases.  There are specialized functions for each database PHP is able to connect to.  This is a feature because it allows you to optimize your database code.  It is a problem because it makes your code less portable and increases the learning curve for newcomers.&lt;br /&gt;&lt;br /&gt;A number of database wrapper classes have been developed to solve this problem.  They provide a uniform set of functions for accessing any database.  Personally I like them because I find it much easier to remember a few simple functions like query and next_record than having to think about database handles, connections and so on.&lt;br /&gt;&lt;br /&gt;The most commonly used (and defacto standard) is PHPLib - &lt;a href="http://phplib.netuse.de/"&gt;http://phplib.netuse.de&lt;/a&gt;/&lt;br /&gt;&lt;br /&gt;Metabase - &lt;a href="http://phpclasses.upperdesign.com/browse.html/package/20"&gt;http://phpclasses.UpperDesign.com/browse.html/package/20&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There is also PHPDB - &lt;a href="http://phpdb.linuxbox.com/"&gt;http://phpdb.linuxbox.com&lt;/a&gt;/&lt;br /&gt;&lt;br /&gt;2.1.3.3       Session Management&lt;br /&gt;&lt;br /&gt;The main purpose of PHPLib is session management.  This allows you to associate data with visitors to your site for the duration of their stay.  This can be useful for remembering options and so on.&lt;br /&gt;&lt;br /&gt;PHP4 has session management features built into the PHP internal function library.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.1.3.4       Debugging Variables&lt;br /&gt;&lt;br /&gt;There is limited debugging support for PHP. This is no Smalltalk environment where you can browse objects and perform methods on them. Instead we need to make creative use of the old, reliable echo statement.&lt;br /&gt;&lt;br /&gt;The first thing we need to be able to do is look at the value of variables. The loose typing of PHP lets us use most variables directly in strings. This is great for numbers and so on, but falls down when we are dealing with arrays and objects.&lt;br /&gt;&lt;br /&gt;The other problem with debugging is that sometimes I'm not even sure what a variable is likely to contain. If I was, there be no need to debug.&lt;br /&gt;&lt;br /&gt;So, lets be smart now and lazy for the rest of time. We can write a function that shows us the type and value of any variable.&lt;br /&gt;&lt;br /&gt;function ss_array_as_string (&amp;$array, $column = 0) {&lt;br /&gt;    $str = "Array(&lt;br /&gt;\n";&lt;br /&gt;    while(list($var, $val) = each($array)){&lt;br /&gt;        for ($i = 0; $i &lt; $column+1; $i++){&lt;br /&gt;            $str .= "    ";&lt;br /&gt;        }&lt;br /&gt;        $str .= $var.' ==&gt; ';&lt;br /&gt;        $str .= ss_as_string($val, $column+1)."&lt;br /&gt;\n";&lt;br /&gt;    }&lt;br /&gt;    for ($i = 0; $i &lt; $column; $i++){&lt;br /&gt;        $str .= "    ";&lt;br /&gt;    }&lt;br /&gt;    return $str.')';&lt;br /&gt;}&lt;br /&gt;function ss_object_as_string (&amp;$object, $column = 0) {&lt;br /&gt;    if (empty($object-&gt;classname)) {&lt;br /&gt;        return "$object";&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;        $str = $object-&gt;classname."(&lt;br /&gt;\n";&lt;br /&gt;        while (list(,$var) = each($object-&gt;persistent_slots)) {&lt;br /&gt;            for ($i = 0; $i &lt; $column; $i++){&lt;br /&gt;                $str .= "    ";&lt;br /&gt;            }&lt;br /&gt;            global $$var;&lt;br /&gt;            $str .= $var.' ==&gt; ';&lt;br /&gt;            $str .= ss_as_string($$var, column+1)."&lt;br /&gt;\n";&lt;br /&gt;        }&lt;br /&gt;        for ($i = 0; $i &lt; $column; $i++){&lt;br /&gt;            $str .= "    ";&lt;br /&gt;        }&lt;br /&gt;        return $str.')';&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function ss_as_string (&amp;$thing, $column = 0) {&lt;br /&gt;    if (is_object($thing)) {&lt;br /&gt;        return ss_object_as_string($thing, $column);&lt;br /&gt;    }&lt;br /&gt;    elseif (is_array($thing)) {&lt;br /&gt;        return ss_array_as_string($thing, $column);&lt;br /&gt;    }&lt;br /&gt;    elseif (is_double($thing)) {&lt;br /&gt;        return "Double(".$thing.")";&lt;br /&gt;    }&lt;br /&gt;    elseif (is_long($thing)) {&lt;br /&gt;        return "Long(".$thing.")";&lt;br /&gt;    }&lt;br /&gt;    elseif (is_string($thing)) {&lt;br /&gt;        return "String(".$thing.")";&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;        return "Unknown(".$thing.")";&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Note that these functions work together to correctly print, format and indent arrays. They are also able to print objects when they have been defined with the PHPLIB standard variables classname (the name of the class) and persistent_slots (an array of the variable names we care about).&lt;br /&gt;&lt;br /&gt;Now we can see the state of any variable by just doing:&lt;br /&gt;&lt;br /&gt;    echo ss_as_string($my_variable);&lt;br /&gt;&lt;br /&gt;We can see the value of all variables currently defined in the PHP namespace with:&lt;br /&gt;&lt;br /&gt;    echo ss_as_string($GLOBALS);&lt;br /&gt;2.1.3.5       Log Functions&lt;br /&gt;&lt;br /&gt;A great way to debug is through logging.  It’s even easier if you can leave the log messages through your code and turn them on and off with a single command.  To facilitate this we will create a number of logging functions.&lt;br /&gt;&lt;br /&gt;$ss_log_level = 0;&lt;br /&gt;$ss_log_filename = '/tmp/ss-log';&lt;br /&gt;$ss_log_levels = array(&lt;br /&gt;    NONE  =&gt; 0,&lt;br /&gt;    ERROR =&gt; 1,&lt;br /&gt;    INFO  =&gt; 2,&lt;br /&gt;    DEBUG =&gt; 3);&lt;br /&gt;&lt;br /&gt;function ss_log_set_level ($level = ERROR) {&lt;br /&gt;    global $ss_log_level;&lt;br /&gt;    $ss_log_level = $level;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function ss_log ($level, $message) {&lt;br /&gt;    global $ss_log_level, $ss_log_filename;&lt;br /&gt;    if ($ss_log_levels[$ss_log_level] &lt; $ss_log_levels[$level]) {&lt;br /&gt;        // no logging to be done&lt;br /&gt;        return false;&lt;br /&gt;    }&lt;br /&gt;    $fd = fopen($ss_log_filename, "a+");&lt;br /&gt;    fputs($fd, $level.' - ['.ss_timestamp_pretty().'] - '.$message."\n");&lt;br /&gt;    fclose($fd);&lt;br /&gt;    return true;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function ss_log_reset () {&lt;br /&gt;    global $ss_log_filename;&lt;br /&gt;    @unlink($ss_log_filename);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;There are 4 logging levels available.  Log messages will only be displayed if they are at a level less verbose than that currently set.  So, we can turn on logging with the following command:&lt;br /&gt;&lt;br /&gt;ss_log_set_level(INFO);&lt;br /&gt;&lt;br /&gt;Now any log messages from the levels ERROR or INFO will be recorded.  DEBUG messages will be ignored.  We can have as many log entries as we like.  They take the form:&lt;br /&gt;&lt;br /&gt;ss_log(ERROR, "testing level ERROR");&lt;br /&gt;ss_log(INFO, "testing level INFO");&lt;br /&gt;ss_log(DEBUG, "testing level DEBUG");&lt;br /&gt;This will add the following entries to the log:&lt;br /&gt;&lt;br /&gt;ERROR – [Feb 10, 2000 20:58:17] – testing level ERROR&lt;br /&gt;INFO – [Feb 10, 2000 20:58:17] – testing level INFO&lt;br /&gt;&lt;br /&gt;You can empty the log at any time with:&lt;br /&gt;&lt;br /&gt;ss_log_reset();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.1.3.6       Optimization&lt;br /&gt;&lt;br /&gt;We need a way to test the execution speed of our code before we can easily perform optimizations.  A set of timing functions that utilize microtime() is the easiest method:&lt;br /&gt;&lt;br /&gt;function ss_timing_start ($name = ‘default’) {&lt;br /&gt;    global $ss_timing_start_times;&lt;br /&gt;    $ss_timing_start_times[$name] = explode(' ', microtime());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function ss_timing_stop ($name = ‘default’) {&lt;br /&gt;    global $ss_timing_stop_times;&lt;br /&gt;    $ss_timing_stop_times[$name] = explode(' ', microtime());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function ss_timing_current ($name = ‘default’) {&lt;br /&gt;    global $ss_timing_start_times, $ss_timing_stop_times;&lt;br /&gt;    if (!isset($ss_timing_start_times[$name])) {&lt;br /&gt;        return 0;&lt;br /&gt;    }&lt;br /&gt;    if (!isset($ss_timing_stop_times[$name])) {&lt;br /&gt;        $stop_time = explode(' ', microtime());&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;        $stop_time = $ss_timing_stop_times[$name];&lt;br /&gt;    }&lt;br /&gt;    // do the big numbers first so the small ones aren’t lost&lt;br /&gt;    $current = $stop_time[1] – $ss_timing_start_times[$name][1];&lt;br /&gt;    $current += $stop_time[0] – $ss_timing_start_times[$name][0];&lt;br /&gt;    return $current;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Now we can check the execution time of any code very easily.  We can even run a number of execution time checks simultaneously because we have established named timers.&lt;br /&gt;&lt;br /&gt;See the optimizations section below for the examination of echo versus inline coding for an example of the use of these functions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.1.3.7       Debugging and Optimizing Database Operations&lt;br /&gt;&lt;br /&gt;The best way to gauge the stress you are placing on the database with your pages is through observation.  We will combine the logging and timing code above to assist us in this process.&lt;br /&gt;&lt;br /&gt;We will alter the query() function in PHPLib, adding debugging and optimizing capabilities that we can enable and disable easily.&lt;br /&gt;&lt;br /&gt;function query($Query_String, $halt_on_error = 1) {&lt;br /&gt;    $this-&gt;connect();&lt;br /&gt;    ss_timing_start();&lt;br /&gt;    $this-&gt;Query_ID = @mysql_query($Query_String,$this-&gt;Link_ID);&lt;br /&gt;    ss_timing_stop();&lt;br /&gt;    ss_log(INFO, ss_timing_current().’ Secs – ‘.$Query_String);&lt;br /&gt;    $this-&gt;Row   = 0;&lt;br /&gt;    $this-&gt;Errno = mysql_errno();&lt;br /&gt;    $this-&gt;Error = mysql_error();&lt;br /&gt;    if ($halt_on_error &amp;&amp;amp; !$this-&gt;Query_ID) {&lt;br /&gt;      $this-&gt;halt("Invalid SQL: ".$Query_String);&lt;br /&gt;    }&lt;br /&gt;    return $this-&gt;Query_ID;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;3          Chameleon Coding&lt;br /&gt;3.1.1       Introduction&lt;br /&gt;&lt;br /&gt;A chameleon is a lizard that is well known for its ability to change skin color.  This is a useful metaphor for web programming as it highlights the importance of separating well structured and stable backend code from the dynamic web pages it supports.&lt;br /&gt;&lt;br /&gt;PHP is the perfect language for chameleon coding as it supports both structured classes and simple web scripting.&lt;br /&gt;&lt;br /&gt;3.1.2       Structuring your PHP Code&lt;br /&gt;&lt;br /&gt;3.1.2.1       Introduction&lt;br /&gt;&lt;br /&gt;When writing PHP code we need to make a clear distinction between the code which does the principal work of the application and the code which is used to display that work to the user.&lt;br /&gt;&lt;br /&gt;The backend code does the difficult tasks like talking to the database, logging, and performing calculations.&lt;br /&gt;&lt;br /&gt;The pages that display the interface to these operations are part of the front end.&lt;br /&gt;3.1.2.2       Dynamic, Hackable Frontend Code&lt;br /&gt;&lt;br /&gt;Mixing programming code in with HTML is messy.  We can talk about ways to format the code or structure your pages, but the end result will still be quite complicated.&lt;br /&gt;&lt;br /&gt;We need to move as much of the code away from the HTML as possible.  But, we need to do this so that we don’t get lost in the interaction between our application and the user interface.&lt;br /&gt;&lt;br /&gt;A web site is a dynamic target.  It is continually evolving, improving and changing.  We need to keep our HTML pages simple so that these changes can be made quickly and easily.  The best way to do that is by making all calls to PHP code simple and their results obvious.&lt;br /&gt;&lt;br /&gt;We shouldn’t worry too much about the structure of the PHP code contained in the front end, it will change soon anyway.&lt;br /&gt;&lt;br /&gt;That means that we need to remove all structured code from the actual pages into the supporting include files.  All common operations should be encapsulated into functions contained in the backend.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3.1.2.3       Stable, Structured Backend Code&lt;br /&gt;&lt;br /&gt;In complete contrast to the web pages your backend code should be well designed, documented and structured.  All the time you invest here is well spent, next time you need a page quickly hacked together all the hard parts will be already done waiting for you in backend functions.&lt;br /&gt;&lt;br /&gt;Your backend code should be arranged into a set of include files.  These should be either included dynamically when required, or automatically included in all pages through the use of the php3_auto_prepend_file directive.&lt;br /&gt;&lt;br /&gt;If you need to include HTML in your backend code it should be as generic as possible.  All presentation and layout should really be contained in the front end code.  Exceptions to this rule are obvious when they arise, for example, the creation of select boxes for a date selection form.&lt;br /&gt;&lt;br /&gt;PHP is flexible enough to let you design your code using classes and or functions.  My object oriented background means that I like to create a class to represent each facet of the application.  All database queries are encapsulated in these classes, hidden from the front end pages completely.  This helps by keeping all database code in a single location and simplifying the PHP code contained in pages.&lt;br /&gt;&lt;br /&gt;3.1.3       Coding Techniques&lt;br /&gt;&lt;br /&gt;3.1.3.1       Include Files&lt;br /&gt;&lt;br /&gt;If we are building these function libraries we need to work out a scheme for including them in our pages.  There are a couple of different approaches to this.&lt;br /&gt;&lt;br /&gt;We can either include all our library files all the time, or include them conditionally as required.&lt;br /&gt;&lt;br /&gt;As part of my speed of coding philosophy I prefer to just include all the files and never think about it again.  When the Zend optimizing engine becomes available to pre-parse this code the performance hit will not be significant.&lt;br /&gt;&lt;br /&gt;I have about 10,000 lines of code in PHP libraries for my site.  A quick check using the timing functions will tell us the damage:&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;require(‘timing.inc’);&lt;br /&gt;ss_timing_start();&lt;br /&gt;// include other library files here&lt;br /&gt;ss_timing_stop();&lt;br /&gt;echo ‘&lt;h1&gt;’.ss_timing_current().’&lt;/h1&gt;’;&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;It seems to take about 0.6 seconds to parse all my function libraries.  My sites do not receive millions of hits so this penalty is not important enough to worry about yet.&lt;br /&gt;&lt;br /&gt;One drawback of including all libraries all the time is that it makes it difficult to work on them.  One mistake in any of those files will bring down every page on the entire site.  Be very, very careful.&lt;br /&gt;&lt;br /&gt;If you are not as lazy as me then perhaps you’d prefer the conditional include technique.  It’s simple to use and implement.  Just structure all of your library files like the example below:&lt;br /&gt;&lt;br /&gt;&lt;?php // liba.inc&lt;br /&gt;&lt;br /&gt;if ( defined( '__LIBA_INC' ) ) return;&lt;br /&gt;define( '__LIBA_INC', 1 );&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt; * Library code here.&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;?&gt;&lt;br /&gt;Then you just need to include this library in any script where it is used.  Libraries may also need to include other libraries.  Your include statements look the same as normal:&lt;br /&gt;&lt;br /&gt;include(‘liba.inc’);&lt;br /&gt;&lt;br /&gt;This way, the calling scripts don't have to do any of the work.  Unfortunately return won't work from require()d files in PHP4 anymore. So, you will need to use include() instead.  You can still use require() in PHP3.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3.1.3.2       Design Patterns for Web Programming&lt;br /&gt;&lt;br /&gt;Some of the best web programming techniques are captured in the Web Programming Design Patterns.  They are high level descriptions of the best solutions to common web programming problems.  You can read more about these here:&lt;br /&gt;&lt;br /&gt;http://www.e-gineer.com/articles/design-patterns-in-web-programming.phtml&lt;br /&gt;&lt;br /&gt;4          Speed of Coding, Not Speed of Code&lt;br /&gt;&lt;br /&gt;4.1.1       Introduction&lt;br /&gt;&lt;br /&gt;The hardest thing for me to learn as a web programmer was to change the way I wrote code.  Coming from a product development and university background the emphasis is on doing it the right way.  Products have to be as close to perfect as possible before release.  School assignments need to be perfect.&lt;br /&gt;&lt;br /&gt;The web is different.  Here it is more important to finish a project as soon as possible than it is to get it perfect first time. Web sites are evolutionary, there is no freeze date after which it is difficult to make changes.&lt;br /&gt;&lt;br /&gt;I like to think of my web sites as prototypes.  Everyday they get a little closer to being finished.  I can throw together 3 pages in the time it would take to do one perfectly.  It’s usually better on the web to release all three and then decide where your priorities lie.  Speed is all important.&lt;br /&gt;&lt;br /&gt;So, everything you do as a programmer should be focused on the speed at which you are producing code (pages).&lt;br /&gt;&lt;br /&gt;4.1.2       Optimizations to Satisfy Your Hacker Instinct&lt;br /&gt;&lt;br /&gt;4.1.2.1       Introduction&lt;br /&gt;&lt;br /&gt;This section describes some tricks you can use to speed up your PHP code.  Most of them make very little difference when compared to the time taken for parsing, database queries and sending data down a modem.&lt;br /&gt;&lt;br /&gt;They are useful to know both so you can feel you are optimizing your code and to aid your understanding of certain PHP concepts.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.1.2.2       Use Inline Tags Instead of echo&lt;br /&gt;&lt;br /&gt;The PHP interpreter gets invoked once for each page.  Whatever is not contained in PHP tags like &lt;? ?&gt; is just echoed back out by the interpreter.&lt;br /&gt;&lt;br /&gt;As a result it is faster to use lots of little in-line tags than it is to build massive strings or use echo statements.&lt;br /&gt;&lt;br /&gt;Let’s use the timing functions we developed above to run a quick test.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Test Inline Tags vs echo&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php ss_timing_start('echo'); ?&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;for ($i=0; $i&lt;1000; $i++) {&lt;br /&gt;    echo $i."&lt;br /&gt;";&lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;?php ss_timing_stop('echo'); ?&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php ss_timing_start(str); ?&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;$str = '';&lt;br /&gt;for ($i=0; $i&lt;1000; $i++) {&lt;br /&gt;    $str .= $i."&lt;br /&gt;";&lt;br /&gt;}&lt;br /&gt;echo $str;&lt;br /&gt;?&gt;&lt;br /&gt;&lt;?php ss_timing_stop(str); ?&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;?php ss_timing_start(inline); ?&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;for ($i=0; $i&lt;1000; $i++) {&lt;br /&gt;?&gt;&lt;br /&gt;123&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;?php ss_timing_stop(inline); ?&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Results&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;echo - &lt;?php echo ss_timing_current('echo') ?&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;str - &lt;?php echo ss_timing_current(str) ?&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;inline - &lt;?php echo ss_timing_current(inline) ?&gt;&lt;br /&gt;&lt;br /&gt;The results of this test averaged out to be:&lt;br /&gt;&lt;br /&gt;echo   - 0.063347 secs&lt;br /&gt;str    - 0.083996 secs&lt;br /&gt;inline - 0.035276 secs&lt;br /&gt;&lt;br /&gt;We can see that inline is clearly the fastest technique.  But, when we consider that we only save 0.03 milliseconds each time we use it, the method you use to echo your values is pretty much irrelevant. A moral victory at best…&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.1.2.3       str_replace vs ereg_replace&lt;br /&gt;&lt;br /&gt;It’s predictable that the simple str_replace() will be significantly faster than ereg_replace.  A quick test also reveals the time difference when we introduce a simple pattern match into the ereg_replace.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Test str_replace vs ereg&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php $string = 'Testing with &lt;i&gt;emphasis&lt;/i&gt;'; ?&gt;&lt;br /&gt;&lt;?php ss_timing_start('str_replace'); ?&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;for ($i=0; $i&lt;1000; $i++) {&lt;br /&gt;    str_replace('i&gt;', 'b&gt;', $string).'&lt;br /&gt;';&lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;?php ss_timing_stop('str_replace'); ?&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php ss_timing_start(ereg); ?&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;for ($i=0; $i&lt;1000; $i++) {&lt;br /&gt;    ereg_replace('i&gt;', 'b&gt;', $string).'&lt;br /&gt;';&lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;?php ss_timing_stop(ereg); ?&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php ss_timing_start(ereg_pattern); ?&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;for ($i=0; $i&lt;1000; $i++) {&lt;br /&gt;    ereg_replace('&lt;([/]*)i&gt;', '&lt;\1b&gt;', $string).'&lt;br /&gt;';&lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;?php ss_timing_stop(ereg_pattern); ?&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Results&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;str_replace - &lt;?php echo ss_timing_current(str_replace) ?&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;ereg - &lt;?php echo ss_timing_current(ereg) ?&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;ereg_pattern - &lt;?php echo ss_timing_current(ereg_pattern) ?&gt;&lt;br /&gt;&lt;br /&gt;Here are the results.  Notice how using the simple pattern in ereg_replace has almost doubled the execution time.&lt;br /&gt;&lt;br /&gt;str_replace - 0.089757&lt;br /&gt;ereg - 0.149406&lt;br /&gt;ereg_pattern - 0.248881&lt;br /&gt;&lt;br /&gt;Again, the difference of these functions relative to one another is noticable but in the context of returning a web page basically irrelevant.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.1.2.4       Quoted Strings&lt;br /&gt;&lt;br /&gt;PHP parses double quoted strings to look for variables.  Any variable contained in a double quoted string will be resolved and inserted into the string at that location.&lt;br /&gt;&lt;br /&gt;Single quoted strings are printed exactly as they appear.  They are not parsed.&lt;br /&gt;&lt;br /&gt;So, you should use single quoted strings where possible to reduce the work to be done by the parser.&lt;br /&gt;&lt;br /&gt;4.1.3       Optimizations that Really Make a Difference&lt;br /&gt;&lt;br /&gt;4.1.3.1       Reduce queries&lt;br /&gt;&lt;br /&gt;Accessing the database is expensive.  Persistent connections reduce a lot of the overhead by removing the need to connect with each request, but performing queries is still a high cost exercise compared with the execution of PHP code.&lt;br /&gt;&lt;br /&gt;This is particularly true due to locking issues in the database.  In testing you might see that individual queries to the database are actually quite fast.  In production you will see the database get overloaded with many small queries as it struggles to satisfy a single large query.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.1.3.2       Optimize your Queries&lt;br /&gt;&lt;br /&gt;The type of queries you make to the database will have a dramatic effect on the speed of your application.  Making smart use of column indexes is essential.  Small changes to your SQL can result in dramatic time savings.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.1.3.3       Avoid joins&lt;br /&gt;&lt;br /&gt;Joins are expensive.  The minute you do a join the size of the resulting table becomes the multiple of the tables being joined.&lt;br /&gt;&lt;br /&gt;Lets look at some quick statistics to give you a feel for the cost of joins.  I have created two tables, foo and big_foo.  Foo contains a single column with the numbers 1-1000.  Big_foo contains a single column with the numbers 1-1,000,000.  So, big_foo is equivalent in size to the join of foo with itself.&lt;br /&gt;&lt;br /&gt;$db-&gt;query(“select * from foo”);&lt;br /&gt;0.032273 secs&lt;br /&gt;&lt;br /&gt;$db-&gt;next_record();&lt;br /&gt;0.00048999999999999 secs&lt;br /&gt;$db-&gt;query(“insert into foo values (NULL)”);&lt;br /&gt;0.019506 secs&lt;br /&gt;&lt;br /&gt;$db-&gt;query(“select * from foo as a, foo as b”);&lt;br /&gt;17.280596 secs&lt;br /&gt;&lt;br /&gt;$db-&gt;query(“select * from foo as a, foo as b where a.id &gt; b.id”);&lt;br /&gt;14.645251 secs&lt;br /&gt;&lt;br /&gt;$db-&gt;query(“select * from foo as a, foo as b where a.id = b.id”);&lt;br /&gt;0.041269 secs&lt;br /&gt;&lt;br /&gt;$db-&gt;query(“select * from big_foo”);&lt;br /&gt;25.393672 secs&lt;br /&gt;&lt;br /&gt;We can see from the results above that selecting all rows from the join of a 1000 row table is only marginally quicker than selecting all rows from a 1,000,000 row table.&lt;br /&gt;&lt;br /&gt;It is worth noting that a join that returns a small number of rows is still very fast.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.1.3.4       Make your pages smaller&lt;br /&gt;&lt;br /&gt;Let’s consider a typical user on a 56Kbps modem.  On a good connection, they can download pages at approximately 6kBps.  We were looking at optimizations above that save approximately 0.15 seconds on an extremely complex page.  Reducing the size of your page by about 900 bytes will give you an equivalent saving.&lt;br /&gt;&lt;br /&gt;Usually response times for the user are gained most easily through examination of your HTML and optimizing the use of images.&lt;br /&gt;&lt;br /&gt;4.1.4       Gotchas&lt;br /&gt;&lt;br /&gt;4.1.4.1       Introduction&lt;br /&gt;&lt;br /&gt;This section will be quite small since most PHP developers are now making the switch to PHP4.  The parsing engine has been completely rewritten and has removed a lot of the annoying quirks that can bring a lot of grief to both newcomers and experienced PHP programmers.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.1.4.2       Arrays of Objects&lt;br /&gt;&lt;br /&gt;PHP3 does not handle arrays of objects very well.  The following code will NOT parse correctly:&lt;br /&gt;&lt;br /&gt;$a[$i]-&gt;foo();&lt;br /&gt;&lt;br /&gt;PHP does not like the object reference after the array index brackets.  Instead you need to use a temporary variable:&lt;br /&gt;&lt;br /&gt;$tmp = $a[$i];&lt;br /&gt;$tmp-&gt;foo();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.1.4.3       Calling overridden methods&lt;br /&gt;&lt;br /&gt;PHP3 has support for classes and inheritence.  You can even override functions in subclasses.  Problems occur when you need to call the overridden function in the parent class.  Unfortunately this is quite common as you may want to define the function in the subclass as being the original function plus some extra work.  If that explanation has made you completely confused take a look at the example below.&lt;br /&gt;&lt;br /&gt;There is a (hacky) work around.  The basic idea is to define a unique method name in each class for the same method.  Then the extended class can reference directly to the unique method name in its parent.&lt;br /&gt;&lt;br /&gt;To achieve the appearance of polymorphism when using the class you just create a method with the desired name in every class definition that calls the unique method name in that class.  An example will explain it better:&lt;br /&gt;&lt;br /&gt;class A {&lt;br /&gt;  function A() { }&lt;br /&gt;&lt;br /&gt;  function A_dspTwo() {&lt;br /&gt;    echo "A: Two&lt;br /&gt;";&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function dspTwo() {&lt;br /&gt;    return $this-&gt;A_dspTwo();  // call the class A dspTwo method&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;class B extends A {&lt;br /&gt;  function B() {&lt;br /&gt;    $this-&gt;A(); // call the parent constructor.&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function B_dspTwo() {&lt;br /&gt;    $this-&gt;A_dspTwo();&lt;br /&gt;    echo "B: Two&lt;br /&gt;";&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function dspTwo() {&lt;br /&gt;    return $this-&gt;B_dspTwo();&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$object = new B();&lt;br /&gt;$object-&gt;dspTwo();&lt;br /&gt;This is supported by the Zend engine and will thus be supported in PHP 4.0.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.1.4.4       Trouble with Types&lt;br /&gt;&lt;br /&gt;PHP is a loosely typed language.  That means that the variables actually do have types, but in general you do not need to worry about them.  PHP will automatically convert variables between types when required.&lt;br /&gt;&lt;br /&gt;Unfortunately there are some cases where you need to manually convert the type of variables.  This can lead to confusion because they are very rare.  Below is an example page to highlight how rare these cases can be:&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Test String Integer Comparisons&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;$a = 1;&lt;br /&gt;$b = '2';&lt;br /&gt;if ($a &lt; $b) {&lt;br /&gt;    echo ss_as_string($a).' &lt; '.ss_as_string($b);&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;    echo ss_as_string($a).' &gt;= '.ss_as_string($b);&lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;$a = 2;&lt;br /&gt;$b = '2';&lt;br /&gt;if ($a == $b) {&lt;br /&gt;    echo ss_as_string($a).' == '.ss_as_string($b);&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;    echo ss_as_string($a).' != '.ss_as_string($b);&lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;$a = array(2, '1');&lt;br /&gt;if ($a[0] &gt; $a[1]) {&lt;br /&gt;    echo ss_as_string($a[0]).' &gt; '.ss_as_string($a[1]);&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;    echo ss_as_string($a[0]).' &lt;= '.ss_as_string($a[1]);&lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;?&lt;br /&gt;$a = array('2', '1');&lt;br /&gt;echo ss_as_string($a).'&lt;br /&gt;sorts to&lt;br /&gt;';&lt;br /&gt;sort($a);&lt;br /&gt;echo ss_as_string($a);&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;?&lt;br /&gt;$a = array(2, 1);&lt;br /&gt;echo ss_as_string($a).'&lt;br /&gt;sorts to&lt;br /&gt;';&lt;br /&gt;sort($a);&lt;br /&gt;echo ss_as_string($a);&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;?&lt;br /&gt;$a = array('2', 1);&lt;br /&gt;echo ss_as_string($a).'&lt;br /&gt;sorts to&lt;br /&gt;';&lt;br /&gt;sort($a);&lt;br /&gt;echo ss_as_string($a);&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;?&lt;br /&gt;$a = array(2, '1');&lt;br /&gt;echo ss_as_string($a).'&lt;br /&gt;sorts to&lt;br /&gt;';&lt;br /&gt;sort($a);&lt;br /&gt;echo ss_as_string($a);&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;Here is the output from these tests.  Notice that all the tests work correctly except for the last one, sorting array(2, ‘1’).  We can even sort array(‘2’, 1) without problems.  The error occurs when we have multiple types in an array passed to the sort function with the order number then string.&lt;br /&gt;&lt;br /&gt;Long(1) &lt; String(2)&lt;br /&gt;&lt;br /&gt;Long(2) == String(2)&lt;br /&gt;&lt;br /&gt;Long(2) &gt; String(1)&lt;br /&gt;&lt;br /&gt;Array(0 ==&gt; String(2)1 ==&gt; String(1))sorts toArray(0 ==&gt; String(1)1 ==&gt; String(2))&lt;br /&gt;&lt;br /&gt;Array(0 ==&gt; Long(2)1 ==&gt; Long(1))sorts toArray(0 ==&gt; Long(1)1 ==&gt; Long(2))&lt;br /&gt;&lt;br /&gt;Array(0 ==&gt; String(2)1 ==&gt; Long(1))sorts toArray(0 ==&gt; Long(1)1 ==&gt; String(2))&lt;br /&gt;&lt;br /&gt;Array(0 ==&gt; Long(2)1 ==&gt; String(1))sorts toArray(0 ==&gt; Long(2)1 ==&gt; String(1))&lt;br /&gt;&lt;br /&gt;4.1.5       Tricky Concepts&lt;br /&gt;&lt;br /&gt;4.1.5.1       Include vs Require&lt;br /&gt;&lt;br /&gt;Include() and require() are slightly different.  Basically, include is conditional and require is not.&lt;br /&gt;&lt;br /&gt;This would include 'somefile' if $something is true:&lt;br /&gt;&lt;br /&gt;if($something){&lt;br /&gt;    include("somefile");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;This would include 'somefile' unconditionally&lt;br /&gt;&lt;br /&gt;if($something){&lt;br /&gt;    require("somefile");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;This would have VERY strange effects if somefile looked like:&lt;br /&gt;&lt;br /&gt;} echo "Ha!  I'm here regardless of something: $something&lt;br /&gt;\n";&lt;br /&gt;if (false) {&lt;br /&gt;&lt;br /&gt;Another interesting example is to consider what will happen if you use include() or require() inside a loop.&lt;br /&gt;&lt;br /&gt;$i = 1;&lt;br /&gt;while ($i &lt; 3) {&lt;br /&gt;    require(“somefile.$i”);&lt;br /&gt;    $i++;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Using require() as above will cause the same file to be used every single iteration.  Clearly this is not the intention since the file name should be changing in each iteration of the loop.  We need to use include() as below.  Include() will be evaluated at each iteration of the loop including somefile.0, somefile.1, etc as expected.&lt;br /&gt;&lt;br /&gt;$i = 1;&lt;br /&gt;while ($i &lt; 3) {&lt;br /&gt;    include(“somefile.$i”);&lt;br /&gt;    $i++;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;The only interesting question that remains is what file will be required above.  It turns out that PHP uses the value of $i when it reads the require() statement for the first time.  So, the require() loop above will include something.1 two times.  The include() loop includes something.1 and something.2.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.1.5.2       Echo vs Print&lt;br /&gt;&lt;br /&gt;There is a difference between the two, but speed-wise it should be irrelevant which one you use.  print() behaves like a function in that you can do:&lt;br /&gt;&lt;br /&gt;$ret = print "Hello World";&lt;br /&gt;&lt;br /&gt;and $ret will be 1.&lt;br /&gt;&lt;br /&gt;That means that print can be used as part of a more complex expression where echo cannot.  print is also part of the precedence table which it needs to be if it is to be used&lt;br /&gt;within a complex expression.  It is just about at the bottom of the precendence list though.  Only "," AND, OR and XOR are lower.&lt;br /&gt;&lt;br /&gt;echo is marginally faster since it doesn't set a return value if you really want to get down to the nitty gritty.&lt;br /&gt;&lt;br /&gt;If the grammar is:&lt;br /&gt;&lt;br /&gt;echo expression [, expression[, expression] ... ]&lt;br /&gt;&lt;br /&gt;Then&lt;br /&gt;&lt;br /&gt;echo ( expression, expression )&lt;br /&gt;&lt;br /&gt;is not valid.  ( expression ) reduces to just an expression so this would be valid:&lt;br /&gt;&lt;br /&gt;echo ("howdy"),("partner");&lt;br /&gt;&lt;br /&gt;but you would simply write this as:&lt;br /&gt;&lt;br /&gt;echo "howdy","partner";&lt;br /&gt;&lt;br /&gt;if you wanted to use two expressions.  Putting the brackets in there serves no purpose since there is no operator precendence issue with a single expression like that.&lt;br /&gt;&lt;br /&gt;4.1.6       Scripting with PHP&lt;br /&gt;&lt;br /&gt;It’s easy to forget that PHP is a complete programming language that can be used for more than just generating web pages.  I was once writing a script to receive emails and place them in a database.  I was fumbling around in Perl and shell scripts until it dawned on me to install PHP for scripting.  30 minutes later the emails were churning in.&lt;br /&gt;&lt;br /&gt;Installing PHP for scripting on unix is easy.  Just remove the –with-apache directive from your configure options.  This will create the PHP binary that can be used to run scripts directly from the command line.  There are complete instructions for installing PHP for scripting here:&lt;br /&gt;&lt;br /&gt;http://www.e-gineer.com/instructions&lt;br /&gt;&lt;br /&gt;You can then write your script like any other shell script.  Here is an example:&lt;br /&gt;&lt;br /&gt;#!/usr/local/bin/php –q&lt;br /&gt;&lt;?php&lt;br /&gt;// your php code here&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;Once you start scripting with PHP the possibilities are endless.  It’s a fully featured language, you can do anything you would normally do in a shell script.&lt;br /&gt;&lt;br /&gt;4.1.7       Extreme Programming&lt;br /&gt;&lt;br /&gt;We are getting a little off topic here, but I believe programming techniques are an important part of being a good programmer.&lt;br /&gt;&lt;br /&gt;My working style is based on the ideas of Extreme Programming.  From the Extreme Programming web site:&lt;br /&gt;&lt;br /&gt;XP improves a software project in four essential ways; communication, simplicity, feedback, and courage. XP programmers communicate with their customers and fellow programmers. They keep their design simple and clean. They get feedback by testing their software starting on day one. They deliver the system to the customers as early as possible and implement changes as suggested. With this foundation XP programmers are able to courageously respond to changing requirements and technology.&lt;br /&gt;&lt;br /&gt;The focus on speed and change is what makes Extreme Programming so suitable for web projects.&lt;br /&gt;&lt;br /&gt;You can learn more about Extreme Programming here:&lt;br /&gt;&lt;br /&gt;http://www.extremeprogramming.org&lt;br /&gt;&lt;br /&gt;5          Getting Help&lt;br /&gt;&lt;br /&gt;There are a number of resources available for PHP help.  The PHP community is generous with its time and assistance.  Make use of their contributions and use the time you save to help others.&lt;br /&gt;&lt;br /&gt;The PHP Knowledge Base is a growing collection of PHP related information.  It captures the knowledge from the mailing list into a complete collection of searchable, correct answers.  Of course, I may be a little biased.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://php.faqts.com/"&gt;http://php.faqts.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The PHP manual is a great reference point for information on functions or language constructs.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://php.faqts.com/"&gt;http://www.php.net/manual&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you can’t find the relevant information in the PHP Knowledge Base your next stop should be the mailing list archives.  There are thousands of questions on the mailing list every month so you can be almost certain your question has been asked before.  Prepare to do some wading.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.progressive-comp.com/Lists/?l=php3-general&amp;r=1&amp;amp;w=2"&gt;http://www.progressive-comp.com/Lists/?l=php3-general&amp;r=1&amp;amp;w=2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If all that searching fails to help, try asking on the mailing list.  A lot of PHP gurus reside there.&lt;br /&gt;&lt;br /&gt;&lt;a href="mailto:php3@lists.php.net"&gt;php3@lists.php.net&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If all these on-line resources aren’t enough or you hate reading from a computer screen, you might be interested in one of the many PHP books that are now available.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://php.faqts.com/"&gt;http://www.php.net/books.php3&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="https://www.youtube.com/channel/UCQ9rpSj3m2lCD_Sb3gPpybQ"&gt;celebrity fashion channel&lt;/a&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item></channel></rss>